MjAwODAyMTAKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGNobEBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMS8xMSAwNzoyMjoyOAogICAgIFtzZnRwLWNsaWVudC5jIHNmdHAtY2xpZW50LmhdCiAgICAgZGlzYWJsZSB1bnVzZWQgZnVuY3Rpb25zCiAgICAgaW5pdGlhbGx5IGZyb20gdG9iaWFzQCwgYnV0IGRpc2FibGVkIHRoZW0gYnkgcGxhY2luZyB0aGVtIGluCiAgICAgIiNpZmRlZiBub3R5ZXQiIHdoaWNoIHdhcyBhc2tlZCBieSBkam1ACiAgICAgb2sgZGptQCB0b2JpYXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzAxLzE5IDE5OjEzOjI4CiAgICAgW3NzaC4xXQogICAgIHNhdGlzZnkgdGhlIHBlZGFudHM6IC1xIGRvZXMgbm90IHN1cHByZXNzIGFsbCBkaWFnbm9zdGljIG1lc3NhZ2VzIChlLmcuCiAgICAgc29tZSBjb21tYW5kbGluZSBwYXJzaW5nIHdhcm5pbmdzIGdvIHVuY29uZGl0aW9uYWxseSB0byBzdGRvdXQpLgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMS8xOSAyMDo0ODo1MwogICAgIFtjbGllbnRsb29wLmNdCiAgICAgZmQgbGVhayBvbiBzZXNzaW9uIG11bHRpcGxleGluZyBlcnJvciBwYXRoLiBSZXBvcnQgYW5kIHBhdGNoIGZyb20KICAgICBncmVnb3J5X3NoaXZlbHkgQVQgZmFubmllbWFlLmNvbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMS8xOSAyMDo1MToyNgogICAgIFtzc2guY10KICAgICBpZ25vcmUgU0lHUElQRSBpbiBtdWx0aXBsZXggY2xpZW50IG1vZGUgLSB3ZSBjYW4gcmVjZWl2ZSB0aGlzIGlmIHRoZQogICAgIHNlcnZlciBydW5zIG91dCBvZiBmZHMgb24gdXMgbWlkd2F5LiBSZXBvcnQgYW5kIHBhdGNoIGZyb20KICAgICBncmVnb3J5X3NoaXZlbHkgQVQgZmFubmllbWFlLmNvbQoKMjAwODAxMTkKIC0gKGRqbSkgU2lsZW5jZSBub2ljZSBmcm9tIGV4cHIgaW4gc3NoLWNvcHktaWQ7IHBhdGNoIGZyb20KICAgbWlrZWwgQVQgbWlrZWx3YXJkLmNvbQogLSAoZGptKSBPbmx5IGxpc3RlbiBmb3IgSVB2NiBjb25uZWN0aW9ucyBvbiBBRl9JTkVUNiBzb2NrZXRzOyBwYXRjaCBmcm9tCiAgIHRzcjI2MDAgQVQgZ21haWwuY29tCgoyMDA4MDEwMgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRml4IG1lc3NhZ2UgZm9yIC1mc3RhY2stcHJvdGVjdG9yLWFsbCB0ZXN0LgoKMjAwODAxMDEKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEyLzMxIDEwOjQxOjMxCiAgICAgW3JlYWRjb25mLmMgc2VydmNvbmYuY10KICAgICBQcmV2ZW50IHN0cmljdC1hbGlhc2luZyB3YXJuaW5ncyBvbiBuZXdlciBnY2MgdmVyc2lvbnMuICBieiAjMTM1NSwgcGF0Y2gKICAgICBmcm9tIERtaXRyeSBWLiBMZXZpbiwgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTIvMzEgMTU6Mjc6MDQKICAgICBbc3NoZC5jXQogICAgIFdoZW4gaW4gaW5ldGQgbW9kZSwgaGF2ZSBzc2hkIGdlbmVyYXRlIGEgUHJvdG9jb2wgMSBlcGhlbWVyYWwgc2VydmVyCiAgICAga2V5IG9ubHkgZm9yIGNvbm5lY3Rpb25zIHdoZXJlIHRoZSBjbGllbnQgY2hvb3NlcyBQcm90b2NvbCAxIGFzIG9wcG9zZWQKICAgICB0byB3aGVuIGl0J3MgZW5hYmxlZCBpbiB0aGUgc2VydmVyJ3MgY29uZmlnLiAgU3BlZWRzIHVwIFByb3RvY29sIDIKICAgICBjb25uZWN0aW9ucyB0byBpbmV0ZC1tb2RlIHNlcnZlcnMgdGhhdCBhbHNvIGFsbG93IFByb3RvY29sIDEuICBieiAjNDQwLAogICAgIGJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBicnVubyBhdCB3b2xmZi50bywgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMDEgMDg6NDc6MDQKICAgICBbbWlzYy5jXQogICAgIHNwYWNlcyAtPiB0YWJzIGZyb20gbXkgcHJldmlvdXMgY29tbWl0CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMS8wMSAwOTowNjozOQogICAgIFtzY3AuY10KICAgICBJZiBzY3AgLXAgZW5jb3VudGVycyBhIHByZS1lcG9jaCB0aW1lc3RhbXAsIHVzZSB0aGUgZXBvY2ggd2hpY2ggaXMKICAgICBhcyBjbG9zZSBhcyB3ZSBjYW4gZ2V0IGdpdmVuIHRoYXQgaXQncyB1c2VkIHVuc2lnbmVkLiAgQWRkIGEgbGl0dGxlCiAgICAgZGVidWdnaW5nIHdoaWxlIHRoZXJlLiAgYnogIzgyOCwgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMDEgMDk6Mjc6MzMKICAgICBbc3NoZF9jb25maWcuNSBzZXJ2Y29uZi5jXQogICAgIEFsbG93IFBlcm1pdFJvb3RMb2dpbiBpbiBhIE1hdGNoIGJsb2NrLiAgQWxsb3dzIGZvciwgZWcsIHBlcm1pdHRpbmcgcm9vdAogICAgIG9ubHkgZnJvbSB0aGUgbG9jYWwgbmV0d29yay4gIG9rIG1hcmt1c0AsIG1hbiBwYWdlIGJpdCBvayBqbWNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMS8wMSAwODo1MToyMAogICAgIFttb2R1bGldCiAgICAgVXBkYXRlZCBtb2R1bGkgZmlsZTsgb2sgZGptQAoKMjAwNzEyMzEKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvZ2xvYi57YyxofV0gQnVnICMxNDA3OiBmb3JjZSB1c2Ugb2YKICAgYnVpbHRpbiBnbG9iIGltcGxlbWVudGF0aW9uIG9uIE1hYyBPUyBYLiAgQmFzZWQgb24gYSBwYXRjaCBmcm9tCiAgIHZnaWZmaW4gYXQgYXBwbGUuCgoyMDA3MTIyOQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMi8xMiAwNTowNDowMwogICAgIFtzZnRwLmNdCiAgICAgdW5icmVhayBsbHMgY29tbWFuZCBhbmQgYWRkIGEgcmVncmVzcyB0ZXN0IHRoYXQgd291bGQgaGF2ZSBjYXVnaHQgdGhlCiAgICAgYnJlYWthZ2U7IHNwb3R0ZWQgYnkgbW91cmluZ0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEyLzI3IDE0OjIyOjA4CiAgICAgW3NlcnZjb25mLmMgY2Fub2hvc3QuYyBtaXNjLmMgY2hhbm5lbHMuYyBzc2hjb25uZWN0LmMgbWlzYy5oIHNzaC1rZXlzY2FuLmMKICAgICAgc3NoZC5jXQogICAgIEFkZCBhIHNtYWxsIGhlbHBlciBmdW5jdGlvbiB0byBjb25zaXN0ZW50bHkgaGFuZGxlIHRoZSBFQUlfU1lTVEVNIGVycm9yCiAgICAgY29kZSBvZiBnZXRhZGRyaW5mby4gIFByb21wdGVkIGJ5IHZnaWZmaW4gYXQgYXBwbGUgY29tIHZpYSBieiAjMTQxNy4KICAgICBvayBtYXJrdXNAIHN0ZXZlc2tACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMi8yOCAxNTozMjoyNAogICAgIFtjbGllbnRsb29wLmMgc2VydmVybG9vcC5jIHBhY2tldC5jXQogICAgIE1ha2UgU1NIMl9NU0dfVU5JTVBMRU1FTlRFRCBhbmQgU1NIMl9NU0dfSUdOT1JFIG1lc3NhZ2VzIHJlc2V0IHRoZQogICAgIFNlcnZlckFsaXZlIGFuZCBDbGllbnRBbGl2ZSB0aW1lcnMuICBQcmV2ZW50cyBkcm9wcGluZyBhIGNvbm5lY3Rpb24KICAgICB3aGVuIHRoZXNlIGFyZSBlbmFibGVkIGJ1dCB0aGUgcGVlciBkb2VzIG5vdCBzdXBwb3J0IG91ciBrZWVwYWxpdmVzLgogICAgIGJ6ICMxMzA3LCBvayBkam1ALgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTIvMjggMjI6MzQ6NDcKICAgICBbY2xpZW50bG9vcC5jXQogICAgIFVzZSB0aGUgY29ycmVjdCBwYWNrZXQgbWF4aW11bSBzaXplcyBmb3IgcmVtb3RlIHBvcnQgYW5kIGFnZW50IGZvcndhcmRpbmcuCiAgICAgUHJldmVudHMgdGhlIHNlcnZlciBmcm9tIGtpbGxpbmcgdGhlIGNvbm5lY3Rpb24gaWYgdG9vIG11Y2ggZGF0YSBpcyBxdWV1ZWQKICAgICBhbmQgYW4gZXhjZXNzaXZlbHkgbGFyZ2UgcGFja2V0IGdldHMgc2VudC4gIGJ6ICMxMzYwLCBvayBkam1ALgoKMjAwNzEyMDIKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEVuYWJsZSAtZnN0YWNrLXByb3RlY3Rvci1hbGwgb24gc3lzdGVtcyB3aGVyZQogICBnY2Mgc3VwcG9ydHMgaXQuICBvayBkam1ACiAtIChkdHVja2VyKSBbc2NwLmNdIFVwZGF0ZSAkT3BlbkJTRCB0YWcgbWlzc2luZyBmcm9tIHJldiAxLjE3NSBhbmQgcmVtb3ZlCiAgIGxlZnRvdmVyIGRlYnVnIGNvZGUuCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8yOSAwMDo1Mjo0NQogICAgIFthdXRoMi1nc3MuY10KICAgICBBbGxvdyBidWlsZCB3aXRob3V0IC1ER1NTQVBJOyBvayBkZXJhYWR0QAogICAgIChJZCBzeW5jIG9ubHksIFBvcnRhYmxlIGFscmVhZHkgaGFzIHRoZSBpZmRlZnMpCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8yOSAwMTo1NTowNAogICAgIFtzc2guY10KICAgICBQbHVnIHRpbnkgbWVtIGxlYWtzIGluIENvbnRyb2xQYXRoIGFuZCBQcm94eUNvbW1hbmQgb3B0aW9uIHByb2Nlc3Npbmc7CiAgICAgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTAvMjkgMDQ6MDg6MDgKICAgICBbbW9uaXRvcl93cmFwLmMgbW9uaXRvci5jXQogICAgIFNlbmQgY29uZmlnIGJsb2NrIGJhY2sgdG8gc2xhdmUgZm9yIGludmFsaWQgdXNlcnMgdG9vIHNvIG9wdGlvbnMKICAgICBzZXQgYnkgYSBNYXRjaCBibG9jayAoZWcgQmFubmVyKSBiZWhhdmUgdGhlIHNhbWUgZm9yIG5vbi1leGlzdGVudAogICAgIHVzZXJzLiAgRm91bmQgYnkgYW5kIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEwLzI5IDA2OjUxOjU5CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBQcm94eUNvbW1hbmQgYW5kIExvY2FsQ29tbWFuZCB1c2UgdGhlIHVzZXIncyBzaGVsbCwgbm90IC9iaW4vc2g7IG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEwLzI5IDA2OjU0OjUwCiAgICAgW3NzaC5jXQogICAgIE1ha2UgTG9jYWxDb21tYW5kIHdvcmsgZm9yIFByb3RvY29sIDEgdG9vOyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEwLzI5IDA3OjQ4OjE5CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBjbGVhbiB1cCBhZnRlciBwcmV2aW91cyBtYWNybyByZW1vdmFsOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMS8wMyAwMDozNjoxNAogICAgIFtjbGllbnRsb29wLmNdCiAgICAgZml4IG1lbW9yeSBsZWFrIGluIHByb2Nlc3NfY21kbGluZSgpLCBwYXRjaCBmcm9tIEphbi5QZWNoYW5lYyBBVCBTdW4uQ09NOwogICAgIG9rIGR0dWNrZXJACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMS8wMyAwMToyNDowNgogICAgIFtzc2guY10KICAgICBieiAjMTM3NzogZ2V0cHd1aWQgcmVzdWx0cyB3ZXJlIGJlaW5nIGNsb2JiZXJlZCBieSBhbm90aGVyIGdldHB3KiBjYWxsCiAgICAgaW5zaWRlIHRpbGRlX2V4cGFuZF9maWxlbmFtZSgpOyBzYXZlIHRoZSBkYXRhIHdlIG5lZWQgY2FyZWZ1bGx5CiAgICAgb2sgZGptCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMS8wMyAwMjowMDozMgogICAgIFtzc2guY10KICAgICBVc2UgeHN0cmR1cC94ZnJlZSB3aGVuIHNhdmluZyBwd25hbWUgYW5kIHB3ZGlyOyBvayBkZXJhYWR0QAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTEvMDMgMDI6MDM6NDkKICAgICBbc3NoLmNdCiAgICAgYXZvaWQgZXJybm8gdHJhc2hpbmcgaW4gc2lnbmFsIGhhbmRsZXI7IG9rIGR0dWNrZXIKCjIwMDcxMDMwCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTAvMjkgMjM6NDk6NDEKICAgICBbb3BlbmJzZC1jb21wYXQvc3lzLXRyZWUuaF0KICAgICByZW1vdmUgZXh0cmEgYmFja3NsYXNoIGF0IHRoZSBlbmQgb2YgUkJfUFJPVE9UWVBFLCByZXBvcnQgZnJvbQogICAgIEphbi5QZWNoYW5lYyBBVCBTdW4uQ09NOyBvayBkZXJhYWR0QAoKMjAwNzEwMjYKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMTEgMjM6NDk6MDkKICAgICBbc3NocHR5LmNdCiAgICAgcmVtb3ZlICNpZiBkZWZpbmVkIGJsb2NrIG5vdCBuZWVkZWQ7IG9rIG1hcmt1c0AgZHR1Y2tlckAKICAgICAoTkIuIFJDRCBJRCBzeW5jIG9ubHkgZm9yIHBvcnRhYmxlKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wOS8yMSAwMzowNToyMwogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgZG9jdW1lbnQgS2JkSW50ZXJhY3RpdmVBdXRoZW50aWNhdGlvbiBpbiBzc2hfY29uZmlnLjU7CiAgICAgcGF0Y2ggZnJvbSBka2cgQVQgZmlmdGhob3JzZW1hbi5uZXQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMjEgMDg6MTU6MjkKICAgICBbYXV0aC1ic2RhdXRoLmMgYXV0aC1wYXNzd2QuYyBhdXRoLmMgYXV0aC5oIGF1dGgxLmMgYXV0aDItY2hhbGwuY10KICAgICBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXQogICAgIHVuaWZkZWYgLURCU0RfQVVUSAogICAgIHVuaWZkZWYgLVVTS0VZCiAgICAgVGhlc2Ugb3B0aW9ucyBoYXZlIGJlZW4gaW4gdXNlIGZvciBzb21lIHllYXJzOwogICAgIG9rIG1hcmt1c0AgIm5vIG9iamVjdGlvbiIgbWlsbGVydEAKICAgICAoTkIuIFJDRCBJRCBzeW5jIG9ubHkgZm9yIHBvcnRhYmxlKQogICAtIGNhbmFjYXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMjUgMjM6NDg6NTcKICAgICBbc3NoLWFnZW50LmNdCiAgICAgV2hlbiBhZGRpbmcgYSBrZXkgdGhhdCBhbHJlYWR5IGV4aXN0cywgdXBkYXRlIHRoZSBwcm9wZXJ0aWVzCiAgICAgKHRpbWUsIGNvbmZpcm0sIGNvbW1lbnQpIGluc3RlYWQgb2YgZGlzY2FyZGluZyB0aGVtLiBvayBkam1AIG1hcmt1c0AKICAgLSByYXlAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMjcgMDA6MTU6NTcKICAgICBbZGguY10KICAgICBEb24ndCByZXR1cm4gLTEgb24gZXJyb3IgaW4gZGhfcHViX2lzX3ZhbGlkKCksIHNpbmNlIGl0IGV2YWx1YXRlcwogICAgIHRvIHRydWUuCiAgICAgQWxzbyBmaXggYSB0eXBvLgogICAgIEluaXRpYWwgZGlmZiBmcm9tIE1hdHRoZXcgRGVtcHNreSwgaW5wdXQgZnJvbSBkam0uCiAgICAgT0sgZGptLCBtYXJrdXMuCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8wOS8yOSAwMDoyNTo1MQogICAgIFthdXRoMi5jXQogICAgIFJlbW92ZSB1bnVzZWQgcHJvdG90eXBlLiAgb2sgZGptQAogICAtIGNobEBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8wMiAxNzo0OTo1OAogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgaGFuZGxlcyB6ZXJvLXNpemVkIHN0cmluZ3MgdGhhdCBmZ2V0cyBjYW4gcmV0dXJuCiAgICAgcHJvcGVybHkgcmVtb3ZlcyB0cmFpbGluZyBuZXdsaW5lCiAgICAgcmVtb3ZlcyBhbiB1bnVzZWQgdmFyaWFibGUKICAgICBjb3JyZWN0bHkgY291bnRzIGxpbmUgbnVtYmVyCiAgICAgImxvb2tzIG9rIiByYXlAIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTAvMjIgMTk6MTA6MjQKICAgICBbcmVhZGNvbmYuY10KICAgICBtYWtlIHN1cmUgdGhhdCBib3RoIHRoZSBsb2NhbCBhbmQgcmVtb3RlIHBvcnQgYXJlIGNvcnJlY3Qgd2hlbgogICAgIHBhcnNpbmcgLUw7IEphbiBQZWNoYW5lYyAoYnogIzEzNzgpCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEwLzI0IDAzOjMwOjAyCiAgICAgW3NmdHAuY10KICAgICByZXdvcmsgYXJndW1lbnQgc3BsaXR0aW5nIGFuZCBwYXJzaW5nIHRvIGNvcGUgY29ycmVjdGx5IHdpdGggY29tbW9uCiAgICAgc2hlbGwgZXNjYXBlcyBhbmQgbWFrZSBoYW5kbGluZyBvZiBlc2NhcGVkIGNoYXJhY3RlcnMgY29uc2lzdGVudAogICAgIHdpdGggc2goMSkgYW5kIGJldHdlZW4gc2Z0cCBjb21tYW5kcyAoZXNwZWNpYWxseSBiZXR3ZWVuIG9uZXMgdGhhdAogICAgIGdsb2IgdGhlaXIgYXJndW1lbnRzIGFuZCBvbmVzIHRoYXQgZG9uJ3QpLgogICAgIHBhcnNlIGNvbW1hbmQgZmxhZ3MgdXNpbmcgZ2V0b3B0KDMpIHJhdGhlciB0aGFuIGhhbmQtcm9sbGVkIHBhcnNlcnMuCiAgICAgb2sgZHR1Y2tlckAKICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8yNCAwMzo0NDowMgogICAgIFtzY3AuY10KICAgICBmYWN0b3Igb3V0IG5ldHdvcmsgcmVhZC93cml0ZSBpbnRvIGFuIGF0b21pY2lvKCktbGlrZSBmdW5jdGlvbiwgYW5kCiAgICAgdXNlIGl0IHRvIGhhbmRsZSBzaG9ydCByZWFkcywgYXBwbHkgYmFuZHdpZHRoIGxpbWl0cyBhbmQgdXBkYXRlCiAgICAgY291bnRlcnMuIG1ha2UgbmV0d29yayBJTyBub24tYmxvY2tpbmcsIHNvIGEgc21hbGwgdHJpY2tsZSBvZgogICAgIHJlYWRzL3dyaXRlcyBoYXMgYSBjaGFuY2Ugb2YgdXBkYXRpbmcgdGhlIHByb2dyZXNzIG1ldGVyOyBieiAjNzk5CiAgICAgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMjkgMDk6NDQ6MDAKICAgICBbcmVncmVzcy9zZnRwLWNtZHMuc2hdCiAgICAgY2xlYW4gdXAgb3VyIG1lc3MKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTEvMDYgMDk6Mjc6NDMKICAgICBbcmVncmVzcy9jZmdtYXRjaC5zaF0KICAgICBmaXggcXVvdGluZyBmb3Igbm9uLShjKXNoIGxvZ2luIHNoZWxscy4KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEyLzEzIDA4OjM2OjM2CiAgICAgW3JlZ3Jlc3MvY2ZnbWF0Y2guc2hdCiAgICAgQWRkaXRpb25hbCB0ZXN0IGZvciBtdWx0aXBsZSBQZXJtaXRPcGVuIGVudHJpZXMuICBvayBkam1ACiAgIC0gcHZhbGNoZXZAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMDcgMTk6NDE6NDYKICAgICBbcmVncmVzcy9jaXBoZXItc3BlZWQuc2ggcmVncmVzcy90cnktY2lwaGVycy5zaF0KICAgICB0ZXN0IHVtYWMtNjRAb3BlbnNzaC5jb20KICAgICBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEwLzI0IDAzOjMyOjM1CiAgICAgW3JlZ3Jlc3Mvc2Z0cC1jbWRzLnNoIHJlZ3Jlc3Mvc2Z0cC1nbG9iLnNoIHJlZ3Jlc3MvdGVzdC1leGVjLnNoXQogICAgIGNvbXByZWhlbnNpdmUgdGVzdHMgZm9yIHNmdHAgZXNjYXBpbmcgaXRzIGludGVyYWN0aW9uIHdpdGggZ2xvYmJpbmc7CiAgICAgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTAvMjYgMDU6MzA6MDEKICAgICBbcmVncmVzcy9zZnRwLWdsb2Iuc2ggcmVncmVzcy90ZXN0LWV4ZWMuc2hdCiAgICAgcmVtb3ZlICJlY2hvIC1FIiBjcmFwIHRoYXQgSSBhZGRlZCBpbiBsYXN0IGNvbW1pdCBhbmQgdXNlIHByaW50ZigxKSBmb3IKICAgICBjYXNlcyB3aGVyZSB3ZSBzdHJpY3RseSByZXF1aXJlIGVjaG8gbm90IHRvIHJlcHJvY2VzcyBlc2NhcGUgY2hhcmFjdGVycy4KICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzI4IDE3OjUwOjEyCiAgICAgW29wZW5ic2QtY29tcGF0L2dsb2IuY10KICAgICB1bnVzZWQgYXJnIGluIGludGVybmFsIHN0YXRpYyBBUEkKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8xMSAxODozNjo0MQogICAgIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmhdCiAgICAgdXNlIFJSU0lHIGluc3RlYWQgb2YgU0lHIGZvciBETlNTRUMuIG9rIGRqbUAKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEwLzIxIDA5OjU1OjAzCiAgICAgW29wZW5ic2QtY29tcGF0L2Jhc2U2NC5jXQogICAgIHJlbW92ZSBjYWxscyB0byBhYm9ydCgzKSB0aGF0IGNhbid0IGhhcHBlbiBhbnl3YXk7IGZyb20KICAgICA8YnJldCBkb3QgbGFtYmVydCBhdCBnbWFpbC5jb20+OyBvayBtaWxsZXJ0QCBkZXJhYWR0QAogICAtIGZyYW50emVuQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzI0IDE4OjExOjQ2CiAgICAgW29wZW5ic2QtY29tcGF0L3N5cy10cmVlLmhdCiAgICAgc3luYyB0byBOaWVscyBQcm92b3MnIHZlcnNpb24uICBhdm9pZCB1bnVzZWQgdmFyaWFibGUgd2FybmluZyBpbgogICAgIFJCX05FWFQoKQogICAtIHRkZXZhbEBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMS8yNCAxODoxMDo0MgogICAgIFtvcGVuYnNkLWNvbXBhdC9zeXMtdHJlZS5oXQogICAgIHR5cG8KICAgLSBncmFuZ2VAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMDQgMTY6NTk6MzIKICAgICBbb3BlbmJzZC1jb21wYXQvc3lzLXF1ZXVlLmhdCiAgICAgUmVtb3ZlIHVzZWxlc3MgYGBlbG0nJyBhcmd1bWVudCBmcm9tIHRoZSBTSU1QTEVRX1JFTU9WRV9IRUFEIG1hY3JvLgogICAgIFRoaXMgbWF0Y2hlcyBvdXIgU0xJU1QgYmVoYXZpb3VyIGFuZCBOZXRCU0QncyBTSU1QTEVRIGFzIHdlbGwuCiAgICAgb2sgbWlsbGVydCBrcncgZGVyYWFkdAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDIvMjUgMTM6Mjk6MzAKICAgICBbb3BlbmJzZC1jb21wYXQvc3lzLXF1ZXVlLmhdCiAgICAgbWlub3Igd2hpdGUgc3BhY2luZwogICAtIG90dG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTcgMjA6MTk6NDIKICAgICBbb3BlbmJzZC1jb21wYXQvc3lzLXF1ZXVlLmhdCiAgICAgUGVyZm9ybWluZyBjZXJ0YWluIG9wZXJhdGlvbnMgb24gcXVldWUuaCBkYXRhIHN0cnVjdHVycyBwcm9kdWNlZAogICAgIGZ1bm55IHJlc3VsdHMuICBBbiBleGFtcGxlIGlzIGNhbGxpbmcgIExJU1RfUkVNT1ZFIG9uIHRoZSBzYW1lCiAgICAgZWxlbWVudCB0d2ljZS4gVGhpcyB3aWxsIG5vdCBmYWlsLCBidXQgcmVzdWx0IGluIGEgZGF0YSBzdHJ1Y3R1cmUKICAgICByZWZlcmVuY2luZyB3aG8ga25vd3Mgd2hhdC4gUHJldmVudCB0aGVzZSBhY2NpZGVudHMgYnkgTlVMTGluZyBzb21lCiAgICAgZmllbGRzIG9uIHJlbW92ZSBhbmQgcmVwbGFjZS4gVGhpcyB3YXksIGVpdGhlciBhIHBhbmljIG9yIHNlZ2ZhdWx0CiAgICAgd2lsbCBiZSBwcm9kdWNlZCBvbiB0aGUgZmF1bHR5IG9wZXJhdGlvbi4KICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzI0IDIwOjI1OjE0CiAgICAgW29wZW5ic2QtY29tcGF0L3N5cy1xdWV1ZS5oXQogICAgIFBhcnRseSBiYWNrb3V0LiBOT0xJU1QsIHVzZWQgaW4gTElTVHMgaXMgcHJvYmFibHkgaW50ZXJmZXJpbmcuCiAgICAgcmVxdWVzdGVkIGJ5IGRlcmFhZHRACiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8yNSAwNjozNzo0NwogICAgIFtvcGVuYnNkLWNvbXBhdC9zeXMtcXVldWUuaF0KICAgICBTb21lIHV2bSBwcm9ibGVtIGlzIGJlaW5nIGV4cG9zZWQgd2l0aCB0aGUgbW9yZSBzdHJpY3QgbWFjcm9zLgogICAgIFJldmVydCB1bnRpbCB3ZSd2ZSBmb3VuZCBvdXQgd2hhdCdzIGNhdXNpbmcgdGhlIHBhbmljcy4KICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzI1IDA4OjA2OjI1CiAgICAgW29wZW5ic2QtY29tcGF0L3N5cy1xdWV1ZS5oXQogICAgIEludHJvZHVjZSBkZWJ1Z2dpbmcgYWlkIGZvciBxdWV1ZSBtYWNyb3MuIERpc2FibGVkIGJ5IGRlZmF1bHQ7IGJ1dAogICAgIGRldmVsb3BlcnMgYXJlIGVuY291cmFnZWQgdG8gcnVuIHdpdGggdGhpcyBlbmFibGVkLgogICAgIG9rIGtyd0AgZmdzY2hAIGRlcmFhZHRACiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wNC8zMCAxODo0MjozNAogICAgIFtvcGVuYnNkLWNvbXBhdC9zeXMtcXVldWUuaF0KICAgICBFbmFibGUgUVVFVUVfTUFDUk9fREVCVUcgb24gRElBR05PU1RJQyBrZXJuZWxzLgogICAgIElucHV0IGFuZCBva2F5cyBmcm9tIGtyd0AsIG1pbGxlcnRALCBvdHRvQCwgZGVyYWFkdEAsIG1pb2RALgogICAtIG1pbGxlcnRAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTAvMDcgMTY6NTY6MTEKICAgICBHTE9CX05PRVNDQVBFIGlzIFBPU0lYIHNvIG1vdmUgaXQgb3V0IG9mIHRoZSAjaWZuZGVmIF9QT1NJWF9TT1VSQ0UKICAgICBibG9jay4KICAgICAoTkIuIG1vc3RseSBhbiBSQ1MgSUQgc3luYywgYXMgcG9ydGFibGUgc3RyaXBzIG91dCB0aGUgY29uZGl0aW9uYWxzKQogLSAoZGptKSBbcmVncmVzcy9zZnRwLWNtZHMuc2hdCiAgIFVzZSBtb3JlIHJlc3RyaWN0aXZlIGdsb2IgdG8gcGljayB1cCB0ZXN0IGZpbGVzIGZyb20gL2JpbiAtIHNvbWUgcGxhdGZvcm1zCiAgIHNoaXAgYnJva2VuIHN5bWxpbmtzIHRoZXJlIHdoaWNoIGNvdWxkIHNwb2lsIHRoZSB0ZXN0LgogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvYmluZHJlc3Zwb3J0LmNdCiAgIFN5bmMgUkNTIElEIGFmdGVyIGlycmVsZXZhbnQgKGZvciBwb3J0YWJsZSBPcGVuU1NIKSBoZWFkZXIgc2h1ZmZsaW5nCgoyMDA3MDkyNwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBhdG9taWNpby5jXSBGYWxsIGJhY2sgdG8gaW5jbHVkaW5nIDxzeXMvcG9sbC5oPiBpZgogICB3ZSBkb24ndCBoYXZlIDxwb2xsLmg+IChlcSBRTlgpLiAgRnJvbSBiYWNvbiBhdCBjcyBueXUgZWR1LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBkZWZpbmVzLmhdIFNoYWRvdyBleHBpcnkgZG9lcyBub3Qgd29yayBvbiBRTlg2CiAgIHNvIGRpc2FibGUgaXQgZm9yIHRoYXQgcGxhdGZvcm0uICBGcm9tIGJhY29uIGF0IGNzIG55dSBlZHUuCgoyMDA3MDkyMQogLSAoZGptKSBbYXRvbWljaW8uY10gRml4IHNwaW4gYXZvaWRhbmNlIGZvciBwbGF0Zm9ybXMgdGhhdCBkZWZpbmUKICAgRVdPVUxEQkxPQ0s7IHBhdGNoIGZyb20gYmVuIEFUIHBzYy5lZHUKCjIwMDcwOTE3CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDgvMjMgMDI6NDk6NDMKICAgICBbYXV0aC1wYXNzd2QuYyBhdXRoLmMgc2Vzc2lvbi5jXQogICAgIHVuaWZkZWYgSEFWRV9MT0dJTl9DQVA7IG9rIGRlcmFhZHRAIG1pbGxlcnRACiAgICAgTkIuIFJDUyBJRCBzeW5jIG9ubHkgZm9yIHBvcnRhYmxlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA4LzIzIDAyOjU1OjUxCiAgICAgW2F1dGgtcGFzc3dkLmMgYXV0aC5jIHNlc3Npb24uY10KICAgICBtaXNzZWQgaW5jbHVkZSBiaXRzIGZyb20gbGFzdCBjb21taXQKICAgICBOQi4gUkNTIElEIHN5bmMgb25seSBmb3IgcG9ydGFibGUKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDgvMjMgMDM6MDY6MTAKICAgICBbYXV0aC5oXQogICAgIGxvZ2luX2NhcC5oIGRvZXNuJ3QgYmVsb25nIGhlcmUKICAgICBOQi4gUkNTIElEIHN5bmMgb25seSBmb3IgcG9ydGFibGUKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDgvMjMgMDM6MjI6MTYKICAgICBbYXV0aDItbm9uZS5jIHNzaGRfY29uZmlnIHNzaGRfY29uZmlnLjVdCiAgICAgU3VwcG9ydCAiQmFubmVyPW5vbmUiIHRvIGRpc2FibGUgZGlzcGxheWluZyBvZiB0aGUgcHJlLWxvZ2luIGJhbm5lcjsKICAgICBvayBkdHVja2VyQCBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wOC8yMyAwMzoyMzoyNgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgRXhlY3V0ZSBQcm94eUNvbW1hbmRzIHdpdGggJFNIRUxMIHJhdGhlciB0aGFuIC9iaW4vc2ggdW5jb25kaXRpb25hbGx5CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA5LzA0IDAzOjIxOjAzCiAgICAgW2NsaWVudGxvb3AuYyBtb25pdG9yLmMgbW9uaXRvcl9mZHBhc3MuYyBtb25pdG9yX2ZkcGFzcy5oXQogICAgIFttb25pdG9yX3dyYXAuYyBzc2guY10KICAgICBtYWtlIGZpbGUgZGVzY3JpcHRvciBwYXNzaW5nIGNvZGUgcmV0dXJuIGFuIGVycm9yIHJhdGhlciB0aGFuIGNhbGwgZmF0YWwoKQogICAgIHdoZW4gaXQgZW5jb3VudGVycyBwcm9ibGVtcywgYW5kIHVzZSB0aGlzIHRvIG1ha2Ugc2Vzc2lvbiBtdWx0aXBsZXhpbmcKICAgICBtYXN0ZXJzIHN1cnZpdmUgc2xhdmVzIGZhaWxpbmcgdG8gcGFzcyBhbGwgc3RkaW8gRkRzOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA5LzA0IDExOjE1OjU2CiAgICAgW3NzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0LmhdCiAgICAgbWFrZSBzc2goMSkncyBDb25uZWN0VGltZW91dCBvcHRpb24gYXBwbHkgdG8gYm90aCB0aGUgVENQIGNvbm5lY3Rpb24gYW5kCiAgICAgU1NIIGJhbm5lciBleGNoYW5nZSAocHJldmlvdXNseSBpdCBqdXN0IGNvdmVyZWQgdGhlIFRDUCBjb25uZWN0aW9uKS4KICAgICBUaGlzIGFsbG93cyBjYWxsZXJzIG9mIHNzaCgxKSB0byBiZXR0ZXIgZGV0ZWN0IGFuZCBkZWFsIHdpdGggc3R1Y2sgc2VydmVycwogICAgIHRoYXQgYWNjZXB0IGEgVENQIGNvbm5lY3Rpb24gYnV0IGRvbid0IHByb2dyZXNzIHRoZSBwcm90b2NvbCwgYW5kIGFsc28KICAgICBtYWtlcyBDb25uZWN0VGltZW91dCB1c2VmdWwgZm9yIGNvbm5lY3Rpb25zIHZpYSBhIFByb3h5Q29tbWFuZDsKICAgICBmZWVkYmFjayBhbmQgImxvb2tzIG9rIiBtYXJrdXNACiAgIC0gc29icmFkb0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wOS8wOSAxMTozODowMQogICAgIFtzc2gtYWRkLmMgc3NoLWFnZW50LjEgc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jXQogICAgIHNvcnQgc3lub3BzaXMgYW5kIG9wdGlvbnMgaW4gc3NoLWFnZW50KDEpOyB1c2FnZSBpcyBsb3dlcmNhc2UKICAgICBvayBqbWNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wOS8xMSAwNDozNjoyOQogICAgIFtzc2hwdHkuY10KICAgICBzb3J0ICNpbmNsdWRlCiAgICAgTkIuIFJDUyBJRCBzeW5jIG9ubHkKICAgLSBnaWxsZXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMTEgMTU6NDc6MTcKICAgICBbc2Vzc2lvbi5jIHNzaC1rZXlnZW4uYyBzc2hsb2dpbi5jXQogICAgIHVzZSBzdHJjc3BuIHRvIHByb3Blcmx5IG92ZXJ3cml0ZSAnXG4nIGluIGZnZXRzIHJldHVybmVkIGJ1ZmZlcgogICAgIG9rIHB5ckAsIHJheUAsIG1pbGxlcnRALCBtb3JpdHpALCBjaGxACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wOS8xMSAyMzo0OTowOQogICAgIFtzc2hwdHkuY10KICAgICByZW1vdmUgI2lmIGRlZmluZWQgYmxvY2sgbm90IG5lZWRlZDsgb2sgbWFya3VzQCBkdHVja2VyQAogICAgIE5CLiBSQ1MgSUQgc3luYyBvbmx5CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wOS8xMiAxOTozOToxOQogICAgIFt1bWFjLmNdCiAgICAgdXNlIHhtYWxsb2MoKSBhbmQgeGZyZWUoKTsgb2sgbWFya3VzQCBwdmFsY2hldkAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMTMgMDQ6Mzk6MDQKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICBmaXggaW5jb3JyZWN0IHRlc3Qgd2hlbiBzZXR0aW5nIHN5c2xvZyBmYWNpbGl0eTsgZnJvbSBKYW4gUGVjaGFuZWMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMTYgMDA6NTU6NTIKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICB1c2Ugb2ZmX3QgaW5zdGVhZCBvZiB1X2ludDY0X3QgZm9yIGZpbGUgb2Zmc2V0cywgbWF0Y2hpbmcgd2hhdCB0aGUKICAgICBwcm9ncmVzc21ldGVyIGNvZGUgZXhwZWN0czsgYnogIzg0MgogLSAodGltKSBbZGVmaW5lcy5oXSBGaXggcmVncmVzc2lvbiBpbiBsb25nIHBhc3N3b3JkIHN1cHBvcnQgb24gT3BlblNlcnZlciA2LgogICBQcm9ibGVtIHJlcG9ydCBhbmQgYWRkaXRpb25hbCB0ZXN0aW5nIHJhYyBBVCB0ZW56aW5nLm9yZy4KCjIwMDcwOTE0CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLWFzcHJpbnRmLmNdIFBsdWcgbWVtIGxlYWsgaW4gZXJyb3IgcGF0aC4KICAgUGF0Y2ggZnJvbSBKYW4uUGVjaGFuZWMgYXQgc3VuIGNvbS4KCjIwMDcwOTEwCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcmVncmVzcy9jbG9zZWZyb210ZXN0LmNdIEJ1ZyAjMTM1ODogQWx3YXlzCiAgIHJldHVybiAwIG9uIHN1Y2Nlc3NmdWwgdGVzdC4gIEZyb20gRGF2aWQuTGVvbmFyZCBhdCBxdWVzdCBjb20uCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEF1dG9jb25mIGRpZG4ndCBkZWZpbmUgSEFWRV9MSUJJQUYgYmVjYXVzZSB3ZQogICBkaWQgYSBBQ19DSEVDS19GVU5DUyB3aXRoaW4gdGhlIEFDX0NIRUNLX0xJQiB0ZXN0LgoKMjAwNzA4MTcKIC0gKGR0dWNrZXIpIFtzc2hkLjhdIE1hbnkgTGludXggdmFyaWFudHMgdXNlIGEgc2luZ2xlICIhIiB0byBkZW5vdGUgbG9ja2VkCiAgIGFjY291bnRzIGFuZCB0aGF0J3Mgd2hhdCB0aGUgY29kZSBsb29rcyBmb3IsIHNvIG1ha2UgbWFuIHBhZ2UgYW5kIGNvZGUKICAgYWdyZWUuICBQb2ludGVkIG91dCBieSBSb3VtZW4gUGV0cm92LgogLSAoZHR1Y2tlcikgW0lOU1RBTExdIEdyb3VwIHRoZSBwYXJ0cyBkZXNjcmliaW5nIHJhbmRvbSBvcHRpb25zIGFuZCBQQU0KICAgaW1wbGVtZW50YXRpb25zIHRvZ2V0aGVyIHdoaWNoIGlzIGhvcGVmdWxseSBtb3JlIGNvaGVyZW50LgogLSAoZHR1Y2tlcikgW0lOU1RBTExdIHRoZSBwaWQgZmlsZSBpcyBzc2hkLnBpZCBub3Qgc3NoLnBpZC4KIC0gKGR0dWNrZXIpIFtJTlNUQUxMXSBHaXZlIFBBTSBpdHMgb3duIGhlYWRpbmcuCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gTGluayB0byB0Y3B3cmFwcGVycy4KCjIwMDcwODE2CiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jXSBDYWxsIFBBTSBjbGVhbnVwIGZ1bmN0aW9ucyBmb3IgdW5hdXRoZW50aWNhdGVkCiAgIGNvbm5lY3Rpb25zIHRvby4gIEJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBTYW5kcm8gV2VmZWwsIHdpdGggJiBvayBkam1ACgoyMDA3MDgxNQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wOC8xNSAwODoxNDo0NgogICAgIFtjbGllbnRsb29wLmNdCiAgICAgZG8gTk9UIGZhbGwgYmFjayB0byB0aGUgdHJ1c2VkIHgxMSBjb29raWUgaWYgZ2VuZXJhdGlvbiBvZiBhbiB1bnRydXN0ZWQKICAgICBjb29raWUgZmFpbHM7IGZyb20gSmFuIFBlY2hhbmVjLCB2aWEgc2VjdXJpdHktYWxlcnQgYXQgc3VuLmNvbTsKICAgICBvayBkdHVja2VyCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA4LzE1IDA4OjE2OjQ5CiAgICAgW3ZlcnNpb24uaF0KICAgICBvcGVuc3NoIDQuNwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDgvMTUgMTI6MTM6NDEKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHR1biBkZXZpY2UgZm9yd2FyZGluZyBub3cgaG9ub3VycyBFeGl0T25Gb3J3YXJkRmFpbHVyZTsgb2sgbWFya3VzQAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1jcmF5LmNdIFJlbW92ZSBkZWJ1ZyBmcm9tIHNpZ25hbCBoYW5kbGVyLgogICBvayBkam1ACiAtIChkdHVja2VyKSBbUkVBRE1FIGNvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjCiAgIGNvbnRyaWIvc3VzZS9vcGVuc3NoLnNwZWNdIENyYW5rIHZlcnNpb24uCgoyMDA3MDgxMwogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQnVnICMxMzM5OiBlbnN1cmUgdGhhdCBwYW1fc2V0Y3JlZCgpIGlzIGFsd2F5cwogICBjYWxsZWQgd2l0aCBQQU1fRVNUQUJMSVNIX0NSRUQgYXQgbGVhc3Qgb25jZSwgd2hpY2ggcmVzb2x2ZXMgYSBwcm9ibGVtCiAgIHdpdGggcGFtX2Roa2V5cy4gIFBhdGNoIGZyb20gRGF2aWQgTGVvbmFyZCwgb2sgZGptQAoKMjAwNzA4MTAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBVc2Ugc2lnZGllIGhlcmUgdG9vLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMzQzOiBTZXQgRElTQUJMRV9GRF9QQVNTSU5HIGZvciBRTlg2LiBGcm9tIAogICBNYXR0IEtyYWFpLCBvayBkam1AIAoKMjAwNzA4MDkKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jXSBDb21tZW50IHR5cG8uCiAtIChkdHVja2VyKSBbUkVBRE1FLnBsYXRmb3JtXSBEb2N1bWVudCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBQZXJtaXRSb290TG9naW4KICAgYW5kIHRoZSBBSVggbmF0aXZlIGxvZ2luIHJlc3RyaWN0aW9ucy4KIC0gKGR0dWNrZXIpIFtkZWZpbmVzLmhdIFJlbW92ZSBfUEFUSF97Q1NIRUxMLFNIRUxMU30gd2hpY2ggYXJlbid0CiAgIHVzZWQgYW55d2hlcmUgYW5kIGFyZSBhIHBvdGVudGlhbCBzb3VyY2Ugb2Ygd2FybmluZ3MuCgoyMDA3MDgwOAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gcmF5QGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA3LzEyIDA1OjQ4OjA1CiAgICAgW2tleS5jXQogICAgIERlbGludDogcmVtb3ZlIHNvbWUgdW5yZWFjaGFibGUgc3RhdGVtZW50cywgZnJvbSBCcmV0IExhbWJlcnQuCiAgICAgT0sgbWFya3VzQCBhbmQgZHR1Y2tlckAuCiAgIC0gc29icmFkb0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wOC8wNiAxOToxNjowNgogICAgIFtzY3AuMSBzY3AuY10KICAgICB0aGUgZWxsaXBzaXMgaXMgbm90IGFuIG9wdGlvbmFsIGFyZ3VtZW50OyB3aGlsZSBoZXJlLCBzeW5jIHRoZSB1c2FnZQogICAgIGFuZCBzeW5vcHNpcyBvZiBjb21tYW5kcwogICAgIGxvdHMgb2YgZ29vZCBpZGVhcyBieSBqbWNACiAgICAgb2sgam1jQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wOC8wNyAwNzozMjo1MwogICAgIFtjbGllbnRsb29wLmMgY2xpZW50bG9vcC5oIHNzaC5jXQogICAgIGJ6IzEyMzI6IGVuc3VyZSB0aGF0IGFueSBzcGVjaWZpZWQgTG9jYWxDb21tYW5kIGlzIGV4ZWN1dGVkIGFmdGVyIHRoZQogICAgIHR1bm5lbCBkZXZpY2UgaXMgb3BlbmVkLiBBbHNvLCBtYWtlIGZhaWx1cmVzIHRvIG9wZW4gYSB0dW5uZWwgZGV2aWNlCiAgICAgZmF0YWwgd2hlbiBFeGl0T25Gb3J3YXJkRmFpbHVyZSBpcyBhY3RpdmUuCiAgICAgUmVwb3J0ZWQgYnkgaC5nb2ViZWwgQVQgZ29lYmVsLWNvbnN1bHQuZGU7IG9rIGR0dWNrZXIgbWFya3VzIHJleWsgZGVyYWFkdAoKMjAwNzA3MjQKIC0gKHRpbSkgW29wZW5zc2gueG1sLmluXSBtYWtlIEZNUkkgbWF0Y2ggd2hhdCBwYWNrYWdlIHNjcmlwdHMgdXNlLgogLSAodGltKSBbb3BlbmJzZC1jb21wYXQvcmVncmVzcy9jbG9zZWZyb210ZXN0LmNdIEJ1ZyAxMzQ1OiBmaXggb3BlbigpIGNhbGwuCiAgIFJlcG9ydC9wYXRjaCBieSBEYXZpZC5MZW9uYXJkIEFUIHF1ZXN0LmNvbSAoYW5kIEJlcm5oYXJkIFNpbW9uKQogLSAodGltKSBbYnVpbGRwa2cuc2guaW4gb3BlbnNzaC54bWwuaW5dIEFsbG93IG1vcmUgZmxleGliaWxpdHkgd2hlcmUgc21mKDUpCiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbl0gc3wkRkFLRV9ST09ULyR7c3lzY29uZmRpcn18JEZBS0VfUk9PVCR7c3lzY29uZmRpcn18CgoyMDA3MDYyOAogLSAoZGptKSBieiMxMzI1OiBGaXggU0VMaW51eCBpbiBwZXJtaXNzaXZlIG1vZGUgd2hlcmUgaXQgd291bGQKICAgaW5jb3JyZWN0bHkgZmF0YWwoKSBvbiBlcnJvcnMuIHBhdGNoIGZyb20gY2p3YXRzb24gQVQgZGViaWFuLm9yZzsKICAgb2sgZHR1Y2tlcgoKMjAwNzA2MjUKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMTMgMDA6MjE6MjcKICAgICBbc2NwLmNdCiAgICAgZG9uJ3QgZnRydW5jYXRlKCkgbm9uLXJlZ3VsYXIgZmlsZXM7IGJ6IzEyMzYgcmVwb3J0ZWQgYnkgd29vZCBBVAogICAgIHhtaXNzaW9uLmNvbTsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMTQgMjE6NDM6MjUKICAgICBbc3NoLmNdCiAgICAgaGFuZGxlIEVJTlRSIHdoZW4gd2FpdGluZyBmb3IgbXV4IGV4aXQgc3RhdHVzIHByb3Blcmx5CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzE0IDIyOjQ4OjA1CiAgICAgW3NzaC5jXQogICAgIHdoZW4gd2FpdGluZyBmb3IgdGhlIG11bHRpcGxleCBleGl0IHN0YXR1cywgcmVhZCB1bnRpbCB0aGUgbWFzdGVyIGVuZAogICAgIHdyaXRlcyBhbiBlbnRpcmUgaW50IG9mIGRhdGEgKmFuZCogY2xvc2VzIHRoZSBjbGllbnRfZmQ7IGZpeGVzIG11eAogICAgIHJlZ3Jlc3Npb24gc3BvdHRlZCBieSBkdHVja2VyLCBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xOSAwMjowNDo0MwogICAgIFthdG9taWNpby5jXQogICAgIGlmIHRoZSBmZCBwYXNzZWQgdG8gYXRvbWljaW8vYXRvbWljaW92KCkgaXMgbm9uIGJsb2NraW5nLCB0aGVuIHBvbGwoKSB0bwogICAgIGF2b2lkIGEgc3BpbiBpZiBpdCBpcyBub3QgeWV0IHJlYWR5IGZvciByZWFkaW5nL3dyaXRpbmc7IG9rIGR0dWNrZXJACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8yNSAwODoyMDowMwogICAgIFtjaGFubmVscy5jXQogICAgIENvcnJlY3QgdGVzdCBmb3Igd2luZG93IHVwZGF0ZXMgZXZlcnkgdGhyZWUgcGFja2V0czsgcHJldmVudHMgc2VuZGluZwogICAgIHdpbmRvdyB1cGRhdGVzIGZvciBldmVyeSBzaW5nbGUgcGFja2V0LiAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMjUgMTI6MDI6MjcKICAgICBbYXRvbWljaW8uY10KICAgICBJbmNsdWRlIDxwb2xsLmg+IGxpa2UgdGhlIG1hbiBwYWdlIHNheXMgcmF0aGVyIHRoYW4gPHN5cy9wb2xsLmg+LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F0b21pY2lvLmNdIFRlc3QgZm9yIEVXT1VMREJMT0NLIGluIGF0b21pY2lvdiB0byBtYXRjaAogICBhdG9taWNpby4KIC0gKGR0dWNrZXIpIFthdG9taWNpby5jIGNvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbgogICBvcGVuYnNkLWNvbXBhdC9ic2QtcG9sbC57YyxofSBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXQogICBBZGQgYW4gaW1wbGVtZW50YXRpb24gb2YgcG9sbCgpIGJ1aWx0IG9uIHRvcCBvZiBzZWxlY3QoMikuICBDb2RlIGZyb20KICAgT3Blbk5UUEQgd2l0aCBjaGFuZ2VzIHN1Z2dlc3RlZCBieSBkam0uICBvayBkam1ACgoyMDA3MDYxNAogLSAoZHR1Y2tlcikgW2NpcGhlci1jdHIuYyB1bWFjLmMgb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaF0gTW92ZSB0aGUKICAgVVNFX0JVSUxUSU5fUklKTkRBRUwgY29tcGF0IGdvb3AgdG8gb3BlbnNzbC1jb21wYXQuaCBzbyBpdCBjYW4gYmUKICAgc2hhcmVkIHdpdGggdW1hYy5jLiAgQWxsb3dzIGJ1aWxkaW5nIHdpdGggT3BlblNTTCAwLjkuNSBhZ2FpbiBpbmNsdWRpbmcKICAgdW1hYyBzdXBwb3J0LiAgV2l0aCB0aW1AIGRqbUAsIG9rIGRqbS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5oXSBNZXJnZSBVU0VfQlVJTFRJTl9SSUpOREFFTAogICBzZWN0aW9ucy4gIEZpeGVzIGJ1aWxkcyB3aXRoIGVhcmx5IE9wZW5TU0wgMC45LjYgdmVyc2lvbnMuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaF0gUmVtb3ZlIHJlZHVuZGFudCBkZWZpbml0aW9uCiAgIG9mIFVTRV9CVUlMVElOX1JJSk5EQUVMIHNpbmNlIHRoZSA8MC45LjYgdGVzdCBpcyBjb3ZlcmVkIGJ5IHRoZQogICBzdWJzZXF1ZW50IDwwLjkuNyB0ZXN0LgoKMjAwNzA2MTIKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMTEgMDk6MTQ6MDAKICAgICBbY2hhbm5lbHMuaF0KICAgICBpbmNyZWFzZSBkZWZhdWx0IGNoYW5uZWwgd2luZG93czsgb2sgZGptCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzEyIDA3OjQxOjAwCiAgICAgW3NzaC1hZGQuMV0KICAgICBiZXR0ZXIgZG9jdW1lbnQgc3NoLWFkZCdzIC1kIG9wdGlvbiAoZGVsZXRlIGlkZW50aWVzIGZyb20gYWdlbnQpLCBieiMxMjI0CiAgICAgbmV3IHRleHQgYmFzZWQgb24gc29tZSBwcm92aWRlZCBieSBhbmRyZXdtYy1kZWJpYW4gQVQgY2VsdC5kaWFzLmllOwogICAgIG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzEyIDA4OjIwOjAwCiAgICAgW3NzaC1nc3MuaCBnc3Mtc2Vydi5jIGdzcy1nZW5yLmNdCiAgICAgcmVsb2NhdGUgc2VydmVyLW9ubHkgR1NTQVBJIGNvZGUgZnJvbSBsaWJzc2ggdG8gc2VydmVyOyBieiAjMTIyNQogICAgIHBhdGNoIGZyb20gc2ltb24gQVQgc3h3Lm9yZy51azsgb2sgbWFya3VzQCBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xMiAwODoyNDoyMAogICAgIFtzY3AuY10KICAgICBtYWtlIHNjcCB0cnkgdG8gc2tpcCBGSUZPcyByYXRoZXIgdGhhbiBibG9ja2luZyB3aGVuIG5vdGhpbmcgaXMgbGlzdGVuaW5nLgogICAgIGRlcGVuZHMgb24gdGhlIHBsYXRmb3JtIHN1cHBvcnRpbmcgc2FuZSBPX05PTkJMT0NLIHNlbWFudGljcyBmb3Igb3BlbgogICAgIG9uIEZJRk9zIChhcHBhcmVudGx5IFBPU0lYIGRvZXMgbm90IG1hbmRhdGUgdGhpcyksIHdoaWNoIE9wZW5CU0QgZG9lcy4KICAgICBieiAjODU2OyByZXBvcnQgYnkgY2p3YXRzb24gQVQgZGViaWFuLm9yZzsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xMiAxMToxMTowOAogICAgIFtzc2guY10KICAgICBmaXggc2xhdmUgZXhpdCB2YWx1ZSB3aGVuIGEgY29udHJvbCBtYXN0ZXIgZ29lcyBhd2F5IHdpdGhvdXQgcGFzc2luZyB0aGUKICAgICBmdWxsIGV4aXQgc3RhdHVzIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHNsYXZlIHJlYWRzIGEgZnVsbCBpbnQuIGJ6IzEyNjEKICAgICByZXBvcnRlZCBieSBmcmVra28gQVQgZ21haWwuY29tOyBvayBtYXJrdXNAIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzEyIDExOjE1OjE3CiAgICAgW3NzaC5jIHNzaC4xXQogICAgIEFkZCAiLUsiIGZsYWcgZm9yIHNzaCB0byBzZXQgR1NTQVBJQXV0aGVudGljYXRpb249eWVzIGFuZAogICAgIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHM9eWVzLiBUaGlzIGlzIHN5bW1ldHJpYyB3aXRoIC1rIChkaXNhYmxlIEdTU0FQSSkKICAgICBhbmQgaXMgdXNlZnVsIGZvciBob3N0cyB3aXRoIC9ob21lIG9uIEtlcmJlcmlzZWQgTkZTOyBieiAjMTMxMgogICAgIHBhdGNoIGZyb20gTWFya3VzLkt1aG4gQVQgY2wuY2FtLmFjLnVrOyBvayBkdHVja2VyQCBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzEyIDExOjQ1OjI3CiAgICAgW3NzaC5jXQogICAgIGltcHJvdmVkIGV4aXQgbWVzc2FnZSBmcm9tIG11bHRpcGxleCBzbGF2ZSBzZXNzaW9uczsgYnogIzEyNjIKICAgICByZXBvcnRlZCBieSBhbGV4YW5kcmUubnVuZXMgQVQgZ21haWwuY29tOyBvayBkdHVja2VyQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMTIgMTE6NTY6MTUKICAgICBbZ3NzLWdlbnIuY10KICAgICBQYXNzIEdTUyBPSUQgdG8gZ3NzX2Rpc3BsYXlfc3RhdHVzIHRvIHByb3ZpZGUgYmV0dGVyIGluZm9ybWF0aW9uIGluCiAgICAgZXJyb3IgbWVzc2FnZXMuICBQYXRjaCBmcm9tIFNpbW9uIFdpbGtpbnNvbiB2aWEgYnogMTIyMC4gIG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMTIgMTM6NDE6MDMKICAgICBbc3NoLWFkZC4xXQogICAgIGlkZW50aWVzIC0+IGlkZW50aXRpZXM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzEyIDEzOjQzOjU1CiAgICAgW3NzaC4xXQogICAgIGFkZCAtSyB0byBTWU5PUFNJUzsKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzEyIDEzOjU0OjI4CiAgICAgW3NjcC5jXQogICAgIEVuY29kZSBmaWxlbmFtZSB3aXRoIHN0cm52aXMgaWYgdGhlIG5hbWUgY29udGFpbnMgYSBuZXdsaW5lICh3aGljaCBjYW4ndAogICAgIGJlIHJlcHJlc2VudGVkIGluIHRoZSBzY3AgcHJvdG9jb2wpLCBmcm9tIGJ6ICM4OTEuICBvayBtYXJrdXNACgoyMDA3MDYxMQogLSAoZGptKSBCdWd6aWxsYSAjMTMwNjogc2lsZW5jZSBzcHVyaW91cyBlcnJvciBtZXNzYWdlcyBmcm9tIGhhbmctb24tZXhpdAogICBmaXg7IHRlc3RlZCBieSBkdHVja2VyQCBhbmQgam9jaGVuLmtpcm4gQVQgZ21haWwuY29tCiAgIC0gcHZhbGNoZXZAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMDcgMTk6Mzc6MzQKICAgICBba2V4LmggbWFjLmMgbWFjLmggbW9uaXRvcl93cmFwLmMgbXlwcm9wb3NhbC5oIHBhY2tldC5jIHNzaC4xXQogICAgIFtzc2hfY29uZmlnLjUgc3NoZC44IHNzaGRfY29uZmlnLjVdCiAgICAgQWRkIGEgbmV3IE1BQyBhbGdvcml0aG0gZm9yIGRhdGEgaW50ZWdyaXR5LCBVTUFDLTY0IChub3QgZGVmYXVsdCB5ZXQsCiAgICAgbXVzdCBzcGVjaWZ5IHVtYWMtNjRAb3BlbnNzaC5jb20pLiBQcm92aWRlcyBhYm91dCAyMCUgZW5kLXRvLWVuZCBzcGVlZHVwCiAgICAgY29tcGFyZWQgdG8gaG1hYy1tZDUuIFJlcHJlc2VudHMgYSBkaWZmZXJlbnQgYXBwcm9hY2ggdG8gbWVzc2FnZQogICAgIGF1dGhlbnRpY2F0aW9uIHRvIHRoYXQgb2YgSE1BQyB0aGF0IG1heSBiZSBiZW5lZmljaWFsIGlmIEhNQUMgYmFzZWQgb24KICAgICBvbmUgb2YgaXRzIHVuZGVybHlpbmcgaGFzaCBhbGdvcml0aG1zIGlzIGZvdW5kIHRvIGJlIHZ1bG5lcmFibGUgdG8gYQogICAgIG5ldyBhdHRhY2suICBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0NDE4LnR4dAogICAgIGluIGNvbmp1bmN0aW9uIHdpdGggYW5kIE9LIGRqbUAKICAgLSBwdmFsY2hldkBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8wOCAwNDo0MDo0MAogICAgIFtzc2hfY29uZmlnXQogICAgIEFkZCBhICJNQUNzIiBsaW5lIGFmdGVyICJDaXBoZXJzIiB3aXRoIHRoZSBkZWZhdWx0IE1BQyBhbGdvcml0aG1zLAogICAgIHRvIGVhc2UgcGVvcGxlIHdobyB3YW50IHRvIHR3ZWFrIGJvdGggKGVnLiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucykuCiAgICAgb2sgZGVyYWFkdEAgZGptQCBkdHVja2VyQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8wOCAwNzo0Mzo0NgogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgcHV0IHRoZSBNQUMgbGlzdCBpbnRvIGEgZGlzcGxheSwgbGlrZSB3ZSBkbyBmb3IgY2lwaGVycywKICAgICBzaW5jZSBncm9mZiBoYXMgdHJvdWJsZSBoYW5kbGluZyB3aWRlIGxpbmVzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8wOCAwNzo0ODowOQogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIG9vcHMsIGhlcmUgdG9vOiBwdXQgdGhlIE1BQyBsaXN0IGludG8gYSBkaXNwbGF5LCBsaWtlIHdlIGRvIGZvcgogICAgIGNpcGhlcnMsIHNpbmNlIGdyb2ZmIGhhcyB0cm91YmxlIHdpdGggd2lkZSBsaW5lczsKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMTEgMDg6MDQ6NDQKICAgICBbY2hhbm5lbHMuY10KICAgICBzZW5kICd3aW5kb3cgYWRqdXN0JyBtZXNzYWdlcyBldmVyeSB0cmVlIHBhY2tldHMgYW5kIGRvIG5vdCB3YWl0CiAgICAgdW50aWwgNTAlIG9mIHRoZSB3aW5kb3cgaXMgY29uc3VtZWQuICBvayBkam0gZHR1Y2tlcgogLSAoZGptKSBbY29uZmlndXJlLmFjIHVtYWMuY10gSWYgcGxhdGZvcm0gZG9lc24ndCBwcm92aWRlIHN3YXAzMigzKSwgdGhlbgogICBmYWxsYmFjayB0byBwcm92aWRlZCBiaXQtc3dpenppbmcgZnVuY3Rpb25zCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuY10gQWNjb3JkaW5nIHRvIHRoZSBzcGVjIHRoZSAicmVtYWluZGVyIgogICBhcmd1bWVudCB0byBuYW5vc2xlZXAgbWF5IGJlIE5VTEwuICBDdXJyZW50bHkgdGhpcyBuZXZlciBoYXBwZW5zIGluIE9wZW5TU0gsCiAgIGJ1dCBjaGVjayBhbnl3YXkgaW4gY2FzZSB0aGlzIGNoYW5nZXMgb3IgdGhlIGNvZGUgZ2V0cyB1c2VkIGVsc2V3aGVyZS4KIC0gKGR0dWNrZXIpIFtpbmNsdWRlcy5oXSBCdWcgIzEyNDM6IEhBVkVfUEFUSFMgLT4gSEFWRV9QQVRIU19ILiAgU2hvdWxkCiAgIHByZXZlbnQgd2FybmluZ3MgYWJvdXQgcmVkZWZpbml0aW9ucyBvZiB2YXJpb3VzIHRoaW5ncyBpbiBwYXRocy5oLgogICBTcG90dGVkIGJ5IGNhcnRtYW5sdGQgYXQgaG90bWFpbC5jb20uCgoyMDA3MDYwNQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNS8yMiAxMDoxODo1MgogICAgIFtzc2hkLmNdCiAgICAgemFwIGRvdWJsZSBpbmNsdWRlOyBmcm9tIHBfbm93YWN6eWsgQVQgbzIucGwKICAgICAobm90IHJlcXVpcmVkIGluIC1wb3J0YWJsZSwgSWQgc3luYyBvbmx5KQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNS8zMCAwNTo1ODoxMwogICAgIFtrZXguY10KICAgICB0aWR5OiBLTkYsIEFSR1NVU0VEIGFuZCB1X2ludAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wNS8zMSAxOToyMDoxNgogICAgIFtzY3AuMSBzc2hfY29uZmlnLjUgc2Z0cC1zZXJ2ZXIuOCBzc2gtYWdlbnQuMSBzc2hkX2NvbmZpZy41IHNmdHAuMQogICAgIHNzaC1rZXlnZW4uMSBzc2gta2V5c2Nhbi4xIHNzaC1hZGQuMSBzc2hkLjggc3NoLjEgc3NoLWtleXNpZ24uOF0KICAgICBjb252ZXJ0IHRvIG5ldyAuRGQgZm9ybWF0OwogICAgIChXZSB3aWxsIG5lZWQgdG8gdGVhY2ggbWRvYzJtYW4uYXdrIHRvIHVuZGVyc3RhbmQgdGhpcyB0b28uKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNS8zMSAyMzozNDoyOQogICAgIFtwYWNrZXQuY10KICAgICBnYyB1bnJlYWNoYWJsZSBjb2RlOyBzcG90dGVkIGJ5IFRhdmlzIE9ybWFuZHkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMDIgMDk6MDQ6NTgKICAgICBbYnVmYm4uY10KICAgICBtZW1vcnkgbGVhayBvbiBlcnJvciBwYXRoOyBmcm9tIGFybmF1ZC5sYWNvbWJlLjEgQVQgdWxhdmFsLmNhCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzA1IDA2OjUyOjM3CiAgICAgW2tleC5jIG1vbml0b3Jfd3JhcC5jIHBhY2tldC5jIG1hYy5oIGtleC5oIG1hYy5jXQogICAgIFByZXNlcnZlIE1BQyBjdHggYmV0d2VlbiBwYWNrZXRzLCBzYXZpbmcgMnhoYXNoIGNhbGxzIHBlci1wYWNrZXQuCiAgICAgWWllbGRzIGFyb3VuZCBhIDEyLTE2JSBlbmQtdG8tZW5kIHNwZWVkdXAgZm9yIGFyY2ZvdXIyNTYvaG1hYy1tZDUKICAgICBwYXRjaCBmcm9tIG1hcmt1c0AgdGVzdGVkIGR0dWNrZXJAIGFuZCBteXNlbGYsIG9rIG1hcmt1c0AgYW5kIG1lIChJJ20KICAgICBjb21taXR0aW5nIGF0IGhpcyByZXF1ZXN0KQogLSAoZHR1Y2tlcikgW21kb2MybWFuLmF3a10gVGVhY2ggaXQgdG8gZGVhbCB3aXRoICRNZG9jZGF0ZSB0YWdzIHRoYXQKICAgT3BlbkJTRCdzIGN2cyBub3cgYWRkcy4KIC0gKGR0dWNrZXIpIFttZG9jMm1hbi5hd2tdIFJlbW92ZSB0cmFpbGluZyAiJCIgZnJvbSBNZG9jZGF0ZSByZWdleCBzbwogICBtaW5kcm90J3MgY3ZzIGRvZXNuJ3QgZXhwYW5kIGl0IG9uIHVzLgogLSAoZHR1Y2tlcikgW21kb2MybWFuLmF3a10gQWRkIHN1cHBvcnQgZm9yICVSIHJlZmVyZW5jZXMsIHVzZWQgZm9yIFJGQ3MuCgoyMDA3MDUyMAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDQvMTQgMjI6MDE6NTgKICAgICBbYXV0aDIuY10KICAgICByZW1vdmUgdW51c2VkIG1hY3JvOyBmcm9tIERtaXRyeSBWLiBMZXZpbiA8bGR2QGFsdGxpbnV4Lm9yZz4KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA0LzE4IDAxOjEyOjQzCiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgY2FzdCAiJWxsdSIgZm9ybWF0IHNwZWMgdG8gKHVuc2lnbmVkIGxvbmcgbG9uZyk7IGRvIG5vdCBhc3N1bWUgYQogICAgIHVfaW50NjRfdCBhcmcgaXMgdGhlIHNhbWUgYXMgJ3Vuc2lnbmVkIGxvbmcgbG9uZycuCiAgICAgZnJvbSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+CiAgICAgb2sgbWFya3VzQCAnWWVzLCB0aGF0IGxvb2tzIGNvcnJlY3QnIG1pbGxlcnRACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNC8yMyAxMDoxNTozOQogICAgIFtzZXJ2Y29uZi5jXQogICAgIFJlbW92ZSBkZWJ1ZygpIGxlZnQgb3ZlciBmcm9tIGRldmVsb3BtZW50LiAgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDUvMTcgMDc6NTA6MzEKICAgICBbbG9nLmNdCiAgICAgc2F2ZSBhbmQgcmVzdG9yZSBlcnJubyB3aGVuIGxvZ2dpbmc7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA1LzE3IDA3OjU1OjI5CiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgYnojMTI4NiBzdG9wIHJlYWRpbmcgYW5kIHByb2Nlc3NpbmcgY29tbWFuZHMgd2hlbiBpbnB1dCBvciBvdXRwdXQgYnVmZmVyCiAgICAgaXMgbmVhcmx5IGZ1bGwsIG90aGVyd2lzZSBzZnRwLXNlcnZlciB3b3VsZCBoYXBwaWx5IHRyeSB0byBncm93IHRoZQogICAgIGlucHV0L291dHB1dCBidWZmZXJzIHBhc3QgdGhlIG1heGltdW0gc3VwcG9ydGVkIGJ5IHRoZSBidWZmZXIgQVBJIGFuZAogICAgIHByb21wdGx5IGZhdGFsKCkKICAgICBiYXNlZCBvbiBwYXRjaCBmcm9tIFRodWUgSmFudXMgS3Jpc3RlbnNlbjsgZmVlZGJhY2sgJiBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNS8xNyAyMDo0ODoxMwogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIGZhbGwgYmFjayB0byBnZXRob3N0bmFtZSgpIHdoZW4gdGhlIG91dGdvaW5nIGNvbm5lY3Rpb24gaXMgbm90CiAgICAgb24gYSBzb2NrZXQsIHN1Y2ggYXMgaXMgdGhlIGNhc2Ugd2hlbiBQcm94eUNvbW1hbmQgaXMgdXNlZC4KICAgICBHaXZlcyBob3N0YmFzZWQgYXV0aCBhbiBvcHBvcnR1bml0eSB0byB3b3JrOyBieiM2MTYsIHJlcG9ydAogICAgIGFuZCBmZWVkYmFjayBzdHVhcnQgQVQga2Fsb3JhbS5jb207IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDUvMTcgMjA6NTI6MTMKICAgICBbbW9uaXRvci5jXQogICAgIHBhc3MgcmVjZWl2ZWQgU0lHSU5UIGZyb20gbW9uaXRvciB0byBwb3N0YXV0aCBjaGlsZCBzbyBpdCBjYW4gY2xlYW4KICAgICB1cCBwcm9wZXJseS4gYnojMTE5NiwgcGF0Y2ggZnJvbSBzZW50aGlsa3VtYXJfc2VuIEFUIGhvdHBvcC5jb207CiAgICAgb2sgbWFya3VzQAogICAtIGpvbGFuQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA1LzE3IDIzOjUzOjQxCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgZGptIG93ZXMgbWUgYSB2YiBhbmQgYSB0aXNtIGNkIGZvciBicmVha2luZyBzc2ggY29tcGlsYXRpb24KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBtYWxsb2MrbWVtc2V0IC0+IGNhbGxvYy4gIFBhdGNoIGZyb20KICAgbGR2IGF0IGFsdGxpbnV4Lm9yZy4KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBSZXR1cm4gZW1wdHkgc3RyaW5nIGlmIGZnZXRzIGZhaWxzIGluCiAgIHNzaHBhbV90dHlfY29udi4gIFBhdGNoIGZyb20gbGR2IGF0IGFsdGxpbnV4Lm9yZy4KCjIwMDcwNTA5CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTI4NzogQWRkIG1pc3NpbmcgdGVzdCBmb3IgdWNyZWQuaC4KCjIwMDcwNDI5CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuY10gSW5jbHVkZSB1bmlzdGQuaCBhbmQgc3lzL3R5cGVzLmgKICAgZm9yIHNlbGVjdCgyKSBwcm90b3R5cGUuCiAtIChkdHVja2VyKSBbYXV0aC1zaGFkb3cuYyBsb2dpbnJlYy5jXSBJbmNsdWRlIHRpbWUuaCBmb3IgdGltZSgyKSBwcm90b3R5cGUuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIEJ1ZyAjMTI5OTogVXNlIHRoZQogICBwbGF0Zm9ybSdzIF9yZXMgaWYgaXQgaGFzIG9uZS4gIFNob3VsZCBmaXggcHJvYmxlbSBvZiBETlNTRUMgcmVjb3JkIGxvb2t1cHMKICAgb24gTmV0QlNEIGFzIHJlcG9ydGVkIGJ5IEN1cnQgU2FtcHNvbi4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC94bW1hcC5jXSBJbmNsdWRlIHN0ZGxpYi5oIGZvciBta3N0ZW1wIHByb3RvdHlwZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgZGVmaW5lcy5oXSBIYXZlIGNvbmZpZ3VyZSBjaGVjayBmb3IgTUFYU1lNTElOS1MKICAgc28gd2UgZG9uJ3QgZ2V0IHJlZGVmaW5pdGlvbiB3YXJuaW5ncy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC94bW1hcC5jXSBJbmNsdWRlIHN0ZGxpYi5oIGZvciBta3N0ZW1wIHByb3RvdHlwZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgZGVmaW5lcy5oXSBQcmV2ZW50IHdhcm5pbmdzIGFib3V0IF9fYXR0cmlidXRlX18KICAgX19ub25udWxsX18gZm9yIHZlcnNpb25zIG9mIEdDQyB0aGF0IGRvbid0IHN1cHBvcnQgaXQuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaF0gSGF2ZSBjb25maWd1cmUgY2hlY2sgZm9yIG9mZnNldG9mCiAgIHRvIHByZXZlbnQgcmVkZWZpbml0aW9uIHdhcm5pbmdzLgoKMjAwNzA0MDYKIC0gKGR0dWNrZXIpIFtJTlNUQUxMXSBVcGRhdGUgdGhlIHN5c3RlbXMgdGhhdCBoYXZlIFBBTSBhcyBzdGFuZGFyZC4gIExpbmsKICAgdG8gT3BlblBBTSB0b28uCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gcHJuZ2QgbGl2ZXMgYXQgc291cmNlZm9yZ2UgdGhlc2UgZGF5cy4KCjIwMDcwMzI2CiAtICh0aW0pIFthdXRoLmMgY29uZmlndXJlLmFjIGRlZmluZXMuaCBzZXNzaW9uLmMgb3BlbmJzZC1jb21wYXQvcG9ydC11dy5jCiAgIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuaCBvcGVuYnNkLWNvbXBhdC94Y3J5cHQuY10gUmV3b3JrIGxpYmlhZiB0ZXN0L2RlZmluZXMKICAgdG8gYWNjb3VudCBmb3IgSVJJWCBoYXZpbmcgbGliaWFmIGJ1dCBub3Qgc2V0X2lkKCkuIFBhdGNoIHdpdGggJiBvayBkdHVja2VyQAoKMjAwNzAzMjUKIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbiBjb25maWd1cmUuYWNdIFJlcGxhY2Ugc2luZ2xlLXB1cnBvc2UgTElCU0VMSU5VWCwKICAgTElCV1JBUCBhbmQgTElCUEFNIHZhcmlhYmxlcyBpbiBNYWtlZmlsZSB3aXRoIHRoZSBnZW5lcmFsLXB1cnBvc2UKICAgU1NIRExJQlMuICAiSSBsaWtlIiBkam1ACgoyMDA3MDMyMQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDMvMDkgMDU6MjA6MDYKICAgICBbc2VydmNvbmYuYyBzc2hkLmNdCiAgICAgTW92ZSBDL1IgLT4ga2JkaW50IHNwZWNpYWwgY2FzZSB0byBhZnRlciB0aGUgZGVmYXVsdHMgaGF2ZSBiZWVuCiAgICAgbG9hZGVkLCB3aGljaCBtYWtlcyBDaGFsbGVuZ2VSZXNwb25zZSBkZWZhdWx0IHRvIHllcyBhZ2Fpbi4gIFRoaXMKICAgICB3YXMgYnJva2VuIGJ5IHRoZSBNYXRjaCBjaGFuZ2VzIGFuZCBub3QgZml4ZWQgcHJvcGVybHkgc3Vic2VxdWVudGx5LgogICAgIEZvdW5kIGJ5IG9rYW4gYXQgZGVtaXJtZW4uY29tLCBvayBkam1AICJwbGVhc2UgZG8gaXQiIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAzLzE5IDAxOjAxOjI5CiAgICAgW3NzaGRfY29uZmlnXQogICAgIERpc2FibGUgdGhlIGxlZ2FjeSBTU0ggcHJvdG9jb2wgMSBmb3IgbmV3IGluc3RhbGxhdGlvbnMgdmlhCiAgICAgYSBjb25maWd1cmF0aW9uIG92ZXJyaWRlLiBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGNoYW5nZSB0aGUKICAgICBzZXJ2ZXIncyBkZWZhdWx0IGl0c2VsZiBzbyB1c2VycyB3aG8gbmVlZCB0aGUgbGVnYWN5IHByb3RvY29sCiAgICAgd2lsbCBuZWVkIHRvIHR1cm4gaXQgb24gZXhwbGljaXRseQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDMvMTkgMTI6MTY6NDIKICAgICBbc3NoLWFnZW50LmNdCiAgICAgUmVtb3ZlIHRoZSBzaWduYWwgaGFuZGxlciB0aGF0IGNoZWNrcyBpZiB0aGUgYWdlbnQncyBwYXJlbnQgcHJvY2VzcwogICAgIGhhcyBnb25lIGF3YXksIGluc3RlYWQgY2hlY2sgd2hlbiB0aGUgc2VsZWN0IGxvb3AgcmV0dXJucy4gIFJlY29yZCB3aGVuCiAgICAgdGhlIG5leHQga2V5IHdpbGwgZXhwaXJlIHdoZW4gc2Nhbm5pbmcgZm9yIGV4cGlyZWQga2V5cy4gIFNldCB0aGUgc2VsZWN0CiAgICAgdGltZW91dCB0byB3aGljaGV2ZXIgb2YgdGhlc2UgdHdvIHRoaW5ncyBoYXBwZW5zIG5leHQuICBXaXRoIGRqbUAsIHdpdGggJgogICAgIG9rIGRlcmFhZHRAIG1hcmt1c0AKICAgLSB0ZWR1QGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAzLzIwIDAzOjU2OjEyCiAgICAgW3JlYWRjb25mLmMgY2xpZW50bG9vcC5jXQogICAgIHJlbW92ZSBzb21lIGJvZ3VzICpwIHRlc3RzIGZyb20gY2hhcmxlcyBsb25nZWF1CiAgICAgb2sgZGVyYWFkdCBtaWxsZXJ0CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAzLzIwIDE1OjU3OjE1CiAgICAgW3NzaGQuOF0KICAgICAtIGxldCBzeW5vcHNpcyBhbmQgZGVzY3JpcHRpb24gYWdyZWUgZm9yIC1mCiAgICAgLSBzb3J0IEZJTEVTCiAgICAgLSArLlhyIHNzaC1rZXlzY2FuIDEgLAogICAgIGZyb20gSWdvciBTb2JyYWRvCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2JzZC1nZXRwZWVyZWlkLmNdIEJ1ZyAjMTI4NzogVXNlCiAgIGdldHBlZXJ1Y3JlZCB0byBpbXBsZW1lbnQgZ2V0cGVlcmVpZCAoY3VycmVudGx5IG9ubHkgU29sYXJpcyAxMCBhbmQgdXApLgogICBQYXRjaCBieSBKYW4uUGVjaGFuZWMgYXQgU3VuLgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvYWdlbnQtZ2V0cGVlcmVpZC5zaF0gRG8gcGVlcmVpZCB0ZXN0IGlmIHdlIGhhdmUKICAgSEFWRV9HRVRQRUVSVUNSRUQgdG9vLiAgQWxzbyBmcm9tIEphbiBQZWNoYW5lYy4KCjIwMDcwMzEzCiAtIChkdHVja2VyKSBbZW50cm9weS5jIHNjYXJkLW9wZW5zYy5jIHNzaC1yYW5kLWhlbHBlci5jXSBCdWcgIzEyOTQ6IGluY2x1ZGUKICAgc3RyaW5nLmggdG8gcHJldmVudCB3YXJuaW5ncywgZnJvbSB2YXBpZXIgYXQgZ2VudG9vLm9yZy4KIC0gKGR0dWNrZXIpIFtMSUNFTkNFXSBBZGQgRGFuaWVsIFdhbHNoIGFzIGEgY29weXJpZ2h0IGhvbGRlciBmb3IgdGhlCiAgIHNlbGludXggYml0cyBpbiAtcG9ydGFibGUuCiAtIChkdHVja2VyKSBbY2lwaGVyLTNkZXMxLmMgY2lwaGVyLWJmMS5jXSBUaGUgT3BlblNTTCAwLjkuOGUgcHJvYmxlbSBpbgogICBidWcgIzEyOTEgYWxzbyBhZmZlY3RzIFByb3RvY29sIDEgM2Rlcy4gIFdoaWxlIGF0IGl0LCB1c2UgY29tcGF0LW9wZW5zc2wuaAogICBpbiBjaXBoZXItYmYxLmMuICBQYXRjaCBmcm9tIEp1YW4gR2FsbGVnby4KIC0gKGR0dWNrZXIpIFtSRUFETUUucGxhdGZvcm1dIEluZm8gYWJvdXQgYmxpYnBhdGggb24gQUlYLgoKMjAwNzAzMDYKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wMy8wMSAxNjoxOTozMwogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHNvcnQgdGhlIGBtYXRjaCcga2V5d29yZHM7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAzLzA2IDEwOjEzOjE0CiAgICAgW3ZlcnNpb24uaF0KICAgICBvcGVuc3NoLTQuNjsgInBsZWFzZSIgZGVyYWFkdEAKIC0gKGRqbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjXQogICBbY29udHJpYi9zdXNlL29wZW5zc2guc3BlY10gY3Jhbmsgc3BlYyBmaWxlcyBmb3IgcmVsZWFzZQogLSAoZGptKSBbUkVBRE1FXSBjb3JyZWN0IGxpbmsgdG8gcmVsZWFzZSBub3RlcwogLSAoZGptKSBSZWxlYXNlIDQuNnAxCgoyMDA3MDMwNAogLSAoZGptKSBbY29uZmlndXJlLmFjXSBhZGQgYSAtLXdpdGhvdXQtb3BlbnNzbC1oZWFkZXItY2hlY2sgb3B0aW9uIHRvCiAgIGNvbmZpZ3VyZSwgYXMgc29tZSBwbGF0Zm9ybXMgKE9TIFgpIHNoaXAgT3BlblNTTCBoZWFkZXJzIHdob3NlIHZlcnNpb24KICAgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgc2hpcHBpbmcgbGlicmFyeS4gb2sgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5oXSBCdWcgIzEyOTE6IFdvcmsgYXJvdW5kIGEKICAgYnVnIGluIE9wZW5TU0wgMC45LjhlIHRoYXQgcHJldmVudHMgYWVzMjU2LWN0ciwgYWVzMTkyLWN0ciBhbmQgYXJjZm91cjI1NgogICBjaXBoZXJzIGZyb20gd29ya2luZyBjb3JyZWN0bHkgKGRpc2Nvbm5lY3RzIHdpdGggIkJhZCBwYWNrZXQgbGVuZ3RoIgogICBlcnJvcnMpIGFzIGZvdW5kIGJ5IEJlbiBIYXJyaXMuICBvayBkam1ACgoyMDA3MDMwMwogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvYWdlbnQtcHRyYWNlLnNoXSBNYWtlIHR0cmFjZSBnZGIgZXJyb3IgYSBsaXR0bGUgbW9yZQogICBnZW5lcmFsIHRvIGNvdmVyIG5ld2VyIGdkYiB2ZXJzaW9ucyBvbiBIUC1VWC4KCjIwMDcwMzAyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBGb3IgQ3lnd2luLCByZWFkIGZpbGVzIGluIHRleHRtb2RlICh3aGljaCBhbGxvd3MKICAgQ1JMRiBhcyB3ZWxsIGFzIExGIGxpbmVlbmRpbmdzKSBhbmQgd3JpdGUgaW4gYmluYXJ5IG1vZGUuICBQYXRjaCBmcm9tCiAgIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gVXBkYXRlIHRvIGF1dG9jb25mLTIuNjEuCgoyMDA3MDMwMQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDMvMDEgMTA6Mjg6MDIKICAgICBbYXV0aDIuYyBzc2hkX2NvbmZpZy41IHNlcnZjb25mLmNdCiAgICAgUmVtb3ZlIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gc3VwcG9ydCBpbnNpZGUgYSBNYXRjaAogICAgIGJsb2NrIGFzIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEtiZEludGVyYWN0aXZlIG1ha2VzIGl0IGRpZmZpY3VsdCB0bwogICAgIHN1cHBvcnQuICBBbHNvLCByZWxvY2F0ZSB0aGUgQ1Iva2JkaW50IG9wdGlvbiBzcGVjaWFsLWNhc2UgY29kZSBpbnRvCiAgICAgc2VydmNvbmYuICAicGxlYXNlIGNvbW1pdCIgZGptQCwgb2sgbWFya3VzQCBmb3IgdGhlIHJlbG9jYXRpb24uCiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbiBvcGVuc3NoLnhtbC5pbl0gQ2xlYW4gdXAgU29sYXJpcyAxMCBzbWYoNSkgYml0cy4KICAgIkxvb2tzIHNhbmUiIGR0dWNrZXJACgoyMDA3MDIyOAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDIvMjggMDA6NTU6MzAKICAgICBbc3NoLWFnZW50LmNdCiAgICAgUmVtb3ZlIGV4cGlyZWQga2V5cyBwZXJpb2RpY2FsbHkgc28gdGhleSBkb24ndCByZW1haW4gaW4gbWVtb3J5IHdoZW4KICAgICB0aGUgYWdlbnQgaXMgZW50aXJlbHkgaWRsZSwgYXMgbm90ZWQgYnkgRGF2aWQgUi4gUGllZ2Rvbi4gIFRoaXMgaXMgdGhlCiAgICAgc2ltcGxlIGZpeCwgYSBtb3JlIGVmZmljaWVudCBvbmUgd2lsbCBiZSBkb25lIGxhdGVyLiAgV2l0aCBtYXJrdXMsCiAgICAgZGVyYWFkdCwgd2l0aCAmIG9rIGRqbS4KCjIwMDcwMjI1CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAyLzIwIDEwOjI1OjE0CiAgICAgW2NsaWVudGxvb3AuY10KICAgICBzZXQgbWF4aW11bSBwYWNrZXQgYW5kIHdpbmRvdyBzaXplcyB0aGUgc2FtZSBmb3IgbXVsdGlwbGV4ZWQgY2xpZW50cwogICAgIGFzIG5vcm1hbCBjb25uZWN0aW9uczsgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDIvMjEgMTE6MDA6MDUKICAgICBbc3NoZC5jXQogICAgIENsZWFyIGFsYXJtKCkgYmVmb3JlIHJlc3RhcnRpbmcgc3NoZCBvbiBTSUdIVVAuICBXaXRob3V0IHRoaXMsIGlmIHRoZXJlJ3MKICAgICBhIFNJR0FMUk0gcGVuZGluZyAoZm9yIFNTSDEga2V5IHJlZ2VuZXJhdGlvbikgd2hlbiBzc2hkIGlzIFNJR0hVUCdlZCwgdGhlCiAgICAgbmV3bHkgZXhlYydlZCBzc2hkIHdpbGwgZ2V0IHRoZSBTSUdBTFJNIGFuZCBub3QgaGF2ZSBhIGhhbmRsZXIgZm9yIGl0LAogICAgIGFuZCB0aGUgZGVmYXVsdCBhY3Rpb24gd2lsbCB0ZXJtaW5hdGUgdGhlIGxpc3RlbmluZyBzc2hkLiAgQW5hbHlzaXMgYW5kCiAgICAgcGF0Y2ggZnJvbSBhbmRyZXcgYXQgZ2F1bC5vcmcuCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8wMi8yMiAxMjo1ODo0MAogICAgIFtzZXJ2Y29uZi5jXQogICAgIENoZWNrIGFjdGl2ZXAgc28gTWF0Y2ggYW5kIEdhdGV3YXlQb3J0cyB3b3JrIHRvZ2V0aGVyOyBvayBtYXJrdXNACiAgIC0gcmF5QGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAyLzI0IDAzOjMwOjExCiAgICAgW21vZHVsaS5jXQogICAgIC0gc3RybGVuIHJldHVybnMgc2l6ZV90LCBub3QgaW50LgogICAgIC0gUGFzcyBmdWxsIGJ1ZmZlciBzaXplIHRvIGZnZXRzLgogICAgIE9LIGRqbUAsIG1pbGxlcnRALCBhbmQgbW9yaXR6QC4KCjIwMDcwMjE5CiAgLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wMS8xMCAxMzoyMzoyMgogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgZG8gbm90IHVzZSBhIGxpc3QgZm9yIFNZTk9QU0lTOwogICAgIHRoaXMgaXMgYWN0dWFsbHkgcGFydCBvZiBhIGxhcmdlciByZXBvcnQgc2VudCBieSBlcmljIHMuIHJheW1vbmQKICAgICBhbmQgZm9yd2FyZGVkIGJ5IGJyYWQsIGJ1dCBpIG9ubHkgcmVhZCBoYWxmIG9mIGl0LiBzcG90dGVkIGJ5IGJyYWQuCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAxLzEyIDIwOjIwOjQxCiAgICAgW3NzaC1rZXlnZW4uMSBzc2gta2V5Z2VuLmNdCiAgICAgbW9yZSBzZWNzaCAtPiByZmMgNDcxNiB1cGRhdGVzOwogICAgIHNwb3R0ZWQgYnkgd2l6QG5ldGJzZAogICAgIG9rIG1hcmt1cwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMTcgMjM6MjI6NTIKICAgICBbcmVhZGNvbmYuY10KICAgICBIb25vdXIgYWN0aXZlcCBmb3IgdGltZXMgKGVnIFNlcnZlckFsaXZlSW50ZXJ2YWwpIHdoaWxlIHBhcnNpbmcKICAgICBzc2hfY29uZmlnIGFuZCB+Ly5zc2gvY29uZmlnIHNvIHRoZXkgd29yayBwcm9wZXJseSB3aXRoIEhvc3QgZGlyZWN0aXZlcy4KICAgICBGcm9tIG1hcmlvLmxvcmVuekB3aW5jb3Itbml4ZG9yZi5jb20gdmlhIGJ6ICMxMjc1LiAgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMjEgMDE6NDE6NTQKICAgICBbYXV0aC1za2V5LmMga2V4LmMgc3NoLWtleWdlbi5jIHNlc3Npb24uYyBjbGllbnRsb29wLmNdCiAgICAgc3BhY2VzCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wMS8yMSAwMTo0NTozNQogICAgIFtyZWFkY29uZi5jXQogICAgIHNwYWNlcwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wMS8yMiAxMTozMjo1MAogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIHJldHVybiBlcnJvciBmcm9tIGRvX3VwbG9hZCgpIHdoZW4gYSB3cml0ZSBmYWlscy4gZml4ZXMgYnojMTI1MjogemVybwogICAgIGV4aXQgc3RhdHVzIGZyb20gc2Z0cCB3aGVuIHVwbG9hZGluZyB0byBhIGZ1bGwgZGV2aWNlLiByZXBvcnQgZnJvbQogICAgIGppcmthdCBBVCBhdGxhcy5jejsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMjIgMTM6MDY6MjEKICAgICBbc2NwLmNdCiAgICAgZml4IGRldGVjdGlvbiBvZiB3aGV0aGVyIHdlIHNob3VsZCBzaG93IHByb2dyZXNzIG1ldGVyIG9yIG5vdDogc2NwCiAgICAgdGVzdGVkIGlzYXR0eShzdGRlcnIpIGJ1dCB3cm90ZSB0aGUgcHJvZ3Jlc3MgbWV0ZXIgdG8gc3Rkb3V0LiBUaGlzIHBhdGNoCiAgICAgbWFrZXMgaXQgdGVzdCBzdGRvdXQuIGJ6IzEyNjUgcmVwb3J0ZWQgYnkganVua21haWwgQVQgYml0c2N1bHB0dXJlLmNvbTsKICAgICBvZiBkdHVja2VyQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDIvMTQgMTQ6MzI6MDAKICAgICBbYnVmYm4uY10KICAgICB0eXBvcyBpbiBjb21tZW50czsgb2sgam1jQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDIvMTkgMTA6NDU6NTgKICAgICBbbW9uaXRvcl93cmFwLmMgc2VydmNvbmYuYyBzZXJ2Y29uZi5oIG1vbml0b3IuYyBzc2hkX2NvbmZpZy41XQogICAgIFRlYWNoIE1hdGNoIGhvdyBoYW5kbGUgY29uZmlnIGRpcmVjdGl2ZXMgdGhhdCBhcmUgdXNlZCBiZWZvcmUKICAgICBhdXRoZW50aWNhdGlvbi4gIFRoaXMgYWxsb3dzIGNvbmZpZ3VyYXRpb25zIHN1Y2ggYXMgcGVybWl0dGluZyBwYXNzd29yZAogICAgIGF1dGhlbnRpY2F0aW9uIGZyb20gdGhlIGxvY2FsIG5ldCBvbmx5IHdoaWxlIHJlcXVpcmluZyBwdWJrZXkgZnJvbQogICAgIG9mZnNpdGUuICBvayBkam1ALCBtYW4gcGFnZSBiaXRzIG9rIGptY0AKIC0gKGR0dWNrZXIpIFtjb250cmliL2ZpbmRzc2wuc2hdIEFkZCAid2hpY2giIGFzIGEgc2hlbGwgZnVuY3Rpb24gc2luY2Ugc29tZQogICBwbGF0Zm9ybXMgZG9uJ3QgaGF2ZSBpdC4gIFBhdGNoIGZyb20gZGxlb25hcmQgYXQgdmludGVsYS5jb20uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gRG9uJ3QgYXR0ZW1wdCB0byBjYWxsb2MKICAgYW4gYXJyYXkgZm9yIHNpZ25hdHVyZXMgd2hlbiB0aGVyZSBhcmUgbm9uZSBzaW5jZSAiY2FsbG9jKDAsIG4pIHJldHVybnMKICAgTlVMTCBvbiBzb21lIHBsYXRmb3JtcyAoZWcgVHJ1NjQpLCB3aGljaCBpcyBleHBsaWNpdGx5IHBlcm1pdHRlZCBieQogICBQT1NJWC4gIERpYWdub3NpcyBhbmQgcGF0Y2ggYnkgc3ZhbGxldCBnZW5vc2NvcGUuY25zLmZyLgoKMjAwNzAxMjgKIC0gKGRqbSkgW2NoYW5uZWxzLmMgc2VydmVybG9vcC5jXSBGaXggc28tY2FsbGVkICJoYW5nIG9uIGV4aXQiIChieiAjNTIpCiAgIHdoZW4gY2xvc2luZyBhIHR0eSBzZXNzaW9uIHdoZW4gYSBiYWNrZ3JvdW5kIHByb2Nlc3Mgc3RpbGwgaG9sZHMgdHR5CiAgIGZkcyBvcGVuLiBHcmVhdCBkZXRlY3RpdmUgd29yayBhbmQgcGF0Y2ggYnkgTWFyYyBBdXJlbGUgTGEgRnJhbmNlLAogICBzbGlnaHRseSB0d2Vha2VkIGJ5IG1lOyBvayBkdHVja2VyQAoKMjAwNzAxMjMKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2Qtc25wcmludGYuY10gU3RhdGljIGRlY2xhcmF0aW9ucyBmb3IgcHVibGljCiAgIGxpYnJhcnkgaW50ZXJmYWNlcyBhcmVuJ3QgdmVyeSBoZWxwZnVsLiBGaXggdXAgdGhlIERPUFJfT1VUQ0ggbWFjcm8KICAgc28gaXQgd29ya3MgcHJvcGVybHkgYW5kIG1vZGlmeSBpdHMgY2FsbGVycyBzbyB0aGF0IHRoZXkgZG9uJ3QgcHJlIG9yCiAgIHBvc3QgZGVjcmVtZW50IGFyZ3VtZW50cyB0aGF0IGFyZSBjb25kaXRpb25hbGx5IGV2YWx1YXRlZC4gV2hpbGUgdGhlcmUsCiAgIHB1dCBTTlBSSU5URl9DT05TVCBiYWNrIGFzIGl0IHByZXZlbnRzIGJ1aWxkIGZhaWx1cmVzIGluIHNvbWUKICAgY29uZmlndXJhdGlvbnMuICBvayBkam1AIChmb3IgbW9zdCBvZiBpdCkKCjIwMDcwMTIyCiAtIChkam0pIFtzc2gtcmFuZC1oZWxwZXIuOF0gbWFucGFnZSBuaXRzOwogICBmcm9tIGRsZW9uYXJkIEFUIHZpbnRlbGEuY29tIChieiMxNTI5KQoKMjAwNzAxMTcKIC0gKGR0dWNrZXIpIFtwYWNrZXQuY10gUmUtcmVtb3ZlIGluX3N5c3RtLmggc2luY2UgaXQncyBhbHJlYWR5IGluIGluY2x1ZGVzLmgKICAgYW5kIG11bHRpcGxlIGluY2x1ZGluZyBpdCBjYXVzZXMgcHJvYmxlbXMgb24gb2xkIElSSVhlcy4gIChJdCBzbnVjayBiYWNrCiAgIGluIGR1cmluZyBhIHN5bmMuKSAgRm91bmQgKGFnYWluKSBieSBHZW9yZyBTY2h3YXJ6LgoKMjAwNzAxMTQKIC0gKGR0dWNrZXIpIFtzc2gta2V5Z2VuLmNdIGF2IC0+IGFyZ3YgdG8gbWF0Y2ggZWFybGllciBzeW5jLgogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmNdIEZpeCBpbnRlZ2VyIG92ZXJmbG93IGluIHJldHVybgogICB2YWx1ZSBvZiBzbnByaW50ZiByZXBsYWNlbWVudCwgc2ltaWxhciB0byBidWdzIGluIHZhcmlvdXMgbGliYwogICBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgb3ZlcmZsb3cgaXMgbm90IGV4cGxvaXRhYmxlIGluIE9wZW5TU0guIAogICBXaGlsZSBJJ20gZmlkZGxpbmcgd2l0aCBpdCwgbWFrZSBpdCBhIGZhaXIgYml0IGZhc3RlciBieSBpbmxpbmluZyB0aGUKICAgYXBwZW5kLWNoYXIgcm91dGluZTsgb2sgZHR1Y2tlckAKCjIwMDcwMTA1CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzExLzE0IDE5OjQxOjA0CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICB1c2UgYXJnYyBhbmQgYXJndiBub3Qgc29tZSBtYWRlIHVwIHNob3J0IGZvcm0KICAgLSByYXlAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTEvMjMgMDE6MzU6MTEKICAgICBbbWlzYy5jIHNmdHAuY10KICAgICBEb24ndCBhY2Nlc3MgYnVmW3N0cmxlbihidWYpIC0gMV0gZm9yIHplcm8tbGVuZ3RoIHN0cmluZ3MuCiAgICAgYGBvayBieSBtZScnIGRqbUAuCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEyLzExIDIxOjI1OjQ2CiAgICAgW3NzaC1rZXlnZW4uMSBzc2guMV0KICAgICBhZGQgcmZjIDQ3MTYgKHB1YmxpYyBrZXkgZm9ybWF0KTsgb2sgam1jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEyLzEyIDAzOjU4OjQyCiAgICAgW2NoYW5uZWxzLmMgY29tcGF0LmMgY29tcGF0LmhdCiAgICAgYnogIzEwMTk6IHNvbWUgc3NoLmNvbSB2ZXJzaW9ucyBhcHBhcmVudGx5IGNhbid0IGNvcGUgd2l0aCB0aGUKICAgICByZW1vdGUgcG9ydCBmb3J3YXJkaW5nIGJpbmRfYWRkcmVzcyBiZWluZyBhIGhvc3RuYW1lLCBzbyBzZW5kCiAgICAgdGhlbSBhbiBhZGRyZXNzIGZvciBjYXNlcyB3aGVyZSB0aGV5IGFyZSBub3QgZXhwbGljaXRseQogICAgIHNwZWNpZmllZCAod2lsZGNhcmQgb3IgbG9jYWxob3N0IGJpbmQpLiAgcmVwb3J0ZWQgYnkgZGF2ZXJvdGggQVQKICAgICBhY20ub3JnOyBvayBkdHVja2VyQCBkZXJhYWR0QAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTIvMTMgMDg6MzQ6MzkKICAgICBbc2VydmNvbmYuY10KICAgICBNYWtlIFBlcm1pdE9wZW4gd29yayB3aXRoIG11bHRpcGxlIHZhbHVlcyBsaWtlIHRoZSBtYW4gcGFnZXMgc2F5cy4KICAgICBieiAjMTI2NyB3aXRoIGRldGFpbHMgZnJvbSBwZXRlciBhdCBkbXR6LmNvbSwgd2l0aCAmIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEyLzE0IDEwOjAxOjE0CiAgICAgW3NlcnZjb25mLmNdCiAgICAgTWFrZSAiUGVybWl0T3BlbiBhbGwiIGZpcnN0LW1hdGNoIHdpdGhpbiBhIGJsb2NrIHRvIG1hdGNoIHRoZSB3YXkgb3RoZXIKICAgICBvcHRpb25zIHdvcmsuICBvayBtYXJrdXNAIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMDIgMDk6NTc6MjUKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBkbyBub3QgdXNlIGxpc3RzIGZvciBTWU5PUFNJUzsKICAgICBmcm9tIGVyaWMgcy4gcmF5bW9uZCB2aWEgYnJhZAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMDMgMDA6NTM6MzgKICAgICBbc3NoLWtleWdlbi5jXQogICAgIHJlbW92ZSBzbWFsbCBkZWFkIGNvZGU7IGFybmF1ZC5sYWNvbWJlLjFAdWxhdmFsLmNhIHZpYSBDb3Zlcml0eSBzY2FuCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wMS8wMyAwMzowMTo0MAogICAgIFthdXRoMi1jaGFsbC5jIGNoYW5uZWxzLmMgZG5zLmMgc2Z0cC5jIHNzaC1rZXlnZW4uYyBzc2guY10KICAgICBzcGFjZXMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAxLzAzIDA0OjA5OjE1CiAgICAgW3NmdHAuY10KICAgICBBUkdTVVNFRCBmb3IgbGludAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMDMgMDc6MjI6MzYKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICBzcGFjZXMKCjIwMDYxMjA1CiAtIChkam0pIFthdXRoLmNdIEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gZmFrZXB3KCkuICBDcmFzaCB3b3VsZAogICBvY2N1ciBpZiB0aGUgc2VydmVyIGRpZCBub3QgaGF2ZSB0aGUgcHJpdnNlcCB1c2VyIGFuZCBhbiBpbnZhbGlkIHVzZXIKICAgdHJpZWQgdG8gbG9naW4gYW5kIGJvdGggcHJpdnNlcCBhbmQga3JiNSBhdXRoIGFyZSBkaXNhYmxlZDsgb2sgZHR1Y2tlckAKIC0gKGRqbSkgW2JzZC1hc3ByaW50Zi5jXSBCZXR0ZXIgdGVzdCBmb3IgYmFkIHZzbnByaW50ZiBsZW5ndGhzOyBvayBkdHVja2VyQAoKMjAwNjExMDgKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTEvMDcgMTM6MDI6MDcKICAgICBbZGguY10KICAgICBCTl9oZXgyYm4gcmV0dXJucyBpbnQ7IGZyb20gZHR1Y2tlckAKCjIwMDYxMTA3CiAtIChkdHVja2VyKSBbc3NoZC5jXSBVc2UgcHJpdnNlcF9wdyBpZiB3ZSBoYXZlIGl0LCBidXQgb25seSByZXF1aXJlIGl0CiAgIGlmIHdlIGFic29sdXRlbHkgbmVlZCBpdC4gIFBvaW50ZWQgb3V0IGJ5IENvcmlubmEsIG9rIGRqbUAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTEvMDYgMjE6MjU6MjgKICAgICBbYXV0aC1yc2EuYyBrZXhnZXhjLmMga2V4ZGhzLmMga2V5LmMgc3NoLWRzcy5jIHNzaGQuYyBrZXhnZXhzLmMKICAgICBzc2gta2V5Z2VuLmMgYnVmYm4uYyBtb2R1bGkuYyBzY2FyZC5jIGtleGRoYy5jIHNzaGNvbm5lY3QxLmMgZGguYyByc2EuY10KICAgICBhZGQgbWlzc2luZyBjaGVja3MgZm9yIG9wZW5zc2wgcmV0dXJuIGNvZGVzOyB3aXRoICYgb2sgZGptQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8xMS8wNyAxMDozMTozMQogICAgIFttb25pdG9yLmMgdmVyc2lvbi5oXQogICAgIGNvcnJlY3RseSBjaGVjayBmb3IgYmFkIHNpZ25hdHVyZXMgaW4gdGhlIG1vbml0b3IsIG90aGVyd2lzZSB0aGUgbW9uaXRvcgogICAgIGFuZCB0aGUgdW5wcml2IHByb2Nlc3MgY2FuIGdldCBvdXQgb2Ygc3luYy4gd2l0aCBkdHVja2VyQCwgb2sgZGptQCwKICAgICBkdHVja2VyQAogLSAoZHR1Y2tlcikgW1JFQURNRSBjb250cmliL3tjYWxkZXJhLHJlZGhhdCxjb250cmlifS9vcGVuc3NoLnNwZWNdIEJ1bXAKICAgdmVyc2lvbnMuCiAtIChkdHVja2VyKSBSZWxlYXNlIDQuNXAxLgoKMjAwNjExMDUKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG90dG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTAvMjggMTg6MDg6MTAKICAgICBbc3NoLjFdCiAgICAgY29ycmVjdC9leHBhbmQgZXhhbXBsZSBvZiB1c2FnZSBvZiAtdzsgb2sgam1jQCBzdGV2ZXNrQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8xMC8zMSAxNjozMzoxMgogICAgIFtrZXhkaGMuYyBrZXhkaHMuYyBrZXhnZXhjLmMga2V4Z2V4cy5jXQogICAgIGNoZWNrIERIX2NvbXB1dGVfa2V5KCkgZm9yIC0xIGV2ZW4gaWYgaXQgc2hvdWxkIG5vdCBoYXBwZW4gYmVjYXVzZSBvZgogICAgIGVhcmxpZXIgY2FsbHMgdG8gZGhfcHViX2lzX3ZhbGlkKCk7IHJlcG9ydCBrcmFobWVyIGF0IHN1c2UuZGU7IG9rIGRqbQoKMjAwNjExMDEKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuY10gQnVnICMxMjU1OiBNYWtlIG9ubHkgaHdlcnIKICAgZXZlbnRzIGZhdGFsIGluIFNvbGFyaXMgcHJvY2VzcyBjb250cmFjdCBzdXBwb3J0IGFuZCB0ZWxsIGl0IHRvIHNpZ25hbAogICBvbmx5IHByb2Nlc3NlcyBpbiB0aGUgc2FtZSBwcm9jZXNzIGdyb3VwIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMuCiAgIEJhc2VkIG9uIGluZm9ybWF0aW9uIGZyb20gYW5kcmV3LmJlbmhhbSBhdCB0aHVzLm5ldCBhbmQgc2ltaWxhciB0bwogICBhIHBhdGNoIGZyb20gQ2hhZCBNeW5oaWVyLiAgb2sgZGptQAoKMjAwNjEwMjcKLSAoZGptKSBbYXV0aC5jXSBnYyBzb21lIGRlYWQgY29kZQoKMjAwNjEwMjMKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIHJheUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOS8zMCAxNzo0ODoyMgogICAgIFtzZnRwLmNdCiAgICAgQ2xlYXIgZXJybm8gYmVmb3JlIGNhbGxpbmcgdGhlIHN0cnRvbCBmdW5jdGlvbnMuCiAgICAgRnJvbSBQYXVsIFN0b2ViZXIgPHgwMDAxIGF0IHggZG90IGRlMSBkb3QgY2M+LgogICAgIE9LIGRlcmFhZHRALgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8xMC8wNiAwMjoyOToxOQogICAgIFtzc2gtYWdlbnQuYyBzc2gta2V5c2Nhbi5jIHNzaC5jXQogICAgIHN5cy9yZXNvdXJjZS5oIG5lZWRzIHN5cy90aW1lLmg7IHByb21wdGVkIGJ5IGJyYWRACiAgICAgKE5CLiBJZCBzeW5jIG9ubHkgZm9yIHBvcnRhYmxlKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8xMC8wOSAyMzozNjoxMQogICAgIFtzZXNzaW9uLmNdCiAgICAgeG1hbGxvYyAtPiB4Y2FsbG9jIHRoYXQgd2FzIG1pc3NlZCBwcmV2aW91c2x5LCBmcm9tIHBvcnRhYmxlCiAgICAgKE5CLiBJZCBzeW5jIG9ubHkgZm9yIHBvcnRhYmxlLCBvYnZpb3VzbHkpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEwLzEwIDEwOjEyOjQ1CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBzbGVlcCBiZWZvcmUgcmV0cnlpbmcgKG5vdCBhZnRlcikgc2luY2Ugc2xlZXAgY2hhbmdlcyBlcnJubzsgZml4ZXMKICAgICBwciA1MjUwOyByYWRAdHdpZy5jb207IG9rIGR0dWNrZXIgZGptCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEwLzExIDEyOjM4OjAzCiAgICAgW2NsaWVudGxvb3AuYyBzZXJ2ZXJsb29wLmNdCiAgICAgZXhpdCBpbnN0ZWFkIG9mIGRvaW5nIGEgYmxvY2tpbmcgdGNwIHNlbmQgaWYgd2UgZGV0ZWN0IGEgY2xpZW50L3NlcnZlcgogICAgIHRpbWVvdXQsIHNpbmNlIHRoZSB0Y3Agc2VuZHF1ZXVlIG1pZ2h0IGJlIGFscmVhZHkgZnVsbCAob2YgYWxpdmUKICAgICByZXF1ZXN0cyk7IG9rIGR0dWNrZXIsIHJlcG9ydCBtcGYKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTAvMjIgMDI6MjU6NTAKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBjYW5jZWwgcHJvZ3Jlc3MgbWV0ZXIgd2hlbiB1cGxvYWQgd3JpdGUgZmFpbHM7IG9rIGRlcmFhZHRACiAtICh0aW0pIFtNYWtlZmlsZS5pbiBzY2FyZC9NYWtlZmlsZS5pbl0gQWRkIGRhdGFyb290ZGlyPSBsaW5lcyB0byBrZWVwCiAgIGF1dG9jb25mIDIuNjAgZnJvbSBjb21wbGFpbmluZy4KCjIwMDYxMDE4CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gcmF5QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA5LzI1IDA0OjU1OjM4CiAgICAgW3NzaC1rZXlzY2FuLjEgc3NoLjFdCiAgICAgQ2hhbmdlICJhIFNTSCIgdG8gImFuIFNTSCIuICBIdXJyYXksIEknbSBub3QgdGhlIG9ubHkgb25lIHdobwogICAgIHByb25vdW5jZXMgIlNTSCIgYXMgImVzcy1lc3MtYWljaCIuCiAgICAgT0sgam1jQCBhbmQgc3RldmVza0AuCiAtIChkdHVja2VyKSBbc3NoZC5jXSBSZXNodWZmbGUgc3RvcmluZyBvZiBwdyBzdHJ1Y3Q7IHByZXZlbnRzIHdhcm5pbmdzCiAgIG9uIG9sZGVyIHZlcnNpb25zIG9mIE9TIFguICBvayBkam1ACgoyMDA2MTAxNgogLSAoZHR1Y2tlcikgW21vbml0b3JfZmRwYXNzLmNdIEluY2x1ZGUgc3lzL2luLmgsIHJlcXVpcmVkIGZvciBjbXNnIG1hY3JvcwogICBvbiBvbGRlciAoMi4wKSBMaW51eGVzLiAgQmFzZWQgb24gcGF0Y2ggZnJvbSB0aG1vLTEzIGF0IGdteCBkZS4KCjIwMDYxMDA2CiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbl0gVXNlIHVuYW1lIC1yIGluc3RlYWQgb2YgLXYgaW4gT1NfVkVSIGZvciBTb2xhcmlzLgogICBEaWZmZXJlbnRpYXRlIGJldHdlZW4gT3BlblNlcnZlciA1IGFuZCBPcGVuU2VydmVyIDYKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFNldCBwdXQgLWxzZWxpbnV4IGludG8gJExJQlMgd2hpbGUgdGVzdGluZyBmb3IKICAgU0VMaW51eCBmdW5jdGlvbnMgc28gdGhleSdyZSBkZXRlY3RlZCBjb3JyZWN0bHkuICBQYXRjaCBmcm9tIHBlYmVuaXRvIGF0CiAgIGdlbnRvby5vcmcuCiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbl0gU29tZSBzeXN0ZW1zIGhhdmUgcmVhbGx5IGxpbWl0ZWQgbmF3ayAoT3BlblNlcnZlcikuCiAgIEFsbG93IHNldHRpbmcgYWx0ZXJuYXRlIGF3ayBpbiBvcGVuc3NoLWNvbmZpZy5sb2NhbC4KCjIwMDYxMDAzCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIE1vdmUgQ0hFQ0tfSEVBREVSUyB0ZXN0IGJlZm9yZSBwbGF0Zm9ybSBzcGVjaWZpYwogICBzZWN0aW9uIHNvIGFkZGl0aW9uYWwgcGxhdGZvcm0gc3BlY2lmaWMgQ0hFQ0tfSEVBREVSIHRlc3RzIHdpbGwgd29yawogICBjb3JyZWN0bHkuIEZpeGVzICI8bmV0L2lmX3RhcC5oPiBvbiBGcmVlQlNEIiBwcm9ibGVtIHJlcG9ydCBieSBkZXMgQVQgZGVzLm5vCiAgIEZlZWRiYWNrIGFuZCAic2VlbXMgbGlrZSBhIGdvb2QgaWRlYSIgZHR1Y2tlckAKCjIwMDYxMDAxCiAtIChkdHVja2VyKSBbYXVkaXQtYnNtLmNdIEluY2x1ZGUgZXJybm8uaC4gIFBvaW50ZWQgb3V0IGJ5IGRlcyBhdCBkZXMubm8uCgoyMDA2MDkyOQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMjM5OiBGaXggY29uZmlndXJlIHRlc3QgZm9yIE9wZW5TU0ggZW5naW5lCiAgIHN1cHBvcnQuICBQYXRjaCBmcm9tIGFuZHJldy5iZW5oYW0gYXQgdGh1cyBuZXQuCgoyMDA2MDkyOAogLSAoZHR1Y2tlcikgW2VudHJvcHkuY10gQnVnICMxMjM4OiBpbmNsdWRlIHNpZ25hbC5oIHRvIGZpeCBjb21waWxhdGlvbiBlcnJvcgogICBvbiBTb2xhcmlzIDggdy9vdXQgL2Rldi9yYW5kb20gb3IgcHJuZ2QuICBQYXRjaCBmcm9tIHJsIGF0CiAgIG1hdGgudGVjaG5pb24uYWMuaWwuCgoyMDA2MDkyNgogLSAoZHR1Y2tlcikgW2J1ZmF1eC5oXSBudWtlIGJ1ZmF1eC5oOyBpdCdzIGFscmVhZHkgZ29uZSBmcm9tIE9wZW5CU0QgYW5kIG5vdAogICByZWZlcmVuY2VkIGFueSBtb3JlLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3NmdHAtc2VydmVyLjhdIFJlc3luYzsgc3BvdHRlZCBieSBkam1ACiAtIChkdHVja2VyKSBSZWxlYXNlIDQuNHAxLgoKMjAwNjA5MjQKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gUmVtb3ZlIENGTEFHUyBoYWNrIGZvciBVbml4V2FyZSAxLngvMi54IChhZGRlZAogICB0byByZXYgMS4zMDgpIHRvIHdvcmsgYXJvdW5kIGJyb2tlbiBnY2MgMi54IGhlYWRlciBmaWxlLgoKMjAwNjA5MjMKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTIzNDogUHV0IG9wZW5zYyBsaWJzIGludG8gJExJQlMgcmF0aGVyIHRoYW4KICAgJExERkxBR1MuICBQYXRjaCBmcm9tIHZhcGllciBhdCBnZW50b28gb3JnLgoKMjAwNjA5MjIKIC0gKGR0dWNrZXIpIFtwYWNrZXQuYyBjYW5vaG9zdC5jXSBJbmNsdWRlIGFycGEvaW5ldC5oIGZvciBodG9ubCBtYWNyb3Mgb24KICAgc29tZSBwbGF0Zm9ybXMgKGVnIEhQLVVYIDExLjAwKS4gIEZyb20gc2FudGhpLmFtaXJ0YSBhdCBnbWFpbCBjb20uCgoyMDA2MDkyMQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG90dG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDkvMTkgMDU6NTI6MjMKICAgICBbc2Z0cC5jXQogICAgIFVzZSBTX0lTKiBtYWNyb3MgaW5zdGVkIG9mIG1hc2tpbmcgd2l0aCBTX0lGKiBmbGFncy4gVGhlIGxhdHRlciBtYXkKICAgICBoYXZlIG11bHRpcGxlIGJpdHMgc2V0LCB3aGljaCBsZWFkIHRvIHN1cnByaXNpbmcgcmVzdWx0cy4gU3BvdHRlZCBieQogICAgIFBhdWwgU3RvZWJlciwgbW9yZSB0byBjb21lLiBvayBtaWxsZXJ0QCBwZWRyb0AgamFyZWR5QCBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA5LzE5IDIxOjE0OjA4CiAgICAgW3BhY2tldC5jXQogICAgIGNsaWVudCBOVUxMIGRlcmVmIG9uIHByb3RvY29sIGVycm9yOyBUYXZpcyBPcm1hbmR5LCBHb29nbGUgU2VjdXJpdHkgVGVhbQogLSAoZHR1Y2tlcikgW2RlZmluZXMuaF0gSW5jbHVkZSB1bmlzdGQuaCBiZWZvcmUgZGVmaW5pbmcgZ2V0cGdycDsgZml4ZXMKICAgYnVpbGQgZXJyb3Igb24gVWx0cml4LiAgRnJvbSBCZXJuaGFyZCBTaW1vbi4KCjIwMDYwOTE4CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBPbiBBSVgsIGNoZWNrIHRvIHNlZSBpZiB0aGUgY29tcGlsZXIgd2lsbCBhbGxvdwogICBtYWNybyByZWRlZmluaXRpb25zLCBhbmQgaWYgbm90LCByZW1vdmUgIi1xbGFuZ2x2bD1hbnNpIiBmcm9tIHRoZSBmbGFncy4KICAgQWxsb3dzIGJ1aWxkIG91dCBvZiB0aGUgYm94IHdpdGggb2xkZXIgVkFDIGFuZCBYTEMgY29tcGlsZXJzLiAgRm91bmQgYnkKICAgRGF2aWQgQnJvbmRlciBhbmQgQmVybmhhcmQgU2ltb24uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXgue2MsaH1dIFJlZHVjZSBzY29wZSBvZiBpbmNsdWRlcy4KICAgUHJldmVudHMgbWFjcm8gcmVkZWZpbml0aW9uIHdhcm5pbmdzIG9mICJSRE9OTFkiLgoKMjAwNjA5MTYKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOS8xNiAxOTo1MzozNwogICAgIFtkZWF0dGFjay5jIGRlYXR0YWNrLmggcGFja2V0LmNdCiAgICAgbGltaXQgbWF4aW11bSB3b3JrIHBlcmZvcm1lZCBieSB0aGUgQ1JDIGNvbXBlbnNhdGlvbiBhdHRhY2sgZGV0ZWN0b3IsCiAgICAgcHJvYmxlbSByZXBvcnRlZCBieSBUYXZpcyBPcm1hbmR5LCBHb29nbGUgU2VjdXJpdHkgVGVhbTsKICAgICBvayBtYXJrdXNAIGRlcmFhZHRACiAtIChkam0pIEFkZCBvcGVuc3NoLnhtbCB0byAuY3ZzaWdub3JlIGFuZCBzb3J0IGl0CiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gUHJvcG9nYXRlIFRaIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIFBBTSBhdXRoCiAgIHByb2Nlc3Mgc28gdGhhdCBhbnkgbG9nZ2luZyBpdCBkb2VzIGlzIHdpdGggdGhlIHJpZ2h0IHRpbWV6b25lLiAgRnJvbQogICBTY290dCBTdHJpY2tsZXIsIG9rIGRqbUAuCiAtIChkdHVja2VyKSBbbW9uaXRvci5jXSBDb3JyZWN0bHkgaGFuZGxlIGF1ZGl0aW5nIG9mIHNpbmdsZSBjb21tYW5kcyB3aGVuCiAgIHVzaW5nIFByb3RvY29sIDEuICBGcm9tIGpoYiBhdCBmcmVlYnNkLgogLSAoZGptKSBbc3NoZC5jXSBGaXggd2FybmluZy9BUEkgYWJ1c2U7IG9rIGR0dWNrZXJACiAtIChkdHVja2VyKSBbSU5TVEFMTF0gQWRkIGluZm8gYWJvdXQgYXVkaXQgc3VwcG9ydC4KCjIwMDYwOTEyCiAtIChkam0pIFtNYWtlZmlsZS5pbiBidWlsZHBrZy5zaC5pbiBjb25maWd1cmUuYWMgb3BlbnNzaC54bWwuaW5dCiAgIFN1cHBvcnQgU01GIGluIFNvbGFyaXMgUGFja2FnZXMgaWYgZW5hYmxlZCBieSBjb25maWd1cmUuIFBhdGNoIGZyb20KICAgQ2hhZCBNeW5oaWVyLCB0ZXN0ZWQgYnkgZHR1Y2tlckAKCjIwMDYwOTExCiAtIChkdHVja2VyKSBbY2lwaGVyLWFlcy5jXSBJbmNsdWRlIHN0cmluZy5oIGZvciBtZW1jcHkgYW5kIGZyaWVuZHMuICBOb3RlZAogICBieSBQZWtrYSBTYXZvbGEuCgoyMDA2MDkxMAogLSAoZHR1Y2tlcikgW2NvbnRyaWIvYWl4L2J1aWxkYmZmLnNoXSBFbnN1cmUgdGhhdCBwZXJsIGlzIGF2YWlsYWJsZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEFkZCAtbGNyeXB0IHRvIGxldCBEcmFnb25GbHkgYnVpbGQgT09UQi4KCjIwMDYwOTA5CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmNdIEFkZCBzdGRhcmcuaC4KIC0gKGR0dWNrZXIpIFtjb250cmliL2FpeC9idWlsZGJmZi5zaF0gQWx3YXlzIGNyZWF0ZSBwcml2c2VwIHVzZXIuCiAtIChkdHVja2VyKSBbYnVpbGRwa2cuc2guaW5dIEFsd2F5cyBjcmVhdGUgcHJpdnNlcCB1c2VyLiAgb2sgZGptQAoKMjAwNjA5MDgKIC0gKGR0dWNrZXIpIFthdXRoLXNpYS5jXSBBZGQgaW5jbHVkZXMgcmVxdWlyZWQgZm9yIGJ1aWxkIG9uIFRydTY0LiAgUGF0Y2gKICAgZnJvbSBDaHJpcyBBZGFtcy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFRoZSBCU00gaGVhZGVyIHRlc3QgbmVlZHMgdGltZS5oIGluIHNvbWUgY2FzZXMuCgoyMDA2MDkwNwogLSAoZGptKSBbc3NoZC5jIGF1dGguY10gU2V0IHVwIGZha2VwdygpIHdpdGggcHJpdnNlcCB1aWQvZ2lkLCBzbyBpdCBjYW4KICAgYmUgdXNlZCB0byBkcm9wIHByaXZpbGVnZSB0bzsgZml4ZXMgU29sYXJpcyBHU1NBUEkgY3Jhc2ggcmVwb3J0ZWQgYnkKICAgTWFnbnVzIEFicmFudGU7IHN1Z2dlc3Rpb24gYW5kIGZlZWRiYWNrIGR0dWNrZXJACiAgIE5CLiB0aGlzIGNoYW5nZSB3aWxsIHJlcXVpcmUgdGhhdCB0aGUgcHJpdmlsZWdlIHNlcGFyYXRpb24gdXNlciBtdXN0CiAgIGV4aXN0IG9uIGFsbCB0aGUgdGltZSwgbm90IGp1c3Qgd2hlbiBVc2VQcml2aWxlZ2VTZXBhcmF0aW9uPXllcwogLSAodGltKSBbY29uZmlndXJlLmFjXSBzL0JST0tFTl9VUERXVE1QL0JST0tFTl9VUERXVE1QWC8gb24gU0NPIE9TUjYKIC0gKGR0dWNrZXIpIFtsb2dpbnJlYy5jXSBXcmFwIHBhdGhzLmggaW4gSEFWRV9QQVRIU19ILgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvY2ZnbWF0Y2guc2hdIHN0b3BfY2xpZW50IGlzIHJhY3ksIHNvIGdpdmUgdXMgYSBiZXR0ZXIKICAgY2hhbmNlIG9mIHdpbm5pbmcuCgoyMDA2MDkwNQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gcy9BQ19ERUZJTkVTL0FDX0RFRklORS8gc3BvdHRlZCBieSBSb3VtZW4gUGV0cm92LgogLSAoZHR1Y2tlcikgW2xvZ2lucmVjLmNdIEluY2x1ZGUgcGF0aHMuaCBmb3IgX1BBVEhfQlRNUC4KCjIwMDYwOTA0CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBEZWZpbmUgQlJPS0VOX1VQRFdUTVAgb24gU0NPIE9TUjYgYXMgdGhlIG5hdGl2ZQogICB1cGR3ZHRtcCBzZWVtcyB0byBnZW5lcmF0ZSBpbnZhbGlkIHd0bXAgZW50cmllcy4gIEZyb20gUm9nZXIgQ29ybmVsaXVzLAogICBvayBkam1ACgoyMDA2MDkwMwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBDaGVjayBmb3IKICAgZGVjbGFyYXRpb24gb2Ygd3JpdGV2KDIpIGFuZCBkZWNsYXJlIGl0IG91cnNlbHZlcyBpZiBuZWNlc3NhcnkuICBNYWtlcwogICB0aGUgYXRvbWljaW92KCkgY2FsbHMgYnVpbGQgb24gcmVhbGx5IG9sZCBzeXN0ZW1zLiAgb2sgZGptQAoKMjAwNjA5MDIKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguY10gQWRkIGVycm5vLmgsIGZvdW5kIGJ5IElhaW4gTW9yZ2FuLgogLSAoZHR1Y2tlcikgW3NzaC1rZXlzY2FuLmMgc3NoLXJhbmQtaGVscGVyLmMgc3NoLmMgc3NoY29ubmVjdC5jCiAgIG9wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmMKICAgb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uYyBvcGVuYnNkLWNvbXBhdC9ycmVzdnBvcnQuY10gSW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAgIGZvciBodG9uKiBhbmQgbnRvaCogbWFjcm9zLiAgUmVxdWlyZWQgb24gKGF0IGxlYXN0KSBIUC1VWCBzaW5jZSB3ZSBkZWZpbmUKICAgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRC4gIEZvdW5kIGJ5IHNhbnRoaS5hbWlydGEgYXQgZ21haWwgY29tLgoKMjAwNjA5MDEKIC0gKGRqbSkgW2F1ZGl0LWJzbS5jIGF1ZGl0LmMgYXV0aC1ic2RhdXRoLmMgYXV0aC1jaGFsbC5jIGF1dGgtcGFtLmNdCiAgIFthdXRoLXJzYS5jIGF1dGgtc2hhZG93LmMgYXV0aC1zaWEuYyBhdXRoMS5jIGF1dGgyLWNoYWxsLmNdCiAgIFthdXRoMi1nc3MuYyBhdXRoMi1rYmRpbnQuYyBhdXRoMi1ub25lLmMgYXV0aGZkLmMgYXV0aGZpbGUuY10KICAgW2NpcGhlci0zZGVzMS5jIGNpcGhlci1hZXMuYyBjaXBoZXItYmYxLmMgY2lwaGVyLWN0ci5jIGNsaWVudGxvb3AuY10KICAgW2RoLmMgZG5zLmMgZW50cm9weS5jIGdzcy1zZXJ2LWtyYjUuYyBnc3Mtc2Vydi5jIGhvc3RmaWxlLmMga2V4LmNdCiAgIFtrZXhkaGMuYyBrZXhkaHMuYyBrZXhnZXhjLmMga2V4Z2V4cy5jIGtleS5jIGxvZ2lucmVjLmMgbWFjLmNdCiAgIFttZDVjcnlwdC5jIG1vbml0b3IuYyBtb25pdG9yX3dyYXAuYyByZWFkY29uZi5jIHJzYS5jXQogICBbc2NhcmQtb3BlbnNjLmMgc2NhcmQuYyBzZXNzaW9uLmMgc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC1kc3MuY10KICAgW3NzaC1rZXlnZW4uYyBzc2gta2V5c2lnbi5jIHNzaC1yc2EuYyBzc2guYyBzc2hjb25uZWN0LmNdCiAgIFtzc2hjb25uZWN0MS5jIHNzaGNvbm5lY3QyLmMgc3NoZC5jXQogICBbb3BlbmJzZC1jb21wYXQvYnNkLWNyYXkuYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jXQogICBbb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtc29sYXJpcy5jXQogICBbb3BlbmJzZC1jb21wYXQvcG9ydC11dy5jXQogICBMb3RzIG9mIGhlYWRlcnMgZm9yIFNDTyBPU1I2LCBtYWlubHkgYWRkaW5nIHN0ZGFyZy5oIGZvciBsb2cuaDsKICAgY29tcGlsZSBwcm9ibGVtcyByZXBvcnRlZCBieSByYWMgQVQgdGVuemluZy5vcmcKIC0gKGRqbSkgW2luY2x1ZGVzLmggbW9uaXRvci5jIG9wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jXQogICBbb3BlbmJzZC1jb21wYXQvcnJlc3Zwb3J0LmNdIFNvbWUgbW9yZSBoZWFkZXJzOiBuZXRpbmV0L2luLmggCiAgIHN5cy9zb2NrZXQuaCBhbmQgdW5pc3RkLmggaW4gdmFyaW91cyBwbGFjZXMKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuY10gRml4IGltcGxpY3QgZGVjbGFyYXRpb24KICAgd2FybmluZ3MgZm9yIGJpbmFyeV9vcGVuIGFuZCBiaW5hcnlfY2xvc2UuICBQYXRjaCBmcm9tIENvcmlubmEgVmluc2NoZW4uCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGluY2x1ZGVzLmggb3BlbmJzZC1jb21wYXQvZ2xvYi57YyxofV0gRXhwbGljaXRseQogICB0ZXN0IGZvciBHTE9CX05PTUFUQ0ggYW5kIHVzZSBvdXIgZ2xvYiBmdW5jdGlvbnMgaWYgaXQncyBub3QgZm91bmQuCiAgIFN0b3BzIHNmdHAgZnJvbSBzZWdmYXVsdGluZyB3aGVuIGF0dGVtcHRpbmcgdG8gZ2V0IGEgbm9uZXhpc3RlbnQgZmlsZSBvbgogICBDeWd3aW4gKHByZXZpb3VzIHZlcnNpb25zIG9mIE9wZW5TU0ggZGlkbid0IHVzZSB0aGUgbmF0aXZlIGdsb2IpLiBQYXJ0bHkKICAgZnJvbSBhbmQgdGVzdGVkIGJ5IENvcmlubmEgVmluc2NoZW4uCiAtIChkdHVja2VyKSBbUkVBRE1FIGNvbnRyaWIve2NhbGRlcmEscmVkaGF0LHN1c2V9L29wZW5zc2guc3BlY10gIENyYW5rCiAgIHZlcnNpb25zLgoKMjAwNjA4MzEKIC0gKGRqbSkgW0NSRURJVFMgTElDRU5DRSBNYWtlZmlsZS5pbiBhdXRoLmMgY29uZmlndXJlLmFjIGluY2x1ZGVzLmggXQogICBbcGxhdGZvcm0uYyBwbGF0Zm9ybS5oIHNzaGQuYyBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbl0KICAgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuaF0gQWRkIHN1cHBvcnQgZm9yIFNvbGFyaXMgcHJvY2VzcwogICBjb250cmFjdHMsIGVuYWJsZWQgd2l0aCAtLXVzZS1zb2xhcmlzLWNvbnRyYWN0cy4gUGF0Y2ggZnJvbSBDaGFkCiAgIE15bmhpZXIsIHR3ZWFrZWQgYnkgZHR1Y2tlckAgYW5kIG15c2VsZjsgb2sgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFtjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddIEFkZCBTZVRjYlByaXZpbGVnZSBwcml2aWxlZ2UKICAgd2hpbGUgc2V0dGluZyB1cCB0aGUgc3NoIHNlcnZpY2UgYWNjb3VudC4gIFBhdGNoIGZyb20gQ29yaW5uYSBWaW5zY2hlbi4KCjIwMDYwODMwCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzIxIDA4OjE0OjAxCiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgRG9jdW1lbnQgSG9zdGJhc2VkVXNlc05hbWVGcm9tUGFja2V0T25seS4gIENvcnJlY3Rpb25zIGZyb20gam1jQCwKICAgICBvayBqbWNAIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzIxIDA4OjE1OjU3CiAgICAgW3NzaGQuOF0KICAgICBBZGQgbW9yZSBkZXRhaWwgYWJvdXQgd2hhdCBwZXJtaXNzaW9ucyBhcmUgYW5kIGFyZW4ndCBhY2NlcHRlZCBmb3IKICAgICBhdXRob3JpemVkX2tleXMgZmlsZXMuICBDb3JyZWN0aW9ucyBqbWNALCBvayBkam1ALCAibG9va3MgZ29vZCIgam1jQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8yOSAxMDo0MDoxOQogICAgIFtjaGFubmVscy5jIHNlc3Npb24uY10KICAgICBub3JtYWxpc2Ugc29tZSBpbmNvbnNpc3RlbnQgKGJ1dCBoYXJtbGVzcykgTlVMTCBwb2ludGVyIGNoZWNrcwogICAgIHNwb3R0ZWQgYnkgdGhlIFN0YW5mb3JkIFNBVFVSTiB0b29sLCB2aWEgSXNpbCBEaWxsaWc7CiAgICAgb2sgbWFya3VzQCBkZXJhYWR0QAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMjkgMTI6MDI6MzAKICAgICBbZ3NzLWdlbnIuY10KICAgICBXb3JrIGFyb3VuZCBhIHByb2JsZW0gaW4gSGVpbWRhbCB0aGF0IG9jY3VycyB3aGVuIEtSQjVDQ05BTUUgZmlsZSBpcwogICAgIG1pc3NpbmcsIGJ5IGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IGtlcmJlcm9zIGFsbG9jYXRlZCB1cyBhIGNvbnRleHQKICAgICBiZWZvcmUgYXR0ZW1wdGluZyB0byBmcmVlIGl0LiAgUGF0Y2ggZnJvbSBTaW1vbiBXaWxraW5zb24sIHRlc3RlZCBieQogICAgIGJpb3JuQCwgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMzAgMDA6MDY6NTEKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBGaXggcmVncmVzc2lvbiB3aGVyZSBTU0gyIGJhbm5lciBpcyBwcmludGVkIGF0IGxvZ2xldmVscyBFUlJPUiBhbmQgRkFUQUwKICAgICB3aGVyZSBwcmV2aW91c2x5IGl0IHdlcmVuJ3QuICBieiAjMTIyMSwgZm91bmQgYnkgRGVhbiBLb3Blc2t5LCBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzMwIDAwOjE0OjM3CiAgICAgW3ZlcnNpb24uaF0KICAgICBjcmFuayB0byA0LjQKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3hjcnlwdC5jXSBuZWVkcyB1bmlzdGQuaAogLSAoZHR1Y2tlcikgW2F1dGguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jXSBCdWcgIzEyMDc6IGFsd2F5cyBjYWxsCiAgIGxvZ2luc3VjY2VzcyBvbiBBSVggaW1tZWRpYXRlbHkgYWZ0ZXIgYXV0aGVudGljYXRpb24gdG8gY2xlYXIgdGhlIGZhaWxlZAogICBsb2dpbiBjb3VudC4gIFByZXZpb3VzbHkgdGhpcyB3b3VsZCBvbmx5IGhhcHBlbiB3aGVuIGFuIGludGVyYWN0aXZlCiAgIHNlc3Npb24gc3RhcnRzIChpZSB3aGVuIGEgcHR5IGlzIGFsbG9jYXRlZCkgYnV0IHRoaXMgbWVhbnMgdGhhdCBhY2NvdW50cwogICB0aGF0IGhhdmUgcHJpbWFyaWx5IG5vbi1pbnRlcmFjdGl2ZSBzZXNzaW9ucyAoZWcgc2NwJ3MpIG1heSBncmFkdWFsbHkKICAgYWNjdW11bGF0ZSBlbm91Z2ggZmFpbHVyZXMgdG8gbG9jayBvdXQgYW4gYWNjb3VudC4gIFRoaXMgY2hhbmdlIG1heSBoYXZlCiAgIGEgc2lkZSBlZmZlY3Qgb2YgY3JlYXRpbmcgdHdvIGF1ZGl0IHJlY29yZHMsIG9uZSB3aXRoIGEgdHR5IG9mICJzc2giCiAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGF1dGhlbnRpY2F0aW9uIGFuZCBvbmUgd2l0aCB0aGUgYWxsb2NhdGVkIHB0eSBwZXIKICAgaW50ZXJhY3RpdmUgc2Vzc2lvbi4KCjIwMDYwODI0CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYmFzZW5hbWUuY10gSW5jbHVkZSBlcnJuby5oLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdIEFkZCBpbmNsdWRlcyBuZWVkZWQgZm9yIHNlbGVjdCgyKSBvbgogICBvbGRlciBzeXN0ZW1zLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdIEluY2x1ZGUgPHN5cy9zZWxlY3QuaD4gZm9yIHNlbGVjdCgyKQogICBvbiBQT1NJWCBzeXN0ZW1zLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1vcGVucHR5LmNdIEluY2x1ZGUgZm9yIGlvY3RsKDIpLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3JyZXN2cG9ydC5jXSBJbmNsdWRlIDxzdGRsaWIuaD4gZm9yIG1hbGxvYy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC94bW1hcC5jXSBNb3ZlICNkZWZpbmUgSEFWRV9NTUFQIHRvIHByZXZlbnQKICAgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgd2hlbiB3ZSBoYXZlIGEgYnJva2VuIG9yIG1pc3NpbmcgbW1hcCgyKS4KCjIwMDYwODIyCiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW5dIEJ1ZyAjMTE3NzogZml4IGluY29ycmVjdCBwYXRoIGZvciBzc2hyYyBpbgogICBNYWtlZmlsZS4gIFBhdGNoIGZyb20gc2FudGhpLmFtaXJ0YSBhdCBnbWFpbCwgb2sgZGptLgoKMjAwNjA4MjAKIC0gKGR0dWNrZXIpIFtsb2cuY10gTW92ZSBpZmRlZiB0byBwcmV2ZW50IHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gU2F2ZSAkTElCUyBkdXJpbmcgUEFNIGxpYnJhcnkgdGVzdHMgYW5kIHJlc3RvcmUKICAgYWZ0ZXJ3YXJkLiAgUmVtb3ZlcyB0aGUgbmVlZCB0byBtYW5nbGUgJExJQlMgbGF0ZXIgdG8gcmVtb3ZlIC1scGFtIGFuZCAtbGRsLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUmVsb2NhdGUgLS13aXRoLXBhbSBwYXJ0cyBpbiBwcmVwYXJhdGlvbiBmb3IKICAgZml4aW5nIGJ1ZyAjMTE4MS4gIE5vIGNoYW5nZXMgeWV0LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTgxOiBFeHBsaWNpdGx5IHRlc3QgdG8gc2VlIGlmIE9wZW5TU0wKICAgKDAuOS44YSBhbmQgcHJlc3VtYWJseSBuZXdlcikgcmVxdWlyZXMgLWxkbCB0byBzdWNjZXNzZnVsbHkgbGluay4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFJlbW92ZSBlcnJhbnQgIi0iLgoKMjAwNjA4MTkKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8xOCAyMjo0MToyOQogICAgIFtnc3MtZ2Vuci5jXQogICAgIEdTU0FQSSBlcnJvciBjb2RlIHNob3VsZCBiZSAwIGFuZCBub3QgLTE7IGZyb20gc2ltb25Ac3h3Lm9yZy51awogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3JlZ3Jlc3MvTWFrZWZpbGUuaW5dIEFkZCAkKEVYRUVYVCkgYW5kIGFkZCBhCiAgIHNpbmdsZSBydWxlIGZvciB0aGUgdGVzdCBwcm9ncy4KCjIwMDYwODE4CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2JzZC1jbG9zZWZyb20uY10gUmVzeW5jIHdpdGgKICAgY2xvc2Vmcm9tLmMgZnJvbSBzdWRvLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1jbG9zZWZyb20uY10gQ29tbWVudCBvdXQgcmNzaWQuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcmVncmVzcy9zbnByaW50ZnRlc3QuY10gTmV3bGluZSBvbiBlcnJvci4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9yZWdyZXNzL01ha2VmaWxlLmluXSBVc2UgaW1wbGljaXQgcnVsZXMgZm9yIHRoZQogICB0ZXN0IHByb2dzIGluc3RlYWQ7IHRoZXkgd29yayBiZXR0ZXIgdGhhbiB3aGF0IHdlIGhhdmUuCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzA2IDAxOjEzOjMyCiAgICAgW2NvbXByZXNzLmMgbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXQogICAgICJ6bGliLmgiIGNhbiBiZSA8emxpYi5oPjsgb2sgZGptQCBtYXJrdXNACiAgIC0gbWlvZEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8xMiAyMDo0Njo0NgogICAgIFttb25pdG9yLmMgbW9uaXRvcl93cmFwLmNdCiAgICAgUmV2ZXJ0IHByZXZpb3VzIGluY2x1ZGUgZmlsZSBvcmRlcmluZyBjaGFuZ2UsIGZvciBzc2ggdG8gY29tcGlsZSB1bmRlcgogICAgIGdjYzIgKG9yIHVudGlsIG9wZW5zc2wgaW5jbHVkZSBmaWxlcyBhcmUgY2xlYW5lZCBvZiBwYXJhbWV0ZXIgbmFtZXMKICAgICBpbiBmdW5jdGlvbiBwcm90b3R5cGVzKQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMTQgMTI6NDA6MjUKICAgICBbc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNzaGRfY29uZmlnLjVdCiAgICAgQWRkIGFiaWxpdHkgdG8gbWF0Y2ggZ3JvdXBzIHRvIE1hdGNoIGtleXdvcmQgaW4gc3NoZF9jb25maWcuICBGZWVkYmFjawogICAgIGRqbUAsIHN0ZXZlc2tALCBvayBzdGV2ZXNrQC4KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMTYgMTE6NDc6MTUKICAgICBbc3NoZC5jXQogICAgIGZhY3RvciBpbmV0ZCBjb25uZWN0aW9uLCBUQ1AgbGlzdGVuIGFuZCBtYWluIFRDUCBhY2NlcHQgbG9vcCBvdXQgb2YKICAgICBtYWluKCkgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMgdG8gaW1wcm92ZSByZWFkYWJpbGl0eTsgb2sgbWFya3VzQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMTggMDk6MTM6MjYKICAgICBbbG9nLmMgbG9nLmggc3NoZC5jXQogICAgIG1ha2Ugc2lnbmFsIGhhbmRsZXIgdGVybWluYXRpb24gcGF0aCBzaG9ydGVyOyByaXNreSBjb2RlIHBvaW50ZWQgb3V0IGJ5CiAgICAgbWFyayBkb3dkOyBvayBkam0gbWFya3VzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzE4IDA5OjE1OjIwCiAgICAgW2F1dGguaCBzZXNzaW9uLmMgc3NoZC5jXQogICAgIGRlbGF5IGF1dGhlbnRpY2F0aW9uIHJlbGF0ZWQgY2xlYW51cHMgdW50aWwgd2UncmUgYXV0aGVudGljYXRlZCBhbmQKICAgICBhbGwgYWxhcm1zIGhhdmUgYmVlbiBjYW5jZWxsZWQ7IG9rIGRlcmFhZHQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMTggMTA6Mjc6MTYKICAgICBbbWlzYy5oXQogICAgIHJlb3JkZXIgc28gcHJvdG90eXBlcyBhcmUgc29ydGVkIGJ5IHRoZSBmaWxlcyB0aGV5IHJlZmVyIHRvOyBubwogICAgIGJpbmFyeSBjaGFuZ2UKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMTggMTM6NTQ6NTQKICAgICBbZ3NzLWdlbnIuYyBzc2gtZ3NzLmggc3NoY29ubmVjdDIuY10KICAgICBieiAjMTIxOCAtIGRpc2FibGUgU1BORUdPIGFzIHBlciBSRkM0NDYyOyBkaWZmIGZyb20gc2ltb24gQVQgc3h3Lm9yZy51awogICAgIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMTggMTQ6NDA6MzQKICAgICBbZ3NzLWdlbnIuYyBzc2gtZ3NzLmhdCiAgICAgY29uc3RpZnkgaG9zdCBhcmd1bWVudCB0byBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgR1NTQVBJIGZ1bmN0aW9ucyBhbmQKICAgICB1bmJyZWFrIGNvbXBpbGF0aW9uIHdpdGggLVdlcnJvcgogLSAoZGptKSBEaXNhYmxlIHNpZ2RpZSgpIGZvciBwbGF0Zm9ybXMgdGhhdCBjYW5ub3Qgc2FmZWx5IHN5c2xvZyBpbnNpZGUKICAgYSBzaWduYWwgaGFuZGxlciAoYmFzaWNhbGx5IGFsbCBvZiB0aGVtLCBleGNlcHRpbmcgT3BlbkJTRCk7CiAgIG9rIGR0dWNrZXJACgoyMDA2MDgxNwogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5jIG9wZW5ic2QtY29tcGF0L3NldHByb2N0aXRsZS5jXQogICBJbmNsdWRlIHN0ZGxpYi5oIGZvciBtYWxsb2MgYW5kIGZyaWVuZHMuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2JzZC1jbG9zZWZyb20uY10gVXNlIEZfQ0xPU0VNIGZjbnRsCiAgIGZvciBjbG9zZWZyb20oKSBvbiBBSVguICBQb2ludGVkIG91dCBieSBXaWxsaWFtIEFoZXJuLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3JlZ3Jlc3Mve01ha2VmaWxlLmluLGNsb3NlZnJvbXRlc3QuY31dIFJlZ3Jlc3MKICAgdGVzdCBmb3IgY2xvc2Vmcm9tKCkgaW4gY29tcGF0IGNvZGUuCgoyMDA2MDgxNgogLSAoZGptKSBbYXVkaXQtYnNtLmNdIFNwcmlua2xlIGluIHNvbWUgaGVhZGVycwoKMjAwNjA4MTUKIC0gKGR0dWNrZXIpIFtMSUNFTkNFXSBBZGQgUmV5ayB0byB0aGUgbGlzdCBmb3IgdGhlIGNvbXBhdCBkaXIuCgoyMDA2MDgwNgogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvYnNkLWdldHBlZXJlaWQuY10gQWRkIHNvbWUgaGVhZGVycyB0byBxdWlldCB3YXJuaW5ncwogICBvbiBTb2xhcmlzIDEwCgoyMDA2MDgwNgogLSAoZHR1Y2tlcikgW2RlZmluZXMuaF0gV2l0aCB0aGUgaW5jbHVkZXMuaCBjaGFuZ2VzIHdlIG5vIGxvbmdlciBnZXQgdGhlCiAgIG5hbWUgY2xhc2ggb24gIllFUyIgc28gd2UgY2FuIHJlbW92ZSB0aGUgd29ya2Fyb3VuZCBmb3IgaXQuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQve2JzZC1hc3ByaW50Zi5jLGJzZC1vcGVucHR5LmMsYnNkLXNucHJpbnRmLmMsCiAgIGdsb2IuY31dIEluY2x1ZGUgc3RkbGliLmggZm9yIG1hbGxvYyBhbmQgZnJpZW5kcyBpbiBjb21wYXQgY29kZS4KCjIwMDYwODA1CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzI0IDEzOjU4OjIyCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBkaXNhYmxlIHR1bm5lbCBmb3J3YXJkaW5nIHdoZW4gbm8gc3RyaWN0IGhvc3Qga2V5IGNoZWNraW5nCiAgICAgYW5kIGtleSBjaGFuZ2VkOyBvayBkam1AIG1hcmt1c0AgZHR1Y2tlckAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzI1IDAyOjAxOjM0CiAgICAgW3NjYXJkLmNdCiAgICAgbmVlZCAjaW5jbHVkZSA8c3RyaW5nLmg+CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yNSAwMjo1OToyMQogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBwYWNrZXQuYyBzY3AuYyBzZXJ2ZXJsb29wLmMgc2Z0cC1jbGllbnQuY10KICAgICBbc2Z0cC1zZXJ2ZXIuYyBzc2gtYWdlbnQuYyBzc2gta2V5c2Nhbi5jIHNzaGNvbm5lY3QuYyBzc2hkLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3RpbWUuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzI2IDAyOjM1OjE3CiAgICAgW2F0b21pY2lvLmMgYXV0aC5jIGRoLmMgYXV0aGZpbGUuYyBidWZmZXIuYyBjbGllbnRsb29wLmMga2V4LmNdCiAgICAgW2dyb3VwYWNjZXNzLmMgZ3NzLWdlbnIuYyBrZXhnZXhzLmMgbWlzYy5jIG1vbml0b3IuYyBtb25pdG9yX21tLmNdCiAgICAgW3BhY2tldC5jIHNjcC5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc2Z0cC1jbGllbnQuYyBzZnRwLWNvbW1vbi5jXQogICAgIFtzZnRwLXNlcnZlci5jIHNmdHAuYyBzc2gtYWRkLmMgc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jIHNzaGxvZ2luLmNdCiAgICAgW3VpZHN3YXAuYyB4bWFsbG9jLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yNiAxMzo1NzoxNwogICAgIFthdXRoZmQuYyBhdXRoZmlsZS5jIGRoLmMgY2Fub2hvc3QuYyBjaGFubmVscy5jIGNsaWVudGxvb3AuYyBjb21wYXQuY10KICAgICBbaG9zdGZpbGUuYyBrZXguYyBsb2cuYyBtaXNjLmMgbW9kdWxpLmMgbW9uaXRvci5jIHBhY2tldC5jIHJlYWRwYXNzLmNdCiAgICAgW3NjcC5jIHNlcnZjb25mLmMgc2Vzc2lvbi5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jIHNzaC1hZGQuYyBzc2gtYWdlbnQuY10KICAgICBbc3NoLWtleWdlbi5jIHNzaC1rZXlzY2FuLmMgc3NoLWtleXNpZ24uYyBzc2guYyBzc2hjb25uZWN0LmNdCiAgICAgW3NzaGNvbm5lY3QxLmMgc3NoZC5jIHhtYWxsb2MuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzdGRsaWIuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjcgMDg6MDA6NTAKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGF2b2lkIGNvbmZ1c2luZyB3b3JkaW5nIGluIEhhc2hLbm93bkhvc3RzOgogICAgIG9yaWdpbmFsbHkgc3BvdHRlZCBieSBhbGFuIGFtZXNidXJ5OwogICAgIG9rIGRlcmFhZHQKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjcgMDg6MDA6NTAKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGF2b2lkIGNvbmZ1c2luZyB3b3JkaW5nIGluIEhhc2hLbm93bkhvc3RzOgogICAgIG9yaWdpbmFsbHkgc3BvdHRlZCBieSBhbGFuIGFtZXNidXJ5OwogICAgIG9rIGRlcmFhZHQKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzAxIDExOjM0OjM2CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBBbGxvdyBmYWxsYmFjayB0byBrbm93bl9ob3N0cyBlbnRyaWVzIHdpdGhvdXQgcG9ydCBxdWFsaWZpZXJzIGZvcgogICAgIG5vbi1zdGFuZGFyZCBwb3J0cyB0b28sIHNvIHRoYXQgYWxsIGV4aXN0aW5nIGtub3duX2hvc3RzIGVudHJpZXMgd2lsbCBiZQogICAgIHJlY29nbmlzZWQuICBSZXF1ZXN0ZWQgYnksIGZlZWRiYWNrIGFuZCBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8wMSAyMzoyMjo0OAogICAgIFthdXRoLXBhc3N3ZC5jIGF1dGgtcmhvc3RzLmMgYXV0aC1yc2EuYyBhdXRoLmMgYXV0aC5oIGF1dGgxLmNdCiAgICAgW2F1dGgyLWNoYWxsLmMgYXV0aDItcHVia2V5LmMgYXV0aGZpbGUuYyBidWZmZXIuYyBjYW5vaG9zdC5jXQogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBkaC5jIGRucy5jIGRucy5oIGhvc3RmaWxlLmMga2V4LmMga2V4ZGhjLmNdCiAgICAgW2tleGdleGMuYyBrZXhnZXhzLmMga2V5LmMga2V5LmggbG9nLmMgbWlzYy5jIG1pc2MuaCBtb2R1bGkuY10KICAgICBbbW9uaXRvcl93cmFwLmMgcGFja2V0LmMgcHJvZ3Jlc3NtZXRlci5jIHJlYWRjb25mLmMgcmVhZHBhc3MuYyBzY3AuY10KICAgICBbc2VydmNvbmYuYyBzZXNzaW9uLmMgc2Z0cC1jbGllbnQuYyBzZnRwLWNvbW1vbi5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jXQogICAgIFtzc2gtYWRkLmMgc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jIHNzaC1rZXlzY2FuLmMgc3NoLmMgc3NoY29ubmVjdC5jXQogICAgIFtzc2hjb25uZWN0MS5jIHNzaGNvbm5lY3QyLmMgc3NoZC5jIHNzaGxvZ2luLmMgc3NodHR5LmMgdXVlbmNvZGUuY10KICAgICBbdXVlbmNvZGUuaCB4bWFsbG9jLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3RkaW8uaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzAxIDIzOjM2OjEyCiAgICAgW2F1dGhmaWxlLmMgY2hhbm5lbHMuYyBwcm9ncmVzc21ldGVyLmMgc2NhcmQuYyBzZXJ2Y29uZi5jIHNzaC5jXQogICAgIGNsZWFuIGV4dHJhIHNwYWNlcwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMDMgMDM6MzQ6NDIKICAgICBbT1ZFUlZJRVcgYXRvbWljaW8uYyBhdG9taWNpby5oIGF1dGgtYnNkYXV0aC5jIGF1dGgtY2hhbGwuYyBhdXRoLWtyYjUuY10KICAgICBbYXV0aC1vcHRpb25zLmMgYXV0aC1vcHRpb25zLmggYXV0aC1wYXNzd2QuYyBhdXRoLXJoLXJzYS5jIGF1dGgtcmhvc3RzLmNdCiAgICAgW2F1dGgtcnNhLmMgYXV0aC1za2V5LmMgYXV0aC5jIGF1dGguaCBhdXRoMS5jIGF1dGgyLWNoYWxsLmMgYXV0aDItZ3NzLmNdCiAgICAgW2F1dGgyLWhvc3RiYXNlZC5jIGF1dGgyLWtiZGludC5jIGF1dGgyLW5vbmUuYyBhdXRoMi1wYXNzd2QuYyBdCiAgICAgW2F1dGgyLXB1YmtleS5jIGF1dGgyLmMgYXV0aGZkLmMgYXV0aGZkLmggYXV0aGZpbGUuYyBidWZhdXguYyBidWZibi5jXQogICAgIFtidWZmZXIuYyBidWZmZXIuaCBjYW5vaG9zdC5jIGNoYW5uZWxzLmMgY2hhbm5lbHMuaCBjaXBoZXItM2RlczEuY10KICAgICBbY2lwaGVyLWJmMS5jIGNpcGhlci1jdHIuYyBjaXBoZXIuYyBjbGVhbnVwLmMgY2xpZW50bG9vcC5jIGNvbXBhdC5jXQogICAgIFtjb21wcmVzcy5jIGRlYXR0YWNrLmMgZGguYyBkaXNwYXRjaC5jIGRucy5jIGRucy5oIGZhdGFsLmMgZ3JvdXBhY2Nlc3MuY10KICAgICBbZ3JvdXBhY2Nlc3MuaCBnc3MtZ2Vuci5jIGdzcy1zZXJ2LWtyYjUuYyBnc3Mtc2Vydi5jIGhvc3RmaWxlLmMga2V4LmNdCiAgICAgW2tleC5oIGtleGRoLmMga2V4ZGhjLmMga2V4ZGhzLmMga2V4Z2V4LmMga2V4Z2V4Yy5jIGtleGdleHMuYyBrZXkuY10KICAgICBba2V5LmggbG9nLmMgbG9nLmggbWFjLmMgbWF0Y2guYyBtZC1zaGEyNTYuYyBtaXNjLmMgbWlzYy5oIG1vZHVsaS5jXQogICAgIFttb25pdG9yLmMgbW9uaXRvcl9mZHBhc3MuYyBtb25pdG9yX21tLmMgbW9uaXRvcl9tbS5oIG1vbml0b3Jfd3JhcC5jXQogICAgIFttb25pdG9yX3dyYXAuaCBtc2cuYyBuY2hhbi5jIHBhY2tldC5jIHByb2dyZXNzbWV0ZXIuYyByZWFkY29uZi5jXQogICAgIFtyZWFkY29uZi5oIHJlYWRwYXNzLmMgcnNhLmMgc2NhcmQuYyBzY2FyZC5oIHNjcC5jIHNlcnZjb25mLmMgc2VydmNvbmYuaF0KICAgICBbc2VydmVybG9vcC5jIHNlc3Npb24uYyBzZXNzaW9uLmggc2Z0cC1jbGllbnQuYyBzZnRwLWNvbW1vbi5jXQogICAgIFtzZnRwLWNvbW1vbi5oIHNmdHAtZ2xvYi5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jIHNzaC1hZGQuYyBzc2gtYWdlbnQuY10KICAgICBbc3NoLWRzcy5jIHNzaC1nc3MuaCBzc2gta2V5Z2VuLmMgc3NoLWtleXNjYW4uYyBzc2gta2V5c2lnbi5jIHNzaC1yc2EuY10KICAgICBbc3NoLmMgc3NoLmggc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QuaCBzc2hjb25uZWN0MS5jIHNzaGNvbm5lY3QyLmNdCiAgICAgW3NzaGQuYyBzc2hsb2dpbi5jIHNzaGxvZ2luLmggc3NocHR5LmMgc3NocHR5Lmggc3NodHR5LmMgdHR5bW9kZXMuY10KICAgICBbdWlkc3dhcC5jIHVpZHN3YXAuaCB1dWVuY29kZS5jIHV1ZW5jb2RlLmggeG1hbGxvYy5jIHhtYWxsb2MuaF0KICAgICBbbG9naW5yZWMuYyBsb2dpbnJlYy5oIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmMgb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uaF0KICAgICBhbG1vc3QgZW50aXJlbHkgZ2V0IHJpZCBvZiB0aGUgY3VsdHVyZSBvZiAiLmggZmlsZXMgdGhhdCBpbmNsdWRlIC5oIGZpbGVzIgogICAgIG9rIGRqbSwgc29ydCBvZiBvayBzdGV2ZXNrCiAgICAgbWFrZXMgdGhlIHBhaW4gc3RvcCBpbiBvbmUgZWFzeSBzdGVwCiAgICAgTkIuIHBvcnRhYmxlIGNvbW1pdCBjb250YWlucyBldmVyeXRoaW5nICpleGNlcHQqIHJlbW92aW5nIGluY2x1ZGVzLmgsIGFzCiAgICAgdGhhdCB3aWxsIHRha2UgYSBmYWlyIGJpdCBtb3JlIHdvcmsgYXMgd2UgbW92ZSBoZWFkZXJzIHRoYXQgYXJlIHJlcXVpcmVkCiAgICAgZm9yIHBvcnRhYmlsaXR5IHdvcmthcm91bmRzIHRvIGRlZmluZXMuaC4gKGFsc28sIHRoaXMgc3RlcCB3YXNuJ3QgImVhc3kiKQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMDQgMjA6NDY6MDUKICAgICBbbW9uaXRvci5jIHNlc3Npb24uYyBzc2gtYWdlbnQuY10KICAgICBzcGFjZXMKIC0gKGRqbSkgW2F1dGgtcGFtLmMgZGVmaW5lcy5oXSBNb3ZlIFBBTSByZWxhdGVkIGJpdHMgdG8gYXV0aC1wYW0uYwogLSAoZGptKSBbYXV0aC1wYW0uYyBhdXRoLmMgYnVmYXV4LmggZW50cm9weS5jIG9wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmNdCiAgIHJlbW92ZSBsYXN0IHRyYWNlcyBvZiBidWZhdXguaCAtIGl0IHdhcyBtZXJnZWQgaW50byBidWZmZXIuaCBpbiB0aGUgYmlnCiAgIGluY2x1ZGVzLmggY29tbWl0CiAtIChkam0pIFthdXRoLmMgbG9naW5yZWMuY10gTWlzc2luZyBuZXRpbmV0L2luLmggZm9yIGxvZ2lucmVjCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9yZWdyZXNzL3NucHJpbnRmdGVzdC5jXQogICBbb3BlbmJzZC1jb21wYXQvcmVncmVzcy9zdHJkdXB0ZXN0LmNdIEFkZCBtaXNzaW5nIGluY2x1ZGVzIHNvIHRoZXkgcGFzcwogICBjb21waWxhdGlvbiB3aXRoICItV2FsbCAtV2Vycm9yIgogLSAoZGptKSBbYXV0aC1wYW0uYyBhdXRoLXNoYWRvdy5jIGF1dGgyLW5vbmUuYyBjbGVhbnVwLmMgc3NoZC5jXQogICBbb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uYyBvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5oXSBTcHJpbmtsZSBtb3JlCiAgIGluY2x1ZGVzIGZvciBMaW51eCBpbgogLSAoZHR1Y2tlcikgW2NsZWFudXAuY10gTmVlZCBkZWZpbmVzLmggZm9yIF9fZGVhZC4KIC0gKGR0dWNrZXIpIFthdXRoMi1nc3MuY10gV2Ugc3RpbGwgbmVlZCB0aGUgI2lmZGVmIEdTU0FQSSBpbiAtcG9ydGFibGUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQve2JzZC1hcmM0cmFuZG9tLmMscG9ydC10dW4uYyx4bW1hcC5jfV0gTG90cyBvZgogICAjaW5jbHVkZSBzdGRhcmcuaCwgbmVlZGVkIGZvciBsb2cuaC4KIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmNdIE5lZWRzIHVuaXN0ZC5oIHRvby4KIC0gKGR0dWNrZXIpIFtzc2gtcmFuZC1oZWxwZXIuY10gTmVlZHMgc3RkYXJnLmggZm9yIGxvZy5oLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIE5lZXMgc3RkbGliLmggZm9yIG1hbGxvYy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zdHJ0b251bS5jXSBJbmNsdWRlIHN0ZGxpYi5oIGZvciBzdHJ0b2xsLAogICBvdGhlcndpc2UgaXQgaXMgaW1wbGljaXRseSBkZWNsYXJlZCBhcyByZXR1cm5pbmcgYW4gaW50LgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMDUgMDc6NTI6NTIKICAgICBbYXV0aDItbm9uZS5jIHNzaGQuYyBtb25pdG9yX3dyYXAuY10KICAgICBBZGQgaGVhZGVycyByZXF1aXJlZCB0byBidWlsZCB3aXRoIEtFUkJFUk9TNT1uby4gIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzA1IDA4OjAwOjMzCiAgICAgW2F1dGgtc2tleS5jXQogICAgIEFkZCBoZWFkZXJzIHJlcXVpcmVkIHRvIGJ1aWxkIHdpdGggLURTS0VZLiAgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMDUgMDg6Mjg6MjQKICAgICBbbW9uaXRvcl93cmFwLmMgYXV0aC1za2V5LmMgYXV0aDItY2hhbGwuY10KICAgICBaYXAgdW51c2VkIHZhcmlhYmxlcyBpbiAtRFNLRVkgY29kZS4gIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzA1IDA4OjM0OjA0CiAgICAgW3BhY2tldC5jXQogICAgIFR5cG8gaW4gY29tbWVudAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5jXSBBZGQgaGVhZGVycyByZXF1aXJlZCB0byBjb21waWxlCiAgIG9uIEN5Z3dpbi4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuY10gQWRkIGhlYWRlcnMgbmVlZGVkIGZvciBpbmV0X250b2EuCiAtIChkdHVja2VyKSBbYXV0aC1za2V5LmNdIG1vbml0b3Jfd3JhcC5oIG5lZWRzIHNzaC1nc3MuaC4KIC0gKGR0dWNrZXIpIFthdWRpdC5jIGF1ZGl0LmhdIFJlcGFpciBoZWFkZXJzLgogLSAoZHR1Y2tlcikgW2F1ZGl0LWJzbS5jXSBBZGQgYWRkaXRpb25hbCBoZWFkZXJzIG5vdyByZXF1aXJlZC4KCjIwMDYwODA0CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBUaGUgImNyaXBwbGVkIEFFUyIgdGVzdCBkb2VzIG5vdCB3b3JrIG9uIHJlY2VudAogICB2ZXJzaW9ucyBvZiBTb2xhcmlzLCBzbyB1c2UgQUNfTElOS19JRkVMU0UgdG8gYWN0dWFsbHkgbGluayB0aGUgdGVzdCBwcm9ncmFtCiAgIHJhdGhlciB0aGFuIGp1c3QgY29tcGlsaW5nIGl0LiAgU3BvdHRlZCBieSBkbGdALgoKMjAwNjA4MDIKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9kYWVtb24uY10gQWRkIHVuaXN0ZC5oIGZvciBmb3JrKCkgcHJvdG90eXBlLgoKMjAwNjA3MjUKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC94bW1hcC5jXSBOZWVkIGZjbnRsLmggZm9yIE9fUkRSVy4KCjIwMDYwNzI0CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTIgMTM6Mzk6NTUKICAgICBbc3NoZF9jb25maWcuNV0KICAgICAgLSBuZXcgc2VudGVuY2UsIG5ldyBsaW5lCiAgICAgIC0gcy9UaGUgdGhlL1RoZS8KICAgICAgLSBraWxsIGEgYmFkIGNvbW1hCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMiAyMjoyODo1MgogICAgIFthdXRoLW9wdGlvbnMuYyBjYW5vaG9zdC5jIGNoYW5uZWxzLmMgaW5jbHVkZXMuaCByZWFkY29uZi5jXQogICAgIFtzZXJ2Y29uZi5jIHNzaC1rZXlzY2FuLmMgc3NoLmMgc3NoY29ubmVjdC5jIHNzaGQuY10KICAgICBtb3ZlICNpbmNsdWRlIDxuZXRkYi5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTIgMjI6NDI6MzIKICAgICBbaW5jbHVkZXMuaCBzc2guYyBzc2gtcmFuZC1oZWxwZXIuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzdGRkZWYuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE0IDAxOjE1OjI4CiAgICAgW21vbml0b3Jfd3JhcC5oXQogICAgIGRvbid0IG5lZWQgaW5jb21wbGV0ZWx5LXR5cGVkICdzdHJ1Y3QgcGFzc3dkJyBub3cgd2l0aAogICAgICNpbmNsdWRlIDxwd2QuaD47IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE3IDAxOjMxOjEwCiAgICAgW2F1dGhmZC5jIGF1dGhmaWxlLmMgY2hhbm5lbHMuYyBjbGVhbnVwLmMgY2xpZW50bG9vcC5jIGdyb3VwYWNjZXNzLmNdCiAgICAgW2luY2x1ZGVzLmggbG9nLmMgbWlzYy5jIG1zZy5jIHBhY2tldC5jIHByb2dyZXNzbWV0ZXIuYyByZWFkY29uZi5jXQogICAgIFtyZWFkcGFzcy5jIHNjcC5jIHNlcnZjb25mLmMgc2Z0cC1jbGllbnQuYyBzZnRwLXNlcnZlci5jIHNmdHAuY10KICAgICBbc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jIHNzaC1rZXlzaWduLmMgc3NoLmNdCiAgICAgW3NzaGNvbm5lY3QuYyBzc2hsb2dpbi5jIHNzaHB0eS5jIHVpZHN3YXAuY10KICAgICBtb3ZlICNpbmNsdWRlIDx1bmlzdGQuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE3IDEyOjAyOjI0CiAgICAgW2F1dGgtb3B0aW9ucy5jXQogICAgIFVzZSAnXDAnIHJhdGhlciB0aGFuIDAgdG8gdGVybWluYXRlcyBzdHJpbmdzOyBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xNyAxMjowNjowMAogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggc2VydmNvbmYuYyBzc2hkX2NvbmZpZy41XQogICAgIEFkZCBQZXJtaXRPcGVuIGRpcmVjdGl2ZSB0byBzc2hkX2NvbmZpZyB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZQogICAgICJwZXJtaXRvcGVuIiBrZXkgb3B0aW9uLiAgQWxsb3dzIHNlcnZlciBhZG1pbiB0byBhbGxvdyBUQ1AgcG9ydAogICAgIGZvcndhcmRpbmcgb25seSB0d28gc3BlY2lmaWMgaG9zdC9wb3J0IHBhaXJzLiAgVXNlZnVsIHdoZW4gY29tYmluZWQKICAgICB3aXRoIE1hdGNoLgogICAgIElmIHBlcm1pdG9wZW4gaXMgdXNlZCBpbiBib3RoIHNzaGRfY29uZmlnIGFuZCBhIGtleSBvcHRpb24sIGJvdGgKICAgICBtdXN0IGFsbG93IGEgZ2l2ZW4gY29ubmVjdGlvbiBiZWZvcmUgaXQgd2lsbCBiZSBwZXJtaXR0ZWQuCiAgICAgTm90ZSB0aGF0IHVzZXJzIGNhbiBzdGlsbCB1c2UgZXh0ZXJuYWwgZm9yd2FyZGVycyBzdWNoIGFzIG5ldGNhdCwKICAgICBzbyB0byBiZSB0aG9zZSBtdXN0IGJlIGNvbnRyb2xsZWQgdG9vIGZvciB0aGUgbGltaXRzIHRvIGJlIGVmZmVjdGl2ZS4KICAgICBGZWVkYmFjayAmIG9rIGRqbUAsIG1hbiBwYWdlIGNvcnJlY3Rpb25zICYgb2sgam1jQC4KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTggMDc6NTA6NDAKICAgICBbc3NoZF9jb25maWcuNV0KICAgICB0d2Vhazsgb2sgZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xOCAwNzo1NjoyOAogICAgIFtzY3AuMV0KICAgICByZXBsYWNlIERJQUdOT1NUSUNTIHdpdGggLkV4OwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xOCAwODowMzowOQogICAgIFtzc2gtYWdlbnQuMSBzc2hkX2NvbmZpZy41XQogICAgIG1hcmsgdXAgYW5nbGUgYnJhY2tldHM7CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xOCAwODoyMjoyMwogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIENsYXJpZnkgZGVzY3JpcHRpb24gb2YgTWF0Y2gsIHdpdGggbWlub3IgY29ycmVjdGlvbiBmcm9tIGptY0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE4IDIyOjI3OjU1CiAgICAgW2RoLmNdCiAgICAgcmVtb3ZlIHVubmVlZGVkIGluY2x1ZGVzOyBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xOSAwODo1Njo0MQogICAgIFtzZXJ2Y29uZi5jIHNzaGRfY29uZmlnLjVdCiAgICAgQWRkIHN1cHBvcnQgZm9yIFgxMUZvcndhcmluZywgWDExRGlzcGxheU9mZnNldCBhbmQgWDExVXNlTG9jYWxob3N0IHRvCiAgICAgTWF0Y2guICBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xOSAxMzowNzoxMAogICAgIFtzZXJ2Y29uZi5jIHNlcnZjb25mLmggc2Vzc2lvbi5jIHNzaGQuOCBzc2hkX2NvbmZpZyBzc2hkX2NvbmZpZy41XQogICAgIEFkZCBGb3JjZUNvbW1hbmQga2V5d29yZCB0byBzc2hkX2NvbmZpZywgZXF1aXZhbGVudCB0byB0aGUgImNvbW1hbmQ9IgogICAgIGtleSBvcHRpb24sIG1hbiBwYWdlIGVudHJ5IGFuZCBleGFtcGxlIGluIHNzaGRfY29uZmlnLgogICAgIEZlZWRiYWNrICYgb2sgZGptQCwgbWFuIHBhZ2UgY29ycmVjdGlvbnMgJiBvayBqbWNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yMCAxNToyNjoxNQogICAgIFthdXRoMS5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc3NoY29ubmVjdDIuY10KICAgICBtaXNzZWQgc29tZSBuZWVkZWQgI2luY2x1ZGUgPHVuaXN0ZC5oPiB3aGVuIEtFUkJFUk9TNT1ubzsgaXNzdWUgZnJvbQogICAgIG1hc3NpbW9AY2Vkb2MubW8uaXQKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzIxIDEyOjQzOjM2CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBzZXJ2Y29uZi5jIHNlcnZjb25mLmggc3NoZF9jb25maWcuNV0KICAgICBNYWtlIFBlcm1pdE9wZW4gdGFrZSBhIGxpc3Qgb2YgcGVybWl0dGVkIHBvcnRzIGFuZCBhY3QgbW9yZSBsaWtlIG1vc3QKICAgICBvdGhlciBrZXl3b3JkcyAoaWUgdGhlIGZpcnN0IG1hdGNoIGlzIHRoZSBlZmZlY3RpdmUgc2V0dGluZykuIFRoaXMKICAgICBhbHNvIG1ha2VzIGl0IGVhc2llciB0byBvdmVycmlkZSBhIHByZXZpb3VzbHkgc2V0IFBlcm1pdE9wZW4uIG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzIxIDIxOjEzOjMwCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgbW9yZSBBUkdTVVNFRCAobGludCkgZm9yIGRpc3BhdGNoIHRhYmxlLWRyaXZlbiBmdW5jdGlvbnM7IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzIxIDIxOjI2OjU1CiAgICAgW3Byb2dyZXNzbWV0ZXIuY10KICAgICBBUkdTVVNFRCBmb3Igc2lnbmFsIGhhbmRsZXIKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzIyIDE5OjA4OjU0CiAgICAgW2luY2x1ZGVzLmggbW9kdWxpLmMgcHJvZ3Jlc3NtZXRlci5jIHNjcC5jIHNmdHAtY29tbW9uLmNdCiAgICAgW3NmdHAtc2VydmVyLmMgc3NoLWFnZW50LmMgc3NobG9naW4uY10KICAgICBtb3ZlICNpbmNsdWRlIDx0aW1lLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yMiAyMDo0ODoyMwogICAgIFthdG9taWNpby5jIGF1dGgtb3B0aW9ucy5jIGF1dGgtcGFzc3dkLmMgYXV0aC1yaG9zdHMuYyBhdXRoLXJzYS5jXQogICAgIFthdXRoLmMgYXV0aDEuYyBhdXRoMi1jaGFsbC5jIGF1dGgyLWhvc3RiYXNlZC5jIGF1dGgyLXBhc3N3ZC5jIGF1dGgyLmNdCiAgICAgW2F1dGhmZC5jIGF1dGhmaWxlLmMgYnVmYXV4LmMgYnVmYm4uYyBidWZmZXIuYyBjYW5vaG9zdC5jIGNoYW5uZWxzLmNdCiAgICAgW2NpcGhlci0zZGVzMS5jIGNpcGhlci1iZjEuYyBjaXBoZXItY3RyLmMgY2lwaGVyLmMgY2xpZW50bG9vcC5jXQogICAgIFtjb21wYXQuYyBkZWF0dGFjay5jIGRoLmMgZG5zLmMgZ3NzLWdlbnIuYyBnc3Mtc2Vydi5jIGhvc3RmaWxlLmNdCiAgICAgW2luY2x1ZGVzLmgga2V4LmMga2V4ZGhjLmMga2V4ZGhzLmMga2V4Z2V4Yy5jIGtleGdleHMuYyBrZXkuYyBsb2cuY10KICAgICBbbWFjLmMgbWF0Y2guYyBtZC1zaGEyNTYuYyBtaXNjLmMgbW9kdWxpLmMgbW9uaXRvci5jIG1vbml0b3JfZmRwYXNzLmNdCiAgICAgW21vbml0b3JfbW0uYyBtb25pdG9yX3dyYXAuYyBtc2cuYyBuY2hhbi5jIHBhY2tldC5jIHJzYS5jXQogICAgIFtwcm9ncmVzc21ldGVyLmMgcmVhZGNvbmYuYyByZWFkcGFzcy5jIHNjcC5jIHNlcnZjb25mLmMgc2VydmVybG9vcC5jXQogICAgIFtzZXNzaW9uLmMgc2Z0cC1jbGllbnQuYyBzZnRwLWNvbW1vbi5jIHNmdHAtZ2xvYi5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jXQogICAgIFtzc2gtYWRkLmMgc3NoLWFnZW50LmMgc3NoLWRzcy5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jXQogICAgIFtzc2gta2V5c2lnbi5jIHNzaC1yc2EuYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuYyBzc2hjb25uZWN0Mi5jXQogICAgIFtzc2hkLmMgc3NobG9naW4uYyBzc2hwdHkuYyB0dHltb2Rlcy5jIHVpZHN3YXAuYyB4bWFsbG9jLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3RyaW5nLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yMyAwMToxMTowNQogICAgIFthdXRoLmggZGlzcGF0Y2guYyBrZXguaCBzZnRwLWNsaWVudC5jXQogICAgICNpbmNsdWRlIDxzaWduYWwuaD4gZm9yIHNpZ19hdG9taWNfdDsgbmVlZCB0aGlzIHByaW9yIHRvIDxzeXMvcGFyYW0uaD4KICAgICBtb3ZlCiAtIChkam0pIFthY3NzLmMgYXV0aC1rcmI1LmMgYXV0aC1vcHRpb25zLmMgYXV0aC1wYW0uYyBhdXRoLXNoYWRvdy5jXQogICBbY2Fub2hvc3QuYyBjaGFubmVscy5jIGNpcGhlci1hY3NzLmMgZGVmaW5lcy5oIGRucy5jIGdzcy1nZW5yLmNdCiAgIFtnc3Mtc2Vydi1rcmI1LmMgZ3NzLXNlcnYuYyBsb2cuaCBsb2dpbnJlYy5jIGxvZ2ludGVzdC5jIHJlYWRjb25mLmNdCiAgIFtzZXJ2Y29uZi5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jIHNzaC1rZXlzaWduLmMgc3NoLXJhbmQtaGVscGVyLmNdCiAgIFtzc2guYyBzc2hjb25uZWN0LmMgc3NoZC5jIG9wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jXQogICBbb3BlbmJzZC1jb21wYXQvYnNkLWFyYzRyYW5kb20uYyBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jXQogICBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuYyBvcGVuYnNkLWNvbXBhdC9nbG9iLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9ta3RlbXAuYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jIG9wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9zZXRwcm9jdGl0bGUuYyBvcGVuYnNkLWNvbXBhdC94bW1hcC5jXQogICBtYWtlIHRoZSBwb3J0YWJsZSB0cmVlIGNvbXBpbGUgYWdhaW4gLSBzcHJpbmtsZSB1bmlzdGQuaCBhbmQgc3RyaW5nLmggCiAgIGJhY2sgaW4uIERvbid0IHJlZGVmaW5lIF9fdW51c2VkLCBhcyBpdCB0dXJuZWQgb3V0IHRvIGJlIHVzZWQgaW4KICAgaGVhZGVycyBvbiBMaW51eCwgYW5kIHJlcGxhY2UgaXRzIHVzZSBpbiBhdXRoLXBhbS5jIHdpdGggQVJHU1VTRUQKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2dsb2IuY10KICAgTW92ZSBnZXRfYXJnX21heCgpIGludG8gdGhlIGlmZGVmIEhBVkVfR0xPQiBibG9jayBzbyB0aGF0IGl0IGNvbXBpbGVzCiAgIG9uIE9wZW5CU0QgKG9yIG90aGVyIHBsYXRmb3JtcyB3aXRoIGEgZGVjZW50IGdsb2IgaW1wbGVtZW50YXRpb24pIHdpdGgKICAgLVdlcnJvcgogLSAoZGptKSBbdXVlbmNvZGUuY10KICAgQWRkIHJlc29sdi5oLCBpcyBpdCBjb250YWlucyB0aGUgcHJvdG90eXBlcyBmb3IgX19iNjRfbnRvcC9fX2I2NF9wdG9uIG9uCiAgIHNvbWUgcGxhdGZvcm1zCiAtIChkam0pIFtzZXNzaW9uLmNdCiAgIGZpeCBjb21waWxlIGVycm9yIHdpdGggLVdlcnJvciAtV2FsbDogJ3BhdGgnIGlzIG9ubHkgdXNlZCBpbgogICBkb19zZXR1cF9lbnYoKSBpZiBIQVZFX0xPR0lOX0NBUCBpcyBub3QgZGVmaW5lZAogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvYmFzZW5hbWUuYyBvcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9ic2QtY3JheS5jIG9wZW5ic2QtY29tcGF0L2JzZC1vcGVucHR5LmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9ic2Qtc25wcmludGYuYyBvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuY10KICAgW29wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmMgb3BlbmJzZC1jb21wYXQvcG9ydC1pcml4LmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9ycmVzdnBvcnQuY10KICAgVGhlc2UgbG9vayB0byBuZWVkIHN0cmluZy5oIGFuZC9vciB1bmlzdGQuaCAoYmFzZWQgb24gYSBncmVwIGZvciBmdW5jdGlvbgogICBuYW1lcykKIC0gKGRqbSkgW01ha2VmaWxlLmluXQogICBSZW1vdmUgZ2VuZXJhdGVkIG9wZW5ic2QtY29tcGF0L3JlZ3Jlc3MvTWFrZWZpbGUgaW4gZGlzdGNsZWFuIHRhcmdldAogLSAoZGptKSBbcmVncmVzcy9NYWtlZmlsZSByZWdyZXNzL2FnZW50LWdldHBlZXJlaWQuc2ggcmVncmVzcy9jZmdtYXRjaC5zaF0KICAgW3JlZ3Jlc3MvY2lwaGVyLXNwZWVkLnNoIHJlZ3Jlc3MvZm9yY2Vjb21tYW5kLnNoIHJlZ3Jlc3MvZm9yd2FyZGluZy5zaF0KICAgU3luYyByZWdyZXNzIHRlc3RzIHRvIC1jdXJyZW50OyBpbmNsdWRlIGR0dWNrZXJAJ3MgbmV3IGNmZ21hdGNoIGFuZCAKICAgZm9yY2Vjb21tYW5kIHRlc3RzLiBBZGQgY2lwaGVyLXNwZWVkLnNoIHRlc3QgKG5vdCBsaW5rZWQgaW4geWV0KQogLSAoZHR1Y2tlcikgW2NsZWFudXAuY10gU2luY2UgY29uZmlnLmggZGVmaW5lcyBfTEFSR0VfRklMRVMgb24gQUlYLCBpbmNsdWRpbmcKICAgc3lzdGVtIGhlYWRlcnMgYmVmb3JlIGRlZmluZXMuaCB3aWxsIGNhdXNlIGNvbmZsaWN0aW5nIGRlZmluaXRpb25zLgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvZm9yY2Vjb21tYW5kLnNoXSBQb3J0YWJsaXplLgoKMjAwNjA3MTMKIC0gKGR0dWNrZXIpIFthdXRoLWtyYjUuYyBhdXRoLXBhbS5jXSBTdGlsbCBtb3JlIGVycm5vLmgKCjIwMDYwNzEyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaF0gT25seSBkZWZpbmUgU0hVVF9SRCAoYW5kIGZyaWVuZHMpIGFuZAogICBPX05PTkJMT0NLIGlmIHRoZXkncmUgcmVhbGx5IG5lZWRlZC4gIEZpeGVzIGJ1aWxkIGVycm9ycyBvbiBIUC1VWCwgb2xkCiAgIExpbnV4ZXMgYW5kIHByb2JhYmx5IG1vcmUuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBPcGVuQlNEIG5lZWRzIDxzeXMvdHlwZXMuaD4gYmVmb3JlIDxzeXMvc29ja2V0Lmg+CiAgIGZvciBTSFVUX1JELgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmNdIE9wZW5CU0QgbmVlZHMgPG5ldGluZXQvaW4uaD4gYmVmb3JlCiAgIDxuZXRpbmV0L2lwLmg+LgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTAgMTY6MDE6NTcKICAgICBbc2Z0cC1nbG9iLmMgc2Z0cC1jb21tb24uaCBzZnRwLmNdCiAgICAgYnVmZmVyLmggb25seSBuZWVkZWQgaW4gc2Z0cC1jb21tb24uaCBhbmQgcmVtb3ZlIHNvbWUgdW5uZWVkZWQKICAgICB1c2VyIGluY2x1ZGVzOyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEwIDE2OjA0OjIxCiAgICAgW3NzaGQuOF0KICAgICBzL2FuZCBhbmQvYW5kLwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTAgMTY6Mzc6MzYKICAgICBbcmVhZHBhc3MuYyBsb2cuaCBzY3AuYyBmYXRhbC5jIHhtYWxsb2MuYyBpbmNsdWRlcy5oIHNzaC1rZXlzY2FuLmMgbWlzYy5jCiAgICAgYXV0aC5jIHBhY2tldC5jIGxvZy5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN0ZGFyZy5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTEgMTA6MTI6MDcKICAgICBbc3NoLmNdCiAgICAgT25seSBjb3B5IHRoZSBwYXJ0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgd2UgYWN0dWFsbHkgdXNlLiAgUHJldmVudHMKICAgICBzc2ggYmFpbGluZyB3aGVuIFNlbmRFbnYgaXMgdXNlZCBhbmQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBhIHJlYWxseQogICAgIGxvbmcgdmFsdWUgZXhpc3RzLiAgb2sgZGptQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMSAxODo1MDo0OAogICAgIFtjbGllbnRsb29wLmMgc3NoLjEgc3NoLmMgY2hhbm5lbHMuYyBzc2hfY29uZmlnLjUgcmVhZGNvbmYuaCBzZXNzaW9uLmMKICAgICBjaGFubmVscy5oIHJlYWRjb25mLmNdCiAgICAgYWRkIEV4aXRPbkZvcndhcmRGYWlsdXJlOiB0ZXJtaW5hdGUgdGhlIGNvbm5lY3Rpb24gaWYgc3NoKDEpCiAgICAgY2Fubm90IHNldCB1cCBhbGwgcmVxdWVzdGVkIGR5bmFtaWMsIGxvY2FsLCBhbmQgcmVtb3RlIHBvcnQKICAgICBmb3J3YXJkaW5ncy4gb2sgZGptLCBkdHVja2VyLCBzdGV2ZXNrLCBqbWMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzExIDIwOjA3OjI1CiAgICAgW3NjcC5jIGF1dGguYyBtb25pdG9yLmMgc2VydmVybG9vcC5jIHNmdHAtc2VydmVyLmMgc3NocHR5LmMgcmVhZHBhc3MuYwogICAgIHNzaGQuYyBtb25pdG9yX3dyYXAuYyBtb25pdG9yX2ZkcGFzcy5jIHNzaC1hZ2VudC5jIHR0eW1vZGVzLmMgYXRvbWljaW8uYwogICAgIGluY2x1ZGVzLmggc2Vzc2lvbi5jIHNzaGxvZ2luLmMgbW9uaXRvcl9tbS5jIHBhY2tldC5jIHNzaGNvbm5lY3QyLmMKICAgICBzZnRwLWNsaWVudC5jIG5jaGFuLmMgY2xpZW50bG9vcC5jIHNmdHAuYyBtaXNjLmMgY2Fub2hvc3QuYyBjaGFubmVscy5jCiAgICAgc3NoLWtleWdlbi5jIHByb2dyZXNzbWV0ZXIuYyB1aWRzd2FwLmMgbXNnLmMgcmVhZGNvbmYuYyBzc2hjb25uZWN0LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8ZXJybm8uaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzExIDIwOjE2OjQzCiAgICAgW3NzaC5jXQogICAgIGNhc3QgYXN0ZXJpc2sgZmllbGQgcHJlY2lzaW9uIGFyZ3VtZW50IHRvIGludCB0byByZW1vdmUgd2FybmluZzsKICAgICBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMSAyMDoyNzo1NgogICAgIFthdXRoZmlsZS5jIHNzaC5jXQogICAgIG5lZWQgPGVycm5vLmg+IGhlcmUgYWxzbyAoaXQncyBhbHNvIGluY2x1ZGVkIGluIDxvcGVuc3NsL2Vyci5oPikKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEyIDExOjM0OjU4CiAgICAgW3NzaGQuYyBzZXJ2Y29uZi5oIHNlcnZjb25mLmMgc3NoZF9jb25maWcuNSBhdXRoLmNdCiAgICAgQWRkIHN1cHBvcnQgZm9yIGNvbmRpdGlvbmFsIGRpcmVjdGl2ZXMgdG8gc3NoZF9jb25maWcgdmlhIGEgIk1hdGNoIgogICAgIGtleXdvcmQsIHdoaWNoIHdvcmtzIHNpbWlsYXJseSB0byB0aGUgIkhvc3QiIGRpcmVjdGl2ZSBpbiBzc2hfY29uZmlnLgogICAgIExpbmVzIGFmdGVyIGEgTWF0Y2ggbGluZSBvdmVycmlkZSB0aGUgZGVmYXVsdCBzZXQgaW4gdGhlIG1haW4gc2VjdGlvbgogICAgIGlmIHRoZSBjb25kaXRpb24gb24gdGhlIE1hdGNoIGxpbmUgaXMgdHJ1ZSwgZWcKICAgICBBbGxvd1RjcEZvcndhcmRpbmcgeWVzCiAgICAgTWF0Y2ggVXNlciBhbm9uY3ZzCiAgICAgICAgICAgICBBbGxvd1RjcEZvcndhcmRpbmcgbm8KICAgICB3aWxsIGFsbG93IHBvcnQgZm9yd2FyZGluZyBieSBhbGwgdXNlcnMgZXhjZXB0ICJhbm9uY3ZzIi4KICAgICBDdXJyZW50bHkgb25seSBhIHZlcnkgc21hbGwgc3Vic2V0IG9mIGRpcmVjdGl2ZXMgYXJlIHN1cHBvcnRlZC4KICAgICBvayBkam1ACiAtIChkdHVja2VyKSBbbG9naW5yZWMuYyBvcGVuYnNkLWNvbXBhdC94bW1hcC5jIG9wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jCiAgIG9wZW5ic2QtY29tcGF0L2dsb2IuYyBvcGVuYnNkLWNvbXBhdC9ta3RlbXAuYyBvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jCiAgIG9wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmMgb3BlbmJzZC1jb21wYXQvc3RydG9udW0uY10gSW5jbHVkZSA8ZXJybm8uaD4uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2V0cHJvY3RpdGxlLmNdIEluY2x1ZGUgc3RkYXJnLmguCiAtIChkdHVja2VyKSBbc3NoLWtleXNjYW4uYyBzc2gtcmFuZC1oZWxwZXIuY10gTW9yZSBlcnJuby5oIGhlcmUgdG9vLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdIHYqcHJpbnRmIG5lZWRzIHN0ZGFyZy5oLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1hc3ByaW50Zi5jIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmMKICAgb3BlbmJzZC1jb21wYXQvcnJlc3Zwb3J0LmNdIE1vcmUgZXJybm8uaC4KCjIwMDYwNzExCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIHNzaC1rZXlnZW4uYyBvcGVuYnNkLWNvbXBhdC9ic2Qtb3BlbnB0eS5jCiAgIG9wZW5ic2QtY29tcGF0L2RhZW1vbi5jXSBBZGQgaW5jbHVkZXMgbmVlZGVkIGJ5IG9wZW4oMikuICBDb25kaXRpb25hbGx5CiAgIGluY2x1ZGUgcGF0aHMuaC4gIEZpeGVzIGJ1aWxkIGVycm9yIG9uIFNvbGFyaXMuCiAtIChkdHVja2VyKSBbZW50cm9weS5jXSBNb3JlIGZjbnRsLmgsIHRoaXMgdGltZSBvbiBBSVggKGFuZCBwcm9iYWJseQogICBvdGhlcnMpLgoKMjAwNjA3MTAKIC0gKGR0dWNrZXIpIFtJTlNUQUxMXSBOZXcgYXV0b2NvbmYgdmVyc2lvbjogMi42MC4KIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNi8xNCAxMDo1MDo0MgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgbGltaXQgdGhlIG51bWJlciBvZiBwcmUtYmFubmVyIGNoYXJhY3RlcnMgd2Ugd2lsbCBhY2NlcHQ7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDYvMjYgMTA6MzY6MTUKICAgICBbY2xpZW50bG9vcC5jXQogICAgIG1lbnRpb24gb3B0aW9uYWwgYmluZF9hZGRyZXNzIGluIHJ1bnRpbWUgcG9ydCBmb3J3YXJkaW5nIHNldHVwCiAgICAgY29tbWFuZC1saW5lIGhlbHAuIHBhdGNoIGZyb20gc2FudGhpLmFtaXJ0YSBBVCBnbWFpbC5jb20KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzAyIDE3OjEyOjU4CiAgICAgW3NzaC4xIHNzaC5jIHNzaF9jb25maWcuNSBzc2hkX2NvbmZpZy41XQogICAgIG1vcmUgZGV0YWlscyBhbmQgY2xhcml0eSBmb3IgdHVuKDQpIGRldmljZSBmb3J3YXJkaW5nOyBvayBhbmQgaGVscAogICAgIGptY0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzAyIDE4OjM2OjQ3CiAgICAgW2dzcy1zZXJ2LWtyYjUuYyBnc3Mtc2Vydi5jXQogICAgIG5vICJzZXJ2Y29uZi5oIiBuZWVkZWQgaGVyZQogICAgIChnc3Mtc2Vydi1rcmI1LmMgY2hhbmdlIG5vdCBhcHBsaWVkLCBwb3J0YWJsZSBuZWVkcyB0aGUgc2VydmVyIG9wdGlvbnMpCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wMiAyMjo0NTo1OQogICAgIFtncm91cGFjY2Vzcy5jIGdyb3VwYWNjZXNzLmggaW5jbHVkZXMuaCBzZXNzaW9uLmMgc2Z0cC1jb21tb24uYyBzc2hwdHkuY10KICAgICBtb3ZlICNpbmNsdWRlIDxncnAuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgICAocG9ydGFibGUgbmVlZGVkIHVpZHN3YXAuYyB0b28pCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wMiAyMzowMTo1NQogICAgIFtjbGllbnRsb29wLmMgc3NoLjFdCiAgICAgdXNlIC1LUltiaW5kX2FkZHJlc3M6XXBvcnQgaGVyZTsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDMgMDg6NTQ6MjAKICAgICBbaW5jbHVkZXMuaCBzc2guYyBzc2hjb25uZWN0LmMgc3NoZC5jXQogICAgIG1vdmUgI2luY2x1ZGUgInZlcnNpb24uaCIgb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzAzIDE3OjU5OjMyCiAgICAgW2NoYW5uZWxzLmMgaW5jbHVkZXMuaF0KICAgICBtb3ZlICNpbmNsdWRlIDxhcnBhL2luZXQuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9sZCBvayBkam1ACiAgICAgKHBvcnRhYmxlIG5lZWRlZCBzZXNzaW9uLmMgdG9vKQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDUgMDI6NDI6MDkKICAgICBbY2Fub2hvc3QuYyBob3N0ZmlsZS5jIGluY2x1ZGVzLmggbWlzYy5jIHBhY2tldC5jIHJlYWRjb25mLmNdCiAgICAgW3NlcnZlcmxvb3AuYyBzc2hjb25uZWN0LmMgdXVlbmNvZGUuY10KICAgICBtb3ZlICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBkZXJhYWR0QAogICAgIChhbHNvIHNzaC1yYW5kLWhlbHBlci5jIGxvZ2ludGVzdC5jIGxvZ2lucmVjLmMpCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA2IDEwOjQ3OjA1CiAgICAgW3NlcnZjb25mLmMgc2VydmNvbmYuaCBzZXNzaW9uLmMgc3NoZF9jb25maWcuNV0KICAgICBzdXBwb3J0IGFyZ3VtZW50cyB0byBTdWJzeXN0ZW0gY29tbWFuZHM7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDYgMTA6NDc6NTcKICAgICBbc2Z0cC1zZXJ2ZXIuOCBzZnRwLXNlcnZlci5jXQogICAgIGFkZCBjb21tYW5kbGluZSBvcHRpb25zIHRvIGVuYWJsZSBsb2dnaW5nIG9mIHRyYW5zYWN0aW9uczsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDYgMTY6MDM6NTMKICAgICBbYXV0aC1vcHRpb25zLmMgYXV0aC1vcHRpb25zLmggYXV0aC1wYXNzd2QuYyBhdXRoLXJoLXJzYS5jXQogICAgIFthdXRoLXJob3N0cy5jIGF1dGgtcnNhLmMgYXV0aC5jIGF1dGguaCBhdXRoMi1ob3N0YmFzZWQuY10KICAgICBbYXV0aDItcHVia2V5LmMgYXV0aDIuYyBpbmNsdWRlcy5oIG1pc2MuYyBtaXNjLmggbW9uaXRvci5jXQogICAgIFttb25pdG9yX3dyYXAuYyBtb25pdG9yX3dyYXAuaCBzY3AuYyBzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jXQogICAgIFtzZXNzaW9uLmggc2Z0cC1jb21tb24uYyBzc2gtYWRkLmMgc3NoLWtleWdlbi5jIHNzaC1rZXlzaWduLmNdCiAgICAgW3NzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0Lmggc3NoZC5jIHNzaHB0eS5jIHNzaHB0eS5oIHVpZHN3YXAuY10KICAgICBbdWlkc3dhcC5oXQogICAgIG1vdmUgI2luY2x1ZGUgPHB3ZC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDYgMTY6MjI6MzkKICAgICBbc3NoLWtleWdlbi5jXQogICAgIG1vdmUgI2luY2x1ZGUgImRucy5oIiB1cAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDYgMTc6MzY6MzcKICAgICBbbW9uaXRvcl93cmFwLmhdCiAgICAgdHlwbyBpbiBjb21tZW50CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wOCAyMTo0NzoxMgogICAgIFthdXRoZmQuYyBjYW5vaG9zdC5jIGNsaWVudGxvb3AuYyBkbnMuYyBkbnMuaCBpbmNsdWRlcy5oXQogICAgIFttb25pdG9yX2ZkcGFzcy5jIG5jaGFuLmMgcGFja2V0LmMgc2VydmNvbmYuYyBzZnRwLmMgc3NoLWFnZW50LmNdCiAgICAgW3NzaC1rZXlzY2FuLmMgc3NoLmMgc3NoY29ubmVjdC5oIHNzaGQuYyBzc2hsb2dpbi5oXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA4IDIxOjQ4OjUzCiAgICAgW21vbml0b3IuYyBzZXNzaW9uLmNdCiAgICAgbWlzc2VkIHRoZXNlIGZyb20gbGFzdCBjb21taXQ6CiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDggMjM6MzA6MDYKICAgICBbbG9nLmNdCiAgICAgbW92ZSB1c2VyIGluY2x1ZGVzIGFmdGVyIC91c3IvaW5jbHVkZSBmaWxlcwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDkgMTU6MTU6MTEKICAgICBbYXV0aDItbm9uZS5jIGF1dGhmZC5jIGF1dGhmaWxlLmMgaW5jbHVkZXMuaCBtaXNjLmMgbW9uaXRvci5jXQogICAgIFtyZWFkcGFzcy5jIHNjcC5jIHNlcnZlcmxvb3AuYyBzZnRwLWNsaWVudC5jIHNmdHAtc2VydmVyLmNdCiAgICAgW3NzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNpZ24uYyBzc2guYyBzc2hkLmNdCiAgICAgW3NzaGxvZ2luLmMgc3NocHR5LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8ZmNudGwuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA5IDE1OjI3OjU5CiAgICAgW3NzaC1hZGQuY10KICAgICB1c2UgT19SRE9OTFkgdnMuIDAgaW4gb3BlbigpOyBubyBiaW5hcnkgY2hhbmdlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEwIDExOjI0OjU0CiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgcmVtb3ZlIG9wdGluZCAtIGl0IGlzbid0IHVzZWQgaGVyZQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMCAxMToyNTo1MwogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIGRvbid0IGxvZyB2YXJpYWJsZXMgdGhhdCBhcmVuJ3QgeWV0IHNldAogLSAoZGptKSBbbG9naW5yZWMuYyBzc2gtcmFuZC1oZWxwZXIuYyBzc2hkLmMgb3BlbmJzZC1jb21wYXQvZ2xvYi5jXQogICBbb3BlbmJzZC1jb21wYXQvbWt0ZW1wLmMgb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0KICAgW29wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmMgb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuY10KICAgW29wZW5ic2QtY29tcGF0L3hjcnlwdC5jXSBGaXggaW5jbHVkZXMuaCBmYWxsb3V0LCBtYWlubHkgZmNudGwuaAogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEwIDEyOjAzOjIwCiAgICAgW3NjcC5jXQogICAgIGR1cGxpY2F0ZSBhcmd2IGF0IHRoZSBzdGFydCBvZiBtYWluKCkgYmVjYXVzZSBpdCBnZXRzIG1vZGlmaWVkIGxhdGVyOwogICAgIHBvaW50ZWQgb3V0IGJ5IGRlcmFhZHRAIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTAgMTI6MDg6MDgKICAgICBbY2hhbm5lbHMuY10KICAgICBmaXggbWlzcGFyc2luZyBvZiBTT0NLUyA1IHBhY2tldHMgdGhhdCBjb3VsZCByZXN1bHQgaW4gYSBjcmFzaDsKICAgICByZXBvcnRlZCBieSBta0Agb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTAgMTI6NDY6NTEKICAgICBbbWlzYy5jIG1pc2MuaCBzc2hkLjggc3NoY29ubmVjdC5jXQogICAgIEFkZCBwb3J0IGlkZW50aWZpZXIgdG8ga25vd25faG9zdHMgZm9yIG5vbi1kZWZhdWx0IHBvcnRzLCBiYXNlZCBvcmlnaW5hbGx5CiAgICAgb24gYSBwYXRjaCBmcm9tIERldmluIE5hdGUgaW4gYnojOTEwLgogICAgIEZvciBhbnkgY29ubmVjdGlvbiB1c2luZyB0aGUgZGVmYXVsdCBwb3J0IG9yIHVzaW5nIGEgSG9zdEtleUFsaWFzIHRoZQogICAgIGZvcm1hdCBpcyB1bmNoYW5nZWQsIG90aGVyd2lzZSB0aGUgaG9zdCBuYW1lIG9yIGFkZHJlc3MgaXMgZW5jbG9zZWQKICAgICB3aXRoaW4gc3F1YXJlIGJyYWNrZXRzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBzc2hkJ3MgTGlzdGVuQWRkcmVzcy4KICAgICBUZXN0ZWQgYnkgbWFueSwgb2sgbWFya3VzQC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBOZWVkIHRvIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICAgZm9yIHN0cnVjdCBzb2NrYWRkciBvbiBwbGF0Zm9ybXMgdGhhdCB1c2UgdGhlIGZha2UtcmZjIHN0dWZmLgoKMjAwNjA3MDYKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFRyeSBBSVggYmxpYnBhdGggdGVzdCBpbiBkaWZmZXJlbnQgb3JkZXIgd2hlbgogICBjb21waWxpbmcgd2l0aCBnY2MuICBnY2MgNC4xLnggd2lsbCBhY2NlcHQgKGJ1dCBpZ25vcmUpIC1iIGZsYWdzIHNvCiAgIGNvbmZpZ3VyZSB3b3VsZCBub3Qgc2VsZWN0IHRoZSBjb3JyZWN0IGxpYnBhdGggbGlua2VyIGZsYWdzLgogLSAoZHR1Y2tlcikgW0lOU1RBTExdIEEgYml0IG1vcmUgaW5mbyBvbiBhdXRvY29uZi4KCjIwMDYwNzA1CiAtIChkdHVja2VyKSBbc3NoLXJhbmQtaGVscGVyLmNdIERvbid0IGV4aXQgaWYgbWtkaXIgZmFpbHMgYmVjYXVzZSB0aGUKICAgdGFyZ2V0IGFscmVhZHkgZXhpc3RzLgoKMjAwNjA2MzAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBTTlBSSU5URl9DT05TVCBmb3Igc25wcmludGYKICAgZGVjbGFyYXRpb24gdG9vLiAgUGF0Y2ggZnJvbSBydXNzIGF0IHNsdWRnZS5uZXQuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gVW5kZWYgX3JlcyBiZWZvcmUgZGVmaW5pbmcgaXQsCiAgIHByZXZlbnRzIHdhcm5pbmdzIG9uIHBsYXRmb3JtcyB3aGVyZSBfcmVzIGlzIGluIHRoZSBzeXN0ZW0gaGVhZGVycy4KIC0gKGR0dWNrZXIpIFtJTlNUQUxMXSBCdWcgIzEyMDI6IE5vdGUgd2hlbiBhdXRvY29uZiBpcyByZXF1aXJlZCBhbmQgd2hpY2gKICAgdmVyc2lvbi4KCjIwMDYwNjI3CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzEyMDM6IEFkZCBtaXNzaW5nICdbJywgd2hpY2ggY2F1c2VzIHByb2JsZW1zCiAgIHdpdGggYXV0b2NvbmYgMi42MC4gIFBhdGNoIGZyb20gdmFwaWVyIGF0IGdlbnRvby5vcmcuCgoyMDA2MDYyNQogLSAoZHR1Y2tlcikgW2NoYW5uZWxzLmMgc2VydmVybG9vcC5jXSBBcHBseSB0aGUgYnVnICMxMTAyIHdvcmthcm91bmQgdG8gcHR5cwogICBvbmx5LCBvdGhlcndpc2Ugc3NoZCBjYW4gaGFuZyBleGl0aW5nIG5vbi1pbnRlcmFjdGl2ZSBzZXNzaW9ucy4KCjIwMDYwNjI0CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzExOTM6IERlZmluZSBQQVNTV0RfTkVFRFNfVVNFUk5BTUUgb24gU29sYXJpcy4KICAgV29ya3MgYXJvdW5kIGxpbWl0YXRpb24gaW4gU29sYXJpcycgcGFzc3dkIHByb2dyYW0gZm9yIGNoYW5naW5nIHBhc3N3b3JkcwogICB3aGVyZSB0aGUgdXNlcm5hbWUgaXMgbG9uZ2VyIHRoYW4gOCBjaGFyYWN0ZXJzLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3NlcnZlcmxvb3AuY10gR2V0IGlmZGVmL2lmbmRlZiB0aGUgcmlnaHQgd2F5IGFyb3VuZCBmb3IgdGhlIGJ1ZwogICAjMTEwMiB3b3JrYXJvdW5kLgoKMjAwNjA2MjMKIC0gKGR0dWNrZXIpIFtSRUFETUUucGxhdGZvcm0gY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmNdIEFkZAogICB0dW5uZWwgc3VwcG9ydCBmb3IgTWFjIE9TIFgvRGFyd2luIHZpYSBhIHRoaXJkLXBhcnR5IHR1biBkcml2ZXIuICBQYXRjaAogICBmcm9tIHJleWtALCB0ZXN0ZWQgYnkgYW5pbEAKIC0gKGR0dWNrZXIpIFtjaGFubmVscy5jIGNvbmZpZ3VyZS5hYyBzZXJ2ZXJsb29wLmNdIEJ1ZyAjMTEwMjogQXJvdW5kIEFJWAogICA0LjMuMyBNTDMgb3Igc28sIHRoZSBBSVggcHR5IGxheWVyIHN0YXJ0aW5nIHBhc3NpbmcgemVyby1sZW5ndGggd3JpdGVzCiAgIG9uIHRoZSBwdHkgc2xhdmUgYXMgemVyby1sZW5ndGggcmVhZHMgb24gdGhlIHB0eSBtYXN0ZXIsIHdoaWNoIHNzaGQKICAgaW50ZXJwcmV0cyBhcyB0aGUgZGVzY3JpcHRvciBjbG9zaW5nLiAgU2luY2UgbW9zdCB0aGluZ3MgZG9uJ3QgZG8gemVybwogICBsZW5ndGggd3JpdGVzIHRoaXMgcmFyZWx5IG1hdHRlcnMsIGJ1dCBvY2Nhc2lvbmFsbHkgaXQgaGFwcGVucywgYW5kIHdoZW4KICAgaXQgZG9lcyB0aGUgU1NIIHB0eSBzZXNzaW9uIGFwcGVhcnMgdG8gaGFuZywgc28gd2UgYWRkIGEgc3BlY2lhbCBjYXNlIGZvcgogICB0aGlzIGNvbmRpdGlvbi4gIG9rIGRqbUAKCjIwMDYwNjEzCiAtIChkam0pIFtnZXRwdXQuaF0gVGhpcyBmaWxlIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGZ1bmN0aW9ucyBpbiBtaXNjLmMKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8wOCAxMDo0OTo0OAogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIHVpbnQzMl90IC0+IHVfaW50MzJfdCAod2hpY2ggd2UgdXNlIGV2ZXJ5d2hlcmUgZWxzZSkKICAgICAoSWQgc3luYyBvbmx5IC0gcG9ydGFibGUgYWxyZWFkeSBoYWQgdGhpcykKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMTYgMDk6MDA6MDAKICAgICBbY2xpZW50bG9vcC5jXQogICAgIG1pc3NpbmcgZnJlZTsgZnJvbSBLeWxlbmUgSGFsbAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8xNyAxMjo0MzozNAogICAgIFtzY3AuYyBzZnRwLmMgc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jIHNzaGNvbm5lY3QuY10KICAgICBmaXggbGVhazsgY292ZXJpdHkgdmlhIEt5bGVuZSBKbyBIYWxsCiAgIC0gbWlvZEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8xOCAyMToyNzoyNQogICAgIFtrZXhkaGMuYyBrZXhnZXhjLmNdCiAgICAgcGFyYW10ZXIgLT4gcGFyYW1ldGVyCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8yOSAxMjo1NDowOAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgQWRkIGdzc2FwaS13aXRoLW1pYyB0byBQcmVmZXJyZWRBdXRoZW50aWNhdGlvbnMgZGVmYXVsdCBsaXN0OyBvayBqbWMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzI5IDEyOjU2OjMzCiAgICAgW3NzaF9jb25maWddCiAgICAgQWRkIEdTU0FQSUF1dGhlbnRpY2F0aW9uIGFuZCBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzIHRvIGV4YW1wbGVzIGluCiAgICAgc2FtcGxlIHNzaF9jb25maWcuICBvayBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzI5IDE2OjEwOjAzCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBvb3BzIC0gcHJldmlvdXMgd2FzIHRvbyBsb25nOyBzcGxpdCB0aGUgbGlzdCBvZiBhdXRocyB1cAogICAtIG1rQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzMwIDExOjQ2OjM4CiAgICAgW3NzaC1hZGQuY10KICAgICBTeW5jIHVzYWdlKCkgd2l0aCBtYW4gcGFnZSBhbmQgcmVhbGl0eS4KICAgICBvayBkZXJhYWR0IGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMjkgMTY6MTM6MjMKICAgICBbc3NoLjFdCiAgICAgYWRkIEdTU0FQSSB0byB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2RzIHN1cHBvcnRlZDsKICAgLSBta0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8zMCAxMTo0NjozOAogICAgIFtzc2gtYWRkLmNdCiAgICAgU3luYyB1c2FnZSgpIHdpdGggbWFuIHBhZ2UgYW5kIHJlYWxpdHkuCiAgICAgb2sgZGVyYWFkdCBkdHVja2VyCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA2LzAxIDA5OjIxOjQ4CiAgICAgW3NzaGQuY10KICAgICBjYWxsIGdldF9yZW1vdGVfaXBhZGRyKCkgZWFybHk7IGZpeGVzIGxvZ2dpbmcgYWZ0ZXIgY2xpZW50IGRpc2Nvbm5lY3RzOwogICAgIHJlcG9ydCBtcGZAOyBvayBkdHVja2VyQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNi8wNiAxMDoyMDoyMAogICAgIFtyZWFkcGFzcy5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0Lmggc3NoY29ubmVjdDIuYyB1aWRzd2FwLmNdCiAgICAgcmVwbGFjZSByZW1haW5pbmcgc2V0dWlkKCkgY2FsbHMgd2l0aCBwZXJtYW5lbnRseV9zZXRfdWlkKCkgYW5kCiAgICAgY2hlY2sgc2V0ZXVpZCgpIHJldHVybiB2YWx1ZXM7IHJlcG9ydCBNYXJjdXMgTWVpc3NuZXI7IG9rIGR0dWNrZXIgZGptCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA2LzA4IDE0OjQ1OjQ5CiAgICAgW3JlYWRwYXNzLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QyLmMgdWlkc3dhcC5jIHVpZHN3YXAuaF0KICAgICBkbyBub3Qgc2V0IHRoZSBnaWQsIG5vdGVkIGJ5IHNvbGFyOyBvayBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDYvMTMgMDE6MTg6MzYKICAgICBbc3NoLWFnZW50LmNdCiAgICAgYWx3YXlzIHVzZSBhIGZvcm1hdCBzdHJpbmcsIGV2ZW4gd2hlbiBwcmludGluZyBhIGNvbnN0YW50CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA2LzEzIDAyOjE3OjA3CiAgICAgW3NzaC1hZ2VudC5jXQogICAgIHJldmVydDsgaSBhbSBvbiBkcnVncy4gc3BvdHRlZCBieSBhbGV4YW5kZXIgQVQgYmVhcmQuc2UKCjIwMDYwNTIxCiAtIChkdHVja2VyKSBbYXV0aC5jIG1vbml0b3IuY10gTm93IHRoYXQgd2UgZG9uJ3QgbG9nIGZyb20gYm90aCB0aGUgbW9uaXRvcgogICBhbmQgc2xhdmUsIHdlIGNhbiByZW1vdmUgdGhlIHNwZWNpYWwtY2FzZSBoYW5kbGluZyBpbiB0aGUgYXVkaXQgaG9vayBpbgogICBhdXRoX2xvZy4KCjIwMDYwNTE3CiAtIChkdHVja2VyKSBbc3NoLXJhbmQtaGVscGVyLmNdIENoZWNrIHJldHVybiBjb2RlIG9mIG1rZGlyIGFuZCBmaXggZmlsZQogICBwb2ludGVyIGxlYWsuICBGcm9tIGtqaGFsbCBhdCB1cy5pYm0uY29tLCBmb3VuZCBieSBjb3Zlcml0eS4KCjIwMDYwNTE1CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gVXNlIF9jb21wYXRfcmVzIGluc3RlYWQgb2YKICAgX3JlcywgcHJldmVudHMgcHJvYmxlbXMgb24gc29tZSBwbGF0Zm9ybXMgdGhhdCBoYXZlIF9yZXMgYXMgYSBnbG9iYWwgYnV0CiAgIGRvbid0IGhhdmUgZ2V0cnJzZXRieW5hbWUoKSwgZWcgSVJJWCA1LjMuICBGb3VuZCBhbmQgdGVzdGVkIGJ5CiAgIGdlb3JnLnNjaHdhcnogYXQgZnJlZW5ldC5kZSwgb2sgZGptQC4KIC0gKGR0dWNrZXIpIFtkZWZpbmVzLmhdIEZpbmQgYSB2YWx1ZSBmb3IgSU9WX01BWCBvciB1c2UgYSBjb25zZXJ2YXRpdmUKICAgZGVmYXVsdC4gIFBhdGNoIG9yaWdpbmFsbHkgZnJvbSB0aW1ALCBvayBkam0KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBCdWcgIzExODg6IHBhc3MgcmVzdWx0IG9mIGRvX3BhbV9hY2NvdW50IGJhY2sgYW5kCiAgIGRvIG5vdCBhbGxvdyBrYmRpbnQgYWdhaW4gYWZ0ZXIgdGhlIFBBTSBhY2NvdW50IGNoZWNrIGZhaWxzLiAgb2sgZGptQAoKMjAwNjA1MDYKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzI1IDA4OjAyOjI3CiAgICAgW2F1dGhmaWxlLmMgYXV0aGZpbGUuaCBzc2hjb25uZWN0Mi5jIHNzaC5jIHNzaGNvbm5lY3QxLmNdCiAgICAgUHJldmVudCBzc2ggZnJvbSB0cnlpbmcgdG8gb3BlbiBwcml2YXRlIGtleXMgd2l0aCBiYWQgcGVybWlzc2lvbnMgbW9yZSB0aGFuCiAgICAgb25jZSBvciBwcm9tcHRpbmcgZm9yIHRoZWlyIHBhc3NwaHJhc2VzICh3aGljaCBpdCBzdWJzZXF1ZW50bHkgaWdub3JlcwogICAgIGFueXdheSksIHNpbWlsYXIgdG8gYSBwcmV2aW91cyBjaGFuZ2UgaW4gc3NoLWFkZC4gIGJ6ICMxMTg2LCBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzA0IDE0OjU1OjIzCiAgICAgW2RoLmNdCiAgICAgdGlnaHRlciBESCBleHBvbmVudCBjaGVja3MgaGVyZSB0b287IGZlZWRiYWNrIGFuZCBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzAxIDA1OjM3OjQ2CiAgICAgW09WRVJWSUVXXQogICAgICRPcGVuQlNEJCBpbiBoZXJlIHRvbwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMDYgMDg6MzU6NDAKICAgICBbYXV0aC1rcmI1LmNdCiAgICAgQWRkICRPcGVuQlNEJCBpbiBjb21tZW50IGhlcmUgdG9vCgoyMDA2MDUwNAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmMgZ3JvdXBhY2Nlc3MuYyBtb25pdG9yLmMgbW9uaXRvcl93cmFwLmMgc2NhcmQtb3BlbnNjLmMKICAgc2Vzc2lvbi5jIHNzaC1yYW5kLWhlbHBlci5jIHNzaGQuYyBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuYwogICBvcGVuYnNkLWNvbXBhdC9zZXRwcm9jdGl0bGUuY10gQ29udmVydCBtYWxsb2MoZm9vKmJhcikgLT4gY2FsbG9jKGZvbyxiYXIpCiAgIGluIFBvcnRhYmxlLW9ubHkgY29kZTsgc2luY2UgY2FsbG9jIHplcm9zLCByZW1vdmUgbm93LXJlZHVuZGFudCBtZW1zZXRzLgogICBBbHNvIGFkZCBhIGNvdXBsZSBvZiBzYW5pdHkgY2hlY2tzLiAgV2l0aCAmIG9rIGRqbUAKCjIwMDYwNTAzCiAtIChkdHVja2VyKSBbcGFja2V0LmNdIFJlbW92ZSBpbl9zeXN0bS5oIHNpbmNlIGl0J3MgYWxzbyBpbiBpbmNsdWRlcy5oCiAgIGFuZCBkb3VibGUgaW5jbHVkaW5nIGl0IG9uIElSSVggNS4zIGNhdXNlcyBwcm9ibGVtcy4gIEZyb20gR2VvcmcgU2Nod2FyeiwKICAgIm5vIG9iamVjdGlvbnMiIHRpbUAKCjIwMDYwNDIzCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzAxIDA1OjQyOjIwCiAgICAgW3NjcC5jXQogICAgIG1pbmltYWwgbGludCBjbGVhbnVwICh1bnVzZWQgY3J1ZCwgYW5kIHNvbWUgc2l6ZV90KTsgb2sgZGptCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzAxIDA1OjUwOjI5CiAgICAgW3NjcC5jXQogICAgIHhhc3ByaW50aWZpY2F0aW9uOyBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8wMSAwNTo1MTozNAogICAgIFthdG9taWNpby5jXQogICAgIEFOU0lmeTsgcmVxdWVzdGVkIGRlcmFhZHRACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8wMiAwODozNDo1MgogICAgIFtzc2gta2V5c2lnbi5jXQogICAgIHNlc3Npb25pZCBjYW4gYmUgMzIgYnl0ZXMgbm93IHRvbyB3aGVuIHNoYTI1NiBrZXggaXMgdXNlZDsgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8wMyAwNzoxMDozOAogICAgIFtnc3MtZ2Vuci5jXQogICAgIEdTU0FQSSBidWZmZXJzIHNob3VsZG4ndCBiZSBudWwtdGVybWluYXRlZCwgc3BvdHRlZCBpbiBidWd6aWxsYSAjMTA2NgogICAgIGJ5IGRsZW9uYXJkIEFUIHZpbnRlbGEuY29tLiB1c2UgeGFzcHJpbnRmKCkgdG8gc2ltcGxpZnkgY29kZSB3aGlsZSBpbgogICAgIHRoZXJlOyAibG9va3MgcmlnaHQiIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzE2IDAwOjQ4OjUyCiAgICAgW2J1ZmZlci5jIGJ1ZmZlci5oIGNoYW5uZWxzLmNdCiAgICAgRml4IGNvbmRpdGlvbiB3aGVyZSB3ZSBjb3VsZCBleGl0IHdpdGggYSBmYXRhbCBlcnJvciB3aGVuIGFuIGlucHV0CiAgICAgYnVmZmVyIGJlY2FtZSB0b28gbGFyZ2UgYW5kIHRoZSByZW1vdGUgZW5kIGhhZCBhZHZlcnRpc2VkIGEgYmlnIHdpbmRvdy4KICAgICBUaGUgcHJvYmxlbSB3YXMgYSBtaXNtYXRjaCBpbiB0aGUgYmFja29mZiBtYXRoIGJldHdlZW4gdGhlIGNoYW5uZWxzIGNvZGUKICAgICBhbmQgdGhlIGJ1ZmZlciBjb2RlLCBzbyBtYWtlIGEgYnVmZmVyX2NoZWNrX2FsbG9jKCkgZnVuY3Rpb24gdGhhdCB0aGUKICAgICBjaGFubmVscyBjb2RlIGNhbiB1c2UgdG8gcHJvcHNlY3Rpdmx5IGNoZWNrIHdoZXRoZXIgYW4gaW5jcmVtZW50YWwKICAgICBhbGxvY2F0aW9uIHdpbGwgc3VjY2VlZC4gIGJ6ICMxMTMxLCBkZWJ1Z2dlZCB3aXRoIHRoZSBhc3Npc3RhbmNlIG9mCiAgICAgY292ZSBBVCB3aWxkcGFja2V0cy5jb207IG9rIGR0dWNrZXJAIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzE2IDAwOjUyOjU1CiAgICAgW2F0b21pY2lvLmMgYXRvbWljaW8uaF0KICAgICBpbnRyb2R1Y2UgYXRvbWljaW92KCkgZnVuY3Rpb24gdGhhdCB3cmFwcyByZWFkdi93cml0ZXYgdG8gcmV0cnkKICAgICBpbnRlcnJ1cHRlZCB0cmFuc2ZlcnMgbGlrZSBhdG9taWNpbygpIGRvZXMgZm9yIHJlYWQvd3JpdGU7CiAgICAgZmVlZGJhY2sgZGVyYWFkdEAgZHR1Y2tlckAgc3RldmVza0Agb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMTYgMDA6NTQ6MTAKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBhdm9pZCBtYWtpbmcgYSB0aW55IDQtYnl0ZSB3cml0ZSB0byBzZW5kIHRoZSBwYWNrZXQgbGVuZ3RoIG9mIHNmdHAKICAgICBjb21tYW5kcywgd2hpY2ggd291bGQgcmVzdWx0IGluIGEgc2VwYXJhdGUgdGlueSBwYWNrZXQgb24gdGhlIHdpcmUgYnkKICAgICB1c2luZyBhdG9taWNpb3Yod3JpdGV2LCAuLi4pIHRvIHdyaXRlIHRoZSBsZW5ndGggYW5kIHRoZSBjb21tYW5kIGluIG9uZQogICAgIHBhc3M7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzE2IDA3OjU5OjAwCiAgICAgW2F0b21pY2lvLmNdCiAgICAgcmVvcmRlciBzYW5pdHkgdGVzdCBzbyB0aGF0IGl0IGNhbm5vdCBkZXJlZmVyZW5jZSBwYXN0IHRoZSBlbmQgb2YgdGhlCiAgICAgaW92IGFycmF5OyB3ZWxsIHNwb3R0ZWQgY2FuYWNhckAhCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8xOCAxMDo0NDoyOAogICAgIFtidWZhdXguYyBidWZibi5jIE1ha2VmaWxlLmluXQogICAgIE1vdmUgQnVmZmVyIGJpZ251bSBmdW5jdGlvbnMgaW50byB0aGVpciBvd24gZmlsZSwgYnVmYm4uYy4gVGhpcyBtZWFucwogICAgIHRoYXQgc2Z0cCBhbmQgc2Z0cC1zZXJ2ZXIgKHdoaWNoIHVzZSB0aGUgQnVmZmVyIGZ1bmN0aW9ucyBpbiBidWZhdXguYyAKICAgICBidXQgbm90IHRoZSBiaWdudW0gb25lcykgbm8gbG9uZ2VyIG5lZWQgdG8gYmUgbGlua2VkIHdpdGggbGliY3J5cHRvLgogICAgIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMjAgMDk6Mjc6MDkKICAgICBbYXV0aC5oIGNsaWVudGxvb3AuYyBkaXNwYXRjaC5jIGRpc3BhdGNoLmgga2V4LmhdCiAgICAgcmVwbGFjZSB0aGUgbGFzdCBub24tc2lnX2F0b21pY190IGZsYWcgdXNlZCBpbiBhIHNpZ25hbCBoYW5kbGVyIHdpdGggYQogICAgIHNpZ19hdG9taWNfdCwgdW5mb3J0dW5hdGVseSB3aXRoIHNvbWUga25vY2stb24gZWZmZWN0cyBpbiBvdGhlciAobm9uLQogICAgIHNpZ25hbCkgY29udGV4dHMgaW4gd2hpY2ggaXQgaXMgdXNlZDsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8yMCAwOTo0Nzo1OQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgc2ltcGxpZnk7IG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMjAgMjE6NTM6NDQKICAgICBbaW5jbHVkZXMuaCBzZXNzaW9uLmMgc2Z0cC5jXQogICAgIFN3aXRjaCBmcm9tIHVzaW5nIHBpcGVzIHRvIHNvY2tldHBhaXJzIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4KICAgICBzZnRwL3NjcCBhbmQgc3NoLCBhbmQgYmV0d2VlbiBzc2hkIGFuZCBpdHMgc3VicHJvY2Vzc2VzLiBUaGlzIHNhdmVzCiAgICAgYSBmaWxlIGRlc2NyaXB0b3IgcGVyIHNlc3Npb24gYW5kIGFwcGFyZW50bHkgbWFrZXMgdXNlcmxhbmQgcHBwIG92ZXIKICAgICBzc2ggd29yazsgb2sgbWFya3VzQCBkZXJhYWR0QCAoSUQgU3luYyBvbmx5IC0gcG9ydGFibGUgbWFrZXMgdGhpcwogICAgIGRlY2lzaW9uIG9uIGEgcGVyLXBsYXRmb3JtIGJhc2lzKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8yMiAwNDowNjo1MQogICAgIFt1aWRzd2FwLmNdCiAgICAgdXNlIHNldHJlc1t1Z11pZCgpIHRvIHBlcm1hbmVudGx5IHJldm9rZSBwcml2aWxlZ2VzOyBvayBkZXJhYWR0QAogICAgIChJRCBTeW5jIG9ubHkgLSBwb3J0YWJsZSBhbHJlYWR5IHVzZXMgc2V0cmVzW3VnXWlkKCkgd2hlbmV2ZXIgcG9zc2libGUpCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8yMiAxODoyOTozMwogICAgIFtjcmMzMi5jXQogICAgIHJlbW92ZSBleHRyYSBzcGFjZXMKIC0gKGRqbSkgW2F1dGguaCBkaXNwYXRjaC5oIGtleC5oXSBzcHJpbmtsZSBpbiBzaWduYWwuaCB0byBnZXQKICAgc2lnX2F0b21pY190CgoyMDA2MDQyMQogLSAoZGptKSBbTWFrZWZpbGUuaW4gY29uZmlndXJlLmFjIHNlc3Npb24uYyBzc2hwdHkuY10KICAgW2NvbnRyaWIvcmVkaGF0L3NzaGQuaW5pdCBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbl0KICAgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5jXQogICBbb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5oXSBBZGQgc3VwcG9ydCBmb3IgU0VMaW51eCwgc2V0dGluZyAKICAgdGhlIGV4ZWN1dGlvbiBhbmQgVFRZIGNvbnRleHRzLiBiYXNlZCBvbiBwYXRjaCBmcm9tIERhbmllbCBXYWxzaCwKICAgYnogIzg4MDsgb2sgZHR1Y2tlckAKCjIwMDYwNDE4CiAtIChkam0pIFtjYW5vaG9zdC5jXSBSZW9yZGVyIElQIG9wdGlvbnMgY2hlY2sgc28gdGhhdCBpdCBpc24ndCBicm9rZW4KICAgYnkgbWFwcGVkIGFkZHJlc3NlczsgYnogIzExNzkgcmVwb3J0ZWQgYnkgbWFya3cgd3RlY2gtbGxjLmNvbTsKICAgb2sgZHR1Y2tlckAKCjIwMDYwMzMxCiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI3IDAxOjIxOjE4CiAgICAgW3htYWxsb2MuY10KICAgICB3ZSBjYW4gZG8gdGhlIHNpemUgJiBubWVtYiBjaGVjayBiZWZvcmUgdGhlIGludGVnZXIgb3ZlcmZsb3cgY2hlY2s7IAogICAgIGV2b2wKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI3IDEzOjAzOjU0CiAgICAgW2RoLmNdCiAgICAgdXNlIHN0cnRvbnVtKCkgaW5zdGVhZCBvZiBhdG9pKCksIGxpbWl0IGRoZyBzaXplIHRvIDY0azsgb2sgZGptCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI3IDIzOjE1OjQ2CiAgICAgW3NmdHAuY10KICAgICBhbHdheXMgdXNlIGEgZm9ybWF0IHN0cmluZyBmb3IgYWRkYXJnczsgc3BvdHRlZCBieSBtb3VyaW5nQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjggMDA6MTI6MzEKICAgICBbUkVBRE1FLnR1biBzc2guY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yOCAwMTo1MjoyOAogICAgIFtjaGFubmVscy5jXQogICAgIGRvIG5vdCBhY2NlcHQgdW5yZWFzb25hYmxlIFggcG9ydHMgbnVtYmVyczsgb2sgZGptCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yOCAwMTo1Mzo0MwogICAgIFtzc2gtYWdlbnQuY10KICAgICB1c2Ugc3RydG9udW0oKSB0byBwYXJzZSB0aGUgcGlkIGZyb20gdGhlIGZpbGUsIGFuZCByYW5nZSBjaGVjayBpdAogICAgIGJldHRlcjsgb2sgZGptCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMwIDA5OjQxOjI1CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgQVJHU1VTRUQgZm9yIGRpc3BhdGNoIHRhYmxlLWRyaXZlbiBmdW5jdGlvbnMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMzAgMDk6NTg6MTYKICAgICBbYXV0aGZkLmMgYnVmYXV4LmMgZGVhdHRhY2suYyBnc3Mtc2Vydi5jIG1hYy5jIG1pc2MuYyBtaXNjLmhdCiAgICAgW21vbml0b3Jfd3JhcC5jIG1zZy5jIHBhY2tldC5jIHNmdHAtY2xpZW50LmMgc2Z0cC1zZXJ2ZXIuYyBzc2gtYWdlbnQuY10KICAgICByZXBsYWNlIHtHRVQsUFVUfV9YWEJJVCBtYWNyb3Mgd2l0aCBmdW5jdGlvbmFsbHkgc2ltaWxhciBmdW5jdGlvbnMsCiAgICAgc2lsZW5jaW5nIGEgaGVhcCBvZiBsaW50IHdhcm5pbmdzLiBhbHNvIGFsbG93cyB0aGVtIHRvIHVzZQogICAgIF9fYm91bmRlZF9fIGNoZWNraW5nIHdoaWNoIGNhbid0IGJlIGFwcGxpZWQgdG8gbWFjcm9zOyByZXF1ZXN0ZWQKICAgICBieSBhbmQgZmVlZGJhY2sgZnJvbSBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMCAxMDo0MToyNQogICAgIFtzc2guYyBzc2hfY29uZmlnLjVdCiAgICAgYWRkIHBlcmNlbnQgZXNjYXBlIGNoYXJzIHRvIHRoZSBJZGVudGl0eUZpbGUgb3B0aW9uLCBieiAjMTE1OSBiYXNlZAogICAgIG9uIGEgcGF0Y2ggYnkgaW1hZ2luZyBBVCBtYXRoLnVhbGJlcnRhLmNhOyBmZWVkYmFjayBhbmQgb2sgZHR1Y2tlckAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMwIDExOjA1OjE3CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBDb3JyZWN0bHkgaGFuZGxlIHRydW5jYXRlZCBmaWxlcyB3aGlsZSBjb252ZXJ0aW5nIGtleXM7IG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMwIDExOjQwOjIxCiAgICAgW2F1dGguYyBtb25pdG9yLmNdCiAgICAgUHJldmVudCBkdXBsaWNhdGUgbG9nIG1lc3NhZ2VzIHdoZW4gcHJpdnNlcD15ZXM7IG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMzEgMDk6MDk6MzAKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGtpbGwgdHJhaWxpbmcgd2hpdGVzcGFjZTsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMzEgMDk6MTM6NTYKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHJlbW90ZSB1c2VyIGVzY2FwZSBpcyAlciBub3QgJWg7IHNwb3R0ZWQgYnkgam1jQAoKMjAwNjAzMjYKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE1IDA4OjQ2OjQ0CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBpZiBubyBrZXkgZmlsZSBhcmUgZ2l2ZW4gd2hlbiBwcmludGluZyB0aGUgRE5TIGhvc3QgcmVjb3JkLCB1c2UgdGhlCiAgICAgaG9zdCBrZXkgZmlsZShzKSBhcyBkZWZhdWx0LiBvayBkam1ACiAgIC0gYmlvcm5AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTYgMTA6MzE6NDUKICAgICBbc2NwLmNdCiAgICAgVHJ5IHRvIGRpc3BsYXkgZXJyb3JtZXNzYWdlIGV2ZW4gaWYgcmVtb3V0ID09IC0xCiAgICAgb2sgZGptQCwgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xNyAyMjozMTo1MAogICAgIFthdXRoZmQuY10KICAgICBhbm90aGVyIHVucmVhY2hhYmxlIGZvdW5kIGJ5IGxpbnQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTcgMjI6MzE6MTEKICAgICBbYXV0aGZkLmNdCiAgICAgdW5yZWFjaGFuYmxlIHN0YXRlbWVudCwgZm91bmQgYnkgbGludAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAwMjoyMjozMgogICAgIFtzZXJ2ZXJsb29wLmNdCiAgICAgbWVtb3J5IGxlYWtzIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7CiAgICAgb2sgZGVyYWFkdEAgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMDI6MjI6NTYKICAgICBbc2Z0cC5jXQogICAgIG1vcmUgbWVtb3J5IGxlYWtzIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7CiAgICAgZGVyYWFkdEAgb2sKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMDI6MjM6MjYKICAgICBbaG9zdGZpbGUuY10KICAgICBGSUxFKiBsZWFrIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7CiAgICAgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMDI6MjQ6MDUKICAgICBbZGguYyByZWFkY29uZi5jIHNlcnZjb25mLmNdCiAgICAgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkKICAgICB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOyBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAwNzo0MTozMAogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIG1lbW9yeSBsZWFrcyBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIGRlcmFhZHRAIG9rCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxMTo1MTo1MgogICAgIFtzZXJ2Y29uZi5jXQogICAgIENvcnJlY3Qgc3RyZGVsaW0gbnVsbCB0ZXN0OyBvayBkam1ACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1MjoxMQogICAgIFthdXRoMS5jIGF1dGhmZC5jIGNoYW5uZWxzLmNdCiAgICAgc3BhY2luZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTM6MTIKICAgICBba2V4LmMga2V4LmggbW9uaXRvci5jIG15cHJvcG9zYWwuaCBzZXNzaW9uLmNdCiAgICAgc3BhY2luZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTY6NDEKICAgICBbY2xpZW50bG9vcC5jIHByb2dyZXNzbWV0ZXIuYyBzZXJ2ZXJsb29wLmMgc3NoZC5jXQogICAgIEFSR1NVU0VEIGZvciBzaWduYWwgaGFuZGxlcnMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjU5OjQ5CiAgICAgW3NzaC1rZXlzY2FuLmNdCiAgICAgcGxlYXNlIGxpbnQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjU5OjMwCiAgICAgW3NzaC5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjU5OjA5CiAgICAgW2F1dGhmaWxlLmNdCiAgICAgd2hvZXZlciB0aG91Z2h0IHRoYXQgYnJlYWsgYWZ0ZXIgcmV0dXJuIHdhcyBhIGdvb2QgaWRlYSBuZWVkcyB0bwogICAgIGdldCB0aGVpciBoZWFkIGV4YW1pbWVkCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDA0OjA5OjQ0CiAgICAgW21vbml0b3IuY10KICAgICBtZW1vcnkgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICBkZXJhYWR0QCBvawogICAgIHRoYXQgc2hvdWxkIGJlIGFsbCBvZiB0aGVtIG5vdwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxMTozODo0NgogICAgIFtrZXkuY10KICAgICAocmVhbGx5KSBsYXN0IG9mIHRoZSBDb3Zlcml0eSBkaWZmczogYXZvaWQgcG9zc2libGUgTlVMTCBkZXJlZiBpbgogICAgIGtleV9mcmVlLiB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOyBtYXJrdXNAIG9rCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxNzoxMDoxOQogICAgIFthdXRoLmMga2V5LmMgbWlzYy5jIHBhY2tldC5jIHNzaC1hZGQuY10KICAgICBpbiBhIHN3aXRjaCAoKSwgYnJlYWsgYWZ0ZXIgcmV0dXJuIG9yIGdvdG8gaXMgc3R1cGlkCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxNzoxMzoxNgogICAgIFtrZXkuY10KICAgICBkam0gZGlkIGEgdHlwbwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTc6MTc6MjMKICAgICBbc3NoLXJzYS5jXQogICAgIGluIGEgc3dpdGNoICgpLCBicmVhayBhZnRlciByZXR1cm4gb3IgZ290byBpcyBzdHVwaWQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjE0OjAyCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIG1vbml0b3Jfd3JhcC5jIG1vbml0b3Jfd3JhcC5oIHNlcnZlcmxvb3AuY10KICAgICBbc3NoLmMgc3NocHR5LmMgc3NocHR5LmhdCiAgICAgc3ByaW5rbGUgdV9pbnQgdGhyb3VnaG91dCBwdHkgc3Vic3lzdGVtLCBvayBtYXJrdXMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjE3OjIwCiAgICAgW2F1dGgxLmMgYXV0aDIuYyBzc2hkLmNdCiAgICAgc3ByaW5rbGUgc29tZSBBUkdTVVNFRCBmb3IgdGFibGUgZHJpdmVuIGZ1bmN0aW9ucyAod2hpY2ggc29tZXRpbWVzIAogICAgIG11c3QgaWdub3JlIHRoZWlyIGFyZ3MpCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODoyNjo1NQogICAgIFtjaGFubmVscy5jIG1vbml0b3IuYyBzZXNzaW9uLmMgc2Vzc2lvbi5oIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uY10KICAgICBbc3NoLXJzYS5jIHNzaC5jIHNzaGxvZ2luLmNdCiAgICAgYW5ub3lpbmcgc3BhY2luZyBmaXhlcyBnZXR0aW5nIGluIHRoZSB3YXkgb2YgcmVhbCBkaWZmcwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6Mjc6NTAKICAgICBbbW9uaXRvci5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjM1OjEyCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgeDExX2Zha2VfZGF0YSBpcyBvbmx5IGV2ZXIgdXNlZCBhcyB1X2NoYXIgKgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6NDE6NDMKICAgICBbZG5zLmNdCiAgICAgY2FzdCB4c3RyZHVwIHRvIHByb3BlcnQgdV9jaGFyICoKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjQyOjI3CiAgICAgW2Nhbm9ob3N0LmMgbWF0Y2guYyBzc2guYyBzc2hjb25uZWN0LmNdCiAgICAgYmUgc3RyaWN0IHdpdGggdG9sb3dlcigpIGNhc3RpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjQ4OjM0CiAgICAgW2NoYW5uZWxzLmMgZmF0YWwuYyBrZXguYyBwYWNrZXQuYyBzZXJ2ZXJsb29wLmNdCiAgICAgc3BhY2luZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMjE6MTE6NTMKICAgICBbdHR5bW9kZXMuY10KICAgICBzcGFjaW5nCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDAwOjA1OjQxCiAgICAgW2F1dGgtYnNkYXV0aC5jIGF1dGgtc2tleS5jIGF1dGguYyBhdXRoMi1jaGFsbC5jIGNoYW5uZWxzLmNdCiAgICAgW2NsaWVudGxvb3AuYyBkZWF0dGFjay5jIGdzcy1nZW5yLmMga2V4LmMga2V5LmMgbWlzYy5jIG1vZHVsaS5jXQogICAgIFttb25pdG9yLmMgbW9uaXRvcl93cmFwLmMgcGFja2V0LmMgc2NhcmQuYyBzZnRwLXNlcnZlci5jIHNzaC1hZ2VudC5jXQogICAgIFtzc2gta2V5c2Nhbi5jIHNzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0Mi5jIHNzaGQuYyB1dWVuY29kZS5jXQogICAgIFt4bWFsbG9jLmMgeG1hbGxvYy5oXQogICAgIGludHJvZHVjZSB4Y2FsbG9jKCkgYW5kIHhhc3ByaW50ZigpIGZhaWx1cmUtY2hlY2tlZCBhbGxvY2F0aW9ucyAKICAgICBmdW5jdGlvbnMgYW5kIHVzZSB0aGVtIHRocm91Z2hvdXQgb3BlbnNzaAoKICAgICB4Y2FsbG9jIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgYmVjYXVzZSBtYWxsb2Mobm1lbWIgKiBzaXplKSBpcyBhCiAgICAgZGFuZ2Vyb3VzIGlkaW9tIChzdWJqZWN0IHRvIGludGVnZXIgb3ZlcmZsb3cpIGFuZCBpdCBpcyB0aW1lIGZvciBpdCAKICAgICB0byBkaWUKCiAgICAgZmVlZGJhY2sgYW5kIG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDAxOjEzOjIzCiAgICAgW2J1ZmZlci5jIGNoYW5uZWxzLmMgZGVhdHRhY2suYyBtaXNjLmMgc2NwLmMgc2Vzc2lvbi5jIHNmdHAtY2xpZW50LmNdCiAgICAgW3NmdHAtc2VydmVyLmMgc3NoLWFnZW50LmMgc3NoLXJzYS5jIHhtYWxsb2MuYyB4bWFsbG9jLmggYXV0aC1wYW0uY10KICAgICBbdWlkc3dhcC5jXQogICAgIGNoYW5nZSBPcGVuU1NIJ3MgeHJlYWxsb2MoKSBmdW5jdGlvbiBmcm9tIGJlaW5nIHhyZWFsbG9jKHAsIG5ld19zaXplKQogICAgIHRvIHhyZWFsbG9jKHAsIG5ld19ubWVtYiwgbmV3X2l0ZW1zaXplKS4KCiAgICAgcmVhbGxvYyBpcyBwYXJ0aWN1bGFybHkgcHJvbmUgdG8gaW50ZWdlciBvdmVyZmxvd3MgYmVjYXVzZSBpdCBpcwogICAgIGFsbW9zdCBhbHdheXMgYWxsb2NhdGluZyAibiAqIHNpemUiIGJ5dGVzLCBzbyB0aGlzIGlzIGEgZmFyIHNhZmVyIAogICAgIEFQSTsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMDE6MzA6MjMKICAgICBbc2Z0cC5jXQogICAgICJhYm9ybWFsbHkiIGlzIGEgcGVyZmVjdGx5IGNyb211bGVudCB3b3JkLCBidXQgImFibm9ybWFsbHkiIGlzIGJldHRlcgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxMzoxNzowMwogICAgIFthdG9taWNpby5jIGF1dGgtYnNkYXV0aC5jIGF1dGgtY2hhbGwuYyBhdXRoLW9wdGlvbnMuYyBhdXRoLXBhc3N3ZC5jXQogICAgIFthdXRoLXJoLXJzYS5jIGF1dGgtcmhvc3RzLmMgYXV0aC1yc2EuYyBhdXRoLXNrZXkuYyBhdXRoLmMgYXV0aDEuY10KICAgICBbYXV0aDItY2hhbGwuYyBhdXRoMi1ob3N0YmFzZWQuYyBhdXRoMi1rYmRpbnQuYyBhdXRoMi1ub25lLmNdCiAgICAgW2F1dGgyLXBhc3N3ZC5jIGF1dGgyLXB1YmtleS5jIGF1dGgyLmMgYXV0aGZkLmMgYXV0aGZpbGUuYyBidWZhdXguY10KICAgICBbYnVmZmVyLmMgY2Fub2hvc3QuYyBjaGFubmVscy5jIGNpcGhlci0zZGVzMS5jIGNpcGhlci1iZjEuY10KICAgICBbY2lwaGVyLWN0ci5jIGNpcGhlci5jIGNsZWFudXAuYyBjbGllbnRsb29wLmMgY29tcGF0LmMgY29tcHJlc3MuY10KICAgICBbZGVhdHRhY2suYyBkaC5jIGRpc3BhdGNoLmMgZmF0YWwuYyBncm91cGFjY2Vzcy5jIGhvc3RmaWxlLmMga2V4LmNdCiAgICAgW2tleGRoLmMga2V4ZGhjLmMga2V4ZGhzLmMga2V4Z2V4LmMga2V4Z2V4Yy5jIGtleGdleHMuYyBrZXkuYyBsb2cuY10KICAgICBbbWFjLmMgbWF0Y2guYyBtZC1zaGEyNTYuYyBtaXNjLmMgbW9uaXRvci5jIG1vbml0b3JfZmRwYXNzLmNdCiAgICAgW21vbml0b3JfbW0uYyBtb25pdG9yX3dyYXAuYyBtc2cuYyBuY2hhbi5jIHBhY2tldC5jIHByb2dyZXNzbWV0ZXIuY10KICAgICBbcmVhZGNvbmYuYyByZWFkcGFzcy5jIHJzYS5jIHNjYXJkLmMgc2NwLmMgc2VydmNvbmYuYyBzZXJ2ZXJsb29wLmNdCiAgICAgW3Nlc3Npb24uYyBzZnRwLWNsaWVudC5jIHNmdHAtY29tbW9uLmMgc2Z0cC1nbG9iLmMgc2Z0cC1zZXJ2ZXIuY10KICAgICBbc2Z0cC5jIHNzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2gtZHNzLmMgc3NoLWtleWdlbi5jIHNzaC1rZXlzY2FuLmNdCiAgICAgW3NzaC1rZXlzaWduLmMgc3NoLXJzYS5jIHNzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0MS5jXQogICAgIFtzc2hjb25uZWN0Mi5jIHNzaGQuYyBzc2hsb2dpbi5jIHNzaHB0eS5jIHNzaHR0eS5jIHR0eW1vZGVzLmNdCiAgICAgW3VpZHN3YXAuYyB1dWVuY29kZS5jIHhtYWxsb2MuY10KICAgICBQdXQgJE9wZW5CU0QkIHRhZ3MgYmFjayAoYXMgY29tbWVudHMpIHRvIHJlcGxhY2UgdGhlIFJDU0lEKClzIHRoYXQKICAgICBUaGVvIG51a2VkIC0gb3VyIHNjcmlwdHMgdG8gc3luYyAtcG9ydGFibGUgbmVlZCB0aGVtIGluIHRoZSBmaWxlcwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6Mjk6MzUKICAgICBbYXV0aC1yc2EuYyBhdXRoZmQuYyBwYWNrZXQuY10KICAgICBuZWVkZWQgY2FzdHMgKGFsd2F5cyB3aWxsIGJlIG5lZWRlZCkKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjMwOjU1CiAgICAgW2NsaWVudGxvb3AuYyBzZXJ2ZXJsb29wLmNdCiAgICAgc3BhY2luZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6MzY6MTUKICAgICBbc3NobG9naW4uYyBzc2hsb2dpbi5oXQogICAgIG5pY2VyIHNpemVfdCBhbmQgdGltZV90IHR5cGVzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODo0MDoxNAogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgY2FzdCBzdHJ0b251bSgpIHJlc3VsdCB0byByaWdodCB0eXBlCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODo0MTo0NQogICAgIFtzc2gtYWdlbnQuY10KICAgICBtYXJrIHR3byBtb3JlIHNpZ25hbCBoYW5kbGVycyBBUkdTVVNFRAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6NDM6MzAKICAgICBbY2hhbm5lbHMuY10KICAgICB1c2Ugc3RydG9udW0oKSBpbnN0ZWFkIG9mIGF0b2koKSBbbGltaXQgWCBzY3JlZW5zIHRvIDQwMCwgc29ycnldCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODo1Njo1NQogICAgIFtidWZhdXguYyBjaGFubmVscy5jIHBhY2tldC5jXQogICAgIHJlbW92ZSAoY2hhciAqKSBjYXN0cyB0byBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB2b2lkICogZm9yIHRoZSBhcmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjU4OjEwCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgZGVsZXRlIGNhc3Qgbm90IHJlcXVpcmVkCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDIyOjIyOjQzCiAgICAgW2F0b21pY2lvLmggYXV0aC1vcHRpb25zLmggYXV0aC5oIGF1dGgyLWdzcy5jIGF1dGhmZC5oIGF1dGhmaWxlLmhdCiAgICAgW2J1ZmF1eC5oIGJ1ZmZlci5oIGNhbm9ob3N0LmggY2hhbm5lbHMuaCBjaXBoZXIuaCBjbGllbnRsb29wLmhdCiAgICAgW2NvbXBhdC5oIGNvbXByZXNzLmggY3JjMzIuYyBjcmMzMi5oIGRlYXR0YWNrLmggZGguaCBkaXNwYXRjaC5oXQogICAgIFtkbnMuYyBkbnMuaCBnZXRwdXQuaCBncm91cGFjY2Vzcy5oIGdzcy1nZW5yLmMgZ3NzLXNlcnYta3JiNS5jXQogICAgIFtnc3Mtc2Vydi5jIGhvc3RmaWxlLmggaW5jbHVkZXMuaCBrZXguaCBrZXkuaCBsb2cuaCBtYWMuaCBtYXRjaC5oXQogICAgIFttaXNjLmggbW9uaXRvci5oIG1vbml0b3JfZmRwYXNzLmggbW9uaXRvcl9tbS5oIG1vbml0b3Jfd3JhcC5oIG1zZy5oXQogICAgIFtteXByb3Bvc2FsLmggcGFja2V0LmggcGF0aG5hbWVzLmggcHJvZ3Jlc3NtZXRlci5oIHJlYWRjb25mLmggcnNhLmhdCiAgICAgW3NjYXJkLmggc2VydmNvbmYuaCBzZXJ2ZXJsb29wLmggc2Vzc2lvbi5oIHNmdHAtY29tbW9uLmggc2Z0cC5oXQogICAgIFtzc2gtZ3NzLmggc3NoLmggc3NoMS5oIHNzaDIuaCBzc2hjb25uZWN0Lmggc3NobG9naW4uaCBzc2hwdHkuaF0KICAgICBbdHR5bW9kZXMuaCB1aWRzd2FwLmggdXVlbmNvZGUuaCB4bWFsbG9jLmhdCiAgICAgc3RhbmRhcmRpc2Ugc3BhY2luZyBpbiAkT3BlbkJTRCQgdGFnczsgcmVxdWVzdGVkIGJ5IGRlcmFhZHRACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNiAwMTozMTo0OAogICAgIFt1dWVuY29kZS5jXQogICAgIHR5cG8KCjIwMDYwMzI1CiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTYgMDQ6MjQ6NDIKICAgICBbc3NoLjFdCiAgICAgQWRkIFJGQzQ0MTkgKERpZmZpZS1IZWxsbWFuIGdyb3VwIGV4Y2hhbmdlIEtFWCkgdG8gdGhlIGxpc3Qgb2YgU1NIIFJGQ3MKICAgICB0aGF0IE9wZW5TU0ggc3VwcG9ydHMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjUxOjE4CiAgICAgW2F0b21pY2lvLmMgYXV0aC1ic2RhdXRoLmMgYXV0aC1jaGFsbC5jIGF1dGgta3JiNS5jIGF1dGgtb3B0aW9ucy5jXQogICAgIFthdXRoLXBhbS5jIGF1dGgtcGFzc3dkLmMgYXV0aC1yaC1yc2EuYyBhdXRoLXJob3N0cy5jIGF1dGgtcnNhLmNdCiAgICAgW2F1dGgtc2hhZG93LmMgYXV0aC1za2V5LmMgYXV0aC5jIGF1dGgxLmMgYXV0aDItY2hhbGwuY10KICAgICBbYXV0aDItaG9zdGJhc2VkLmMgYXV0aDIta2JkaW50LmMgYXV0aDItbm9uZS5jIGF1dGgyLXBhc3N3ZC5jXQogICAgIFthdXRoMi1wdWJrZXkuYyBhdXRoMi5jIGF1dGhmZC5jIGF1dGhmaWxlLmMgYnVmYXV4LmMgYnVmZmVyLmNdCiAgICAgW2Nhbm9ob3N0LmMgY2hhbm5lbHMuYyBjaXBoZXItM2RlczEuYyBjaXBoZXItYWNzcy5jIGNpcGhlci1hZXMuY10KICAgICBbY2lwaGVyLWJmMS5jIGNpcGhlci1jdHIuYyBjaXBoZXIuYyBjbGVhbnVwLmMgY2xpZW50bG9vcC5jIGNvbXBhdC5jXQogICAgIFtjb21wcmVzcy5jIGRlYXR0YWNrLmMgZGguYyBkaXNwYXRjaC5jIGRucy5jIGVudHJvcHkuYyBmYXRhbC5jXQogICAgIFtncm91cGFjY2Vzcy5jIGhvc3RmaWxlLmMgaW5jbHVkZXMuaCBrZXguYyBrZXhkaC5jIGtleGRoYy5jXQogICAgIFtrZXhkaHMuYyBrZXhnZXguYyBrZXhnZXhjLmMga2V4Z2V4cy5jIGtleS5jIGxvZy5jIGxvZ2lucmVjLmNdCiAgICAgW2xvZ2lucmVjLmggbG9naW50ZXN0LmMgbWFjLmMgbWF0Y2guYyBtZC1zaGEyNTYuYyBtZDVjcnlwdC5jIG1pc2MuY10KICAgICBbbW9uaXRvci5jIG1vbml0b3JfZmRwYXNzLmMgbW9uaXRvcl9tbS5jIG1vbml0b3Jfd3JhcC5jIG1zZy5jXQogICAgIFtuY2hhbi5jIHBhY2tldC5jIHByb2dyZXNzbWV0ZXIuYyByZWFkY29uZi5jIHJlYWRwYXNzLmMgcnNhLmNdCiAgICAgW3NjYXJkLmMgc2NwLmMgc2VydmNvbmYuYyBzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jIHNmdHAtY2xpZW50LmNdCiAgICAgW3NmdHAtY29tbW9uLmMgc2Z0cC1nbG9iLmMgc2Z0cC1zZXJ2ZXIuYyBzZnRwLmMgc3NoLWFkZC5jXQogICAgIFtzc2gtYWdlbnQuYyBzc2gtZHNzLmMgc3NoLWtleWdlbi5jIHNzaC1rZXlzY2FuLmMgc3NoLWtleXNpZ24uY10KICAgICBbc3NoLXJhbmQtaGVscGVyLmMgc3NoLXJzYS5jIHNzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0MS5jXQogICAgIFtzc2hjb25uZWN0Mi5jIHNzaGQuYyBzc2hsb2dpbi5jIHNzaHB0eS5jIHNzaHR0eS5jIHR0eW1vZGVzLmNdCiAgICAgW3VpZHN3YXAuYyB1dWVuY29kZS5jIHhtYWxsb2MuYyBvcGVuYnNkLWNvbXBhdC9ic2QtYXJjNHJhbmRvbS5jXQogICAgIFtvcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmMgb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmNdCiAgICAgW29wZW5ic2QtY29tcGF0L2JzZC1nZXRwZWVyZWlkLmMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuY10KICAgICBbb3BlbmJzZC1jb21wYXQvYnNkLW5leHRzdGVwLmMgb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmNdCiAgICAgW29wZW5ic2QtY29tcGF0L2JzZC13YWl0cGlkLmMgb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmNdCiAgICAgUkNTSUQoKSBjYW4gZGllCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1MzoxMgogICAgIFtrZXguaCBteXByb3Bvc2FsLmhdCiAgICAgc3BhY2luZwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAwNDowNzoyMgogICAgIFthdXRoMi1nc3MuY10KICAgICBHU1NBUEkgcmVsYXRlZCBsZWFrcyBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIHJldmlld2VkIGJ5IHNpbW9uIEFUIHN4dy5vcmcudWs7IGRlcmFhZHRAIG9rCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDA0OjA3OjQ5CiAgICAgW2dzcy1nZW5yLmNdCiAgICAgbW9yZSBHU1NBUEkgcmVsYXRlZCBsZWFrcyBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIHJldmlld2VkIGJ5IHNpbW9uIEFUIHN4dy5vcmcudWs7IGRlcmFhZHRAIG9rCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDA0OjA4OjE4CiAgICAgW2dzcy1zZXJ2LmNdCiAgICAgbGFzdCBsb3Qgb2YgR1NTQVBJIHJlbGF0ZWQgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhCiAgICAgZWxhZCBBVCBuZXRic2Qub3JnOyByZXZpZXdlZCBieSBzaW1vbiBBVCBzeHcub3JnLnVrOyBkZXJhYWR0QCBvawogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6MTQ6MDIKICAgICBbbW9uaXRvcl93cmFwLmggc3NocHR5LmhdCiAgICAgc3ByaW5rbGUgdV9pbnQgdGhyb3VnaG91dCBwdHkgc3Vic3lzdGVtLCBvayBtYXJrdXMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjI2OjU1CiAgICAgW3Nlc3Npb24uaF0KICAgICBhbm5veWluZyBzcGFjaW5nIGZpeGVzIGdldHRpbmcgaW4gdGhlIHdheSBvZiByZWFsIGRpZmZzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODo0MTo0MwogICAgIFtkbnMuY10KICAgICBjYXN0IHhzdHJkdXAgdG8gcHJvcGVydCB1X2NoYXIgKgogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIyIDIxOjE2OjI0CiAgICAgW3NzaC4xXQogICAgIHNpbXBsaWZ5IFNTSEZQIGV4YW1wbGU7IG9rIGptY0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjIgMjE6Mjc6MTUKICAgICBbZGVhdHRhY2suYyBkZWF0dGFjay5oXQogICAgIHJlbW92ZSBJViBzdXBwb3J0IGZyb20gdGhlIENSQyBhdHRhY2sgZGV0ZWN0b3IsIE9wZW5TU0ggaGFzIG5ldmVyIHVzZWQKICAgICBpdCAtIGl0IG9ubHkgYXBwbGllZCB0byBJREVBLUNGQiwgd2hpY2ggd2UgZG9uJ3Qgc3VwcG9ydC4KICAgICBwcm9tcHRlZCBieSBOZXRCU0QgQ292ZXJpdHkgcmVwb3J0IHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7CiAgICAgZmVlZGJhY2sgbWFya3VzQCAibnVrZSBpdCIgZGVyYWFkdEAKCjIwMDYwMzE4CiAtIChkam0pIFthdXRoLXBhbS5jXSBGaXggbWVtbGVhayBpbiBlcnJvciBwYXRoLCBmcm9tIENvdmVyaXR5IHZpYQogICBlbGFkIEFUIE5ldEJTRC5vcmcKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2Qtc25wcmludGYuY10gQnVnICMxMTczOiBtYWtlIGZtdGludCgpIHRha2UKICAgYSBMTE9ORyByYXRoZXIgdGhhbiBhIGxvbmcuICBGaXhlcyBzY3AnaW5nIG9mIGxhcmdlIGZpbGVzIG9uIHBsYXRmb3JtcwogICB3aXRoIG1pc3NpbmcvYnJva2VuIHNucHJpbnRmcy4gIFBhdGNoIGZyb20gZS5ib3JvdmFjIGF0IGJvbS5nb3YuYXUuCgoyMDA2MDMxNgogLSAoZHR1Y2tlcikgW2VudHJvcHkuY10gQWRkIGhlYWRlcnMgZm9yIFdJRkVYSVRFRCBhbmQgZnJpZW5kcy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgbWQtc2hhMjU2LmNdIE5ldEJTRCBoYXMgc2hhMi5oIGluCiAgIC91c3IvaW5jbHVkZS9jcnlwdG8uICBIaW50IGZyb20gZGptQC4KIC0gKHRpbSkgW2tleC5jIG15cHJvcG9zYWwuaCBtZC1zaGEyNTYuYyBvcGVuYnNkLWNvbXBhdC9zaGEyLmMsaF0KICAgRGlzYWJsZSBzaGEyNTYgd2hlbiBvcGVuc3NsIDwgMC45LjcuIFBhdGNoIGZyb20gZGptQC4KIC0gKGRqbSkgW2tleC5jXSBTbGlnaHRseSBtb3JlIGNsZWFuIGRlYWN0aXZhdGlvbiBvZiBkaGdleC1zaGEyNTYgb24gb2xkCiAgIE9wZW5TU0w7IG9rIHRpbQoKMjAwNjAzMTUKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYzoKICAgLSBtc2ZAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDYgMTU6NTQ6MDcKICAgICBbc3NoLjFdCiAgICAgLSB0eXBvIGZpeAogICAgIG9rIGptY0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDYgMjE6NDQ6NDcKICAgICBbc3NoLjFdCiAgICAgbWFrZSB0aGlzIGEgbGl0dGxlIGxlc3MgYW1iaWd1b3VzLi4uCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNyAwMTowODowNAogICAgIFthdXRoLXJob3N0cy5jIGluY2x1ZGVzLmhdCiAgICAgbW92ZSAjaW5jbHVkZSA8bmV0Z3JvdXAuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA3IDAxOjE4OjA5CiAgICAgW2luY2x1ZGVzLmggc3NoLWFnZW50LmMgc3NoLWtleXNjYW4uYyBzc2hjb25uZWN0Mi5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDcgMDE6NDI6MDAKICAgICBbY2hhbm5lbHMuYyBjbGllbnRsb29wLmMgY2xpZW50bG9vcC5oIGluY2x1ZGVzLmggcGFja2V0LmhdCiAgICAgW3NlcnZlcmxvb3AuYyBzc2hwdHkuYyBzc2hwdHkuaCBzc2h0dHkuYyB0dHltb2Rlcy5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHRlcm1pb3MuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA3IDAxOjUyOjUwCiAgICAgW3NzaHR0eS5jXQogICAgICJsb2cuaCIgbm90IG5lZWRlZAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDcgMDM6NDc6MDUKICAgICBbaG9zdGZpbGUuY10KICAgICAicGFja2V0LmgiIG5vdCBuZWVkZWQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA3IDAzOjU5OjIwCiAgICAgW2RlYXR0YWNrLmNdCiAgICAgZHVwbGljYXRlICNpbmNsdWRlCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAxMjoxNToyNwogICAgIFthdXRoLmMgY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggbWlzYy5jIG1vbml0b3IuYyByZWFkcGFzcy5jXQogICAgIFtzZXNzaW9uLmMgc2Z0cC5jIHNzaC1hZ2VudC5jIHNzaC1rZXlzaWduLmMgc3NoLmMgc3NoY29ubmVjdC5jXQogICAgIFtzc2hkLmMgc3NocHR5LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8cGF0aHMuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA4IDEyOjMyOjQ5CiAgICAgW2luY2x1ZGVzLmggbWlzYy5jXQogICAgIG1vdmUgI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAxMzoxNTo0NAogICAgIFtnc3Mtc2Vydi5jIG1vbml0b3IuY10KICAgICBzbWFsbCBLTkYKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA4IDE0OjE2OjU5CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICA8b3BlbnNzbC9ibi5oPiBub3QgbmVlZGVkCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAxNDozMTozMAogICAgIFtpbmNsdWRlcy5oIHNzaC1hZ2VudC5jIHNzaC1rZXlzY2FuLmMgc3NoLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAxNDozODoxOAogICAgIFtpbmNsdWRlcy5oIHBhY2tldC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4gYW5kIDxuZXRpbmV0L2lwLmg+IG91dCBvZgogICAgIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA4IDIzOjUxOjI0CiAgICAgW2luY2x1ZGVzLmggc2NwLmMgc2Z0cC1nbG9iLmMgc2Z0cC1zZXJ2ZXIuY10KICAgICBtb3ZlICNpbmNsdWRlIDxkaXJlbnQuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA5IDAwOjMyOjA3CiAgICAgW2luY2x1ZGVzLmhdCiAgICAgI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4gbm90IG5lZWRlZDsgb2sgZGptQAogICAgIE5CLiBJRCBTeW5jIG9ubHkgLSB3ZSBzdGlsbCBuZWVkIHRoaXMgKGJ1dCBpdCBtYXkgbW92ZSBsYXRlcikKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDkgMTA6MTA6NDcKICAgICBbc3NoZC44XQogICAgIC0gbW92ZSBzb21lIHRleHQgaW50byBhIENBVkVBVFMgc2VjdGlvbgogICAgIC0gbWVyZ2UgdGhlIENPTU1BTkQgRVhFQ1VUSU9OLi4uIHNlY3Rpb24gaW50byBBVVRIRU5USUNBVElPTgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTAgMDA6Mjc6MTMKICAgICBbY2hhbm5lbHMuYyBjbGllbnRsb29wLmMgaW5jbHVkZXMuaCBtaXNjLmMgcHJvZ3Jlc3NtZXRlci5jIHNmdHAuY10KICAgICBbc3NoLmMgc3NoZC5jIHNzaHB0eS5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTAgMDE6NDQ6MjcKICAgICBbaW5jbHVkZXMuaCBtb25pdG9yLmMgcmVhZHBhc3MuYyBzY3AuYyBzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jf10KICAgICBbc2Z0cC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0Mi5jIHNzaGQuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvd2FpdC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIG90dG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTEgMTk6MzE6MTgKICAgICBbYXRvbWljaW8uY10KICAgICB0eXBlIGNvcnJlY3RuZXNzOyBmcm9tIFJheSBMYWkgaW4gUFIgNTAxMTsgb2sgbWlsbGVydEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTIgMDY6NDU6MzQKICAgICBbc3NoLmMgc3NoX2NvbmZpZy41XQogICAgIGFkZCBhICVsIGV4cGFuc2lvbiBjb2RlIHRvIHRoZSBDb250cm9sUGF0aCwgd2hpY2ggaXMgZmlsbGVkIGluIHdpdGggdGhlCiAgICAgbG9jYWwgaG9zdG5hbWUgYXQgcnVudGltZS4gUmVxdWVzdGVkIGJ5IGhlbm5pbmdAIHRvIGF2b2lkIHNvbWUgcHJvYmxlbXMKICAgICB3aXRoIC9ob21lIG9uIE5GUzsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTIgMTA6NDQ6MTgKICAgICBbcmVhZGNvbmYuY10KICAgICByYWlzZSBlcnJvciB3aGVuIHRoZSB1c2VyIHNwZWNpZmllcyBhIFJla2V5TGltaXQgdGhhdCBpcyBzbWFsbGVyIHRoYW4gMTYKICAgICAodGhlIHNtYWxsZXN0IG9mIG91ciBjaXBoZXIncyBibG9ja3NpemUpIG9yIGJpZyBlbm91Z2ggdG8gY2F1c2UgaW50ZWdlcgogICAgIHdyYXBhcm91bmQ7IG9rICYgZmVlZGJhY2sgZHR1Y2tlckAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTIgMTA6NDk6NDQKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHNsaWdodCByZXdvcmRpbmc7IG9rIGRqbQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMiAxMDo1Mjo0MQogICAgIFtzc2hkLjhdCiAgICAgcmV3b3JrIHRoZSBkZXNjcmlwdGlvbiBvZiBhdXRob3JpemVkX2tleXMgYSBsaXR0bGU7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEyIDE3OjU3OjE5CiAgICAgW3NzaGQuOF0KICAgICBzb3J0IHRoZSBsaXN0IG9mIG9wdGlvbnMgcGVybWlzc2FibGUgdy8gYXV0aG9yaXplZF9rZXlzOwogICAgIG9rIGRqbSBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEzIDEwOjE2OjM5CiAgICAgW3NzaGQuOF0KICAgICBubyBuZWVkIHRvIHN1YnNlY3Rpb24gdGhlIGF1dGhvcml6ZWRfa2V5cyBleGFtcGxlcyAtIGluc3RlYWQsIGNvbnZlcnQKICAgICB0aGlzIHRvIGxvb2sgbGlrZSBhbiBhY3R1YWwgZmlsZS4gYWxzbyB1c2UgcHJvdG8gMiBrZXlzLCBhbmQgdXNlIElFVEYKICAgICBleGFtcGxlIGFkZHJlc3NlczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTMgMTA6MjE6MjUKICAgICBbc3NoZC44XQogICAgIHNtYWxsIHR3ZWFrcyBmb3IgdGhlIHNzaF9rbm93bl9ob3N0cyBzZWN0aW9uOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMyAxMTowMjoyNgogICAgIFtzc2hkLjhdCiAgICAgdHVybiB0aGlzIGludG8gYW4gZXhhbXBsZSBzc2hfa25vd25faG9zdHMgZmlsZTsgb2sgZGptCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEzIDExOjA4OjQzCiAgICAgW3NzaGQuOF0KICAgICAtIGF2b2lkIG5hc3R5IGxpbmUgc3BsaXQKICAgICAtIGAqJyBkb2VzIG5vdCBuZWVkIHRvIGJlIGVzY2FwZWQKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTMgMTE6Mjc6MjUKICAgICBbc3NoZC44XQogICAgIHNvcnQgRklMRVMgYW5kIHVzZSBhIC1jb21wYWN0IGxpc3Q7CiAgIC0gZGF2aWRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTUgMDU6MDg6MjQKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICB0eXBvIGluIGNvbW1lbnQ7IG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTUgMTY6NTM6MjAKICAgICBbc3NoLjFdCiAgICAgcmVtb3ZlIHRoZSBJRVRGIGRyYWZ0IHJlZmVyZW5jZXMgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHNvbWUgdXBkYXRlZCBSRkNzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xNSAxNjo1NTozMwogICAgIFtzc2hkLjhdCiAgICAgcmVtb3ZlIGlldGYgZHJhZnQgcmVmZXJlbmNlczsgUkZDIGxpc3Qgbm93IG1haW50YWluZWQgaW4gc3NoLjE7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE2IDA5OjA1OjM0CiAgICAgW3NzaGQuOF0KICAgICBzeW5jIHNvbWUgb2YgdGhlIEZJTEVTIGVudHJpZXMgdy8gc3NoLjE7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE5IDE5OjUyOjEwCiAgICAgW3NzaGQuOF0KICAgICBtb3ZlIHRoZSBzc2hyYyBzdHVmZiBvdXQgb2YgRklMRVMsIGFuZCBpbnRvIGl0cyBvd24gc2VjdGlvbjoKICAgICBGSUxFUyBpcyBub3QgYSBnb29kIHBsYWNlIHRvIGRvY3VtZW50IGhvdyBzdHVmZiB3b3JrczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTkgMjA6MDI6MTcKICAgICBbc3NoZC44XQogICAgIHN5bmMgdGhlIChzKWhvc3RzLmVxdWl2IEZJTEVTIGVudHJpZXMgdy8gdGhvc2UgZnJvbSBzc2guMTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTkgMjA6MDU6MDAKICAgICBbc3NoZC44XQogICAgIGdyYW1tYXI7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE5IDIwOjEyOjI1CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBhZGQgc29tZSB2ZXJ0aWNhbCBzcGFjZTsKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzIwIDE2OjM2OjE1CiAgICAgW2F1dGhmZC5jIGNoYW5uZWxzLmMgaW5jbHVkZXMuaCBzZXNzaW9uLmMgc3NoLWFnZW50LmMgc3NoLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3VuLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yMCAxNzowMjo0NAogICAgIFtjbGllbnRsb29wLmMgaW5jbHVkZXMuaCBtb25pdG9yLmMgcHJvZ3Jlc3NtZXRlci5jIHNjcC5jXQogICAgIFtzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jIHNmdHAuYyBzc2gtYWdlbnQuYyBzc2guYyBzc2hkLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c2lnbmFsLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yMCAxNzoxOTo1NAogICAgIFthdXRoLXJob3N0cy5jIGF1dGgtcnNhLmMgYXV0aC5jIGF1dGgyLW5vbmUuYyBhdXRoMi1wdWJrZXkuY10KICAgICBbYXV0aGZpbGUuYyBjbGllbnRsb29wLmMgaW5jbHVkZXMuaCByZWFkY29uZi5jIHNjcC5jIHNlc3Npb24uY10KICAgICBbc2Z0cC1jbGllbnQuYyBzZnRwLWNvbW1vbi5jIHNmdHAtY29tbW9uLmggc2Z0cC1nbG9iLmNdCiAgICAgW3NmdHAtc2VydmVyLmMgc2Z0cC5jIHNzaC1hZGQuYyBzc2gta2V5Z2VuLmMgc3NoLmMgc3NoY29ubmVjdC5jXQogICAgIFtzc2hjb25uZWN0Mi5jIHNzaGQuYyBzc2hwdHkuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvc3RhdC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjIgMDA6MDQ6NDUKICAgICBbY2Fub2hvc3QuYyBjbGllbnRsb29wLmMgaW5jbHVkZXMuaCBtYXRjaC5jIHJlYWRjb25mLmMgc2NwLmMgc3NoLmNdCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBtb3ZlICNpbmNsdWRlIDxjdHlwZS5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAxMDoyNToxNAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgYWRkIHNlY3Rpb24gb24gcGF0dGVybnM7CiAgICAgZnJvbSBkdHVja2VyICsgbXlzZWxmCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDEwOjMzOjU0CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgc2lnbnBvc3QgdG8gUEFUVEVSTlM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDEwOjM3OjA3CiAgICAgW3NzaF9jb25maWcuNV0KICAgICB0aWR5IHVwIHRoZSByZWZzIHRvIFBBVFRFUk5TOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAxMDozOTo1MgogICAgIFtzc2hkLjhdCiAgICAgc2lnbnBvc3QgdG8gUEFUVEVSTlMgc2VjdGlvbjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMjA6MjI6MTYKICAgICBbc3NoLWtleXNpZ24uOCBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBzb21lIGNvbnNpc3RlbmN5IGZpeGVzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAyMDozMTozMQogICAgIFtzc2guMSBzc2hfY29uZmlnLjUgc3NoZC44IHNzaGRfY29uZmlnLjVdCiAgICAgbW9yZSBjb25zaXN0ZW5jeSBmaXhlczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMjM6MjA6MDcKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHNvbWUgZ3JhbW1hci93b3JkaW5nIGZpeGVzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAyMzo0Mzo1NwogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHNvbWUgZ3JhbW1hci93b3JkaW5nIGZpeGVzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAyMzo1MToxNwogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIG9vcHMgLSBiaXRzIGkgbWlzc2VkOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNSAxMjoyNjoxNwogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgZG9jdW1lbnQgdGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgS2JkSW50ZXJhY3RpdmVEZXZpY2VzOwogICAgIGhlbHAvb2sgZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNSAxMjoyODozNAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIGRvY3VtZW50IHRoZSBvcmRlciBpbiB3aGljaCBhbGxvdy9kZW55IGRpcmVjdGl2ZXMgYXJlIHByb2Nlc3NlZDsKICAgICBoZWxwL29rIGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjYgMTc6MTc6MTgKICAgICBbc3NoX2NvbmZpZy41XQogICAgIG1vdmUgUEFUVEVSTlMgdG8gdGhlIGVuZCBvZiB0aGUgbWFpbiBib2R5OyByZXF1ZXN0ZWQgYnkgZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNiAxODowMToxMwogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHN1YnNlY3Rpb24gaXMgcG9pbnRsZXNzIGhlcmU7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI2IDE4OjAzOjEwCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBjb21tYTsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjggMDE6MTA6MjEKICAgICBbc2Vzc2lvbi5jXQogICAgIGZpeCBsb2dvdXQgcmVjb3JkaW5nIHdoZW4gcHJpdmlsZWdlIHNlcGFyYXRpb24gaXMgZGlzYWJsZWQsIGFuYWx5c2lzIGFuZAogICAgIHBhdGNoIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0LmNvbTsgdGVzdGVkIGJ5IGR0dWNrZXJAIG9rIGRlcmFhZHRACiAgICAgTkIuIElEIHN5bmMgb25seSAtIHBhdGNoIGFscmVhZHkgaW4gcG9ydGFibGUKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMDQgMDQ6MTI6NTgKICAgICBbc2VydmVybG9vcC5jXQogICAgIG1vdmUgYSBkZWJ1ZygpIG91dHNpZGUgb2YgYSBzaWduYWwgaGFuZGxlcjsgb2sgbWFya3VzQCBhIGxpdHRsZSB3aGlsZSBiYWNrCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzEyIDA0OjIzOjA3CiAgICAgW3NzaC5jXQogICAgIGtuZiBuaXQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTMgMDg6MTY6MDAKICAgICBbc3NoZC5jXQogICAgIGRvbid0IGxvZyB0aGF0IHdlIGFyZSBsaXN0ZW5pbmcgb24gYSBzb2NrZXQgYmVmb3JlIHRoZSBsaXN0ZW4oKSBjYWxsCiAgICAgYWN0dWFsbHkgc3VjY2VlZHMsIGJ6ICMxMTYyIHJlcG9ydGVkIGJ5IFNlbnRoaWwgS3VtYXI7IG9rIGR0dWNrZXJACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xMyAwODozMzowMAogICAgIFtwYWNrZXQuY10KICAgICBTZXQgVENQX05PREVMQVkgZm9yIGFsbCBjb25uZWN0aW9ucyBub3QganVzdCAiaW50ZXJhY3RpdmUiIG9uZXMuICBGaXhlcwogICAgIHBvb3IgcGVyZm9ybWFuY2UgYW5kIHByb3RvY29sIHN0YWxscyB1bmRlciBzb21lIG5ldHdvcmsgY29uZGl0aW9ucyAobWluZHJvdAogICAgIGJ1Z3MgIzU1NiBhbmQgIzk4MSkuIFBhdGNoIG9yaWdpbmFsbHkgZnJvbSBtYXJrdXNALCBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xMyAwODo0MzoxNgogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgTWFrZSBzc2gta2V5Z2VuIGhhbmRsZSBDUiBhbmQgQ1JMRiBsaW5lIHRlcm1pbmF0aW9uIHdoZW4gY29udmVydGluZyBJRVRGCiAgICAgZm9ybWF0IGtleXMsIGluIGFkaXRpb24gdG8gdmFuaWxsYSBMRi4gIG1pbmRyb3QgIzExNTcsIHRlc3RlZCBieSBDaHJpcwogICAgIFBlcHBlciwgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTMgMTA6MTQ6MjkKICAgICBbbWlzYy5jIHNzaF9jb25maWcuNSBzc2hkX2NvbmZpZy41XQogICAgIEFsbG93IGNvbmZpZyBkaXJlY3RpdmVzIHRvIGNvbnRhaW4gd2hpdGVzcGFjZSBieSBzdXJyb3VuZGluZyB0aGVtIGJ5IGRvdWJsZQogICAgIHF1b3Rlcy4gIG1pbmRyb3QgIzQ4MiwgbWFuIHBhZ2UgaGVscCBmcm9tIGptY0AsIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzEzIDEwOjI2OjUyCiAgICAgW2F1dGhmaWxlLmMgYXV0aGZpbGUuaCBzc2gtYWRkLmNdCiAgICAgTWFrZSBzc2gtYWRkIGNoZWNrIGZpbGUgcGVybWlzc2lvbnMgYmVmb3JlIGF0dGVtcHRpbmcgdG8gbG9hZCBwcml2YXRlCiAgICAga2V5IGZpbGVzIG11bHRpcGxlIHRpbWVzOyBpdCB3aWxsIGZhaWwgYW55d2F5IGFuZCB0aGlzIHByZXZlbnRzIGNvbmZ1c2luZwogICAgIG11bHRpcGxlIHByb21wdHMgYW5kIHdhcm5pbmdzLiAgbWluZHJvdCAjMTEzOCwgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xNCAwMDoxNTozOQogICAgIFtjYW5vaG9zdC5jXQogICAgIGxvZyB0aGUgb3JpZ2luYXRpbmcgYWRkcmVzcyBhbmQgbm90IGp1c3QgdGhlIG5hbWUgd2hlbiBhIHJldmVyc2UKICAgICBtYXBwaW5nIGNoZWNrIGZhaWxzLCByZXF1ZXN0ZWQgYnkgbGludXggQVQgbGludW9uLmNvbQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xNCAxNjozMjo0OAogICAgIFtzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICAqQWxpdmVDb3VudE1heCBhcHBsaWVzIHRvIHByb3Rjb2wgdjIgb25seTsgb2sgZHR1Y2tlciwgZGptCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzA3IDA5OjA3OjQwCiAgICAgW2tleC5jIGtleC5oIG1vbml0b3IuYyBteXByb3Bvc2FsLmggc3NoLWtleXNjYW4uYyBzc2hjb25uZWN0Mi5jIHNzaGQuY10KICAgICBJbXBsZW1lbnQgdGhlIGRpZmZpZS1oZWxsbWFuLWdyb3VwLWV4Y2hhbmdlLXNoYTI1NiBrZXkgZXhjaGFuZ2UgbWV0aG9kCiAgICAgdXNpbmcgdGhlIFNIQTI1NiBjb2RlIGluIGxpYmMgKGFuZCB3cmFwcGVyIHRvIG1ha2UgaXQgaW50byBhbiBPcGVuU1NMCiAgICAgRVZQKSwgaW50ZXJvcCB0ZXN0ZWQgYWdhaW5zdCBDVlMgUHVUVFkKICAgICBOQi4gbm8gcG9ydGFiaWxpdHkgYml0cyBjb21taXR0ZWQgeWV0CiAtIChkam0pIFtjb25maWd1cmUuYWMgZGVmaW5lcy5oIGtleC5jIG1kLXNoYTI1Ni5jXQogICBbb3BlbmJzZC1jb21wYXQvc2hhMi5oIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdCiAgIFtvcGVuYnNkLWNvbXBhdC9zaGEyLmNdIEZpcnN0IHN0YWIgYXQgcG9ydGFiaWxpdHkgZ2x1ZSBmb3IgU0hBMjU2CiAgIEtFWCBzdXBwb3J0LCBzaG91bGQgd29yayB3aXRoIGxpYmMgU0hBMjU2IHN1cHBvcnQgb3IgT3BlblNTTAogICBFVlBfc2hhMjU2IGlmIHByZXNlbnQKIC0gKGRqbSkgW2luY2x1ZGVzLmhdIFJlc3RvcmUgYWNjaWRlbnRhbGx5IGRyb3BwZWQgbmV0aW5ldC9pbi5oCiAtIChkam0pIFtNYWtlZmlsZS5pbiBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbl0gQWRkIGFkZGVkIGZpbGVzCiAtIChkam0pIFttZC1zaGEyNTYuYyBjb25maWd1cmUuYWNdIG1kLXNoYTI1Ni5jIG5lZWRzIHNoYTIuaCBpZiBwcmVzZW50CiAtIChkam0pIFtyZWdyZXNzLy5jdnNpZ25vcmVdIElnbm9yZSBNYWtlZmlsZSBoZXJlCiAtIChkam0pIFtsb2dpbnJlYy5jXSBOZWVkIHN0YXQuaAogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvc2hhMi5oXSBBdm9pZCBpbmNsdWRlIG1hY3JvIGNsYXNoIHdpdGgKICAgc3lzdGVtIHNoYTIuaAogLSAoZGptKSBbc3NoLXJhbmQtaGVscGVyLmNdIE5lZWRzIGEgYnVuY2ggb2YgaGVhZGVycwogLSAoZGptKSBbc3NoLWFnZW50LmNdIFJlc3RvcmUgZHJvcHBlZCBzdGF0LmgKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3NoYTIuaCBvcGVuYnNkLWNvbXBhdC9zaGEyLmNdIENvbW1lbnQgb3V0IAogICBTSEEzODQsIHdoaWNoIHdlIGRvbid0IG5lZWQgYW5kIGRvZXNuJ3QgY29tcGlsZSB3aXRob3V0IHR3ZWFrcwogLSAoZGptKSBbYXV0aC1wYW0uYyBjbGllbnRsb29wLmMgaW5jbHVkZXMuaCBtb25pdG9yLmMgc2Vzc2lvbi5jXQogICBbc2Z0cC1jbGllbnQuYyBzc2gta2V5c2lnbi5jIHNzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0Mi5jXQogICBbc3NoZC5jIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmMgb3BlbmJzZC1jb21wYXQvYnNkLW9wZW5wdHkuY10KICAgW29wZW5ic2QtY29tcGF0L2dsb2IuYyBvcGVuYnNkLWNvbXBhdC9ta3RlbXAuY10KICAgW29wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmNdIExvdHMgb2YgaW5jbHVkZSBmaXhlcyBmb3IKICAgT3BlblNvbGFyaXMKIC0gKHRpbSkgW2luY2x1ZGVzLmhdIHB1dCBzeXMvc3RhdC5oIGJhY2sgaW4gdG8gcXVpZXQgc29tZSAibWFjcm8gcmVkZWZpbmVkOiIKIC0gKHRpbSkgW29wZW5zc2gvc3NocHR5LmMgb3BlbnNzaC9vcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jXSBwdXQgaW4gc29tZQogICBpbmNsdWRlcyByZW1vdmVkIGZyb20gaW5jbHVkZXMuaAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRml4IGdsb2IgdGVzdCBjb252ZXJzaW9uIHRvIEFDX1RSWV9DT01QSUxFCiAtIChkam0pIFtpbmNsdWRlcy5oXSBQdXQgYmFjayBwYXRocy5oLCBpdCBpcyBuZWVkZWQgaW4gZGVmaW5lcy5oCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0gQUlYIChhdCBsZWFzdCkgbmVlZHMKICAgc3lzL2lvY3RsLmggZm9yIHN0cnVjdCB3aW5zaXplLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gbG9naW5fY2FwLmggcmVxdWlyZXMgc3lzL3R5cGVzLmggb24gTmV0QlNELgoKMjAwNjAzMTMKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTE3MTogRG9uJ3QgdXNlIHByaW50ZigiJWxsZCIsIGxvbmdsb25nKQogICBzaW5jZSBub3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IGl0LiAgSW5zdGVhZCwgdXNlIGludGVybmFsIGVxdWl2YWxlbnQgd2hpbGUKICAgY29tcHV0aW5nIExMT05HX01JTiBhbmQgTExPTkdfTUFYLiAgUmVtb3ZlIHNwZWNpYWwgY2FzZSBmb3IgYWxwaGEtZGVjLW9zZioKICAgYXMgaXQncyBubyBsb25nZXIgcmVxdWlyZWQuICBUZXN0ZWQgYnkgQmVybmhhcmQgU2ltb24sIG9rIGRqbUAKCjIwMDYwMzA0CiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBSZXF1aXJlIHVzZSBvZiBsYXN0bG9nIGFzIGEKICAgZmlsZSByYXRoZXIgdGhhbiBkaXJlY3RvcnksIHJlcXVpcmVkIGFzIEN5Z3dpbiB3aWxsIGJlIGltcG9ydGluZyBsYXN0bG9nKDEpLgogICBBbHNvIHRpZ2h0ZW5zIHVwIHBlcm1pc3Npb25zIG9uIHRoZSBmaWxlLiAgUGF0Y2ggZnJvbSB2aW5zY2hlbkByZWRoYXQuY29tLgogLSAoZHR1Y2tlcikgW2dzcy1zZXJ2LWtyYjUuY10gQnVnICMxMTY2OiBDb3JyZWN0ICNpZmRlZnMgZm9yIGdzc2FwaV9rcmI1LmgKICAgaW5jbHVkZXMuICBQYXRjaCBmcm9tIGdlbnRvby5yaXZlcnJhdCBhdCBnbWFpbC5jb20uCgoyMDA2MDIyNgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTU2OiBRTlggYXBwYXJlbnRseSBuZWVkcyBTU0hEX0FDUVVJUkVTX0NUVFkKICAgcGF0Y2ggZnJvbSBrcmFhaSBhdCBmdGJmcy5vcmcuCgoyMDA2MDIyMwogLSAoZHR1Y2tlcikgW3NzaGRfY29uZmlnIHNzaGRfY29uZmlnLjVdIFVwZGF0ZSBVc2VQQU0gdG8gcmVmbGVjdCBjdXJyZW50CiAgIHJlYWxpdHkuICBQb2ludGVkIG91dCBieSB0cnlwb25yYWogYXQgZ21haWwuY29tLgoKMjAwNjAyMjIKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC57YyxofV0gTWlub3IgdGlkeSB1cDogb25seQogICBjb21waWxlIGluIGNvbXBhdCBjb2RlIGlmIHJlcXVpcmVkLgoKMjAwNjAyMjEKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5oXSBQcmV2ZW50IHdhcm5pbmcgYWJvdXQKICAgcmVkZWZpbml0aW9uIG9mIFNTTGVheV9hZGRfYWxsX2FsZ29yaXRobXMuCgoyMDA2MDIyMAogLSAoZHR1Y2tlcikgW0lOU1RBTEwgY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LntjLGh9XQogICBBZGQgb3B0aW9uYWwgZW5hYmxpbmcgb2YgT3BlblNTTCdzIChoYXJkd2FyZSkgRW5naW5lIHN1cHBvcnQsIHZpYQogICBjb25maWd1cmUgLS13aXRoLXNzbC1lbmdpbmUuICBCYXNlZCBpbiBwYXJ0IG9uIGEgZGlmZiBieSBtaWNoYWwgYXQKICAgbG9naXguY3ouCgoyMDA2MDIxOQogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluIGNvbmZpZ3VyZS5hYywgYWRkZWQgb3BlbmJzZC1jb21wYXQvcmVncmVzcy9dCiAgIEFkZCBmaXJzdCBhdHRlbXB0IGF0IHJlZ3Jlc3MgdGVzdHMgZm9yIGNvbXBhdCBsaWJyYXJ5LiAgb2sgZGptQAoKMjAwNjAyMTQKIC0gKHRpbSkgW2J1aWxkcGtnLnNoLmluXSBNYWtlIHRoZSBuYW1lcyBjb25zaXN0ZW50LgogICBzL3BrZ19wb3N0X21ha2VfaW5zdGFsbF9maXhlcy5zaC9wa2ctcG9zdC1tYWtlLWluc3RhbGwtZml4ZXMuc2gvIE9LIGR0dWNrZXJACgoyMDA2MDIxMgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5jXSBNYWtlIGxvb3AgY291bnRlciB1bnNpZ25lZAogICB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmcsIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTQ5LiBEaXNhYmxlIC9ldGMvZGVmYXVsdC9sb2dpbiBjaGVjayBmb3IgUU5YLgogLSAoZHR1Y2tlcikgW1JFQURNRSB2ZXJzaW9uLmggY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlYwogICBjb250cmliL3JlZGhhdC9vcGVuc3NoLnNwZWMgY29udHJpYi9zdXNlL29wZW5zc2guc3BlY10gQnVtcCB2ZXJzaW9uCiAgIHN0cmluZ3MgdG8gbWF0Y2ggNC4zcDIgcmVsZWFzZS4KCjIwMDYwMjA4CiAtICh0aW0pIFtzZXNzaW9uLmNdIExvZ291dCByZWNvcmRzIHdlcmUgbm90IHVwZGF0ZWQgb24gc3lzdGVtcyB3aXRoCiAgIHBvc3QgYXV0aCBwcml2c2VwIGRpc2FibGVkIGR1ZSB0byBidWcgMTA4NiBjaGFuZ2VzLiBBbmFseXNpcyBhbmQgcGF0Y2gKICAgYnkgdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4gT0sgdGltQCwgZHR1Y2tlckAuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBUeXBvIGluIFVsdHJpeCBhbmQgTmV3c09TIHNlY3Rpb25zIChORUVEX1NFVFBSR1AKICAgLT4gTkVFRF9TRVRQR1JQKSwgcmVwb3J0ZWQgYnkgQmVybmhhcmQgU2ltb24uICBvayB0aW1ACgoyMDA2MDIwNgogLSAodGltKSBbY29uZmlndXJlLmFjXSBSZW1vdmUgdW5uZWNlc3NhcnkgdGVzdHMgZm9yIG5ldC9pZi5oIGFuZCAKICAgbmV0aW5ldC9pbl9zeXN0bS5oLiBPSyBkdHVja2VyQC4KCjIwMDYwMjA1CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEFkZCBBQ19SRVZJU0lPTi4gQWRkIHN5cy90aW1lLmggdG8gbGFzdGxvZy5oIHRlc3QKICAgZm9yIFNvbGFyaXMuIE9LIGR0dWNrZXJALgogLSAodGltKSBbY29uZmlndXJlLmFjXSBCdWcgIzExNDkuIENoYW5nZXMgaW4gUU5YIHNlY3Rpb24gb25seS4gUGF0Y2ggYnkKICAga3JhYWkgYXQgZnRiZnMub3JnLgoKMjAwNjAyMDMKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gdGVzdCBmb3IgZWdyZXAgKEFDX1BST0dfRUdSRVApIGJlZm9yZSBmaXJzdAogICBBQ19DSEVDS19IRUFERVJTIHRlc3QuIFdpdGhvdXQgaXQsIGlmIEFDX0NIRUNLX0hFQURFUlMgaXMgZmlyc3QgcnVuCiAgIGJ5IGEgcGxhdGZvcm0gc3BlY2lmaWMgY2hlY2ssIGJ1aWx0aW4gc3RhbmRhcmQgaW5jbHVkZXMgdGVzdHMgd2lsbCBiZQogICBza2lwcGVkIG9uIHRoZSBvdGhlciBwbGF0Zm9ybXMuCiAgIEFuYWx5c2lzIGFuZCBzdWdnZXN0aW9uIGJ5IHZpbnNjaGVuIGF0IHJlZGhhdC5jb20sIHBhdGNoIGJ5IGR0dWNrZXJALgogICBPSyB0aW1ALCBkam1ALgoKMjAwNjAyMDIKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTE0ODogRml4ICJjcmlwcGxlZCBBRVMiIHRlc3Qgc28gdGhhdCBpdAogICB3b3JrcyB3aXRoIHBpY2t5IGNvbXBpbGVycy4gIFBhdGNoIGZyb20gYWxleC5raWVybmFuIGF0IHRodXMubmV0LgoKMjAwNjAyMDEKIC0gKGRqbSkgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXSBUcnkgJ2xvZ25hbWUnIGFzIHdlbGwgYXMgJ3dob2FtaScgdG8gCiAgIGRldGVybWluZSB0aGUgdXNlcidzIGxvZ2luIG5hbWUgLSBuZWVkZWQgZm9yIHJlZ3Jlc3MgdGVzdHMgb24gU29sYXJpcyAKICAgMTAgYW5kIE9wZW5Tb2xhcmlzCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDEgMDk6MDY6NTAKICAgICBbc3NoZC44XQogICAgIC0gbWVyZ2Ugc2VjdGlvbnMgb24gcHJvdG9jb2xzIDEgYW5kIDIgaW50byBhIHNpbmdsZSBzZWN0aW9uCiAgICAgLSByZW1vdmUgY29uZmlndXJhdGlvbiBmaWxlIHNlY3Rpb24KICAgICBvayBtYXJrdXMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDEgMDk6MTE6NDEKICAgICBbc3NoZC44XQogICAgIHNtYWxsIHR3ZWFrOwogLSAoZGptKSBbY29udHJpYi9jYWxkZXJhL29wZW5zc2guc3BlYyBjb250cmliL3JlZGhhdC9vcGVuc3NoLnNwZWNdCiAgIFtjb250cmliL3N1c2Uvb3BlbnNzaC5zcGVjXSBVcGRhdGUgdmVyc2lvbnMgYWhlYWQgb2YgcmVsZWFzZQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wMSAxMToyNzoyMgogICAgIFt2ZXJzaW9uLmhdCiAgICAgb3BlbnNzaCA0LjMKIC0gKGRqbSkgUmVsZWFzZSBPcGVuU1NIIDQuM3AxCgoyMDA2MDEzMQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzIwIDExOjIxOjQ1CiAgICAgW3NzaF9jb25maWcuNV0KICAgICAtIHdvcmQgY2hhbmdlLCBhZ3JlZWQgdy8gbWFya3VzCiAgICAgLSBjb25zaXN0ZW5jeSBmaXhlcwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8yNSAwOTowNDozNAogICAgIFtzc2hkLjhdCiAgICAgbW92ZSB0aGUgb3B0aW9ucyBkZXNjcmlwdGlvbiB1cCB0aGUgcGFnZSwgYW5kIGEgZmV3IGFkZGl0aW9uYWwgdHdlYWtzCiAgICAgd2hpbHN0IGluIGhlcmU7CiAgICAgb2sgbWFya3VzCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzI1IDA5OjA3OjIyCiAgICAgW3NzaGQuOF0KICAgICBtb3ZlIHN1YnNlY3Rpb25zIHRvIGZ1bGwgc2VjdGlvbnM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzI2IDA4OjQ3OjU2CiAgICAgW3NzaC4xXQogICAgIGFkZCBhIHNlY3Rpb24gb24gdmVyaWZ5aW5nIGhvc3Qga2V5cyBpbiBkbnM7CiAgICAgd3JpdHRlbiB3aXRoIGEgbG90IG9mIGhlbHAgZnJvbSBqYWtvYjsKICAgICBmZWVkYmFjayBkdHVja2VyL21hcmt1czsKICAgICBvayBtYXJrdXMKICAgLSByZXlrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMwIDEyOjIyOjIyCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgbWFyayBjaGFubmVsIGFzIHdyaXRlIGZhaWxlZCBvciBkZWFkIGluc3RlYWQgb2YgcmVhZCBmYWlsZWQgb24gZXJyb3IKICAgICBvZiB0aGUgY2hhbm5lbCBvdXRwdXQgZmlsdGVyLgogICAgIG9rIG1hcmt1c0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMzAgMTM6Mzc6NDkKICAgICBbc3NoLjFdCiAgICAgcmVtb3ZlIGFuIGluY29ycmVjdCBzZW50ZW5jZTsKICAgICByZXBvcnRlZCBieSByb3VtZW4gcGV0cm92OwogICAgIG9rIGRqbSBtYXJrdXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMzEgMTA6MTk6MDIKICAgICBbbWlzYy5jIG1pc2MuaCBzY3AuYyBzZnRwLmNdCiAgICAgZml4IGxvY2FsIGFyYml0cmFyeSBjb21tYW5kIGV4ZWN1dGlvbiB2dWxuZXJhYmlsaXR5IG9uIGxvY2FsL2xvY2FsIGFuZAogICAgIHJlbW90ZS9yZW1vdGUgY29waWVzIChDVkUtMjAwNi0wMjI1LCBieiAjMTA5NCksIHBhdGNoIGJ5CiAgICAgdDhtIEFUIGNlbnRydW0uY3osIHBvbGlzaGVkIGJ5IGR0dWNrZXJAIGFuZCBteXNlbGY7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMzEgMTA6MzU6NDMKICAgICBbc2NwLmNdCiAgICAgInNjcCBhIGIgYyIgc2hvdWxkbid0IGNsb2JiZXIgImMiIHdoZW4gaXQgaXMgbm90IGEgZGlyZWN0b3J5LCByZXBvcnQgYW5kCiAgICAgZml4IGZyb20gYmlvcm5AOyBvayBtYXJrdXNACiAtIChkam0pIFN5bmMgcmVncmVzcyB0ZXN0cyB0byBPcGVuQlNEOgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMTAgMTA6MjA6MzkKICAgICBbcmVncmVzcy9mb3J3YXJkaW5nLnNoXQogICAgIFJlZ3Jlc3MgdGVzdCBmb3IgQ2xlYXJBbGxGb3J3YXJkaW5ncyAoYnogIzk5NCk7IG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzI1IDA5OjU0OjA5CiAgICAgW3JlZ3Jlc3MvbXVsdGlwbGV4LnNoXQogICAgIERvbid0IGNhbGwgY2xlYW51cCBpbiBtdWx0aXBsZXggYXMgdGVzdC1leGVjIHdpbGwgY2xlYW51cCBhbnl3YXkKICAgICBmb3VuZCBieSB0aW1ALCBvayBkam1ACiAgICAgTkIuIElEIHN5bmMgb25seSwgd2UgYWxyZWFkeSBoYWQgdGhpcwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNS8yMCAyMzoxNDoxNQogICAgIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0KICAgICBmb3JjZSBhZGRyZXNzZmFtaWx5PWluZXQgZm9yIHRlc3RzLCB1bmJyZWFraW5nIGR5bmFtaWMtZm9yd2FyZCByZWdyZXNzIGZvcgogICAgIHJlY2VudGx5IGNvbW1pdHRlZCBuYyBTT0NLUzUgY2hhbmdlcwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNS8yNCAwNDoxMDo1NAogICAgIFtyZWdyZXNzL3RyeS1jaXBoZXJzLnNoXQogICAgIG9vcHMsIG5ldyBhcmNmb3VyIG1vZGVzIGhlcmUgdG9vCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzMwIDExOjAyOjM3CiAgICAgW3JlZ3Jlc3Mvc2NwLnNoXQogICAgIGFsbG93IFNVRE89c3VkbzsgZnJvbSBBbGV4YW5kZXIgQmx1aG0KICAgLSBncnVua0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8xNCAyMToyNTo1NgogICAgIFtyZWdyZXNzL2FnZW50LWdldHBlZXJlaWQuc2hdCiAgICAgYWxsIG90aGVyIHNjcmlwdHMgaW4gdGhpcyBkaXIgdXNlICRTVURPLCBub3QgJ3N1ZG8nLCBzbyBwdWxsIHRoaXMgZXZlbgogICAgIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzE0IDA0OjM2OjM5CiAgICAgW3JlZ3Jlc3Mvc2NwLXNzaC13cmFwcGVyLnNoXQogICAgIEZpeCBhc3N1bXB0aW9uIGFib3V0IGhvdyBtYW55IGFyZ3Mgc2NwIHdpbGwgcGFzczsgb2sgZGptQAogICAgIE5CLiBJRCBzeW5jIG9ubHksIHdlIGFscmVhZHkgaGFkIHRoaXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMjcgMDY6NDk6MjEKICAgICBbc2NwLnNoXQogICAgIHJlZ3Jlc3MgdGVzdCBmb3IgbG9jYWwgdG8gbG9jYWwgc2NwIGNvcGllczsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMzEgMTA6MjM6MjMKICAgICBbc2NwLnNoXQogICAgIHJlZ3Jlc3Npb24gdGVzdCBmb3IgQ1ZFLTIwMDYtMDIyNSB3cml0dGVuIGJ5IGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMxIDEwOjM2OjMzCiAgICAgW3NjcC5zaF0KICAgICByZWdyZXNzIHRlc3QgZm9yICJzY3AgYSBiIGMiIHdoZXJlICJjIiBpcyBub3QgYSBkaXJlY3RvcnkKCjIwMDYwMTI5CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5zc2hkLmluaXQuaW5dIEJ1ZyAjMTE0NDogVXNlIC9iaW4vc2ggZm9yIHRoZQogICBvcGVuc3NoZC5pbml0IHNjcmlwdCBpbnRlcnByZXR0ZXIgaWYgL3NiaW4vc2ggZG9lcyBub3QgZXhpc3QuICBvayB0aW1ACgoyMDA2MDEyMAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xNSAxNzozNzowNQogICAgIFtzc2guMV0KICAgICBjb3JyZWN0aW9uIGZyb20gZGVyYWFkdAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xOCAxMDo1MzoyOQogICAgIFtzc2guMV0KICAgICBhZGQgYSBzZWN0aW9uIG9uIHNzaC1iYXNlZCB2cG4sIGJhc2VkIG9uIHJleWsncyBSRUFETUUudHVuOwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMjAgMDA6MTQ6NTUKICAgICBbc2NwLjEgc3NoLjEgc3NoX2NvbmZpZy41IHNmdHAuMV0KICAgICBEb2N1bWVudCBSZWtleUxpbWl0LiAgQmFzZWQgb24gcGF0Y2ggZnJvbSBqYW4uaXZlbiBhdCBjZXJuLmNoIGZyb20gbWluZHJvdAogICAgICMxMDU2IHdpdGggZmVlZGJhY2sgZnJvbSBqbWMsIGRqbSBhbmQgbWFya3VzOyBvayBqbWNAIGRqbUAKCjIwMDYwMTE0CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDYgMTM6Mjc6MzIKICAgICBbc3NoLjFdCiAgICAgd2VlZCBvdXQgc29tZSBkdXBsaWNhdGUgaW5mbyBpbiB0aGUga25vd25faG9zdHMgRklMRVMgZW50cmllczsKICAgICBvayBkam0KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDYgMTM6Mjk6MTAKICAgICBbc3NoLjFdCiAgICAgZmluYWwgcm91bmQgb2Ygd2hhY2tpbmcgRklMRVMgZm9yIGR1cGxpY2F0ZSBpbmZvLCBhbmQgc29tZSBjb25zaXN0ZW5jeQogICAgIGZpeGVzOwogICAgIG9rIGRqbQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xMiAxNDo0NDoxMgogICAgIFtzc2guMV0KICAgICBzcGxpdCBzZWN0aW9ucyBvbiB0Y3AgYW5kIHgxMSBmb3J3YXJkaW5nIGludG8gdHdvIHNlY3Rpb25zLgogICAgIGFkZCBhbiBleGFtcGxlIGluIHRoZSB0Y3Agc2VjdGlvbiwgYmFzZWQgb24gc3RoIGkgd3JvdGUgZm9yIHNzaCBmYXE7CiAgICAgaGVscCArIG9rOiBkam0gbWFya3VzIGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTIgMTg6NDg6NDgKICAgICBbc3NoLjFdCiAgICAgcmVmZXIgdG8gYFRDUCcgcmF0aGVyIHRoYW4gYFRDUC9JUCcgaW4gdGhlIGNvbnRleHQgb2YgY29ubmVjdGlvbgogICAgIGZvcndhcmRpbmc7CiAgICAgb2sgbWFya3VzCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzEyIDIyOjIwOjAwCiAgICAgW3NzaGQuOF0KICAgICByZWZlciB0byBUQ1AgZm9yd2FyZGluZywgcmF0aGVyIHRoYW4gVENQL0lQIGZvcndhcmRpbmc7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzEyIDIyOjI2OjAyCiAgICAgW3NzaF9jb25maWcuNV0KICAgICByZWZlciB0byBUQ1AgZm9yd2FyZGluZywgcmF0aGVyIHRoYW4gVENQL0lQIGZvcndhcmRpbmc7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzEyIDIyOjM0OjEyCiAgICAgW3NzaC4xXQogICAgIGJhY2sgb3V0IGEgc2VudGVuY2UgLSBBVVRIRU5USUNBVElPTiBhbHJlYWR5IGRvY3VtZW50cyB0aGlzOwoKMjAwNjAxMDkKIC0gKGR0dWNrZXIpIFtjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddIE1ha2Ugc3NoZCBzZXJ2aWNlIGRlcGVuZCBvbgogICB0Y3BpcCBzZXJ2aWNlIHNvIGl0J3MgYWx3YXlzIHN0YXJ0ZWQgYWZ0ZXIgSVAgaXMgdXAuICBQYXRjaCBmcm9tCiAgIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCgoyMDA2MDEwNgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAzIDE2OjMxOjEwCiAgICAgW3NzaC4xXQogICAgIG1vdmUgRklMRVMgdG8gYSAtY29tcGFjdCBsaXN0LCBhbmQgbWFrZSBlYWNoIGZpbGVzIGFuIGl0ZW0gaW4gdGhhdCBsaXN0LgogICAgIHRoaXMgYXZvaWRzIG5hc3RseSBsaW5lIHdyYXAgd2hlbiB3ZSBoYXZlIGxvbmcgcGF0aG5hbWVzLCBhbmQgdHJlYXRzCiAgICAgZWFjaCBmaWxlIGFzIGEgc2VwYXJhdGUgaXRlbTsKICAgICByZW1vdmUgdGhlIC5QYSB0b28sIHNpbmNlIGl0IGlzIHVzZWxlc3MuCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAzIDE2OjM1OjMwCiAgICAgW3NzaC4xXQogICAgIHVzZSBhIGxhcmdlciB3aWR0aCBmb3IgdGhlIEVOVklST05NRU5UIGxpc3Q7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAzIDE2OjUyOjM2CiAgICAgW3NzaC4xXQogICAgIHB1dCBGSUxFUyBpbiBzb21lIHNvcnQgb2Ygb3JkZXI6IHNvcnQgYnkgcGF0aG5hbWUKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDMgMTY6NTU6MTgKICAgICBbc3NoLjFdCiAgICAgdHdlYWsgdGhlIGRlc2NyaXB0aW9uIG9mIH4vLnNzaC9lbnZpcm9ubWVudAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wNCAxODo0Mjo0NgogICAgIFtzc2guMV0KICAgICBjaG9wIG91dCBzb21lIGR1cGxpY2F0aW9uIGluIHRoZSAue3Isc31ob3N0cy97aCxzaH1vc3RzLmVxdWl2IEZJTEVTCiAgICAgZW50cmllczsKICAgICBvayBtYXJrdXMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDQgMTg6NDU6MDEKICAgICBbc3NoLjFdCiAgICAgcmVtb3ZlIC5YcidzIHRvIHJzaCgxKSBhbmQgdGVsbmV0KDEpOiB0aGV5IGFyZSBoYXJkbHkgbmVlZGVkOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wNCAxOTo0MDoyNAogICAgIFtzc2guMV0KICAgICArLlhyIHNzaC1rZXlzY2FuIDEgLAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wNCAxOTo1MDowOQogICAgIFtzc2guMV0KICAgICAtLlhyIGd6aXAgMSAsCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA1IDIzOjQzOjUzCiAgICAgW21pc2MuY10KICAgICBjaGVjayB0aGF0IHN0ZGlvIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGFjdHVhbGx5IGNsb3NlZCBiZWZvcmUgY2xvYmJlcmluZwogICAgIHRoZW0gaW4gc2FuaXRpc2Vfc3RkZmQoKS4gcHJvYmxlbXMgb2NjdXJyZWQgd2hlbiBhIGxvd2VyIG51bWJlcmVkIGZkIHdhcwogICAgIGNsb3NlZCwgYnV0IGhpZ2hlciBvbmVzIHdlcmVuJ3QuIHNwb3R0ZWQgYnksIGFuZCBwYXRjaCB0ZXN0ZWQgYnkKICAgICBGculk6XJpYyBPbGl2aekKCjIwMDYwMTAzCiAtIChkam0pIFtjaGFubmVscy5jXSBjbGVhbiB1cCBoYXJtbGVzcyBtZXJnZSBlcnJvciwgZnJvbSByZXlrQAoKMjAwNjAxMDMKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMiAxNzowOTo0OQogICAgIFtzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBzb21lIGNvcnJlY3Rpb25zIGZyb20gbWljaGFlbCBrbnVkc2VuOwoKMjAwNjAxMDIKIC0gKGRqbSkgW1JFQURNRS50dW5dIEFkZCBSRUFETUUudHVuLCBtaXNzZWQgZHVyaW5nIHN5bmMgb2YgdHVuKDQpIHN1cHBvcnQKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMSAxMDo0NjoxNwogICAgIFtzc2guMV0KICAgICBtZXJnZSB0aGUgIkxPR0lOIFNFU1NJT04gQU5EIFJFTU9URSBFWEVDVVRJT04iIGFuZCAiU0VSVkVSCiAgICAgQVVUSEVOVElDQVRJT04iIHNlY3Rpb25zIGludG8gIkFVVEhFTlRJQ0FUSU9OIjsKICAgICBzb21lIHJld29yZGluZyBkb25lIHRvIG1ha2UgdGhlIHRleHQgcmVhZCBiZXR0ZXIsIHBsdXMgc29tZQogICAgIGltcHJvdmVtZW50cyBmcm9tIGRqbTsKICAgICBvayBkam0KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMzEgMTM6NDQ6MDQKICAgICBbc3NoLjFdCiAgICAgY2xlYW4gdXAgRU5WSVJPTk1FTlQgYSBsaXR0bGU7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzMxIDEzOjQ1OjE5CiAgICAgW3NzaC4xXQogICAgIC5ObSBkb2VzIG5vdCByZXF1aXJlIGFuIGFyZ3VtZW50OwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDEgMDg6NTk6MjcKICAgICBbaW5jbHVkZXMuaCBtaXNjLmNdCiAgICAgbW92ZSA8bmV0L2lmLmg+OyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMSAxMDowODo0OAogICAgIFttaXNjLmNdCiAgICAgbm8gdHJhaWxpbmcgIlxuIiBmb3IgZGVidWcoKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMiAwMToyMDozMQogICAgIFtzZnRwLWNsaWVudC5jIHNmdHAtY29tbW9uLmggc2Z0cC1zZXJ2ZXIuY10KICAgICB1c2UgYSBjb21tb24gbWF4LiBwYWNrZXQgbGVuZ3RoLCBubyBiaW5hcnkgY2hhbmdlCiAgIC0gcmV5a0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMiAwNzo1Mzo0NAogICAgIFttaXNjLmNdCiAgICAgY2xhcmlmeSB0dW4oNCkgb3BlbmluZyAtIHNldCB0aGUgbW9kZSBhbmQgYnJpbmcgdGhlIGludGVyZmFjZSB1cC4gYWxzbwogICAgIChyZSlzZXRzIHRoZSB0dW4oNCkgbGF5ZXIgMiBMSU5LMCBmbGFnIGZvciBleGlzdGluZyB0dW5uZWwgaW50ZXJmYWNlcy4KICAgICBzdWdnZXN0ZWQgYW5kIG9rIGJ5IGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDIgMTI6MzE6MDYKICAgICBbc3NoLjFdCiAgICAgc3RhcnQgdG8gY3V0IHNvbWUgZHVwbGljYXRlIGluZm8gZnJvbSBGSUxFUzsKICAgICBoZWxwL29rIGRqbQoKMjAwNjAxMDEKIC0gKGRqbSkgW01ha2VmaWxlLmluIGNvbmZpZ3VyZS5hYyBpbmNsdWRlcy5oIG1pc2MuY10KICAgICAgICAgW29wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmMgb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uaF0gQWRkIHN1cHBvcnQKICAgICAgICAgZm9yIHR1bm5lbCBmb3J3YXJkaW5nIGZvciBGcmVlQlNEIGFuZCBOZXRCU0QuIE5ldEJTRCdzIHN1cHBvcnQgaXMKICAgICAgICAgbGltaXRlZCB0byBJUHY0IHR1bm5lbHMgb25seSwgYW5kIG1vc3QgdmVyc2lvbnMgZG9uJ3Qgc3VwcG9ydCB0aGUKICAgICAgICAgdGFwKDQpIGRldmljZSBhdCBhbGwuCiAtIChkam0pIFtjb25maWd1cmUuYWNdIEZpeCBsaW51eC9pZl90dW4uaCB0ZXN0CiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jXSBMaW51eCBuZWVkcyBsaW51eC9pZi5oIHRvbwoKMjAwNTEyMjkKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjggMjI6NDY6MDYKICAgICBbY2Fub2hvc3QuYyBjaGFubmVscy5jIGNsaWVudGxvb3AuY10KICAgICB1c2UgJ2JyZWFrLWluJyBmb3IgY29uc2lzdGVuY3k7IG9rIGRlcmFhZHRAIG9rIGFuZCBpbnB1dCBqbWNACiAgIC0gcmV5a0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMCAxNTo1NjozNwogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggY2xpZW50bG9vcC5jXQogICAgIGFkZCBjaGFubmVsIG91dHB1dCBmaWx0ZXIgaW50ZXJmYWNlLgogICAgIG9rIGRqbUAsIHN1Z2dlc3RlZCBieSBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzMwIDE2OjU5OjAwCiAgICAgW3NmdHAuMV0KICAgICBkbyBub3Qgc3VnZ2VzdCB0aGF0IGludGVyYWN0aXZlIGF1dGhlbnRpY2F0aW9uIHdpbGwgd29yawogICAgIHdpdGggdGhlIC1iIGZsYWc7CiAgICAgYmFzZWQgb24gYSBkaWZmIGZyb20gam9obiBsLiBzY2FyZm9uZTsKICAgICBvayBkam0KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzMxIDAxOjM4OjQ1CiAgICAgW3NzaC4xXQogICAgIGRvY3VtZW50IC1NTTsgb2sgZGptQAogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uYyBvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5oIGNvbmZpZ3VyZS5hY10KICAgW3NlcnZlcmxvb3AuYyBzc2guYyBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbl0KICAgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdIEltcGxlbWVudCB0dW4oNCkgZm9yd2FyZGluZyAKICAgY29tcGF0YWJpbGl0eSBzdXBwb3J0IGZvciBMaW51eCwgZGlmZiBmcm9tIHJleWtACiAtIChkam0pIFtjb25maWd1cmUuYWNdIERpc2FibGUgTGludXggdHVuKDQpIGNvbXBhdCBjb2RlIGlmIGxpbnV4L3R1bi5oIGRvZXMKICAgbm90IGV4aXN0CiAtIChkam0pIFtjb25maWd1cmUuYWNdIG9vcHMsIG1ha2UgdGhhdCBsaW51eC9pZl90dW4uaAoKMjAwNTEyMjkKIC0gKHRpbSkgW2J1aWxkcGtnLnNoLmluXSBncmVwIGZvciAkU1NIRFVJRCBpbnN0ZWFkIG9mICRTU0hER0lEIG9uIC9ldGMvcGFzc3dkCgoyMDA1MTIyNAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIwIDIxOjU5OjQzCiAgICAgW3NzaC4xXQogICAgIG1lcmdlIHRoZSBzZWN0aW9ucyBvbiBwcm90b2NvbHMgMSBhbmQgMiBpbnRvIG9uZSBzZWN0aW9uIG9uCiAgICAgYXV0aGVudGljYXRpb247CiAgICAgZmVlZGJhY2sgZGptIGR0dWNrZXIKICAgICBvayBkZXJhYWR0IG1hcmt1cyBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIwIDIyOjAyOjUwCiAgICAgW3NzaC4xXQogICAgIC5TcyAtPiAuU2g6IHN1YnNlY3Rpb25zIGhhdmUgbm90IG1hZGUgdGhpcyBwYWdlIG1vcmUgcmVhZGFibGUKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjAgMjI6MDk6NDEKICAgICBbc3NoLjFdCiAgICAgbW92ZSBpbmZvIG9uIHNzaCByZXR1cm4gdmFsdWVzIGFuZCBjb25maWcgZmlsZXMgdXAgaW50byB0aGUgbWFpbgogICAgIGRlc2NyaXB0aW9uOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMSAxMTo0ODoxNgogICAgIFtzc2guMV0KICAgICAtTCBhbmQgLVIgZGVzY3JpcHRpb25zIGFyZSBub3cgYWJvdmUsIG5vdCBiZWxvdywgfkMgZGVzY3JpcHRpb247CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIxIDExOjU3OjI1CiAgICAgW3NzaC4xXQogICAgIG9wdGlvbnMgbm93IGRlc2NyaWJlZCBgYWJvdmUnLCByYXRoZXIgdGhhbiBgbGF0ZXInOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMSAxMjo1MzozMQogICAgIFtzc2guMV0KICAgICAtWSBkb2VzIFgxMSBmb3J3YXJkaW5nIHRvbzsKICAgICBvayBtYXJrdXMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIxIDIyOjQ0OjI2CiAgICAgW3NzaGQuOF0KICAgICBjbGFyaWZ5IHByZWNlZGVuY2Ugb2YgLXAsIFBvcnQsIExpc3RlbkFkZHJlc3M7IG9rIGFuZCBoZWxwIGptY0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjIgMTA6MzE6NDAKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHB1dCB0aGUgZGVzY3JpcHRpb24gb2YgIlVzZVByaXZpbGVnZWRQb3J0IiBpbiB0aGUgY29ycmVjdCBwbGFjZTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjIgMTE6MjM6NDIKICAgICBbc3NoLjFdCiAgICAgZXhwYW5kIHRoZSBkZXNjcmlwdGlvbiBvZiAtdyBzb21ld2hhdDsKICAgICBoZWxwL29rIHJleWsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjMgMTQ6NTU6NTMKICAgICBbc3NoLjFdCiAgICAgLSBzeW5jIHRoZSBkZXNjcmlwdGlvbiBvZiAtZSB3LyBzeW5vcHNpcwogICAgIC0gc2ltcGxpZnkgdGhlIGRlc2NyaXB0aW9uIG9mIC1JCiAgICAgLSBub3RlIHRoYXQgLUkgaXMgb25seSBhdmFpbGFibGUgaWYgc3VwcG9ydCBjb21waWxlZCBpbiwgYW5kIHRoYXQgaXQKICAgICBpc24ndCBieSBkZWZhdWx0CiAgICAgZmVlZGJhY2svb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMyAyMzo0NjoyMwogICAgIFtzc2guMV0KICAgICBsZXNzIG1hcmsgdXAgZm9yIC1jOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yNCAwMjoyNzo0MQogICAgIFtzZXNzaW9uLmMgc3NoZC5jXQogICAgIGVsaW1pbmF0ZSBzb21lIGNvZGUgZHVwbGljYXRlZCBpbiBwcml2c2VwIGFuZCBub24tcHJpdnNlcCBwYXRocywgYW5kCiAgICAgZXhwbGljaXRseSBjbGVhciBTSUdBTFJNIGhhbmRsZXI7ICJncm9vdnkiIGRlcmFhZHRACgoyMDA1MTIyMAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIHJleWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTMgMTU6MDM6MDIKICAgICBbc2VydmVybG9vcC5jXQogICAgIGlmIGZvcmNlZF90dW5fZGV2aWNlIGlzIG5vdCBzZXQsIGl0IGlzIC0xIGFuZCBub3QgU1NIX1RVTklEX0FOWQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNiAxODowNzowOAogICAgIFtzc2guMV0KICAgICBtb3ZlIHRoZSBvcHRpb24gZGVzY3JpcHRpb25zIHVwIHRoZSBwYWdlOiBzdGFydCBvZiBhIHJlc3RydWN0dXJlOwogICAgIG9rIG1hcmt1cyBkZXJhYWR0CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzE2IDE4OjA4OjUzCiAgICAgW3NzaC4xXQogICAgIHNpbXBsaWZ5IGEgc2VudGVuY2U7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzE2IDE4OjEyOjIyCiAgICAgW3NzaC4xXQogICAgIG1ha2UgdGhlIGRlc2NyaXB0aW9uIG9mIC1jIGEgbGl0dGxlIG5pY2VyOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNiAxODoxNDo0MAogICAgIFtzc2guMV0KICAgICBzaWducG9zdCB0aGUgcHJvdG9jb2wgc2VjdGlvbnM7CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNyAyMToxMzowNQogICAgIFtzc2hfY29uZmlnLjUgc2Vzc2lvbi5jXQogICAgIHNwZWxsaW5nOiBmb3dhcmRpbmcsIGZvd2FyZGVkCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNyAyMTozNjo0MgogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgc3BlbGxpbmc6IGludGVudGVkIC0+IGludGVuZGVkCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMCAwNDo0MTowNwogICAgIFtzc2guY10KICAgICBleGl0KDI1NSkgb24gZXJyb3IgdG8gbWF0Y2ggZGVzY3JpcHRpb24gaW4gc3NoKDEpOyBieiAjMTEzNzsgb2sgZGVyYWFkdEAKCjIwMDUxMjE5CiAtIChkdHVja2VyKSBbY2lwaGVyLWFlcy5jIGNpcGhlci1jdHIuYyBjaXBoZXIuYyBjb25maWd1cmUuYWMKICAgb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaF0gQ2hlY2sgZm9yIGFuZCB3b3JrIGFyb3VuZCBicm9rZW4gQUVTCiAgIGNpcGhlcnMgPjEyOGJpdCBvbiAoc29tZSkgU29sYXJpcyAxMCBzeXN0ZW1zLiAgb2sgZGptQAoKMjAwNTEyMTcKIC0gKGR0dWNrZXIpIFtkZWZpbmVzLmhdIEhQLVVYIHN5c3RlbSBoZWFkZXJzIGRlZmluZSAiWUVTIiBhbmQgIk5PIiB3aGljaAogICBzY3AuYyBhbHNvIHVzZXMsIHNvIHVuZGVmIHRoZW0gaGVyZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmNdIEJ1ZyAjMTEzMzogT3VyCiAgIHNucHJpbnRmIHJlcGxhY2VtZW50IGNhbiBoYXZlIGEgY29uZmxpY3RpbmcgZGVjbGFyYXRpb24gaW4gSFAtVVgncyBzeXN0ZW0KICAgaGVhZGVycyAoY29uc3QgdnMuIG5vIGNvbnN0KSBzbyB3ZSBub3cgY2hlY2sgZm9yIGFuZCB3b3JrIGFyb3VuZCBpdC4gIFBhdGNoCiAgIGZyb20gdGhlIGR5bmFtaWMgZHVvIG9mIERhdmlkIExlb25hcmQgYW5kIFRlZCBQZXJjaXZhbC4KCjIwMDUxMjE0CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jIChyZWdyZXNzLykKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzMwIDA0OjM2OjM5CiAgICAgW3JlZ3Jlc3Mvc2NwLXNzaC13cmFwcGVyLnNoXQogICAgIEZpeCBhc3N1bXB0aW9uIGFib3V0IGhvdyBtYW55IGFyZ3Mgc2NwIHdpbGwgcGFzczsgb2sgZGptQAoKMjAwNTEyMTMKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8zMCAxMToxODoyNwogICAgIFtzc2guMV0KICAgICB0aW1lem9uZSAtPiB0aW1lIHpvbmUKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMzAgMTE6NDU6MjAKICAgICBbc3NoLjFdCiAgICAgYXZvaWQgYW1iaWd1aXRpZXMgaW4gZGVzY3JpYmluZyBUWjsKICAgICBvayBkam1ACiAgIC0gcmV5a0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wNiAyMjozODoyOAogICAgIFthdXRoLW9wdGlvbnMuYyBhdXRoLW9wdGlvbnMuaCBjaGFubmVscy5jIGNoYW5uZWxzLmggY2xpZW50bG9vcC5jXQogICAgIFttaXNjLmMgbWlzYy5oIHJlYWRjb25mLmMgcmVhZGNvbmYuaCBzY3AuYyBzZXJ2Y29uZi5jIHNlcnZjb25mLmhdCiAgICAgW3NlcnZlcmxvb3AuYyBzZnRwLmMgc3NoLjEgc3NoLmMgc3NoX2NvbmZpZyBzc2hfY29uZmlnLjUgc3NoY29ubmVjdC5jXQogICAgIFtzc2hjb25uZWN0Lmggc3NoZC44IHNzaGRfY29uZmlnIHNzaGRfY29uZmlnLjVdCiAgICAgQWRkIHN1cHBvcnQgZm9yIHR1big0KSBmb3J3YXJkaW5nIG92ZXIgT3BlblNTSCwgYmFzZWQgb24gYW4gaWRlYSBhbmQKICAgICBpbml0aWFsIGNoYW5uZWwgY29kZSBiaXRzIGJ5IG1hcmt1c0AuIFRoaXMgaXMgYSBzaW1wbGUgYW5kIGVhc3kgd2F5IHRvCiAgICAgdXNlIE9wZW5TU0ggZm9yIGFkIGhvYyB2aXJ0dWFsIHByaXZhdGUgbmV0d29yayBjb25uZWN0aW9ucywgZS5nLgogICAgIGFkbWluaXN0cmF0aXZlIHR1bm5lbHMgb3Igc2VjdXJlIHdpcmVsZXNzIGFjY2Vzcy4gSXQncyBiYXNlZCBvbiBhIG5ldwogICAgIHNzaCBjaGFubmVsIGFuZCB3b3JrcyBzaW1pbGFyIHRvIHRoZSBleGlzdGluZyBUQ1AgZm9yd2FyZGluZyBzdXBwb3J0LAogICAgIGV4Y2VwdCB0aGF0IGl0IGRlcGVuZHMgb24gdGhlIHR1big0KSBuZXR3b3JrIGludGVyZmFjZSBvbiBib3RoIGVuZHMgb2YKICAgICB0aGUgY29ubmVjdGlvbiBmb3IgbGF5ZXIgMiBvciBsYXllciAzIHR1bm5lbGluZy4gVGhpcyBkaWZmIGFsc28gYWRkcwogICAgIHN1cHBvcnQgZm9yIExvY2FsQ29tbWFuZCBpbiB0aGUgc3NoKDEpIGNsaWVudC4KICAgICBvayBkam1ALCBtYXJrdXNALCBqbWNAIChtYW5wYWdlcyksIHRlc3RlZCBhbmQgZGlzY3Vzc2VkIHdpdGggb3RoZXJzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzA3IDAzOjUyOjIyCiAgICAgW2NsaWVudGxvb3AuY10KICAgICByZXlrIGZvcmdvdCB0byBjb21waWxlIHdpdGggLVdlcnJvciAobWlzc2luZyBoZWFkZXIpCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzA3IDEwOjUyOjEzCiAgICAgW3NzaC4xXQogICAgIC0gYXZvaWQgbGluZSBzcGxpdCBpbiBTWU5PUFNJUwogICAgIC0gYWRkIGFyZ3MgdG8gLXcKICAgICAtIGtpbGwgdHJhaWxpbmcgd2hpdGVzcGFjZQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wOCAxNDo1OTo0NAogICAgIFtzc2guMSBzc2hfY29uZmlnLjVdCiAgICAgbWFrZSBgIWNvbW1hbmQnIGEgbGl0dGxlIGNsZWFyZXI7CiAgICAgb2sgcmV5awogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wOCAxNTowNjoyOQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAga2VlcCBvcHRpb25zIGluIG9yZGVyOwogICAtIHJleWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDggMTg6MzQ6MTEKICAgICBbYXV0aC1vcHRpb25zLmMgaW5jbHVkZXMuaCBtaXNjLmMgbWlzYy5oIHJlYWRjb25mLmMgc2VydmNvbmYuY10KICAgICBbc2VydmVybG9vcC5jIHNzaC5jIHNzaF9jb25maWcuNSBzc2hkX2NvbmZpZy41IGNvbmZpZ3VyZS5hY10KICAgICB0d28gY2hhbmdlcyB0byB0aGUgbmV3IHNzaCB0dW5uZWwgc3VwcG9ydC4gdGhpcyBicmVha3MgY29tcGF0aWJpbGl0eQogICAgIHdpdGggdGhlIGluaXRpYWwgY29tbWl0IGJ1dCBpcyByZXF1aXJlZCBmb3IgYSBwb3J0YWJsZSBhcHByb2FjaC4KICAgICAtIG1ha2UgdGhlIHR1bm5lbCBpZCB1X2ludCBhbmQgcGxhdGZvcm0gZnJpZW5kbHksIHVzZSBwcmVkZWZpbmVkIHR5cGVzLgogICAgIC0gc3VwcG9ydCBjb25maWd1cmF0aW9uIG9mIGxheWVyIDIgKGV0aGVybmV0KSBvciBsYXllciAzCiAgICAgKHBvaW50LXRvLXBvaW50LCBkZWZhdWx0KSBtb2Rlcy4gY29uZmlndXJhdGlvbiBpcyBkb25lIHVzaW5nIHRoZQogICAgIFR1bm5lbCAoeWVzfHBvaW50LXRvLXBvaW50fGV0aGVybmV0fG5vKSBvcHRpb24gaXMgc3NoX2NvbmZpZyg1KSBhbmQKICAgICByZXN0cmljdGVkIGJ5IHRoZSBQZXJtaXRUdW5uZWwgKHllc3xwb2ludC10by1wb2ludHxldGhlcm5ldHxubykgb3B0aW9uCiAgICAgaW4gc3NoZF9jb25maWcoNSkuCiAgICAgb2sgZGptQCwgbWFuIHBhZ2UgYml0cyBieSBqbWNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzA4IDIxOjM3OjUwCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBuZXcgc2VudGVuY2UsIG5ldyBsaW5lOwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xMiAxMzo0NjoxOAogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggc2Vzc2lvbi5jXQogICAgIG1ha2Ugc3VyZSBwcm90b2NvbCBtZXNzYWdlcyBmb3IgaW50ZXJuYWwgY2hhbm5lbHMgYXJlIGlnbm9yZWQuCiAgICAgYWxsb3cgYWRqdXN0IG1lc3NhZ2VzIGZvciBub24tb3BlbiBjaGFubmVsczsgd2l0aCBhbmQgb2sgZGptQAogLSAoZGptKSBbbWlzYy5jXSBEaXNhYmxlIHR1bm5lbCBjb2RlIGZvciBub24tT3BlbkJTRCAoZm9yIG5vdyksIGVuYWJsZQogICBhZ2FpbiBieSBwcm92aWRpbmcgYSBzeXNfdHVuX29wZW4oKSBmdW5jdGlvbiBmb3IgeW91ciBwbGF0Zm9ybSBhbmQgCiAgIHNldHRpbmcgdGhlIENVU1RPTV9TWVNfVFVOX09QRU4gZGVmaW5lLiBNb3JlIHdvcmsgaXMgcmVxdWlyZWQgdG8gbWF0Y2ggCiAgIE9wZW5CU0QncyB0dW5uZWwgcHJvdG9jb2wsIHdoaWNoIHByZXBlbmRzIHRoZSBhZGRyZXNzIGZhbWlseSB0byB0aGUgCiAgIHBhY2tldAoKMjAwNTEyMDEKIC0gKGRqbSkgW2VudnBhc3Muc2hdIFJlbW92ZSByZWdyZXNzIHNjcmlwdCB0aGF0IHdhcyBhY2NpZGVudGFsbHkgY29tbWl0dGVkIAogICBpbiB0b3AgbGV2ZWwgZGlyZWN0b3J5IGFuZCBub3Qgbm90aWNlZCBmb3Igb3ZlciBhIHllYXIgOikKCjIwMDUxMTI5CiAtICh0aW0pIFtzc2gta2V5Z2VuLmNdIE1vdmUgRFNBIGxlbmd0aCB0ZXN0IGFmdGVyIHNldHRpbmcgZGVmYXVsdCB3aGVuCiAgIGJpdHMgPT0gMC4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzI5IDAyOjA0OjU1CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBQb3B1bGF0ZSBkZWZhdWx0IGtleSBzaXplcyBiZWZvcmUgY2hlY2tpbmcgdGhlbTsgZnJvbSAmIG9rIHRpbUAKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hYyBzc2hkLjhdIEVuYWJsZSBsb2NrZWQgYWNjb3VudCBjaGVjayAoYSAiKkxLKiIgc3RyaW5nKQogICBmb3IgVW5peFdhcmUuCgoyMDA1MTEyOAogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MveWVzLWhlYWQuc2hdIFdvcmsgYXJvdW5kIGJyZWFrYWdlIGNhdXNlZCBieSBzb21lCiAgIHZlcnNpb25zIG9mIEdOVSBoZWFkLiAgQmFzZWQgb24gcGF0Y2ggZnJvbSB6YXBwYW1hbiBhdCBidXJhcGhhbGludXgub3JnCiAtIChkdHVja2VyKSBbaW5jbHVkZXMuaF0gQnVnICMxMTIyOiBfX1VTRV9HTlUgaXMgYSBnbGliYyBpbnRlcm5hbCBtYWNybywgdXNlCiAgIF9HTlVfU09VUkNFIGluc3RlYWQuICBQYXRjaCBmcm9tIHQ4bSBhdCBjZW50cnVtLmN6LgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMjggMDU6MTY6NTMKICAgICBbc3NoLWtleWdlbi4xIHNzaC1rZXlnZW4uY10KICAgICBFbmZvcmNlIERTQSBrZXkgbGVuZ3RoIG9mIGV4YWN0bHkgMTAyNCBiaXRzIHRvIGNvbXBseSB3aXRoIEZJUFMtMTg2LTIsCiAgICAgaW5jcmVhc2UgbWludW11bSBSU0Ega2V5IHNpemUgdG8gNzY4IGJpdHMgYW5kIHVwZGF0ZSBtYW4gcGFnZSB0byByZWZsZWN0CiAgICAgdGhlc2UuICBQYXRjaCBvcmlnaW5hbGx5IGJ6IzExMTkgKHNlbnRoaWxrdW1hcl9zZW4gYXQgaG90cG9wLmNvbSksCiAgICAgb2sgZGptQCwgZ3J1ZGdpbmcgb2sgZGVyYWFkdEAuCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8yOCAwNjowMjo1NgogICAgIFtzc2gtYWdlbnQuMV0KICAgICBVcGRhdGUgYWdlbnQgc29ja2V0IHBhdGggdGVtcGxhdGVzIHRvIHJlZmxlY3QgcmVhbGl0eSwgY29ycmVjdCB4cmVmIGZvcgogICAgIHRpbWUgZm9ybWF0cy4gIGJ6IzExMjEsIHBhdGNoIGZyb20gb3BlbnNzaCBhdCByb3VtZW5wZXRyb3YuaW5mbywgb2sgZGptQAoKMjAwNTExMjYKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTEyNjogQUlYIDUuMiBhbmQgNS4zIChhbmQgcHJlc3VtYWJseSBuZXdlciwKICAgd2hlbiB0aGV5J3JlIGF2YWlsYWJsZSkgbmVlZCB0aGUgcmVhbCBVSUQgc2V0IG90aGVyd2lzZSBwYW1fY2hhdXRodG9rIHdpbGwKICAgc2V0IEFETUNIRyBhZnRlciBjaGFuZ2luZyB0aGUgcGFzc3dvcmQsIGZvcmNpbmcgdGhlIHVzZXIgdG8gY2hhbmdlIGl0CiAgIGFnYWluIGltbWVkaWF0ZWx5LgoKMjAwNTExMjUKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEFwcGx5IHRpbSdzIGZpeCBmb3Igb2xkZXIgc3lzdGVtcyB3aGVyZSB0aGUKICAgcmVzb2x2ZXIgc3RhdGUgaW4gcmVzb2x2LmggaXMgInN0YXRlIiBub3QgIl9fcmVzX3N0YXRlIi4gIFdpdGggc2xpZ2h0CiAgIG1vZGlmaWNhdGlvbiBieSBtZSB0byBhbHNvIHdvcmsgb24gb2xkIEFJWGVzLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3Byb2dyZXNzbWV0ZXIuYyBzY3AuYyBzZnRwLXNlcnZlci5jXSBVc2UgY29ycmVjdCBjYXN0cyBmb3IKICAgc25wcmludGYgZm9ybWF0cywgZml4ZXMgd2FybmluZ3Mgb24gc29tZSA2NCBiaXQgcGxhdGZvcm1zLiAgUGF0Y2ggZnJvbQogICBzaGF3IGF0IHZyYW5peC5jb20sIG9rIGRqbUAKCjIwMDUxMTI0CiAtIChkam0pIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4gb3BlbmJzZC1jb21wYXQvYnNkLWFzcHJpbnRmLmMgCiAgIG9wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdIEFkZCBhbiAKICAgYXNwcmludGYoKSBpbXBsZW1lbnRhdGlvbiwgYWZ0ZXIgc3luY2luZyBvdXIge3YsfXNucHJpbnRmKCkgaW1wbGVtZW50YXRpb24KICAgd2l0aCBzb21lIGV4dHJhIGZpeGVzIGZyb20gU2FtYmEncyB2ZXJzaW9uLiBXaXRoIGhlbHAgYW5kIGRlYnVnZ2luZyBmcm9tIAogICBkdHVja2VyIGFuZCB0aW07IG9rIGR0dWNrZXJACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBGaXggdHlwb3MgaW4gY29tbWVudHMgYW5kIEFDX1NFQVJDSF9MSUIgYXJndW1lbnQKICAgb3JkZXIgaW4gUmVsaWFudCBVbml4IGJsb2NrLiAgUGF0Y2ggZnJvbSBqb2hhbmUgYXQgbHlzYXRvci5saXUuc2UuCiAtIChkdHVja2VyKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdIFVzZSAxMDI0IGJpdCBrZXlzIHNpbmNlIHdlIGdlbmVyYXRlIHNvCiAgIG1hbnkgYW5kIHVzZSB0aGVtIG9ubHkgb25jZS4gIFNwZWVkcyB1cCB0ZXN0aW5nIG9uIG9sZGVyL3Nsb3dlciBoYXJkd2FyZS4KCjIwMDUxMTIyCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8xMiAxODozNzo1OQogICAgIFtzc2gtYWRkLmNdCiAgICAgc3BhY2UKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzEyIDE4OjM4OjE1CiAgICAgW3NjcC5jXQogICAgIGF2b2lkIGNsb3NlKC0xKSwgYXMgaW4gcmNwOyBvayBjbG9kZXIKICAgLSBtaWxsZXJ0QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzE1IDExOjU5OjU0CiAgICAgW2luY2x1ZGVzLmhdCiAgICAgSW5jbHVkZSBzeXMvcXVldWUuaCBleHBsaWNpdGx5IGluc3RlYWQgb2YgYXNzdW1pbmcgc29tZSBvdGhlciBoZWFkZXIKICAgICB3aWxsIHB1bGwgaXQgaW4uICBBdCB0aGUgbW9tZW50IGl0IGdldHMgcHVsbGVkIGluIGJ5IHN5cy9zZWxlY3QuaAogICAgICh3aGljaCBzc2ggaGFzIG5vIGJ1c2luZXNzIGluY2x1ZGluZykgdmlhIGV2ZW50LmguICBPSyBtYXJrdXNACiAgICAgKElEIHN5bmMgb25seSBpbiAtcG9ydGFibGUpCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8yMSAwOTo0MjoxMAogICAgIFthdXRoLWtyYjUuY10KICAgICBQZXJmb3JtIEtlcmJlcm9zIGNhbGxzIGV2ZW4gZm9yIGludmFsaWQgdXNlcnMgdG8gcHJldmVudCBsZWFraW5nCiAgICAgaW5mb3JtYXRpb24gYWJvdXQgYWNjb3VudCB2YWxpZGl0eS4gIGJ6ICM5NzUsIHBhdGNoIG9yaWdpbmFsbHkgZnJvbQogICAgIFNlbnRoaWwgS3VtYXIsIHNhbml0eSBjaGVja2VkIGJ5IFNpbW9uIFdpbGtpbnNvbiwgdGVzdGVkIGJ5IGRqbUAsIGJpb3JuQCwKICAgICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8yMiAwMzozNjowMwogICAgIFtob3N0ZmlsZS5jXQogICAgIENvcnJlY3QgZm9ybWF0L2FyZ3VtZW50cyB0byBkZWJ1ZyBjYWxsOyBzcG90dGVkIGJ5IHNoYXcgYXQgdnJhbml4LmNvbQogICAgIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtsb2dpbnJlYy5jXSBBZGQgY2FzdHMgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncywgcGF0Y2gKICAgZnJvbSBzaGF3IGF0IHZyYW5peC5jb20uCgoyMDA1MTEyMAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmhdIEFkZCBjb21tZW50IGV4cGxhaW5pbmcgd2hhdAogICBpcyBnb2luZyBvbi4KCjIwMDUxMTEyCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gUmVzdG9yZSBQb3J0YWJsZS1zcGVjaWZpYwogICBpZmRlZiBsb3N0IGR1cmluZyBzeW5jLiAgU3BvdHRlZCBieSB0aW1ALgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3tyZWFscGF0aC5jLHN0cm9sbC5jLHJyZXN2cG9ydC5jfV0gJE9wZW5CU0QgdGFnLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVXNlICIkQVdLIiBpbnN0ZWFkIG9mICJhd2siIGluIGdjYyB2ZXJzaW9uIHRlc3QuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBSZW1vdmUgZHVwbGljYXRlIHV0aW1lcygpIGNoZWNrLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvcmVjb25maWd1cmUuc2hdIEZpeCBwb3RlbnRpYWwgcmFjZSBpbiB0aGUgcmVjb25maWd1cmUKICAgdGVzdDogaWYgc3NoZCB0YWtlcyB0b28gbG9uZyB0byByZWNvbmZpZ3VyZSB0aGUgc3Vic2VxdWVudCBjb25uZWN0aW9uIHdpbGwKICAgZmFpbC4gIFphcCBwaWRmaWxlIGJlZm9yZSBIVVBpbmcgc3NoZCB3aGljaCB3aWxsIHJld3JpdGUgaXQgd2hlbiBpdCdzIHJlYWR5LgoKMjAwNTExMTAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zZXRlbnYuY10gTWVyZ2UgY2hhbmdlcyBmb3IgX19maW5kZW52IGZyb20KICAgT3BlbkJTRCBnZXRlbnYuYyByZXZzIDEuNCAtIDEuOCAoQU5TSWZpY2F0aW9uIG9mIGFyZ3VtZW50cywgcmVtb3ZhbCBvZgogICAicmVnaXN0ZXIiKS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zZXRlbnYuY10gTWFrZSBfX2ZpbmRlbnYgc3RhdGljLCByZW1vdmUKICAgdW5uZWNlc3NhcnkgcHJvdG90eXBlLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3NldGVudi5jXSBTeW5jIGNoYW5nZXMgZnJvbSBPcGVuQlNEIHNldGVudi5jCiAgIHJldnMgMS43IC0gMS45LgogLSAoZHR1Y2tlcikgW2F1dGgta3JiNS5jXSBGaXggLVdzaWduLWNvbXBhcmUgd2FybmluZyBpbiBub24tSGVpbWRhbCBwYXRoLgogICBQYXRjaCBmcm9tIGRqbUAuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBEaXNhYmxlIHBvaW50ZXItc2lnbiB3YXJuaW5ncyBvbiBnY2MgNC4wKwogICBzaW5jZSB0aGV5J3JlIG5vdCB1c2VmdWwgcmlnaHQgbm93LiAgUGF0Y2ggZnJvbSBkam1ALgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldGdyb3VwbGlzdC5jXSBTeW5jIE9wZW5CU0QgcmV2cyAxLjEwIC0gMS4yIChBTlNJCiAgIHByb3RvdHlwZXMsIHJlbW92YWwgb2YgInJlZ2lzdGVyIikuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3RybGNhdC5jXSBTeW5jIE9wZW5CU0QgcmV2cyAxLjExIC0gMS4xMiAocmVtb3ZhbAogICBvZiAicmVnaXN0ZXIiKS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC97TE9UU31dIE1vdmUgdGhlICJPUEVOQlNEIE9SSUdJTkFMIiBtYXJrZXJzIHRvCiAgIGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcy4gIEhhdmluZyB0aGVtIGF0IHRoZSB0b3AgbmV4dCB0byB0aGUgQ1ZTSURzCiAgIGd1YXJhbnRlZXMgYSBjb25mbGljdCBmb3IgZWFjaCBhbmQgZXZlcnkgc3luYy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zdHJsY3B5LmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS44IC0+IDEuMTAuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2lnYWN0LmhdIEFkZCAiT1BFTkJTRCBPUklHSU5BTCIgbWFya2VyLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3N0cm1vZGUuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjUgLT4gMS43LgogICBSZW1vdmFsIG9mIHJjc2lkLCAid2hpdGVvdXQiIGlub2RlIHR5cGUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYmFzZW5hbWUuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjExIC0+IDEuMTQuCiAgIFJlbW92YWwgb2YgcmNzaWQsIHdpbGwgbm8gbG9uZ2VyIHN0cmxjcHkgcGFydHMgb2YgdGhlIHN0cmluZy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zdHJ0b2xsLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS40IC0+IDEuNS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zdHJ0b3VsLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS41IC0+IDEuNy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMTYgLT4gMS4xOC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5oXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMyAtPiAxLjUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2xvYi5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMjIgLT4gMS4yNS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nbG9iLmhdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS44IC0+IDEuOS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRjd2QuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjkgLT4gMS4xNC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRjd2QuY10gUmVwbGFjZSBsc3RhdCB3aXRoIGZzdGF0IHRvIG1hdGNoIHVwCiAgIHdpdGggT3BlbkJTRCBjb2RlIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgcGxhdGZvcm1zIHdpdGhvdXQgZnN0YXQgYW55IG1vcmUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvaW5ldF9hdG9uLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS43IC0+IDEuOS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9pbmV0X250b2EuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjQgLT4gMS42LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2luZXRfbnRvcC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNSAtPiAxLjcuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZGFlbW9uLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS41IC0+IDEuNi4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zdHJzZXAuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjUgLT4gMS42LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2RhZW1vbi5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMTAgLT4gMS4xMy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ta3RlbXAuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjE3IC0+IDEuMTkuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcnJlc3Zwb3J0LmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS42IC0+IDEuOC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuY10gQWRkICJPUEVOQlNEIE9SSUdJTkFMIiBtYXJrZXIuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYmluZHJlc3Zwb3J0LmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4xNiAtPiAxLjE3LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3NpZ2FjdC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMyAtPiAxLjQuCiAgIElkIGFuZCBjb3B5cmlnaHQgc3luYyBvbmx5LCB0aGVyZSB3ZXJlIG5vIHN1YnN0YW50aWFsIGNoYW5nZXMgd2UgbmVlZC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmMgb3BlbmJzZC1jb21wYXQvYmFzZTY0LmNdCiAgIC1Xc2lnbi1jb21wYXJlIGZpeGVzIGZyb20gZGptLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3NpZ2FjdC5oXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMiAtPiAxLjMuCiAgIElkIGFuZCBjb3B5cmlnaHQgc3luYyBvbmx5LCB0aGVyZSB3ZXJlIG5vIHN1YnN0YW50aWFsIGNoYW5nZXMgd2UgbmVlZC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFRyeSB0byBnZXQgdGhlIGdjYyB2ZXJzaW9uIG51bWJlciBpbiBhIHdheSB0aGF0CiAgIGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gdmVyc2lvbnMsIGFuZCB1c2UgYSBzYWZlciBkZWZhdWx0LgoKMjAwNTExMDUKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8wNyAxMToxMzo1NwogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgY2hhbmdlIERTQSBkZWZhdWx0IGJhY2sgdG8gMTAyNCwgYXMgaXQncyBkZWZpbmVkIGZvciAxMDI0IGJpdHMgb25seQogICAgIGFuZCB0aGlzIGNhdXNlcyBpbnRlcm9wIHByb2JsZW1zIHdpdGggb3RoZXIgY2xpZW50cy4gIG1vcmVvdmVyLAogICAgIGluIG9yZGVyIHRvIGltcHJvdmUgdGhlIHNlY3VyaXR5IG9mIERTQSB5b3UgbmVlZCB0byBjaGFuZ2UgbW9yZQogICAgIGNvbXBvbmVudHMgb2YgRFNBIGtleSBnZW5lcmF0aW9uIChlLmcuIHRoZSBpbnRlcm5hbCBTSEExIGhhc2gpOwogICAgIG9rIGRlcmFhZHQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTAgMTA6MjM6MDgKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuYyBzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jXQogICAgIGZpeCByZWdyZXNzaW9uIEkgaW50cm9kdWNlZCBpbiA0LjI6IFgxMSBmb3J3YXJkaW5ncyBpbml0aWF0ZWQgYWZ0ZXIKICAgICBhIHNlc3Npb24gaGFzIGV4aXRlZCAoZS5nLiAiKHNsZWVwIDU7IHh0ZXJtKSAmIikgd291bGQgbm90IHN0YXJ0LgogICAgIGJ6ICMxMDg2IHJlcG9ydGVkIGJ5IHQ4bSBBVCBjZW50cnVtLmN6OyBvayBtYXJrdXNAIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzExIDIzOjM3OjM3CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgYnogIzEwNzYgc2V0IFNPX1JFVVNFQUREUiBvbiBYMTEgZm9yd2FyZGluZyBsaXN0bmVyIHNvY2tldHMsIHByZXZlbnRpbmcKICAgICBiaW5kKCkgZmFpbHVyZSB3aGVuIGEgcHJldmlvdXMgY29ubmVjdGlvbidzIGxpc3RlbmVycyBhcmUgaW4gVElNRV9XQUlULAogICAgIHJlcG9ydGVkIGJ5IHBsYXR0bmVyIEFUIGluZi5ldGh6LmNoOyBvayBkdHVja2VyQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTMgMTQ6MDM6MDEKICAgICBbYXV0aDItZ3NzLmMgZ3NzLWdlbnIuYyBnc3Mtc2Vydi5jXQogICAgIHJlbW92ZSB1bm5lZWRlZCAjaW5jbHVkZXM7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzEzIDE0OjIwOjM3CiAgICAgW2dzcy1zZXJ2LmNdCiAgICAgc3BlbGxpbmcgaW4gY29tbWVudHMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzEzIDE5OjA4OjA4CiAgICAgW2dzcy1zZXJ2LWtyYjUuYyBnc3Mtc2Vydi5jXQogICAgIHVudXNlZCBkZWNsYXJhdGlvbnM7IG9rIGRlcmFhZHRACiAgICAgKGlkIHN5bmMgb25seSBmb3IgZ3NzLXNlcnYta3JiNS5jKQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTMgMTk6MTM6NDEKICAgICBbZG5zLmNdCiAgICAgdW5uZWVkZWQgI2luY2x1ZGUsIHVudXNlZCBkZWNsYXJhdGlvbiwgbGl0dGxlIGtuZjsgb2sgZGVyYWFkdEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzEzIDIyOjI0OjMxCiAgICAgW2F1dGgyLWdzcy5jIGdzcy1nZW5yLmMgZ3NzLXNlcnYuYyBtb25pdG9yLmNdCiAgICAgS05GOyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xNCAwMjoxNzo1OQogICAgIFtzc2gta2V5Z2VuLmMgc3NoLmMgc3NoY29ubmVjdDIuY10KICAgICBubyB0cmFpbGluZyAiXG4iIGZvciBsb2cgZnVuY3Rpb25zOyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xNCAwMjoyOTozNwogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuY10KICAgICBmcmVlKCktPnhmcmVlKCk7IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzE1IDE1OjI4OjEyCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBtYWtlIGV4dGVybmFsIGRlZmluaXRpb24gc3RhdGljOyBvayBkZXJhYWR0QAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTcgMTM6NDU6MDUKICAgICBbZG5zLmNdCiAgICAgZml4IG1lbW9yeSBsZWFrcyBmcm9tIDIgc291cmNlczoKICAgICAgICAgMSkga2V5X2ZpbmdlcnByaW50X3JhdygpCiAgICAgICAgIDIpIG1hbGxvYyBpbiBkbnNfcmVhZF9yZGF0YSgpCiAgICAgb2sgamFrb2JACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xNyAxNDowMToyOAogICAgIFtkbnMuY10KICAgICByZW1vdmUgI2lmZGVmIExXUkVTOyBvayBqYWtvYkAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzE3IDE0OjEzOjM1CiAgICAgW2Rucy5jIGRucy5oXQogICAgIG1vcmUgY2xlYW51cHM7IG9rIGpha29iQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMCAwMToyMzoxOQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgbWVudGlvbiBjb250cm9sIHNvY2tldCBmYWxsYmFjayBiZWhhdmlvdXIsIHJlcG9ydGVkIGJ5IAogICAgIHRyeXBvbnJhaiBBVCBnbWFpbC5jb20KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzAgMDQ6MDE6MDMKICAgICBbc3NoLWtleXNjYW4uY10KICAgICBtYWtlIHNzaC1rZXlnZW4gZGlzY2FyZCBqdW5rIGZyb20gc2VydmVyIGJlZm9yZSBTU0gtIGlkZW50LCBzcG90dGVkIGJ5CiAgICAgZGF2ZSBBVCBjaXJ0Lm5ldDsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzAgMDQ6MDM6MjQKICAgICBbc3NoLmNdCiAgICAgZml4IG1pc2xlYWRpbmcgZGVidWcgbWVzc2FnZTsgb2sgZHR1Y2tlckAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMwIDA4OjI5OjI5CiAgICAgW2Nhbm9ob3N0LmMgc3NoZC5jXQogICAgIENoZWNrIGZvciBjb25uZWN0aW9ucyB3aXRoIElQIG9wdGlvbnMgZWFybGllciBhbmQgZHJvcCBzaWxlbnRseS4gIG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzAgMDg6NDM6NDcKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMCAwODo1MjoxOAogICAgIFtjbGllbnRsb29wLmMgcGFja2V0LmMgc2VydmVybG9vcC5jIHNlc3Npb24uYyBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmNdCiAgICAgW3NzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0MS5jIHNzaGQuY10KICAgICBubyBuZWVkIHRvIGVzY2FwZSBzaW5nbGUgcXVvdGVzIGluIGNvbW1lbnRzLCBubyBiaW5hcnkgY2hhbmdlCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMSAwNjoxNTowNAogICAgIFtzZnRwLmNdCiAgICAgRml4IHNvcnRpbmcgd2l0aCAibHMgLTEiIGNvbW1hbmQuIEZyb20gUm9iZXJ0IFRzYWksICJsb29rcyByaWdodCIgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzEgMTE6MTI6NDkKICAgICBbc3NoLWtleWdlbi4xIHNzaC1rZXlnZW4uY10KICAgICBnZW5lcmF0ZSBhIHByb3RvY29sIDIgUlNBIGtleSBieSBkZWZhdWx0CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMxIDExOjQ4OjI5CiAgICAgW3NlcnZlcmxvb3AuY10KICAgICBtYWtlIHN1cmUgd2UgY2xlYW4gdXAgd3RtcCwgZXRjLiBmaWxlIHdoZW4gd2UgcmVjZWl2ZSBhIFNJR1RFUk0sCiAgICAgU0lHSU5UIG9yIFNJR1FVSVQgd2hlbiBydW5uaW5nIHdpdGhvdXQgcHJpdmlsZWdlIHNlcGFyYXRpb24gKHRoZQogICAgIG5vcm1hbCBwcml2c2VwIGNhc2UgaXMgYWxyZWFkeSBPSykuIFBhdGNoIG1haW5seSBieSBkdHVja2VyQCBhbmQKICAgICBzZW50aGlsa3VtYXJfc2VuIEFUIGhvdHBvcC5jb207IG9rIGR0dWNrZXJACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMxIDE5OjU1OjI1CiAgICAgW3NzaC1rZXlnZW4uMV0KICAgICBncmFtbWFyOwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMDMgMTM6Mzg6MjkKICAgICBbY2Fub2hvc3QuY10KICAgICBDYWNoZSByZXZlcnNlIGxvb2t1cHMgd2l0aCBhbmQgd2l0aG91dCBETlMgc2VwYXJhdGVseTsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8wNCAwNToxNTo1OQogICAgIFtrZXguYyBrZXguaCBrZXhkaC5jIGtleGRoYy5jIGtleGRocy5jIGtleGdleC5jIGtleGdleGMuYyBrZXhnZXhzLmNdCiAgICAgcmVtb3ZlIGhhcmRjb2RlZCBoYXNoIGxlbmd0aHMgaW4ga2V5IGV4Y2hhbmdlIGNvZGUsIGFsbG93aW5nCiAgICAgaW1wbGVtZW50YXRpb24gb2YgS0VYIG1ldGhvZHMgd2l0aCBkaWZmZXJlbnQgaGFzaGVzIChlLmcuIFNIQS0yNTYpOwogICAgIG9rIG1hcmt1c0AgZHR1Y2tlckAgc3RldmVza0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMDUgMDU6MDE6MTUKICAgICBbYnVmYXV4LmNdCiAgICAgRml4IGxlYWtzIGluIGVycm9yIHBhdGhzLCBieiAjMTEwOSBhbmQgIzExMTAgcmVwb3J0ZWQgYnkga3JlbWVuZWsgQVQKICAgICBjcy5zdGFuZm9yZC5lZHU7IG9rIGR0dWNrZXJACiAtIChkdHVja2VyKSBbUkVBRE1FLnBsYXRmb3JtXSBBZGQgUEFNIHNlY3Rpb24uCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBTeW5jIHRvIGxhdGVzdCBPcGVuQlNEIHZlcnNpb24sCiAgIHJlc29sdmluZyBtZW1vcnkgbGVhayBieiMxMTExIHJlcG9ydGVkIGJ5IGtyZW1lbmVrIEFUIGNzLnN0YW5mb3JkLmVkdTsKICAgb2sgZHR1Y2tlckAKCjIwMDUxMTAyCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuY10gQnVnICMxMTA4OiBmaXggYnJva2VuIHN0cmR1cCgpLgogICBSZXBvcnRlZCBieSBvbGF2aSBhdCBpcHVucGx1Z2dlZC5jb20gYW5kIGFudG9pbmUuYnJvZGluIGF0IGxhcG9zdGUubmV0CiAgIHZpYSBGcmVlQlNELgoKMjAwNTEwMzAKIC0gKGRqbSkgW2NvbnRyaWIvc3VzZS9vcGVuc3NoLnNwZWMgY29udHJpYi9zdXNlL3JjLgogICBzc2hkIGNvbnRyaWIvc3VzZS9zeXNjb25maWcuc3NoXSBCdWcgIzExMDY6IFVwZGF0ZWQgU3VTRSBzcGVjIGFuZCBpbml0IAogICBmaWxlcyBmcm9tIGltb3JnYW4gQVQgbmFzLm5hc2EuZ292CiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jXSBCdWcgIzEwNDVkbyBub3QgY2hlY2sgL2V0Yy9ub2xvZ2luIHdoZW4gUEFNIGlzCiAgIGVuYWJsZWQsIGluc3RlYWQgYWxsb3cgUEFNIHRvIGhhbmRsZSBpdC4gIE5vdGUgdGhhdCBvbiBwbGF0Zm9ybXMgdXNpbmcgUEFNLAogICB0aGUgcGFtX25vbG9naW4gbW9kdWxlIHNob3VsZCBiZSBhZGRlZCB0byBzc2hkJ3Mgc2Vzc2lvbiBzdGFjayBpbiBvcmRlciB0bwogICBtYWludGFpbiBleGlzaW5nIGJlaGF2aW91ci4gIEJhc2VkIG9uIHBhdGNoIGFuZCBkaXNjdXNzaW9uIGZyb20gdDhtIGF0CiAgIGNlbnRydW0uY3osIG9rIGRqbUAKCjIwMDUxMDI1CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBSZWxvY2F0ZSBMTE9OR19NQVggY2FsY3VsYXRpb24gdG8gYWZ0ZXIgdGhlCiAgIHNpemVvZihsb25nIGxvbmcpIGNoZWNrcywgdG8gbWFrZSBmaXhpbmcgYnVnICMxMTA0IGVhc2llciAobm8gY2hhbmdlcwogICB5ZXQpLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTA0OiBUcnU2NCdzIHByaW50ZiBmYW1pbHkgZG9lc24ndAogICB1bmRlcnN0YW5kICIlbGxkIiwgZXZlbiB0aG91Z2ggdGhlIGNvbXBpbGVyIGhhcyAibG9uZyBsb25nIiwgc28gaGFuZGxlCiAgIGl0IGFzIGEgc3BlY2lhbCBjYXNlLiAgUGF0Y2ggdGVzdGVkIGJ5IG1jYXNraWxsLnNjb3R0IGF0IGVwYS5nb3YuCiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vc3NoLXVzZXItY29uZmlnXSBSZW1vdmUgZHVwbGljYXRlIHllcy9ubwogICBwcm9tcHQuICBQYXRjaCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCgoyMDA1MTAxNwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMDk3OiBGaXggY29uZmlndXJlIGZvciBjcm9zcy1jb21waWxpbmcuCiAgIC9ldGMvZGVmYXVsdC9sb2dpbiByZXBvcnQgYW5kIHRlc3RpbmcgZnJvbSBhYWJha2VyIGF0IGllZS5vcmcsIGNvcnJlY3Rpb25zCiAgIGZyb20gdGltQC4KCjIwMDUxMDA5CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaCBvcGVuYnNkLWNvbXBhdC92aXMue2MsaH1dIFN5bmMgY3VycmVudAogICB2ZXJzaW9ucyBmcm9tIE9wZW5CU0QuICBvayBkam1ACgoyMDA1MTAwOAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMDk4OiBkZWZpbmUgJE1BSUwgZm9yIEhQLVVYOyByZXBvcnQgZnJvbQogICBicmlhbi5zbWl0aCBhdCBhZ2lsZW50IGNvbS4KIC0gKGRqbSkgW2NvbmZpZ3VyZS5hY10gbWlzc2luZyAndGVzdCcgY2FsbCBmb3IgLXdpdGgtV2Vycm9yIHRlc3QKCjIwMDUxMDA1CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIHNzaGQuOF0gRW5hYmxlIGxvY2tlZCBhY2NvdW50IGNoZWNrIChhIHByZXBlbmRlZAogICAiKkxPQ0tFRCoiIHN0cmluZykgZm9yIEZyZWVCU0QuICBQYXRjaCBqZXJlbWllIGF0IGxlLWhlbi5vcmcgYW5kCiAgIHNlbnRoaWxrdW1hcl9zZW4gYXQgaG90cG9wLmNvbS4KCjIwMDUxMDAzCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzA3IDA4OjUzOjUzCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgZW5mb3JjZSBjaGFuaWQgIT0gTlVMTDsgb2sgZGptCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzA5IDE5OjE4OjA1CiAgICAgW2NsaWVudGxvb3AuY10KICAgICB0eXBvOyBmcm9tIG1hcmsgYXQgbWNzLnZ1dy5hYy5ueiwgYnVnICMxMDgyCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzEzIDIzOjQwOjA3CiAgICAgW3NzaGQuYyBzc2guYyBtaXNjLmggc2Z0cC5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2lnbi5jIHNmdHAtc2VydmVyLmMKICAgICBzY3AuYyBtaXNjLmMgc3NoLWtleXNjYW4uYyBzc2gtYWRkLmMgc3NoLWFnZW50LmNdCiAgICAgZW5zdXJlIHRoYXQgc3RkaW8gZmRzIGFyZSBhdHRhY2hlZDsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMTkgMTE6Mzc6MzQKICAgICBbc3NoX2NvbmZpZy41IHNzaC4xXQogICAgIG1lbnRpb24gYWJpbGl0eSB0byBzcGVjaWZ5IGJpbmRfYWRkcmVzcyBmb3IgRHluYW1pY0ZvcndhcmQgYW5kIC1EIG9wdGlvbnM7CiAgICAgYnojMTA3NyBzcG90dGVkIGJ5IEhhcnV5YW1hIFNlaWdvCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzE5IDExOjQ3OjA5CiAgICAgW3NzaGQuY10KICAgICBzdG9wIGNvbm5lY3Rpb24gYWJvcnQgb24gcmVrZXkgd2l0aCBkZWxheWVkIGNvbXByZXNzaW9uIGVuYWJsZWQgd2hlbgogICAgIHBvc3QtYXV0aCBwcml2c2VwIGlzIGRpc2FibGVkIChlLmcuIHdoZW4gcm9vdCBpcyBsb2dnZWQgaW4pOyBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xOSAxMTo0ODoxMAogICAgIFtnc3Mtc2Vydi5jXQogICAgIHR5cG8KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMTkgMTU6Mzg6MjcKICAgICBbc3NoLjFdCiAgICAgc29tZSBtb3JlIC5Cay8uRWsgdG8gYXZvaWQgdWdseSBsaW5lIHNwbGl0OwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xOSAxNTo0Mjo0NAogICAgIFtzc2guY10KICAgICB1cGRhdGUgLUQgdXNhZ2UgaGVyZSB0b287CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzE5IDIzOjMxOjMxCiAgICAgW3NzaC4xXQogICAgIHNwZWxsaW5nIG5pdCBmcm9tIHN0ZXZlc2tACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzIxIDIzOjM2OjU0CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgYXF1aXJlIC0+IGFjcXVpcmUsIGZyb20gc3RldmVza0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMjEgMjM6Mzc6MTEKICAgICBbc3NoZC5jXQogICAgIGNoYW5nZSBsYWJlbCBhdCBtYXJrdXNAJ3MgcmVxdWVzdAogICAtIGphcmVkeUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8zMCAyMDozNDoyNgogICAgIFtzc2gta2V5c2Nhbi4xXQogICAgIGRlcGxveSAuQW4gLW5vc3BsaXQ7IG9rIGptYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMDMgMDc6NDQ6NDIKICAgICBbY2Fub2hvc3QuY10KICAgICBSZWxvY2F0ZSBjaGVja19pcF9vcHRpb25zIGNhbGwgdG8gcHJldmVudCBsb2dnaW5nIG9mIGdhcmJhZ2UgZm9yCiAgICAgY29ubmVjdGlvbnMgd2l0aCBJUCBvcHRpb25zIHNldC4gIGJ6IzEwOTIgZnJvbSBEYXZpZCBMZW9uYXJkLAogICAgICJsb29rcyBnb29kIiBkZXJhYWR0QAogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvUkVBRE1FLnJlZ3Jlc3NdIEJ1ZyAjOTg5OiBEb2N1bWVudCBsaW1pdGF0aW9uIHRoYXQgc2NwCiAgIGlzIHJlcXVpcmVkIGluIHRoZSBzeXN0ZW0gcGF0aCBmb3IgdGhlIG11bHRpcGxleCB0ZXN0IHRvIHdvcmsuCgoyMDA1MDkzMAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdIEJ1ZyAjMTA5NjogQWRkIHByb3RvdHlwZQogICBmb3Igc3RydG9sbC4gIFBhdGNoIGZyb20gby5mbGViYmUgYXQgc2NpZW5jZS1jb21wdXRpbmcuZGUuCiAtIChkdHVja2VyKSBbbW9uaXRvci5jXSBCdWcgIzEwODc6IFNlbmQgbG9naW5tc2cgdG8gcHJlYXV0aCBwcml2c2VwCiAgIGNoaWxkIGR1cmluZyBQQU0gYWNjb3VudCBjaGVjayB3aXRob3V0IGNsZWFyaW5nIGl0LiAgVGhpcyByZXN0b3JlcyB0aGUKICAgcG9zdC1sb2dpbiB3YXJuaW5ncyBzdWNoIGFzIExEQVAgcGFzc3dvcmQgZXhwaXJ5LiAgUGF0Y2ggZnJvbSBUb21hcyBNcmF6CiAgIHdpdGggaGVscCBmcm9tIHNldmVyYWwgb3RoZXJzLgoKMjAwNTA5MjkKIC0gKGR0dWNrZXIpIFttb25pdG9yX3dyYXAuY10gUmVtb3ZlIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIGxvZ2lubXNnCiAgIGludHJvZHVjZWQgZHVyaW5nIHN5bmMuCgoyMDA1MDkyOAogLSAoZHR1Y2tlcikgW2VudHJvcHkuY10gVXNlIHVfY2hhciBmb3IgcmVjZWl2aW5nIFJORyBzZWVkIGZvciBjb25zaXN0ZW5jeS4KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBCdWcgIzEwMjg6IHNlbmQgZmluYWwgbm9uLXF1ZXJ5IG1lc3NhZ2VzIGZyb20KICAgUEFNIHZpYSBrZXlib2FyZC1pbnRlcmFjdGl2ZS4gIFBhdGNoIHRlc3RlZCBieSB0aGUgZm9sa3MgYXQgVmludGVsYS4KCjIwMDUwOTI3CiAtIChkdHVja2VyKSBbZW50cm9weS5jXSBSZW1vdmUgdW5uZWNlc3NhcnkgdGVzdHMgZm9yIGdldHVpZCBhbmQgZ2V0ZXVpZAogICBjYWxscywgc2luY2UgdGhleSBjYW4ndCBwb3NzaWJseSBmYWlsLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2VudHJvcHkuYyBlbnRyb3B5Lmggc3NoZC5jXSBQYXNzIFJORyBzZWVkIHRvIHRoZSByZWV4ZWMnZWQKICAgcHJvY2VzcyB3aGVuIHNzaGQgcmVsaWVzIG9uIHNzaC1yYW5kb20taGVscGVyLiAgU2hvdWxkIHJlc3VsdCBpbiBmYXN0ZXIKICAgbG9naW5zIG9uIHN5c3RlbXMgd2l0aG91dCBhIHJlYWwgcmFuZG9tIGRldmljZSBvciBwcm5nZC4gIG9rIGRqbUAKCjIwMDUwOTI0CiAtIChkdHVja2VyKSBbYXV0aDIuY10gTW92ZSBzdGFydF9wYW0oKSBjYWxscyBvdXQgb2YgaWYtZWxzZSBibG9jayB0byByZW1vdmUKICAgZHVwbGljYXRlIGNhbGwuICBvayBkam1ACgoyMDA1MDkyMgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVXNlIC1SIGxpbmtlciBmbGFnIGZvciBsaWJlZGl0IHRvbzsgcGF0Y2ggZnJvbQogICBza2VsZXRlbiBhdCBzaGlsbGVzdC5uZXQuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBGaXggaGVscCBmb3IgLS13aXRoLW9wZW5zYzsgcGF0Y2ggZnJvbSBza2VsZXRlbiBhdAogICBzaGlsbGVzdC5uZXQuCgoyMDA1MDkxOQogLSAodGltKSBbYWNsb2NhbC5tNCBjb25maWd1cmUuYWNdIERlbGV0ZSBhY2NvbmZpZy5oIGFuZCBhZGQgdGVtcGxhdGVzIHRvCiAgIEFDX0RFRklORSBhbmQgQUNfREVGSU5FX1VOUVVPVEVEIHRvIHF1aWV0IGF1dG9jb25mIDIuNTkgd2FybmluZyBtZXNzYWdlcy4KICAgb2sgZHR1Y2tlckAKCjIwMDUwOTEyCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEJ1ZyAxMDc4LiBGaXggLS13aXRob3V0LWtlcmJlcm9zNS4gUmVwb3J0ZWQgYnkKICAgTWlrZSBGcnlzaW5nZXIuCgoyMDA1MDkwOAogLSAodGltKSBbZGVmaW5lcy5oIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuY10gQWRkIGxvbmcgcGFzc3dvcmQgc3VwcG9ydCB0bwogICBPcGVuU2VydmVyIDYgYW5kIGFkZCBvc3I1YmlnY3J5cHQgc3VwcG9ydCBzbyB3aGVuIHNvbWVvbmUgbWlncmF0ZXMKICAgcGFzc3dvcmRzIGJldHdlZW4gVW5peFdhcmUgYW5kIE9wZW5TZXJ2ZXIgdGhleSB3aWxsIHN0aWxsIHdvcmsuIE9LIGR0dWNrZXJACgokSWQ6IENoYW5nZUxvZyx2IDEuNDgyMyAyMDA4LzAyLzEwIDExOjIzOjE4IGRqbSBFeHAgJAo=