MjAwODEyMjgKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTIvMDkgMDM6MjA6NDIKICAgICBbY2hhbm5lbHMuYyBzZXJ2Y29uZi5jXQogICAgIGNoYW5uZWxfcHJpbnRfYWRtX3Blcm1pdHRlZF9vcGVucygpIHNob3VsZCBkZWFsIHdpdGggYWxsIHRoZSBwcmludGluZwogICAgIGZvciB0aGF0IGNvbmZpZyBvcHRpb24uICBzdWdnZXN0ZWQgYnkgbWFya3VzQDsgb2sgbWFya3VzQCBkam1ACiAgICAgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTIvMDkgMDQ6MzI6MjIKICAgICBbYXV0aDItY2hhbGwuY10KICAgICByZXBsYWNlIGJ5LWhhbmQgc3RyaW5nIGJ1aWxkaW5nIHdpdGggeGFzcHJpbmYoKTsgb2sgZGVyYWFkdEAKICAgLSBzb2JyYWRvQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEyLzA5IDE1OjM1OjAwCiAgICAgW3NmdHAuMSBzZnRwLmNdCiAgICAgdXBkYXRlIGZvciB0aGUgc3lub3BzZXMgZGlzcGxheWVkIGJ5IHRoZSAnaGVscCcgY29tbWFuZCwgdGhlcmUgYXJlIGEKICAgICBmZXcgbWlzc2luZyBmbGFnczsgYWRkICdieWUnIHRvIHRoZSBvdXRwdXQgb2YgJ2hlbHAnOyBzb3J0aW5nIGFuZCBzcGFjaW5nLgogICAgIGptY0Agc3VnZ2VzdGVkIHJlcGxhY2luZyAuT28vLk9jIHdpdGggYSBzaW5nbGUgLk9wIG1hY3JvLgogICAgIG9rIGptY0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEyLzA5IDIyOjM3OjMzCiAgICAgW2NsaWVudGxvb3AuY10KICAgICBmaXggdHlwbyBpbiBlcnJvciBtZXNzYWdlCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwOC8xMi8xMCAwMzo1NToyMAogICAgIFthZGRybWF0Y2guY10KICAgICBvIGNhbm5vdCBiZSBOVUxMIGhlcmUgYnV0IHVzZSB4ZnJlZSgpIHRvIGJlIGNvbnNpc3RlbnQ7IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEyLzI5IDAxOjEyOjM2CiAgICAgW3NzaC1rZXlzY2FuLjFdCiAgICAgZml4IGV4YW1wbGUsIGRlZmF1bHQga2V5IHR5cGUgaXMgcnNhIGZvciAzKyB5ZWFyczsgZnJvbQogICAgIGZyZWRlcmljLnBlcnJpbkByZXNlbC5mcgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTIvMjkgMDI6MjM6MjYKICAgICBbcGF0aG5hbWVzLmhdCiAgICAgbm8gbmVlZCB0byBlc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBjb21tZW50cwogICAtIG9rYW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTIvMzAgMDA6NDY6NTYKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBhZGQgQWxsb3dBZ2VudEZvcndhcmRpbmcgdG8gYXZhaWxhYmxlIE1hdGNoIGtleXdvcmRzIGxpc3QKICAgICBvayBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDkvMDEvMDEgMjE6MTQ6MzUKICAgICBbY2hhbm5lbHMuY10KICAgICBjYWxsIGNoYW5uZWwgZGVzdHJveSBjYWxsYmFja3Mgb24gcmVjZWlwdCBvZiBvcGVuIGZhaWx1cmUgbWVzc2FnZXMuCiAgICAgZml4ZXMgY2xpZW50IGhhbmdzIHdoZW4gY29ubmVjdGluZyB0byBhIHNlcnZlciB0aGF0IGhhcyBNYXhTZXNzaW9ucz0wCiAgICAgc2V0IHNwb3R0ZWQgYnkgaW1vcmdhbiBBVCBuYXMubmFzYS5nb3Y7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDkvMDEvMDEgMjE6MTc6MzYKICAgICBba2V4Z2V4cy5jXQogICAgIGZpeCBoYXNoIGNhbGN1bGF0aW9uIGZvciBLRVhHRVg6IGhhc2ggb3ZlciB0aGUgb3JpZ2luYWwgY2xpZW50LXN1cHBsaWVkCiAgICAgdmFsdWVzIGFuZCBub3QgdGhlIHNhbml0eSBjaGVja2VkIHZlcnNpb25zIHRoYXQgd2UgYWN1dGFsbHkgdXNlOwogICAgIGJ6IzE1NDAgcmVwb3J0ZWQgYnkgam9obi5zbWl0aCBBVCBhcnJvd3MuZGVtb24uY28udWsKICAgICBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA5LzAxLzE0IDAxOjM4OjA2CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgc3VwcG9ydCBTT0NLUzRBIHByb3RvY29sLCBmcm9tIGR3bXcyIEFUIGluZnJhZGVhZC5vcmcgdmlhIGJ6IzE0ODI7CiAgICAgImxvb2tzIG9rIiBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwOS8wMS8xNSAxNzozODo0MwogICAgIFtyZWFkY29uZi5jXQogICAgIDEpIHVzZSBvYnNvbGV0ZSBpbnN0ZWFkIG9mIGFsaWFzIGZvciBjb25zaXN0ZW5jeQogICAgIDIpIG9Vc2VyS25vd25Ib3N0c0ZpbGUgbm90IG9ic29sZXRlIGJ1dCBvR2xvYmFsS25vd25Ib3N0c0ZpbGUyIGlzCiAgICAgICAgc28gbW92ZSB0aGUgY29tbWVudC4KICAgICAzKSByZW9yZGVyIHNvIGxpa2Ugb3B0aW9ucyBhcmUgdG9nZXRoZXIKICAgICBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA5LzAxLzIyIDA5OjQ2OjAxCiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBzZXNzaW9uLmNdCiAgICAgbWFrZSBDaGFubmVsLT5wYXRoIGFuIGFsbG9jYXRlZCBzdHJpbmcsIHNhdmluZyBhIGZldyBieXRlcyBoZXJlIGFuZAogICAgIHRoZXJlIGFuZCBmaXhpbmcgYnojMTM4MCBpbiB0aGUgcHJvY2Vzczsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOS8wMS8yMiAwOTo0OTo1NwogICAgIFtjaGFubmVscy5jXQogICAgIG9vcHMhIEkgY29tbWl0dGVkIHRoZSB3cm9uZyB2ZXJzaW9uIG9mIHRoZSBDaGFubmVsLT5wYXRoIGRpZmYsCiAgICAgaXQgd2FzIG1pc3Npbmcgc29tZSB0d2Vha3Mgc3VnZ2VzdGVkIGJ5IHN0ZXZlc2tACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA5LzAxLzIyIDEwOjAyOjM0CiAgICAgW2NsaWVudGxvb3AuYyBtaXNjLmMgcmVhZGNvbmYuYyByZWFkY29uZi5oIHNlcnZjb25mLmMgc2VydmNvbmYuaF0KICAgICBbc2VydmVybG9vcC5jIHNzaC1rZXlzY2FuLmMgc3NoLmMgc3NoZC5jXQogICAgIG1ha2UgYTJwb3J0KCkgcmV0dXJuIC0xIHdoZW4gaXQgZW5jb3VudGVycyBhbiBpbnZhbGlkIHBvcnQgbnVtYmVyCiAgICAgcmF0aGVyIHRoYW4gMCwgd2hpY2ggaXQgd2lsbCBub3cgdHJlYXQgYXMgdmFsaWQgKG5lZWRlZCBmb3IgZnV0dXJlIHdvcmspCiAgICAgYWRqdXN0IGN1cnJlbnQgY29uc3VtZXJzIG9mIGEycG9ydCgpIHRvIGNoZWNrIGl0cyByZXR1cm4gdmFsdWUgaXMgPD0gMCwKICAgICB3aGljaCBpbiB0dXJuIHJlcXVpcmVkIHNvbWUgdGhpbmdzIHRvIGJlIGNvbnZlcnRlZCBmcm9tIHVfc2hvcnQgPT4gaW50CiAgICAgbWFrZSB1c2Ugb2YgaW50IHZzLiB1X3Nob3J0IGNvbnNpc3RlbnQgaW4gc29tZSBvdGhlciBwbGFjZXMgdG9vCiAgICAgZmVlZGJhY2sgJiBvayBtYXJrdXNACgoyMDA5MDEwNwogLSAoZGptKSBbdWlkc3dhcC5jXSBieiMxNDEyOiBTdXBwb3J0ID4xNiBzdXBwbGVtZW50YWwgZ3JvdXBzIGluIE9TIFguCiAgIFBhdGNoIGJhc2VkIG9uIG9uZSBmcm9tIHZnaWZmaW4gQVQgYXBwbGUuY29tOyBvayBkdHVja2VyQAogLSAoZGptKSBbY2hhbm5lbHMuY10gYnojMTQxOTogc3VwcG9ydCAib24gZGVtYW5kIiBYMTEgZm9yd2FyZGluZyB2aWEKICAgbGF1bmNoZCBvbiBPUyBYOyBwYXRjaCBmcm9tIHZnaWZmaW4gQVQgYXBwbGUuY29tLCBzbGlnaHRseSB0d2Vha2VkOwogICBvayBkdHVja2VyQAogLSAoZGptKSBbY29udHJpYi9zc2gtY29weS1pZC4xIGNvbnRyaWIvc3NoLWNvcHktaWRdIGJ6IzE0OTI6IE1ha2UKICAgc3NoLWNvcHktaWQgY29weSBpZF9yc2EucHViIGJ5IGRlZmF1bHQgKGluc3RlYWQgb2YgdGhlIGxlZ2FjeSAiaWRlbnRpdHkiCiAgIGtleSkuIFBhdGNoIGZyb20gY2p3YXRzb24gQVQgZGViaWFuLm9yZwoKMjAwOTAxMDcKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hYyBkZWZpbmVzLmggb3BlbmJzZC1jb21wYXQvcG9ydC11dy5jCiAgIG9wZW5ic2QtY29tcGF0L3hjcnlwdC5jXSBBZGQgU0VDVVJFV0FSRSBzdXBwb3J0IHRvIE9wZW5TZXJ2ZXIgNiBTVlI1IEFCSS4KICAgT0sgZGptQCBkdHVja2VyQAogLSAodGltKSBbY29uZmlndXJlLmFjXSBNb3ZlIGNoZWNrX2Zvcl9saWJjcnlwdF9sYXRlcj0xIGluICotKi1zeXN2NSopIHNlY3Rpb24uCiAgIE9wZW5TZXJ2ZXIgNiBkb2Vzbid0IG5lZWQgbGliY3J5cHQuCgoyMDA4MTIwOQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEyLzA5IDAyOjM4OjE4CiAgICAgW2NsaWVudGxvb3AuY10KICAgICBUaGUgfkMgZXNjYXBlIGhhbmRsZXIgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgZm9yIG11bHRpcGxleGVkIHNlc3Npb25zIC0KICAgICBpdCBvcGVucyBhIGNvbW1hbmRsaW5lIG9uIHRoZSBtYXN0ZXIgc2Vzc2lvbiwgaW5zdGVhZCBvZiBvbiB0aGUgc2xhdmUKICAgICB0aGF0IHJlcXVlc3RlZCBpdC4gRGlzYWJsZSBpdCBvbiBzbGF2ZSBzZXNzaW9ucyB1bnRpbCBzdWNoIHRpbWUgYXMgaXQKICAgICBpcyBmaXhlZDsgYnojMTU0MyByZXBvcnQgZnJvbSBBZHJpYW4gQnJpZGdldHQgdmlhIENvbGluIFdhdHNvbgogICAgIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTIvMDkgMDI6Mzk6NTkKICAgICBbc2Z0cC5jXQogICAgIERlYWwgY29ycmVjdGx5IHdpdGggZmFpbHVyZXMgaW4gcmVtb3RlIHN0YXQoKSBvcGVyYXRpb24gaW4gc2Z0cCwKICAgICBjb3JyZWN0aW5nIGZhaWwtb24tZXJyb3IgYmVoYXZpb3VyIGluIGJhdGNobW9kZS4gYnojMTU0MSByZXBvcnQgYW5kCiAgICAgZml4IGZyb20gYW5lZHZlZGlja3kgQVQgZ21haWwuY29tOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEyLzA5IDAyOjU4OjE2CiAgICAgW3JlYWRjb25mLmNdCiAgICAgZG9uJ3QgbGVhdmUganVuayAoZnJlZSdkKSBwb2ludGVycyBhcm91bmQgaW4gRm9yd2FyZCAqZndkIGFyZ3VtZW50IG9uCiAgICAgZmFpbHVyZTsgYXZvaWRzIGRvdWJsZS1mcmVlIGluIH5DIC1MIGhhbmRsZXIgd2hlbiBnaXZlbiBhbiBpbnZhbGlkCiAgICAgZm9yd2FyZGluZyBzcGVjaWZpY2F0aW9uOyBieiMxNTM5IHJlcG9ydCBmcm9tIGFkZWpvbmcgQVQgZGViaWFuLm9yZwogICAgIHZpYSBDb2xpbiBXYXRzb247IG9rIG1hcmt1c0AgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTIvMDkgMDM6MDI6MzcKICAgICBbc2Z0cC4xIHNmdHAuY10KICAgICBjb3JyZWN0IHNmdHAoMSkgYW5kIGNvcnJlc3BvbmRpbmcgdXNhZ2Ugc3ludGF4OwogICAgIGJ6IzE1MTggcGF0Y2ggZnJvbSBpbW9yZ2FuIEFUIG5hcy5uYXNhLmdvdjsgb2sgZGVyYWFkdEAgaW1wcm92ZWQgZGlmZiBqbWNACgoyMDA4MTIwOAogLSAoZGptKSBbY29uZmlndXJlLmFjXSBieiMxNTM4OiBiZXR0ZXIgdGVzdCBmb3IgUHJvUG9saWNlL1NTUDogYWN0dWFsbHkKICAgdXNlIHNvbWUgc3RhY2sgaW4gbWFpbigpLgogICBSZXBvcnQgYW5kIHN1Z2dlc3RlZCBmaXggZnJvbSB2YXBpZXIgQVQgZ2VudG9vLm9yZwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEyLzAyIDE5OjAxOjA3CiAgICAgW2NsaWVudGxvb3AuY10KICAgICB3ZSBoYXZlIHRvIHVzZSB0aGUgcmVjaXBpZW50J3MgY2hhbm5lbCBudW1iZXIgKFJGQyA0MjU0KSBmb3IKICAgICBTU0gyX01TR19DSEFOTkVMX1NVQ0NFU1MvU1NIMl9NU0dfQ0hBTk5FTF9GQUlMVVJFIG1lc3NhZ2VzLAogICAgIG90aGVyd2lzZSB3ZSB0cmlnZ2VyICdOb24tcHVibGljIGNoYW5uZWwnIGVycm9yIG1lc3NhZ2VzIG9uIHNzaGQKICAgICBzeXN0ZW1zIHdpdGggY2xpZW50a2VlcGFsaXZlIGVuYWJsZWQ7IG5vdGljZWQgYnkgc3R1cm07IG9rIGRqbTsKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTIvMDIgMTk6MDg6NTkKICAgICBbc2VydmVybG9vcC5jXQogICAgIGJhY2tvdXQgMS4xNDksIHNpbmNlIGl0J3Mgbm90IG5lY2Vzc2FyeSBhbmQgb3BlbnNzaCBjbGllbnRzIHNlbmQKICAgICBicm9rZW4gQ0hBTk5FTF9GQUlMVVJFL1NVQ0NFU1MgbWVzc2FnZXMgc2luY2UgYWJvdXQgMjAwNDsgb2sgZGptQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwOC8xMi8wMiAxOTowOTozOAogICAgIFtjaGFubmVscy5jXQogICAgIHMvcmVtb3RlX2lkL2lkLyB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBjb2RlOyBvayBkam1ACgoyMDA4MTIwMQogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY3lnd2luL3tNYWtlZmlsZSxzc2gtaG9zdC1jb25maWd9XSAgQWRkIG5ldyBkb2MgZmlsZXMKICAgYW5kIHR3ZWFrIHRoZSBpcy1zc2hkLXJ1bm5pbmcgY2hlY2sgaW4gc3NoLWhvc3QtY29uZmlnLiAgUGF0Y2ggZnJvbQogICB2aW5zY2hlbiBhdCByZWRoYXQgY29tLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwOC8xMS8yMSAxNTo0NzozOAogICAgIFtwYWNrZXQuY10KICAgICBwYWNrZXRfZGlzY29ubmVjdCgpIG9uIHBhZGRpbmcgZXJyb3IsIHRvby4gIHNob3VsZCByZWR1Y2UgdGhlIHN1Y2Nlc3MKICAgICBwcm9iYWJpbGl0eSBmb3IgdGhlIENQTkktOTU3MDM3IFBsYWludGV4dCBSZWNvdmVyeSBBdHRhY2sgdG8gMl4tMTgKICAgICBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8xMS8zMCAxMTo1OToyNgogICAgIFttb25pdG9yX2ZkcGFzcy5jXQogICAgIFJldHJ5IHNlbmRtc2cvcmVjdm1zZyBvbiBFQUdBSU4gYW5kIEVJTlRSOyBvayBkam1ACgoyMDA4MTEyMwogLSAoZHR1Y2tlcikgW21vbml0b3JfZmRwYXNzLmNdIFJlZHVjZSBkaWZmIHZzIE9wZW5CU0QgYnkgbW92aW5nIHNvbWUKICAgIGRlY2xhcmF0aW9ucywgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgdW5pb24gbWVtYmVyIGFuZCBhZGRpbmcgd2hpdGVzcGFjZS4KICAgIGNtc2didWYudG1wIHRoaW5nIHNwb3R0ZWQgYnkgZGVzIGF0IGRlcyBubywgb2sgZGptIHNvbWUgdGltZSBhZ28uCgoyMDA4MTExOAogLSAodGltKSBbYWRkcm1hdGNoLmMgY29uZmlndXJlLmFjXSBTb21lIHBsYXRmb3JtcyBkbyBub3QgaGF2ZSBzaW42X3Njb3BlX2lkCiAgIG1lbWJlciBvZiBzb2NrYWRkcl9pbjYuIEFsc28gcmVwb3J0ZWQgaW4gQnVnIDE0OTEgYnkgRGF2aWQgTGVvbmFyZC4gT0sgYW5kCiAgIGZlZWRiYWNrIGJ5IGRqbUAKCjIwMDgxMTExCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzExLzA1IDExOjIyOjU0CiAgICAgW3NlcnZjb25mLmNdCiAgICAgcGFzc29yZCAtPiBwYXNzd29yZDsKICAgICBmaXhlcyB1c2VyLzU5NzUgZnJvbSBSZW5lIE1hcm91ZmkKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzExLzA3IDAwOjQyOjEyCiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBzcGVsbGluZy90eXBvIGluIGNvbW1lbnQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzExLzA3IDE4OjUwOjE4CiAgICAgW25jaGFuLmNdCiAgICAgYWRkIHNwYWNlIHRvIHNvbWUgbG9nL2RlYnVnIG1lc3NhZ2VzIGZvciByZWFkYWJpbGl0eTsgb2sgZGptQCBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8xMS8wNyAyMzozNDo0OAogICAgIFthdXRoMi1qcGFrZS5jXQogICAgIE1vdmUgSlBBS0UgZGVmaW5lIHRvIG1ha2UgbGlmZSBlYXNpZXIgZm9yIHBvcnRhYmxlLiAgb2sgZGptQAogICAtIHRvYmlhc0BjdnMub3BlbmJzZC5vcmcgMjAwOC8xMS8wOSAxMjozNDo0NwogICAgIFtzZXNzaW9uLmMgc3NoLjFdCiAgICAgdHlwbyBmaXhlZCAob3ZlcnJpZGVuIC0+IG92ZXJyaWRkZW4pCiAgICAgb2sgZXNwaWUsIGptYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTEvMTEgMDI6NTg6MDkKICAgICBbc2VydmNvbmYuY10KICAgICBVU0VfQUZTIG5vdCByZWZlcmVuY2VkIHNvIHJlbW92ZSAjaWZkZWYuICBmaXhlcyBzc2hkIC1UIG5vdCBwcmludGluZwogICAgIGtlcmJlcm9zZ2V0YWZzdG9rZW4uIG9rIGR0dWNrZXJACiAgICAgKElkIHN5bmMgb25seSwgd2Ugc3RpbGwgd2FudCB0aGUgaWZkZWYgaW4gcG9ydGFibGUpCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwOC8xMS8xMSAwMzo1NToxMQogICAgIFtjaGFubmVscy5jXQogICAgIGZvciBzc2hkIC1UIHByaW50ICdwZXJtaXRvcGVuIGFueScgdnMuICdwZXJtaXRvcGVuJyBmb3IgY2FzZSBvZiBubwogICAgIHBlcm1pdG9wZW4nczsgb2sgYW5kIGlucHV0IGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzExLzEwIDAyOjA2OjM1CiAgICAgW3JlZ3Jlc3MvcHV0dHktY2lwaGVycy5zaF0KICAgICBQdVRUWSBzdXBwb3J0cyBBRVMgQ1RSIG1vZGVzLCBzbyBpbnRlcm9wIHRlc3QgYWdhaW5zdCB0aGVtIHRvbwoKMjAwODExMDUKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8xMS8wMyAwODo1OTo0MQogICAgIFtzZXJ2Y29uZi5jXQogICAgIGluY2x1ZGUgTWF4U2Vzc2lvbnMgaW4gc3NoZCAtVCBvdXRwdXQ7IHBhdGNoIGZyb20gaW1vcmdhbiBBVCBuYXMubmFzYS5nb3YKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTEvMDQgMDc6NTg6MDkKICAgICBbYXV0aC5jXQogICAgIG5lZWQgdW5pc3RkLmggZm9yIGNsb3NlKCkgcHJvdG90eXBlCiAgICAgKElEIHN5bmMgb25seSkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTEvMDQgMDg6MjI6MTMKICAgICBbYXV0aC5oIGF1dGgyLmMgbW9uaXRvci5jIG1vbml0b3IuaCBtb25pdG9yX3dyYXAuYyBtb25pdG9yX3dyYXAuaF0KICAgICBbcmVhZGNvbmYuYyByZWFkY29uZi5oIHNlcnZjb25mLmMgc2VydmNvbmYuaCBzc2gyLmggc3NoX2NvbmZpZy41XQogICAgIFtzc2hjb25uZWN0Mi5jIHNzaGRfY29uZmlnLjUganBha2UuYyBqcGFrZS5oIHNjaG5vcnIuYyBhdXRoMi1qcGFrZS5jXQogICAgIFtNYWtlZmlsZS5pbl0KICAgICBBZGQgc3VwcG9ydCBmb3IgYW4gZXhwZXJpbWVudGFsIHplcm8ta25vd2xlZGdlIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uCiAgICAgbWV0aG9kIHVzaW5nIHRoZSBKLVBBS0UgcHJvdG9jb2wgZGVzY3JpYmVkIGluIEYuIEhhbywgUC4gUnlhbiwKICAgICAiUGFzc3dvcmQgQXV0aGVudGljYXRlZCBLZXkgRXhjaGFuZ2UgYnkgSnVnZ2xpbmciLCAxNnRoIFdvcmtzaG9wIG9uCiAgICAgU2VjdXJpdHkgUHJvdG9jb2xzLCBDYW1icmlkZ2UsIEFwcmlsIDIwMDguCiAgICAgCiAgICAgVGhpcyBtZXRob2QgYWxsb3dzIHBhc3N3b3JkLWJhc2VkIGF1dGhlbnRpY2F0aW9uIHdpdGhvdXQgZXhwb3NpbmcKICAgICB0aGUgcGFzc3dvcmQgdG8gdGhlIHNlcnZlci4gSW5zdGVhZCwgdGhlIGNsaWVudCBhbmQgc2VydmVyIGV4Y2hhbmdlCiAgICAgY3J5cHRvZ3JhcGhpYyBwcm9vZnMgdG8gZGVtb25zdHJhdGUgb2Yga25vd2xlZGdlIG9mIHRoZSBwYXNzd29yZCB3aGlsZQogICAgIHJldmVhbGluZyBub3RoaW5nIHVzZWZ1bCB0byBhbiBhdHRhY2tlciBvciBjb21wcm9taXNlZCBlbmRwb2ludC4KICAgICAKICAgICBUaGlzIGlzIGV4cGVyaW1lbnRhbCwgd29yay1pbi1wcm9ncmVzcyBjb2RlIGFuZCBpcyBwcmVzZW50bHkKICAgICBjb21waWxlZC10aW1lIGRpc2FibGVkICh0dXJuIG9uIC1ESlBBS0UgaW4gTWFrZWZpbGUuaW5jKS4KICAgICAKICAgICAianVzdCBjb21taXQgaXQuICBJdCBpc24ndCB0b28gaW50cnVzaXZlLiIgZGVyYWFkdEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzExLzA0IDE5OjE4OjAwCiAgICAgW3JlYWRjb25mLmNdCiAgICAgYmVjYXVzZSBwYXJzZV9mb3J3YXJkKCkgaXMgbm93IHVzZWQgdG8gcGFyc2UgYWxsIGZvcndhcmQgdHlwZXMgKERMUiksCiAgICAgYW5kIGl0IG1hbGxvYydzIHNwYWNlIGZvciBob3N0IHZhcmlhYmxlcywgd2UgZG9uJ3QgbmVlZCB0byBtYWxsb2MKICAgICBoZXJlLiAgZml4ZXMgc21hbGwgbWVtb3J5IGxlYWtzLgogICAgIAogICAgIHByZXZpb3VzbHkgZHluYW1pYyBmb3J3YXJkcyB3ZXJlIG5vdCBwYXJzZWQgaW4gcGFyc2VfZm9yd2FyZCgpIGFuZAogICAgIHNwYWNlIHdhcyBub3QgbWFsbG9jJ2QgaW4gdGhhdCBjYXNlLgogICAgIAogICAgIG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzExLzA1IDAzOjIzOjA5CiAgICAgW2NsaWVudGxvb3AuYyBzc2guMV0KICAgICBhZGQgZHluYW1pYyBmb3J3YXJkIGVzY2FwZSBjb21tYW5kIGxpbmU7IG9rIGRqbUAKCjIwMDgxMTAzCiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGhlbkBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8yNCAyMzo1NTozMAogICAgIFtzc2gta2V5Z2VuLjFdCiAgICAgQWRkICJzc2gta2V5Z2VuIC1GIC1sIiB0byBzeW5vcHNpcyAoZGlzcGxheXMgZmluZ2VycHJpbnQgZnJvbQogICAgIGtub3duX2hvc3RzKS4gIG9rIGRqbUAKICAgLSBncnVua0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8yNSAwNjo1NjozNQogICAgIFtzc2hfY29uZmlnXQogICAgIEFkZCBWaXN1YWxIb3N0S2V5IHRvIGV4YW1wbGUgZmlsZSwgb2sgZGptQAogICAtIGdydW5rQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzI1IDA3OjA1OjE2CiAgICAgW2tleS5jXQogICAgIEluIHJhbmRvbSBhcnQgdmlzdWFsaXphdGlvbiwgbWFrZSBzdXJlIHRvIHVzZSB0aGUgZW5kIG1hcmtlciBvbmx5IGF0IHRoZQogICAgIGVuZC4gIEluaXRpYWwgZGlmZiBieSBEaXJrIExvc3MsIHR3ZWFrcyBhbmQgb2sgZGptQAogIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzMxIDE0OjQ4OjI4CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgZG9uJ3QgYWxsb2NhdGUgc3BhY2UgZm9yIGVtcHR5IGJhbm5lcnM7IHJlcG9ydCB0OG0gYXQgY2VudHJ1bS5jejsKICAgICBvayBkZXJhYWR0CiAgIC0ga3J3QGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA4LzAyIDA0OjI5OjUxCiAgICAgW3NzaF9jb25maWcuNV0KICAgICB3aGl0ZXBzYWNlIC0+IHdoaXRlc3BhY2UuIEZyb20gTWF0dGhldyBDbGFya2UgdmlhIGJ1Z3NALgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wOC8yMSAwNDowOTo1NwogICAgIFtzZXNzaW9uLmNdCiAgICAgYWxsb3cgRm9yY2VDb21tYW5kIGludGVybmFsLXNmdHAgd2l0aCBhcmd1bWVudHMuIGJhc2VkIG9uIHBhdGNoIGZyb20KICAgICBtaWNoYWVsLmJhcmFiYW5vdiBBVCBnbWFpbC5jb207IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDkvMDYgMTI6MjQ6MTMKICAgICBba2V4LmNdCiAgICAgT3BlblNTTCAwLjkuOGggc3VwcGxpZXMgYSByZWFsIEVWUF9zaGEyNTYgc28gd2UgZG8gbm90IG5lZWQgb3VyCiAgICAgcmVwbGFjZW1lbnQgYW55bW9yZQogICAgIChJRCBzeW5jIG9ubHkgZm9yIHBvcnRhYmxlIC0gd2Ugc3RpbGwgbmVlZCB0aGlzKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wOS8xMSAxNDoyMjozNwogICAgIFtjb21wYXQuYyBjb21wYXQuaCBuY2hhbi5jIHNzaC5jXQogICAgIG9ubHkgc2VuZCBlb3cgYW5kIG5vLW1vcmUtc2Vzc2lvbnMgcmVxdWVzdHMgdG8gb3BlbnNzaCA1IGFuZCBuZXdlcjsKICAgICBmaXhlcyBpbnRlcm9wIHByb2JsZW1zIHdpdGggYnJva2VuIHNzaCB2MiBpbXBsZW1lbnRhdGlvbnM7IG9rIGRqbUAKICAgLSBtaWxsZXJ0QGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEwLzAyIDE0OjM5OjM1CiAgICAgW3Nlc3Npb24uY10KICAgICBDb252ZXJ0IGFuIHVuY2hlY2tlZCBzdHJkdXAgdG8geHN0cmR1cC4gIE9LIGRlcmFhZHRACiAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTAvMDMgMTM6MDg6MTIKICAgICBbc3NoZC44XQogICAgIGRvIG5vdCBnaXZlIGFuIGV4YW1wbGUgb2YgaG93IHRvIGNobW9kIGZpbGVzOiB3ZSBjYW4gcHJlc3VtZSB0aGUgdXNlcgogICAgIGtub3dzIHRoYXQuIHJlbW92ZXMgYW4gYW1iaWd1aXR5IGluIHRoZSBwZXJtaXNzaW9uIG9mIGF1dGhvcml6ZWRfa2V5czsKICAgICBvayBkZXJhYWR0CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwOC8xMC8wMyAyMzo1NjoyOAogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIFJlcGFpciBzdHJudmlzKCkgYnVmZmVyc2l6ZSBvZiA0Km4rMSwgd2l0aCB0ZXJtaW5hdGlvbiBnYXVyYW50ZWVkIGJ5IHRoZQogICAgIGZ1bmN0aW9uLgogICAgIHNwb3R0ZWQgYnkgZGVzQGZyZWVic2QsIHdobyBjb21taXRlZCBhbiBpbmNvcnJlY3QgZml4IHRvIHRoZSBmcmVlYnNkIHRyZWUKICAgICBhbmQgKGFzIGlzIGZhaXJseSB0eXBpY2FsKSBkaWQgbm90IHJlcG9ydCB0aGUgcHJvYmxlbSB0byB1cy4gIEJ1dCB0aGlzIGZpeAogICAgIGlzIGNvcnJlY3QuCiAgICAgb2sgZGptCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEwLzA4IDIzOjM0OjAzCiAgICAgW3NzaC4xIHNzaC5jXQogICAgIEFkZCAteSBvcHRpb24gdG8gZm9yY2UgbG9nZ2luZyB2aWEgc3lzbG9nIHJhdGhlciB0aGFuIHN0ZGVyci4KICAgICBVc2VmdWwgZm9yIGRhZW1vbmlzZWQgc3NoIGNvbm5lY3Rpb24gKHNzaCAtZikuIFBhdGNoIG9yaWdpbmFsbHkgZnJvbQogICAgIGFuZCBvaydkIGJ5IG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTAvMDkgMDM6NTA6NTQKICAgICBbc2VydmNvbmYuYyBzc2hkX2NvbmZpZy41XQogICAgIHN1cHBvcnQgc2V0dGluZyBQZXJtaXRFbXB0eVBhc3N3b3JkcyBpbiBhIE1hdGNoIGJsb2NrCiAgICAgcmVxdWVzdGVkIGluIFBSMzg5MTsgb2sgZHR1Y2tlckAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTAvMDkgMDY6NTQ6MjIKICAgICBbc3NoLmNdCiAgICAgYWRkIC15IHRvIHVzYWdlKCk7CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwOC8xMC8xMCAwNDo1NToxNgogICAgIFtzY3AuY10KICAgICBzcGVsbGluZyBpbiBjb21tZW50OyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwOC8xMC8xMCAwNTowMDoxMgogICAgIFtrZXkuY10KICAgICB0eXBvIGluIGVycm9yIG1lc3NhZ2U7IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEwLzEwIDE2OjQzOjI3CiAgICAgW3NzaF9jb25maWcuNV0KICAgICB1c2UgJ1ByaXZpbGVnZWQgcG9ydHMgY2FuIGJlIGZvcndhcmRlZCBvbmx5IHdoZW4gbG9nZ2luZyBpbiBhcyByb290IG9uCiAgICAgdGhlIHJlbW90ZSBtYWNoaW5lLicgZm9yIFJlbW90ZUZvcndhcmQganVzdCBsaWtlIHNzaC4xIC1SLgogICAgIG9rIGRqbUAgam1jQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTAvMTQgMTg6MTE6MzMKICAgICBbc3NoY29ubmVjdC5jXQogICAgIHVzZSAjZGVmaW5lIFJPUVVJRVQgaGVyZTsgbm8gYmluYXJ5IGNoYW5nZS4gb2sgZHR1Y2tlckAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEwLzE3IDE4OjM2OjI0CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBjb3JyZWN0IGFuZCBjbGFyaWZ5IFZpc3VhbEhvc3RLZXk7IG9rIGptY0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEwLzMwIDE5OjMxOjE2CiAgICAgW2NsaWVudGxvb3AuYyBzc2hkLmNdCiAgICAgZG9uJ3QgbmVlZCB0byAjaW5jbHVkZSAibW9uaXRvcl9mZHBhc3MuaCIKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzEwLzMxIDE1OjA1OjM0CiAgICAgW2Rpc3BhdGNoLmNdCiAgICAgcmVtb3ZlIHVudXNlZCAjZGVmaW5lIERJU1BBVENIX01JTjsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8xMS8wMSAwNDo1MDowOAogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIHNwcmlua2xlIEFSR1NVU0VEIG9uIGRpc3BhdGNoIGhhbmRsZXJzCiAgICAgbnVrZSBzdGFsZSB1bnVzdWVkIHByb3RvdHlwZQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTEvMDEgMDY6NDM6MzMKICAgICBbY2hhbm5lbHMuY10KICAgICBmaXggc29tZSB0eXBvcyBpbiBsb2cgbWVzc2FnZXM7IG9rIGRqbUAKICAgLSBzb2JyYWRvQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzExLzAxIDExOjE0OjM2CiAgICAgW3NzaC1rZXlzY2FuLjEgc3NoLWtleXNjYW4uY10KICAgICB0aGUgZWxsaXBzaXMgaXMgbm90IGFuIG9wdGlvbmFsIGFyZ3VtZW50OyB3aGlsZSBoZXJlLCBpbXByb3ZlIHNwYWNpbmcuCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwOC8xMS8wMSAxNzo0MDozMwogICAgIFtjbGllbnRsb29wLmMgcmVhZGNvbmYuYyByZWFkY29uZi5oIHNzaC5jXQogICAgIG1lcmdlIGR5bmFtaWMgZm9yd2FyZCBwYXJzaW5nIGludG8gcGFyc2VfZm9yd2FyZCgpOwogICAgICdpIHRoaW5rIHRoaXMgaXMgT0snIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzExLzAyIDAwOjE2OjE2CiAgICAgW3R0eW1vZGVzLmNdCiAgICAgcHJvdG9jb2wgMiB0dHkgbW9kZXMgc3VwcG9ydCBpcyBub3cgNy41IHllYXJzIG9sZCBzbyByZW1vdmUgdGhlc2UKICAgICBkZWJ1ZzMoKXM7IG9rIGRlcmFhZHRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwOC8xMS8wMyAwMTowNzowMgogICAgIFtyZWFkY29uZi5jXQogICAgIHJlbW92ZSB2YWx1ZWxlc3MgY29tbWVudAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMTEvMDMgMDI6NDQ6NDEKICAgICBbcmVhZGNvbmYuY10KICAgICBmaXggY29tbWVudAogLSAoZGptKSBbY29udHJpYi9jYWxkZXJhL3NzaC1ob3N0LWtleWdlbiBjb250cmliL3N1c2UvcmMuc3NoZF0KICAgTWFrZSBleGFtcGxlIHNjcmlwdHMgZ2VuZXJhdGUga2V5cyB3aXRoIGRlZmF1bHQgc2l6ZXMgcmF0aGVyIHRoYW4gZml4ZWQsCiAgIG5vbi1kZWZhdWx0IDEwMjQgYml0czsgcGF0Y2ggZnJvbSBpbW9yZ2FuIEFUIG5hcy5uYXNhLmdvdgogLSAoZGptKSBbY29udHJpYi9zc2hkLnBhbS5nZW5lcmljIGNvbnRyaWIvY2FsZGVyYS9zc2hkLnBhbV0KICAgW2NvbnRyaWIvcmVkaGF0L3NzaGQucGFtXSBNb3ZlIHBhbV9ub2xvZ2luIHRvIGFjY291bnQgZ3JvdXAgZnJvbQogICBpbmNvcnJlY3QgYXV0aCBncm91cCBpbiBleGFtcGxlIGZpbGVzOwogICBwYXRjaCBmcm9tIGltb3JnYW4gQVQgbmFzLm5hc2EuZ292CgoyMDA4MDkwNgogLSAoZHR1Y2tlcikgW2NvbmZpZy5ndWVzcyBjb25maWcuc3ViXSBVcGRhdGUgdG8gbGF0ZXN0IHZlcnNpb25zIGZyb20KICAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8gKDIwMDgtMDQtMTQgYW5kIDIwMDgtMDYtMTYKICAgcmVzcGVjdGl2ZWx5KS4KCjIwMDgwODMwCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuY10gY29ycmVjdGx5IGNoZWNrIGZvciBudW1iZXIgb2YgRkRzCiAgIGxhcmdlciB0aGFuIEZEX1NFVFNJWkUgKE9wZW5TU0ggb25seSBldmVyIHVzZXMgcG9sbCB3aXRoIG9uZSBmZCkuICBQYXRjaAogICBmcm9tIE5pY2hvbGFzIE1hcnJpb3R0LgoKMjAwODA3MjEKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8yMyAwNzozNjo1NQogICAgIFtzZXJ2Y29uZi5jXQogICAgIGRvIG5vdCB0cnkgdG8gcHJpbnQgb3B0aW9ucyB0aGF0IGhhdmUgYmVlbiBjb21waWxlLXRpbWUgZGlzYWJsZWQKICAgICBpbiBjb25maWcgdGVzdCBtb2RlIChzc2hkIC1UKTsgcmVwb3J0IGZyb20gbml4LWNvcnAgQVQgZXNwZXJpLm9yZy51awogICAgIG9rIGR0dWNrZXJACiAtIChkam0pIFtzZXJ2Y29uZi5jXSBQcmludCBVc2VQQU0gb3B0aW9uIGluIGNvbmZpZyB0ZXN0IG1vZGUgKHdoZW4gaXQKICAgaGFzIGJlZW4gY29tcGlsZWQgaW4pOyByZXBvcnQgZnJvbSBuaXgtY29ycCBBVCBlc3Blcmkub3JnLnVrCiAgIG9rIGR0dWNrZXJACgoyMDA4MDcyMQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzE4IDIyOjUxOjAxCiAgICAgW3NmdHAtc2VydmVyLjhdCiAgICAgbm8gbmVlZCBmb3IgLlBwIGJlZm9yZSBvciBhZnRlciAuU2g7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzIxIDA4OjE5OjA3CiAgICAgW3ZlcnNpb24uaF0KICAgICBvcGVuc3NoLTUuMQogLSAoZGptKSBbUkVBRE1FIGNvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjXQogICBbY29udHJpYi9zdXNlL29wZW5zc2guc3BlY10gVXBkYXRlIHZlcnNpb24gbnVtYmVyIGluIFJFQURNRSBhbmQgUlBNIHNwZWNzCiAtIChkam0pIFJlbGVhc2UgT3BlblNTSC01LjEKCjIwMDgwNzE3CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDcvMTcgMDg6NDg6MDAKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBzdHJudmlzIHByZWF1dGggYmFubmVyOyBwb2ludGVkIG91dCBieSBtcGZAIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDcvMTcgMDg6NTE6MDcKICAgICBbYXV0aDItaG9zdGJhc2VkLmNdCiAgICAgc3RyaXAgdHJhaWxpbmcgJy4nIGZyb20gaG9zdG5hbWUgd2hlbiBIb3N0YmFzZWRVc2VzTmFtZUZyb21QYWNrZXRPbmx5PXllcwogICAgIHJlcG9ydCBhbmQgcGF0Y2ggZnJvbSByZXMgQVQgcW94cC5uZXQgKGJ6IzEyMDApOyBvayBtYXJrdXNACiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmNdICBSZW1vdmUgbG9uZy11bm5lZWRlZCBjb21wYXQKICAgY29kZSwgcmVwbGFjZSB3aXRoIGVxdWl2YWxlbnQgY3lnd2luIGxpYnJhcnkgY2FsbC4gIFBhdGNoIGZyb20gdmluc2NoZW4KICAgYXQgcmVkaGF0LmNvbSwgb2sgZGptQC4KIC0gKGRqbSkgW3NzaGNvbm5lY3QyLmNdIHZpcy5oIGlzbid0IGF2YWlsYWJsZSBldmVyeXdoZXJlCgoyMDA4MDcxNgogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzE1IDAyOjIzOjE0CiAgICAgW3NmdHAuMV0KICAgICBudW1iZXIgb2YgcGlwZWxpbmVkIHJlcXVlc3RzIGlzIG5vdyA2NDsKICAgICBwcm9kZGVkIGJ5IElhaW4uTW9yZ2FuIEFUIG5hc2EuZ292CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzE2IDExOjUxOjE0CiAgICAgW2NsaWVudGxvb3AuY10KICAgICByZW5hbWUgdmFyaWFibGUgZmlyc3RfZ2MgLT4gbGFzdF9nYyAoc2luY2UgaXQgaXMgYWN0dWFsbHkgdGhlIGxhc3QKICAgICBpbiB0aGUgbGlzdCkuCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzE2IDExOjUyOjE5CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgdGhpcyBsb29wIGluZGV4IHNob3VsZCBiZSBhdXRvbWF0aWMsIG5vdCBzdGF0aWMKCjIwMDgwNzE0CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGhlbkBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8xMyAyMToyMjo1MgogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgQ2hhbmdlICJzc2gta2V5Z2VuIC1GIFtob3N0XSAtbCIgdG8gbm90IGRpc3BsYXkgcmFuZG9tIGFydCB1bmxlc3MKICAgICAtdiBpcyBhbHNvIHNwZWNpZmllZCwgbWFraW5nIGl0IGNvbnNpc3RlbnQgd2l0aCB0aGUgbWFudWFsIGFuZCBvdGhlcgogICAgIHVzZXMgb2YgLWwuCiAgICAgb2sgZ3J1bmtACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzEzIDIyOjEzOjA3CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgdXNlIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGluc3RlYWQgb2Ygc3RydWN0IHNvY2thZGRyIGZvciBhY2NlcHQoMikKICAgICBhZGRyZXNzIGFyZ3VtZW50LiBmcm9tIHZpc2liaWxpcyBBVCB5YWhvby5jb20gaW4gYnojMTQ4NTsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8xMyAyMjoxNjowMwogICAgIFtzZnRwLmNdCiAgICAgaW5jcmVhc2UgbnVtYmVyIG9mIHBpcGxlbGluZWQgcmVxdWVzdHMgc28gdGhleSBwcm9wZXJseSBmaWxsIHRoZQogICAgIChyZWNlbnRseSBpbmNyZWFzZWQpIGNoYW5uZWwgd2luZG93LiBwcm9tcHRlZCBieSByYXBpZXIgQVQgcHNjLmVkdTsKICAgICBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzE0IDAxOjU1OjU2CiAgICAgW3NmdHAtc2VydmVyLjhdCiAgICAgbWVudGlvbiByZXF1aXJlbWVudCBmb3IgL2Rldi9sb2cgaW5zaWRlIGNocm9vdCB3aGVuIHVzaW5nIHNmdHAtc2VydmVyCiAgICAgd2l0aCBDaHJvb3REaXJlY3RvcnkKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jXSBSZW5hbWUgdmFyaWFibGVzIHMvc2luL2luLyB0bwogICBhdm9pZCBjbGFzaCB3aXRoIHNpbigzKSBmdW5jdGlvbjsgcmVwb3J0ZWQgYnkKICAgY3Jpc3RpYW4uaW9uZXNjdS1pZGJvaHJuIEFUIGF4aXMuY29tCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9ycmVzdnBvcnQuY10gQWRkIHVuaXN0ZC5oIGZvciBtaXNzaW5nIGNsb3NlKCkKICAgcHJvdG90eXBlOyByZXBvcnRlZCBieSBjcmlzdGlhbi5pb25lc2N1LWlkYm9ocm4gQVQgYXhpcy5jb20KIC0gKGRqbSkgW3VtYWMuY10gUmVuYW1lIHZhcmlhYmxlIHMvYnVmZmVyX3B0ci9idWZwLyB0byBhdm9pZCBjbGFzaDsKICAgcmVwb3J0ZWQgYnkgY3Jpc3RpYW4uaW9uZXNjdS1pZGJvaHJuIEFUIGF4aXMuY29tCiAtIChkam0pIFtjb250cmliL2N5Z3dpbi9NYWtlZmlsZSBjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddCiAgIFtjb250cmliL2N5Z3dpbi9zc2gtdXNlci1jb25maWcgY29udHJpYi9jeWd3aW4vc3NoZC1pbmV0ZF0KICAgUmV2YW1wZWQgYW5kIHNpbXBsaWZpZWQgQ3lnd2luIHNzaC1ob3N0LWNvbmZpZyBzY3JpcHQgdGhhdCB1c2VzCiAgIHVuaWZpZWQgY3NpaCBjb25maWd1cmF0aW9uIHRvb2wuIFJlcXVpcmVzIHJlY2VudCBDeWd3aW4uCiAgIFBhdGNoIGZyb20gdmluc2NoZW4gQVQgcmVkaGF0LmNvbQoKMjAwODA3MTIKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8xMiAwNDo1Mjo1MAogICAgIFtjaGFubmVscy5jXQogICAgIHVuYnJlYWs7IG1vdmUgY2xlYXJpbmcgb2YgY2N0eCBzdHJ1Y3QgdG8gYmVmb3JlIGZpcnN0IHVzZQogICAgIHJlcG9ydGVkIGJ5IGRrcmF1c2VACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzEyIDA1OjMzOjQxCiAgICAgW3NjcC4xXQogICAgIGJldHRlciBkZXNjcmlwdGlvbiBmb3IgLWkgZmxhZzoKICAgICBzL1JTQSBhdXRoZW50aWNhdGlvbi9wdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uLwogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmMgb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmhdCiAgIHJldHVybiBFQUlfRkFNSUxZIHdoZW4gdHJ5aW5nIHRvIGxvb2t1cCB1bnN1cHBvcnRlZCBhZGRyZXNzIGZhbWlseTsKICAgZnJvbSB2aW5zY2hlbiBBVCByZWRoYXQuY29tCgoyMDA4MDcxMQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8wNyAwMDozMTo0MQogICAgIFt0dHltb2Rlcy5jXQogICAgIHdlIGRvbid0IG5lZWQgYXJnIGFmdGVyIHRoZSBkZWJ1ZzMoKSB3YXMgcmVtb3ZlZC4gIGZyb20gbGludC4KICAgICBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8wNyAyMzozMjo1MQogICAgIFtrZXkuY10KICAgICAvKk5PVFJFQUNIRUQqLyBmb3IgbGludCB3YXJuaW5nOgogICAgICAgd2FybmluZzogZnVuY3Rpb24ga2V5X2VxdWFsIGZhbGxzIG9mZiBib3R0b20gd2l0aG91dCByZXR1cm5pbmcgdmFsdWUKICAgICBvayBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzEwIDE4OjA1OjU4CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgbWlzc2luZyBiemVybzsgZnJvbSBtaWNrZXk7IG9rIGRqbUAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDcvMTAgMTg6MDg6MTEKICAgICBbY2xpZW50bG9vcC5jIG1vbml0b3IuYyBtb25pdG9yX3dyYXAuYyBwYWNrZXQuYyBwYWNrZXQuaCBzc2hkLmNdCiAgICAgc3luYyB2MSBhbmQgdjIgdHJhZmZpYyBhY2NvdW50aW5nOyBhZGQgaXQgdG8gc3NoZCwgdG9vOwogICAgIG9rIGRqbUAsIGR0dWNrZXJACgoyMDA4MDcwOQogLSAoZGptKSBbTWFrZWZpbGUuaW5dIFByaW50ICJhbGwgdGVzdHMgcGFzc2VkIiB3aGVuIGFsbCByZWdyZXNzIHRlc3RzIHBhc3MKIC0gKGRqbSkgW2F1dGgxLmNdIEZpeCBmb3JtYXQgc3RyaW5nIHZ1bG5lcmFiaWxpdHkgaW4gcHJvdG9jb2wgMSBQQU0KICAgYWNjb3VudCBjaGVjayBmYWlsdXJlIHBhdGguIFRoZSB2dWxuZXJhYmxlIGZvcm1hdCBidWZmZXIgaXMgc3VwcGxpZWQKICAgZnJvbSBQQU0gYW5kIHNob3VsZCBub3QgY29udGFpbiBhdHRhY2tlci1zdXBwbGllZCBkYXRhLgogLSAoZGptKSBbYXV0aC5jXSBNaXNzaW5nIHVuaXN0ZC5oIGZvciBjbG9zZSgpCiAtIChkam0pIFtjb25maWd1cmUuYWNdIEFkZCAtV2Zvcm1hdC1zZWN1cml0eSB0byBDRkxBR1MgZm9yIGdjYyAzLnggYW5kIDQueAoKMjAwODA3MDUKIC0gKGRqbSkgW2F1dGguY10gRml4ZWQgdGVzdCBmb3IgbG9ja2VkIGFjY291bnQgb24gSFAvVVggd2l0aCBzaGFkb3dlZAogICBwYXNzd29yZHMgZGlzYWJsZWQuIGJ6IzEwODMgcmVwb3J0ICYgcGF0Y2ggZnJvbSBzZW50aGlsa3VtYXJfc2VuIEFUCiAgIGhvdHBvcC5jb20sIHcvIGR0dWNrZXJACiAtIChkam0pIFthdG9taWNpby5jIGNvbmZpZ3VyZS5hY10gRGlzYWJsZSBwb2xsKCkgZmFsbGJhY2sgaW4gYXRvbWljaW92IGZvcgogICBUcnU2NC4gcmVhZHYgZG9lc24ndCBzZWVtIHRvIGJlIGEgY29tcGFyYWJsZSBvYmplY3QgdGhlcmUuCiAgIGJ6IzEzODYsIHBhdGNoIGZyb20gZHR1Y2tlckAgb2sgbWUKIC0gKGRqbSkgW01ha2VmaWxlLmluXSBQYXNzIHRob3VnaCBwYXNzIHRvIGNvbmNoIGZvciBpbnRlcm9wIHRlc3RzCiAtIChkam0pIFtjb25maWd1cmUuYWNdIHVuYnJlYWs6IHJlbW92ZSBleHRyYSBjbG9zaW5nIGJyYWNlCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDcvMDQgMjM6MDg6MjUKICAgICBbcGFja2V0LmNdCiAgICAgaGFuZGxlIEVJTlRSIGluIHBhY2tldF93cml0ZV9wb2xsKClsIG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzA0IDIzOjMwOjE2CiAgICAgW2F1dGgxLmMgYXV0aDIuY10KICAgICBNYWtlIHByb3RvY29sIDEgTWF4QXV0aFRyaWVzIGxvZ2ljIG1hdGNoIHByb3RvY29sIDIncy4KICAgICBEbyBub3QgdHJlYXQgdGhlIGZpcnN0IHByb3RvY29sIDIgYXV0aGVudGljYXRpb24gYXR0ZW1wdCBhcwogICAgIGEgZmFpbHVyZSBJRkYgaXQgaXMgZm9yIG1ldGhvZCAibm9uZSIuCiAgICAgTWFrZXMgTWF4QXV0aFRyaWVzJyB1c2VyLXZpc2libGUgYmVoYXZpb3VyIGlkZW50aWNhbCBmb3IKICAgICBwcm90b2NvbCAxIHZzIDIuCiAgICAgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDcvMDUgMDU6MTY6MDEKICAgICBbUFJPVE9DT0xdCiAgICAgZ3JhbW1hcgoKMjAwODA3MDQKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDcvMDIgMTM6MzA6MzQKICAgICBbYXV0aDIuY10KICAgICByZWFsbHkgcmVhbGx5IHJlbW92ZSB0aGUgZnJlZWJpZSAibm9uZSIgYXV0aCB0cnkgZm9yIHByb3RvY29sIDIKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDcvMDIgMTM6NDc6MzkKICAgICBbc3NoLjEgc3NoLmNdCiAgICAgV2hlbiBmb3JraW5nIGFmdGVyIGF1dGhlbnRpY2F0aW9uICgic3NoIC1mIikgd2l0aCBFeGl0T25Gb3J3YXJkRmFpbHVyZQogICAgIGVuYWJsZWQsIGRlbGF5IHRoZSBmb3JrIHVudGlsIGFmdGVyIHJlcGxpZXMgZm9yIGFueSAtUiBmb3J3YXJkcyBoYXZlCiAgICAgYmVlbiBzZWVuLiBBbGxvd3MgZm9yIHJvYnVzdCBkZXRlY3Rpb24gb2YgLVIgZm9yd2FyZCBmYWlsdXJlIHdoZW4KICAgICB1c2luZyAtZiAoc2ltaWxhciB0byBieiM5Mik7IG9rIGR0dWNrZXJACiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8wMyAyMTo0Njo1OAogICAgIFthdXRoMi1wdWJrZXkuY10KICAgICBhdm9pZCBuYXN0eSBkb3VibGUgZnJlZTsgb2sgZHR1Y2tlckAgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8wNCAwMzo0NDo1OQogICAgIFtzZXJ2Y29uZi5jIGdyb3VwYWNjZXNzLmggZ3JvdXBhY2Nlc3MuY10KICAgICBzdXBwb3J0IG5lZ2F0aW9uIG9mIGdyb3VwcyBpbiAiTWF0Y2ggZ3JvdXAiIGJsb2NrIChieiMxMzE1KTsgb2sgZHR1Y2tlckAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzA0IDAzOjQ3OjAyCiAgICAgW21vbml0b3IuY10KICAgICBNYWtlIGRlYnVnIGEgbGl0dGxlIGNsZWFyZXIuICBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzMwIDA4OjA3OjM0CiAgICAgW3JlZ3Jlc3Mva2V5LW9wdGlvbnMuc2hdCiAgICAgc2hlbGwgcG9ydGFiaWxpdHk6IHVzZSAiPSIgaW5zdGVhZCBvZiAiPT0iIGluIHRlc3QoMSkgZXhwcmVzc2lvbnMsCiAgICAgZG91YmxlLXF1b3RlIHN0cmluZyB3aXRoIGJhY2tzbGFzaCBlc2NhcGVkIC8KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMzAgMTA6MzE6MTEKICAgICBbcmVncmVzcy97cHV0dHktdHJhbnNmZXIscHV0dHkta2V4LHB1dHR5LWNpcGhlcnN9LnNoXQogICAgIHJlbW92ZSAic2V0IC1lIiBsZWZ0IG92ZXIgZnJvbSBkZWJ1Z2dpbmcKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMzAgMTA6NDM6MDMKICAgICBbcmVncmVzcy9jb25jaC1jaXBoZXJzLnNoXQogICAgIGV4cGxpY2l0bHkgZGlzYWJsZSBjb25jaCBvcHRpb25zIHRoYXQgY291bGQgaW50ZXJmZXJlIHdpdGggdGhlIHRlc3QKIC0gKGR0dWNrZXIpIFtzZnRwLXNlcnZlci5jXSBCdWcgIzE0NDc6IGZhbGwgYmFjayB0byByYWN5IHJlbmFtZSBpZiBsaW5rCiAgIHJldHVybnMgRVhERVYuICBQYXRjaCBmcm9tIE1pa2UgR2Fycmlzb24sIG9rIGRqbUAKIC0gKGRqbSkgW2F0b21pY2lvLmMgY2hhbm5lbHMuYyBjbGllbnRsb29wLmMgZGVmaW5lcy5oIGluY2x1ZGVzLmhdCiAgIFtwYWNrZXQuYyBzY3AuYyBzZXJ2ZXJsb29wLmMgc2Z0cC1jbGllbnQuYyBzc2gtYWdlbnQuYyBzc2gta2V5c2Nhbi5jXQogICBbc3NoZC5jXSBFeHBsaWNpdGx5IGhhbmRsZSBFV09VTERCTE9DSyB3aGVyZXZlciB3ZSBoYW5kbGUgRUFHQUlOLCBvbgogICBzb21lIHBsYXRmb3JtcyAoSFAgbm9uc3RvcCkgaXQgaXMgYSBkaXN0aW5jdCBlcnJubzsKICAgYnojMTQ2NyByZXBvcnRlZCBieSBzY29uZXUgQVQgeWFob28uY29tOyBvayBkdHVja2VyQAoKMjAwODA3MDIKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzMwIDA4OjA1OjU5CiAgICAgIFtQUk9UT0NPTC5hZ2VudF0KICAgICAgdHlwbzogcy9jb25zdHJhaW50X2RhdGUvY29uc3RyYWludF9kYXRhLwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8zMCAxMjoxNTozOQogICAgIFtzZXJ2ZXJsb29wLmNdCiAgICAgb25seSBwYXNzIGNoYW5uZWwgcmVxdWVzdHMgb24gc2Vzc2lvbiBjaGFubmVscyB0aHJvdWdoIHRvIHRoZSBzZXNzaW9uCiAgICAgY2hhbm5lbCBoYW5kbGVyLCBhdm9pZGluZyBzcHVyaW91cyBsb2cgbWVzc2FnZXM7IG9rISBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzMwIDEyOjE2OjAyCiAgICAgW25jaGFuLmNdCiAgICAgb25seSBzZW5kIGVvd0BvcGVuc3NoLmNvbSBub3RpZmljYXRpb25zIGZvciBzZXNzaW9uIGNoYW5uZWxzOyBvayEgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8zMCAxMjoxODozNAogICAgIFtQUk9UT0NPTF0KICAgICBjbGFyaWZ5IHRoYXQgZW93QG9wZW5zc2guY29tIGlzIG9ubHkgc2VudCBvbiBzZXNzaW9uIGNoYW5uZWxzCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNy8wMSAwNzoyMDo1MgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgQ2hlY2sgRXhpdE9uRm9yd2FyZEZhaWx1cmUgaWYgZm9yd2FyZGluZ3MgYXJlIGRpc2FibGVkIGR1ZSB0byBhIGZhaWxlZAogICAgIGhvc3Qga2V5IGNoZWNrLiAgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDcvMDEgMDc6MjQ6MjIKICAgICBbc3NoY29ubmVjdC5jIHNzaGQuY10KICAgICBTZW5kIENSIExGIGR1cmluZyBwcm90b2NvbCBiYW5uZXIgZXhjaGFuZ2VzLCBidXQgb25seSBmb3IgUHJvdG9jb2wgMiBvbmx5LAogICAgIGluIG9yZGVyIHRvIGNvbXBseSB3aXRoIFJGQyA0MjUzLiAgYnogIzE0NDMsIG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzAxIDIzOjEyOjQ3CiAgICAgW1BST1RPQ09MLmFnZW50XQogICAgIGZpeCBzb21lIHR5cG9zOyBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzAyIDAyOjI0OjE4CiAgICAgW3NzaGRfY29uZmlnIHNzaGRfY29uZmlnLjUgc3NoZC44IHNlcnZjb25mLmNdCiAgICAgaW5jcmVhc2UgZGVmYXVsdCBzaXplIG9mIHNzaCBwcm90b2NvbCAxIGVwaGVtZXJhbCBrZXkgZnJvbSA3NjggdG8gMTAyNAogICAgIGJpdHM7IHByb2RkZWQgYnkgJiBvayBkdHVja2VyQCBvayBkZXJhYWR0QAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDcvMDIgMTI6MDM6NTEKICAgICBbYXV0aC1yc2EuYyBhdXRoLmMgYXV0aDItcHVia2V5LmMgYXV0aC5oXQogICAgIE1lcmdlIGR1cGxpY2F0ZSBob3N0IGtleSBmaWxlIGNoZWNrcywgYmFzZWQgaW4gcGFydCBvbiBhIHBhdGNoIGZyb20gUm9iCiAgICAgSG9sbGFuZCB2aWEgYnogIzEzNDggLiAgQWxzbyBjaGVja3MgZm9yIG5vbi1yZWd1bGFyIGZpbGVzIGR1cmluZyBwcm90b2NvbAogICAgIDEgUlNBIGF1dGguICBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA3LzAyIDEyOjM2OjM5CiAgICAgW2F1dGgyLW5vbmUuYyBhdXRoMi5jXQogICAgIE1ha2UgcHJvdG9jb2wgMiBNYXhBdXRoVHJpZXMgYmVoYXZpb3VyIGEgbGl0dGxlIG1vcmUgc2Vuc2libGU6CiAgICAgQ2hlY2sgd2hldGhlciBjbGllbnQgaGFzIGV4Y2VlZGVkIE1heEF1dGhUcmllcyBiZWZvcmUgcnVubmluZwogICAgIGFuIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhbmQgc2tpcCBpdCBpZiB0aGV5IGhhdmUsIHByZXZpb3VzbHkgaXQKICAgICB3b3VsZCBhbHdheXMgYWxsb3cgb25lIHRyeSAoZm9yICJub25lIiBhdXRoKS4KICAgICBQcmVpbmNyZW1lbnQgZmFpbHVyZSBjb3VudCBiZWZvcmUgcG9zdC1hdXRoIHRlc3QgLSBwcmV2aW91c2x5IHRoaXMKICAgICBjaGVja2VkIGFuZCBwb3N0aW5jcmVtZW50ZWQsIGFsc28gdG8gYWxsb3cgb25lICJub25lIiB0cnkuCiAgICAgVG9nZXRoZXIsIHRoZXNlIHR3byBjaGFuZ2VzIGFsd2F5cyBjb3VudCB0aGUgIm5vbmUiIGF1dGggbWV0aG9kCiAgICAgd2hpY2ggY291bGQgYmUgc2tpcHBlZCBieSBhIG1hbGljaW91cyBjbGllbnQgKGUuZy4gYW4gU1NIIHdvcm0pCiAgICAgdG8gZ2V0IGFuIGV4dHJhIGF0dGVtcHQgYXQgYSByZWFsIGF1dGggbWV0aG9kLiBUaGV5IGFsc28gbWFrZQogICAgIE1heEF1dGhUcmllcz0wIGEgdXNlZnVsIHdheSB0byBibG9jayB1c2VycyBlbnRpcmVseSAoZXNwLiBpbiBhCiAgICAgc3NoZF9jb25maWcgTWF0Y2ggYmxvY2spLgogICAgIEFsc28sIG1vdmUgc2VuZGluZyBvZiBhbnkgcHJlYXV0aCBiYW5uZXIgZnJvbSAibm9uZSIgYXV0aCBtZXRob2QKICAgICB0byB0aGUgZmlyc3QgY2FsbCB0byBpbnB1dF91c2VyYXV0aF9yZXF1ZXN0KCksIHNvIHdvcm1zIHRoYXQgc2tpcAogICAgIHRoZSAibm9uZSIgbWV0aG9kIGdldCB0byBzZWUgaXQgdG9vLgoKMjAwODA2MzAKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTAgMjM6MTM6NDMKICAgICBbcmVncmVzcy9NYWtlZmlsZSByZWdyZXNzL2tleS1vcHRpb25zLnNoXQogICAgIEFkZCByZWdyZXNzIHRlc3QgZm9yIGtleSBvcHRpb25zLiAgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTEgMjM6MTE6NDAKICAgICBbcmVncmVzcy9NYWtlZmlsZV0KICAgICBEb24ndCBydW4gY2lwaGVyLXNwZWVkIHRlc3QgYnkgZGVmYXVsdDsgbWlzdGFrZW5seSBlbmFibGVkIGJ5IG1lCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzI4IDEzOjU3OjI1CiAgICAgW3JlZ3Jlc3MvTWFrZWZpbGUgcmVncmVzcy90ZXN0LWV4ZWMuc2ggcmVncmVzcy9jb25jaC1jaXBoZXJzLnNoXQogICAgIHZlcnkgYmFzaWMgcmVncmVzcyB0ZXN0IGFnYWluc3QgVHdpc3RlZCBDb25jaCBpbiAibWFrZSBpbnRlcm9wIgogICAgIHRhcmdldCAoY29uY2ggaXMgYXZhaWxhYmxlIGluIHBvcnRzL2RldmVsL3B5LXR3aXN0ZWQvY29uY2gpOwogICAgIG9rIG1hcmt1c0AKIC0gKGRqbSkgW3JlZ3Jlc3MvTWFrZWZpbGVdIHNlYXJjaCBmb3IgY29uY2ggYnkgcGF0aCwgbGlrZSB3ZSBkbyBwdXR0eQoKMjAwODA2MjkKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcnR5bmFzQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzIxIDA3OjQ2OjQ2CiAgICAgW3NmdHAuY10KICAgICB1c2Ugb3B0b3B0IHRvIGdldCBpbnZhbGlkIGZsYWcsIGluc3RlYWQgb2YgcmV0dXJuIHZhbHVlIG9mIGdldG9wdCwKICAgICB3aGljaCBpcyBhbHdheXMgJz8nOyAgb2sgZGptQAogICAtIG90dG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMjUgMTE6MTM6NDMKICAgICBba2V5LmNdCiAgICAgYWRkIGtleSBsZW5ndGggdG8gdmlzdWFsIGZpbmdlcnByaW50OyB6YXAgbWFnaWNhbCBjb25zdGFudHM7CiAgICAgb2sgZ3J1bmtAIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMjYgMDY6MTA6MDkKICAgICBbc2Z0cC1jbGllbnQuYyBzZnRwLXNlcnZlci5jXQogICAgIGFsbG93IHRoZSBzZnRwIGNobW9kKDIpLWVxdWl2YWxlbnQgb3BlcmF0aW9uIHRvIHNldCBzZXRbdWddaWQvc3RpY2t5CiAgICAgYml0cy4gTm90ZSB0aGF0IHRoaXMgb25seSBhZmZlY3RzIGV4cGxpY2l0IHNldHRpbmcgb2YgbW9kZXMgKGUuZy4gdmlhCiAgICAgc2Z0cCgxKSdzIGNobW9kIGNvbW1hbmQpIGFuZCBub3QgZmlsZSB0cmFuc2ZlcnMuIChieiMxMzEwKQogICAgIG9rIGRlcmFhZHRAIGF0IGMyazgKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMjYgMDk6MTk6NDAKICAgICBbZGguYyBkaC5oIG1vZHVsaS5jXQogICAgIHdoZW4gbG9hZGluZyBtb2R1bGkgZnJvbSAvZXRjL21vZHVsaSBpbiBzc2hkKDgpLCBjaGVjayB0aGF0IHRoZXkKICAgICBhcmUgb2YgdGhlIGV4cGVjdGVkICJzYWZlIHByaW1lIiBzdHJ1Y3R1cmUgYW5kIGhhdmUgaGFkCiAgICAgYXBwcm9wcmlhdGUgcHJpbWFsaXR5IHRlc3RzIHBlcmZvcm1lZDsKICAgICBmZWVkYmFjayBhbmQgb2sgZHR1Y2tlckAKICAgLSBncnVua0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8yNiAxMTo0NjozMQogICAgIFtyZWFkY29uZi5jIHJlYWRjb25mLmggc3NoLjEgc3NoX2NvbmZpZy41IHNzaGNvbm5lY3QuY10KICAgICBNb3ZlIFNTSCBGaW5nZXJwcmludCBWaXN1YWxpemF0aW9uIGF3YXkgZnJvbSBzaGFyaW5nIHRoZSBjb25maWcgb3B0aW9uCiAgICAgQ2hlY2tIb3N0SVAgdG8gYW4gb3duIGNvbmZpZyBvcHRpb24gbmFtZWQgVmlzdWFsSG9zdEtleS4KICAgICBXaGlsZSB0aGVyZSwgZml4IHRoZSBiZWhhdmlvdXIgdGhhdCBzc2ggd291bGQgZHJhdyBhIHJhbmRvbSBhcnQgcGljdHVyZQogICAgIG9uIGV2ZXJ5IG5ld2x5IHNlZW4gaG9zdCBldmVuIHdoZW4gdGhlIG9wdGlvbiB3YXMgbm90IGVuYWJsZWQuCiAgICAgcHJvZGRlZCBieSBkZXJhYWR0QCwgZGlzY3Vzc2lvbnMsCiAgICAgaGVscCBhbmQgb2sgbWFya3VzQCBkam1AIGR0dWNrZXJACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzI2IDIxOjExOjQ2CiAgICAgW3NzaC4xXQogICAgIGFkZCBWaXN1YWxIb3N0S2V5IHRvIHRoZSBsaXN0IG9mIG9wdGlvbnMgbGlzdGVkIGluIC1vOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8yOCAwNzoyNTowNwogICAgIFtQUk9UT0NPTF0KICAgICBzcGVsbGluZyBmaXhlcwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8yOCAxMzo1ODoyMwogICAgIFtzc2gtYWdlbnQuY10KICAgICByZWZ1c2UgdG8gYWRkIGEga2V5IHRoYXQgaGFzIHVua25vd24gY29uc3RyYWludHMgc3BlY2lmaWVkOwogICAgIG9rIG1hcmt1cwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8yOCAxNDowNToxNQogICAgIFtzc2gtYWdlbnQuY10KICAgICByZXNldCBnbG9iYWwgY29tcGF0IGZsYWcgYWZ0ZXIgcHJvY2Vzc2luZyBhIHByb3RvY29sIDIgc2lnbmF0dXJlCiAgICAgcmVxdWVzdCB3aXRoIHRoZSBsZWdhY3kgRFNBIGVuY29kaW5nIGZsYWcgc2V0OyBvayBtYXJrdXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMjggMTQ6MDg6MzAKICAgICBbUFJPVE9DT0wgUFJPVE9DT0wuYWdlbnRdCiAgICAgZG9jdW1lbnQgdGhlIHByb3RvY29sIHVzZWQgYnkgc3NoLWFnZW50OyAibG9va3Mgb2siIG1hcmt1c0AKCjIwMDgwNjI4CiAtIChkam0pIFtSRkMubnJvZmYgY29udHJpYi9jeWd3aW4vTWFrZWZpbGUgY29udHJpYi9zdXNlL29wZW5zc2guc3BlY10KICAgUkZDLm5yb2ZmIGxhY2tzIGEgbGljZW5zZSwgcmVtb3ZlIGl0IChpdCBpcyBsb25nIGdvbmUgaW4gT3BlbkJTRCkuCgoyMDA4MDYyNgogLSAoZGptKSBbTWFrZWZpbGUuaW4gbW9kdWxpLjVdIEluY2x1ZGUgbW9kdWxpKDUpIG1hbnBhZ2UgZnJvbSBPcGVuQlNELgogICAoYnojMTM3MikKIC0gKGRqbSkgWyBjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjIGNvbnRyaWIvcmVkaGF0L29wZW5zc2guc3BlY10KICAgW2NvbnRyaWIvc3VzZS9vcGVuc3NoLnNwZWNdIEluY2x1ZGUgbW9kdWxpLjUgaW4gUlBNIHNwZWMgZmlsZXMuCgoyMDA4MDYxNgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTYgMTM6MjI6NTMKICAgICBbc2Vzc2lvbi5jIGNoYW5uZWxzLmNdCiAgICAgUmVuYW1lIHRoZSBpc2F0dHkgYXJndW1lbnQgdG8gaXNfdHR5IHNvIHdlIGRvbid0IHNoYWRvdwogICAgIGlzYXR0eSgzKS4gIG9rIG1hcmt1c0AKIC0gKGR0dWNrZXIpIFtjaGFubmVscy5jXSBpc2F0dHkgLT4gaXNfdHR5IGhlcmUgdG9vLgoKMjAwODA2MTUKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEVuYWJsZSAtZm5vLWJ1aWx0aW4tbWVtc2V0IHdoZW4gdXNpbmcgZ2NjLgogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xNCAxNTo0OTo0OAogICAgIFtzc2hkLmNdCiAgICAgd3JhcCBsb25nIGxpbmUgYXQgODAgY2hhcnMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzE0IDE3OjA3OjExCiAgICAgW3NzaGQuY10KICAgICBlbnN1cmUgZGVmYXVsdCB1bWFzayBkaXNhbGxvd3MgYXQgbGVhc3QgZ3JvdXAgYW5kIHdvcmxkIHdyaXRlOyBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzE0IDE4OjMzOjQzCiAgICAgW3Nlc3Npb24uY10KICAgICBzdXBwcmVzcyB0aGUgd2FybmluZyBtZXNzYWdlIGZyb20gY2hkaXIoaG9tZWRpcikgZmFpbHVyZXMKICAgICB3aGVuIGNocm9vdGVkIChieiMxNDYxKTsgb2sgZHR1Y2tlcgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTQgMTk6NDI6MTAKICAgICBbc2NwLjFdCiAgICAgTWVudGlvbiB0aGF0IHNjcCBmb2xsb3dzIHN5bWxpbmtzIGR1cmluZyAtci4gIGJ6ICMxNDY2LAogICAgIGZyb20gbmVjdGFyIGF0IGFwcGxlCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xNSAxNjo1NTozOAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIE1heFNlc3Npb25zIGlzIGFsbG93ZWQgaW4gYSBNYXRjaCBibG9jayB0b28KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzE1IDE2OjU4OjQwCiAgICAgW3NlcnZjb25mLmMgc3NoZF9jb25maWcuNV0KICAgICBBbGxvdyBNYXhBdXRoVHJpZXMgd2l0aGluIGEgTWF0Y2ggYmxvY2suICBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzE1IDIwOjA2OjI2CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBzZXNzaW9uLmNdCiAgICAgZG9uJ3QgY2FsbCBpc2F0dHkoKSBvbiBhIHB0eSBtYXN0ZXIsIGluc3RlYWQgcGFzcyBhIGZsYWcgZG93biB0bwogICAgIGNoYW5uZWxfc2V0X2ZkcygpIGluZGljYXRpbmcgdGhhdCB0ZSBmZHMgcmVmZXIgdG8gYSB0dHkuIEZpeGVzIGEKICAgICBoYW5nIG9uIGV4aXQgb24gU29sYXJpcyAoYnojMTQ2MykgaW4gcG9ydGFibGUgYnV0IGlzIGFjdHVhbGx5CiAgICAgYSBnZW5lcmljIGJ1Zzsgb2sgZHR1Y2tlciBkZXJhYWR0IG1hcmt1cwoKMjAwODA2MTQKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3NpZ2FjdC5jXSBBdm9pZCBOVUxMIGRlcmVmcyBpbiBhbmNpZW50IHNpZ2FjdGlvbgogICByZXBsYWNlbWVudCBjb2RlOyBwYXRjaCBmcm9tIGlnaGlnaGkgQVQgZ21haWwuY29tIGluIGJ6IzEyNDA7CiAgIG9rIGR0dWNrZXIKCjIwMDgwNjEzCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMyAwOTo0NDozNgogICAgIFtwYWNrZXQuY10KICAgICBjb21waWxlIG9uIG9sZGVyIGdjYzsgbm8gZGVjbCBhZnRlciBjb2RlCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMyAxMzo1Njo1OQogICAgIFttb25pdG9yLmNdCiAgICAgQ2xlYXIga2V5IG9wdGlvbnMgaW4gdGhlIG1vbml0b3Igb24gZmFpbGVkIGF1dGhlbnRpY2F0aW9uLCBwcmV2ZW50cwogICAgIGFwcGx5aW5nIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIHRvIG5vbi1wdWJrZXkgYXV0aGVudGljYXRpb25zIGluCiAgICAgdGhlIGNhc2Ugd2hlcmUgcHVia2V5IGZhaWxzIGJ1dCBhbm90aGVyIG1ldGhvZCBzdWJzZXF1ZW50bHkgc3VjY2VlZHMuCiAgICAgYnogIzE0NzIsIGZvdW5kIGJ5IENvbGluIFdhdHNvbiwgb2sgbWFya3VzQCBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMyAxNDoxODo1MQogICAgIFthdXRoMi1wdWJrZXkuYyBhdXRoLXJob3N0cy5jXQogICAgIEluY2x1ZGUgdW5pc3RkLmggZm9yIGNsb3NlKCksIHByZXZlbnRzIHdhcm5pbmdzIGluIC1wb3J0YWJsZQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTMgMTc6MjE6MjAKICAgICBbbXV4LmNdCiAgICAgRnJpZW5kbGllciBlcnJvciBtZXNzYWdlcyBmb3IgbXV4IGZhbGxiYWNrLiAgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTMgMTg6NTU6MjIKICAgICBbc2NwLmNdCiAgICAgUHJldmVudCAtV3NpZ24tY29tcGFyZSB3YXJuaW5ncyBvbiBMUDY0IHN5c3RlbXMuICBieiAjMTE5Miwgb2sgZGVyYWFkdEAKICAgLSBncnVua0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMyAyMDoxMzoyNgogICAgIFtzc2guMV0KICAgICBFeHBsYWluIHRoZSB1c2Ugb2YgU1NIIGZwciB2aXN1YWxpemF0aW9uIHVzaW5nIHJhbmRvbSBhcnQsIGFuZCBjaXRlIHRoZQogICAgIG9yaWdpbmFsIHNjaWVudGlmaWMgcGFwZXIgaW5zcGlyaW5nIHRoYXQgdGVjaG5pcXVlLgogICAgIE11Y2ggaGVscCB3aXRoIEVuZ2xpc2ggYW5kIG5yb2ZmIGJ5IGptY0AsIHRoYW5rcy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTI3NjogYXZvaWQgbGlua2luZyBhZ2FpbnN0IGxpYmdzc2FwaSwgd2hpY2gKICAgZGVzcGl0ZSBpdHMgbmFtZSBkb2Vzbid0IHNlZW0gdG8gaW1wbGVtZW50IGFsbCBvZiBHU1NBUEkuICBQYXRjaCBmcm9tCiAgIEphbiBFbmdlbGhhcmR0LCBzYW5pdHkgY2hlY2tlZCBieSBTaW1vbiBXaWxraW5zb24uCgoyMDA4MDYxMgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMSAwNzozMDozNwogICAgIFtzc2hkLjhdCiAgICAga2lsbCB0cmFpbGluZyB3aGl0ZXNwYWNlOwogICAtIGdydW5rQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzExIDIxOjAxOjM1CiAgICAgW3NzaF9jb25maWcuNSBrZXkuaCByZWFkY29uZi5jIHJlYWRjb25mLmggc3NoLWtleWdlbi4xIHNzaC1rZXlnZW4uYyBrZXkuYwogICAgICBzc2hjb25uZWN0LmNdCiAgICAgSW50cm9kdWNlIFNTSCBGaW5nZXJwcmludCBBU0NJSSBWaXN1YWxpemF0aW9uLCBhIHRlY2huaXF1ZSBpbnNwaXJlZCBieSB0aGUKICAgICBncmFwaGljYWwgaGFzaCB2aXN1YWxpemF0aW9uIHNjaGVtZXMga25vd24gYXMgInJhbmRvbSBhcnQiLCBhbmQgYnkKICAgICBEYW4gS2FtaW5za3kncyBtdXNpbmdzIG9uIHRoZSBzdWJqZWN0IGR1cmluZyBhIEJsYWNrT3AgdGFsayBhdCB0aGUKICAgICAyM0MzIGluIEJlcmxpbi4KICAgICBTY2llbnRpZmljIHB1YmxpY2F0aW9uIChvcmlnaW5hbCBwYXBlcik6CiAgICAgIkhhc2ggVmlzdWFsaXphdGlvbjogYSBOZXcgVGVjaG5pcXVlIHRvIGltcHJvdmUgUmVhbC1Xb3JsZCBTZWN1cml0eSIsCiAgICAgUGVycmlnIEEuIGFuZCBTb25nIEQuLCAxOTk5LCBJbnRlcm5hdGlvbmFsIFdvcmtzaG9wIG9uIENyeXB0b2dyYXBoaWMKICAgICBUZWNobmlxdWVzIGFuZCBFLUNvbW1lcmNlIChDcnlwVEVDICc5OSkKICAgICBodHRwOi8vc3BhcnJvdy5lY2UuY211LmVkdS9+YWRyaWFuL3Byb2plY3RzL3ZhbGlkYXRpb24vdmFsaWRhdGlvbi5wZGYKICAgICBUaGUgYWxnb3JpdGhtIHVzZWQgaGVyZSBpcyBhIHdvcm0gY3Jhd2xpbmcgb3ZlciBhIGRpc2NyZXRlIHBsYW5lLAogICAgIGxlYXZpbmcgYSB0cmFjZSAoYXVnbWVudGluZyB0aGUgZmllbGQpIGV2ZXJ5d2hlcmUgaXQgZ29lcy4KICAgICBNb3ZlbWVudCBpcyB0YWtlbiBmcm9tIGRnc3RfcmF3IDJiaXQtd2lzZS4gIEJ1bXBpbmcgaW50byB3YWxscwogICAgIG1ha2VzIHRoZSByZXNwZWN0aXZlIG1vdmVtZW50IHZlY3RvciBiZSBpZ25vcmVkIGZvciB0aGlzIHR1cm4sCiAgICAgdGh1cyBzd2l0Y2hpbmcgdG8gdGhlIG90aGVyIGNvbG9yIG9mIHRoZSBjaGVzc2JvYXJkLgogICAgIEdyYXBocyBhcmUgbm90IHVuYW1iaWd1b3VzIGZvciBub3csIGJlY2F1c2UgY2lyY2xlcyBpbiBncmFwaHMgY2FuIGJlCiAgICAgd2Fsa2VkIGluIGVpdGhlciBkaXJlY3Rpb24uCiAgICAgZGlzY3Vzc2lvbnMgd2l0aCBzZXZlcmFsIHBlb3BsZSwKICAgICBoZWxwLCBjb3JyZWN0aW9ucyBhbmQgb2sgbWFya3VzQCBkam1ACiAgIC0gZ3J1bmtAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTEgMjE6Mzg6MjUKICAgICBbc3NoLWtleWdlbi5jXQogICAgIHNzaC1rZXlnZW4gLWx2IC1mIC9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkucHViCiAgICAgd291bGQgbm90IGRpc3BsYXkgeW91IHRoZSByYW5kb20gYXJ0IGFzIGludGVuZGVkLCBzcG90dGVkIGJ5IGNhbmFjYXJACiAgIC0gZ3J1bmtAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTEgMjI6MjA6NDYKICAgICBbc3NoLWtleWdlbi5jIHNzaC1rZXlnZW4uMV0KICAgICBzc2gta2V5Z2VuIHdvdWxkIHdyaXRlIGZpbmdlcnByaW50cyB0byBTVERPVVQsIGFuZCByYW5kb20gYXJ0IHRvIFNUREVSUiwKICAgICB0aGF0IGlzIG5vdCBob3cgaXQgd2FzIGVudmlzaW9uZWQuCiAgICAgQWxzbyBjb3JyZWN0IG1hbnBhZ2Ugc2F5aW5nIHRoYXQgLXYgaXMgbmVlZGVkIGFsb25nIHdpdGggLWwgZm9yIGl0IHRvIHdvcmsuCiAgICAgc3BvdHRlZCBieSBuYWRkeUAKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzExIDIzOjAyOjIyCiAgICAgW2tleS5jXQogICAgIHNpbXBsZXIgd2F5IG9mIGNvbXB1dGluZyB0aGUgYXVnbWVudGF0aW9uczsgb2sgZ3J1bmtACiAgIC0gZ3J1bmtAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTEgMjM6MDM6NTYKICAgICBbc3NoX2NvbmZpZy41XQogICAgIENoZWNrSG9zdElQIHNldCB0byBgYGZpbmdlcnByaW50Jycgd2lsbCBkaXNwbGF5IGJvdGggaGV4IGFuZCByYW5kb20gYXJ0CiAgICAgc3BvdHRlZCBieSBuYWRkeUAKICAgLSBncnVua0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMSAyMzo1MTo1NwogICAgIFtrZXkuY10KICAgICAjZGVmaW5lIHN0YXRlbWVudHMgdGhhdCBhcmUgbm90IGF0b21zIG5lZWQgYnJhY2VzIGFyb3VuZCB0aGVtLCBlbHNlIHRoZXkKICAgICB3aWxsIGNhdXNlIHRyb3VibGUgaW4gc29tZSBjYXNlcy4KICAgICBBbHNvIGRvIGEgY29tcHV0YXRpb24gb2YgLTEgb25jZSwgYW5kIG5vdCBpbiBhIGxvb3Agc2V2ZXJhbCB0aW1lcy4KICAgICBzcG90dGVkIGJ5IG90dG9ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMiAwMDowMzo0OQogICAgIFtkbnMuYyBjYW5vaG9zdC5jIHNzaGNvbm5lY3QuY10KICAgICBEbyBub3QgcGFzcyAiMCIgc3RyaW5ncyBhcyBwb3J0cyB0byBnZXRhZGRyaW5mbyBiZWNhdXNlIHRoZSBsb29rdXBzCiAgICAgY2FuIHNsb3cgdGhpbmdzIGRvd24gYW5kIHdlIG5ldmVyIHVzZSB0aGUgc2VydmljZSBpbmZvIGFueXdheS4gYnoKICAgICAjODU5LCBwYXRjaCBmcm9tIFlPU0hJRlVKSSBIaWRlYWtpIGFuZCBKb2huIERldml0b2ZyYW5jZXNjaGkuICBvawogICAgIGRlcmFhZHRAIGRqbUAKICAgICBkam0gYmVsaXZlcyB0aGF0IHRoZSByZWFzb24gZm9yIHRoZSAiMCIgc3RyaW5ncyBpcyB0byBlbnN1cmUgdGhhdAogICAgIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNhbGwgZ2V0YWRkcmluZm8gd2l0aCBib3RoIGhvc3QgYW5kIHBvcnQgYmVpbmcKICAgICBOVUxMLiAgSW4gdGhlIGNhc2Ugb2YgY2Fub2hvc3QuYyBob3N0IGlzIGEgbG9jYWwgYXJyYXkuICBJbiB0aGUKICAgICBjYXNlIG9mIHNzaGNvbm5lY3QuYywgaXQncyBjaGVja2VkIGZvciBudWxsIGltbWVkaWF0ZWx5IGJlZm9yZSB1c2UuCiAgICAgSW4gZG5zLmMgaXQgdWx0aW1hdGVseSBjb21lcyBmcm9tIHNzaC5jOm1haW4oKSBhbmQgaXMgZ3VhcmFudGVlZCB0bwogICAgIGJlIG5vbi1udWxsIGJ1dCBpdCdzIG5vdCBvYnZpb3VzLCBzbyBJIGFkZGVkIGEgd2FybmluZyBtZXNzYWdlIGluCiAgICAgY2FzZSBpdCBpcyBldmVyIHBhc3NlZCBhIG51bGwuCiAgIC0gZ3J1bmtAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTIgMDA6MTM6NTUKICAgICBbc3NoY29ubmVjdC5jXQogICAgIE1ha2Ugc3NoIHByaW50IHRoZSByYW5kb20gYXJ0IGFsc28gd2hlbiBzc2gnaW5nIHRvIGEgaG9zdCB1c2luZyBJUCBvbmx5LgogICAgIHNwb3R0ZWQgYnkgbmFkZHlALCBvayBhbmQgaGVscCBkam1AIGR0dWNrZXJACiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMiAwMDoxMzoxMwogICAgIFtrZXkuY10KICAgICB1c2UgYW4gb2RkIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zIGFuZCBhIHNlcGFyYXRlIHN0YXJ0IG1hcmtlciwgbG9va3MKICAgICBiZXR0ZXI7IG9rIGdydW5rQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMiAwMzo0MDo1MgogICAgIFtjbGllbnRsb29wLmggbXV4LmMgY2hhbm5lbHMuYyBjbGllbnRsb29wLmMgY2hhbm5lbHMuaF0KICAgICBFbmFibGUgfiBlc2NhcGVzIGZvciBtdWx0aXBsZXggc2xhdmUgc2Vzc2lvbnM7IGdpdmUgZWFjaCBjaGFubmVsCiAgICAgaXRzIG93biBlc2NhcGUgc3RhdGUgYW5kIGhvb2sgdGhlIGVzY2FwZSBmaWx0ZXJzIHVwIHRvIG11eGVkCiAgICAgY2hhbm5lbHMuIGJ6ICMxMzMxCiAgICAgTXV4IHNsYXZlcyBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhlIH5eWiBhbmQgfiYgZXNjYXBlcy4KICAgICBOQi4gdGhpcyBjaGFuZ2UgY3JhbmtzIHRoZSBtdXggcHJvdG9jb2wgdmVyc2lvbiwgc28gYSBuZXcgc3NoCiAgICAgbXV4IGNsaWVudCB3aWxsIG5vdCBiZSBhYmxlIHRvIGNvbm5lY3QgdG8gYSBydW5uaW5nIG9sZCBzc2gKICAgICBtdXggbWFzdGVyLgogICAgIG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEyIDA0OjA2OjAwCiAgICAgW2NsaWVudGxvb3AuaCBzc2guYyBjbGllbnRsb29wLmNdCiAgICAgbWFpbnRhaW4gYW4gb3JkZXJlZCBxdWV1ZSBvZiBvdXRzdGFuZGluZyBnbG9iYWwgcmVxdWVzdHMgdGhhdCB3ZQogICAgIGV4cGVjdCByZXBsaWVzIHRvLCBzaW1pbGFyIHRvIHRoZSBwZXItY2hhbm5lbCBjb25maXJtYXRpb24gcXVldWUuCiAgICAgVXNlIHRoaXMgcXVldWUgdG8gdmVyaWZ5IHN1Y2Nlc3Mgb3IgZmFpbHVyZSBmb3IgcmVtb3RlIGZvcndhcmQKICAgICBlc3RhYmxpc2htZW50IGluIGEgcmFjZSBmcmVlIHdheS4KICAgICBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMiAwNDoxNzo0NwogICAgIFtjbGllbnRsb29wLmNdCiAgICAgdGhhbGwgc2hhbHQgbm90IGNvZGUgcGFzdCB0aGUgZWlnaHRpZXRoIGNvbHVtbgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMiAwNDoyNDowNgogICAgIFtzc2guY10KICAgICB0aGFsIHNoYWx0IG5vdCBjb2RlIHBhc3QgdGhlIGVpZ2h0aWV0aCBjb2x1bW4KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTIgMDU6MTU6NDEKICAgICBbUFJPVE9DT0xdCiAgICAgZG9jdW1lbnQgdHVuQG9wZW5zc2guY29tIGZvcndhcmRpbmcgbWV0aG9kCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEyIDA1OjMyOjMwCiAgICAgW211eC5jXQogICAgIHNvbWUgbW9yZSBUT0RPIGZvciBtZQogICAtIGdydW5rQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEyIDA1OjQyOjQ2CiAgICAgW2tleS5jXQogICAgIHN1cHBseSB0aGUga2V5IHR5cGUgKHJzYTEsIHJzYSwgZHNhKSBhcyBhIGNhcHRpb24gaW4gdGhlIGZyYW1lIG9mIHRoZQogICAgIHJhbmRvbSBhcnQuICB3aGlsZSB0aGVyZSwgc3RyZXNzIHRoZSBmYWN0IHRoYXQgdGhlIGZpZWxkIGJhc2Ugc2hvdWxkIGF0CiAgICAgbGVhc3QgYmUgOCBjaGFyYWN0ZXJzIGZvciB0aGUgcGljdHVyZXMgdG8gbWFrZSBzZW5zZS4KICAgICBjb21tZW50IGFuZCBvayBkam1ACiAgIC0gZ3J1bmtAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTIgMDY6MzI6NTkKICAgICBba2V5LmNdCiAgICAgV2UgYWxyZWFkeSBtYXJrIHRoZSBzdGFydCBvZiB0aGUgd29ybSwgbm93IGFsc28gbWFyayB0aGUgZW5kIG9mIHRoZSB3b3JtCiAgICAgaW4gb3VyIHJhbmRvbSBhcnQgZHJhd2luZ3MuCiAgICAgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMiAxNToxOToxNwogICAgIFtjbGllbnRsb29wLmggY2hhbm5lbHMuaCBjbGllbnRsb29wLmMgY2hhbm5lbHMuYyBtdXguY10KICAgICBUaGUgbXVsdGlwbGV4aW5nIGVzY2FwZSBjaGFyIGhhbmRsZXIgY29tbWl0IGxhc3QgbmlnaHQgaW50cm9kdWNlZCBhCiAgICAgc21hbGwgbWVtb3J5IGxlYWsgcGVyIHNlc3Npb247IHBsdWcgaXQuCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMiAxNjozNTozMQogICAgIFtzc2hfY29uZmlnLjUgc3NoLmNdCiAgICAga2V5d29yZCBleHBhbnNpb24gZm9yIGxvY2FsY29tbWFuZC4gIG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTIgMTk6MTA6MDkKICAgICBbc3NoX2NvbmZpZy41IHNzaC1rZXlnZW4uMV0KICAgICB0d2VhayB0aGUgYXNjaWkgYXJ0IHRleHQ7IG9rIGdydW5rCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMiAyMDozODoyOAogICAgIFtzc2hkLmMgc3NoY29ubmVjdC5jIHBhY2tldC5oIG1pc2MuYyBtaXNjLmggcGFja2V0LmNdCiAgICAgTWFrZSBrZWVwYWxpdmUgdGltZW91dHMgYXBwbHkgd2hpbGUgd2FpdGluZyBmb3IgYSBwYWNrZXQsIHBhcnRpY3VsYXJseQogICAgIGR1cmluZyBrZXkgcmVuZWdvdGlhdGlvbiAoYnogIzEzNjMpLiAgV2l0aCBkam0gYW5kIE1hdHQgRGF5LCBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEyIDIwOjQ3OjA0CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgcHJpbnQgZXh0ZW5zaW9uIHJldmlzaW9ucyBmb3IgZXh0ZW5zaW9ucyB0aGF0IHdlIHVuZGVyc3RhbmQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTIgMjE6MDY6MjUKICAgICBbY2xpZW50bG9vcC5jXQogICAgIEkgd2FzIGNvYWxlc2NpbmcgZXhwZWN0ZWQgZ2xvYmFsIHJlcXVlc3QgY29uZmlybWF0aW9uIHJlcGxpZXMgYXQKICAgICB0aGUgd3JvbmcgZW5kIG9mIHRoZSBxdWV1ZSAtIGZpeDsgcHJvbXB0ZWQgYnkgbWFya3VzQAogICAtIGdydW5rQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEyIDIxOjE0OjQ2CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBtYWtlIHNzaC1rZXlnZW4gLWxmIHNob3cgdGhlIGtleSB0eXBlIGp1c3QgYXMgc3NoLWFkZCAtbCB3b3VsZCBkbyBpdAogICAgIG9rIGRqbUAgbWFya3VzQAogICAtIGdydW5rQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEyIDIyOjAzOjM2CiAgICAgW2tleS5jXQogICAgIGFkZCBteSBjb3B5cmlnaHQsIG9rIGRqbUAKICAgLSBpYW5AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTIgMjM6MjQ6NTgKICAgICBbc3NoY29ubmVjdC5jXQogICAgIHR3ZWFrIHdvcmRpbmcgaW4gbWVzc2FnZSwgb2sgZGVyYWFkdEAgam1jQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTMgMDA6MTI6MDIKICAgICBbc2Z0cC5oIGxvZy5oXQogICAgIHJlcGxhY2UgX19kZWFkIHdpdGggX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSwgbWFrZXMgdGhpbmdzCiAgICAgYSBsaXR0bGUgZWFzaWVyIHRvIHBvcnQuICBBbHNvLCBhZGQgaXQgdG8gc2lnZGllKCkuICBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEzIDAwOjE2OjQ5CiAgICAgW211eC5jXQogICAgIGZhbGwgYmFjayB0byBjcmVhdGluZyBhIG5ldyBUQ1AgY29ubmVjdGlvbiBvbiBtb3N0IG11bHRpcGxleGluZyBlcnJvcnMKICAgICAoc29ja2V0IGNvbm5lY3QgZmFpbCwgaW52YWxpZCB2ZXJzaW9uLCByZWZ1c2VkIHBlcm1pdHRpb24sIGNvcnJ1cHRlZAogICAgIG1lc3NhZ2VzLCBldGMuKTsgYnogIzEzMjkgb2sgZHR1Y2tlckAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEzIDAwOjQ3OjUzCiAgICAgW211eC5jXQogICAgIHVwY2FzdCBzaXplX3QgdG8gdV9sb25nIHRvIG1hdGNoIGZvcm1hdCBhcmc7IG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEzIDAwOjUxOjQ3CiAgICAgW21hYy5jXQogICAgIHVwY2FzdCBhbm90aGVyIHNpemVfdCB0byB1X2xvbmcgdG8gbWF0Y2ggZm9ybWF0CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMyAwMTozODoyMwogICAgIFttaXNjLmNdCiAgICAgdXBjYXN0IHVpZCB0byBsb25nIHdpdGggbWF0Y2hpbmcgJWxkLCBwcmV2ZW50cyB3YXJuaW5ncyBpbiBwb3J0YWJsZQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMyAwNDo0MDoyMgogICAgIFthdXRoMi1wdWJrZXkuYyBhdXRoLXJob3N0cy5jXQogICAgIHJlZnVzZSB0byByZWFkIH4vLnNob3N0cyBvciB+Ly5zc2gvYXV0aG9yaXplZF9rZXlzIHRoYXQgYXJlIG5vdAogICAgIHJlZ3VsYXIgZmlsZXM7IHJlcG9ydCBmcm9tIFNvbGFyIERlc2lnbmVyIHZpYSBDb2xpbiBXYXRzb24gaW4gYnojMTQ3MQogICAgIG9rIGR0dWNrZXJAIGRlcmFhZHQKICAtIChkdHVja2VyKSBbY2xpZW50bG9vcC5jIHNlcnZlcmxvb3AuY10gIGNoYW5uZWxfcmVnaXN0ZXJfZmlsdGVyIG5vdwogICAgdGFrZXMgMiBtb3JlIGFyZ3MuICB3aXRoIGRqbUAKICAtIChkdHVja2VyKSBbZGVmaW5lcy5oXSBCdWcgIzExMTI6IF9fZGVhZCBpcywgd2VsbCBkZWFkLiBCYXNlZCBvbiBhIHBhdGNoCiAgICBmcm9tIFRvZGQgVmllcmxpbmcuCiAgLSAoZHR1Y2tlcikgW2F1dGgtc2lhLmNdIEJ1ZyAjMTI0MTogc3VwcG9ydCBwYXNzd29yZCBleHBpcnkgb24gVHJ1NjQgU0lBCiAgICBzeXN0ZW1zLiAgUGF0Y2ggZnJvbSBSLiBTY290dCBCYWlsZXkuCiAgLSAoZHR1Y2tlcikgW3VtYWMuY10gU1RPUkVfVUlOVDMyX1JFVkVSU0VEIGFuZCBlbmRpYW5fY29udmVydCBhcmUgbmV2ZXIgdXNlZAogICAgb24gYmlnIGVuZGlhbiBtYWNoaW5lcywgc28gaWZkZWYgdGhlbSBmb3IgbGl0dGxlLWVuZGlhbiBvbmx5IHRvIHByZXZlbnQKICAgIHVudXNlZCBmdW5jdGlvbiB3YXJuaW5ncyBvbiBiaWctZW5kaWFucy4KICAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2V0ZW52LmNdIE1ha2Ugb2Zmc2V0cyBzaXplX3QgdG8gcHJldmVudAogICAgY29tcGlsZXIgd2FybmluZ3Mgb24gc29tZSBwbGF0Zm9ybXMuICBCYXNlZCBvbiBhIGRpc2N1c3Npb24gd2l0aCBvdHRvQAoKMjAwODA2MTEKIC0gKGRqbSkgW2NoYW5uZWxzLmMgY29uZmlndXJlLmFjXQogICBEbyBub3Qgc2V0IFNPX1JFVVNFQUREUiBvbiB3aWxkY2FyZCBYMTEgbGlzdGVuZXJzIChYMTFVc2VMb2NhbGhvc3Q9bm8pCiAgIGJ6IzE0NjQ7IG9rIGR0dWNrZXIgCgoyMDA4MDYxMAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMCAwMzo1NzoyNwogICAgIFtzZXJ2Y29uZi5jIG1hdGNoLmggc3NoZF9jb25maWcuNV0KICAgICBzdXBwb3J0IENJRFIgYWRkcmVzcyBtYXRjaGluZyBpbiBzc2hkX2NvbmZpZyAiTWF0Y2ggYWRkcmVzcyIgYmxvY2tzLCB3aXRoCiAgICAgZnVsbCBzdXBwb3J0IGZvciBuZWdhdGlvbiBhbmQgZmFsbC1iYWNrIHRvIGNsYXNzaWMgd2lsZGNhcmQgbWF0Y2hpbmcuCiAgICAgRm9yIGV4YW1wbGU6CiAgICAgTWF0Y2ggYWRkcmVzcyAxOTIuMC4yLjAvMjQsM2ZmZTpmZmZmOjovMzIsITEwLioKICAgICAgICAgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMKICAgICBhZGRybWF0Y2guYyBjb2RlIG1vc3RseSBsaWZ0ZWQgZnJvbSBmbG93ZCdzIGFkZHIuYwogICAgIGZlZWRiYWNrIGFuZCBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMCAwNDoxNzo0NgogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIGJldHRlciByZWZlcmVuY2UgZm9yIHBhdHRlcm4tbGlzdAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTAgMDQ6NTA6MjUKICAgICBbc3NoZC5jIGNoYW5uZWxzLmggY2hhbm5lbHMuYyBsb2cuYyBzZXJ2Y29uZi5jIGxvZy5oIHNlcnZjb25mLmggc3NoZC44XQogICAgIEFkZCBleHRlbmRlZCB0ZXN0IG1vZGUgKC1UKSBhbmQgY29ubmVjdGlvbiBwYXJhbWV0ZXJzIGZvciB0ZXN0IG1vZGUgKC1DKS4KICAgICAtVCBjYXVzZXMgc3NoZCB0byB3cml0ZSBpdHMgZWZmZWN0aXZlIGNvbmZpZ3VyYXRpb24gdG8gc3Rkb3V0IGFuZCBleGl0LgogICAgIC1DIGNhdXNlcyBhbnkgcmVsZXZhbnQgTWF0Y2ggcnVsZXMgdG8gYmUgYXBwbGllZCBiZWZvcmUgb3V0cHV0LiAgVGhlCiAgICAgY29tYmluYXRpb24gYWxsb3dzIHRlc2luZyBvZiB0aGUgcGFyc2VyIGFuZCBjb25maWcgZmlsZXMuICBvayBkZXJhYWR0IGRqbQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMCAwNzoxMjowMAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHR3ZWFrIHByZXZpb3VzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMCAwODoxNzo0MAogICAgIFtzc2hkLjggc3NoZC5jXQogICAgIC0gdXBkYXRlIHVzYWdlKCkKICAgICAtIGZpeCBTWU5PUFNJUywgYW5kIHNvcnQgb3B0aW9ucwogICAgIC0gc29tZSBtaW5vciBhZGRpdGlvbmFsIGZpeGVzCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8wOSAxODowNjozMgogICAgIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0KICAgICBEb24ndCBnZW5lcmF0ZSBwdXR0eSBrZXlzIGlmIHdlJ3JlIG5vdCBnb2luZyB0byB1c2UgdGhlbS4gIG9rIGRqbQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTAgMDU6MjM6MzIKICAgICBbcmVncmVzcy9hZGRybWF0Y2guc2ggcmVncmVzcy9NYWtlZmlsZV0KICAgICBSZWdyZXNzIHRlc3QgZm9yIE1hdGNoIENJRFIgcnVsZXMuICBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMCAxNToyMTo0MQogICAgIFt0ZXN0LWV4ZWMuc2hdCiAgICAgVXNlIGEgbW9yZSBwb3J0YWJsZSBjb25zdHJ1Y3QgZm9yIGNoZWNraW5nIGlmIHdlJ3JlIHJ1bm5pbmcgYSBwdXR0eSB0ZXN0CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMCAxNToyODo0OQogICAgIFt0ZXN0LWV4ZWMuc2hdCiAgICAgQWRkIHF1b3RlcwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTAgMTg6MjE6MjQKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGNsYXJpZnkgdGhhdCBIb3N0IHBhdHRlcm5zIGFyZSBzcGFjZS1zZXBhcmF0ZWQuICBvayBkZXJhYWR0CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzEwIDIyOjE1OjIzCiAgICAgW1BST1RPQ09MIHNzaC5jIHNlcnZlcmxvb3AuY10KICAgICBBZGQgYSBuby1tb3JlLXNlc3Npb25zQG9wZW5zc2guY29tIGdsb2JhbCByZXF1ZXN0IGV4dGVuc2lvbiB0aGF0IHRoZQogICAgIGNsaWVudCBzZW5kcyB3aGVuIGl0IGtub3dzIHRoYXQgaXQgd2lsbCBuZXZlciByZXF1ZXN0IGFub3RoZXIgc2Vzc2lvbgogICAgIChpLmUuIHdoZW4gc2Vzc2lvbiBtdWx0aXBsZXhpbmcgaXMgZGlzYWJsZWQpLiBUaGlzIGFsbG93cyBhIHNlcnZlciB0bwogICAgIGRpc2FsbG93IGZ1cnRoZXIgc2Vzc2lvbiByZXF1ZXN0cyBhbmQgdGVybWluYXRlIHRoZSBzZXNzaW9uLgogICAgIFdoeSB3b3VsZCBhIG5vbi1tdWx0aXBsZXhpbmcgY2xpZW50IGV2ZXIgaXNzdWUgYWRkaXRpb25hbCBzZXNzaW9uCiAgICAgcmVxdWVzdHM/IEl0IGNvdWxkIGhhdmUgYmVlbiBhdHRhY2tlZCB3aXRoIHNvbWV0aGluZyBsaWtlIFNTSCdqYWNrOgogICAgIGh0dHA6Ly93d3cuc3Rvcm0ubmV0Lm56L3Byb2plY3RzLzcKICAgICBmZWVkYmFjayAmIG9rIG1hcmt1cwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMCAyMzowNjoxOQogICAgIFthdXRoLW9wdGlvbnMuYyBtYXRjaC5jIHNlcnZjb25mLmMgYWRkcm1hdGNoLmMgc3NoZC44XQogICAgIHN1cHBvcnQgQ0lEUiBhZGRyZXNzIG1hdGNoaW5nIGluIC5zc2gvYXV0aG9yaXplZF9rZXlzIGZyb209Ii4uLiIgc3RhbnphcwogICAgIG9rIGFuZCBleHRlbnNpdmUgdGVzdGluZyBkdHVja2VyQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMTAgMjM6MjE6MzQKICAgICBbYnVmYXV4LmNdCiAgICAgVXNlICdcMCcgZm9yIGEgbnVsIGJ5dGUgcmF0aGVyIHRoYW4gdW5hZG9ybmVkIDAuICBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8xMCAyMzoxMzo0MwogICAgIFtNYWtlZmlsZSByZWdyZXNzL2tleS1vcHRpb25zLnNoXQogICAgIEFkZCByZWdyZXNzIHRlc3QgZm9yIGtleSBvcHRpb25zLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oXSBBZGQgc2luNl9zY29wZV9pZCB0byBzb2NrYWRkcl9pbjYKICAgc2luY2UgdGhlIG5ldyBDSURSIGNvZGUgaW4gYWRkbWF0Y2guYyByZWZlcmVuY2VzIGl0LgogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluIGNvbmZpZ3VyZS5hYyByZWdyZXNzL2FkZHJtYXRjaC5zaF0gU2tpcCBJUHY2CiAgIHNwZWNpZmljIHRlc3RzIG9uIHBsYXRmb3JtcyB0aGF0IGRvbid0IGRvIElQdjYuCiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW5dIERlZmluZSBURVNUX1NTSF9JUFY2IGluIG1ha2UncyBhcmd1bWVudHMgYXMgd2VsbAogICBhcyBlbnZpcm9ubWVudC4KIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbl0gTW92ZSBhZGRybWF0Y2gubyB0byBsaWJzc2guYSB3aGVyZSBpdCdzIG5lZWRlZCBub3cuCgoyMDA4MDYwOQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDYvMDggMTc6MDQ6NDEKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICBBZGQgY2FzZSBmb3IgRU5PU1lTIGluIGVycm5vX3RvX3BvcnRhYmxlOyBvayBkZXJhYWR0CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8wOCAyMDoxNToyOQogICAgIFtzZnRwLmMgc2Z0cC1jbGllbnQuYyBzZnRwLWNsaWVudC5oXQogICAgIEhhdmUgdGhlIHNmdHAgY2xpZW50IHN0b3JlIHRoZSBzdGF0dmZzIHJlcGxpZXMgaW4gd2lyZSBmb3JtYXQsCiAgICAgd2hpY2ggcHJldmVudHMgcHJvYmxlbXMgd2hlbiB0aGUgc2VydmVyJ3MgbmF0aXZlIHNpemVzIGV4Y2VlZCB0aGUKICAgICBjbGllbnQncy4KICAgICBBbHNvIGV4dGVuZHMgdGhlIHNpemVzIG9mIHRoZSByZW1haW5pbmcgMzJiaXQgd2lyZSBmb3JtYXQgdG8gNjRiaXQsCiAgICAgdGhleSdyZSBzcGVjaWZpZWQgYXMgdW5zaWduZWQgbG9uZyBpbiB0aGUgc3RhbmRhcmQuCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNi8wOSAxMzowMjozOQogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIEV4dGVuZCAzMmJpdCAtPiA2NGJpdCB2YWx1ZXMgZm9yIHN0YXR2ZnMgZXh0ZW5zaW9uIG1pc3NlZCBpbiBwcmV2aW91cwogICAgIGNvbW1pdC4KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA2LzA5IDEzOjM4OjQ2CiAgICAgW1BST1RPQ09MXQogICAgIFVzZSBhICRPcGVuQlNEIHRhZyBzbyBvdXIgc2NyaXB0cyB3aWxsIHN5bmMgY2hhbmdlcy4KCjIwMDgwNjA4CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaCBzZnRwLWNsaWVudC5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jCiAgIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmgKICAgb3BlbmJzZC1jb21wYXQvYnNkLXN0YXR2ZnMue2MsaH1dIEFkZCBhIG51bGwgaW1wbGVtZW50YXRpb24gb2Ygc3RhdHZmcyBhbmQKICAgZnN0YXR2ZnMgYW5kIHJlbW92ZSAjZGVmaW5lcyBhcm91bmQgc3RhdHZmcyBjb2RlLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBkZWZpbmVzLmggc2Z0cC1jbGllbnQuYyBNIHNmdHAtc2VydmVyLmNdIEFkZCBhCiAgIG1hY3JvIHRvIGNvbnZlcnQgZnNpZCB0byB1bnNpZ25lZCBsb25nIGZvciBwbGF0Zm9ybXMgd2hlcmUgZnNpZCBpcyBhCiAgIDItbWVtYmVyIGFycmF5LgoKMjAwODA2MDcKIC0gKGR0dWNrZXIpIFttdXguY10gSW5jbHVkZSBwYXRocy5oIGluc2lkZSBpZmRlZiBIQVZFX1BBVEhTX0guCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaCBzZnRwLWNsaWVudC5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jXQogICBEbyBub3QgZW5hYmxlIHN0YXR2ZnMgZXh0ZW5zaW9ucyBvbiBwbGF0Zm9ybXMgdGhhdCBkbyBub3QgaGF2ZSBzdGF0dmZzLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNS8xOSAwNjoxNDowMgogICAgIFtwYWNrZXQuY10gdW5icmVhayBwcm90b2NvbCBrZWVwYWxpdmUgdGltZW91dHMgYnojMTQ2NTsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDUvMTkgMTU6NDU6MDcKICAgICBbc3NodHR5LmMgdHR5bW9kZXMuYyBzc2hwdHkuaF0KICAgICBGaXggc2VuZGluZyB0dHkgbW9kZXMgd2hlbiBzdGRpbiBpcyBub3QgYSB0dHkgKGJ6IzExOTkpLiBQcmV2aW91c2x5CiAgICAgd2Ugd291bGQgc2VuZCB0aGUgbW9kZXMgY29ycmVzcG9uZGluZyB0byBhIHplcm9lZCBzdHJ1Y3QgdGVybWlvcywKICAgICB3aGVyZWFzIHdlIHNob3VsZCBoYXZlIGJlZW4gc2VuZGluZyBhbiBlbXB0eSBsaXN0IG9mIG1vZGVzLgogICAgIEJhc2VkIG9uIHBhdGNoIGZyb20gZGFuaWVsLnJpdHogQVQgYWxjYXRlbC5jaDsgb2sgZHR1Y2tlckAgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNS8xOSAxNTo0NjozMQogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgc3VwcG9ydCAtbCAocHJpbnQgZmluZ2VycHJpbnQpIGluIGNvbWJpbmF0aW9uIHdpdGggLUYgKGZpbmQgaG9zdCkgdG8KICAgICBzZWFyY2ggZm9yIGEgaG9zdCBpbiB+Ly5zc2gva25vd25faG9zdHMgYW5kIGRpc3BsYXkgaXRzIGZpbmdlcnByaW50OwogICAgIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDUvMTkgMjA6NTM6NTIKICAgICBbY2xpZW50bG9vcC5jXQogICAgIHVuYnJlYWsgdHJlZSBieSBjb21taXR0aW5nIHRoaXMgYml0IHRoYXQgSSBtaXNzZWQgZnJvbToKICAgICBGaXggc2VuZGluZyB0dHkgbW9kZXMgd2hlbiBzdGRpbiBpcyBub3QgYSB0dHkgKGJ6IzExOTkpLiBQcmV2aW91c2x5CiAgICAgd2Ugd291bGQgc2VuZCB0aGUgbW9kZXMgY29ycmVzcG9uZGluZyB0byBhIHplcm9lZCBzdHJ1Y3QgdGVybWlvcywKICAgICB3aGVyZWFzIHdlIHNob3VsZCBoYXZlIGJlZW4gc2VuZGluZyBhbiBlbXB0eSBsaXN0IG9mIG1vZGVzLgogICAgIEJhc2VkIG9uIHBhdGNoIGZyb20gZGFuaWVsLnJpdHogQVQgYWxjYXRlbC5jaDsgb2sgZHR1Y2tlckAgbWFya3VzQCAKCjIwMDgwNjA0CiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9ic2QtYXJjNHJhbmRvbS5jXSBGaXggbWF0aCBidWcgdGhhdCBjYXVzZWQgYmlhcwogICBpbiBhcmM0cmFuZG9tX3VuaWZvcm0gd2l0aCB1cHBlcl9ib3VuZCBpbiAoMl4zMCwyKjMxKS4gTm90ZSB0aGF0IAogICBPcGVuU1NIIGRpZCBub3QgbWFrZSByZXF1ZXN0cyB3aXRoIHVwcGVyIGJvdW5kcyBpbiB0aGlzIHJhbmdlLgoKMjAwODA1MTkKIC0gKGRqbSkgW2NvbmZpZ3VyZS5hYyBtdXguYyBzZnRwLmMgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW5dCiAgIFtvcGVuYnNkLWNvbXBhdC9mbXRfc2NhbGVkLmMgb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0KICAgRml4IGNvbXBpbGF0aW9uIG9uIExpbnV4LCBpbmNsdWRpbmcgcHVsbGluZyBpbiBmbXRfc2NhbGVkKDMpCiAgIGltcGxlbWVudGF0aW9uIGZyb20gT3BlbkJTRCdzIGxpYnV0aWwuCgoyMDA4MDUxOAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA0LzA0IDA1OjE0OjM4CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgQ2hyb290RGlyZWN0b3J5IGlzIHN1cHBvcnRlZCBpbiBNYXRjaCBibG9ja3MgKGluIGZhY3QsIGl0IGlzIG1vc3QgdXNlZnVsCiAgICAgdGhlcmUpLiBTcG90dGVkIGJ5IE1pbnN0cmVsIEFUIG1pbnN0cmVsLm9yZy51awogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNC8wNCAwNjo0NDoyNgogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIG9vcHMsIHNvbWUgdW5yZWxhdGVkIHN0dWZmIGNyZXB0IGludG8gdGhhdCBjb21taXQgLSBiYWNrb3V0LgogICAgIHNwb3R0ZWQgYnkgam1jQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNC8wNSAwMjo0NjowMgogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIGlzIHN1cHBvcnRlZCB1bmRlciBNYXRjaCB0b28KIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2JzZC1hcmM0cmFuZG9tLmMgb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuY10KICAgICBbY29uZmlndXJlLmFjXSBJbXBsZW1lbnQgYXJjNHJhbmRvbV9idWYoKSwgaW1wb3J0IGltcGxlbWVudGF0aW9uIG9mCiAgICAgYXJjNHJhbmRvbV91bmlmb3JtKCkgZnJvbSBPcGVuQlNECiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9ic2QtYXJjNHJhbmRvbS5jXSBXYXJuaW5nIGZpeGVzCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jXSBuZWVkcyBzeXMvcXVldWUuaAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA0LzEzIDAwOjIyOjE3CiAgICAgW2RoLmMgc3NoZC5jXQogICAgIFVzZSBhcmM0cmFuZG9tX2J1ZigpIHdoZW4gcmVxdWVzdGluZyBtb3JlIHRoYW4gYSBzaW5nbGUgd29yZCBvZiBvdXRwdXQKICAgICBVc2UgYXJjNHJhbmRvbV91bmlmb3JtKCkgd2hlbiB0aGUgZGVzaXJlZCByYW5kb20gbnVtYmVyIHVwcGVyIGJvdW5kCiAgICAgaXMgbm90IGEgcG93ZXIgb2YgdHdvCiAgICAgb2sgZGVyYWFkdEAgbWlsbGVydEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDQvMTggMTI6MzI6MTEKICAgICBbc2Z0cC1jbGllbnQuYyBzZnRwLWNsaWVudC5oIHNmdHAtc2VydmVyLmMgc2Z0cC4xIHNmdHAuYyBzZnRwLmhdCiAgICAgaW50cm9kdWNlIHNmdHAgZXh0ZW5zaW9uIG1ldGhvZHMgc3RhdHZmc0BvcGVuc3NoLmNvbSBhbmQKICAgICBmc3RhdHZmc0BvcGVuc3NoLmNvbSB0aGF0IGltcGxlbWVudCBzdGF0dmZzKDIpLWxpa2Ugb3BlcmF0aW9ucywKICAgICBiYXNlZCBvbiBhIHBhdGNoIGZyb20gbWlrbG9zIEFUIHN6ZXJlZGkuaHUgKGJ6IzEzOTkpCiAgICAgYWxzbyBhZGQgYSAiZGYiIGNvbW1hbmQgdG8gdGhlIHNmdHAgY2xpZW50IHRoYXQgdXNlcyB0aGUKICAgICBzdGF0dmZzQG9wZW5zc2guY29tIHRvIHByb2R1Y2UgYSBkZigxKS1saWtlIGRpc3BsYXkgb2YgZmlsZXN5c3RlbQogICAgIHNwYWNlIGFuZCBpbm9kZSB1dGlsaXNhdGlvbgogICAgIG9rIG1hcmt1c0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDQvMTggMTc6MTU6NDcKICAgICBbc2Z0cC4xXQogICAgIG1hY3JvIGZpeGFnZTsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDQvMTggMjI6MDE6MzMKICAgICBbc2Vzc2lvbi5jXQogICAgIHJlbW92ZSB1bm5lY2Nlc3NhcnkgcGFyZW50aGVzZXMKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA0LzI5IDExOjIwOjMxCiAgICAgW21vbml0b3JfbW0uaF0KICAgICBnYXJiYWdlIGNvbGxlY3QgdHdvIHVudXNlZCBmaWVsZHMgaW4gc3RydWN0IG1tX21hc3Rlcjsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNC8zMCAxMDoxNDowMwogICAgIFtzc2gta2V5c2Nhbi4xIHNzaC1rZXlzY2FuLmNdCiAgICAgZGVmYXVsdCB0byByc2EgKHByb3RvY29sIDIpIGtleXMsIGluc3RlYWQgb2YgcnNhMSBrZXlzOyBzcG90dGVkIGJ5CiAgICAgbGFyc25vb2RlbiBBVCBvcGVub2ZmaWNlLm9yZwogICAtIHB5ckBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNS8wNyAwNTo0OTozNwogICAgIFtzZXJ2Y29uZi5jIHNlcnZjb25mLmggc2Vzc2lvbi5jIHNzaGRfY29uZmlnLjVdCiAgICAgRW5hYmxlIHRoZSBBbGxvd0FnZW50Rm9yd2FyZGluZyBvcHRpb24gaW4gc3NoZF9jb25maWcgKGdsb2JhbCBhbmQgbWF0Y2gKICAgICBjb250ZXh0KSwgdG8gc3BlY2lmeSBpZiBhZ2VudHMgc2hvdWxkIGJlIHBlcm1pdHRlZCBvbiB0aGUgc2VydmVyLgogICAgIEFzIHRoZSBtYW4gcGFnZSBzdGF0ZXM6CiAgICAgYGBOb3RlIHRoYXQgZGlzYWJsaW5nIEFnZW50IGZvcndhcmRpbmcgZG9lcyBub3QgaW1wcm92ZSBzZWN1cml0eQogICAgIHVubGVzcyB1c2VycyBhcmUgYWxzbyBkZW5pZWQgc2hlbGwgYWNjZXNzLCBhcyB0aGV5IGNhbiBhbHdheXMgaW5zdGFsbAogICAgIHRoZWlyIG93biBmb3J3YXJkZXJzLicnCiAgICAgb2sgZGptQCwgb2sgYW5kIGEgbWlsZCBmcm93biBtYXJrdXNACiAgIC0gcHlyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA1LzA3IDA2OjQzOjM1CiAgICAgW3NzaGRfY29uZmlnXQogICAgIHB1c2ggdGhlIHNzaGRfY29uZmlnIGJpdHMgaW4sIHNwb3R0ZWQgYnkgYWphY291dG90QAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNS8wNyAwODowMDoxNAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHNvcnQ7CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA1LzA4IDA2OjU5OjAxCiAgICAgW2J1ZmF1eC5jIGJ1ZmZlci5oIGNoYW5uZWxzLmMgcGFja2V0LmMgcGFja2V0LmhdCiAgICAgYXZvaWQgZXh0cmEgbWFsbG9jL2NvcHkvZnJlZSB3aGVuIHJlY2VpdmluZyBkYXRhIG92ZXIgdGhlIG5ldDsKICAgICB+MTAlIHNwZWVkdXAgZm9yIGxvY2FsaG9zdC1zY3A7IG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDUvMDggMTI6MDI6MjMKICAgICBbYXV0aC1vcHRpb25zLmMgYXV0aDEuYyBjaGFubmVscy5jIGNoYW5uZWxzLmggY2xpZW50bG9vcC5jIGdzcy1zZXJ2LmNdCiAgICAgW21vbml0b3IuYyBtb25pdG9yX3dyYXAuYyBuY2hhbi5jIHNlcnZjb25mLmMgc2VydmVybG9vcC5jIHNlc3Npb24uY10KICAgICBbc3NoLmMgc3NoZC5jXQogICAgIEltcGxlbWVudCBhIGNoYW5uZWwgc3VjY2Vzcy9mYWlsdXJlIHN0YXR1cyBjb25maXJtYXRpb24gY2FsbGJhY2sKICAgICBtZWNoYW5pc20uIEVhY2ggY2hhbm5lbCBtYWludGFpbnMgYSBxdWV1ZSBvZiBjYWxsYmFja3MsIHdoaWNoIHdpbGwKICAgICBiZSBkcmFpbmVkIGluIG9yZGVyIChSRkM0MjUzIGd1YXJhbnRlZXMgY29uZmlybSBtZXNzYWdlcyBhcmUgbm90CiAgICAgcmVvcmRlcmVkIHdpdGhpbiBhbiBjaGFubmVsKS4KICAgICBBbHNvIGluY2x1ZGVzIGEgYWJhbmRvbm1lbnQgY2FsbGJhY2sgdG8gY2xlYW4gdXAgaWYgYSBjaGFubmVsIGlzCiAgICAgY2xvc2VkIHdpdGhvdXQgc2VuZGluZyBjb25maXJtYXRpb24gbWVzc2FnZXMuIFRoaXMgcHJvYmFibHkKICAgICBzaG91bGRuJ3QgaGFwcGVuIGluIGNvbXBsaWFudCBpbXBsZW1lbnRhdGlvbnMsIGJ1dCBpdCBjb3VsZCBiZQogICAgIGFidXNlZCB0byBsZWFrIG1lbW9yeS4KICAgICBvayBtYXJrdXNAIChhcyBwYXJ0IG9mIGEgbGFyZ2VyIGRpZmYpCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA1LzA4IDEyOjIxOjE2CiAgICAgW21vbml0b3IuYyBtb25pdG9yX3dyYXAuYyBzZXNzaW9uLmggc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNlc3Npb24uY10KICAgICBbc3NoZF9jb25maWcgc3NoZF9jb25maWcuNV0KICAgICBNYWtlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZXNzaW9ucyBydW4tdGltZSBjb250cm9sbGFibGUgdmlhCiAgICAgYSBzc2hkX2NvbmZpZyBNYXhTZXNzaW9ucyBrbm9iLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzYWJsaW5nCiAgICAgbG9naW4vc2hlbGwvc3Vic3lzdGVtIGFjY2VzcyB3aGlsZSBsZWF2aW5nIHBvcnQtZm9yd2FyZGluZyB3b3JraW5nCiAgICAgKE1heFNlc3Npb25zIDApLCBkaXNhYmxpbmcgY29ubmVjdGlvbiBtdWx0aXBsZXhpbmcgKE1heFNlc3Npb25zIDEpIG9yCiAgICAgc2ltcGx5IGluY3JlYXNpbmcgdGhlIG51bWJlciBvZiBhbGxvd3MgbXVsdGlwbGV4ZWQgc2Vzc2lvbnMuCiAgICAgQmVjYXVzZSBzb21lIGJvem9zIGFyZSBzdXJlIHRvIGNvbmZpZ3VyZSBNYXhTZXNzaW9ucyBpbiBleGNlc3Mgb2YgdGhlCiAgICAgbnVtYmVyIG9mIGF2YWlsYWJsZSBmaWxlIGRlc2NyaXB0b3JzIGluIHNzaGQgKHdoaWNoLCBhdCBwZWFrLCBtaWdodCBiZQogICAgIGFzIG1hbnkgYXMgOSpNYXhTZXNzaW9ucyksIGF1ZGl0IHNzaGQgdG8gZW5zdXJlIHRoYXQgaXQgZG9lc24ndCBsZWFrIGZkcwogICAgIG9uIGVycm9yIHBhdGhzLCBhbmQgbWFrZSBpdCBmYWlsIGdyYWNlZnVsbHkgb24gb3V0LW9mLWZkIGNvbmRpdGlvbnMgLQogICAgIHNlbmRpbmcgY2hhbm5lbCBlcnJvcnMgaW5zdGVhZCBvZiB0aGFuIGV4aXRpbmcgd2l0aCBmYXRhbCgpLgogICAgIGJ6IzEwOTA7IE1heFNlc3Npb25zIGNvbmZpZyBiaXRzIGFuZCBtYW5wYWdlIGZyb20ganVueWVyIEFUIGdtYWlsLmNvbQogICAgIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDUvMDggMTM6MDY6MTEKICAgICBbY2xpZW50bG9vcC5jIGNsaWVudGxvb3AuaCBzc2guY10KICAgICBVc2UgbmV3IGNoYW5uZWwgc3RhdHVzIGNvbmZpcm1hdGlvbiBjYWxsYmFjayBzeXN0ZW0gdG8gcHJvcGVybHkgZGVhbAogICAgIHdpdGggImltcG9ydGFudCIgY2hhbm5lbCByZXF1ZXN0cyB0aGF0IGZhaWwsIGluIHBhcnRpY3VsYXIgY29tbWFuZCBleGVjLAogICAgIHNoZWxsIGFuZCBzdWJzeXN0ZW0gcmVxdWVzdHMuIFByZXZpb3VzbHkgd2Ugd291bGQgb3B0aW1pc3RpY2FsbHkgYXNzdW1lCiAgICAgdGhhdCB0aGUgcmVxdWVzdHMgd291bGQgYWx3YXlzIHN1Y2NlZWQsIHdoaWNoIGNvdWxkIGNhdXNlIGhhbmdzIGlmIHRoZXkKICAgICBkaWQgbm90IChlLmcuIHdoZW4gdGhlIHNlcnZlciBydW5zIG91dCBvZiBmZHMpIG9yIHdlcmUgdW5pbXBsZW1lbnRlZCBieQogICAgIHRoZSBzZXJ2ZXIgKGJ6ICMxMzg0KQogICAgIEFsc28sIHByb3Blcmx5IHJlcG9ydCBmYWlsaW5nIG11bHRpcGxleCBjaGFubmVsIHJlcXVlc3RzIHZpYSB0aGUgbXV4CiAgICAgY2xpZW50IHN0ZGVyciAoc3ViamVjdCB0byBMb2dMZXZlbCBpbiB0aGUgbXV4IG1hc3RlcikgLSBiZXR0ZXIgdGhhbgogICAgIHNpbGVudGx5IGZhaWxpbmcuCiAgICAgbW9zdCBiaXRzIG9rIG1hcmt1c0AgKGFzIHBhcnQgb2YgYSBsYXJnZXIgZGlmZikKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDUvMDkgMDQ6NTU6NTYKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuYyBzZXJ2ZXJsb29wLmNdCiAgICAgVHJ5IGFkZGl0aW9uYWwgYWRkcmVzc2VzIHdoZW4gY29ubmVjdGluZyB0byBhIHBvcnQgZm9yd2FyZCBkZXN0aW5hdGlvbgogICAgIHdob3NlIEROUyBuYW1lIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgYWRkcmVzcy4gVGhlIHByZXZpb3VzIGJlaGF2aW91cgogICAgIHdhcyB0byB0cnkgdGhlIGZpcnN0IGFkZHJlc3MgYW5kIGdpdmUgdXAuCiAgICAgUmVwb3J0ZWQgYnkgc3RpZyBBVCB2ZW5hYXMuY29tIGluIGJ6IzM0MwogICAgIGdyZWF0IGZlZWRiYWNrIGFuZCBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA1LzA5IDE0OjE4OjQ0CiAgICAgW2NsaWVudGxvb3AuYyBjbGllbnRsb29wLmggc3NoLmMgbXV4LmNdCiAgICAgdGlkeSB1cCBzZXNzaW9uIG11bHRpcGxleGluZyBjb2RlLCBtb3ZpbmcgaXQgaW50byBpdHMgb3duIGZpbGUgYW5kCiAgICAgbWFraW5nIHRoZSBmdW5jdGlvbiBuYW1lcyBtb3JlIGNvbnNpc3RlbnQgLSBtYWtpbmcgc3NoLmMgYW5kCiAgICAgY2xpZW50bG9vcC5jIGEgZmFpciBiaXQgbW9yZSByZWFkYWJsZS4KICAgICBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA1LzA5IDE0OjI2OjA4CiAgICAgW3NzaC5jXQogICAgIGRpbmdvIHN0b2xlIG15IGRpZmYgaHVuawogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNS8wOSAxNjoxNjowNgogICAgIFtzZXNzaW9uLmNdCiAgICAgcmUtYWRkIHRoZSBVU0VfUElQRVMgY29kZSBhbmQgZW5hYmxlIGl0LgogICAgIHdpdGhvdXQgcGlwZXMgc2h1dGRvd24tcmVhZCBmcm9tIHRoZSBzc2hkIGRvZXMgbm90IHRyaWdnZXIKICAgICBhIFNJR1BJUEUgd2hlbiB0aGUgZm9ya2VkIHByb2dyYW0gZG9lcyBhIHdyaXRlLgogICAgIG9rIGRqbUAKICAgICAoSWQgc3luYyBvbmx5LCBVU0VfUElQRVMgbmV2ZXIgbGVmdCBwb3J0YWJsZSBPcGVuU1NIKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNS8wOSAxNjoxNzo1MQogICAgIFtjaGFubmVscy5jXQogICAgIGVycm9yLWZkIHJhY2U6IGRvbid0IGVuYWJsZSB0aGUgZXJyb3IgZmQgaW4gdGhlIHNlbGVjdCBiaXRtYXNrCiAgICAgZm9yIGNoYW5uZWxzIHdpdGggYm90aCBpbi0gYW5kIG91dHB1dCBjbG9zZWQsIHNpbmNlIHRoZSBjaGFubmVsCiAgICAgd2lsbCBnbyBhd2F5IGJlZm9yZSB3ZSBjYWxsIHNlbGVjdCgpOwogICAgIHJlcG9ydCwgbG90cyBvZiBkZWJ1Z2dpbmcgaGVscCBhbmQgb2sgZGptQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wNS8wOSAxNjoyMToxMwogICAgIFtjaGFubmVscy5oIGNsaWVudGxvb3AuYyBuY2hhbi5jIHNlcnZlcmxvb3AuY10KICAgICB1bmJyZWFrCiAgICAgICAgc3NoIC0yIGxvY2FsaG9zdCBvZCAvYmluL2xzIHwgdHJ1ZQogICAgIGlnbm9yaW5nIFNJR1BJUEUgYnkgYWRkaW5nIGEgbmV3IGNoYW5uZWwgbWVzc2FnZSAoRU9XKSB0aGF0IHNpZ25hbHMKICAgICB0aGUgcGVlciB0aGF0IHdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIGFueSBkYXRhIGl0IG1pZ2h0IHNlbmQuCiAgICAgZml4ZXMgYnogIzg1OyBkaXNjdXNzaW9uLCBkZWJ1Z2dpbmcgYW5kIG9rIGRqbUAKICAgLSBwdmFsY2hldkBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNS8xMiAyMDo1MjoyMAogICAgIFt1bWFjLmNdCiAgICAgRW5zdXJlIG5oX3Jlc3VsdCBsaWVzIG9uIGEgNjQtYml0IGJvdW5kYXJ5IChmaXhlcyB3YXJuaW5ncyBvYnNlcnZlZAogICAgIG9uIEl0YW5pdW0gb24gTGludXgpOyBmcm9tIERhbGUgVGFsY290dCAoYnVnICMxNDYyKTsgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNS8xNSAyMzo1MjoyNAogICAgIFtuY2hhbjIubXNdCiAgICAgZG9jdW1lbnQgZW93IG1lc3NhZ2UgaW4gc3NoIHByb3RvY29sIDIgY2hhbm5lbCBzdGF0ZSBtYWNoaW5lOwogICAgIGZlZWRiYWNrIGFuZCBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA1LzE4IDIxOjI5OjA1CiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgY29tbWVudCBleHRlbnNpb24gYW5ub3VuY2VtZW50CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA1LzE2IDA4OjMwOjQyCiAgICAgW1BST1RPQ09MXQogICAgIGRvY3VtZW50IG91ciBwcm90b2NvbCBleHRlbnNpb25zIGFuZCBkZXZpYXRpb25zOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA1LzE3IDAxOjMxOjU2CiAgICAgW1BST1RPQ09MXQogICAgIGdyYW1tYXIgYW5kIGNvcnJlY3RuZXNzIGZpeGVzIGZyb20gc3RldmVza0AKCjIwMDgwNDAzCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9ic2QtcG9sbC5jXSBJbmNsdWRlIHN0ZGxpYi5oIHRvIGF2b2lkIGNvbXBpbGUtCiAgIHRpbWUgd2FybmluZ3Mgb24gTHlueE9TLiBQYXRjaCBmcm9tIG9wcyBBVCBpa2kuZmkKIC0gKGRqbSkgRm9yY2Ugc3RyaW5nIGFyZ3VtZW50cyB0byByZXBsYWNlbWVudCBzZXRwcm9jdGl0bGUoKSB0aG91Z2gKICAgc3RybnZpcyBmaXJzdC4gT2sgZHR1Y2tlckAKCjIwMDgwNDAzCiAtIChkam0pIE9wZW5CU0QgQ1ZTIHN5bmM6CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzA0LzAyIDE1OjM2OjUxCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgYXZvaWQgcG9zc2libGUgaGlqYWNraW5nIG9mIHgxMS1mb3J3YXJkZWQgY29ubmVjdGlvbnMgKGJhY2sgb3V0IDEuMTgzKQogICAgIENWRS0yMDA4LTE0ODM7IG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDMvMjcgMjI6Mzc6NTcKICAgICBbc3NoZC44XQogICAgIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wNC8wMyAwOTo1MDoxNAogICAgIFt2ZXJzaW9uLmhdCiAgICAgb3BlbnNzaC01LjAKIC0gKGRqbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjXQogICBbY29udHJpYi9zdXNlL29wZW5zc2guc3BlY10gQ3JhbmsgdmVyc2lvbiBudW1iZXJzIGluIFJQTSBzcGVjIGZpbGVzCiAtIChkam0pIFtSRUFETUVdIFVwZGF0ZSBsaW5rIHRvIHJlbGVhc2Ugbm90ZXMKIC0gKGRqbSkgUmVsZWFzZSA1LjBwMQoKMjAwODAzMTUKIC0gKGRqbSkgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXSBRdW90ZSBwdXR0eS1yZWxhdGVkIHZhcmlhYmxlcyBpbiBjYXNlIHRoZXkgYXJlCiAgIGVtcHR5OyByZXBvcnQgYW5kIHBhdGNoIGZyb20gUGV0ZXIgU3R1Z2UKIC0gKGRqbSkgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXSBTaWxlbmNlIG5vaXNlIGZyb20gZGV0ZWN0aW9uIG9mIHB1dHR5CiAgIGNvbW1hbmRzOyByZXBvcnQgZnJvbSBQZXRlciBTdHVnZQogLSAoZGptKSBbc2Vzc2lvbi5jXSBSZWxvY2F0ZSBpbmNvcnJlY3RseS1wbGFjZWQgY2xvc2Vmcm9tKCkgdGhhdCB3YXMgY2F1c2luZwogICBjcmFzaGVzIHdoZW4gdXNlZCB3aXRoIENocm9vdERpcmVjdG9yeQoKCjIwMDgwMzI3CiAtIChkdHVja2VyKSBDYWNoZSBzZWxpbnV4IHN0YXR1cyBlYXJsaWVyIHNvIHdlIGtub3cgaWYgaXQncyBlbmFibGVkIGFmdGVyIGEKICAgY2hyb290LiAgQWxsb3dzIENocm9vdERpcmVjdG9yeSB0byB3b3JrIHdpdGggc2VsaW51eCBzdXBwb3J0IGNvbXBpbGVkIGluCiAgIGJ1dCBub3QgZW5hYmxlZC4gIFVzaW5nIGl0IHdpdGggc2VsaW51eCBlbmFibGVkIHdpbGwgcmVxdWlyZSBzb21lIHNlbGludXgKICAgc3VwcG9ydCBpbnNpZGUgdGhlIGNocm9vdC4gICJsb29rcyBzYW5lIiBkam1ACiAtIChkam0pIEZpeCBSQ1MgaWRlbnQgaW4gc2Z0cC1zZXJ2ZXItbWFpbi5jCiAtIChkam0pIE9wZW5CU0QgQ1ZTIHN5bmM6CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzAyLzExIDA3OjU4OjI4CiAgICAgW3NzaC4xIHNzaGQuOCBzc2hkX2NvbmZpZy41XQogICAgIGJ1bXAgTWRvY2RhdGUgZm9yIHBhZ2VzIGNvbW1pdHRlZCBpbiAiZmVidWFyeSIsIG5lY2Vzc2FyeSBiZWNhdXNlCiAgICAgb2YgYSB0eXBvIGluIHJjcy5jOwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDMvMTMgMDE6NDk6NTMKICAgICBbbW9uaXRvcl9mZHBhc3MuY10KICAgICBDb3JyZWN0IENNU0dfU1BBQ0UgYW5kIENNU0dfTEVOIHVzYWdlIGV2ZXJ5d2hlcmUgaW4gdGhlIHRyZWUuIER1ZSB0bwogICAgIGFuIGV4dGVuc2l2ZSBkaXNjdXNzaW9uIHdpdGggb3R0bywga2V0dGVuaXMsIG1pbGxlcnQsIGFuZCBoc2hvZXhlcgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDMvMTUgMTY6MTk6MDIKICAgICBbbW9uaXRvcl9mZHBhc3MuY10KICAgICBSZXBhaXIgdGhlIHNpbXBsZSBjYXNlcyBmb3IgbXNnX2NvbnRyb2xsZW4gd2hlcmUgaXQgc2hvdWxkIGp1c3QgYmUKICAgICBDTVNHX1NJWkUoc2l6ZW9mKGludCkpLCBub3Qgc2l6ZW9mKGJ1ZmZlcikgd2hpY2ggbWF5IGJlIGxhcmdlciBiZWNhdXNlCiAgICAgb2YgYWxpZ25tZW50OyBvayBrZXR0ZW5pcyBoc2hvZXhlcgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMy8yMyAxMjo1NDowMQogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIHByZWZlciBQT1NJWC1zdHlsZSBmaWxlIHJlbmFtaW5nIG92ZXIgZmlsZXhmZXIgcmVuYW1lIGJlaGF2aW91ciBpZiB0aGUKICAgICBzZXJ2ZXIgc3VwcG9ydHMgdGhlIHBvc2l4LXJlbmFtZUBvcGVuc3NoLmNvbSBleHRlbnNpb24uCiAgICAgTm90ZSB0aGF0IHRoZSBvbGQgKGZpbGV4ZmVyKSBiZWhhdmlvdXIgd291bGQgcmVmdXNlIHRvIGNsb2JiZXIgYW4KICAgICBleGlzdGluZyBmaWxlLiBVc2VycyB3aG8gZGVwZW5kZWQgb24gdGhpcyBzaG91bGQgYWRqdXN0IHRoZWlyIHNmdHAoMSkKICAgICB1c2FnZS4KICAgICBvayBkZXJhYWR0QCBtYXJrdXNACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMy8yNCAxNjoxMTowNwogICAgIFttb25pdG9yX2ZkcGFzcy5jXQogICAgIG1zZ19jb250cm9sbGVuIGhhcyB0byBiZSBDTVNHX1NQQUNFIHNvIHRoYXQgdGhlIGtlcm5lbCBjYW4gYWNjb3VudCBmb3IKICAgICBlYWNoIGNtc2dfbGVuIChpZS4gbXNnX2NvbnRyb2xsZW4gPSBzdW0gb2YgQ01TR19BTElHTihjbXNnX2xlbikuICBUaGlzCiAgICAgd29ya3Mgbm93IHRoYXQga2VybmVsIGZkIHBhc3NpbmcgaGFzIGJlZW4gZml4ZWQgdG8gYWNjZXB0IGEgYml0IG9mCiAgICAgc2xvcHBpbmVzcyBiZWNhdXNlIG9mIHRoaXMgQUJJIHJlcGFpci4KICAgICBsb3RzIG9mIGRpc2N1c3Npb24gd2l0aCBrZXR0ZW5pcwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMy8yNSAxMTo1ODowMgogICAgIFtzZXNzaW9uLmMgc3NoZF9jb25maWcuNV0KICAgICBpZ25vcmUgfi8uc3NoL3JjIGlmIGEgc3NoZF9jb25maWcgRm9yY2VDb21tYW5kIGlzIHNwZWNpZmllZDsKICAgICBmcm9tIGR0dWNrZXJAIG9rIGRlcmFhZHRAIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDMvMjUgMjM6MDE6NDEKICAgICBbc2Vzc2lvbi5jXQogICAgIGxhc3QgcGF0Y2ggaGFkIGJhY2t3YXJkcyB0ZXN0OyBzcG90dGVkIGJ5IHRlcm1pbSBBVCBnbWFpbC5jb20KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDMvMjYgMjE6Mjg6MTQKICAgICBbYXV0aC1vcHRpb25zLmMgYXV0aC1vcHRpb25zLmggc2Vzc2lvbi5jIHNzaGQuOF0KICAgICBhZGQgbm8tdXNlci1yYyBhdXRob3JpemVkX2tleXMgb3B0aW9uIHRvIGRpc2FibGUgZXhlY3V0aW9uIG9mIH4vLnNzaC9yYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMy8yNyAwMDoxNjo0OQogICAgIFt2ZXJzaW9uLmhdCiAgICAgb3BlbnNzaC00LjkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDMvMjQgMjE6NDY6NTQKICAgICBbcmVncmVzcy9zZnRwLWJhZGNtZHMuc2hdCiAgICAgZGlzYWJsZSBuby1yZXBsYWNlIHJlbmFtZSB0ZXN0IG5vdyB0aGF0IHdlIHByZWZlciBhIFBPU0lYIHJlbmFtZTsgc3BvdHRlZAogICAgIGJ5IGRrcmF1c2VACiAtIChkam0pIFtjb25maWd1cmUuYWNdIGZpeCBhbGlnbm1lbnQgb2YgLS13aXRob3V0LXN0YWNrcHJvdGVjdCBkZXNjcmlwdGlvbgogLSAoZGptKSBbY29uZmlndXJlLmFjXSAtLXdpdGgtc2VsaW51eCB0b28KIC0gKGRqbSkgW3JlZ3Jlc3MvTWFrZWZpbGVdIGNsZWFudXAgUHVUVFkgaW50ZXJvcCB0ZXN0IGRyb3BwaW5ncwogLSAoZGptKSBbUkVBRE1FXSBVcGRhdGUgbGluayB0byByZWxlYXNlIG5vdGVzCiAtIChkam0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjIGNvbnRyaWIvcmVkaGF0L29wZW5zc2guc3BlY10KICAgW2NvbnRyaWIvc3VzZS9vcGVuc3NoLnNwZWNdIENyYW5rIHZlcnNpb24gbnVtYmVycyBpbiBSUE0gc3BlYyBmaWxlcwogLSAoZGptKSBSZWxlYXNlIDQuOXAxCgoyMDA4MDMxNQogLSAoZGptKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdIFF1b3RlIHB1dHR5LXJlbGF0ZWQgdmFyaWFibGVzIGluIGNhc2UgdGhleSBhcmUKICAgZW1wdHk7IHJlcG9ydCBhbmQgcGF0Y2ggZnJvbSBQZXRlciBTdHVnZQogLSAoZGptKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdIFNpbGVuY2Ugbm9pc2UgZnJvbSBkZXRlY3Rpb24gb2YgcHV0dHkKICAgY29tbWFuZHM7IHJlcG9ydCBmcm9tIFBldGVyIFN0dWdlCiAtIChkam0pIFtzZXNzaW9uLmNdIFJlbG9jYXRlIGluY29ycmVjdGx5LXBsYWNlZCBjbG9zZWZyb20oKSB0aGF0IHdhcyBjYXVzaW5nCiAgIGNyYXNoZXMgd2hlbiB1c2VkIHdpdGggQ2hyb290RGlyZWN0b3J5CgoyMDA4MDMxNAogLSAodGltKSBbcmVncmVzcy9zZnRwLWNtZHMuc2hdIHMvY2QvbGNkLyBpbiBsbHMgdGVzdC4gUmVwb3J0ZWQgYnkKICAgdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4gQWRkICgpIHRvIHB1dCBlY2hvIGNvbW1hbmRzIGluIHN1YnNoZWxsIGZvciBsbHMgdGVzdAogICBJIG1pc3Rha2VubHkgbGVmdCBvdXQgb2YgbGFzdCBjb21taXQuCiAtICh0aW0pIFtyZWdyZXNzL2xvY2FsY29tbWFuZC5zaF0gU2hlbGwgcG9ydGFiaWxpdHkgZml4LiBSZXBvcnRlZCBieSBpbW9yZ2FuIGF0CiAgIG5hcy5uYXNhLmdvdgoKMjAwODAzMTMKIC0gKGRqbSkgW01ha2VmaWxlLmluIHJlZ3Jlc3MvTWFrZWZpbGVdIEZpeCBpbnRlcm9wLXRlc3RzIHRhcmdldCAobm90ZSB0bwogICBzZWxmOiBtYWtlIGNoYW5nZXMgdG8gTWFrZWZpbGUuaW4gbmV4dCB0aW1lLCBub3QgdGhlIGdlbmVyYXRlZCBNYWtlZmlsZSkuCiAtIChkam0pIFtNYWtlZmlsZS5pbiByZWdyZXNzL3Rlc3QtZXhlYy5zaF0gRmluZCBpbnN0YWxsZWQgcGxpbmsoMSkgYW5kCiAgIHB1dHR5Z2VuKDEpIGJ5ICRQQVRICiAtICh0aW0pIFtzY3AuY10gVXNlIHBvbGwuaCBpZiBhdmFpbGFibGUsIGZhbGwgYmFjayB0byBzeXMvcG9sbC5oIGlmIG5vdC4gUGF0Y2gKICAgYnkgdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KIC0gKHRpbSkgW3JlZ3Jlc3Mvc2Z0cC1jbWRzLnNoIHJlZ3Jlc3Mvc3NoMnB1dHR5LnNoXSBTaGVsbCBwb3J0YWJpbGl0eSBmaXhlcwogICBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20gYW5kIGltb3JnYW4gYXQgbmFzLm5hc2EuZ292CgoyMDA4MDMxMgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8yOSAwNjo1NzoxMwogICAgIFtyZWdyZXNzL01ha2VmaWxlIHJlZ3Jlc3MvbG9jYWxjb21tYW5kLnNoXQogICAgIEFkZCBzaW1wbGUgcmVncmVzcyB0ZXN0IGZvciBMb2NhbENvbW1hbmQ7IG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTEvMjUgMTU6MzU6MDkKICAgICBbcmVncmVzcy9hZ2VudC1nZXRwZWVyZWlkLnNoIHJlZ3Jlc3MvYWdlbnQuc2hdCiAgICAgbW9yZSBleGlzdGFudCAtPiBleGlzdGVudCwgZnJvbSBNYXJ0eW5hcyBWZW5ja3VzOwogICAgIHBmY3RsIGNoYW5nZXM6IG9rIGhlbm5pbmcKICAgICBzc2ggY2hhbmdlczogb2sgZGVyYWFkdAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMi8xMiAwNTowNDowMwogICAgIFtyZWdyZXNzL3NmdHAtY21kcy5zaF0KICAgICB1bmJyZWFrIGxscyBjb21tYW5kIGFuZCBhZGQgYSByZWdyZXNzIHRlc3QgdGhhdCB3b3VsZCBoYXZlIGNhdWdodCB0aGUKICAgICBicmVha2FnZTsgc3BvdHRlZCBieSBtb3VyaW5nQAogICAgIE5CLiBzZnRwIGNvZGUgY2hhbmdlIGFscmVhZHkgY29tbWl0dGVkLgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMi8yMSAwNDoxMzo1MwogICAgIFtyZWdyZXNzL01ha2VmaWxlIHJlZ3Jlc3MvdGVzdC1leGVjLnNoIHJlZ3Jlc3MvcHV0dHktY2lwaGVycy5zaF0KICAgICBbcmVncmVzcy9wdXR0eS1rZXguc2ggcmVncmVzcy9wdXR0eS10cmFuc2Zlci5zaCByZWdyZXNzL3NzaDJwdXR0eS5zaF0KICAgICBiYXNpYyAoY3J5cHRvLCBrZXggYW5kIHRyYW5zZmVyKSBpbnRlcm9wIHJlZ3Jlc3Npb24gdGVzdHMgYWdhaW5zdCBwdXR0eQogICAgIFRvIHJ1biB0aGVzZSwgaW5zdGFsbCBwdXR0eSBhbmQgcnVuICJtYWtlIGludGVyb3AtdGVzdHMiIGZyb20gdGhlIGJ1aWxkCiAgICAgZGlyZWN0b3J5IC0gdGhlIHRlc3RzIGFyZW4ndCBydW4gYnkgZGVmYXVsdCB5ZXQuCgoyMDA4MDMxMQogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmMgbW9uaXRvci5jIHNlc3Npb24uYyBzc2hkLmNdIEJ1ZyAjOTI2OiBNb3ZlCiAgIHBhbV9vcGVuX3Nlc3Npb24gYW5kIHBhbV9jbG9zZV9zZXNzaW9uIGludG8gdGhlIHByaXZzZXAgbW9uaXRvciwgd2hpY2gKICAgd2lsbCBlbnN1cmUgdGhhdCBwYW1fc2Vzc2lvbl9jbG9zZSBpcyBjYWxsZWQgYXMgcm9vdC4gIFBhdGNoIGZyb20gVG9tYXMKICAgTXJhei4KCjIwMDgwMzA5CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBJdCB0dXJucyBvdXQgZ2NjJ3MgLWZzdGFjay1wcm90ZWN0b3ItYWxsIGRvZXNuJ3QKICAgYWx3YXlzIHdvcmsgZm9yIGFsbCBwbGF0Zm9ybXMgYW5kIHZlcnNpb25zLCBzbyB0ZXN0IHdoYXQgd2UgY2FuIGFuZAogICBhZGQgYSBjb25maWd1cmUgZmxhZyB0byB0dXJuIGl0IG9mIGlmIG5lZWRlZC4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC57YyxofV0gUmVtb3ZlIEFJWCBzcGVjaWZpYyBpbml0Z3JvdXBzCiAgIGltcGxlbWVudGF0aW9uLiAgSXQncyBub3QgbmVlZGVkIHRvIGZpeCBidWcgIzEwODEgYW5kIGJyZWFrcyB0aGUgYnVpbGQKICAgb24gc29tZSBBSVggY29uZmlndXJhdGlvbnMuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcmVncmVzcy9zdHJ0b251bXRlc3QuY10gQnVnICMxMzQ3OiBVc2UgcGxhdGZvcm0ncwogICBlcXVpdmFsZW50IG9mIExMT05HX01BWCBmb3IgdGhlIGNvbXBhdCByZWdyZXNzaW9uIHRlc3RzLCB3aGljaCBtYWtlcyB0aGVtCiAgIHJ1biBvbiBBSVggYW5kIEhQLVVYLiAgUGF0Y2ggZnJvbSBEYXZpZCBMZW9uYXJkLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUnVuIHN0YWNrLXByb3RlY3RvciB0ZXN0cyB3aXRoIC1XZXJyb3IgdG8gY2F0Y2gKICAgcGxhdGZvcm1zIHdoZXJlIGdjYyB1bmRlcnN0YW5kcyB0aGUgb3B0aW9uIGJ1dCBpdCdzIG5vdCBzdXBwb3J0ZWQgKGFuZAogICB0aHVzIGdlbmVyYXRlcyBhIHdhcm5pbmcpLgoKMjAwODAzMDcKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwOC8wMi8xMSAwNzo1ODoyOAogICAgIFtzc2guMSBzc2hkLjggc3NoZF9jb25maWcuNV0KICAgICBidW1wIE1kb2NkYXRlIGZvciBwYWdlcyBjb21taXR0ZWQgaW4gImZlYnVhcnkiLCBuZWNlc3NhcnkgYmVjYXVzZQogICAgIG9mIGEgdHlwbyBpbiByY3MuYzsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDIvMTMgMjI6Mzg6MTcKICAgICBbc2VydmNvbmYuaCBzZXNzaW9uLmMgc3NoZC5jXQogICAgIHJla2V5IGFyYzRyYW5kb20gYW5kIE9wZW5TU0wgUk5HIGluIHBvc3RhdXRoIGNoaWxkCiAgICAgY2xvc2Vmcm9tIGZkcyA+IDIgYmVmb3JlIHNoZWxsL2NvbW1hbmQgZXhlY3V0aW9uCiAgICAgb2sgbWFya3VzQAogICAtIG1iYWxtZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDIvMTQgMTM6MTA6MzEKICAgICBbc3NoZC5jXQogICAgIFdoZW4gc3RhcnRlZCBpbiBjb25maWd1cmF0aW9uIHRlc3QgbW9kZSAoLXQpIGRvIG5vdCBjaGVjayB0aGF0IHNzaGQgaXMKICAgICBiZWluZyBzdGFydGVkIHdpdGggYW4gYWJzb2x1dGUgcGF0aC4KICAgICBvayBkam0KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDIvMjAgMTU6MjU6MjYKICAgICBbc2Vzc2lvbi5jXQogICAgIGNvcnJlY3QgYm9vbGVhbiBlbmNvZGluZyBmb3IgY29yZWR1bXA7IGRlciBNb3VzZSB2aWEgZHVnc29uZwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMi8yMiAwNTo1ODo1NgogICAgIFtzZXNzaW9uLmNdCiAgICAgY2xvc2Vmcm9tKCkgY2FsbCB3YXMgdG9vIGVhcmx5LCBkZWxheSBpdCB1bnRpbCBqdXN0IGJlZm9yZSB3ZSBleGVjdXRlCiAgICAgdGhlIHVzZXIncyByYyBmaWxlcyAoaWYgYW55KS4KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzAyLzIyIDIwOjQ0OjAyCiAgICAgW2NsaWVudGxvb3AuYyBwYWNrZXQuYyBwYWNrZXQuaCBzZXJ2ZXJsb29wLmNdCiAgICAgQWxsb3cgYWxsIFNTSDIgcGFja2V0IHR5cGVzLCBpbmNsdWRpbmcgVU5JTVBMRU1FTlRFRCB0byByZXNldCB0aGUKICAgICBrZWVwYWxpdmUgdGltZXIgKGJ6ICMxMzA3KS4gIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDIvMjcgMjA6MjE6MTUKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICBhZGQgYW4gZXh0ZW5zaW9uIG1ldGhvZCAicG9zaXgtcmVuYW1lQG9wZW5zc2guY29tIiB0byBwZXJmb3JtIFBPU0lYIGF0b21pYwogICAgIHJlbmFtZSgpIG9wZXJhdGlvbnMuIGJhc2VkIG9uIHBhdGNoIGZyb20gbWlrbG9zIEFUIHN6ZXJlZGkuaHUgaW4gYnojMTQwMDsKICAgICBvayBkdHVja2VyQCBtYXJrdXNACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMy8wMiAxODoxOTozNQogICAgIFttb25pdG9yX2ZkcGFzcy5jXQogICAgIHVzZSBhIHVuaW9uIHRvIGVuc3VyZSBhbGlnbm1lbnQgb2YgdGhlIGNtc2cgKHBheSBhdHRlbnRpb246IHZhcmlvdXMgb3RoZXIKICAgICBwYXJ0cyBvZiB0aGUgdHJlZSBuZWVkIHRoaXMgdHJlYXRtZW50IHRvbyk7IG9rIGRqbQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDMvMDQgMjE6MTU6NDIKICAgICBbdmVyc2lvbi5oXQogICAgIGNyYW5rIHZlcnNpb247IGZyb20gZGptCiAtICh0aW0pIFtyZWdyZXNzL3NmdHAtZ2xvYi5zaF0gU2hlbGwgcG9ydGFiaWxpdHkgZml4LgoKMjAwODAzMDIKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEZyZWVCU0QncyBnbG9iKCkgZG9lc24ndCBiZWhhdmUgdGhlIHdheSB3ZSBleHBlY3QKICAgZWl0aGVyLCBzbyB1c2Ugb3VyIG93bi4KCjIwMDgwMjI5CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwuY10gV2UgZG9uJ3QgY2hlY2sgZm9yIHNlbGVjdCgyKSBpbgogICBjb25maWd1cmUgKGFuZCB0aGVyZSdzIG5vdCBtdWNoIHBvaW50LCBhcyBvcGVuc3NoIHdvbid0IHdvcmsgd2l0aG91dCBpdCkKICAgc28gSEFWRV9TRUxFQ1QgaXMgbm90IGRlZmluZWQgYW5kIHRoZSBwb2xsKDIpIGNvbXBhdCBjb2RlIGRvZXNuJ3QgZ2V0CiAgIGJ1aWx0IGluLiAgUmVtb3ZlIEhBVkVfU0VMRUNUIHNvIHdlIGNhbiBidWlsZCBvbiBwbGF0Zm9ybXMgd2l0aG91dCBwb2xsLgogLSAoZHR1Y2tlcikgW3NjcC5jXSBJbmNsdWRlIHN5cy9wb2xsLmggaW5zaWRlIEhBVkVfU1lTX1BPTExfSC4KIC0gKGRqbSkgW2NvbnRyaWIvZ25vbWUtc3NoLWFza3Bhc3MyLmhdIEtlZXAgYXNrcGFzcyB3aW5kb3duIG9uIHRvcC4gRnJvbQogICBEZWJpYW4gcGF0Y2ggdmlhIGJlcm5kIEFUIG9wZW5ic2Qub3JnCgoyMDA4MDIyOAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQWRkIC1mc3RhY2stcHJvdGVjdG9yIHRvIExERkxBR1MgdG9vLCBmaXhlcwogICBsaW5raW5nIHByb2JsZW1zIG9uIEFJWCB3aXRoIGdjYyA0LjEueC4KIC0gKGR0dWNrZXIpIFtpbmNsdWRlcy5oIHNzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmMgc3NoLmMgc3NoZC5jCiAgIG9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LntjLGh9XSBCdWcgIzE0MzcgTW92ZSB0aGUgT3BlblNTTCBjb21wYXQKICAgaGVhZGVyIHRvIGFmdGVyIE9wZW5TU0wgaGVhZGVycywgc2luY2Ugc29tZSB2ZXJzaW9ucyBvZiBPcGVuU1NMIGhhdmUKICAgU1NMZWF5X2FkZF9hbGxfYWxnb3JpdGhtcyBhcyBhIG1hY3JvIGFscmVhZHkuCiAtIChkdHVja2VyKSBba2V5LmMgZGVmaW5lcy5oIG9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmhdIE1vdmUgb2xkIE9wZW5TU0wKICAgY29tcGF0IGdsdWUgaW50byBvcGVuc3NsLWNvbXBhdC5oLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC57YyxofV0gQnVnICMxMDgxOiBJbXBsZW1lbnQKICAgZ2V0Z3JvdXBsaXN0IHZpYSBnZXRncnNldCBvbiBBSVgsIHJhdGhlciB0aGFuIGl0ZXJhdGluZyBvdmVyIGdldGdyZW50LgogICBUaGlzIGFsbG93cywgZWcsIE1hdGNoIGFuZCBBbGxvd0dyb3VwcyBkaXJlY3RpdmVzIHRvIHdvcmsgd2l0aCBOSVMgYW5kCiAgIExEQVAgZ3JvdXBzLgogLSAoZHR1Y2tlcikgW3NzaGQuY10gQnVnICMxMDQyOiBtYWtlIGxvZyBtZXNzYWdlcyBmb3IgdGNwd3JhcHBlcnMgdXNlIHRoZQogICBzYW1lIFN5c2xvZ0ZhY2lsaXR5IGFzIHRoZSByZXN0IG9mIHNzaGQuICBQYXRjaCBmcm9tIFdpbGxpYW0gS25veCwKICAgb2sgZGptQC4KCjIwMDgwMjI1CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmhdIHJlbmFtZSBzc2hfZ2FpX3N0cmVycm9yIGhhY2sKICAgc2luY2UgaXQgbm93IGNvbmZsaWN0cyB3aXRoIHRoZSBoZWxwZXIgZnVuY3Rpb24gaW4gbWlzYy5jLiAgRnJvbQogICB2aW5zY2hlbiBBVCByZWRoYXQuY29tLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBhdWRpdC1ic20uY10gQnVnICMxNDIwOiBBZGQgYSBsb2NhbCBpbXBsZW1lbnRhdGlvbgogICBvZiBhdWdfZ2V0X21hY2hpbmUgZm9yIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHRoZWlyIG93biAoZWcgT1MgWCwgRnJlZUJTRCkuCiAgIEhlbHAgYW5kIHRlc3RpbmcgZnJvbSBjc2pwIGF0IEZyZWVCU0Qgb3JnLCB2Z2lmZmluIGF0IGFwcGxlIGNvbS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtpbmNsdWRlcy5oIG9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmNdIEJ1ZyAjMTQzNzogcmVzaHVmZmxlCiAgIGhlYWRlcnMgc28gLi9jb25maWd1cmUgLS13aXRoLXNzbC1lbmdpbmUgYWN0dWFsbHkgd29ya3MuICBQYXRjaCBmcm9tCiAgIElhbiBMaXN0ZXIuCgoyMDA4MDIyNAogLSAodGltKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXQogICBHcmFtbWFyIGNoYW5nZXMgb24gU1lTQ09ORkRJUiBMT0NBTFNUQVRFRElSIG1lc3NhZ2VzLgogICBDaGVjayBtb3JlIHRob3JvdWdobHkgdGhhdCBpdCdzIHBvc3NpYmxlIHRvIGNyZWF0ZSB0aGUgL3Zhci9lbXB0eSBkaXJlY3RvcnkuCiAgIFBhdGNoIGJ5IHZpbnNjaGVuIEFUIHJlZGhhdC5jb20KCjIwMDgwMjEwCiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBjaGxAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMTEgMDc6MjI6MjgKICAgICBbc2Z0cC1jbGllbnQuYyBzZnRwLWNsaWVudC5oXQogICAgIGRpc2FibGUgdW51c2VkIGZ1bmN0aW9ucwogICAgIGluaXRpYWxseSBmcm9tIHRvYmlhc0AsIGJ1dCBkaXNhYmxlZCB0aGVtIGJ5IHBsYWNpbmcgdGhlbSBpbgogICAgICIjaWZkZWYgbm90eWV0IiB3aGljaCB3YXMgYXNrZWQgYnkgZGptQAogICAgIG9rIGRqbUAgdG9iaWFzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMS8xOSAxOToxMzoyOAogICAgIFtzc2guMV0KICAgICBzYXRpc2Z5IHRoZSBwZWRhbnRzOiAtcSBkb2VzIG5vdCBzdXBwcmVzcyBhbGwgZGlhZ25vc3RpYyBtZXNzYWdlcyAoZS5nLgogICAgIHNvbWUgY29tbWFuZGxpbmUgcGFyc2luZyB3YXJuaW5ncyBnbyB1bmNvbmRpdGlvbmFsbHkgdG8gc3Rkb3V0KS4KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMTkgMjA6NDg6NTMKICAgICBbY2xpZW50bG9vcC5jXQogICAgIGZkIGxlYWsgb24gc2Vzc2lvbiBtdWx0aXBsZXhpbmcgZXJyb3IgcGF0aC4gUmVwb3J0IGFuZCBwYXRjaCBmcm9tCiAgICAgZ3JlZ29yeV9zaGl2ZWx5IEFUIGZhbm5pZW1hZS5jb20KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMTkgMjA6NTE6MjYKICAgICBbc3NoLmNdCiAgICAgaWdub3JlIFNJR1BJUEUgaW4gbXVsdGlwbGV4IGNsaWVudCBtb2RlIC0gd2UgY2FuIHJlY2VpdmUgdGhpcyBpZiB0aGUKICAgICBzZXJ2ZXIgcnVucyBvdXQgb2YgZmRzIG9uIHVzIG1pZHdheS4gUmVwb3J0IGFuZCBwYXRjaCBmcm9tCiAgICAgZ3JlZ29yeV9zaGl2ZWx5IEFUIGZhbm5pZW1hZS5jb20KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMTkgMjI6MDQ6NTcKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBmaXggcmVtb3RlIGhhbmRsZSBsZWFrIGluIGRvX2Rvd25sb2FkKCkgbG9jYWwgZmlsZSBvcGVuIGVycm9yIHBhdGg7CiAgICAgcmVwb3J0IGFuZCBmaXggZnJvbSBzd29ybGV5IEFUIGNoa25vLm5ldAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMS8xOSAyMjoyMjo1OAogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgd2hlbiBoYXNoaW5nIGluZGl2aWR1YWwgaG9zdHMgKHNzaC1rZXlnZW4gLUhmIGhvc3RuYW1lKSwgbWFrZSBzdXJlIHdlCiAgICAgaGFzaCBqdXN0IHRoZSBzcGVjaWZpZWQgaG9zdG5hbWUgYW5kIG5vdCB0aGUgZW50aXJlIGhvc3RzcGVjIGZyb20gdGhlCiAgICAga2V5ZmlsZS4gSXQgbWF5IGJlIG9mIHRoZSBmb3JtICJob3N0bmFtZSxpcGFkZHIiLCB3aGljaCB3b3VsZCBsZWFkIHRvCiAgICAgYSBoYXNoIHRoYXQgbmV2ZXIgbWF0Y2hlcy4gcmVwb3J0IGFuZCBmaXggZnJvbSBqcCBBVCBkZXZudWxsLmN6CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzAxLzE5IDIyOjM3OjE5CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICB1bmJyZWFrIGxpbmUgbnVtYmVyaW5nIChicm9rZW4gaW4gcmV2aXNpb24gMS4xNjQpLCBmaXggZXJyb3IgbWVzc2FnZQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMS8xOSAyMzowMjo0MAogICAgIFtjaGFubmVscy5jXQogICAgIFdoZW4gd2UgYWRkZWQgc3VwcG9ydCBmb3Igc3BlY2lmaWVkIGJpbmQgYWRkcmVzc2VzIGZvciBwb3J0IGZvcndhcmRzLCB3ZQogICAgIGFkZGVkIGEgcXVpcmsgU1NIX09MRF9GT1JXQVJEX0FERFIuIFRoZXJlIGlzIGEgYnVnIGluIG91ciBoYW5kbGluZyBvZgogICAgIHRoaXMgZm9yIC1MIHBvcnQgZm9yd2FyZHMgdGhhdCBjYXVzZXMgdGhlIGNsaWVudCB0byBsaXN0ZW4gb24gYm90aCB2NAogICAgIGFuZCB2NiBhZGRyZXNzZXMgd2hlbiBjb25uZWN0ZWQgdG8gYSBzZXJ2ZXIgd2l0aCB0aGlzIHF1aXJrLCBkZXNwaXRlCiAgICAgaGF2aW5nIHNldCAwLjAuMC4wIGFzIGEgYmluZF9hZGRyZXNzLgogICAgIHJlcG9ydCBhbmQgcGF0Y2ggZnJvbSBKYW4uUGVjaGFuZWMgQVQgU3VuLkNPTTsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMTkgMjM6MDk6NDkKICAgICBbcmVhZGNvbmYuYyByZWFkY29uZi5oIHNzaGNvbm5lY3QyLmNdCiAgICAgcHJvbW90ZSByZWtleWxpbWl0IHRvIGEgaW50NjQgc28gaXQgY2FuIGhvbGQgdGhlIG1heGltdW0gdXNlZnVsIGxpbWl0CiAgICAgb2YgMl4zMjsgcmVwb3J0IGFuZCBwYXRjaCBmcm9tIEphbi5QZWNoYW5lYyBBVCBTdW4uQ09NLCBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwOC8wMS8yMCAwMDozODozMAogICAgIFtzZnRwLmNdCiAgICAgV2hlbiB1cGxvYWRpbmcsIGNvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2Ugb2YgYW4gdW5xdW90ZWQgZmlsZW5hbWUgd2l0aAogICAgIGdsb2IgbWV0YWNoYXJhY3RlcnMgdGhhdCBtYXRjaCBhIGZpbGUgZXhhY3RseSBidXQgbm90IGFzIGEgZ2xvYiwgZS5nLiBhCiAgICAgZmlsZSBjYWxsZWQgIlthYmNkXSIuIHJlcG9ydCBhbmQgdGVzdCBjYXNlcyBmcm9tIGR1bmNhbjJuZCBBVCBnbXguZGUKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMjEgMTc6MjQ6MzAKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICBSZW1vdmUgdGhlIGZpeGVkIDEwMCBoYW5kbGUgbGltaXQgaW4gc2Z0cC1zZXJ2ZXIgYW5kIGFsbG9jYXRlIGFzIG1hbnkKICAgICBhcyB3ZSBoYXZlIGF2YWlsYWJsZSBmaWxlIGRlc2NyaXB0b3JzLiBQYXRjaCBmcm9tIG1pa2xvcyBBVCBzemVyZWRpLmh1OwogICAgIG9rIGR0dWNrZXJAIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMjEgMTk6MjA6MTcKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICB3aGVuIGEgcmVtb3RlIHdyaXRlIGVycm9yIG9jY3VycyBkdXJpbmcgYW4gdXBsb2FkLCBlbnN1cmUgdGhhdCBBQ0tzIGZvcgogICAgIGFsbCBpc3N1ZWQgcmVxdWVzdHMgYXJlIHByb3Blcmx5IGRyYWluZWQuIHBhdGNoIGZyb20gdDhtIEFUIGNlbnRydW0uY3oKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzAxLzIzIDAxOjU2OjU0CiAgICAgW2NsaWVudGxvb3AuYyBwYWNrZXQuYyBzZXJ2ZXJsb29wLmNdCiAgICAgUmV2ZXJ0IHRoZSBjaGFuZ2UgZm9yIGJ6ICMxMzA3IGFzIGl0IGNhdXNlcyBjb25uZWN0aW9uIGFib3J0cyBpZiBhbiBJR05PUkUKICAgICBwYWNrZXQgYXJyaXZlcyB3aGlsZSB3ZSdyZSB3YWl0aW5nIGluIHBhY2tldF9yZWFkX2V4cGVjdCAoYW5kIHBvc3NpYmx5CiAgICAgZWxzZXdoZXJlKS4KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMzEgMjA6MDY6NTAKICAgICBbc2NwLjFdCiAgICAgZXhwbGFpbiBob3cgdG8gaGFuZGxlIGxvY2FsIGZpbGUgbmFtZXMgY29udGFpbmluZyBjb2xvbnM7CiAgICAgcmVxdWVzdGVkIGJ5IFRhbWFzIFRFVkVTWgogICAgIG9rIGR0dWNrZXIKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDIvMDQgMjE6NTM6MDAKICAgICBbc2Vzc2lvbi5jIHNmdHAtc2VydmVyLmMgc2Z0cC5oXQogICAgIGxpbmsgc2Z0cC1zZXJ2ZXIgaW50byBzc2hkOyBmZWVkYmFjayBhbmQgb2sgZGptQAogICAtIG1jYnJpZGVAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDIvMDkgMTI6MTU6NDMKICAgICBbc3NoLjEgc3NoZC44XQogICAgIERvY3VtZW50IHRoZSBjb3JyZWN0IHBlcm1pc3Npb25zIGZvciB0aGUgfi8uc3NoLyBkaXJlY3RvcnkuCiAgICAgb2sgam1jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzAyLzEwIDA5OjU1OjM3CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgbWFudGlvbiB0aGF0ICJpbnRlcm5hbC1zZnRwIiBpcyB1c2VmdWwgd2l0aCBGb3JjZUNvbW1hbmQgdG9vCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzAyLzEwIDEwOjU0OjI5CiAgICAgW3NlcnZjb25mLmMgc2Vzc2lvbi5jXQogICAgIGRlbGF5IH4gZXhwYW5zaW9uIGZvciBDaHJvb3REaXJlY3Rvcnkgc28gaXQgZXhwYW5kcyB0byB0aGUgbG9nZ2VkLWluIHVzZXIncwogICAgIGhvbWUsIHJhdGhlciB0aGFuIHRoZSB1c2VyIHdobyBzdGFydHMgc3NoZCAocHJvYmFibHkgcm9vdCkKCjIwMDgwMTE5CiAtIChkam0pIFNpbGVuY2Ugbm9pY2UgZnJvbSBleHByIGluIHNzaC1jb3B5LWlkOyBwYXRjaCBmcm9tCiAgIG1pa2VsIEFUIG1pa2Vsd2FyZC5jb20KIC0gKGRqbSkgT25seSBsaXN0ZW4gZm9yIElQdjYgY29ubmVjdGlvbnMgb24gQUZfSU5FVDYgc29ja2V0czsgcGF0Y2ggZnJvbQogICB0c3IyNjAwIEFUIGdtYWlsLmNvbQoKMjAwODAxMDIKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEZpeCBtZXNzYWdlIGZvciAtZnN0YWNrLXByb3RlY3Rvci1hbGwgdGVzdC4KCjIwMDgwMTAxCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMi8zMSAxMDo0MTozMQogICAgIFtyZWFkY29uZi5jIHNlcnZjb25mLmNdCiAgICAgUHJldmVudCBzdHJpY3QtYWxpYXNpbmcgd2FybmluZ3Mgb24gbmV3ZXIgZ2NjIHZlcnNpb25zLiAgYnogIzEzNTUsIHBhdGNoCiAgICAgZnJvbSBEbWl0cnkgVi4gTGV2aW4sIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEyLzMxIDE1OjI3OjA0CiAgICAgW3NzaGQuY10KICAgICBXaGVuIGluIGluZXRkIG1vZGUsIGhhdmUgc3NoZCBnZW5lcmF0ZSBhIFByb3RvY29sIDEgZXBoZW1lcmFsIHNlcnZlcgogICAgIGtleSBvbmx5IGZvciBjb25uZWN0aW9ucyB3aGVyZSB0aGUgY2xpZW50IGNob29zZXMgUHJvdG9jb2wgMSBhcyBvcHBvc2VkCiAgICAgdG8gd2hlbiBpdCdzIGVuYWJsZWQgaW4gdGhlIHNlcnZlcidzIGNvbmZpZy4gIFNwZWVkcyB1cCBQcm90b2NvbCAyCiAgICAgY29ubmVjdGlvbnMgdG8gaW5ldGQtbW9kZSBzZXJ2ZXJzIHRoYXQgYWxzbyBhbGxvdyBQcm90b2NvbCAxLiAgYnogIzQ0MCwKICAgICBiYXNlZCBvbiBhIHBhdGNoIGZyb20gYnJ1bm8gYXQgd29sZmYudG8sIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzAxLzAxIDA4OjQ3OjA0CiAgICAgW21pc2MuY10KICAgICBzcGFjZXMgLT4gdGFicyBmcm9tIG15IHByZXZpb3VzIGNvbW1pdAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMDEgMDk6MDY6MzkKICAgICBbc2NwLmNdCiAgICAgSWYgc2NwIC1wIGVuY291bnRlcnMgYSBwcmUtZXBvY2ggdGltZXN0YW1wLCB1c2UgdGhlIGVwb2NoIHdoaWNoIGlzCiAgICAgYXMgY2xvc2UgYXMgd2UgY2FuIGdldCBnaXZlbiB0aGF0IGl0J3MgdXNlZCB1bnNpZ25lZC4gIEFkZCBhIGxpdHRsZQogICAgIGRlYnVnZ2luZyB3aGlsZSB0aGVyZS4gIGJ6ICM4MjgsIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA4LzAxLzAxIDA5OjI3OjMzCiAgICAgW3NzaGRfY29uZmlnLjUgc2VydmNvbmYuY10KICAgICBBbGxvdyBQZXJtaXRSb290TG9naW4gaW4gYSBNYXRjaCBibG9jay4gIEFsbG93cyBmb3IsIGVnLCBwZXJtaXR0aW5nIHJvb3QKICAgICBvbmx5IGZyb20gdGhlIGxvY2FsIG5ldHdvcmsuICBvayBtYXJrdXNALCBtYW4gcGFnZSBiaXQgb2sgam1jQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDgvMDEvMDEgMDg6NTE6MjAKICAgICBbbW9kdWxpXQogICAgIFVwZGF0ZWQgbW9kdWxpIGZpbGU7IG9rIGRqbUAKCjIwMDcxMjMxCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2dsb2Iue2MsaH1dIEJ1ZyAjMTQwNzogZm9yY2UgdXNlIG9mCiAgIGJ1aWx0aW4gZ2xvYiBpbXBsZW1lbnRhdGlvbiBvbiBNYWMgT1MgWC4gIEJhc2VkIG9uIGEgcGF0Y2ggZnJvbQogICB2Z2lmZmluIGF0IGFwcGxlLgoKMjAwNzEyMjkKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTIvMTIgMDU6MDQ6MDMKICAgICBbc2Z0cC5jXQogICAgIHVuYnJlYWsgbGxzIGNvbW1hbmQgYW5kIGFkZCBhIHJlZ3Jlc3MgdGVzdCB0aGF0IHdvdWxkIGhhdmUgY2F1Z2h0IHRoZQogICAgIGJyZWFrYWdlOyBzcG90dGVkIGJ5IG1vdXJpbmdACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMi8yNyAxNDoyMjowOAogICAgIFtzZXJ2Y29uZi5jIGNhbm9ob3N0LmMgbWlzYy5jIGNoYW5uZWxzLmMgc3NoY29ubmVjdC5jIG1pc2MuaCBzc2gta2V5c2Nhbi5jCiAgICAgIHNzaGQuY10KICAgICBBZGQgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gdG8gY29uc2lzdGVudGx5IGhhbmRsZSB0aGUgRUFJX1NZU1RFTSBlcnJvcgogICAgIGNvZGUgb2YgZ2V0YWRkcmluZm8uICBQcm9tcHRlZCBieSB2Z2lmZmluIGF0IGFwcGxlIGNvbSB2aWEgYnogIzE0MTcuCiAgICAgb2sgbWFya3VzQCBzdGV2ZXNrQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTIvMjggMTU6MzI6MjQKICAgICBbY2xpZW50bG9vcC5jIHNlcnZlcmxvb3AuYyBwYWNrZXQuY10KICAgICBNYWtlIFNTSDJfTVNHX1VOSU1QTEVNRU5URUQgYW5kIFNTSDJfTVNHX0lHTk9SRSBtZXNzYWdlcyByZXNldCB0aGUKICAgICBTZXJ2ZXJBbGl2ZSBhbmQgQ2xpZW50QWxpdmUgdGltZXJzLiAgUHJldmVudHMgZHJvcHBpbmcgYSBjb25uZWN0aW9uCiAgICAgd2hlbiB0aGVzZSBhcmUgZW5hYmxlZCBidXQgdGhlIHBlZXIgZG9lcyBub3Qgc3VwcG9ydCBvdXIga2VlcGFsaXZlcy4KICAgICBieiAjMTMwNywgb2sgZGptQC4KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEyLzI4IDIyOjM0OjQ3CiAgICAgW2NsaWVudGxvb3AuY10KICAgICBVc2UgdGhlIGNvcnJlY3QgcGFja2V0IG1heGltdW0gc2l6ZXMgZm9yIHJlbW90ZSBwb3J0IGFuZCBhZ2VudCBmb3J3YXJkaW5nLgogICAgIFByZXZlbnRzIHRoZSBzZXJ2ZXIgZnJvbSBraWxsaW5nIHRoZSBjb25uZWN0aW9uIGlmIHRvbyBtdWNoIGRhdGEgaXMgcXVldWVkCiAgICAgYW5kIGFuIGV4Y2Vzc2l2ZWx5IGxhcmdlIHBhY2tldCBnZXRzIHNlbnQuICBieiAjMTM2MCwgb2sgZGptQC4KCjIwMDcxMjAyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBFbmFibGUgLWZzdGFjay1wcm90ZWN0b3ItYWxsIG9uIHN5c3RlbXMgd2hlcmUKICAgZ2NjIHN1cHBvcnRzIGl0LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3NjcC5jXSBVcGRhdGUgJE9wZW5CU0QgdGFnIG1pc3NpbmcgZnJvbSByZXYgMS4xNzUgYW5kIHJlbW92ZQogICBsZWZ0b3ZlciBkZWJ1ZyBjb2RlLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTAvMjkgMDA6NTI6NDUKICAgICBbYXV0aDItZ3NzLmNdCiAgICAgQWxsb3cgYnVpbGQgd2l0aG91dCAtREdTU0FQSTsgb2sgZGVyYWFkdEAKICAgICAoSWQgc3luYyBvbmx5LCBQb3J0YWJsZSBhbHJlYWR5IGhhcyB0aGUgaWZkZWZzKQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTAvMjkgMDE6NTU6MDQKICAgICBbc3NoLmNdCiAgICAgUGx1ZyB0aW55IG1lbSBsZWFrcyBpbiBDb250cm9sUGF0aCBhbmQgUHJveHlDb21tYW5kIG9wdGlvbiBwcm9jZXNzaW5nOwogICAgIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEwLzI5IDA0OjA4OjA4CiAgICAgW21vbml0b3Jfd3JhcC5jIG1vbml0b3IuY10KICAgICBTZW5kIGNvbmZpZyBibG9jayBiYWNrIHRvIHNsYXZlIGZvciBpbnZhbGlkIHVzZXJzIHRvbyBzbyBvcHRpb25zCiAgICAgc2V0IGJ5IGEgTWF0Y2ggYmxvY2sgKGVnIEJhbm5lcikgYmVoYXZlIHRoZSBzYW1lIGZvciBub24tZXhpc3RlbnQKICAgICB1c2Vycy4gIEZvdW5kIGJ5IGFuZCBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8yOSAwNjo1MTo1OQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgUHJveHlDb21tYW5kIGFuZCBMb2NhbENvbW1hbmQgdXNlIHRoZSB1c2VyJ3Mgc2hlbGwsIG5vdCAvYmluL3NoOyBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8yOSAwNjo1NDo1MAogICAgIFtzc2guY10KICAgICBNYWtlIExvY2FsQ29tbWFuZCB3b3JrIGZvciBQcm90b2NvbCAxIHRvbzsgb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8yOSAwNzo0ODoxOQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgY2xlYW4gdXAgYWZ0ZXIgcHJldmlvdXMgbWFjcm8gcmVtb3ZhbDsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTEvMDMgMDA6MzY6MTQKICAgICBbY2xpZW50bG9vcC5jXQogICAgIGZpeCBtZW1vcnkgbGVhayBpbiBwcm9jZXNzX2NtZGxpbmUoKSwgcGF0Y2ggZnJvbSBKYW4uUGVjaGFuZWMgQVQgU3VuLkNPTTsKICAgICBvayBkdHVja2VyQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTEvMDMgMDE6MjQ6MDYKICAgICBbc3NoLmNdCiAgICAgYnogIzEzNzc6IGdldHB3dWlkIHJlc3VsdHMgd2VyZSBiZWluZyBjbG9iYmVyZWQgYnkgYW5vdGhlciBnZXRwdyogY2FsbAogICAgIGluc2lkZSB0aWxkZV9leHBhbmRfZmlsZW5hbWUoKTsgc2F2ZSB0aGUgZGF0YSB3ZSBuZWVkIGNhcmVmdWxseQogICAgIG9rIGRqbQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTEvMDMgMDI6MDA6MzIKICAgICBbc3NoLmNdCiAgICAgVXNlIHhzdHJkdXAveGZyZWUgd2hlbiBzYXZpbmcgcHduYW1lIGFuZCBwd2Rpcjsgb2sgZGVyYWFkdEAKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA3LzExLzAzIDAyOjAzOjQ5CiAgICAgW3NzaC5jXQogICAgIGF2b2lkIGVycm5vIHRyYXNoaW5nIGluIHNpZ25hbCBoYW5kbGVyOyBvayBkdHVja2VyCgoyMDA3MTAzMAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEwLzI5IDIzOjQ5OjQxCiAgICAgW29wZW5ic2QtY29tcGF0L3N5cy10cmVlLmhdCiAgICAgcmVtb3ZlIGV4dHJhIGJhY2tzbGFzaCBhdCB0aGUgZW5kIG9mIFJCX1BST1RPVFlQRSwgcmVwb3J0IGZyb20KICAgICBKYW4uUGVjaGFuZWMgQVQgU3VuLkNPTTsgb2sgZGVyYWFkdEAKCjIwMDcxMDI2CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA5LzExIDIzOjQ5OjA5CiAgICAgW3NzaHB0eS5jXQogICAgIHJlbW92ZSAjaWYgZGVmaW5lZCBibG9jayBub3QgbmVlZGVkOyBvayBtYXJrdXNAIGR0dWNrZXJACiAgICAgKE5CLiBSQ0QgSUQgc3luYyBvbmx5IGZvciBwb3J0YWJsZSkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMjEgMDM6MDU6MjMKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGRvY3VtZW50IEtiZEludGVyYWN0aXZlQXV0aGVudGljYXRpb24gaW4gc3NoX2NvbmZpZy41OwogICAgIHBhdGNoIGZyb20gZGtnIEFUIGZpZnRoaG9yc2VtYW4ubmV0CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA5LzIxIDA4OjE1OjI5CiAgICAgW2F1dGgtYnNkYXV0aC5jIGF1dGgtcGFzc3dkLmMgYXV0aC5jIGF1dGguaCBhdXRoMS5jIGF1dGgyLWNoYWxsLmNdCiAgICAgW21vbml0b3IuYyBtb25pdG9yX3dyYXAuY10KICAgICB1bmlmZGVmIC1EQlNEX0FVVEgKICAgICB1bmlmZGVmIC1VU0tFWQogICAgIFRoZXNlIG9wdGlvbnMgaGF2ZSBiZWVuIGluIHVzZSBmb3Igc29tZSB5ZWFyczsKICAgICBvayBtYXJrdXNAICJubyBvYmplY3Rpb24iIG1pbGxlcnRACiAgICAgKE5CLiBSQ0QgSUQgc3luYyBvbmx5IGZvciBwb3J0YWJsZSkKICAgLSBjYW5hY2FyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA5LzI1IDIzOjQ4OjU3CiAgICAgW3NzaC1hZ2VudC5jXQogICAgIFdoZW4gYWRkaW5nIGEga2V5IHRoYXQgYWxyZWFkeSBleGlzdHMsIHVwZGF0ZSB0aGUgcHJvcGVydGllcwogICAgICh0aW1lLCBjb25maXJtLCBjb21tZW50KSBpbnN0ZWFkIG9mIGRpc2NhcmRpbmcgdGhlbS4gb2sgZGptQCBtYXJrdXNACiAgIC0gcmF5QGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA5LzI3IDAwOjE1OjU3CiAgICAgW2RoLmNdCiAgICAgRG9uJ3QgcmV0dXJuIC0xIG9uIGVycm9yIGluIGRoX3B1Yl9pc192YWxpZCgpLCBzaW5jZSBpdCBldmFsdWF0ZXMKICAgICB0byB0cnVlLgogICAgIEFsc28gZml4IGEgdHlwby4KICAgICBJbml0aWFsIGRpZmYgZnJvbSBNYXR0aGV3IERlbXBza3ksIGlucHV0IGZyb20gZGptLgogICAgIE9LIGRqbSwgbWFya3VzLgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMjkgMDA6MjU6NTEKICAgICBbYXV0aDIuY10KICAgICBSZW1vdmUgdW51c2VkIHByb3RvdHlwZS4gIG9rIGRqbUAKICAgLSBjaGxAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTAvMDIgMTc6NDk6NTgKICAgICBbc3NoLWtleWdlbi5jXQogICAgIGhhbmRsZXMgemVyby1zaXplZCBzdHJpbmdzIHRoYXQgZmdldHMgY2FuIHJldHVybgogICAgIHByb3Blcmx5IHJlbW92ZXMgdHJhaWxpbmcgbmV3bGluZQogICAgIHJlbW92ZXMgYW4gdW51c2VkIHZhcmlhYmxlCiAgICAgY29ycmVjdGx5IGNvdW50cyBsaW5lIG51bWJlcgogICAgICJsb29rcyBvayIgcmF5QCBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEwLzIyIDE5OjEwOjI0CiAgICAgW3JlYWRjb25mLmNdCiAgICAgbWFrZSBzdXJlIHRoYXQgYm90aCB0aGUgbG9jYWwgYW5kIHJlbW90ZSBwb3J0IGFyZSBjb3JyZWN0IHdoZW4KICAgICBwYXJzaW5nIC1MOyBKYW4gUGVjaGFuZWMgKGJ6ICMxMzc4KQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8yNCAwMzozMDowMgogICAgIFtzZnRwLmNdCiAgICAgcmV3b3JrIGFyZ3VtZW50IHNwbGl0dGluZyBhbmQgcGFyc2luZyB0byBjb3BlIGNvcnJlY3RseSB3aXRoIGNvbW1vbgogICAgIHNoZWxsIGVzY2FwZXMgYW5kIG1ha2UgaGFuZGxpbmcgb2YgZXNjYXBlZCBjaGFyYWN0ZXJzIGNvbnNpc3RlbnQKICAgICB3aXRoIHNoKDEpIGFuZCBiZXR3ZWVuIHNmdHAgY29tbWFuZHMgKGVzcGVjaWFsbHkgYmV0d2VlbiBvbmVzIHRoYXQKICAgICBnbG9iIHRoZWlyIGFyZ3VtZW50cyBhbmQgb25lcyB0aGF0IGRvbid0KS4KICAgICBwYXJzZSBjb21tYW5kIGZsYWdzIHVzaW5nIGdldG9wdCgzKSByYXRoZXIgdGhhbiBoYW5kLXJvbGxlZCBwYXJzZXJzLgogICAgIG9rIGR0dWNrZXJACiAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTAvMjQgMDM6NDQ6MDIKICAgICBbc2NwLmNdCiAgICAgZmFjdG9yIG91dCBuZXR3b3JrIHJlYWQvd3JpdGUgaW50byBhbiBhdG9taWNpbygpLWxpa2UgZnVuY3Rpb24sIGFuZAogICAgIHVzZSBpdCB0byBoYW5kbGUgc2hvcnQgcmVhZHMsIGFwcGx5IGJhbmR3aWR0aCBsaW1pdHMgYW5kIHVwZGF0ZQogICAgIGNvdW50ZXJzLiBtYWtlIG5ldHdvcmsgSU8gbm9uLWJsb2NraW5nLCBzbyBhIHNtYWxsIHRyaWNrbGUgb2YKICAgICByZWFkcy93cml0ZXMgaGFzIGEgY2hhbmNlIG9mIHVwZGF0aW5nIHRoZSBwcm9ncmVzcyBtZXRlcjsgYnogIzc5OQogICAgIG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzI5IDA5OjQ0OjAwCiAgICAgW3JlZ3Jlc3Mvc2Z0cC1jbWRzLnNoXQogICAgIGNsZWFuIHVwIG91ciBtZXNzCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzExLzA2IDA5OjI3OjQzCiAgICAgW3JlZ3Jlc3MvY2ZnbWF0Y2guc2hdCiAgICAgZml4IHF1b3RpbmcgZm9yIG5vbi0oYylzaCBsb2dpbiBzaGVsbHMuCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8xMi8xMyAwODozNjozNgogICAgIFtyZWdyZXNzL2NmZ21hdGNoLnNoXQogICAgIEFkZGl0aW9uYWwgdGVzdCBmb3IgbXVsdGlwbGUgUGVybWl0T3BlbiBlbnRyaWVzLiAgb2sgZGptQAogICAtIHB2YWxjaGV2QGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzA3IDE5OjQxOjQ2CiAgICAgW3JlZ3Jlc3MvY2lwaGVyLXNwZWVkLnNoIHJlZ3Jlc3MvdHJ5LWNpcGhlcnMuc2hdCiAgICAgdGVzdCB1bWFjLTY0QG9wZW5zc2guY29tCiAgICAgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8xMC8yNCAwMzozMjozNQogICAgIFtyZWdyZXNzL3NmdHAtY21kcy5zaCByZWdyZXNzL3NmdHAtZ2xvYi5zaCByZWdyZXNzL3Rlc3QtZXhlYy5zaF0KICAgICBjb21wcmVoZW5zaXZlIHRlc3RzIGZvciBzZnRwIGVzY2FwaW5nIGl0cyBpbnRlcmFjdGlvbiB3aXRoIGdsb2JiaW5nOwogICAgIG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzEwLzI2IDA1OjMwOjAxCiAgICAgW3JlZ3Jlc3Mvc2Z0cC1nbG9iLnNoIHJlZ3Jlc3MvdGVzdC1leGVjLnNoXQogICAgIHJlbW92ZSAiZWNobyAtRSIgY3JhcCB0aGF0IEkgYWRkZWQgaW4gbGFzdCBjb21taXQgYW5kIHVzZSBwcmludGYoMSkgZm9yCiAgICAgY2FzZXMgd2hlcmUgd2Ugc3RyaWN0bHkgcmVxdWlyZSBlY2hvIG5vdCB0byByZXByb2Nlc3MgZXNjYXBlIGNoYXJhY3RlcnMuCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8yOCAxNzo1MDoxMgogICAgIFtvcGVuYnNkLWNvbXBhdC9nbG9iLmNdCiAgICAgdW51c2VkIGFyZyBpbiBpbnRlcm5hbCBzdGF0aWMgQVBJCiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMTAvMTEgMTg6MzY6NDEKICAgICBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuYyBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5oXQogICAgIHVzZSBSUlNJRyBpbnN0ZWFkIG9mIFNJRyBmb3IgRE5TU0VDLiBvayBkam1ACiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwNi8xMC8yMSAwOTo1NTowMwogICAgIFtvcGVuYnNkLWNvbXBhdC9iYXNlNjQuY10KICAgICByZW1vdmUgY2FsbHMgdG8gYWJvcnQoMykgdGhhdCBjYW4ndCBoYXBwZW4gYW55d2F5OyBmcm9tCiAgICAgPGJyZXQgZG90IGxhbWJlcnQgYXQgZ21haWwuY29tPjsgb2sgbWlsbGVydEAgZGVyYWFkdEAKICAgLSBmcmFudHplbkBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8yNCAxODoxMTo0NgogICAgIFtvcGVuYnNkLWNvbXBhdC9zeXMtdHJlZS5oXQogICAgIHN5bmMgdG8gTmllbHMgUHJvdm9zJyB2ZXJzaW9uLiAgYXZvaWQgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcgaW4KICAgICBSQl9ORVhUKCkKICAgLSB0ZGV2YWxAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTEvMjQgMTg6MTA6NDIKICAgICBbb3BlbmJzZC1jb21wYXQvc3lzLXRyZWUuaF0KICAgICB0eXBvCiAgIC0gZ3JhbmdlQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzA0IDE2OjU5OjMyCiAgICAgW29wZW5ic2QtY29tcGF0L3N5cy1xdWV1ZS5oXQogICAgIFJlbW92ZSB1c2VsZXNzIGBgZWxtJycgYXJndW1lbnQgZnJvbSB0aGUgU0lNUExFUV9SRU1PVkVfSEVBRCBtYWNyby4KICAgICBUaGlzIG1hdGNoZXMgb3VyIFNMSVNUIGJlaGF2aW91ciBhbmQgTmV0QlNEJ3MgU0lNUExFUSBhcyB3ZWxsLgogICAgIG9rIG1pbGxlcnQga3J3IGRlcmFhZHQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAyLzI1IDEzOjI5OjMwCiAgICAgW29wZW5ic2QtY29tcGF0L3N5cy1xdWV1ZS5oXQogICAgIG1pbm9yIHdoaXRlIHNwYWNpbmcKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzE3IDIwOjE5OjQyCiAgICAgW29wZW5ic2QtY29tcGF0L3N5cy1xdWV1ZS5oXQogICAgIFBlcmZvcm1pbmcgY2VydGFpbiBvcGVyYXRpb25zIG9uIHF1ZXVlLmggZGF0YSBzdHJ1Y3R1cnMgcHJvZHVjZWQKICAgICBmdW5ueSByZXN1bHRzLiAgQW4gZXhhbXBsZSBpcyBjYWxsaW5nICBMSVNUX1JFTU9WRSBvbiB0aGUgc2FtZQogICAgIGVsZW1lbnQgdHdpY2UuIFRoaXMgd2lsbCBub3QgZmFpbCwgYnV0IHJlc3VsdCBpbiBhIGRhdGEgc3RydWN0dXJlCiAgICAgcmVmZXJlbmNpbmcgd2hvIGtub3dzIHdoYXQuIFByZXZlbnQgdGhlc2UgYWNjaWRlbnRzIGJ5IE5VTExpbmcgc29tZQogICAgIGZpZWxkcyBvbiByZW1vdmUgYW5kIHJlcGxhY2UuIFRoaXMgd2F5LCBlaXRoZXIgYSBwYW5pYyBvciBzZWdmYXVsdAogICAgIHdpbGwgYmUgcHJvZHVjZWQgb24gdGhlIGZhdWx0eSBvcGVyYXRpb24uCiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8yNCAyMDoyNToxNAogICAgIFtvcGVuYnNkLWNvbXBhdC9zeXMtcXVldWUuaF0KICAgICBQYXJ0bHkgYmFja291dC4gTk9MSVNULCB1c2VkIGluIExJU1RzIGlzIHByb2JhYmx5IGludGVyZmVyaW5nLgogICAgIHJlcXVlc3RlZCBieSBkZXJhYWR0QAogICAtIG90dG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMjUgMDY6Mzc6NDcKICAgICBbb3BlbmJzZC1jb21wYXQvc3lzLXF1ZXVlLmhdCiAgICAgU29tZSB1dm0gcHJvYmxlbSBpcyBiZWluZyBleHBvc2VkIHdpdGggdGhlIG1vcmUgc3RyaWN0IG1hY3Jvcy4KICAgICBSZXZlcnQgdW50aWwgd2UndmUgZm91bmQgb3V0IHdoYXQncyBjYXVzaW5nIHRoZSBwYW5pY3MuCiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8yNSAwODowNjoyNQogICAgIFtvcGVuYnNkLWNvbXBhdC9zeXMtcXVldWUuaF0KICAgICBJbnRyb2R1Y2UgZGVidWdnaW5nIGFpZCBmb3IgcXVldWUgbWFjcm9zLiBEaXNhYmxlZCBieSBkZWZhdWx0OyBidXQKICAgICBkZXZlbG9wZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHJ1biB3aXRoIHRoaXMgZW5hYmxlZC4KICAgICBvayBrcndAIGZnc2NoQCBkZXJhYWR0QAogICAtIG90dG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDQvMzAgMTg6NDI6MzQKICAgICBbb3BlbmJzZC1jb21wYXQvc3lzLXF1ZXVlLmhdCiAgICAgRW5hYmxlIFFVRVVFX01BQ1JPX0RFQlVHIG9uIERJQUdOT1NUSUMga2VybmVscy4KICAgICBJbnB1dCBhbmQgb2theXMgZnJvbSBrcndALCBtaWxsZXJ0QCwgb3R0b0AsIGRlcmFhZHRALCBtaW9kQC4KICAgLSBtaWxsZXJ0QGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEwLzA3IDE2OjU2OjExCiAgICAgR0xPQl9OT0VTQ0FQRSBpcyBQT1NJWCBzbyBtb3ZlIGl0IG91dCBvZiB0aGUgI2lmbmRlZiBfUE9TSVhfU09VUkNFCiAgICAgYmxvY2suCiAgICAgKE5CLiBtb3N0bHkgYW4gUkNTIElEIHN5bmMsIGFzIHBvcnRhYmxlIHN0cmlwcyBvdXQgdGhlIGNvbmRpdGlvbmFscykKIC0gKGRqbSkgW3JlZ3Jlc3Mvc2Z0cC1jbWRzLnNoXQogICBVc2UgbW9yZSByZXN0cmljdGl2ZSBnbG9iIHRvIHBpY2sgdXAgdGVzdCBmaWxlcyBmcm9tIC9iaW4gLSBzb21lIHBsYXRmb3JtcwogICBzaGlwIGJyb2tlbiBzeW1saW5rcyB0aGVyZSB3aGljaCBjb3VsZCBzcG9pbCB0aGUgdGVzdC4KIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jXQogICBTeW5jIFJDUyBJRCBhZnRlciBpcnJlbGV2YW50IChmb3IgcG9ydGFibGUgT3BlblNTSCkgaGVhZGVyIHNodWZmbGluZwoKMjAwNzA5MjcKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgYXRvbWljaW8uY10gRmFsbCBiYWNrIHRvIGluY2x1ZGluZyA8c3lzL3BvbGwuaD4gaWYKICAgd2UgZG9uJ3QgaGF2ZSA8cG9sbC5oPiAoZXEgUU5YKS4gIEZyb20gYmFjb24gYXQgY3Mgbnl1IGVkdS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgZGVmaW5lcy5oXSBTaGFkb3cgZXhwaXJ5IGRvZXMgbm90IHdvcmsgb24gUU5YNgogICBzbyBkaXNhYmxlIGl0IGZvciB0aGF0IHBsYXRmb3JtLiAgRnJvbSBiYWNvbiBhdCBjcyBueXUgZWR1LgoKMjAwNzA5MjEKIC0gKGRqbSkgW2F0b21pY2lvLmNdIEZpeCBzcGluIGF2b2lkYW5jZSBmb3IgcGxhdGZvcm1zIHRoYXQgZGVmaW5lCiAgIEVXT1VMREJMT0NLOyBwYXRjaCBmcm9tIGJlbiBBVCBwc2MuZWR1CgoyMDA3MDkxNwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA4LzIzIDAyOjQ5OjQzCiAgICAgW2F1dGgtcGFzc3dkLmMgYXV0aC5jIHNlc3Npb24uY10KICAgICB1bmlmZGVmIEhBVkVfTE9HSU5fQ0FQOyBvayBkZXJhYWR0QCBtaWxsZXJ0QAogICAgIE5CLiBSQ1MgSUQgc3luYyBvbmx5IGZvciBwb3J0YWJsZQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wOC8yMyAwMjo1NTo1MQogICAgIFthdXRoLXBhc3N3ZC5jIGF1dGguYyBzZXNzaW9uLmNdCiAgICAgbWlzc2VkIGluY2x1ZGUgYml0cyBmcm9tIGxhc3QgY29tbWl0CiAgICAgTkIuIFJDUyBJRCBzeW5jIG9ubHkgZm9yIHBvcnRhYmxlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA4LzIzIDAzOjA2OjEwCiAgICAgW2F1dGguaF0KICAgICBsb2dpbl9jYXAuaCBkb2Vzbid0IGJlbG9uZyBoZXJlCiAgICAgTkIuIFJDUyBJRCBzeW5jIG9ubHkgZm9yIHBvcnRhYmxlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA4LzIzIDAzOjIyOjE2CiAgICAgW2F1dGgyLW5vbmUuYyBzc2hkX2NvbmZpZyBzc2hkX2NvbmZpZy41XQogICAgIFN1cHBvcnQgIkJhbm5lcj1ub25lIiB0byBkaXNhYmxlIGRpc3BsYXlpbmcgb2YgdGhlIHByZS1sb2dpbiBiYW5uZXI7CiAgICAgb2sgZHR1Y2tlckAgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDgvMjMgMDM6MjM6MjYKICAgICBbc3NoY29ubmVjdC5jXQogICAgIEV4ZWN1dGUgUHJveHlDb21tYW5kcyB3aXRoICRTSEVMTCByYXRoZXIgdGhhbiAvYmluL3NoIHVuY29uZGl0aW9uYWxseQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wOS8wNCAwMzoyMTowMwogICAgIFtjbGllbnRsb29wLmMgbW9uaXRvci5jIG1vbml0b3JfZmRwYXNzLmMgbW9uaXRvcl9mZHBhc3MuaF0KICAgICBbbW9uaXRvcl93cmFwLmMgc3NoLmNdCiAgICAgbWFrZSBmaWxlIGRlc2NyaXB0b3IgcGFzc2luZyBjb2RlIHJldHVybiBhbiBlcnJvciByYXRoZXIgdGhhbiBjYWxsIGZhdGFsKCkKICAgICB3aGVuIGl0IGVuY291bnRlcnMgcHJvYmxlbXMsIGFuZCB1c2UgdGhpcyB0byBtYWtlIHNlc3Npb24gbXVsdGlwbGV4aW5nCiAgICAgbWFzdGVycyBzdXJ2aXZlIHNsYXZlcyBmYWlsaW5nIHRvIHBhc3MgYWxsIHN0ZGlvIEZEczsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wOS8wNCAxMToxNTo1NgogICAgIFtzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdC5oXQogICAgIG1ha2Ugc3NoKDEpJ3MgQ29ubmVjdFRpbWVvdXQgb3B0aW9uIGFwcGx5IHRvIGJvdGggdGhlIFRDUCBjb25uZWN0aW9uIGFuZAogICAgIFNTSCBiYW5uZXIgZXhjaGFuZ2UgKHByZXZpb3VzbHkgaXQganVzdCBjb3ZlcmVkIHRoZSBUQ1AgY29ubmVjdGlvbikuCiAgICAgVGhpcyBhbGxvd3MgY2FsbGVycyBvZiBzc2goMSkgdG8gYmV0dGVyIGRldGVjdCBhbmQgZGVhbCB3aXRoIHN0dWNrIHNlcnZlcnMKICAgICB0aGF0IGFjY2VwdCBhIFRDUCBjb25uZWN0aW9uIGJ1dCBkb24ndCBwcm9ncmVzcyB0aGUgcHJvdG9jb2wsIGFuZCBhbHNvCiAgICAgbWFrZXMgQ29ubmVjdFRpbWVvdXQgdXNlZnVsIGZvciBjb25uZWN0aW9ucyB2aWEgYSBQcm94eUNvbW1hbmQ7CiAgICAgZmVlZGJhY2sgYW5kICJsb29rcyBvayIgbWFya3VzQAogICAtIHNvYnJhZG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMDkgMTE6Mzg6MDEKICAgICBbc3NoLWFkZC5jIHNzaC1hZ2VudC4xIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uY10KICAgICBzb3J0IHN5bm9wc2lzIGFuZCBvcHRpb25zIGluIHNzaC1hZ2VudCgxKTsgdXNhZ2UgaXMgbG93ZXJjYXNlCiAgICAgb2sgam1jQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMTEgMDQ6MzY6MjkKICAgICBbc3NocHR5LmNdCiAgICAgc29ydCAjaW5jbHVkZQogICAgIE5CLiBSQ1MgSUQgc3luYyBvbmx5CiAgIC0gZ2lsbGVzQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA5LzExIDE1OjQ3OjE3CiAgICAgW3Nlc3Npb24uYyBzc2gta2V5Z2VuLmMgc3NobG9naW4uY10KICAgICB1c2Ugc3RyY3NwbiB0byBwcm9wZXJseSBvdmVyd3JpdGUgJ1xuJyBpbiBmZ2V0cyByZXR1cm5lZCBidWZmZXIKICAgICBvayBweXJALCByYXlALCBtaWxsZXJ0QCwgbW9yaXR6QCwgY2hsQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMTEgMjM6NDk6MDkKICAgICBbc3NocHR5LmNdCiAgICAgcmVtb3ZlICNpZiBkZWZpbmVkIGJsb2NrIG5vdCBuZWVkZWQ7IG9rIG1hcmt1c0AgZHR1Y2tlckAKICAgICBOQi4gUkNTIElEIHN5bmMgb25seQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDkvMTIgMTk6Mzk6MTkKICAgICBbdW1hYy5jXQogICAgIHVzZSB4bWFsbG9jKCkgYW5kIHhmcmVlKCk7IG9rIG1hcmt1c0AgcHZhbGNoZXZACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA5LzEzIDA0OjM5OjA0CiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgZml4IGluY29ycmVjdCB0ZXN0IHdoZW4gc2V0dGluZyBzeXNsb2cgZmFjaWxpdHk7IGZyb20gSmFuIFBlY2hhbmVjCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA5LzE2IDAwOjU1OjUyCiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgdXNlIG9mZl90IGluc3RlYWQgb2YgdV9pbnQ2NF90IGZvciBmaWxlIG9mZnNldHMsIG1hdGNoaW5nIHdoYXQgdGhlCiAgICAgcHJvZ3Jlc3NtZXRlciBjb2RlIGV4cGVjdHM7IGJ6ICM4NDIKIC0gKHRpbSkgW2RlZmluZXMuaF0gRml4IHJlZ3Jlc3Npb24gaW4gbG9uZyBwYXNzd29yZCBzdXBwb3J0IG9uIE9wZW5TZXJ2ZXIgNi4KICAgUHJvYmxlbSByZXBvcnQgYW5kIGFkZGl0aW9uYWwgdGVzdGluZyByYWMgQVQgdGVuemluZy5vcmcuCgoyMDA3MDkxNAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1hc3ByaW50Zi5jXSBQbHVnIG1lbSBsZWFrIGluIGVycm9yIHBhdGguCiAgIFBhdGNoIGZyb20gSmFuLlBlY2hhbmVjIGF0IHN1biBjb20uCgoyMDA3MDkxMAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3JlZ3Jlc3MvY2xvc2Vmcm9tdGVzdC5jXSBCdWcgIzEzNTg6IEFsd2F5cwogICByZXR1cm4gMCBvbiBzdWNjZXNzZnVsIHRlc3QuICBGcm9tIERhdmlkLkxlb25hcmQgYXQgcXVlc3QgY29tLgogLSAodGltKSBbY29uZmlndXJlLmFjXSBBdXRvY29uZiBkaWRuJ3QgZGVmaW5lIEhBVkVfTElCSUFGIGJlY2F1c2Ugd2UKICAgZGlkIGEgQUNfQ0hFQ0tfRlVOQ1Mgd2l0aGluIHRoZSBBQ19DSEVDS19MSUIgdGVzdC4KCjIwMDcwODE3CiAtIChkdHVja2VyKSBbc3NoZC44XSBNYW55IExpbnV4IHZhcmlhbnRzIHVzZSBhIHNpbmdsZSAiISIgdG8gZGVub3RlIGxvY2tlZAogICBhY2NvdW50cyBhbmQgdGhhdCdzIHdoYXQgdGhlIGNvZGUgbG9va3MgZm9yLCBzbyBtYWtlIG1hbiBwYWdlIGFuZCBjb2RlCiAgIGFncmVlLiAgUG9pbnRlZCBvdXQgYnkgUm91bWVuIFBldHJvdi4KIC0gKGR0dWNrZXIpIFtJTlNUQUxMXSBHcm91cCB0aGUgcGFydHMgZGVzY3JpYmluZyByYW5kb20gb3B0aW9ucyBhbmQgUEFNCiAgIGltcGxlbWVudGF0aW9ucyB0b2dldGhlciB3aGljaCBpcyBob3BlZnVsbHkgbW9yZSBjb2hlcmVudC4KIC0gKGR0dWNrZXIpIFtJTlNUQUxMXSB0aGUgcGlkIGZpbGUgaXMgc3NoZC5waWQgbm90IHNzaC5waWQuCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gR2l2ZSBQQU0gaXRzIG93biBoZWFkaW5nLgogLSAoZHR1Y2tlcikgW0lOU1RBTExdIExpbmsgdG8gdGNwd3JhcHBlcnMuCgoyMDA3MDgxNgogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQ2FsbCBQQU0gY2xlYW51cCBmdW5jdGlvbnMgZm9yIHVuYXV0aGVudGljYXRlZAogICBjb25uZWN0aW9ucyB0b28uICBCYXNlZCBvbiBhIHBhdGNoIGZyb20gU2FuZHJvIFdlZmVsLCB3aXRoICYgb2sgZGptQAoKMjAwNzA4MTUKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDgvMTUgMDg6MTQ6NDYKICAgICBbY2xpZW50bG9vcC5jXQogICAgIGRvIE5PVCBmYWxsIGJhY2sgdG8gdGhlIHRydXNlZCB4MTEgY29va2llIGlmIGdlbmVyYXRpb24gb2YgYW4gdW50cnVzdGVkCiAgICAgY29va2llIGZhaWxzOyBmcm9tIEphbiBQZWNoYW5lYywgdmlhIHNlY3VyaXR5LWFsZXJ0IGF0IHN1bi5jb207CiAgICAgb2sgZHR1Y2tlcgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wOC8xNSAwODoxNjo0OQogICAgIFt2ZXJzaW9uLmhdCiAgICAgb3BlbnNzaCA0LjcKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA4LzE1IDEyOjEzOjQxCiAgICAgW3NzaF9jb25maWcuNV0KICAgICB0dW4gZGV2aWNlIGZvcndhcmRpbmcgbm93IGhvbm91cnMgRXhpdE9uRm9yd2FyZEZhaWx1cmU7IG9rIG1hcmt1c0AKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtY3JheS5jXSBSZW1vdmUgZGVidWcgZnJvbSBzaWduYWwgaGFuZGxlci4KICAgb2sgZGptQAogLSAoZHR1Y2tlcikgW1JFQURNRSBjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjIGNvbnRyaWIvcmVkaGF0L29wZW5zc2guc3BlYwogICBjb250cmliL3N1c2Uvb3BlbnNzaC5zcGVjXSBDcmFuayB2ZXJzaW9uLgoKMjAwNzA4MTMKIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmNdIEJ1ZyAjMTMzOTogZW5zdXJlIHRoYXQgcGFtX3NldGNyZWQoKSBpcyBhbHdheXMKICAgY2FsbGVkIHdpdGggUEFNX0VTVEFCTElTSF9DUkVEIGF0IGxlYXN0IG9uY2UsIHdoaWNoIHJlc29sdmVzIGEgcHJvYmxlbQogICB3aXRoIHBhbV9kaGtleXMuICBQYXRjaCBmcm9tIERhdmlkIExlb25hcmQsIG9rIGRqbUAKCjIwMDcwODEwCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gVXNlIHNpZ2RpZSBoZXJlIHRvby4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTM0MzogU2V0IERJU0FCTEVfRkRfUEFTU0lORyBmb3IgUU5YNi4gRnJvbSAKICAgTWF0dCBLcmFhaSwgb2sgZGptQCAKCjIwMDcwODA5CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gQ29tbWVudCB0eXBvLgogLSAoZHR1Y2tlcikgW1JFQURNRS5wbGF0Zm9ybV0gRG9jdW1lbnQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gUGVybWl0Um9vdExvZ2luCiAgIGFuZCB0aGUgQUlYIG5hdGl2ZSBsb2dpbiByZXN0cmljdGlvbnMuCiAtIChkdHVja2VyKSBbZGVmaW5lcy5oXSBSZW1vdmUgX1BBVEhfe0NTSEVMTCxTSEVMTFN9IHdoaWNoIGFyZW4ndAogICB1c2VkIGFueXdoZXJlIGFuZCBhcmUgYSBwb3RlbnRpYWwgc291cmNlIG9mIHdhcm5pbmdzLgoKMjAwNzA4MDgKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIHJheUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNy8xMiAwNTo0ODowNQogICAgIFtrZXkuY10KICAgICBEZWxpbnQ6IHJlbW92ZSBzb21lIHVucmVhY2hhYmxlIHN0YXRlbWVudHMsIGZyb20gQnJldCBMYW1iZXJ0LgogICAgIE9LIG1hcmt1c0AgYW5kIGR0dWNrZXJALgogICAtIHNvYnJhZG9AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDgvMDYgMTk6MTY6MDYKICAgICBbc2NwLjEgc2NwLmNdCiAgICAgdGhlIGVsbGlwc2lzIGlzIG5vdCBhbiBvcHRpb25hbCBhcmd1bWVudDsgd2hpbGUgaGVyZSwgc3luYyB0aGUgdXNhZ2UKICAgICBhbmQgc3lub3BzaXMgb2YgY29tbWFuZHMKICAgICBsb3RzIG9mIGdvb2QgaWRlYXMgYnkgam1jQAogICAgIG9rIGptY0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDgvMDcgMDc6MzI6NTMKICAgICBbY2xpZW50bG9vcC5jIGNsaWVudGxvb3AuaCBzc2guY10KICAgICBieiMxMjMyOiBlbnN1cmUgdGhhdCBhbnkgc3BlY2lmaWVkIExvY2FsQ29tbWFuZCBpcyBleGVjdXRlZCBhZnRlciB0aGUKICAgICB0dW5uZWwgZGV2aWNlIGlzIG9wZW5lZC4gQWxzbywgbWFrZSBmYWlsdXJlcyB0byBvcGVuIGEgdHVubmVsIGRldmljZQogICAgIGZhdGFsIHdoZW4gRXhpdE9uRm9yd2FyZEZhaWx1cmUgaXMgYWN0aXZlLgogICAgIFJlcG9ydGVkIGJ5IGguZ29lYmVsIEFUIGdvZWJlbC1jb25zdWx0LmRlOyBvayBkdHVja2VyIG1hcmt1cyByZXlrIGRlcmFhZHQKCjIwMDcwNzI0CiAtICh0aW0pIFtvcGVuc3NoLnhtbC5pbl0gbWFrZSBGTVJJIG1hdGNoIHdoYXQgcGFja2FnZSBzY3JpcHRzIHVzZS4KIC0gKHRpbSkgW29wZW5ic2QtY29tcGF0L3JlZ3Jlc3MvY2xvc2Vmcm9tdGVzdC5jXSBCdWcgMTM0NTogZml4IG9wZW4oKSBjYWxsLgogICBSZXBvcnQvcGF0Y2ggYnkgRGF2aWQuTGVvbmFyZCBBVCBxdWVzdC5jb20gKGFuZCBCZXJuaGFyZCBTaW1vbikKIC0gKHRpbSkgW2J1aWxkcGtnLnNoLmluIG9wZW5zc2gueG1sLmluXSBBbGxvdyBtb3JlIGZsZXhpYmlsaXR5IHdoZXJlIHNtZig1KQogLSAodGltKSBbYnVpbGRwa2cuc2guaW5dIHN8JEZBS0VfUk9PVC8ke3N5c2NvbmZkaXJ9fCRGQUtFX1JPT1Qke3N5c2NvbmZkaXJ9fAoKMjAwNzA2MjgKIC0gKGRqbSkgYnojMTMyNTogRml4IFNFTGludXggaW4gcGVybWlzc2l2ZSBtb2RlIHdoZXJlIGl0IHdvdWxkCiAgIGluY29ycmVjdGx5IGZhdGFsKCkgb24gZXJyb3JzLiBwYXRjaCBmcm9tIGNqd2F0c29uIEFUIGRlYmlhbi5vcmc7CiAgIG9rIGR0dWNrZXIKCjIwMDcwNjI1CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzEzIDAwOjIxOjI3CiAgICAgW3NjcC5jXQogICAgIGRvbid0IGZ0cnVuY2F0ZSgpIG5vbi1yZWd1bGFyIGZpbGVzOyBieiMxMjM2IHJlcG9ydGVkIGJ5IHdvb2QgQVQKICAgICB4bWlzc2lvbi5jb207IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzE0IDIxOjQzOjI1CiAgICAgW3NzaC5jXQogICAgIGhhbmRsZSBFSU5UUiB3aGVuIHdhaXRpbmcgZm9yIG11eCBleGl0IHN0YXR1cyBwcm9wZXJseQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xNCAyMjo0ODowNQogICAgIFtzc2guY10KICAgICB3aGVuIHdhaXRpbmcgZm9yIHRoZSBtdWx0aXBsZXggZXhpdCBzdGF0dXMsIHJlYWQgdW50aWwgdGhlIG1hc3RlciBlbmQKICAgICB3cml0ZXMgYW4gZW50aXJlIGludCBvZiBkYXRhICphbmQqIGNsb3NlcyB0aGUgY2xpZW50X2ZkOyBmaXhlcyBtdXgKICAgICByZWdyZXNzaW9uIHNwb3R0ZWQgYnkgZHR1Y2tlciwgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMTkgMDI6MDQ6NDMKICAgICBbYXRvbWljaW8uY10KICAgICBpZiB0aGUgZmQgcGFzc2VkIHRvIGF0b21pY2lvL2F0b21pY2lvdigpIGlzIG5vbiBibG9ja2luZywgdGhlbiBwb2xsKCkgdG8KICAgICBhdm9pZCBhIHNwaW4gaWYgaXQgaXMgbm90IHlldCByZWFkeSBmb3IgcmVhZGluZy93cml0aW5nOyBvayBkdHVja2VyQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMjUgMDg6MjA6MDMKICAgICBbY2hhbm5lbHMuY10KICAgICBDb3JyZWN0IHRlc3QgZm9yIHdpbmRvdyB1cGRhdGVzIGV2ZXJ5IHRocmVlIHBhY2tldHM7IHByZXZlbnRzIHNlbmRpbmcKICAgICB3aW5kb3cgdXBkYXRlcyBmb3IgZXZlcnkgc2luZ2xlIHBhY2tldC4gIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzI1IDEyOjAyOjI3CiAgICAgW2F0b21pY2lvLmNdCiAgICAgSW5jbHVkZSA8cG9sbC5oPiBsaWtlIHRoZSBtYW4gcGFnZSBzYXlzIHJhdGhlciB0aGFuIDxzeXMvcG9sbC5oPi4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdG9taWNpby5jXSBUZXN0IGZvciBFV09VTERCTE9DSyBpbiBhdG9taWNpb3YgdG8gbWF0Y2gKICAgYXRvbWljaW8uCiAtIChkdHVja2VyKSBbYXRvbWljaW8uYyBjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4KICAgb3BlbmJzZC1jb21wYXQvYnNkLXBvbGwue2MsaH0gb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0KICAgQWRkIGFuIGltcGxlbWVudGF0aW9uIG9mIHBvbGwoKSBidWlsdCBvbiB0b3Agb2Ygc2VsZWN0KDIpLiAgQ29kZSBmcm9tCiAgIE9wZW5OVFBEIHdpdGggY2hhbmdlcyBzdWdnZXN0ZWQgYnkgZGptLiAgb2sgZGptQAoKMjAwNzA2MTQKIC0gKGR0dWNrZXIpIFtjaXBoZXItY3RyLmMgdW1hYy5jIG9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmhdIE1vdmUgdGhlCiAgIFVTRV9CVUlMVElOX1JJSk5EQUVMIGNvbXBhdCBnb29wIHRvIG9wZW5zc2wtY29tcGF0Lmggc28gaXQgY2FuIGJlCiAgIHNoYXJlZCB3aXRoIHVtYWMuYy4gIEFsbG93cyBidWlsZGluZyB3aXRoIE9wZW5TU0wgMC45LjUgYWdhaW4gaW5jbHVkaW5nCiAgIHVtYWMgc3VwcG9ydC4gIFdpdGggdGltQCBkam1ALCBvayBkam0uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaF0gTWVyZ2UgVVNFX0JVSUxUSU5fUklKTkRBRUwKICAgc2VjdGlvbnMuICBGaXhlcyBidWlsZHMgd2l0aCBlYXJseSBPcGVuU1NMIDAuOS42IHZlcnNpb25zLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmhdIFJlbW92ZSByZWR1bmRhbnQgZGVmaW5pdGlvbgogICBvZiBVU0VfQlVJTFRJTl9SSUpOREFFTCBzaW5jZSB0aGUgPDAuOS42IHRlc3QgaXMgY292ZXJlZCBieSB0aGUKICAgc3Vic2VxdWVudCA8MC45LjcgdGVzdC4KCjIwMDcwNjEyCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzExIDA5OjE0OjAwCiAgICAgW2NoYW5uZWxzLmhdCiAgICAgaW5jcmVhc2UgZGVmYXVsdCBjaGFubmVsIHdpbmRvd3M7IG9rIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xMiAwNzo0MTowMAogICAgIFtzc2gtYWRkLjFdCiAgICAgYmV0dGVyIGRvY3VtZW50IHNzaC1hZGQncyAtZCBvcHRpb24gKGRlbGV0ZSBpZGVudGllcyBmcm9tIGFnZW50KSwgYnojMTIyNAogICAgIG5ldyB0ZXh0IGJhc2VkIG9uIHNvbWUgcHJvdmlkZWQgYnkgYW5kcmV3bWMtZGViaWFuIEFUIGNlbHQuZGlhcy5pZTsKICAgICBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xMiAwODoyMDowMAogICAgIFtzc2gtZ3NzLmggZ3NzLXNlcnYuYyBnc3MtZ2Vuci5jXQogICAgIHJlbG9jYXRlIHNlcnZlci1vbmx5IEdTU0FQSSBjb2RlIGZyb20gbGlic3NoIHRvIHNlcnZlcjsgYnogIzEyMjUKICAgICBwYXRjaCBmcm9tIHNpbW9uIEFUIHN4dy5vcmcudWs7IG9rIG1hcmt1c0AgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMTIgMDg6MjQ6MjAKICAgICBbc2NwLmNdCiAgICAgbWFrZSBzY3AgdHJ5IHRvIHNraXAgRklGT3MgcmF0aGVyIHRoYW4gYmxvY2tpbmcgd2hlbiBub3RoaW5nIGlzIGxpc3RlbmluZy4KICAgICBkZXBlbmRzIG9uIHRoZSBwbGF0Zm9ybSBzdXBwb3J0aW5nIHNhbmUgT19OT05CTE9DSyBzZW1hbnRpY3MgZm9yIG9wZW4KICAgICBvbiBGSUZPcyAoYXBwYXJlbnRseSBQT1NJWCBkb2VzIG5vdCBtYW5kYXRlIHRoaXMpLCB3aGljaCBPcGVuQlNEIGRvZXMuCiAgICAgYnogIzg1NjsgcmVwb3J0IGJ5IGNqd2F0c29uIEFUIGRlYmlhbi5vcmc7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMTIgMTE6MTE6MDgKICAgICBbc3NoLmNdCiAgICAgZml4IHNsYXZlIGV4aXQgdmFsdWUgd2hlbiBhIGNvbnRyb2wgbWFzdGVyIGdvZXMgYXdheSB3aXRob3V0IHBhc3NpbmcgdGhlCiAgICAgZnVsbCBleGl0IHN0YXR1cyBieSBlbnN1cmluZyB0aGF0IHRoZSBzbGF2ZSByZWFkcyBhIGZ1bGwgaW50LiBieiMxMjYxCiAgICAgcmVwb3J0ZWQgYnkgZnJla2tvIEFUIGdtYWlsLmNvbTsgb2sgbWFya3VzQCBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xMiAxMToxNToxNwogICAgIFtzc2guYyBzc2guMV0KICAgICBBZGQgIi1LIiBmbGFnIGZvciBzc2ggdG8gc2V0IEdTU0FQSUF1dGhlbnRpY2F0aW9uPXllcyBhbmQKICAgICBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzPXllcy4gVGhpcyBpcyBzeW1tZXRyaWMgd2l0aCAtayAoZGlzYWJsZSBHU1NBUEkpCiAgICAgYW5kIGlzIHVzZWZ1bCBmb3IgaG9zdHMgd2l0aCAvaG9tZSBvbiBLZXJiZXJpc2VkIE5GUzsgYnogIzEzMTIKICAgICBwYXRjaCBmcm9tIE1hcmt1cy5LdWhuIEFUIGNsLmNhbS5hYy51azsgb2sgZHR1Y2tlckAgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xMiAxMTo0NToyNwogICAgIFtzc2guY10KICAgICBpbXByb3ZlZCBleGl0IG1lc3NhZ2UgZnJvbSBtdWx0aXBsZXggc2xhdmUgc2Vzc2lvbnM7IGJ6ICMxMjYyCiAgICAgcmVwb3J0ZWQgYnkgYWxleGFuZHJlLm51bmVzIEFUIGdtYWlsLmNvbTsgb2sgZHR1Y2tlckAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzEyIDExOjU2OjE1CiAgICAgW2dzcy1nZW5yLmNdCiAgICAgUGFzcyBHU1MgT0lEIHRvIGdzc19kaXNwbGF5X3N0YXR1cyB0byBwcm92aWRlIGJldHRlciBpbmZvcm1hdGlvbiBpbgogICAgIGVycm9yIG1lc3NhZ2VzLiAgUGF0Y2ggZnJvbSBTaW1vbiBXaWxraW5zb24gdmlhIGJ6IDEyMjAuICBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzEyIDEzOjQxOjAzCiAgICAgW3NzaC1hZGQuMV0KICAgICBpZGVudGllcyAtPiBpZGVudGl0aWVzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xMiAxMzo0Mzo1NQogICAgIFtzc2guMV0KICAgICBhZGQgLUsgdG8gU1lOT1BTSVM7CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8xMiAxMzo1NDoyOAogICAgIFtzY3AuY10KICAgICBFbmNvZGUgZmlsZW5hbWUgd2l0aCBzdHJudmlzIGlmIHRoZSBuYW1lIGNvbnRhaW5zIGEgbmV3bGluZSAod2hpY2ggY2FuJ3QKICAgICBiZSByZXByZXNlbnRlZCBpbiB0aGUgc2NwIHByb3RvY29sKSwgZnJvbSBieiAjODkxLiAgb2sgbWFya3VzQAoKMjAwNzA2MTEKIC0gKGRqbSkgQnVnemlsbGEgIzEzMDY6IHNpbGVuY2Ugc3B1cmlvdXMgZXJyb3IgbWVzc2FnZXMgZnJvbSBoYW5nLW9uLWV4aXQKICAgZml4OyB0ZXN0ZWQgYnkgZHR1Y2tlckAgYW5kIGpvY2hlbi5raXJuIEFUIGdtYWlsLmNvbQogICAtIHB2YWxjaGV2QGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzA3IDE5OjM3OjM0CiAgICAgW2tleC5oIG1hYy5jIG1hYy5oIG1vbml0b3Jfd3JhcC5jIG15cHJvcG9zYWwuaCBwYWNrZXQuYyBzc2guMV0KICAgICBbc3NoX2NvbmZpZy41IHNzaGQuOCBzc2hkX2NvbmZpZy41XQogICAgIEFkZCBhIG5ldyBNQUMgYWxnb3JpdGhtIGZvciBkYXRhIGludGVncml0eSwgVU1BQy02NCAobm90IGRlZmF1bHQgeWV0LAogICAgIG11c3Qgc3BlY2lmeSB1bWFjLTY0QG9wZW5zc2guY29tKS4gUHJvdmlkZXMgYWJvdXQgMjAlIGVuZC10by1lbmQgc3BlZWR1cAogICAgIGNvbXBhcmVkIHRvIGhtYWMtbWQ1LiBSZXByZXNlbnRzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIG1lc3NhZ2UKICAgICBhdXRoZW50aWNhdGlvbiB0byB0aGF0IG9mIEhNQUMgdGhhdCBtYXkgYmUgYmVuZWZpY2lhbCBpZiBITUFDIGJhc2VkIG9uCiAgICAgb25lIG9mIGl0cyB1bmRlcmx5aW5nIGhhc2ggYWxnb3JpdGhtcyBpcyBmb3VuZCB0byBiZSB2dWxuZXJhYmxlIHRvIGEKICAgICBuZXcgYXR0YWNrLiAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNDQxOC50eHQKICAgICBpbiBjb25qdW5jdGlvbiB3aXRoIGFuZCBPSyBkam1ACiAgIC0gcHZhbGNoZXZAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMDggMDQ6NDA6NDAKICAgICBbc3NoX2NvbmZpZ10KICAgICBBZGQgYSAiTUFDcyIgbGluZSBhZnRlciAiQ2lwaGVycyIgd2l0aCB0aGUgZGVmYXVsdCBNQUMgYWxnb3JpdGhtcywKICAgICB0byBlYXNlIHBlb3BsZSB3aG8gd2FudCB0byB0d2VhayBib3RoIChlZy4gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMpLgogICAgIG9rIGRlcmFhZHRAIGRqbUAgZHR1Y2tlckAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMDggMDc6NDM6NDYKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHB1dCB0aGUgTUFDIGxpc3QgaW50byBhIGRpc3BsYXksIGxpa2Ugd2UgZG8gZm9yIGNpcGhlcnMsCiAgICAgc2luY2UgZ3JvZmYgaGFzIHRyb3VibGUgaGFuZGxpbmcgd2lkZSBsaW5lczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDYvMDggMDc6NDg6MDkKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBvb3BzLCBoZXJlIHRvbzogcHV0IHRoZSBNQUMgbGlzdCBpbnRvIGEgZGlzcGxheSwgbGlrZSB3ZSBkbyBmb3IKICAgICBjaXBoZXJzLCBzaW5jZSBncm9mZiBoYXMgdHJvdWJsZSB3aXRoIHdpZGUgbGluZXM7CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzExIDA4OjA0OjQ0CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgc2VuZCAnd2luZG93IGFkanVzdCcgbWVzc2FnZXMgZXZlcnkgdHJlZSBwYWNrZXRzIGFuZCBkbyBub3Qgd2FpdAogICAgIHVudGlsIDUwJSBvZiB0aGUgd2luZG93IGlzIGNvbnN1bWVkLiAgb2sgZGptIGR0dWNrZXIKIC0gKGRqbSkgW2NvbmZpZ3VyZS5hYyB1bWFjLmNdIElmIHBsYXRmb3JtIGRvZXNuJ3QgcHJvdmlkZSBzd2FwMzIoMyksIHRoZW4KICAgZmFsbGJhY2sgdG8gcHJvdmlkZWQgYml0LXN3aXp6aW5nIGZ1bmN0aW9ucwogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdIEFjY29yZGluZyB0byB0aGUgc3BlYyB0aGUgInJlbWFpbmRlciIKICAgYXJndW1lbnQgdG8gbmFub3NsZWVwIG1heSBiZSBOVUxMLiAgQ3VycmVudGx5IHRoaXMgbmV2ZXIgaGFwcGVucyBpbiBPcGVuU1NILAogICBidXQgY2hlY2sgYW55d2F5IGluIGNhc2UgdGhpcyBjaGFuZ2VzIG9yIHRoZSBjb2RlIGdldHMgdXNlZCBlbHNld2hlcmUuCiAtIChkdHVja2VyKSBbaW5jbHVkZXMuaF0gQnVnICMxMjQzOiBIQVZFX1BBVEhTIC0+IEhBVkVfUEFUSFNfSC4gIFNob3VsZAogICBwcmV2ZW50IHdhcm5pbmdzIGFib3V0IHJlZGVmaW5pdGlvbnMgb2YgdmFyaW91cyB0aGluZ3MgaW4gcGF0aHMuaC4KICAgU3BvdHRlZCBieSBjYXJ0bWFubHRkIGF0IGhvdG1haWwuY29tLgoKMjAwNzA2MDUKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDUvMjIgMTA6MTg6NTIKICAgICBbc3NoZC5jXQogICAgIHphcCBkb3VibGUgaW5jbHVkZTsgZnJvbSBwX25vd2FjenlrIEFUIG8yLnBsCiAgICAgKG5vdCByZXF1aXJlZCBpbiAtcG9ydGFibGUsIElkIHN5bmMgb25seSkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDUvMzAgMDU6NTg6MTMKICAgICBba2V4LmNdCiAgICAgdGlkeTogS05GLCBBUkdTVVNFRCBhbmQgdV9pbnQKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDUvMzEgMTk6MjA6MTYKICAgICBbc2NwLjEgc3NoX2NvbmZpZy41IHNmdHAtc2VydmVyLjggc3NoLWFnZW50LjEgc3NoZF9jb25maWcuNSBzZnRwLjEKICAgICBzc2gta2V5Z2VuLjEgc3NoLWtleXNjYW4uMSBzc2gtYWRkLjEgc3NoZC44IHNzaC4xIHNzaC1rZXlzaWduLjhdCiAgICAgY29udmVydCB0byBuZXcgLkRkIGZvcm1hdDsKICAgICAoV2Ugd2lsbCBuZWVkIHRvIHRlYWNoIG1kb2MybWFuLmF3ayB0byB1bmRlcnN0YW5kIHRoaXMgdG9vLikKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDUvMzEgMjM6MzQ6MjkKICAgICBbcGFja2V0LmNdCiAgICAgZ2MgdW5yZWFjaGFibGUgY29kZTsgc3BvdHRlZCBieSBUYXZpcyBPcm1hbmR5CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA2LzAyIDA5OjA0OjU4CiAgICAgW2J1ZmJuLmNdCiAgICAgbWVtb3J5IGxlYWsgb24gZXJyb3IgcGF0aDsgZnJvbSBhcm5hdWQubGFjb21iZS4xIEFUIHVsYXZhbC5jYQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNi8wNSAwNjo1MjozNwogICAgIFtrZXguYyBtb25pdG9yX3dyYXAuYyBwYWNrZXQuYyBtYWMuaCBrZXguaCBtYWMuY10KICAgICBQcmVzZXJ2ZSBNQUMgY3R4IGJldHdlZW4gcGFja2V0cywgc2F2aW5nIDJ4aGFzaCBjYWxscyBwZXItcGFja2V0LgogICAgIFlpZWxkcyBhcm91bmQgYSAxMi0xNiUgZW5kLXRvLWVuZCBzcGVlZHVwIGZvciBhcmNmb3VyMjU2L2htYWMtbWQ1CiAgICAgcGF0Y2ggZnJvbSBtYXJrdXNAIHRlc3RlZCBkdHVja2VyQCBhbmQgbXlzZWxmLCBvayBtYXJrdXNAIGFuZCBtZSAoSSdtCiAgICAgY29tbWl0dGluZyBhdCBoaXMgcmVxdWVzdCkKIC0gKGR0dWNrZXIpIFttZG9jMm1hbi5hd2tdIFRlYWNoIGl0IHRvIGRlYWwgd2l0aCAkTWRvY2RhdGUgdGFncyB0aGF0CiAgIE9wZW5CU0QncyBjdnMgbm93IGFkZHMuCiAtIChkdHVja2VyKSBbbWRvYzJtYW4uYXdrXSBSZW1vdmUgdHJhaWxpbmcgIiQiIGZyb20gTWRvY2RhdGUgcmVnZXggc28KICAgbWluZHJvdCdzIGN2cyBkb2Vzbid0IGV4cGFuZCBpdCBvbiB1cy4KIC0gKGR0dWNrZXIpIFttZG9jMm1hbi5hd2tdIEFkZCBzdXBwb3J0IGZvciAlUiByZWZlcmVuY2VzLCB1c2VkIGZvciBSRkNzLgoKMjAwNzA1MjAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA0LzE0IDIyOjAxOjU4CiAgICAgW2F1dGgyLmNdCiAgICAgcmVtb3ZlIHVudXNlZCBtYWNybzsgZnJvbSBEbWl0cnkgVi4gTGV2aW4gPGxkdkBhbHRsaW51eC5vcmc+CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wNC8xOCAwMToxMjo0MwogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIGNhc3QgIiVsbHUiIGZvcm1hdCBzcGVjIHRvICh1bnNpZ25lZCBsb25nIGxvbmcpOyBkbyBub3QgYXNzdW1lIGEKICAgICB1X2ludDY0X3QgYXJnIGlzIHRoZSBzYW1lIGFzICd1bnNpZ25lZCBsb25nIGxvbmcnLgogICAgIGZyb20gRG1pdHJ5IFYuIExldmluIDxsZHZAYWx0bGludXgub3JnPgogICAgIG9rIG1hcmt1c0AgJ1llcywgdGhhdCBsb29rcyBjb3JyZWN0JyBtaWxsZXJ0QAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDQvMjMgMTA6MTU6MzkKICAgICBbc2VydmNvbmYuY10KICAgICBSZW1vdmUgZGVidWcoKSBsZWZ0IG92ZXIgZnJvbSBkZXZlbG9wbWVudC4gIG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA1LzE3IDA3OjUwOjMxCiAgICAgW2xvZy5jXQogICAgIHNhdmUgYW5kIHJlc3RvcmUgZXJybm8gd2hlbiBsb2dnaW5nOyBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNS8xNyAwNzo1NToyOQogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIGJ6IzEyODYgc3RvcCByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIGNvbW1hbmRzIHdoZW4gaW5wdXQgb3Igb3V0cHV0IGJ1ZmZlcgogICAgIGlzIG5lYXJseSBmdWxsLCBvdGhlcndpc2Ugc2Z0cC1zZXJ2ZXIgd291bGQgaGFwcGlseSB0cnkgdG8gZ3JvdyB0aGUKICAgICBpbnB1dC9vdXRwdXQgYnVmZmVycyBwYXN0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSB0aGUgYnVmZmVyIEFQSSBhbmQKICAgICBwcm9tcHRseSBmYXRhbCgpCiAgICAgYmFzZWQgb24gcGF0Y2ggZnJvbSBUaHVlIEphbnVzIEtyaXN0ZW5zZW47IGZlZWRiYWNrICYgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDUvMTcgMjA6NDg6MTMKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBmYWxsIGJhY2sgdG8gZ2V0aG9zdG5hbWUoKSB3aGVuIHRoZSBvdXRnb2luZyBjb25uZWN0aW9uIGlzIG5vdAogICAgIG9uIGEgc29ja2V0LCBzdWNoIGFzIGlzIHRoZSBjYXNlIHdoZW4gUHJveHlDb21tYW5kIGlzIHVzZWQuCiAgICAgR2l2ZXMgaG9zdGJhc2VkIGF1dGggYW4gb3Bwb3J0dW5pdHkgdG8gd29yazsgYnojNjE2LCByZXBvcnQKICAgICBhbmQgZmVlZGJhY2sgc3R1YXJ0IEFUIGthbG9yYW0uY29tOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzA1LzE3IDIwOjUyOjEzCiAgICAgW21vbml0b3IuY10KICAgICBwYXNzIHJlY2VpdmVkIFNJR0lOVCBmcm9tIG1vbml0b3IgdG8gcG9zdGF1dGggY2hpbGQgc28gaXQgY2FuIGNsZWFuCiAgICAgdXAgcHJvcGVybHkuIGJ6IzExOTYsIHBhdGNoIGZyb20gc2VudGhpbGt1bWFyX3NlbiBBVCBob3Rwb3AuY29tOwogICAgIG9rIG1hcmt1c0AKICAgLSBqb2xhbkBjdnMub3BlbmJzZC5vcmcgMjAwNy8wNS8xNyAyMzo1Mzo0MQogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIGRqbSBvd2VzIG1lIGEgdmIgYW5kIGEgdGlzbSBjZCBmb3IgYnJlYWtpbmcgc3NoIGNvbXBpbGF0aW9uCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gbWFsbG9jK21lbXNldCAtPiBjYWxsb2MuICBQYXRjaCBmcm9tCiAgIGxkdiBhdCBhbHRsaW51eC5vcmcuCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gUmV0dXJuIGVtcHR5IHN0cmluZyBpZiBmZ2V0cyBmYWlscyBpbgogICBzc2hwYW1fdHR5X2NvbnYuICBQYXRjaCBmcm9tIGxkdiBhdCBhbHRsaW51eC5vcmcuCgoyMDA3MDUwOQogLSAodGltKSBbY29uZmlndXJlLmFjXSBCdWcgIzEyODc6IEFkZCBtaXNzaW5nIHRlc3QgZm9yIHVjcmVkLmguCgoyMDA3MDQyOQogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdIEluY2x1ZGUgdW5pc3RkLmggYW5kIHN5cy90eXBlcy5oCiAgIGZvciBzZWxlY3QoMikgcHJvdG90eXBlLgogLSAoZHR1Y2tlcikgW2F1dGgtc2hhZG93LmMgbG9naW5yZWMuY10gSW5jbHVkZSB0aW1lLmggZm9yIHRpbWUoMikgcHJvdG90eXBlLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBCdWcgIzEyOTk6IFVzZSB0aGUKICAgcGxhdGZvcm0ncyBfcmVzIGlmIGl0IGhhcyBvbmUuICBTaG91bGQgZml4IHByb2JsZW0gb2YgRE5TU0VDIHJlY29yZCBsb29rdXBzCiAgIG9uIE5ldEJTRCBhcyByZXBvcnRlZCBieSBDdXJ0IFNhbXBzb24uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQveG1tYXAuY10gSW5jbHVkZSBzdGRsaWIuaCBmb3IgbWtzdGVtcCBwcm90b3R5cGUuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaF0gSGF2ZSBjb25maWd1cmUgY2hlY2sgZm9yIE1BWFNZTUxJTktTCiAgIHNvIHdlIGRvbid0IGdldCByZWRlZmluaXRpb24gd2FybmluZ3MuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQveG1tYXAuY10gSW5jbHVkZSBzdGRsaWIuaCBmb3IgbWtzdGVtcCBwcm90b3R5cGUuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaF0gUHJldmVudCB3YXJuaW5ncyBhYm91dCBfX2F0dHJpYnV0ZV9fCiAgIF9fbm9ubnVsbF9fIGZvciB2ZXJzaW9ucyBvZiBHQ0MgdGhhdCBkb24ndCBzdXBwb3J0IGl0LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBkZWZpbmVzLmhdIEhhdmUgY29uZmlndXJlIGNoZWNrIGZvciBvZmZzZXRvZgogICB0byBwcmV2ZW50IHJlZGVmaW5pdGlvbiB3YXJuaW5ncy4KCjIwMDcwNDA2CiAtIChkdHVja2VyKSBbSU5TVEFMTF0gVXBkYXRlIHRoZSBzeXN0ZW1zIHRoYXQgaGF2ZSBQQU0gYXMgc3RhbmRhcmQuICBMaW5rCiAgIHRvIE9wZW5QQU0gdG9vLgogLSAoZHR1Y2tlcikgW0lOU1RBTExdIHBybmdkIGxpdmVzIGF0IHNvdXJjZWZvcmdlIHRoZXNlIGRheXMuCgoyMDA3MDMyNgogLSAodGltKSBbYXV0aC5jIGNvbmZpZ3VyZS5hYyBkZWZpbmVzLmggc2Vzc2lvbi5jIG9wZW5ic2QtY29tcGF0L3BvcnQtdXcuYwogICBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3Lmggb3BlbmJzZC1jb21wYXQveGNyeXB0LmNdIFJld29yayBsaWJpYWYgdGVzdC9kZWZpbmVzCiAgIHRvIGFjY291bnQgZm9yIElSSVggaGF2aW5nIGxpYmlhZiBidXQgbm90IHNldF9pZCgpLiBQYXRjaCB3aXRoICYgb2sgZHR1Y2tlckAKCjIwMDcwMzI1CiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW4gY29uZmlndXJlLmFjXSBSZXBsYWNlIHNpbmdsZS1wdXJwb3NlIExJQlNFTElOVVgsCiAgIExJQldSQVAgYW5kIExJQlBBTSB2YXJpYWJsZXMgaW4gTWFrZWZpbGUgd2l0aCB0aGUgZ2VuZXJhbC1wdXJwb3NlCiAgIFNTSERMSUJTLiAgIkkgbGlrZSIgZGptQAoKMjAwNzAzMjEKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAzLzA5IDA1OjIwOjA2CiAgICAgW3NlcnZjb25mLmMgc3NoZC5jXQogICAgIE1vdmUgQy9SIC0+IGtiZGludCBzcGVjaWFsIGNhc2UgdG8gYWZ0ZXIgdGhlIGRlZmF1bHRzIGhhdmUgYmVlbgogICAgIGxvYWRlZCwgd2hpY2ggbWFrZXMgQ2hhbGxlbmdlUmVzcG9uc2UgZGVmYXVsdCB0byB5ZXMgYWdhaW4uICBUaGlzCiAgICAgd2FzIGJyb2tlbiBieSB0aGUgTWF0Y2ggY2hhbmdlcyBhbmQgbm90IGZpeGVkIHByb3Blcmx5IHN1YnNlcXVlbnRseS4KICAgICBGb3VuZCBieSBva2FuIGF0IGRlbWlybWVuLmNvbSwgb2sgZGptQCAicGxlYXNlIGRvIGl0IiBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wMy8xOSAwMTowMToyOQogICAgIFtzc2hkX2NvbmZpZ10KICAgICBEaXNhYmxlIHRoZSBsZWdhY3kgU1NIIHByb3RvY29sIDEgZm9yIG5ldyBpbnN0YWxsYXRpb25zIHZpYQogICAgIGEgY29uZmlndXJhdGlvbiBvdmVycmlkZS4gSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCBjaGFuZ2UgdGhlCiAgICAgc2VydmVyJ3MgZGVmYXVsdCBpdHNlbGYgc28gdXNlcnMgd2hvIG5lZWQgdGhlIGxlZ2FjeSBwcm90b2NvbAogICAgIHdpbGwgbmVlZCB0byB0dXJuIGl0IG9uIGV4cGxpY2l0bHkKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAzLzE5IDEyOjE2OjQyCiAgICAgW3NzaC1hZ2VudC5jXQogICAgIFJlbW92ZSB0aGUgc2lnbmFsIGhhbmRsZXIgdGhhdCBjaGVja3MgaWYgdGhlIGFnZW50J3MgcGFyZW50IHByb2Nlc3MKICAgICBoYXMgZ29uZSBhd2F5LCBpbnN0ZWFkIGNoZWNrIHdoZW4gdGhlIHNlbGVjdCBsb29wIHJldHVybnMuICBSZWNvcmQgd2hlbgogICAgIHRoZSBuZXh0IGtleSB3aWxsIGV4cGlyZSB3aGVuIHNjYW5uaW5nIGZvciBleHBpcmVkIGtleXMuICBTZXQgdGhlIHNlbGVjdAogICAgIHRpbWVvdXQgdG8gd2hpY2hldmVyIG9mIHRoZXNlIHR3byB0aGluZ3MgaGFwcGVucyBuZXh0LiAgV2l0aCBkam1ALCB3aXRoICYKICAgICBvayBkZXJhYWR0QCBtYXJrdXNACiAgIC0gdGVkdUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wMy8yMCAwMzo1NjoxMgogICAgIFtyZWFkY29uZi5jIGNsaWVudGxvb3AuY10KICAgICByZW1vdmUgc29tZSBib2d1cyAqcCB0ZXN0cyBmcm9tIGNoYXJsZXMgbG9uZ2VhdQogICAgIG9rIGRlcmFhZHQgbWlsbGVydAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wMy8yMCAxNTo1NzoxNQogICAgIFtzc2hkLjhdCiAgICAgLSBsZXQgc3lub3BzaXMgYW5kIGRlc2NyaXB0aW9uIGFncmVlIGZvciAtZgogICAgIC0gc29ydCBGSUxFUwogICAgIC0gKy5YciBzc2gta2V5c2NhbiAxICwKICAgICBmcm9tIElnb3IgU29icmFkbwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9ic2QtZ2V0cGVlcmVpZC5jXSBCdWcgIzEyODc6IFVzZQogICBnZXRwZWVydWNyZWQgdG8gaW1wbGVtZW50IGdldHBlZXJlaWQgKGN1cnJlbnRseSBvbmx5IFNvbGFyaXMgMTAgYW5kIHVwKS4KICAgUGF0Y2ggYnkgSmFuLlBlY2hhbmVjIGF0IFN1bi4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2FnZW50LWdldHBlZXJlaWQuc2hdIERvIHBlZXJlaWQgdGVzdCBpZiB3ZSBoYXZlCiAgIEhBVkVfR0VUUEVFUlVDUkVEIHRvby4gIEFsc28gZnJvbSBKYW4gUGVjaGFuZWMuCgoyMDA3MDMxMwogLSAoZHR1Y2tlcikgW2VudHJvcHkuYyBzY2FyZC1vcGVuc2MuYyBzc2gtcmFuZC1oZWxwZXIuY10gQnVnICMxMjk0OiBpbmNsdWRlCiAgIHN0cmluZy5oIHRvIHByZXZlbnQgd2FybmluZ3MsIGZyb20gdmFwaWVyIGF0IGdlbnRvby5vcmcuCiAtIChkdHVja2VyKSBbTElDRU5DRV0gQWRkIERhbmllbCBXYWxzaCBhcyBhIGNvcHlyaWdodCBob2xkZXIgZm9yIHRoZQogICBzZWxpbnV4IGJpdHMgaW4gLXBvcnRhYmxlLgogLSAoZHR1Y2tlcikgW2NpcGhlci0zZGVzMS5jIGNpcGhlci1iZjEuY10gVGhlIE9wZW5TU0wgMC45LjhlIHByb2JsZW0gaW4KICAgYnVnICMxMjkxIGFsc28gYWZmZWN0cyBQcm90b2NvbCAxIDNkZXMuICBXaGlsZSBhdCBpdCwgdXNlIGNvbXBhdC1vcGVuc3NsLmgKICAgaW4gY2lwaGVyLWJmMS5jLiAgUGF0Y2ggZnJvbSBKdWFuIEdhbGxlZ28uCiAtIChkdHVja2VyKSBbUkVBRE1FLnBsYXRmb3JtXSBJbmZvIGFib3V0IGJsaWJwYXRoIG9uIEFJWC4KCjIwMDcwMzA2CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDMvMDEgMTY6MTk6MzMKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBzb3J0IHRoZSBgbWF0Y2gnIGtleXdvcmRzOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wMy8wNiAxMDoxMzoxNAogICAgIFt2ZXJzaW9uLmhdCiAgICAgb3BlbnNzaC00LjY7ICJwbGVhc2UiIGRlcmFhZHRACiAtIChkam0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjIGNvbnRyaWIvcmVkaGF0L29wZW5zc2guc3BlY10KICAgW2NvbnRyaWIvc3VzZS9vcGVuc3NoLnNwZWNdIGNyYW5rIHNwZWMgZmlsZXMgZm9yIHJlbGVhc2UKIC0gKGRqbSkgW1JFQURNRV0gY29ycmVjdCBsaW5rIHRvIHJlbGVhc2Ugbm90ZXMKIC0gKGRqbSkgUmVsZWFzZSA0LjZwMQoKMjAwNzAzMDQKIC0gKGRqbSkgW2NvbmZpZ3VyZS5hY10gYWRkIGEgLS13aXRob3V0LW9wZW5zc2wtaGVhZGVyLWNoZWNrIG9wdGlvbiB0bwogICBjb25maWd1cmUsIGFzIHNvbWUgcGxhdGZvcm1zIChPUyBYKSBzaGlwIE9wZW5TU0wgaGVhZGVycyB3aG9zZSB2ZXJzaW9uCiAgIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgdGhlIHNoaXBwaW5nIGxpYnJhcnkuIG9rIGR0dWNrZXJACiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaF0gQnVnICMxMjkxOiBXb3JrIGFyb3VuZCBhCiAgIGJ1ZyBpbiBPcGVuU1NMIDAuOS44ZSB0aGF0IHByZXZlbnRzIGFlczI1Ni1jdHIsIGFlczE5Mi1jdHIgYW5kIGFyY2ZvdXIyNTYKICAgY2lwaGVycyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5IChkaXNjb25uZWN0cyB3aXRoICJCYWQgcGFja2V0IGxlbmd0aCIKICAgZXJyb3JzKSBhcyBmb3VuZCBieSBCZW4gSGFycmlzLiAgb2sgZGptQAoKMjAwNzAzMDMKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2FnZW50LXB0cmFjZS5zaF0gTWFrZSB0dHJhY2UgZ2RiIGVycm9yIGEgbGl0dGxlIG1vcmUKICAgZ2VuZXJhbCB0byBjb3ZlciBuZXdlciBnZGIgdmVyc2lvbnMgb24gSFAtVVguCgoyMDA3MDMwMgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRm9yIEN5Z3dpbiwgcmVhZCBmaWxlcyBpbiB0ZXh0bW9kZSAod2hpY2ggYWxsb3dzCiAgIENSTEYgYXMgd2VsbCBhcyBMRiBsaW5lZW5kaW5ncykgYW5kIHdyaXRlIGluIGJpbmFyeSBtb2RlLiAgUGF0Y2ggZnJvbQogICB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgogLSAoZHR1Y2tlcikgW0lOU1RBTExdIFVwZGF0ZSB0byBhdXRvY29uZi0yLjYxLgoKMjAwNzAzMDEKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAzLzAxIDEwOjI4OjAyCiAgICAgW2F1dGgyLmMgc3NoZF9jb25maWcuNSBzZXJ2Y29uZi5jXQogICAgIFJlbW92ZSBDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgaW5zaWRlIGEgTWF0Y2gKICAgICBibG9jayBhcyBpdHMgaW50ZXJhY3Rpb24gd2l0aCBLYmRJbnRlcmFjdGl2ZSBtYWtlcyBpdCBkaWZmaWN1bHQgdG8KICAgICBzdXBwb3J0LiAgQWxzbywgcmVsb2NhdGUgdGhlIENSL2tiZGludCBvcHRpb24gc3BlY2lhbC1jYXNlIGNvZGUgaW50bwogICAgIHNlcnZjb25mLiAgInBsZWFzZSBjb21taXQiIGRqbUAsIG9rIG1hcmt1c0AgZm9yIHRoZSByZWxvY2F0aW9uLgogLSAodGltKSBbYnVpbGRwa2cuc2guaW4gb3BlbnNzaC54bWwuaW5dIENsZWFuIHVwIFNvbGFyaXMgMTAgc21mKDUpIGJpdHMuCiAgICJMb29rcyBzYW5lIiBkdHVja2VyQAoKMjAwNzAyMjgKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAyLzI4IDAwOjU1OjMwCiAgICAgW3NzaC1hZ2VudC5jXQogICAgIFJlbW92ZSBleHBpcmVkIGtleXMgcGVyaW9kaWNhbGx5IHNvIHRoZXkgZG9uJ3QgcmVtYWluIGluIG1lbW9yeSB3aGVuCiAgICAgdGhlIGFnZW50IGlzIGVudGlyZWx5IGlkbGUsIGFzIG5vdGVkIGJ5IERhdmlkIFIuIFBpZWdkb24uICBUaGlzIGlzIHRoZQogICAgIHNpbXBsZSBmaXgsIGEgbW9yZSBlZmZpY2llbnQgb25lIHdpbGwgYmUgZG9uZSBsYXRlci4gIFdpdGggbWFya3VzLAogICAgIGRlcmFhZHQsIHdpdGggJiBvayBkam0uCgoyMDA3MDIyNQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wMi8yMCAxMDoyNToxNAogICAgIFtjbGllbnRsb29wLmNdCiAgICAgc2V0IG1heGltdW0gcGFja2V0IGFuZCB3aW5kb3cgc2l6ZXMgdGhlIHNhbWUgZm9yIG11bHRpcGxleGVkIGNsaWVudHMKICAgICBhcyBub3JtYWwgY29ubmVjdGlvbnM7IG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAyLzIxIDExOjAwOjA1CiAgICAgW3NzaGQuY10KICAgICBDbGVhciBhbGFybSgpIGJlZm9yZSByZXN0YXJ0aW5nIHNzaGQgb24gU0lHSFVQLiAgV2l0aG91dCB0aGlzLCBpZiB0aGVyZSdzCiAgICAgYSBTSUdBTFJNIHBlbmRpbmcgKGZvciBTU0gxIGtleSByZWdlbmVyYXRpb24pIHdoZW4gc3NoZCBpcyBTSUdIVVAnZWQsIHRoZQogICAgIG5ld2x5IGV4ZWMnZWQgc3NoZCB3aWxsIGdldCB0aGUgU0lHQUxSTSBhbmQgbm90IGhhdmUgYSBoYW5kbGVyIGZvciBpdCwKICAgICBhbmQgdGhlIGRlZmF1bHQgYWN0aW9uIHdpbGwgdGVybWluYXRlIHRoZSBsaXN0ZW5pbmcgc3NoZC4gIEFuYWx5c2lzIGFuZAogICAgIHBhdGNoIGZyb20gYW5kcmV3IGF0IGdhdWwub3JnLgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDIvMjIgMTI6NTg6NDAKICAgICBbc2VydmNvbmYuY10KICAgICBDaGVjayBhY3RpdmVwIHNvIE1hdGNoIGFuZCBHYXRld2F5UG9ydHMgd29yayB0b2dldGhlcjsgb2sgbWFya3VzQAogICAtIHJheUBjdnMub3BlbmJzZC5vcmcgMjAwNy8wMi8yNCAwMzozMDoxMQogICAgIFttb2R1bGkuY10KICAgICAtIHN0cmxlbiByZXR1cm5zIHNpemVfdCwgbm90IGludC4KICAgICAtIFBhc3MgZnVsbCBidWZmZXIgc2l6ZSB0byBmZ2V0cy4KICAgICBPSyBkam1ALCBtaWxsZXJ0QCwgYW5kIG1vcml0ekAuCgoyMDA3MDIxOQogIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMTAgMTM6MjM6MjIKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGRvIG5vdCB1c2UgYSBsaXN0IGZvciBTWU5PUFNJUzsKICAgICB0aGlzIGlzIGFjdHVhbGx5IHBhcnQgb2YgYSBsYXJnZXIgcmVwb3J0IHNlbnQgYnkgZXJpYyBzLiByYXltb25kCiAgICAgYW5kIGZvcndhcmRlZCBieSBicmFkLCBidXQgaSBvbmx5IHJlYWQgaGFsZiBvZiBpdC4gc3BvdHRlZCBieSBicmFkLgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wMS8xMiAyMDoyMDo0MQogICAgIFtzc2gta2V5Z2VuLjEgc3NoLWtleWdlbi5jXQogICAgIG1vcmUgc2Vjc2ggLT4gcmZjIDQ3MTYgdXBkYXRlczsKICAgICBzcG90dGVkIGJ5IHdpekBuZXRic2QKICAgICBvayBtYXJrdXMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAxLzE3IDIzOjIyOjUyCiAgICAgW3JlYWRjb25mLmNdCiAgICAgSG9ub3VyIGFjdGl2ZXAgZm9yIHRpbWVzIChlZyBTZXJ2ZXJBbGl2ZUludGVydmFsKSB3aGlsZSBwYXJzaW5nCiAgICAgc3NoX2NvbmZpZyBhbmQgfi8uc3NoL2NvbmZpZyBzbyB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aCBIb3N0IGRpcmVjdGl2ZXMuCiAgICAgRnJvbSBtYXJpby5sb3JlbnpAd2luY29yLW5peGRvcmYuY29tIHZpYSBieiAjMTI3NS4gIG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAxLzIxIDAxOjQxOjU0CiAgICAgW2F1dGgtc2tleS5jIGtleC5jIHNzaC1rZXlnZW4uYyBzZXNzaW9uLmMgY2xpZW50bG9vcC5jXQogICAgIHNwYWNlcwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMjEgMDE6NDU6MzUKICAgICBbcmVhZGNvbmYuY10KICAgICBzcGFjZXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMjIgMTE6MzI6NTAKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICByZXR1cm4gZXJyb3IgZnJvbSBkb191cGxvYWQoKSB3aGVuIGEgd3JpdGUgZmFpbHMuIGZpeGVzIGJ6IzEyNTI6IHplcm8KICAgICBleGl0IHN0YXR1cyBmcm9tIHNmdHAgd2hlbiB1cGxvYWRpbmcgdG8gYSBmdWxsIGRldmljZS4gcmVwb3J0IGZyb20KICAgICBqaXJrYXQgQVQgYXRsYXMuY3o7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAxLzIyIDEzOjA2OjIxCiAgICAgW3NjcC5jXQogICAgIGZpeCBkZXRlY3Rpb24gb2Ygd2hldGhlciB3ZSBzaG91bGQgc2hvdyBwcm9ncmVzcyBtZXRlciBvciBub3Q6IHNjcAogICAgIHRlc3RlZCBpc2F0dHkoc3RkZXJyKSBidXQgd3JvdGUgdGhlIHByb2dyZXNzIG1ldGVyIHRvIHN0ZG91dC4gVGhpcyBwYXRjaAogICAgIG1ha2VzIGl0IHRlc3Qgc3Rkb3V0LiBieiMxMjY1IHJlcG9ydGVkIGJ5IGp1bmttYWlsIEFUIGJpdHNjdWxwdHVyZS5jb207CiAgICAgb2YgZHR1Y2tlckAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAyLzE0IDE0OjMyOjAwCiAgICAgW2J1ZmJuLmNdCiAgICAgdHlwb3MgaW4gY29tbWVudHM7IG9rIGptY0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAyLzE5IDEwOjQ1OjU4CiAgICAgW21vbml0b3Jfd3JhcC5jIHNlcnZjb25mLmMgc2VydmNvbmYuaCBtb25pdG9yLmMgc3NoZF9jb25maWcuNV0KICAgICBUZWFjaCBNYXRjaCBob3cgaGFuZGxlIGNvbmZpZyBkaXJlY3RpdmVzIHRoYXQgYXJlIHVzZWQgYmVmb3JlCiAgICAgYXV0aGVudGljYXRpb24uICBUaGlzIGFsbG93cyBjb25maWd1cmF0aW9ucyBzdWNoIGFzIHBlcm1pdHRpbmcgcGFzc3dvcmQKICAgICBhdXRoZW50aWNhdGlvbiBmcm9tIHRoZSBsb2NhbCBuZXQgb25seSB3aGlsZSByZXF1aXJpbmcgcHVia2V5IGZyb20KICAgICBvZmZzaXRlLiAgb2sgZGptQCwgbWFuIHBhZ2UgYml0cyBvayBqbWNACiAtIChkdHVja2VyKSBbY29udHJpYi9maW5kc3NsLnNoXSBBZGQgIndoaWNoIiBhcyBhIHNoZWxsIGZ1bmN0aW9uIHNpbmNlIHNvbWUKICAgcGxhdGZvcm1zIGRvbid0IGhhdmUgaXQuICBQYXRjaCBmcm9tIGRsZW9uYXJkIGF0IHZpbnRlbGEuY29tLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIERvbid0IGF0dGVtcHQgdG8gY2FsbG9jCiAgIGFuIGFycmF5IGZvciBzaWduYXR1cmVzIHdoZW4gdGhlcmUgYXJlIG5vbmUgc2luY2UgImNhbGxvYygwLCBuKSByZXR1cm5zCiAgIE5VTEwgb24gc29tZSBwbGF0Zm9ybXMgKGVnIFRydTY0KSwgd2hpY2ggaXMgZXhwbGljaXRseSBwZXJtaXR0ZWQgYnkKICAgUE9TSVguICBEaWFnbm9zaXMgYW5kIHBhdGNoIGJ5IHN2YWxsZXQgZ2Vub3Njb3BlLmNucy5mci4KCjIwMDcwMTI4CiAtIChkam0pIFtjaGFubmVscy5jIHNlcnZlcmxvb3AuY10gRml4IHNvLWNhbGxlZCAiaGFuZyBvbiBleGl0IiAoYnogIzUyKQogICB3aGVuIGNsb3NpbmcgYSB0dHkgc2Vzc2lvbiB3aGVuIGEgYmFja2dyb3VuZCBwcm9jZXNzIHN0aWxsIGhvbGRzIHR0eQogICBmZHMgb3Blbi4gR3JlYXQgZGV0ZWN0aXZlIHdvcmsgYW5kIHBhdGNoIGJ5IE1hcmMgQXVyZWxlIExhIEZyYW5jZSwKICAgc2xpZ2h0bHkgdHdlYWtlZCBieSBtZTsgb2sgZHR1Y2tlckAKCjIwMDcwMTIzCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmNdIFN0YXRpYyBkZWNsYXJhdGlvbnMgZm9yIHB1YmxpYwogICBsaWJyYXJ5IGludGVyZmFjZXMgYXJlbid0IHZlcnkgaGVscGZ1bC4gRml4IHVwIHRoZSBET1BSX09VVENIIG1hY3JvCiAgIHNvIGl0IHdvcmtzIHByb3Blcmx5IGFuZCBtb2RpZnkgaXRzIGNhbGxlcnMgc28gdGhhdCB0aGV5IGRvbid0IHByZSBvcgogICBwb3N0IGRlY3JlbWVudCBhcmd1bWVudHMgdGhhdCBhcmUgY29uZGl0aW9uYWxseSBldmFsdWF0ZWQuIFdoaWxlIHRoZXJlLAogICBwdXQgU05QUklOVEZfQ09OU1QgYmFjayBhcyBpdCBwcmV2ZW50cyBidWlsZCBmYWlsdXJlcyBpbiBzb21lCiAgIGNvbmZpZ3VyYXRpb25zLiAgb2sgZGptQCAoZm9yIG1vc3Qgb2YgaXQpCgoyMDA3MDEyMgogLSAoZGptKSBbc3NoLXJhbmQtaGVscGVyLjhdIG1hbnBhZ2Ugbml0czsKICAgZnJvbSBkbGVvbmFyZCBBVCB2aW50ZWxhLmNvbSAoYnojMTUyOSkKCjIwMDcwMTE3CiAtIChkdHVja2VyKSBbcGFja2V0LmNdIFJlLXJlbW92ZSBpbl9zeXN0bS5oIHNpbmNlIGl0J3MgYWxyZWFkeSBpbiBpbmNsdWRlcy5oCiAgIGFuZCBtdWx0aXBsZSBpbmNsdWRpbmcgaXQgY2F1c2VzIHByb2JsZW1zIG9uIG9sZCBJUklYZXMuICAoSXQgc251Y2sgYmFjawogICBpbiBkdXJpbmcgYSBzeW5jLikgIEZvdW5kIChhZ2FpbikgYnkgR2VvcmcgU2Nod2Fyei4KCjIwMDcwMTE0CiAtIChkdHVja2VyKSBbc3NoLWtleWdlbi5jXSBhdiAtPiBhcmd2IHRvIG1hdGNoIGVhcmxpZXIgc3luYy4KIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jXSBGaXggaW50ZWdlciBvdmVyZmxvdyBpbiByZXR1cm4KICAgdmFsdWUgb2Ygc25wcmludGYgcmVwbGFjZW1lbnQsIHNpbWlsYXIgdG8gYnVncyBpbiB2YXJpb3VzIGxpYmMKICAgaW1wbGVtZW50YXRpb25zLiBUaGlzIG92ZXJmbG93IGlzIG5vdCBleHBsb2l0YWJsZSBpbiBPcGVuU1NILiAKICAgV2hpbGUgSSdtIGZpZGRsaW5nIHdpdGggaXQsIG1ha2UgaXQgYSBmYWlyIGJpdCBmYXN0ZXIgYnkgaW5saW5pbmcgdGhlCiAgIGFwcGVuZC1jaGFyIHJvdXRpbmU7IG9rIGR0dWNrZXJACgoyMDA3MDEwNQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8xMS8xNCAxOTo0MTowNAogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgdXNlIGFyZ2MgYW5kIGFyZ3Ygbm90IHNvbWUgbWFkZSB1cCBzaG9ydCBmb3JtCiAgIC0gcmF5QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzExLzIzIDAxOjM1OjExCiAgICAgW21pc2MuYyBzZnRwLmNdCiAgICAgRG9uJ3QgYWNjZXNzIGJ1ZltzdHJsZW4oYnVmKSAtIDFdIGZvciB6ZXJvLWxlbmd0aCBzdHJpbmdzLgogICAgIGBgb2sgYnkgbWUnJyBkam1ALgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8xMi8xMSAyMToyNTo0NgogICAgIFtzc2gta2V5Z2VuLjEgc3NoLjFdCiAgICAgYWRkIHJmYyA0NzE2IChwdWJsaWMga2V5IGZvcm1hdCk7IG9rIGptYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8xMi8xMiAwMzo1ODo0MgogICAgIFtjaGFubmVscy5jIGNvbXBhdC5jIGNvbXBhdC5oXQogICAgIGJ6ICMxMDE5OiBzb21lIHNzaC5jb20gdmVyc2lvbnMgYXBwYXJlbnRseSBjYW4ndCBjb3BlIHdpdGggdGhlCiAgICAgcmVtb3RlIHBvcnQgZm9yd2FyZGluZyBiaW5kX2FkZHJlc3MgYmVpbmcgYSBob3N0bmFtZSwgc28gc2VuZAogICAgIHRoZW0gYW4gYWRkcmVzcyBmb3IgY2FzZXMgd2hlcmUgdGhleSBhcmUgbm90IGV4cGxpY2l0bHkKICAgICBzcGVjaWZpZWQgKHdpbGRjYXJkIG9yIGxvY2FsaG9zdCBiaW5kKS4gIHJlcG9ydGVkIGJ5IGRhdmVyb3RoIEFUCiAgICAgYWNtLm9yZzsgb2sgZHR1Y2tlckAgZGVyYWFkdEAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEyLzEzIDA4OjM0OjM5CiAgICAgW3NlcnZjb25mLmNdCiAgICAgTWFrZSBQZXJtaXRPcGVuIHdvcmsgd2l0aCBtdWx0aXBsZSB2YWx1ZXMgbGlrZSB0aGUgbWFuIHBhZ2VzIHNheXMuCiAgICAgYnogIzEyNjcgd2l0aCBkZXRhaWxzIGZyb20gcGV0ZXIgYXQgZG10ei5jb20sIHdpdGggJiBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8xMi8xNCAxMDowMToxNAogICAgIFtzZXJ2Y29uZi5jXQogICAgIE1ha2UgIlBlcm1pdE9wZW4gYWxsIiBmaXJzdC1tYXRjaCB3aXRoaW4gYSBibG9jayB0byBtYXRjaCB0aGUgd2F5IG90aGVyCiAgICAgb3B0aW9ucyB3b3JrLiAgb2sgbWFya3VzQCBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAxLzAyIDA5OjU3OjI1CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgZG8gbm90IHVzZSBsaXN0cyBmb3IgU1lOT1BTSVM7CiAgICAgZnJvbSBlcmljIHMuIHJheW1vbmQgdmlhIGJyYWQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAxLzAzIDAwOjUzOjM4CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICByZW1vdmUgc21hbGwgZGVhZCBjb2RlOyBhcm5hdWQubGFjb21iZS4xQHVsYXZhbC5jYSB2aWEgQ292ZXJpdHkgc2NhbgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDcvMDEvMDMgMDM6MDE6NDAKICAgICBbYXV0aDItY2hhbGwuYyBjaGFubmVscy5jIGRucy5jIHNmdHAuYyBzc2gta2V5Z2VuLmMgc3NoLmNdCiAgICAgc3BhY2VzCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNy8wMS8wMyAwNDowOToxNQogICAgIFtzZnRwLmNdCiAgICAgQVJHU1VTRUQgZm9yIGxpbnQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA3LzAxLzAzIDA3OjIyOjM2CiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgc3BhY2VzCgoyMDA2MTIwNQogLSAoZGptKSBbYXV0aC5jXSBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGZha2VwdygpLiAgQ3Jhc2ggd291bGQKICAgb2NjdXIgaWYgdGhlIHNlcnZlciBkaWQgbm90IGhhdmUgdGhlIHByaXZzZXAgdXNlciBhbmQgYW4gaW52YWxpZCB1c2VyCiAgIHRyaWVkIHRvIGxvZ2luIGFuZCBib3RoIHByaXZzZXAgYW5kIGtyYjUgYXV0aCBhcmUgZGlzYWJsZWQ7IG9rIGR0dWNrZXJACiAtIChkam0pIFtic2QtYXNwcmludGYuY10gQmV0dGVyIHRlc3QgZm9yIGJhZCB2c25wcmludGYgbGVuZ3Roczsgb2sgZHR1Y2tlckAKCjIwMDYxMTA4CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzExLzA3IDEzOjAyOjA3CiAgICAgW2RoLmNdCiAgICAgQk5faGV4MmJuIHJldHVybnMgaW50OyBmcm9tIGR0dWNrZXJACgoyMDA2MTEwNwogLSAoZHR1Y2tlcikgW3NzaGQuY10gVXNlIHByaXZzZXBfcHcgaWYgd2UgaGF2ZSBpdCwgYnV0IG9ubHkgcmVxdWlyZSBpdAogICBpZiB3ZSBhYnNvbHV0ZWx5IG5lZWQgaXQuICBQb2ludGVkIG91dCBieSBDb3Jpbm5hLCBvayBkam1ACiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzExLzA2IDIxOjI1OjI4CiAgICAgW2F1dGgtcnNhLmMga2V4Z2V4Yy5jIGtleGRocy5jIGtleS5jIHNzaC1kc3MuYyBzc2hkLmMga2V4Z2V4cy5jCiAgICAgc3NoLWtleWdlbi5jIGJ1ZmJuLmMgbW9kdWxpLmMgc2NhcmQuYyBrZXhkaGMuYyBzc2hjb25uZWN0MS5jIGRoLmMgcnNhLmNdCiAgICAgYWRkIG1pc3NpbmcgY2hlY2tzIGZvciBvcGVuc3NsIHJldHVybiBjb2Rlczsgd2l0aCAmIG9rIGRqbUAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTEvMDcgMTA6MzE6MzEKICAgICBbbW9uaXRvci5jIHZlcnNpb24uaF0KICAgICBjb3JyZWN0bHkgY2hlY2sgZm9yIGJhZCBzaWduYXR1cmVzIGluIHRoZSBtb25pdG9yLCBvdGhlcndpc2UgdGhlIG1vbml0b3IKICAgICBhbmQgdGhlIHVucHJpdiBwcm9jZXNzIGNhbiBnZXQgb3V0IG9mIHN5bmMuIHdpdGggZHR1Y2tlckAsIG9rIGRqbUAsCiAgICAgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFtSRUFETUUgY29udHJpYi97Y2FsZGVyYSxyZWRoYXQsY29udHJpYn0vb3BlbnNzaC5zcGVjXSBCdW1wCiAgIHZlcnNpb25zLgogLSAoZHR1Y2tlcikgUmVsZWFzZSA0LjVwMS4KCjIwMDYxMTA1CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEwLzI4IDE4OjA4OjEwCiAgICAgW3NzaC4xXQogICAgIGNvcnJlY3QvZXhwYW5kIGV4YW1wbGUgb2YgdXNhZ2Ugb2YgLXc7IG9rIGptY0Agc3RldmVza0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTAvMzEgMTY6MzM6MTIKICAgICBba2V4ZGhjLmMga2V4ZGhzLmMga2V4Z2V4Yy5jIGtleGdleHMuY10KICAgICBjaGVjayBESF9jb21wdXRlX2tleSgpIGZvciAtMSBldmVuIGlmIGl0IHNob3VsZCBub3QgaGFwcGVuIGJlY2F1c2Ugb2YKICAgICBlYXJsaWVyIGNhbGxzIHRvIGRoX3B1Yl9pc192YWxpZCgpOyByZXBvcnQga3JhaG1lciBhdCBzdXNlLmRlOyBvayBkam0KCjIwMDYxMTAxCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmNdIEJ1ZyAjMTI1NTogTWFrZSBvbmx5IGh3ZXJyCiAgIGV2ZW50cyBmYXRhbCBpbiBTb2xhcmlzIHByb2Nlc3MgY29udHJhY3Qgc3VwcG9ydCBhbmQgdGVsbCBpdCB0byBzaWduYWwKICAgb25seSBwcm9jZXNzZXMgaW4gdGhlIHNhbWUgcHJvY2VzcyBncm91cCB3aGVuIHNvbWV0aGluZyBoYXBwZW5zLgogICBCYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIGFuZHJldy5iZW5oYW0gYXQgdGh1cy5uZXQgYW5kIHNpbWlsYXIgdG8KICAgYSBwYXRjaCBmcm9tIENoYWQgTXluaGllci4gIG9rIGRqbUAKCjIwMDYxMDI3Ci0gKGRqbSkgW2F1dGguY10gZ2Mgc29tZSBkZWFkIGNvZGUKCjIwMDYxMDIzCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSByYXlAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDkvMzAgMTc6NDg6MjIKICAgICBbc2Z0cC5jXQogICAgIENsZWFyIGVycm5vIGJlZm9yZSBjYWxsaW5nIHRoZSBzdHJ0b2wgZnVuY3Rpb25zLgogICAgIEZyb20gUGF1bCBTdG9lYmVyIDx4MDAwMSBhdCB4IGRvdCBkZTEgZG90IGNjPi4KICAgICBPSyBkZXJhYWR0QC4KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTAvMDYgMDI6Mjk6MTkKICAgICBbc3NoLWFnZW50LmMgc3NoLWtleXNjYW4uYyBzc2guY10KICAgICBzeXMvcmVzb3VyY2UuaCBuZWVkcyBzeXMvdGltZS5oOyBwcm9tcHRlZCBieSBicmFkQAogICAgIChOQi4gSWQgc3luYyBvbmx5IGZvciBwb3J0YWJsZSkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMTAvMDkgMjM6MzY6MTEKICAgICBbc2Vzc2lvbi5jXQogICAgIHhtYWxsb2MgLT4geGNhbGxvYyB0aGF0IHdhcyBtaXNzZWQgcHJldmlvdXNseSwgZnJvbSBwb3J0YWJsZQogICAgIChOQi4gSWQgc3luYyBvbmx5IGZvciBwb3J0YWJsZSwgb2J2aW91c2x5KQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8xMC8xMCAxMDoxMjo0NQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgc2xlZXAgYmVmb3JlIHJldHJ5aW5nIChub3QgYWZ0ZXIpIHNpbmNlIHNsZWVwIGNoYW5nZXMgZXJybm87IGZpeGVzCiAgICAgcHIgNTI1MDsgcmFkQHR3aWcuY29tOyBvayBkdHVja2VyIGRqbQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8xMC8xMSAxMjozODowMwogICAgIFtjbGllbnRsb29wLmMgc2VydmVybG9vcC5jXQogICAgIGV4aXQgaW5zdGVhZCBvZiBkb2luZyBhIGJsb2NraW5nIHRjcCBzZW5kIGlmIHdlIGRldGVjdCBhIGNsaWVudC9zZXJ2ZXIKICAgICB0aW1lb3V0LCBzaW5jZSB0aGUgdGNwIHNlbmRxdWV1ZSBtaWdodCBiZSBhbHJlYWR5IGZ1bGwgKG9mIGFsaXZlCiAgICAgcmVxdWVzdHMpOyBvayBkdHVja2VyLCByZXBvcnQgbXBmCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzEwLzIyIDAyOjI1OjUwCiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgY2FuY2VsIHByb2dyZXNzIG1ldGVyIHdoZW4gdXBsb2FkIHdyaXRlIGZhaWxzOyBvayBkZXJhYWR0QAogLSAodGltKSBbTWFrZWZpbGUuaW4gc2NhcmQvTWFrZWZpbGUuaW5dIEFkZCBkYXRhcm9vdGRpcj0gbGluZXMgdG8ga2VlcAogICBhdXRvY29uZiAyLjYwIGZyb20gY29tcGxhaW5pbmcuCgoyMDA2MTAxOAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIHJheUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOS8yNSAwNDo1NTozOAogICAgIFtzc2gta2V5c2Nhbi4xIHNzaC4xXQogICAgIENoYW5nZSAiYSBTU0giIHRvICJhbiBTU0giLiAgSHVycmF5LCBJJ20gbm90IHRoZSBvbmx5IG9uZSB3aG8KICAgICBwcm9ub3VuY2VzICJTU0giIGFzICJlc3MtZXNzLWFpY2giLgogICAgIE9LIGptY0AgYW5kIHN0ZXZlc2tALgogLSAoZHR1Y2tlcikgW3NzaGQuY10gUmVzaHVmZmxlIHN0b3Jpbmcgb2YgcHcgc3RydWN0OyBwcmV2ZW50cyB3YXJuaW5ncwogICBvbiBvbGRlciB2ZXJzaW9ucyBvZiBPUyBYLiAgb2sgZGptQAoKMjAwNjEwMTYKIC0gKGR0dWNrZXIpIFttb25pdG9yX2ZkcGFzcy5jXSBJbmNsdWRlIHN5cy9pbi5oLCByZXF1aXJlZCBmb3IgY21zZyBtYWNyb3MKICAgb24gb2xkZXIgKDIuMCkgTGludXhlcy4gIEJhc2VkIG9uIHBhdGNoIGZyb20gdGhtby0xMyBhdCBnbXggZGUuCgoyMDA2MTAwNgogLSAodGltKSBbYnVpbGRwa2cuc2guaW5dIFVzZSB1bmFtZSAtciBpbnN0ZWFkIG9mIC12IGluIE9TX1ZFUiBmb3IgU29sYXJpcy4KICAgRGlmZmVyZW50aWF0ZSBiZXR3ZWVuIE9wZW5TZXJ2ZXIgNSBhbmQgT3BlblNlcnZlciA2CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBTZXQgcHV0IC1sc2VsaW51eCBpbnRvICRMSUJTIHdoaWxlIHRlc3RpbmcgZm9yCiAgIFNFTGludXggZnVuY3Rpb25zIHNvIHRoZXkncmUgZGV0ZWN0ZWQgY29ycmVjdGx5LiAgUGF0Y2ggZnJvbSBwZWJlbml0byBhdAogICBnZW50b28ub3JnLgogLSAodGltKSBbYnVpbGRwa2cuc2guaW5dIFNvbWUgc3lzdGVtcyBoYXZlIHJlYWxseSBsaW1pdGVkIG5hd2sgKE9wZW5TZXJ2ZXIpLgogICBBbGxvdyBzZXR0aW5nIGFsdGVybmF0ZSBhd2sgaW4gb3BlbnNzaC1jb25maWcubG9jYWwuCgoyMDA2MTAwMwogLSAodGltKSBbY29uZmlndXJlLmFjXSBNb3ZlIENIRUNLX0hFQURFUlMgdGVzdCBiZWZvcmUgcGxhdGZvcm0gc3BlY2lmaWMKICAgc2VjdGlvbiBzbyBhZGRpdGlvbmFsIHBsYXRmb3JtIHNwZWNpZmljIENIRUNLX0hFQURFUiB0ZXN0cyB3aWxsIHdvcmsKICAgY29ycmVjdGx5LiBGaXhlcyAiPG5ldC9pZl90YXAuaD4gb24gRnJlZUJTRCIgcHJvYmxlbSByZXBvcnQgYnkgZGVzIEFUIGRlcy5ubwogICBGZWVkYmFjayBhbmQgInNlZW1zIGxpa2UgYSBnb29kIGlkZWEiIGR0dWNrZXJACgoyMDA2MTAwMQogLSAoZHR1Y2tlcikgW2F1ZGl0LWJzbS5jXSBJbmNsdWRlIGVycm5vLmguICBQb2ludGVkIG91dCBieSBkZXMgYXQgZGVzLm5vLgoKMjAwNjA5MjkKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTIzOTogRml4IGNvbmZpZ3VyZSB0ZXN0IGZvciBPcGVuU1NIIGVuZ2luZQogICBzdXBwb3J0LiAgUGF0Y2ggZnJvbSBhbmRyZXcuYmVuaGFtIGF0IHRodXMgbmV0LgoKMjAwNjA5MjgKIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmNdIEJ1ZyAjMTIzODogaW5jbHVkZSBzaWduYWwuaCB0byBmaXggY29tcGlsYXRpb24gZXJyb3IKICAgb24gU29sYXJpcyA4IHcvb3V0IC9kZXYvcmFuZG9tIG9yIHBybmdkLiAgUGF0Y2ggZnJvbSBybCBhdAogICBtYXRoLnRlY2huaW9uLmFjLmlsLgoKMjAwNjA5MjYKIC0gKGR0dWNrZXIpIFtidWZhdXguaF0gbnVrZSBidWZhdXguaDsgaXQncyBhbHJlYWR5IGdvbmUgZnJvbSBPcGVuQlNEIGFuZCBub3QKICAgcmVmZXJlbmNlZCBhbnkgbW9yZS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtzZnRwLXNlcnZlci44XSBSZXN5bmM7IHNwb3R0ZWQgYnkgZGptQAogLSAoZHR1Y2tlcikgUmVsZWFzZSA0LjRwMS4KCjIwMDYwOTI0CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIFJlbW92ZSBDRkxBR1MgaGFjayBmb3IgVW5peFdhcmUgMS54LzIueCAoYWRkZWQKICAgdG8gcmV2IDEuMzA4KSB0byB3b3JrIGFyb3VuZCBicm9rZW4gZ2NjIDIueCBoZWFkZXIgZmlsZS4KCjIwMDYwOTIzCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzEyMzQ6IFB1dCBvcGVuc2MgbGlicyBpbnRvICRMSUJTIHJhdGhlciB0aGFuCiAgICRMREZMQUdTLiAgUGF0Y2ggZnJvbSB2YXBpZXIgYXQgZ2VudG9vIG9yZy4KCjIwMDYwOTIyCiAtIChkdHVja2VyKSBbcGFja2V0LmMgY2Fub2hvc3QuY10gSW5jbHVkZSBhcnBhL2luZXQuaCBmb3IgaHRvbmwgbWFjcm9zIG9uCiAgIHNvbWUgcGxhdGZvcm1zIChlZyBIUC1VWCAxMS4wMCkuICBGcm9tIHNhbnRoaS5hbWlydGEgYXQgZ21haWwgY29tLgoKMjAwNjA5MjEKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA5LzE5IDA1OjUyOjIzCiAgICAgW3NmdHAuY10KICAgICBVc2UgU19JUyogbWFjcm9zIGluc3RlZCBvZiBtYXNraW5nIHdpdGggU19JRiogZmxhZ3MuIFRoZSBsYXR0ZXIgbWF5CiAgICAgaGF2ZSBtdWx0aXBsZSBiaXRzIHNldCwgd2hpY2ggbGVhZCB0byBzdXJwcmlzaW5nIHJlc3VsdHMuIFNwb3R0ZWQgYnkKICAgICBQYXVsIFN0b2ViZXIsIG1vcmUgdG8gY29tZS4gb2sgbWlsbGVydEAgcGVkcm9AIGphcmVkeUAgZGptQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wOS8xOSAyMToxNDowOAogICAgIFtwYWNrZXQuY10KICAgICBjbGllbnQgTlVMTCBkZXJlZiBvbiBwcm90b2NvbCBlcnJvcjsgVGF2aXMgT3JtYW5keSwgR29vZ2xlIFNlY3VyaXR5IFRlYW0KIC0gKGR0dWNrZXIpIFtkZWZpbmVzLmhdIEluY2x1ZGUgdW5pc3RkLmggYmVmb3JlIGRlZmluaW5nIGdldHBncnA7IGZpeGVzCiAgIGJ1aWxkIGVycm9yIG9uIFVsdHJpeC4gIEZyb20gQmVybmhhcmQgU2ltb24uCgoyMDA2MDkxOAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gT24gQUlYLCBjaGVjayB0byBzZWUgaWYgdGhlIGNvbXBpbGVyIHdpbGwgYWxsb3cKICAgbWFjcm8gcmVkZWZpbml0aW9ucywgYW5kIGlmIG5vdCwgcmVtb3ZlICItcWxhbmdsdmw9YW5zaSIgZnJvbSB0aGUgZmxhZ3MuCiAgIEFsbG93cyBidWlsZCBvdXQgb2YgdGhlIGJveCB3aXRoIG9sZGVyIFZBQyBhbmQgWExDIGNvbXBpbGVycy4gIEZvdW5kIGJ5CiAgIERhdmlkIEJyb25kZXIgYW5kIEJlcm5oYXJkIFNpbW9uLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3BvcnQtYWl4LntjLGh9XSBSZWR1Y2Ugc2NvcGUgb2YgaW5jbHVkZXMuCiAgIFByZXZlbnRzIG1hY3JvIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyBvZiAiUkRPTkxZIi4KCjIwMDYwOTE2CiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDkvMTYgMTk6NTM6MzcKICAgICBbZGVhdHRhY2suYyBkZWF0dGFjay5oIHBhY2tldC5jXQogICAgIGxpbWl0IG1heGltdW0gd29yayBwZXJmb3JtZWQgYnkgdGhlIENSQyBjb21wZW5zYXRpb24gYXR0YWNrIGRldGVjdG9yLAogICAgIHByb2JsZW0gcmVwb3J0ZWQgYnkgVGF2aXMgT3JtYW5keSwgR29vZ2xlIFNlY3VyaXR5IFRlYW07CiAgICAgb2sgbWFya3VzQCBkZXJhYWR0QAogLSAoZGptKSBBZGQgb3BlbnNzaC54bWwgdG8gLmN2c2lnbm9yZSBhbmQgc29ydCBpdAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIFByb3BvZ2F0ZSBUWiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBQQU0gYXV0aAogICBwcm9jZXNzIHNvIHRoYXQgYW55IGxvZ2dpbmcgaXQgZG9lcyBpcyB3aXRoIHRoZSByaWdodCB0aW1lem9uZS4gIEZyb20KICAgU2NvdHQgU3RyaWNrbGVyLCBvayBkam1ALgogLSAoZHR1Y2tlcikgW21vbml0b3IuY10gQ29ycmVjdGx5IGhhbmRsZSBhdWRpdGluZyBvZiBzaW5nbGUgY29tbWFuZHMgd2hlbgogICB1c2luZyBQcm90b2NvbCAxLiAgRnJvbSBqaGIgYXQgZnJlZWJzZC4KIC0gKGRqbSkgW3NzaGQuY10gRml4IHdhcm5pbmcvQVBJIGFidXNlOyBvayBkdHVja2VyQAogLSAoZHR1Y2tlcikgW0lOU1RBTExdIEFkZCBpbmZvIGFib3V0IGF1ZGl0IHN1cHBvcnQuCgoyMDA2MDkxMgogLSAoZGptKSBbTWFrZWZpbGUuaW4gYnVpbGRwa2cuc2guaW4gY29uZmlndXJlLmFjIG9wZW5zc2gueG1sLmluXQogICBTdXBwb3J0IFNNRiBpbiBTb2xhcmlzIFBhY2thZ2VzIGlmIGVuYWJsZWQgYnkgY29uZmlndXJlLiBQYXRjaCBmcm9tCiAgIENoYWQgTXluaGllciwgdGVzdGVkIGJ5IGR0dWNrZXJACgoyMDA2MDkxMQogLSAoZHR1Y2tlcikgW2NpcGhlci1hZXMuY10gSW5jbHVkZSBzdHJpbmcuaCBmb3IgbWVtY3B5IGFuZCBmcmllbmRzLiAgTm90ZWQKICAgYnkgUGVra2EgU2F2b2xhLgoKMjAwNjA5MTAKIC0gKGR0dWNrZXIpIFtjb250cmliL2FpeC9idWlsZGJmZi5zaF0gRW5zdXJlIHRoYXQgcGVybCBpcyBhdmFpbGFibGUuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBBZGQgLWxjcnlwdCB0byBsZXQgRHJhZ29uRmx5IGJ1aWxkIE9PVEIuCgoyMDA2MDkwOQogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jXSBBZGQgc3RkYXJnLmguCiAtIChkdHVja2VyKSBbY29udHJpYi9haXgvYnVpbGRiZmYuc2hdIEFsd2F5cyBjcmVhdGUgcHJpdnNlcCB1c2VyLgogLSAoZHR1Y2tlcikgW2J1aWxkcGtnLnNoLmluXSBBbHdheXMgY3JlYXRlIHByaXZzZXAgdXNlci4gIG9rIGRqbUAKCjIwMDYwOTA4CiAtIChkdHVja2VyKSBbYXV0aC1zaWEuY10gQWRkIGluY2x1ZGVzIHJlcXVpcmVkIGZvciBidWlsZCBvbiBUcnU2NC4gIFBhdGNoCiAgIGZyb20gQ2hyaXMgQWRhbXMuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBUaGUgQlNNIGhlYWRlciB0ZXN0IG5lZWRzIHRpbWUuaCBpbiBzb21lIGNhc2VzLgoKMjAwNjA5MDcKIC0gKGRqbSkgW3NzaGQuYyBhdXRoLmNdIFNldCB1cCBmYWtlcHcoKSB3aXRoIHByaXZzZXAgdWlkL2dpZCwgc28gaXQgY2FuCiAgIGJlIHVzZWQgdG8gZHJvcCBwcml2aWxlZ2UgdG87IGZpeGVzIFNvbGFyaXMgR1NTQVBJIGNyYXNoIHJlcG9ydGVkIGJ5CiAgIE1hZ251cyBBYnJhbnRlOyBzdWdnZXN0aW9uIGFuZCBmZWVkYmFjayBkdHVja2VyQAogICBOQi4gdGhpcyBjaGFuZ2Ugd2lsbCByZXF1aXJlIHRoYXQgdGhlIHByaXZpbGVnZSBzZXBhcmF0aW9uIHVzZXIgbXVzdAogICBleGlzdCBvbiBhbGwgdGhlIHRpbWUsIG5vdCBqdXN0IHdoZW4gVXNlUHJpdmlsZWdlU2VwYXJhdGlvbj15ZXMKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gcy9CUk9LRU5fVVBEV1RNUC9CUk9LRU5fVVBEV1RNUFgvIG9uIFNDTyBPU1I2CiAtIChkdHVja2VyKSBbbG9naW5yZWMuY10gV3JhcCBwYXRocy5oIGluIEhBVkVfUEFUSFNfSC4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2NmZ21hdGNoLnNoXSBzdG9wX2NsaWVudCBpcyByYWN5LCBzbyBnaXZlIHVzIGEgYmV0dGVyCiAgIGNoYW5jZSBvZiB3aW5uaW5nLgoKMjAwNjA5MDUKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIHMvQUNfREVGSU5FUy9BQ19ERUZJTkUvIHNwb3R0ZWQgYnkgUm91bWVuIFBldHJvdi4KIC0gKGR0dWNrZXIpIFtsb2dpbnJlYy5jXSBJbmNsdWRlIHBhdGhzLmggZm9yIF9QQVRIX0JUTVAuCgoyMDA2MDkwNAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRGVmaW5lIEJST0tFTl9VUERXVE1QIG9uIFNDTyBPU1I2IGFzIHRoZSBuYXRpdmUKICAgdXBkd2R0bXAgc2VlbXMgdG8gZ2VuZXJhdGUgaW52YWxpZCB3dG1wIGVudHJpZXMuICBGcm9tIFJvZ2VyIENvcm5lbGl1cywKICAgb2sgZGptQAoKMjAwNjA5MDMKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0gQ2hlY2sgZm9yCiAgIGRlY2xhcmF0aW9uIG9mIHdyaXRldigyKSBhbmQgZGVjbGFyZSBpdCBvdXJzZWx2ZXMgaWYgbmVjZXNzYXJ5LiAgTWFrZXMKICAgdGhlIGF0b21pY2lvdigpIGNhbGxzIGJ1aWxkIG9uIHJlYWxseSBvbGQgc3lzdGVtcy4gIG9rIGRqbUAKCjIwMDYwOTAyCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1pcml4LmNdIEFkZCBlcnJuby5oLCBmb3VuZCBieSBJYWluIE1vcmdhbi4KIC0gKGR0dWNrZXIpIFtzc2gta2V5c2Nhbi5jIHNzaC1yYW5kLWhlbHBlci5jIHNzaC5jIHNzaGNvbm5lY3QuYwogICBvcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYyBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jCiAgIG9wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmMgb3BlbmJzZC1jb21wYXQvcnJlc3Zwb3J0LmNdIEluY2x1ZGUgPGFycGEvaW5ldC5oPgogICBmb3IgaHRvbiogYW5kIG50b2gqIG1hY3Jvcy4gIFJlcXVpcmVkIG9uIChhdCBsZWFzdCkgSFAtVVggc2luY2Ugd2UgZGVmaW5lCiAgIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQuICBGb3VuZCBieSBzYW50aGkuYW1pcnRhIGF0IGdtYWlsIGNvbS4KCjIwMDYwOTAxCiAtIChkam0pIFthdWRpdC1ic20uYyBhdWRpdC5jIGF1dGgtYnNkYXV0aC5jIGF1dGgtY2hhbGwuYyBhdXRoLXBhbS5jXQogICBbYXV0aC1yc2EuYyBhdXRoLXNoYWRvdy5jIGF1dGgtc2lhLmMgYXV0aDEuYyBhdXRoMi1jaGFsbC5jXQogICBbYXV0aDItZ3NzLmMgYXV0aDIta2JkaW50LmMgYXV0aDItbm9uZS5jIGF1dGhmZC5jIGF1dGhmaWxlLmNdCiAgIFtjaXBoZXItM2RlczEuYyBjaXBoZXItYWVzLmMgY2lwaGVyLWJmMS5jIGNpcGhlci1jdHIuYyBjbGllbnRsb29wLmNdCiAgIFtkaC5jIGRucy5jIGVudHJvcHkuYyBnc3Mtc2Vydi1rcmI1LmMgZ3NzLXNlcnYuYyBob3N0ZmlsZS5jIGtleC5jXQogICBba2V4ZGhjLmMga2V4ZGhzLmMga2V4Z2V4Yy5jIGtleGdleHMuYyBrZXkuYyBsb2dpbnJlYy5jIG1hYy5jXQogICBbbWQ1Y3J5cHQuYyBtb25pdG9yLmMgbW9uaXRvcl93cmFwLmMgcmVhZGNvbmYuYyByc2EuY10KICAgW3NjYXJkLW9wZW5zYy5jIHNjYXJkLmMgc2Vzc2lvbi5jIHNzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2gtZHNzLmNdCiAgIFtzc2gta2V5Z2VuLmMgc3NoLWtleXNpZ24uYyBzc2gtcnNhLmMgc3NoLmMgc3NoY29ubmVjdC5jXQogICBbc3NoY29ubmVjdDEuYyBzc2hjb25uZWN0Mi5jIHNzaGQuY10KICAgW29wZW5ic2QtY29tcGF0L2JzZC1jcmF5LmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10KICAgW29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LXNvbGFyaXMuY10KICAgW29wZW5ic2QtY29tcGF0L3BvcnQtdXcuY10KICAgTG90cyBvZiBoZWFkZXJzIGZvciBTQ08gT1NSNiwgbWFpbmx5IGFkZGluZyBzdGRhcmcuaCBmb3IgbG9nLmg7CiAgIGNvbXBpbGUgcHJvYmxlbXMgcmVwb3J0ZWQgYnkgcmFjIEFUIHRlbnppbmcub3JnCiAtIChkam0pIFtpbmNsdWRlcy5oIG1vbml0b3IuYyBvcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuY10KICAgW29wZW5ic2QtY29tcGF0L3JyZXN2cG9ydC5jXSBTb21lIG1vcmUgaGVhZGVyczogbmV0aW5ldC9pbi5oIAogICBzeXMvc29ja2V0LmggYW5kIHVuaXN0ZC5oIGluIHZhcmlvdXMgcGxhY2VzCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmNdIEZpeCBpbXBsaWN0IGRlY2xhcmF0aW9uCiAgIHdhcm5pbmdzIGZvciBiaW5hcnlfb3BlbiBhbmQgYmluYXJ5X2Nsb3NlLiAgUGF0Y2ggZnJvbSBDb3Jpbm5hIFZpbnNjaGVuLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBpbmNsdWRlcy5oIG9wZW5ic2QtY29tcGF0L2dsb2Iue2MsaH1dIEV4cGxpY2l0bHkKICAgdGVzdCBmb3IgR0xPQl9OT01BVENIIGFuZCB1c2Ugb3VyIGdsb2IgZnVuY3Rpb25zIGlmIGl0J3Mgbm90IGZvdW5kLgogICBTdG9wcyBzZnRwIGZyb20gc2VnZmF1bHRpbmcgd2hlbiBhdHRlbXB0aW5nIHRvIGdldCBhIG5vbmV4aXN0ZW50IGZpbGUgb24KICAgQ3lnd2luIChwcmV2aW91cyB2ZXJzaW9ucyBvZiBPcGVuU1NIIGRpZG4ndCB1c2UgdGhlIG5hdGl2ZSBnbG9iKS4gUGFydGx5CiAgIGZyb20gYW5kIHRlc3RlZCBieSBDb3Jpbm5hIFZpbnNjaGVuLgogLSAoZHR1Y2tlcikgW1JFQURNRSBjb250cmliL3tjYWxkZXJhLHJlZGhhdCxzdXNlfS9vcGVuc3NoLnNwZWNdICBDcmFuawogICB2ZXJzaW9ucy4KCjIwMDYwODMxCiAtIChkam0pIFtDUkVESVRTIExJQ0VOQ0UgTWFrZWZpbGUuaW4gYXV0aC5jIGNvbmZpZ3VyZS5hYyBpbmNsdWRlcy5oIF0KICAgW3BsYXRmb3JtLmMgcGxhdGZvcm0uaCBzc2hkLmMgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW5dCiAgIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtc29sYXJpcy5jXQogICBbb3BlbmJzZC1jb21wYXQvcG9ydC1zb2xhcmlzLmhdIEFkZCBzdXBwb3J0IGZvciBTb2xhcmlzIHByb2Nlc3MKICAgY29udHJhY3RzLCBlbmFibGVkIHdpdGggLS11c2Utc29sYXJpcy1jb250cmFjdHMuIFBhdGNoIGZyb20gQ2hhZAogICBNeW5oaWVyLCB0d2Vha2VkIGJ5IGR0dWNrZXJAIGFuZCBteXNlbGY7IG9rIGR0dWNrZXJACiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBBZGQgU2VUY2JQcml2aWxlZ2UgcHJpdmlsZWdlCiAgIHdoaWxlIHNldHRpbmcgdXAgdGhlIHNzaCBzZXJ2aWNlIGFjY291bnQuICBQYXRjaCBmcm9tIENvcmlubmEgVmluc2NoZW4uCgoyMDA2MDgzMAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8yMSAwODoxNDowMQogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIERvY3VtZW50IEhvc3RiYXNlZFVzZXNOYW1lRnJvbVBhY2tldE9ubHkuICBDb3JyZWN0aW9ucyBmcm9tIGptY0AsCiAgICAgb2sgam1jQCBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8yMSAwODoxNTo1NwogICAgIFtzc2hkLjhdCiAgICAgQWRkIG1vcmUgZGV0YWlsIGFib3V0IHdoYXQgcGVybWlzc2lvbnMgYXJlIGFuZCBhcmVuJ3QgYWNjZXB0ZWQgZm9yCiAgICAgYXV0aG9yaXplZF9rZXlzIGZpbGVzLiAgQ29ycmVjdGlvbnMgam1jQCwgb2sgZGptQCwgImxvb2tzIGdvb2QiIGptY0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMjkgMTA6NDA6MTkKICAgICBbY2hhbm5lbHMuYyBzZXNzaW9uLmNdCiAgICAgbm9ybWFsaXNlIHNvbWUgaW5jb25zaXN0ZW50IChidXQgaGFybWxlc3MpIE5VTEwgcG9pbnRlciBjaGVja3MKICAgICBzcG90dGVkIGJ5IHRoZSBTdGFuZm9yZCBTQVRVUk4gdG9vbCwgdmlhIElzaWwgRGlsbGlnOwogICAgIG9rIG1hcmt1c0AgZGVyYWFkdEAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzI5IDEyOjAyOjMwCiAgICAgW2dzcy1nZW5yLmNdCiAgICAgV29yayBhcm91bmQgYSBwcm9ibGVtIGluIEhlaW1kYWwgdGhhdCBvY2N1cnMgd2hlbiBLUkI1Q0NOQU1FIGZpbGUgaXMKICAgICBtaXNzaW5nLCBieSBjaGVja2luZyB3aGV0aGVyIG9yIG5vdCBrZXJiZXJvcyBhbGxvY2F0ZWQgdXMgYSBjb250ZXh0CiAgICAgYmVmb3JlIGF0dGVtcHRpbmcgdG8gZnJlZSBpdC4gIFBhdGNoIGZyb20gU2ltb24gV2lsa2luc29uLCB0ZXN0ZWQgYnkKICAgICBiaW9ybkAsIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzMwIDAwOjA2OjUxCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgRml4IHJlZ3Jlc3Npb24gd2hlcmUgU1NIMiBiYW5uZXIgaXMgcHJpbnRlZCBhdCBsb2dsZXZlbHMgRVJST1IgYW5kIEZBVEFMCiAgICAgd2hlcmUgcHJldmlvdXNseSBpdCB3ZXJlbid0LiAgYnogIzEyMjEsIGZvdW5kIGJ5IERlYW4gS29wZXNreSwgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8zMCAwMDoxNDozNwogICAgIFt2ZXJzaW9uLmhdCiAgICAgY3JhbmsgdG8gNC40CiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC94Y3J5cHQuY10gbmVlZHMgdW5pc3RkLmgKIC0gKGR0dWNrZXIpIFthdXRoLmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gQnVnICMxMjA3OiBhbHdheXMgY2FsbAogICBsb2dpbnN1Y2Nlc3Mgb24gQUlYIGltbWVkaWF0ZWx5IGFmdGVyIGF1dGhlbnRpY2F0aW9uIHRvIGNsZWFyIHRoZSBmYWlsZWQKICAgbG9naW4gY291bnQuICBQcmV2aW91c2x5IHRoaXMgd291bGQgb25seSBoYXBwZW4gd2hlbiBhbiBpbnRlcmFjdGl2ZQogICBzZXNzaW9uIHN0YXJ0cyAoaWUgd2hlbiBhIHB0eSBpcyBhbGxvY2F0ZWQpIGJ1dCB0aGlzIG1lYW5zIHRoYXQgYWNjb3VudHMKICAgdGhhdCBoYXZlIHByaW1hcmlseSBub24taW50ZXJhY3RpdmUgc2Vzc2lvbnMgKGVnIHNjcCdzKSBtYXkgZ3JhZHVhbGx5CiAgIGFjY3VtdWxhdGUgZW5vdWdoIGZhaWx1cmVzIHRvIGxvY2sgb3V0IGFuIGFjY291bnQuICBUaGlzIGNoYW5nZSBtYXkgaGF2ZQogICBhIHNpZGUgZWZmZWN0IG9mIGNyZWF0aW5nIHR3byBhdWRpdCByZWNvcmRzLCBvbmUgd2l0aCBhIHR0eSBvZiAic3NoIgogICBjb3JyZXNwb25kaW5nIHRvIHRoZSBhdXRoZW50aWNhdGlvbiBhbmQgb25lIHdpdGggdGhlIGFsbG9jYXRlZCBwdHkgcGVyCiAgIGludGVyYWN0aXZlIHNlc3Npb24uCgoyMDA2MDgyNAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Jhc2VuYW1lLmNdIEluY2x1ZGUgZXJybm8uaC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jXSBBZGQgaW5jbHVkZXMgbmVlZGVkIGZvciBzZWxlY3QoMikgb24KICAgb2xkZXIgc3lzdGVtcy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jXSBJbmNsdWRlIDxzeXMvc2VsZWN0Lmg+IGZvciBzZWxlY3QoMikKICAgb24gUE9TSVggc3lzdGVtcy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2Qtb3BlbnB0eS5jXSBJbmNsdWRlIGZvciBpb2N0bCgyKS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ycmVzdnBvcnQuY10gSW5jbHVkZSA8c3RkbGliLmg+IGZvciBtYWxsb2MuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQveG1tYXAuY10gTW92ZSAjZGVmaW5lIEhBVkVfTU1BUCB0byBwcmV2ZW50CiAgIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nIHdoZW4gd2UgaGF2ZSBhIGJyb2tlbiBvciBtaXNzaW5nIG1tYXAoMikuCgoyMDA2MDgyMgogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluXSBCdWcgIzExNzc6IGZpeCBpbmNvcnJlY3QgcGF0aCBmb3Igc3NocmMgaW4KICAgTWFrZWZpbGUuICBQYXRjaCBmcm9tIHNhbnRoaS5hbWlydGEgYXQgZ21haWwsIG9rIGRqbS4KCjIwMDYwODIwCiAtIChkdHVja2VyKSBbbG9nLmNdIE1vdmUgaWZkZWYgdG8gcHJldmVudCB1bnVzZWQgdmFyaWFibGUgd2FybmluZy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFNhdmUgJExJQlMgZHVyaW5nIFBBTSBsaWJyYXJ5IHRlc3RzIGFuZCByZXN0b3JlCiAgIGFmdGVyd2FyZC4gIFJlbW92ZXMgdGhlIG5lZWQgdG8gbWFuZ2xlICRMSUJTIGxhdGVyIHRvIHJlbW92ZSAtbHBhbSBhbmQgLWxkbC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFJlbG9jYXRlIC0td2l0aC1wYW0gcGFydHMgaW4gcHJlcGFyYXRpb24gZm9yCiAgIGZpeGluZyBidWcgIzExODEuICBObyBjaGFuZ2VzIHlldC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTE4MTogRXhwbGljaXRseSB0ZXN0IHRvIHNlZSBpZiBPcGVuU1NMCiAgICgwLjkuOGEgYW5kIHByZXN1bWFibHkgbmV3ZXIpIHJlcXVpcmVzIC1sZGwgdG8gc3VjY2Vzc2Z1bGx5IGxpbmsuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBSZW1vdmUgZXJyYW50ICItIi4KCjIwMDYwODE5CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMTggMjI6NDE6MjkKICAgICBbZ3NzLWdlbnIuY10KICAgICBHU1NBUEkgZXJyb3IgY29kZSBzaG91bGQgYmUgMCBhbmQgbm90IC0xOyBmcm9tIHNpbW9uQHN4dy5vcmcudWsKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9yZWdyZXNzL01ha2VmaWxlLmluXSBBZGQgJChFWEVFWFQpIGFuZCBhZGQgYQogICBzaW5nbGUgcnVsZSBmb3IgdGhlIHRlc3QgcHJvZ3MuCgoyMDA2MDgxOAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmNdIFJlc3luYyB3aXRoCiAgIGNsb3NlZnJvbS5jIGZyb20gc3Vkby4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmNdIENvbW1lbnQgb3V0IHJjc2lkLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3JlZ3Jlc3Mvc25wcmludGZ0ZXN0LmNdIE5ld2xpbmUgb24gZXJyb3IuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcmVncmVzcy9NYWtlZmlsZS5pbl0gVXNlIGltcGxpY2l0IHJ1bGVzIGZvciB0aGUKICAgdGVzdCBwcm9ncyBpbnN0ZWFkOyB0aGV5IHdvcmsgYmV0dGVyIHRoYW4gd2hhdCB3ZSBoYXZlLgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8wNiAwMToxMzozMgogICAgIFtjb21wcmVzcy5jIG1vbml0b3IuYyBtb25pdG9yX3dyYXAuY10KICAgICAiemxpYi5oIiBjYW4gYmUgPHpsaWIuaD47IG9rIGRqbUAgbWFya3VzQAogICAtIG1pb2RAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMTIgMjA6NDY6NDYKICAgICBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXQogICAgIFJldmVydCBwcmV2aW91cyBpbmNsdWRlIGZpbGUgb3JkZXJpbmcgY2hhbmdlLCBmb3Igc3NoIHRvIGNvbXBpbGUgdW5kZXIKICAgICBnY2MyIChvciB1bnRpbCBvcGVuc3NsIGluY2x1ZGUgZmlsZXMgYXJlIGNsZWFuZWQgb2YgcGFyYW1ldGVyIG5hbWVzCiAgICAgaW4gZnVuY3Rpb24gcHJvdG90eXBlcykKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzE0IDEyOjQwOjI1CiAgICAgW3NlcnZjb25mLmMgc2VydmNvbmYuaCBzc2hkX2NvbmZpZy41XQogICAgIEFkZCBhYmlsaXR5IHRvIG1hdGNoIGdyb3VwcyB0byBNYXRjaCBrZXl3b3JkIGluIHNzaGRfY29uZmlnLiAgRmVlZGJhY2sKICAgICBkam1ALCBzdGV2ZXNrQCwgb2sgc3RldmVza0AuCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzE2IDExOjQ3OjE1CiAgICAgW3NzaGQuY10KICAgICBmYWN0b3IgaW5ldGQgY29ubmVjdGlvbiwgVENQIGxpc3RlbiBhbmQgbWFpbiBUQ1AgYWNjZXB0IGxvb3Agb3V0IG9mCiAgICAgbWFpbigpIGludG8gc2VwYXJhdGUgZnVuY3Rpb25zIHRvIGltcHJvdmUgcmVhZGFiaWxpdHk7IG9rIG1hcmt1c0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzE4IDA5OjEzOjI2CiAgICAgW2xvZy5jIGxvZy5oIHNzaGQuY10KICAgICBtYWtlIHNpZ25hbCBoYW5kbGVyIHRlcm1pbmF0aW9uIHBhdGggc2hvcnRlcjsgcmlza3kgY29kZSBwb2ludGVkIG91dCBieQogICAgIG1hcmsgZG93ZDsgb2sgZGptIG1hcmt1cwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8xOCAwOToxNToyMAogICAgIFthdXRoLmggc2Vzc2lvbi5jIHNzaGQuY10KICAgICBkZWxheSBhdXRoZW50aWNhdGlvbiByZWxhdGVkIGNsZWFudXBzIHVudGlsIHdlJ3JlIGF1dGhlbnRpY2F0ZWQgYW5kCiAgICAgYWxsIGFsYXJtcyBoYXZlIGJlZW4gY2FuY2VsbGVkOyBvayBkZXJhYWR0CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzE4IDEwOjI3OjE2CiAgICAgW21pc2MuaF0KICAgICByZW9yZGVyIHNvIHByb3RvdHlwZXMgYXJlIHNvcnRlZCBieSB0aGUgZmlsZXMgdGhleSByZWZlciB0bzsgbm8KICAgICBiaW5hcnkgY2hhbmdlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzE4IDEzOjU0OjU0CiAgICAgW2dzcy1nZW5yLmMgc3NoLWdzcy5oIHNzaGNvbm5lY3QyLmNdCiAgICAgYnogIzEyMTggLSBkaXNhYmxlIFNQTkVHTyBhcyBwZXIgUkZDNDQ2MjsgZGlmZiBmcm9tIHNpbW9uIEFUIHN4dy5vcmcudWsKICAgICBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzE4IDE0OjQwOjM0CiAgICAgW2dzcy1nZW5yLmMgc3NoLWdzcy5oXQogICAgIGNvbnN0aWZ5IGhvc3QgYXJndW1lbnQgdG8gbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIEdTU0FQSSBmdW5jdGlvbnMgYW5kCiAgICAgdW5icmVhayBjb21waWxhdGlvbiB3aXRoIC1XZXJyb3IKIC0gKGRqbSkgRGlzYWJsZSBzaWdkaWUoKSBmb3IgcGxhdGZvcm1zIHRoYXQgY2Fubm90IHNhZmVseSBzeXNsb2cgaW5zaWRlCiAgIGEgc2lnbmFsIGhhbmRsZXIgKGJhc2ljYWxseSBhbGwgb2YgdGhlbSwgZXhjZXB0aW5nIE9wZW5CU0QpOwogICBvayBkdHVja2VyQAoKMjAwNjA4MTcKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuYyBvcGVuYnNkLWNvbXBhdC9zZXRwcm9jdGl0bGUuY10KICAgSW5jbHVkZSBzdGRsaWIuaCBmb3IgbWFsbG9jIGFuZCBmcmllbmRzLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9ic2QtY2xvc2Vmcm9tLmNdIFVzZSBGX0NMT1NFTSBmY250bAogICBmb3IgY2xvc2Vmcm9tKCkgb24gQUlYLiAgUG9pbnRlZCBvdXQgYnkgV2lsbGlhbSBBaGVybi4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9yZWdyZXNzL3tNYWtlZmlsZS5pbixjbG9zZWZyb210ZXN0LmN9XSBSZWdyZXNzCiAgIHRlc3QgZm9yIGNsb3NlZnJvbSgpIGluIGNvbXBhdCBjb2RlLgoKMjAwNjA4MTYKIC0gKGRqbSkgW2F1ZGl0LWJzbS5jXSBTcHJpbmtsZSBpbiBzb21lIGhlYWRlcnMKCjIwMDYwODE1CiAtIChkdHVja2VyKSBbTElDRU5DRV0gQWRkIFJleWsgdG8gdGhlIGxpc3QgZm9yIHRoZSBjb21wYXQgZGlyLgoKMjAwNjA4MDYKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2JzZC1nZXRwZWVyZWlkLmNdIEFkZCBzb21lIGhlYWRlcnMgdG8gcXVpZXQgd2FybmluZ3MKICAgb24gU29sYXJpcyAxMAoKMjAwNjA4MDYKIC0gKGR0dWNrZXIpIFtkZWZpbmVzLmhdIFdpdGggdGhlIGluY2x1ZGVzLmggY2hhbmdlcyB3ZSBubyBsb25nZXIgZ2V0IHRoZQogICBuYW1lIGNsYXNoIG9uICJZRVMiIHNvIHdlIGNhbiByZW1vdmUgdGhlIHdvcmthcm91bmQgZm9yIGl0LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3tic2QtYXNwcmludGYuYyxic2Qtb3BlbnB0eS5jLGJzZC1zbnByaW50Zi5jLAogICBnbG9iLmN9XSBJbmNsdWRlIHN0ZGxpYi5oIGZvciBtYWxsb2MgYW5kIGZyaWVuZHMgaW4gY29tcGF0IGNvZGUuCgoyMDA2MDgwNQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yNCAxMzo1ODoyMgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgZGlzYWJsZSB0dW5uZWwgZm9yd2FyZGluZyB3aGVuIG5vIHN0cmljdCBob3N0IGtleSBjaGVja2luZwogICAgIGFuZCBrZXkgY2hhbmdlZDsgb2sgZGptQCBtYXJrdXNAIGR0dWNrZXJACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yNSAwMjowMTozNAogICAgIFtzY2FyZC5jXQogICAgIG5lZWQgI2luY2x1ZGUgPHN0cmluZy5oPgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjUgMDI6NTk6MjEKICAgICBbY2hhbm5lbHMuYyBjbGllbnRsb29wLmMgcGFja2V0LmMgc2NwLmMgc2VydmVybG9vcC5jIHNmdHAtY2xpZW50LmNdCiAgICAgW3NmdHAtc2VydmVyLmMgc3NoLWFnZW50LmMgc3NoLWtleXNjYW4uYyBzc2hjb25uZWN0LmMgc3NoZC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy90aW1lLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yNiAwMjozNToxNwogICAgIFthdG9taWNpby5jIGF1dGguYyBkaC5jIGF1dGhmaWxlLmMgYnVmZmVyLmMgY2xpZW50bG9vcC5jIGtleC5jXQogICAgIFtncm91cGFjY2Vzcy5jIGdzcy1nZW5yLmMga2V4Z2V4cy5jIG1pc2MuYyBtb25pdG9yLmMgbW9uaXRvcl9tbS5jXQogICAgIFtwYWNrZXQuYyBzY3AuYyBzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jIHNmdHAtY2xpZW50LmMgc2Z0cC1jb21tb24uY10KICAgICBbc2Z0cC1zZXJ2ZXIuYyBzZnRwLmMgc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uYyBzc2hsb2dpbi5jXQogICAgIFt1aWRzd2FwLmMgeG1hbGxvYy5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjYgMTM6NTc6MTcKICAgICBbYXV0aGZkLmMgYXV0aGZpbGUuYyBkaC5jIGNhbm9ob3N0LmMgY2hhbm5lbHMuYyBjbGllbnRsb29wLmMgY29tcGF0LmNdCiAgICAgW2hvc3RmaWxlLmMga2V4LmMgbG9nLmMgbWlzYy5jIG1vZHVsaS5jIG1vbml0b3IuYyBwYWNrZXQuYyByZWFkcGFzcy5jXQogICAgIFtzY3AuYyBzZXJ2Y29uZi5jIHNlc3Npb24uYyBzZnRwLXNlcnZlci5jIHNmdHAuYyBzc2gtYWRkLmMgc3NoLWFnZW50LmNdCiAgICAgW3NzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jIHNzaC1rZXlzaWduLmMgc3NoLmMgc3NoY29ubmVjdC5jXQogICAgIFtzc2hjb25uZWN0MS5jIHNzaGQuYyB4bWFsbG9jLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3RkbGliLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzI3IDA4OjAwOjUwCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBhdm9pZCBjb25mdXNpbmcgd29yZGluZyBpbiBIYXNoS25vd25Ib3N0czoKICAgICBvcmlnaW5hbGx5IHNwb3R0ZWQgYnkgYWxhbiBhbWVzYnVyeTsKICAgICBvayBkZXJhYWR0CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzI3IDA4OjAwOjUwCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBhdm9pZCBjb25mdXNpbmcgd29yZGluZyBpbiBIYXNoS25vd25Ib3N0czoKICAgICBvcmlnaW5hbGx5IHNwb3R0ZWQgYnkgYWxhbiBhbWVzYnVyeTsKICAgICBvayBkZXJhYWR0CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8wMSAxMTozNDozNgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgQWxsb3cgZmFsbGJhY2sgdG8ga25vd25faG9zdHMgZW50cmllcyB3aXRob3V0IHBvcnQgcXVhbGlmaWVycyBmb3IKICAgICBub24tc3RhbmRhcmQgcG9ydHMgdG9vLCBzbyB0aGF0IGFsbCBleGlzdGluZyBrbm93bl9ob3N0cyBlbnRyaWVzIHdpbGwgYmUKICAgICByZWNvZ25pc2VkLiAgUmVxdWVzdGVkIGJ5LCBmZWVkYmFjayBhbmQgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMDEgMjM6MjI6NDgKICAgICBbYXV0aC1wYXNzd2QuYyBhdXRoLXJob3N0cy5jIGF1dGgtcnNhLmMgYXV0aC5jIGF1dGguaCBhdXRoMS5jXQogICAgIFthdXRoMi1jaGFsbC5jIGF1dGgyLXB1YmtleS5jIGF1dGhmaWxlLmMgYnVmZmVyLmMgY2Fub2hvc3QuY10KICAgICBbY2hhbm5lbHMuYyBjbGllbnRsb29wLmMgZGguYyBkbnMuYyBkbnMuaCBob3N0ZmlsZS5jIGtleC5jIGtleGRoYy5jXQogICAgIFtrZXhnZXhjLmMga2V4Z2V4cy5jIGtleS5jIGtleS5oIGxvZy5jIG1pc2MuYyBtaXNjLmggbW9kdWxpLmNdCiAgICAgW21vbml0b3Jfd3JhcC5jIHBhY2tldC5jIHByb2dyZXNzbWV0ZXIuYyByZWFkY29uZi5jIHJlYWRwYXNzLmMgc2NwLmNdCiAgICAgW3NlcnZjb25mLmMgc2Vzc2lvbi5jIHNmdHAtY2xpZW50LmMgc2Z0cC1jb21tb24uYyBzZnRwLXNlcnZlci5jIHNmdHAuY10KICAgICBbc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jIHNzaC5jIHNzaGNvbm5lY3QuY10KICAgICBbc3NoY29ubmVjdDEuYyBzc2hjb25uZWN0Mi5jIHNzaGQuYyBzc2hsb2dpbi5jIHNzaHR0eS5jIHV1ZW5jb2RlLmNdCiAgICAgW3V1ZW5jb2RlLmggeG1hbGxvYy5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN0ZGlvLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8wMSAyMzozNjoxMgogICAgIFthdXRoZmlsZS5jIGNoYW5uZWxzLmMgcHJvZ3Jlc3NtZXRlci5jIHNjYXJkLmMgc2VydmNvbmYuYyBzc2guY10KICAgICBjbGVhbiBleHRyYSBzcGFjZXMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzAzIDAzOjM0OjQyCiAgICAgW09WRVJWSUVXIGF0b21pY2lvLmMgYXRvbWljaW8uaCBhdXRoLWJzZGF1dGguYyBhdXRoLWNoYWxsLmMgYXV0aC1rcmI1LmNdCiAgICAgW2F1dGgtb3B0aW9ucy5jIGF1dGgtb3B0aW9ucy5oIGF1dGgtcGFzc3dkLmMgYXV0aC1yaC1yc2EuYyBhdXRoLXJob3N0cy5jXQogICAgIFthdXRoLXJzYS5jIGF1dGgtc2tleS5jIGF1dGguYyBhdXRoLmggYXV0aDEuYyBhdXRoMi1jaGFsbC5jIGF1dGgyLWdzcy5jXQogICAgIFthdXRoMi1ob3N0YmFzZWQuYyBhdXRoMi1rYmRpbnQuYyBhdXRoMi1ub25lLmMgYXV0aDItcGFzc3dkLmMgXQogICAgIFthdXRoMi1wdWJrZXkuYyBhdXRoMi5jIGF1dGhmZC5jIGF1dGhmZC5oIGF1dGhmaWxlLmMgYnVmYXV4LmMgYnVmYm4uY10KICAgICBbYnVmZmVyLmMgYnVmZmVyLmggY2Fub2hvc3QuYyBjaGFubmVscy5jIGNoYW5uZWxzLmggY2lwaGVyLTNkZXMxLmNdCiAgICAgW2NpcGhlci1iZjEuYyBjaXBoZXItY3RyLmMgY2lwaGVyLmMgY2xlYW51cC5jIGNsaWVudGxvb3AuYyBjb21wYXQuY10KICAgICBbY29tcHJlc3MuYyBkZWF0dGFjay5jIGRoLmMgZGlzcGF0Y2guYyBkbnMuYyBkbnMuaCBmYXRhbC5jIGdyb3VwYWNjZXNzLmNdCiAgICAgW2dyb3VwYWNjZXNzLmggZ3NzLWdlbnIuYyBnc3Mtc2Vydi1rcmI1LmMgZ3NzLXNlcnYuYyBob3N0ZmlsZS5jIGtleC5jXQogICAgIFtrZXguaCBrZXhkaC5jIGtleGRoYy5jIGtleGRocy5jIGtleGdleC5jIGtleGdleGMuYyBrZXhnZXhzLmMga2V5LmNdCiAgICAgW2tleS5oIGxvZy5jIGxvZy5oIG1hYy5jIG1hdGNoLmMgbWQtc2hhMjU2LmMgbWlzYy5jIG1pc2MuaCBtb2R1bGkuY10KICAgICBbbW9uaXRvci5jIG1vbml0b3JfZmRwYXNzLmMgbW9uaXRvcl9tbS5jIG1vbml0b3JfbW0uaCBtb25pdG9yX3dyYXAuY10KICAgICBbbW9uaXRvcl93cmFwLmggbXNnLmMgbmNoYW4uYyBwYWNrZXQuYyBwcm9ncmVzc21ldGVyLmMgcmVhZGNvbmYuY10KICAgICBbcmVhZGNvbmYuaCByZWFkcGFzcy5jIHJzYS5jIHNjYXJkLmMgc2NhcmQuaCBzY3AuYyBzZXJ2Y29uZi5jIHNlcnZjb25mLmhdCiAgICAgW3NlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc2Vzc2lvbi5oIHNmdHAtY2xpZW50LmMgc2Z0cC1jb21tb24uY10KICAgICBbc2Z0cC1jb21tb24uaCBzZnRwLWdsb2IuYyBzZnRwLXNlcnZlci5jIHNmdHAuYyBzc2gtYWRkLmMgc3NoLWFnZW50LmNdCiAgICAgW3NzaC1kc3MuYyBzc2gtZ3NzLmggc3NoLWtleWdlbi5jIHNzaC1rZXlzY2FuLmMgc3NoLWtleXNpZ24uYyBzc2gtcnNhLmNdCiAgICAgW3NzaC5jIHNzaC5oIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0Lmggc3NoY29ubmVjdDEuYyBzc2hjb25uZWN0Mi5jXQogICAgIFtzc2hkLmMgc3NobG9naW4uYyBzc2hsb2dpbi5oIHNzaHB0eS5jIHNzaHB0eS5oIHNzaHR0eS5jIHR0eW1vZGVzLmNdCiAgICAgW3VpZHN3YXAuYyB1aWRzd2FwLmggdXVlbmNvZGUuYyB1dWVuY29kZS5oIHhtYWxsb2MuYyB4bWFsbG9jLmhdCiAgICAgW2xvZ2lucmVjLmMgbG9naW5yZWMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmhdCiAgICAgYWxtb3N0IGVudGlyZWx5IGdldCByaWQgb2YgdGhlIGN1bHR1cmUgb2YgIi5oIGZpbGVzIHRoYXQgaW5jbHVkZSAuaCBmaWxlcyIKICAgICBvayBkam0sIHNvcnQgb2Ygb2sgc3RldmVzawogICAgIG1ha2VzIHRoZSBwYWluIHN0b3AgaW4gb25lIGVhc3kgc3RlcAogICAgIE5CLiBwb3J0YWJsZSBjb21taXQgY29udGFpbnMgZXZlcnl0aGluZyAqZXhjZXB0KiByZW1vdmluZyBpbmNsdWRlcy5oLCBhcwogICAgIHRoYXQgd2lsbCB0YWtlIGEgZmFpciBiaXQgbW9yZSB3b3JrIGFzIHdlIG1vdmUgaGVhZGVycyB0aGF0IGFyZSByZXF1aXJlZAogICAgIGZvciBwb3J0YWJpbGl0eSB3b3JrYXJvdW5kcyB0byBkZWZpbmVzLmguIChhbHNvLCB0aGlzIHN0ZXAgd2Fzbid0ICJlYXN5IikKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzA0IDIwOjQ2OjA1CiAgICAgW21vbml0b3IuYyBzZXNzaW9uLmMgc3NoLWFnZW50LmNdCiAgICAgc3BhY2VzCiAtIChkam0pIFthdXRoLXBhbS5jIGRlZmluZXMuaF0gTW92ZSBQQU0gcmVsYXRlZCBiaXRzIHRvIGF1dGgtcGFtLmMKIC0gKGRqbSkgW2F1dGgtcGFtLmMgYXV0aC5jIGJ1ZmF1eC5oIGVudHJvcHkuYyBvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jXQogICByZW1vdmUgbGFzdCB0cmFjZXMgb2YgYnVmYXV4LmggLSBpdCB3YXMgbWVyZ2VkIGludG8gYnVmZmVyLmggaW4gdGhlIGJpZwogICBpbmNsdWRlcy5oIGNvbW1pdAogLSAoZGptKSBbYXV0aC5jIGxvZ2lucmVjLmNdIE1pc3NpbmcgbmV0aW5ldC9pbi5oIGZvciBsb2dpbnJlYwogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvcmVncmVzcy9zbnByaW50ZnRlc3QuY10KICAgW29wZW5ic2QtY29tcGF0L3JlZ3Jlc3Mvc3RyZHVwdGVzdC5jXSBBZGQgbWlzc2luZyBpbmNsdWRlcyBzbyB0aGV5IHBhc3MKICAgY29tcGlsYXRpb24gd2l0aCAiLVdhbGwgLVdlcnJvciIKIC0gKGRqbSkgW2F1dGgtcGFtLmMgYXV0aC1zaGFkb3cuYyBhdXRoMi1ub25lLmMgY2xlYW51cC5jIHNzaGQuY10KICAgW29wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmMgb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uaF0gU3ByaW5rbGUgbW9yZQogICBpbmNsdWRlcyBmb3IgTGludXggaW4KIC0gKGR0dWNrZXIpIFtjbGVhbnVwLmNdIE5lZWQgZGVmaW5lcy5oIGZvciBfX2RlYWQuCiAtIChkdHVja2VyKSBbYXV0aDItZ3NzLmNdIFdlIHN0aWxsIG5lZWQgdGhlICNpZmRlZiBHU1NBUEkgaW4gLXBvcnRhYmxlLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3tic2QtYXJjNHJhbmRvbS5jLHBvcnQtdHVuLmMseG1tYXAuY31dIExvdHMgb2YKICAgI2luY2x1ZGUgc3RkYXJnLmgsIG5lZWRlZCBmb3IgbG9nLmguCiAtIChkdHVja2VyKSBbZW50cm9weS5jXSBOZWVkcyB1bmlzdGQuaCB0b28uCiAtIChkdHVja2VyKSBbc3NoLXJhbmQtaGVscGVyLmNdIE5lZWRzIHN0ZGFyZy5oIGZvciBsb2cuaC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBOZWVzIHN0ZGxpYi5oIGZvciBtYWxsb2MuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3RydG9udW0uY10gSW5jbHVkZSBzdGRsaWIuaCBmb3Igc3RydG9sbCwKICAgb3RoZXJ3aXNlIGl0IGlzIGltcGxpY2l0bHkgZGVjbGFyZWQgYXMgcmV0dXJuaW5nIGFuIGludC4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzA1IDA3OjUyOjUyCiAgICAgW2F1dGgyLW5vbmUuYyBzc2hkLmMgbW9uaXRvcl93cmFwLmNdCiAgICAgQWRkIGhlYWRlcnMgcmVxdWlyZWQgdG8gYnVpbGQgd2l0aCBLRVJCRVJPUzU9bm8uICBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8wNSAwODowMDozMwogICAgIFthdXRoLXNrZXkuY10KICAgICBBZGQgaGVhZGVycyByZXF1aXJlZCB0byBidWlsZCB3aXRoIC1EU0tFWS4gIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzA1IDA4OjI4OjI0CiAgICAgW21vbml0b3Jfd3JhcC5jIGF1dGgtc2tleS5jIGF1dGgyLWNoYWxsLmNdCiAgICAgWmFwIHVudXNlZCB2YXJpYWJsZXMgaW4gLURTS0VZIGNvZGUuICBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8wNSAwODozNDowNAogICAgIFtwYWNrZXQuY10KICAgICBUeXBvIGluIGNvbW1lbnQKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuY10gQWRkIGhlYWRlcnMgcmVxdWlyZWQgdG8gY29tcGlsZQogICBvbiBDeWd3aW4uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmNdIEFkZCBoZWFkZXJzIG5lZWRlZCBmb3IgaW5ldF9udG9hLgogLSAoZHR1Y2tlcikgW2F1dGgtc2tleS5jXSBtb25pdG9yX3dyYXAuaCBuZWVkcyBzc2gtZ3NzLmguCiAtIChkdHVja2VyKSBbYXVkaXQuYyBhdWRpdC5oXSBSZXBhaXIgaGVhZGVycy4KIC0gKGR0dWNrZXIpIFthdWRpdC1ic20uY10gQWRkIGFkZGl0aW9uYWwgaGVhZGVycyBub3cgcmVxdWlyZWQuCgoyMDA2MDgwNAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVGhlICJjcmlwcGxlZCBBRVMiIHRlc3QgZG9lcyBub3Qgd29yayBvbiByZWNlbnQKICAgdmVyc2lvbnMgb2YgU29sYXJpcywgc28gdXNlIEFDX0xJTktfSUZFTFNFIHRvIGFjdHVhbGx5IGxpbmsgdGhlIHRlc3QgcHJvZ3JhbQogICByYXRoZXIgdGhhbiBqdXN0IGNvbXBpbGluZyBpdC4gIFNwb3R0ZWQgYnkgZGxnQC4KCjIwMDYwODAyCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZGFlbW9uLmNdIEFkZCB1bmlzdGQuaCBmb3IgZm9yaygpIHByb3RvdHlwZS4KCjIwMDYwNzI1CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQveG1tYXAuY10gTmVlZCBmY250bC5oIGZvciBPX1JEUlcuCgoyMDA2MDcyNAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEyIDEzOjM5OjU1CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgIC0gbmV3IHNlbnRlbmNlLCBuZXcgbGluZQogICAgICAtIHMvVGhlIHRoZS9UaGUvCiAgICAgIC0ga2lsbCBhIGJhZCBjb21tYQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTIgMjI6Mjg6NTIKICAgICBbYXV0aC1vcHRpb25zLmMgY2Fub2hvc3QuYyBjaGFubmVscy5jIGluY2x1ZGVzLmggcmVhZGNvbmYuY10KICAgICBbc2VydmNvbmYuYyBzc2gta2V5c2Nhbi5jIHNzaC5jIHNzaGNvbm5lY3QuYyBzc2hkLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8bmV0ZGIuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEyIDIyOjQyOjMyCiAgICAgW2luY2x1ZGVzLmggc3NoLmMgc3NoLXJhbmQtaGVscGVyLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3RkZGVmLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xNCAwMToxNToyOAogICAgIFttb25pdG9yX3dyYXAuaF0KICAgICBkb24ndCBuZWVkIGluY29tcGxldGVseS10eXBlZCAnc3RydWN0IHBhc3N3ZCcgbm93IHdpdGgKICAgICAjaW5jbHVkZSA8cHdkLmg+OyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xNyAwMTozMToxMAogICAgIFthdXRoZmQuYyBhdXRoZmlsZS5jIGNoYW5uZWxzLmMgY2xlYW51cC5jIGNsaWVudGxvb3AuYyBncm91cGFjY2Vzcy5jXQogICAgIFtpbmNsdWRlcy5oIGxvZy5jIG1pc2MuYyBtc2cuYyBwYWNrZXQuYyBwcm9ncmVzc21ldGVyLmMgcmVhZGNvbmYuY10KICAgICBbcmVhZHBhc3MuYyBzY3AuYyBzZXJ2Y29uZi5jIHNmdHAtY2xpZW50LmMgc2Z0cC1zZXJ2ZXIuYyBzZnRwLmNdCiAgICAgW3NzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNjYW4uYyBzc2gta2V5c2lnbi5jIHNzaC5jXQogICAgIFtzc2hjb25uZWN0LmMgc3NobG9naW4uYyBzc2hwdHkuYyB1aWRzd2FwLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8dW5pc3RkLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xNyAxMjowMjoyNAogICAgIFthdXRoLW9wdGlvbnMuY10KICAgICBVc2UgJ1wwJyByYXRoZXIgdGhhbiAwIHRvIHRlcm1pbmF0ZXMgc3RyaW5nczsgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTcgMTI6MDY6MDAKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIHNlcnZjb25mLmMgc3NoZF9jb25maWcuNV0KICAgICBBZGQgUGVybWl0T3BlbiBkaXJlY3RpdmUgdG8gc3NoZF9jb25maWcgd2hpY2ggaXMgZXF1aXZhbGVudCB0byB0aGUKICAgICAicGVybWl0b3BlbiIga2V5IG9wdGlvbi4gIEFsbG93cyBzZXJ2ZXIgYWRtaW4gdG8gYWxsb3cgVENQIHBvcnQKICAgICBmb3J3YXJkaW5nIG9ubHkgdHdvIHNwZWNpZmljIGhvc3QvcG9ydCBwYWlycy4gIFVzZWZ1bCB3aGVuIGNvbWJpbmVkCiAgICAgd2l0aCBNYXRjaC4KICAgICBJZiBwZXJtaXRvcGVuIGlzIHVzZWQgaW4gYm90aCBzc2hkX2NvbmZpZyBhbmQgYSBrZXkgb3B0aW9uLCBib3RoCiAgICAgbXVzdCBhbGxvdyBhIGdpdmVuIGNvbm5lY3Rpb24gYmVmb3JlIGl0IHdpbGwgYmUgcGVybWl0dGVkLgogICAgIE5vdGUgdGhhdCB1c2VycyBjYW4gc3RpbGwgdXNlIGV4dGVybmFsIGZvcndhcmRlcnMgc3VjaCBhcyBuZXRjYXQsCiAgICAgc28gdG8gYmUgdGhvc2UgbXVzdCBiZSBjb250cm9sbGVkIHRvbyBmb3IgdGhlIGxpbWl0cyB0byBiZSBlZmZlY3RpdmUuCiAgICAgRmVlZGJhY2sgJiBvayBkam1ALCBtYW4gcGFnZSBjb3JyZWN0aW9ucyAmIG9rIGptY0AuCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE4IDA3OjUwOjQwCiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgdHdlYWs7IG9rIGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTggMDc6NTY6MjgKICAgICBbc2NwLjFdCiAgICAgcmVwbGFjZSBESUFHTk9TVElDUyB3aXRoIC5FeDsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTggMDg6MDM6MDkKICAgICBbc3NoLWFnZW50LjEgc3NoZF9jb25maWcuNV0KICAgICBtYXJrIHVwIGFuZ2xlIGJyYWNrZXRzOwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTggMDg6MjI6MjMKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBDbGFyaWZ5IGRlc2NyaXB0aW9uIG9mIE1hdGNoLCB3aXRoIG1pbm9yIGNvcnJlY3Rpb24gZnJvbSBqbWNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xOCAyMjoyNzo1NQogICAgIFtkaC5jXQogICAgIHJlbW92ZSB1bm5lZWRlZCBpbmNsdWRlczsgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTkgMDg6NTY6NDEKICAgICBbc2VydmNvbmYuYyBzc2hkX2NvbmZpZy41XQogICAgIEFkZCBzdXBwb3J0IGZvciBYMTFGb3J3YXJpbmcsIFgxMURpc3BsYXlPZmZzZXQgYW5kIFgxMVVzZUxvY2FsaG9zdCB0bwogICAgIE1hdGNoLiAgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTkgMTM6MDc6MTAKICAgICBbc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNlc3Npb24uYyBzc2hkLjggc3NoZF9jb25maWcgc3NoZF9jb25maWcuNV0KICAgICBBZGQgRm9yY2VDb21tYW5kIGtleXdvcmQgdG8gc3NoZF9jb25maWcsIGVxdWl2YWxlbnQgdG8gdGhlICJjb21tYW5kPSIKICAgICBrZXkgb3B0aW9uLCBtYW4gcGFnZSBlbnRyeSBhbmQgZXhhbXBsZSBpbiBzc2hkX2NvbmZpZy4KICAgICBGZWVkYmFjayAmIG9rIGRqbUAsIG1hbiBwYWdlIGNvcnJlY3Rpb25zICYgb2sgam1jQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjAgMTU6MjY6MTUKICAgICBbYXV0aDEuYyBzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jIHNzaGNvbm5lY3QyLmNdCiAgICAgbWlzc2VkIHNvbWUgbmVlZGVkICNpbmNsdWRlIDx1bmlzdGQuaD4gd2hlbiBLRVJCRVJPUzU9bm87IGlzc3VlIGZyb20KICAgICBtYXNzaW1vQGNlZG9jLm1vLml0CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yMSAxMjo0MzozNgogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNzaGRfY29uZmlnLjVdCiAgICAgTWFrZSBQZXJtaXRPcGVuIHRha2UgYSBsaXN0IG9mIHBlcm1pdHRlZCBwb3J0cyBhbmQgYWN0IG1vcmUgbGlrZSBtb3N0CiAgICAgb3RoZXIga2V5d29yZHMgKGllIHRoZSBmaXJzdCBtYXRjaCBpcyB0aGUgZWZmZWN0aXZlIHNldHRpbmcpLiBUaGlzCiAgICAgYWxzbyBtYWtlcyBpdCBlYXNpZXIgdG8gb3ZlcnJpZGUgYSBwcmV2aW91c2x5IHNldCBQZXJtaXRPcGVuLiBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yMSAyMToxMzozMAogICAgIFtjaGFubmVscy5jXQogICAgIG1vcmUgQVJHU1VTRUQgKGxpbnQpIGZvciBkaXNwYXRjaCB0YWJsZS1kcml2ZW4gZnVuY3Rpb25zOyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yMSAyMToyNjo1NQogICAgIFtwcm9ncmVzc21ldGVyLmNdCiAgICAgQVJHU1VTRUQgZm9yIHNpZ25hbCBoYW5kbGVyCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yMiAxOTowODo1NAogICAgIFtpbmNsdWRlcy5oIG1vZHVsaS5jIHByb2dyZXNzbWV0ZXIuYyBzY3AuYyBzZnRwLWNvbW1vbi5jXQogICAgIFtzZnRwLXNlcnZlci5jIHNzaC1hZ2VudC5jIHNzaGxvZ2luLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8dGltZS5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjIgMjA6NDg6MjMKICAgICBbYXRvbWljaW8uYyBhdXRoLW9wdGlvbnMuYyBhdXRoLXBhc3N3ZC5jIGF1dGgtcmhvc3RzLmMgYXV0aC1yc2EuY10KICAgICBbYXV0aC5jIGF1dGgxLmMgYXV0aDItY2hhbGwuYyBhdXRoMi1ob3N0YmFzZWQuYyBhdXRoMi1wYXNzd2QuYyBhdXRoMi5jXQogICAgIFthdXRoZmQuYyBhdXRoZmlsZS5jIGJ1ZmF1eC5jIGJ1ZmJuLmMgYnVmZmVyLmMgY2Fub2hvc3QuYyBjaGFubmVscy5jXQogICAgIFtjaXBoZXItM2RlczEuYyBjaXBoZXItYmYxLmMgY2lwaGVyLWN0ci5jIGNpcGhlci5jIGNsaWVudGxvb3AuY10KICAgICBbY29tcGF0LmMgZGVhdHRhY2suYyBkaC5jIGRucy5jIGdzcy1nZW5yLmMgZ3NzLXNlcnYuYyBob3N0ZmlsZS5jXQogICAgIFtpbmNsdWRlcy5oIGtleC5jIGtleGRoYy5jIGtleGRocy5jIGtleGdleGMuYyBrZXhnZXhzLmMga2V5LmMgbG9nLmNdCiAgICAgW21hYy5jIG1hdGNoLmMgbWQtc2hhMjU2LmMgbWlzYy5jIG1vZHVsaS5jIG1vbml0b3IuYyBtb25pdG9yX2ZkcGFzcy5jXQogICAgIFttb25pdG9yX21tLmMgbW9uaXRvcl93cmFwLmMgbXNnLmMgbmNoYW4uYyBwYWNrZXQuYyByc2EuY10KICAgICBbcHJvZ3Jlc3NtZXRlci5jIHJlYWRjb25mLmMgcmVhZHBhc3MuYyBzY3AuYyBzZXJ2Y29uZi5jIHNlcnZlcmxvb3AuY10KICAgICBbc2Vzc2lvbi5jIHNmdHAtY2xpZW50LmMgc2Z0cC1jb21tb24uYyBzZnRwLWdsb2IuYyBzZnRwLXNlcnZlci5jIHNmdHAuY10KICAgICBbc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC1kc3MuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNjYW4uY10KICAgICBbc3NoLWtleXNpZ24uYyBzc2gtcnNhLmMgc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QxLmMgc3NoY29ubmVjdDIuY10KICAgICBbc3NoZC5jIHNzaGxvZ2luLmMgc3NocHR5LmMgdHR5bW9kZXMuYyB1aWRzd2FwLmMgeG1hbGxvYy5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN0cmluZy5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjMgMDE6MTE6MDUKICAgICBbYXV0aC5oIGRpc3BhdGNoLmMga2V4Lmggc2Z0cC1jbGllbnQuY10KICAgICAjaW5jbHVkZSA8c2lnbmFsLmg+IGZvciBzaWdfYXRvbWljX3Q7IG5lZWQgdGhpcyBwcmlvciB0byA8c3lzL3BhcmFtLmg+CiAgICAgbW92ZQogLSAoZGptKSBbYWNzcy5jIGF1dGgta3JiNS5jIGF1dGgtb3B0aW9ucy5jIGF1dGgtcGFtLmMgYXV0aC1zaGFkb3cuY10KICAgW2Nhbm9ob3N0LmMgY2hhbm5lbHMuYyBjaXBoZXItYWNzcy5jIGRlZmluZXMuaCBkbnMuYyBnc3MtZ2Vuci5jXQogICBbZ3NzLXNlcnYta3JiNS5jIGdzcy1zZXJ2LmMgbG9nLmggbG9naW5yZWMuYyBsb2dpbnRlc3QuYyByZWFkY29uZi5jXQogICBbc2VydmNvbmYuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNjYW4uYyBzc2gta2V5c2lnbi5jIHNzaC1yYW5kLWhlbHBlci5jXQogICBbc3NoLmMgc3NoY29ubmVjdC5jIHNzaGQuYyBvcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuY10KICAgW29wZW5ic2QtY29tcGF0L2JzZC1hcmM0cmFuZG9tLmMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuY10KICAgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmMgb3BlbmJzZC1jb21wYXQvZ2xvYi5jXQogICBbb3BlbmJzZC1jb21wYXQvbWt0ZW1wLmMgb3BlbmJzZC1jb21wYXQvcG9ydC1saW51eC5jXQogICBbb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uYyBvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5jXQogICBbb3BlbmJzZC1jb21wYXQvc2V0cHJvY3RpdGxlLmMgb3BlbmJzZC1jb21wYXQveG1tYXAuY10KICAgbWFrZSB0aGUgcG9ydGFibGUgdHJlZSBjb21waWxlIGFnYWluIC0gc3ByaW5rbGUgdW5pc3RkLmggYW5kIHN0cmluZy5oIAogICBiYWNrIGluLiBEb24ndCByZWRlZmluZSBfX3VudXNlZCwgYXMgaXQgdHVybmVkIG91dCB0byBiZSB1c2VkIGluCiAgIGhlYWRlcnMgb24gTGludXgsIGFuZCByZXBsYWNlIGl0cyB1c2UgaW4gYXV0aC1wYW0uYyB3aXRoIEFSR1NVU0VECiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9nbG9iLmNdCiAgIE1vdmUgZ2V0X2FyZ19tYXgoKSBpbnRvIHRoZSBpZmRlZiBIQVZFX0dMT0IgYmxvY2sgc28gdGhhdCBpdCBjb21waWxlcwogICBvbiBPcGVuQlNEIChvciBvdGhlciBwbGF0Zm9ybXMgd2l0aCBhIGRlY2VudCBnbG9iIGltcGxlbWVudGF0aW9uKSB3aXRoCiAgIC1XZXJyb3IKIC0gKGRqbSkgW3V1ZW5jb2RlLmNdCiAgIEFkZCByZXNvbHYuaCwgaXMgaXQgY29udGFpbnMgdGhlIHByb3RvdHlwZXMgZm9yIF9fYjY0X250b3AvX19iNjRfcHRvbiBvbgogICBzb21lIHBsYXRmb3JtcwogLSAoZGptKSBbc2Vzc2lvbi5jXQogICBmaXggY29tcGlsZSBlcnJvciB3aXRoIC1XZXJyb3IgLVdhbGw6ICdwYXRoJyBpcyBvbmx5IHVzZWQgaW4KICAgZG9fc2V0dXBfZW52KCkgaWYgSEFWRV9MT0dJTl9DQVAgaXMgbm90IGRlZmluZWQKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2Jhc2VuYW1lLmMgb3BlbmJzZC1jb21wYXQvYnNkLWNsb3NlZnJvbS5jXQogICBbb3BlbmJzZC1jb21wYXQvYnNkLWNyYXkuYyBvcGVuYnNkLWNvbXBhdC9ic2Qtb3BlbnB0eS5jXQogICBbb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmMgb3BlbmJzZC1jb21wYXQvZmFrZS1yZmMyNTUzLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtaXJpeC5jXQogICBbb3BlbmJzZC1jb21wYXQvcnJlc3Zwb3J0LmNdCiAgIFRoZXNlIGxvb2sgdG8gbmVlZCBzdHJpbmcuaCBhbmQvb3IgdW5pc3RkLmggKGJhc2VkIG9uIGEgZ3JlcCBmb3IgZnVuY3Rpb24KICAgbmFtZXMpCiAtIChkam0pIFtNYWtlZmlsZS5pbl0KICAgUmVtb3ZlIGdlbmVyYXRlZCBvcGVuYnNkLWNvbXBhdC9yZWdyZXNzL01ha2VmaWxlIGluIGRpc3RjbGVhbiB0YXJnZXQKIC0gKGRqbSkgW3JlZ3Jlc3MvTWFrZWZpbGUgcmVncmVzcy9hZ2VudC1nZXRwZWVyZWlkLnNoIHJlZ3Jlc3MvY2ZnbWF0Y2guc2hdCiAgIFtyZWdyZXNzL2NpcGhlci1zcGVlZC5zaCByZWdyZXNzL2ZvcmNlY29tbWFuZC5zaCByZWdyZXNzL2ZvcndhcmRpbmcuc2hdCiAgIFN5bmMgcmVncmVzcyB0ZXN0cyB0byAtY3VycmVudDsgaW5jbHVkZSBkdHVja2VyQCdzIG5ldyBjZmdtYXRjaCBhbmQgCiAgIGZvcmNlY29tbWFuZCB0ZXN0cy4gQWRkIGNpcGhlci1zcGVlZC5zaCB0ZXN0IChub3QgbGlua2VkIGluIHlldCkKIC0gKGR0dWNrZXIpIFtjbGVhbnVwLmNdIFNpbmNlIGNvbmZpZy5oIGRlZmluZXMgX0xBUkdFX0ZJTEVTIG9uIEFJWCwgaW5jbHVkaW5nCiAgIHN5c3RlbSBoZWFkZXJzIGJlZm9yZSBkZWZpbmVzLmggd2lsbCBjYXVzZSBjb25mbGljdGluZyBkZWZpbml0aW9ucy4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2ZvcmNlY29tbWFuZC5zaF0gUG9ydGFibGl6ZS4KCjIwMDYwNzEzCiAtIChkdHVja2VyKSBbYXV0aC1rcmI1LmMgYXV0aC1wYW0uY10gU3RpbGwgbW9yZSBlcnJuby5oCgoyMDA2MDcxMgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBkZWZpbmVzLmhdIE9ubHkgZGVmaW5lIFNIVVRfUkQgKGFuZCBmcmllbmRzKSBhbmQKICAgT19OT05CTE9DSyBpZiB0aGV5J3JlIHJlYWxseSBuZWVkZWQuICBGaXhlcyBidWlsZCBlcnJvcnMgb24gSFAtVVgsIG9sZAogICBMaW51eGVzIGFuZCBwcm9iYWJseSBtb3JlLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gT3BlbkJTRCBuZWVkcyA8c3lzL3R5cGVzLmg+IGJlZm9yZSA8c3lzL3NvY2tldC5oPgogICBmb3IgU0hVVF9SRC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jXSBPcGVuQlNEIG5lZWRzIDxuZXRpbmV0L2luLmg+IGJlZm9yZQogICA8bmV0aW5ldC9pcC5oPi4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEwIDE2OjAxOjU3CiAgICAgW3NmdHAtZ2xvYi5jIHNmdHAtY29tbW9uLmggc2Z0cC5jXQogICAgIGJ1ZmZlci5oIG9ubHkgbmVlZGVkIGluIHNmdHAtY29tbW9uLmggYW5kIHJlbW92ZSBzb21lIHVubmVlZGVkCiAgICAgdXNlciBpbmNsdWRlczsgb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMCAxNjowNDoyMQogICAgIFtzc2hkLjhdCiAgICAgcy9hbmQgYW5kL2FuZC8KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEwIDE2OjM3OjM2CiAgICAgW3JlYWRwYXNzLmMgbG9nLmggc2NwLmMgZmF0YWwuYyB4bWFsbG9jLmMgaW5jbHVkZXMuaCBzc2gta2V5c2Nhbi5jIG1pc2MuYwogICAgIGF1dGguYyBwYWNrZXQuYyBsb2cuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzdGRhcmcuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzExIDEwOjEyOjA3CiAgICAgW3NzaC5jXQogICAgIE9ubHkgY29weSB0aGUgcGFydCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdlIGFjdHVhbGx5IHVzZS4gIFByZXZlbnRzCiAgICAgc3NoIGJhaWxpbmcgd2hlbiBTZW5kRW52IGlzIHVzZWQgYW5kIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggYSByZWFsbHkKICAgICBsb25nIHZhbHVlIGV4aXN0cy4gIG9rIGRqbUAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTEgMTg6NTA6NDgKICAgICBbY2xpZW50bG9vcC5jIHNzaC4xIHNzaC5jIGNoYW5uZWxzLmMgc3NoX2NvbmZpZy41IHJlYWRjb25mLmggc2Vzc2lvbi5jCiAgICAgY2hhbm5lbHMuaCByZWFkY29uZi5jXQogICAgIGFkZCBFeGl0T25Gb3J3YXJkRmFpbHVyZTogdGVybWluYXRlIHRoZSBjb25uZWN0aW9uIGlmIHNzaCgxKQogICAgIGNhbm5vdCBzZXQgdXAgYWxsIHJlcXVlc3RlZCBkeW5hbWljLCBsb2NhbCwgYW5kIHJlbW90ZSBwb3J0CiAgICAgZm9yd2FyZGluZ3MuIG9rIGRqbSwgZHR1Y2tlciwgc3RldmVzaywgam1jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMSAyMDowNzoyNQogICAgIFtzY3AuYyBhdXRoLmMgbW9uaXRvci5jIHNlcnZlcmxvb3AuYyBzZnRwLXNlcnZlci5jIHNzaHB0eS5jIHJlYWRwYXNzLmMKICAgICBzc2hkLmMgbW9uaXRvcl93cmFwLmMgbW9uaXRvcl9mZHBhc3MuYyBzc2gtYWdlbnQuYyB0dHltb2Rlcy5jIGF0b21pY2lvLmMKICAgICBpbmNsdWRlcy5oIHNlc3Npb24uYyBzc2hsb2dpbi5jIG1vbml0b3JfbW0uYyBwYWNrZXQuYyBzc2hjb25uZWN0Mi5jCiAgICAgc2Z0cC1jbGllbnQuYyBuY2hhbi5jIGNsaWVudGxvb3AuYyBzZnRwLmMgbWlzYy5jIGNhbm9ob3N0LmMgY2hhbm5lbHMuYwogICAgIHNzaC1rZXlnZW4uYyBwcm9ncmVzc21ldGVyLmMgdWlkc3dhcC5jIG1zZy5jIHJlYWRjb25mLmMgc3NoY29ubmVjdC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPGVycm5vLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMSAyMDoxNjo0MwogICAgIFtzc2guY10KICAgICBjYXN0IGFzdGVyaXNrIGZpZWxkIHByZWNpc2lvbiBhcmd1bWVudCB0byBpbnQgdG8gcmVtb3ZlIHdhcm5pbmc7CiAgICAgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTEgMjA6Mjc6NTYKICAgICBbYXV0aGZpbGUuYyBzc2guY10KICAgICBuZWVkIDxlcnJuby5oPiBoZXJlIGFsc28gKGl0J3MgYWxzbyBpbmNsdWRlZCBpbiA8b3BlbnNzbC9lcnIuaD4pCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMiAxMTozNDo1OAogICAgIFtzc2hkLmMgc2VydmNvbmYuaCBzZXJ2Y29uZi5jIHNzaGRfY29uZmlnLjUgYXV0aC5jXQogICAgIEFkZCBzdXBwb3J0IGZvciBjb25kaXRpb25hbCBkaXJlY3RpdmVzIHRvIHNzaGRfY29uZmlnIHZpYSBhICJNYXRjaCIKICAgICBrZXl3b3JkLCB3aGljaCB3b3JrcyBzaW1pbGFybHkgdG8gdGhlICJIb3N0IiBkaXJlY3RpdmUgaW4gc3NoX2NvbmZpZy4KICAgICBMaW5lcyBhZnRlciBhIE1hdGNoIGxpbmUgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2V0IGluIHRoZSBtYWluIHNlY3Rpb24KICAgICBpZiB0aGUgY29uZGl0aW9uIG9uIHRoZSBNYXRjaCBsaW5lIGlzIHRydWUsIGVnCiAgICAgQWxsb3dUY3BGb3J3YXJkaW5nIHllcwogICAgIE1hdGNoIFVzZXIgYW5vbmN2cwogICAgICAgICAgICAgQWxsb3dUY3BGb3J3YXJkaW5nIG5vCiAgICAgd2lsbCBhbGxvdyBwb3J0IGZvcndhcmRpbmcgYnkgYWxsIHVzZXJzIGV4Y2VwdCAiYW5vbmN2cyIuCiAgICAgQ3VycmVudGx5IG9ubHkgYSB2ZXJ5IHNtYWxsIHN1YnNldCBvZiBkaXJlY3RpdmVzIGFyZSBzdXBwb3J0ZWQuCiAgICAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2xvZ2lucmVjLmMgb3BlbmJzZC1jb21wYXQveG1tYXAuYyBvcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuYwogICBvcGVuYnNkLWNvbXBhdC9nbG9iLmMgb3BlbmJzZC1jb21wYXQvbWt0ZW1wLmMgb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uYwogICBvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5jIG9wZW5ic2QtY29tcGF0L3N0cnRvbnVtLmNdIEluY2x1ZGUgPGVycm5vLmg+LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3NldHByb2N0aXRsZS5jXSBJbmNsdWRlIHN0ZGFyZy5oLgogLSAoZHR1Y2tlcikgW3NzaC1rZXlzY2FuLmMgc3NoLXJhbmQtaGVscGVyLmNdIE1vcmUgZXJybm8uaCBoZXJlIHRvby4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSB2KnByaW50ZiBuZWVkcyBzdGRhcmcuaC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtYXNwcmludGYuYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jCiAgIG9wZW5ic2QtY29tcGF0L3JyZXN2cG9ydC5jXSBNb3JlIGVycm5vLmguCgoyMDA2MDcxMQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBzc2gta2V5Z2VuLmMgb3BlbmJzZC1jb21wYXQvYnNkLW9wZW5wdHkuYwogICBvcGVuYnNkLWNvbXBhdC9kYWVtb24uY10gQWRkIGluY2x1ZGVzIG5lZWRlZCBieSBvcGVuKDIpLiAgQ29uZGl0aW9uYWxseQogICBpbmNsdWRlIHBhdGhzLmguICBGaXhlcyBidWlsZCBlcnJvciBvbiBTb2xhcmlzLgogLSAoZHR1Y2tlcikgW2VudHJvcHkuY10gTW9yZSBmY250bC5oLCB0aGlzIHRpbWUgb24gQUlYIChhbmQgcHJvYmFibHkKICAgb3RoZXJzKS4KCjIwMDYwNzEwCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gTmV3IGF1dG9jb25mIHZlcnNpb246IDIuNjAuCiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDYvMTQgMTA6NTA6NDIKICAgICBbc3NoY29ubmVjdC5jXQogICAgIGxpbWl0IHRoZSBudW1iZXIgb2YgcHJlLWJhbm5lciBjaGFyYWN0ZXJzIHdlIHdpbGwgYWNjZXB0OyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA2LzI2IDEwOjM2OjE1CiAgICAgW2NsaWVudGxvb3AuY10KICAgICBtZW50aW9uIG9wdGlvbmFsIGJpbmRfYWRkcmVzcyBpbiBydW50aW1lIHBvcnQgZm9yd2FyZGluZyBzZXR1cAogICAgIGNvbW1hbmQtbGluZSBoZWxwLiBwYXRjaCBmcm9tIHNhbnRoaS5hbWlydGEgQVQgZ21haWwuY29tCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wMiAxNzoxMjo1OAogICAgIFtzc2guMSBzc2guYyBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBtb3JlIGRldGFpbHMgYW5kIGNsYXJpdHkgZm9yIHR1big0KSBkZXZpY2UgZm9yd2FyZGluZzsgb2sgYW5kIGhlbHAKICAgICBqbWNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wMiAxODozNjo0NwogICAgIFtnc3Mtc2Vydi1rcmI1LmMgZ3NzLXNlcnYuY10KICAgICBubyAic2VydmNvbmYuaCIgbmVlZGVkIGhlcmUKICAgICAoZ3NzLXNlcnYta3JiNS5jIGNoYW5nZSBub3QgYXBwbGllZCwgcG9ydGFibGUgbmVlZHMgdGhlIHNlcnZlciBvcHRpb25zKQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDIgMjI6NDU6NTkKICAgICBbZ3JvdXBhY2Nlc3MuYyBncm91cGFjY2Vzcy5oIGluY2x1ZGVzLmggc2Vzc2lvbi5jIHNmdHAtY29tbW9uLmMgc3NocHR5LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8Z3JwLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgICAgKHBvcnRhYmxlIG5lZWRlZCB1aWRzd2FwLmMgdG9vKQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDIgMjM6MDE6NTUKICAgICBbY2xpZW50bG9vcC5jIHNzaC4xXQogICAgIHVzZSAtS1JbYmluZF9hZGRyZXNzOl1wb3J0IGhlcmU7IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzAzIDA4OjU0OjIwCiAgICAgW2luY2x1ZGVzLmggc3NoLmMgc3NoY29ubmVjdC5jIHNzaGQuY10KICAgICBtb3ZlICNpbmNsdWRlICJ2ZXJzaW9uLmgiIG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wMyAxNzo1OTozMgogICAgIFtjaGFubmVscy5jIGluY2x1ZGVzLmhdCiAgICAgbW92ZSAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvbGQgb2sgZGptQAogICAgIChwb3J0YWJsZSBuZWVkZWQgc2Vzc2lvbi5jIHRvbykKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA1IDAyOjQyOjA5CiAgICAgW2Nhbm9ob3N0LmMgaG9zdGZpbGUuYyBpbmNsdWRlcy5oIG1pc2MuYyBwYWNrZXQuYyByZWFkY29uZi5jXQogICAgIFtzZXJ2ZXJsb29wLmMgc3NoY29ubmVjdC5jIHV1ZW5jb2RlLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgZGVyYWFkdEAKICAgICAoYWxzbyBzc2gtcmFuZC1oZWxwZXIuYyBsb2dpbnRlc3QuYyBsb2dpbnJlYy5jKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wNiAxMDo0NzowNQogICAgIFtzZXJ2Y29uZi5jIHNlcnZjb25mLmggc2Vzc2lvbi5jIHNzaGRfY29uZmlnLjVdCiAgICAgc3VwcG9ydCBhcmd1bWVudHMgdG8gU3Vic3lzdGVtIGNvbW1hbmRzOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA2IDEwOjQ3OjU3CiAgICAgW3NmdHAtc2VydmVyLjggc2Z0cC1zZXJ2ZXIuY10KICAgICBhZGQgY29tbWFuZGxpbmUgb3B0aW9ucyB0byBlbmFibGUgbG9nZ2luZyBvZiB0cmFuc2FjdGlvbnM7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA2IDE2OjAzOjUzCiAgICAgW2F1dGgtb3B0aW9ucy5jIGF1dGgtb3B0aW9ucy5oIGF1dGgtcGFzc3dkLmMgYXV0aC1yaC1yc2EuY10KICAgICBbYXV0aC1yaG9zdHMuYyBhdXRoLXJzYS5jIGF1dGguYyBhdXRoLmggYXV0aDItaG9zdGJhc2VkLmNdCiAgICAgW2F1dGgyLXB1YmtleS5jIGF1dGgyLmMgaW5jbHVkZXMuaCBtaXNjLmMgbWlzYy5oIG1vbml0b3IuY10KICAgICBbbW9uaXRvcl93cmFwLmMgbW9uaXRvcl93cmFwLmggc2NwLmMgc2VydmVybG9vcC5jIHNlc3Npb24uY10KICAgICBbc2Vzc2lvbi5oIHNmdHAtY29tbW9uLmMgc3NoLWFkZC5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2lnbi5jXQogICAgIFtzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdC5oIHNzaGQuYyBzc2hwdHkuYyBzc2hwdHkuaCB1aWRzd2FwLmNdCiAgICAgW3VpZHN3YXAuaF0KICAgICBtb3ZlICNpbmNsdWRlIDxwd2QuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA2IDE2OjIyOjM5CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBtb3ZlICNpbmNsdWRlICJkbnMuaCIgdXAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA2IDE3OjM2OjM3CiAgICAgW21vbml0b3Jfd3JhcC5oXQogICAgIHR5cG8gaW4gY29tbWVudAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDggMjE6NDc6MTIKICAgICBbYXV0aGZkLmMgY2Fub2hvc3QuYyBjbGllbnRsb29wLmMgZG5zLmMgZG5zLmggaW5jbHVkZXMuaF0KICAgICBbbW9uaXRvcl9mZHBhc3MuYyBuY2hhbi5jIHBhY2tldC5jIHNlcnZjb25mLmMgc2Z0cC5jIHNzaC1hZ2VudC5jXQogICAgIFtzc2gta2V5c2Nhbi5jIHNzaC5jIHNzaGNvbm5lY3QuaCBzc2hkLmMgc3NobG9naW4uaF0KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wOCAyMTo0ODo1MwogICAgIFttb25pdG9yLmMgc2Vzc2lvbi5jXQogICAgIG1pc3NlZCB0aGVzZSBmcm9tIGxhc3QgY29tbWl0OgogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA4IDIzOjMwOjA2CiAgICAgW2xvZy5jXQogICAgIG1vdmUgdXNlciBpbmNsdWRlcyBhZnRlciAvdXNyL2luY2x1ZGUgZmlsZXMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA5IDE1OjE1OjExCiAgICAgW2F1dGgyLW5vbmUuYyBhdXRoZmQuYyBhdXRoZmlsZS5jIGluY2x1ZGVzLmggbWlzYy5jIG1vbml0b3IuY10KICAgICBbcmVhZHBhc3MuYyBzY3AuYyBzZXJ2ZXJsb29wLmMgc2Z0cC1jbGllbnQuYyBzZnRwLXNlcnZlci5jXQogICAgIFtzc2gtYWRkLmMgc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jIHNzaC1rZXlzaWduLmMgc3NoLmMgc3NoZC5jXQogICAgIFtzc2hsb2dpbi5jIHNzaHB0eS5jXQogICAgIG1vdmUgI2luY2x1ZGUgPGZjbnRsLmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wOSAxNToyNzo1OQogICAgIFtzc2gtYWRkLmNdCiAgICAgdXNlIE9fUkRPTkxZIHZzLiAwIGluIG9wZW4oKTsgbm8gYmluYXJ5IGNoYW5nZQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMCAxMToyNDo1NAogICAgIFtzZnRwLXNlcnZlci5jXQogICAgIHJlbW92ZSBvcHRpbmQgLSBpdCBpc24ndCB1c2VkIGhlcmUKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTAgMTE6MjU6NTMKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICBkb24ndCBsb2cgdmFyaWFibGVzIHRoYXQgYXJlbid0IHlldCBzZXQKIC0gKGRqbSkgW2xvZ2lucmVjLmMgc3NoLXJhbmQtaGVscGVyLmMgc3NoZC5jIG9wZW5ic2QtY29tcGF0L2dsb2IuY10KICAgW29wZW5ic2QtY29tcGF0L21rdGVtcC5jIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdCiAgIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jIG9wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC94Y3J5cHQuY10gRml4IGluY2x1ZGVzLmggZmFsbG91dCwgbWFpbmx5IGZjbnRsLmgKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMCAxMjowMzoyMAogICAgIFtzY3AuY10KICAgICBkdXBsaWNhdGUgYXJndiBhdCB0aGUgc3RhcnQgb2YgbWFpbigpIGJlY2F1c2UgaXQgZ2V0cyBtb2RpZmllZCBsYXRlcjsKICAgICBwb2ludGVkIG91dCBieSBkZXJhYWR0QCBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEwIDEyOjA4OjA4CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgZml4IG1pc3BhcnNpbmcgb2YgU09DS1MgNSBwYWNrZXRzIHRoYXQgY291bGQgcmVzdWx0IGluIGEgY3Jhc2g7CiAgICAgcmVwb3J0ZWQgYnkgbWtAIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEwIDEyOjQ2OjUxCiAgICAgW21pc2MuYyBtaXNjLmggc3NoZC44IHNzaGNvbm5lY3QuY10KICAgICBBZGQgcG9ydCBpZGVudGlmaWVyIHRvIGtub3duX2hvc3RzIGZvciBub24tZGVmYXVsdCBwb3J0cywgYmFzZWQgb3JpZ2luYWxseQogICAgIG9uIGEgcGF0Y2ggZnJvbSBEZXZpbiBOYXRlIGluIGJ6IzkxMC4KICAgICBGb3IgYW55IGNvbm5lY3Rpb24gdXNpbmcgdGhlIGRlZmF1bHQgcG9ydCBvciB1c2luZyBhIEhvc3RLZXlBbGlhcyB0aGUKICAgICBmb3JtYXQgaXMgdW5jaGFuZ2VkLCBvdGhlcndpc2UgdGhlIGhvc3QgbmFtZSBvciBhZGRyZXNzIGlzIGVuY2xvc2VkCiAgICAgd2l0aGluIHNxdWFyZSBicmFja2V0cyBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgc3NoZCdzIExpc3RlbkFkZHJlc3MuCiAgICAgVGVzdGVkIGJ5IG1hbnksIG9rIG1hcmt1c0AuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0gTmVlZCB0byBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAgIGZvciBzdHJ1Y3Qgc29ja2FkZHIgb24gcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBmYWtlLXJmYyBzdHVmZi4KCjIwMDYwNzA2CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBUcnkgQUlYIGJsaWJwYXRoIHRlc3QgaW4gZGlmZmVyZW50IG9yZGVyIHdoZW4KICAgY29tcGlsaW5nIHdpdGggZ2NjLiAgZ2NjIDQuMS54IHdpbGwgYWNjZXB0IChidXQgaWdub3JlKSAtYiBmbGFncyBzbwogICBjb25maWd1cmUgd291bGQgbm90IHNlbGVjdCB0aGUgY29ycmVjdCBsaWJwYXRoIGxpbmtlciBmbGFncy4KIC0gKGR0dWNrZXIpIFtJTlNUQUxMXSBBIGJpdCBtb3JlIGluZm8gb24gYXV0b2NvbmYuCgoyMDA2MDcwNQogLSAoZHR1Y2tlcikgW3NzaC1yYW5kLWhlbHBlci5jXSBEb24ndCBleGl0IGlmIG1rZGlyIGZhaWxzIGJlY2F1c2UgdGhlCiAgIHRhcmdldCBhbHJlYWR5IGV4aXN0cy4KCjIwMDYwNjMwCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0gU05QUklOVEZfQ09OU1QgZm9yIHNucHJpbnRmCiAgIGRlY2xhcmF0aW9uIHRvby4gIFBhdGNoIGZyb20gcnVzcyBhdCBzbHVkZ2UubmV0LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIFVuZGVmIF9yZXMgYmVmb3JlIGRlZmluaW5nIGl0LAogICBwcmV2ZW50cyB3YXJuaW5ncyBvbiBwbGF0Zm9ybXMgd2hlcmUgX3JlcyBpcyBpbiB0aGUgc3lzdGVtIGhlYWRlcnMuCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gQnVnICMxMjAyOiBOb3RlIHdoZW4gYXV0b2NvbmYgaXMgcmVxdWlyZWQgYW5kIHdoaWNoCiAgIHZlcnNpb24uCgoyMDA2MDYyNwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMjAzOiBBZGQgbWlzc2luZyAnWycsIHdoaWNoIGNhdXNlcyBwcm9ibGVtcwogICB3aXRoIGF1dG9jb25mIDIuNjAuICBQYXRjaCBmcm9tIHZhcGllciBhdCBnZW50b28ub3JnLgoKMjAwNjA2MjUKIC0gKGR0dWNrZXIpIFtjaGFubmVscy5jIHNlcnZlcmxvb3AuY10gQXBwbHkgdGhlIGJ1ZyAjMTEwMiB3b3JrYXJvdW5kIHRvIHB0eXMKICAgb25seSwgb3RoZXJ3aXNlIHNzaGQgY2FuIGhhbmcgZXhpdGluZyBub24taW50ZXJhY3RpdmUgc2Vzc2lvbnMuCgoyMDA2MDYyNAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTkzOiBEZWZpbmUgUEFTU1dEX05FRURTX1VTRVJOQU1FIG9uIFNvbGFyaXMuCiAgIFdvcmtzIGFyb3VuZCBsaW1pdGF0aW9uIGluIFNvbGFyaXMnIHBhc3N3ZCBwcm9ncmFtIGZvciBjaGFuZ2luZyBwYXNzd29yZHMKICAgd2hlcmUgdGhlIHVzZXJuYW1lIGlzIGxvbmdlciB0aGFuIDggY2hhcmFjdGVycy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtzZXJ2ZXJsb29wLmNdIEdldCBpZmRlZi9pZm5kZWYgdGhlIHJpZ2h0IHdheSBhcm91bmQgZm9yIHRoZSBidWcKICAgIzExMDIgd29ya2Fyb3VuZC4KCjIwMDYwNjIzCiAtIChkdHVja2VyKSBbUkVBRE1FLnBsYXRmb3JtIGNvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jXSBBZGQKICAgdHVubmVsIHN1cHBvcnQgZm9yIE1hYyBPUyBYL0RhcndpbiB2aWEgYSB0aGlyZC1wYXJ0eSB0dW4gZHJpdmVyLiAgUGF0Y2gKICAgZnJvbSByZXlrQCwgdGVzdGVkIGJ5IGFuaWxACiAtIChkdHVja2VyKSBbY2hhbm5lbHMuYyBjb25maWd1cmUuYWMgc2VydmVybG9vcC5jXSBCdWcgIzExMDI6IEFyb3VuZCBBSVgKICAgNC4zLjMgTUwzIG9yIHNvLCB0aGUgQUlYIHB0eSBsYXllciBzdGFydGluZyBwYXNzaW5nIHplcm8tbGVuZ3RoIHdyaXRlcwogICBvbiB0aGUgcHR5IHNsYXZlIGFzIHplcm8tbGVuZ3RoIHJlYWRzIG9uIHRoZSBwdHkgbWFzdGVyLCB3aGljaCBzc2hkCiAgIGludGVycHJldHMgYXMgdGhlIGRlc2NyaXB0b3IgY2xvc2luZy4gIFNpbmNlIG1vc3QgdGhpbmdzIGRvbid0IGRvIHplcm8KICAgbGVuZ3RoIHdyaXRlcyB0aGlzIHJhcmVseSBtYXR0ZXJzLCBidXQgb2NjYXNpb25hbGx5IGl0IGhhcHBlbnMsIGFuZCB3aGVuCiAgIGl0IGRvZXMgdGhlIFNTSCBwdHkgc2Vzc2lvbiBhcHBlYXJzIHRvIGhhbmcsIHNvIHdlIGFkZCBhIHNwZWNpYWwgY2FzZSBmb3IKICAgdGhpcyBjb25kaXRpb24uICBvayBkam1ACgoyMDA2MDYxMwogLSAoZGptKSBbZ2V0cHV0LmhdIFRoaXMgZmlsZSBoYXMgYmVlbiByZXBsYWNlZCBieSBmdW5jdGlvbnMgaW4gbWlzYy5jCiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMDggMTA6NDk6NDgKICAgICBbc3NoY29ubmVjdDIuY10KICAgICB1aW50MzJfdCAtPiB1X2ludDMyX3QgKHdoaWNoIHdlIHVzZSBldmVyeXdoZXJlIGVsc2UpCiAgICAgKElkIHN5bmMgb25seSAtIHBvcnRhYmxlIGFscmVhZHkgaGFkIHRoaXMpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzE2IDA5OjAwOjAwCiAgICAgW2NsaWVudGxvb3AuY10KICAgICBtaXNzaW5nIGZyZWU7IGZyb20gS3lsZW5lIEhhbGwKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMTcgMTI6NDM6MzQKICAgICBbc2NwLmMgc2Z0cC5jIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uYyBzc2hjb25uZWN0LmNdCiAgICAgZml4IGxlYWs7IGNvdmVyaXR5IHZpYSBLeWxlbmUgSm8gSGFsbAogICAtIG1pb2RAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMTggMjE6Mjc6MjUKICAgICBba2V4ZGhjLmMga2V4Z2V4Yy5jXQogICAgIHBhcmFtdGVyIC0+IHBhcmFtZXRlcgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMjkgMTI6NTQ6MDgKICAgICBbc3NoX2NvbmZpZy41XQogICAgIEFkZCBnc3NhcGktd2l0aC1taWMgdG8gUHJlZmVycmVkQXV0aGVudGljYXRpb25zIGRlZmF1bHQgbGlzdDsgb2sgam1jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8yOSAxMjo1NjozMwogICAgIFtzc2hfY29uZmlnXQogICAgIEFkZCBHU1NBUElBdXRoZW50aWNhdGlvbiBhbmQgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyB0byBleGFtcGxlcyBpbgogICAgIHNhbXBsZSBzc2hfY29uZmlnLiAgb2sgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8yOSAxNjoxMDowMwogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgb29wcyAtIHByZXZpb3VzIHdhcyB0b28gbG9uZzsgc3BsaXQgdGhlIGxpc3Qgb2YgYXV0aHMgdXAKICAgLSBta0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8zMCAxMTo0NjozOAogICAgIFtzc2gtYWRkLmNdCiAgICAgU3luYyB1c2FnZSgpIHdpdGggbWFuIHBhZ2UgYW5kIHJlYWxpdHkuCiAgICAgb2sgZGVyYWFkdCBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzI5IDE2OjEzOjIzCiAgICAgW3NzaC4xXQogICAgIGFkZCBHU1NBUEkgdG8gdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyBzdXBwb3J0ZWQ7CiAgIC0gbWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMzAgMTE6NDY6MzgKICAgICBbc3NoLWFkZC5jXQogICAgIFN5bmMgdXNhZ2UoKSB3aXRoIG1hbiBwYWdlIGFuZCByZWFsaXR5LgogICAgIG9rIGRlcmFhZHQgZHR1Y2tlcgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNi8wMSAwOToyMTo0OAogICAgIFtzc2hkLmNdCiAgICAgY2FsbCBnZXRfcmVtb3RlX2lwYWRkcigpIGVhcmx5OyBmaXhlcyBsb2dnaW5nIGFmdGVyIGNsaWVudCBkaXNjb25uZWN0czsKICAgICByZXBvcnQgbXBmQDsgb2sgZHR1Y2tlckAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDYvMDYgMTA6MjA6MjAKICAgICBbcmVhZHBhc3MuYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdC5oIHNzaGNvbm5lY3QyLmMgdWlkc3dhcC5jXQogICAgIHJlcGxhY2UgcmVtYWluaW5nIHNldHVpZCgpIGNhbGxzIHdpdGggcGVybWFuZW50bHlfc2V0X3VpZCgpIGFuZAogICAgIGNoZWNrIHNldGV1aWQoKSByZXR1cm4gdmFsdWVzOyByZXBvcnQgTWFyY3VzIE1laXNzbmVyOyBvayBkdHVja2VyIGRqbQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNi8wOCAxNDo0NTo0OQogICAgIFtyZWFkcGFzcy5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0Mi5jIHVpZHN3YXAuYyB1aWRzd2FwLmhdCiAgICAgZG8gbm90IHNldCB0aGUgZ2lkLCBub3RlZCBieSBzb2xhcjsgb2sgZGptCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA2LzEzIDAxOjE4OjM2CiAgICAgW3NzaC1hZ2VudC5jXQogICAgIGFsd2F5cyB1c2UgYSBmb3JtYXQgc3RyaW5nLCBldmVuIHdoZW4gcHJpbnRpbmcgYSBjb25zdGFudAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNi8xMyAwMjoxNzowNwogICAgIFtzc2gtYWdlbnQuY10KICAgICByZXZlcnQ7IGkgYW0gb24gZHJ1Z3MuIHNwb3R0ZWQgYnkgYWxleGFuZGVyIEFUIGJlYXJkLnNlCgoyMDA2MDUyMQogLSAoZHR1Y2tlcikgW2F1dGguYyBtb25pdG9yLmNdIE5vdyB0aGF0IHdlIGRvbid0IGxvZyBmcm9tIGJvdGggdGhlIG1vbml0b3IKICAgYW5kIHNsYXZlLCB3ZSBjYW4gcmVtb3ZlIHRoZSBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgaW4gdGhlIGF1ZGl0IGhvb2sgaW4KICAgYXV0aF9sb2cuCgoyMDA2MDUxNwogLSAoZHR1Y2tlcikgW3NzaC1yYW5kLWhlbHBlci5jXSBDaGVjayByZXR1cm4gY29kZSBvZiBta2RpciBhbmQgZml4IGZpbGUKICAgcG9pbnRlciBsZWFrLiAgRnJvbSBramhhbGwgYXQgdXMuaWJtLmNvbSwgZm91bmQgYnkgY292ZXJpdHkuCgoyMDA2MDUxNQogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIFVzZSBfY29tcGF0X3JlcyBpbnN0ZWFkIG9mCiAgIF9yZXMsIHByZXZlbnRzIHByb2JsZW1zIG9uIHNvbWUgcGxhdGZvcm1zIHRoYXQgaGF2ZSBfcmVzIGFzIGEgZ2xvYmFsIGJ1dAogICBkb24ndCBoYXZlIGdldHJyc2V0YnluYW1lKCksIGVnIElSSVggNS4zLiAgRm91bmQgYW5kIHRlc3RlZCBieQogICBnZW9yZy5zY2h3YXJ6IGF0IGZyZWVuZXQuZGUsIG9rIGRqbUAuCiAtIChkdHVja2VyKSBbZGVmaW5lcy5oXSBGaW5kIGEgdmFsdWUgZm9yIElPVl9NQVggb3IgdXNlIGEgY29uc2VydmF0aXZlCiAgIGRlZmF1bHQuICBQYXRjaCBvcmlnaW5hbGx5IGZyb20gdGltQCwgb2sgZGptCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gQnVnICMxMTg4OiBwYXNzIHJlc3VsdCBvZiBkb19wYW1fYWNjb3VudCBiYWNrIGFuZAogICBkbyBub3QgYWxsb3cga2JkaW50IGFnYWluIGFmdGVyIHRoZSBQQU0gYWNjb3VudCBjaGVjayBmYWlscy4gIG9rIGRqbUAKCjIwMDYwNTA2CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8yNSAwODowMjoyNwogICAgIFthdXRoZmlsZS5jIGF1dGhmaWxlLmggc3NoY29ubmVjdDIuYyBzc2guYyBzc2hjb25uZWN0MS5jXQogICAgIFByZXZlbnQgc3NoIGZyb20gdHJ5aW5nIHRvIG9wZW4gcHJpdmF0ZSBrZXlzIHdpdGggYmFkIHBlcm1pc3Npb25zIG1vcmUgdGhhbgogICAgIG9uY2Ugb3IgcHJvbXB0aW5nIGZvciB0aGVpciBwYXNzcGhyYXNlcyAod2hpY2ggaXQgc3Vic2VxdWVudGx5IGlnbm9yZXMKICAgICBhbnl3YXkpLCBzaW1pbGFyIHRvIGEgcHJldmlvdXMgY2hhbmdlIGluIHNzaC1hZGQuICBieiAjMTE4Niwgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8wNCAxNDo1NToyMwogICAgIFtkaC5jXQogICAgIHRpZ2h0ZXIgREggZXhwb25lbnQgY2hlY2tzIGhlcmUgdG9vOyBmZWVkYmFjayBhbmQgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8wMSAwNTozNzo0NgogICAgIFtPVkVSVklFV10KICAgICAkT3BlbkJTRCQgaW4gaGVyZSB0b28KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzA2IDA4OjM1OjQwCiAgICAgW2F1dGgta3JiNS5jXQogICAgIEFkZCAkT3BlbkJTRCQgaW4gY29tbWVudCBoZXJlIHRvbwoKMjAwNjA1MDQKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jIGdyb3VwYWNjZXNzLmMgbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jIHNjYXJkLW9wZW5zYy5jCiAgIHNlc3Npb24uYyBzc2gtcmFuZC1oZWxwZXIuYyBzc2hkLmMgb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmMKICAgb3BlbmJzZC1jb21wYXQvc2V0cHJvY3RpdGxlLmNdIENvbnZlcnQgbWFsbG9jKGZvbypiYXIpIC0+IGNhbGxvYyhmb28sYmFyKQogICBpbiBQb3J0YWJsZS1vbmx5IGNvZGU7IHNpbmNlIGNhbGxvYyB6ZXJvcywgcmVtb3ZlIG5vdy1yZWR1bmRhbnQgbWVtc2V0cy4KICAgQWxzbyBhZGQgYSBjb3VwbGUgb2Ygc2FuaXR5IGNoZWNrcy4gIFdpdGggJiBvayBkam1ACgoyMDA2MDUwMwogLSAoZHR1Y2tlcikgW3BhY2tldC5jXSBSZW1vdmUgaW5fc3lzdG0uaCBzaW5jZSBpdCdzIGFsc28gaW4gaW5jbHVkZXMuaAogICBhbmQgZG91YmxlIGluY2x1ZGluZyBpdCBvbiBJUklYIDUuMyBjYXVzZXMgcHJvYmxlbXMuICBGcm9tIEdlb3JnIFNjaHdhcnosCiAgICJubyBvYmplY3Rpb25zIiB0aW1ACgoyMDA2MDQyMwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8wMSAwNTo0MjoyMAogICAgIFtzY3AuY10KICAgICBtaW5pbWFsIGxpbnQgY2xlYW51cCAodW51c2VkIGNydWQsIGFuZCBzb21lIHNpemVfdCk7IG9rIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8wMSAwNTo1MDoyOQogICAgIFtzY3AuY10KICAgICB4YXNwcmludGlmaWNhdGlvbjsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMDEgMDU6NTE6MzQKICAgICBbYXRvbWljaW8uY10KICAgICBBTlNJZnk7IHJlcXVlc3RlZCBkZXJhYWR0QAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMDIgMDg6MzQ6NTIKICAgICBbc3NoLWtleXNpZ24uY10KICAgICBzZXNzaW9uaWQgY2FuIGJlIDMyIGJ5dGVzIG5vdyB0b28gd2hlbiBzaGEyNTYga2V4IGlzIHVzZWQ7IG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMDMgMDc6MTA6MzgKICAgICBbZ3NzLWdlbnIuY10KICAgICBHU1NBUEkgYnVmZmVycyBzaG91bGRuJ3QgYmUgbnVsLXRlcm1pbmF0ZWQsIHNwb3R0ZWQgaW4gYnVnemlsbGEgIzEwNjYKICAgICBieSBkbGVvbmFyZCBBVCB2aW50ZWxhLmNvbS4gdXNlIHhhc3ByaW50ZigpIHRvIHNpbXBsaWZ5IGNvZGUgd2hpbGUgaW4KICAgICB0aGVyZTsgImxvb2tzIHJpZ2h0IiBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8xNiAwMDo0ODo1MgogICAgIFtidWZmZXIuYyBidWZmZXIuaCBjaGFubmVscy5jXQogICAgIEZpeCBjb25kaXRpb24gd2hlcmUgd2UgY291bGQgZXhpdCB3aXRoIGEgZmF0YWwgZXJyb3Igd2hlbiBhbiBpbnB1dAogICAgIGJ1ZmZlciBiZWNhbWUgdG9vIGxhcmdlIGFuZCB0aGUgcmVtb3RlIGVuZCBoYWQgYWR2ZXJ0aXNlZCBhIGJpZyB3aW5kb3cuCiAgICAgVGhlIHByb2JsZW0gd2FzIGEgbWlzbWF0Y2ggaW4gdGhlIGJhY2tvZmYgbWF0aCBiZXR3ZWVuIHRoZSBjaGFubmVscyBjb2RlCiAgICAgYW5kIHRoZSBidWZmZXIgY29kZSwgc28gbWFrZSBhIGJ1ZmZlcl9jaGVja19hbGxvYygpIGZ1bmN0aW9uIHRoYXQgdGhlCiAgICAgY2hhbm5lbHMgY29kZSBjYW4gdXNlIHRvIHByb3BzZWN0aXZseSBjaGVjayB3aGV0aGVyIGFuIGluY3JlbWVudGFsCiAgICAgYWxsb2NhdGlvbiB3aWxsIHN1Y2NlZWQuICBieiAjMTEzMSwgZGVidWdnZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZgogICAgIGNvdmUgQVQgd2lsZHBhY2tldHMuY29tOyBvayBkdHVja2VyQCBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8xNiAwMDo1Mjo1NQogICAgIFthdG9taWNpby5jIGF0b21pY2lvLmhdCiAgICAgaW50cm9kdWNlIGF0b21pY2lvdigpIGZ1bmN0aW9uIHRoYXQgd3JhcHMgcmVhZHYvd3JpdGV2IHRvIHJldHJ5CiAgICAgaW50ZXJydXB0ZWQgdHJhbnNmZXJzIGxpa2UgYXRvbWljaW8oKSBkb2VzIGZvciByZWFkL3dyaXRlOwogICAgIGZlZWRiYWNrIGRlcmFhZHRAIGR0dWNrZXJAIHN0ZXZlc2tAIG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzE2IDAwOjU0OjEwCiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgYXZvaWQgbWFraW5nIGEgdGlueSA0LWJ5dGUgd3JpdGUgdG8gc2VuZCB0aGUgcGFja2V0IGxlbmd0aCBvZiBzZnRwCiAgICAgY29tbWFuZHMsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbiBhIHNlcGFyYXRlIHRpbnkgcGFja2V0IG9uIHRoZSB3aXJlIGJ5CiAgICAgdXNpbmcgYXRvbWljaW92KHdyaXRldiwgLi4uKSB0byB3cml0ZSB0aGUgbGVuZ3RoIGFuZCB0aGUgY29tbWFuZCBpbiBvbmUKICAgICBwYXNzOyBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8xNiAwNzo1OTowMAogICAgIFthdG9taWNpby5jXQogICAgIHJlb3JkZXIgc2FuaXR5IHRlc3Qgc28gdGhhdCBpdCBjYW5ub3QgZGVyZWZlcmVuY2UgcGFzdCB0aGUgZW5kIG9mIHRoZQogICAgIGlvdiBhcnJheTsgd2VsbCBzcG90dGVkIGNhbmFjYXJAIQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMTggMTA6NDQ6MjgKICAgICBbYnVmYXV4LmMgYnVmYm4uYyBNYWtlZmlsZS5pbl0KICAgICBNb3ZlIEJ1ZmZlciBiaWdudW0gZnVuY3Rpb25zIGludG8gdGhlaXIgb3duIGZpbGUsIGJ1ZmJuLmMuIFRoaXMgbWVhbnMKICAgICB0aGF0IHNmdHAgYW5kIHNmdHAtc2VydmVyICh3aGljaCB1c2UgdGhlIEJ1ZmZlciBmdW5jdGlvbnMgaW4gYnVmYXV4LmMgCiAgICAgYnV0IG5vdCB0aGUgYmlnbnVtIG9uZXMpIG5vIGxvbmdlciBuZWVkIHRvIGJlIGxpbmtlZCB3aXRoIGxpYmNyeXB0by4KICAgICBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzIwIDA5OjI3OjA5CiAgICAgW2F1dGguaCBjbGllbnRsb29wLmMgZGlzcGF0Y2guYyBkaXNwYXRjaC5oIGtleC5oXQogICAgIHJlcGxhY2UgdGhlIGxhc3Qgbm9uLXNpZ19hdG9taWNfdCBmbGFnIHVzZWQgaW4gYSBzaWduYWwgaGFuZGxlciB3aXRoIGEKICAgICBzaWdfYXRvbWljX3QsIHVuZm9ydHVuYXRlbHkgd2l0aCBzb21lIGtub2NrLW9uIGVmZmVjdHMgaW4gb3RoZXIgKG5vbi0KICAgICBzaWduYWwpIGNvbnRleHRzIGluIHdoaWNoIGl0IGlzIHVzZWQ7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMjAgMDk6NDc6NTkKICAgICBbc3NoY29ubmVjdC5jXQogICAgIHNpbXBsaWZ5OyBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzIwIDIxOjUzOjQ0CiAgICAgW2luY2x1ZGVzLmggc2Vzc2lvbi5jIHNmdHAuY10KICAgICBTd2l0Y2ggZnJvbSB1c2luZyBwaXBlcyB0byBzb2NrZXRwYWlycyBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCiAgICAgc2Z0cC9zY3AgYW5kIHNzaCwgYW5kIGJldHdlZW4gc3NoZCBhbmQgaXRzIHN1YnByb2Nlc3Nlcy4gVGhpcyBzYXZlcwogICAgIGEgZmlsZSBkZXNjcmlwdG9yIHBlciBzZXNzaW9uIGFuZCBhcHBhcmVudGx5IG1ha2VzIHVzZXJsYW5kIHBwcCBvdmVyCiAgICAgc3NoIHdvcms7IG9rIG1hcmt1c0AgZGVyYWFkdEAgKElEIFN5bmMgb25seSAtIHBvcnRhYmxlIG1ha2VzIHRoaXMKICAgICBkZWNpc2lvbiBvbiBhIHBlci1wbGF0Zm9ybSBiYXNpcykKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMjIgMDQ6MDY6NTEKICAgICBbdWlkc3dhcC5jXQogICAgIHVzZSBzZXRyZXNbdWddaWQoKSB0byBwZXJtYW5lbnRseSByZXZva2UgcHJpdmlsZWdlczsgb2sgZGVyYWFkdEAKICAgICAoSUQgU3luYyBvbmx5IC0gcG9ydGFibGUgYWxyZWFkeSB1c2VzIHNldHJlc1t1Z11pZCgpIHdoZW5ldmVyIHBvc3NpYmxlKQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMjIgMTg6Mjk6MzMKICAgICBbY3JjMzIuY10KICAgICByZW1vdmUgZXh0cmEgc3BhY2VzCiAtIChkam0pIFthdXRoLmggZGlzcGF0Y2guaCBrZXguaF0gc3ByaW5rbGUgaW4gc2lnbmFsLmggdG8gZ2V0CiAgIHNpZ19hdG9taWNfdAoKMjAwNjA0MjEKIC0gKGRqbSkgW01ha2VmaWxlLmluIGNvbmZpZ3VyZS5hYyBzZXNzaW9uLmMgc3NocHR5LmNdCiAgIFtjb250cmliL3JlZGhhdC9zc2hkLmluaXQgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW5dCiAgIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguY10KICAgW29wZW5ic2QtY29tcGF0L3BvcnQtbGludXguaF0gQWRkIHN1cHBvcnQgZm9yIFNFTGludXgsIHNldHRpbmcgCiAgIHRoZSBleGVjdXRpb24gYW5kIFRUWSBjb250ZXh0cy4gYmFzZWQgb24gcGF0Y2ggZnJvbSBEYW5pZWwgV2Fsc2gsCiAgIGJ6ICM4ODA7IG9rIGR0dWNrZXJACgoyMDA2MDQxOAogLSAoZGptKSBbY2Fub2hvc3QuY10gUmVvcmRlciBJUCBvcHRpb25zIGNoZWNrIHNvIHRoYXQgaXQgaXNuJ3QgYnJva2VuCiAgIGJ5IG1hcHBlZCBhZGRyZXNzZXM7IGJ6ICMxMTc5IHJlcG9ydGVkIGJ5IG1hcmt3IHd0ZWNoLWxsYy5jb207CiAgIG9rIGR0dWNrZXJACgoyMDA2MDMzMQogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNyAwMToyMToxOAogICAgIFt4bWFsbG9jLmNdCiAgICAgd2UgY2FuIGRvIHRoZSBzaXplICYgbm1lbWIgY2hlY2sgYmVmb3JlIHRoZSBpbnRlZ2VyIG92ZXJmbG93IGNoZWNrOyAKICAgICBldm9sCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNyAxMzowMzo1NAogICAgIFtkaC5jXQogICAgIHVzZSBzdHJ0b251bSgpIGluc3RlYWQgb2YgYXRvaSgpLCBsaW1pdCBkaGcgc2l6ZSB0byA2NGs7IG9rIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNyAyMzoxNTo0NgogICAgIFtzZnRwLmNdCiAgICAgYWx3YXlzIHVzZSBhIGZvcm1hdCBzdHJpbmcgZm9yIGFkZGFyZ3M7IHNwb3R0ZWQgYnkgbW91cmluZ0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI4IDAwOjEyOjMxCiAgICAgW1JFQURNRS50dW4gc3NoLmNdCiAgICAgc3BhY2luZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjggMDE6NTI6MjgKICAgICBbY2hhbm5lbHMuY10KICAgICBkbyBub3QgYWNjZXB0IHVucmVhc29uYWJsZSBYIHBvcnRzIG51bWJlcnM7IG9rIGRqbQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjggMDE6NTM6NDMKICAgICBbc3NoLWFnZW50LmNdCiAgICAgdXNlIHN0cnRvbnVtKCkgdG8gcGFyc2UgdGhlIHBpZCBmcm9tIHRoZSBmaWxlLCBhbmQgcmFuZ2UgY2hlY2sgaXQKICAgICBiZXR0ZXI7IG9rIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMCAwOTo0MToyNQogICAgIFtjaGFubmVscy5jXQogICAgIEFSR1NVU0VEIGZvciBkaXNwYXRjaCB0YWJsZS1kcml2ZW4gZnVuY3Rpb25zCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMwIDA5OjU4OjE2CiAgICAgW2F1dGhmZC5jIGJ1ZmF1eC5jIGRlYXR0YWNrLmMgZ3NzLXNlcnYuYyBtYWMuYyBtaXNjLmMgbWlzYy5oXQogICAgIFttb25pdG9yX3dyYXAuYyBtc2cuYyBwYWNrZXQuYyBzZnRwLWNsaWVudC5jIHNmdHAtc2VydmVyLmMgc3NoLWFnZW50LmNdCiAgICAgcmVwbGFjZSB7R0VULFBVVH1fWFhCSVQgbWFjcm9zIHdpdGggZnVuY3Rpb25hbGx5IHNpbWlsYXIgZnVuY3Rpb25zLAogICAgIHNpbGVuY2luZyBhIGhlYXAgb2YgbGludCB3YXJuaW5ncy4gYWxzbyBhbGxvd3MgdGhlbSB0byB1c2UKICAgICBfX2JvdW5kZWRfXyBjaGVja2luZyB3aGljaCBjYW4ndCBiZSBhcHBsaWVkIHRvIG1hY3JvczsgcmVxdWVzdGVkCiAgICAgYnkgYW5kIGZlZWRiYWNrIGZyb20gZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMzAgMTA6NDE6MjUKICAgICBbc3NoLmMgc3NoX2NvbmZpZy41XQogICAgIGFkZCBwZXJjZW50IGVzY2FwZSBjaGFycyB0byB0aGUgSWRlbnRpdHlGaWxlIG9wdGlvbiwgYnogIzExNTkgYmFzZWQKICAgICBvbiBhIHBhdGNoIGJ5IGltYWdpbmcgQVQgbWF0aC51YWxiZXJ0YS5jYTsgZmVlZGJhY2sgYW5kIG9rIGR0dWNrZXJACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMCAxMTowNToxNwogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgQ29ycmVjdGx5IGhhbmRsZSB0cnVuY2F0ZWQgZmlsZXMgd2hpbGUgY29udmVydGluZyBrZXlzOyBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMCAxMTo0MDoyMQogICAgIFthdXRoLmMgbW9uaXRvci5jXQogICAgIFByZXZlbnQgZHVwbGljYXRlIGxvZyBtZXNzYWdlcyB3aGVuIHByaXZzZXA9eWVzOyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMxIDA5OjA5OjMwCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBraWxsIHRyYWlsaW5nIHdoaXRlc3BhY2U7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMxIDA5OjEzOjU2CiAgICAgW3NzaF9jb25maWcuNV0KICAgICByZW1vdGUgdXNlciBlc2NhcGUgaXMgJXIgbm90ICVoOyBzcG90dGVkIGJ5IGptY0AKCjIwMDYwMzI2CiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xNSAwODo0Njo0NAogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgaWYgbm8ga2V5IGZpbGUgYXJlIGdpdmVuIHdoZW4gcHJpbnRpbmcgdGhlIEROUyBob3N0IHJlY29yZCwgdXNlIHRoZQogICAgIGhvc3Qga2V5IGZpbGUocykgYXMgZGVmYXVsdC4gb2sgZGptQAogICAtIGJpb3JuQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE2IDEwOjMxOjQ1CiAgICAgW3NjcC5jXQogICAgIFRyeSB0byBkaXNwbGF5IGVycm9ybWVzc2FnZSBldmVuIGlmIHJlbW91dCA9PSAtMQogICAgIG9rIGRqbUAsIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTcgMjI6MzE6NTAKICAgICBbYXV0aGZkLmNdCiAgICAgYW5vdGhlciB1bnJlYWNoYWJsZSBmb3VuZCBieSBsaW50CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE3IDIyOjMxOjExCiAgICAgW2F1dGhmZC5jXQogICAgIHVucmVhY2hhbmJsZSBzdGF0ZW1lbnQsIGZvdW5kIGJ5IGxpbnQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMDI6MjI6MzIKICAgICBbc2VydmVybG9vcC5jXQogICAgIG1lbW9yeSBsZWFrcyBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIG9rIGRlcmFhZHRAIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDAyOjIyOjU2CiAgICAgW3NmdHAuY10KICAgICBtb3JlIG1lbW9yeSBsZWFrcyBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIGRlcmFhZHRAIG9rCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDAyOjIzOjI2CiAgICAgW2hvc3RmaWxlLmNdCiAgICAgRklMRSogbGVhayBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDAyOjI0OjA1CiAgICAgW2RoLmMgcmVhZGNvbmYuYyBzZXJ2Y29uZi5jXQogICAgIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGRldGVjdGVkIGJ5IENvdmVyaXR5CiAgICAgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMDc6NDE6MzAKICAgICBbc3NoY29ubmVjdDIuY10KICAgICBtZW1vcnkgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICBkZXJhYWR0QCBvawogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTE6NTE6NTIKICAgICBbc2VydmNvbmYuY10KICAgICBDb3JyZWN0IHN0cmRlbGltIG51bGwgdGVzdDsgb2sgZGptQAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTI6MTEKICAgICBbYXV0aDEuYyBhdXRoZmQuYyBjaGFubmVscy5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjUzOjEyCiAgICAgW2tleC5jIGtleC5oIG1vbml0b3IuYyBteXByb3Bvc2FsLmggc2Vzc2lvbi5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjU2OjQxCiAgICAgW2NsaWVudGxvb3AuYyBwcm9ncmVzc21ldGVyLmMgc2VydmVybG9vcC5jIHNzaGQuY10KICAgICBBUkdTVVNFRCBmb3Igc2lnbmFsIGhhbmRsZXJzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1OTo0OQogICAgIFtzc2gta2V5c2Nhbi5jXQogICAgIHBsZWFzZSBsaW50CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1OTozMAogICAgIFtzc2guY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1OTowOQogICAgIFthdXRoZmlsZS5jXQogICAgIHdob2V2ZXIgdGhvdWdodCB0aGF0IGJyZWFrIGFmdGVyIHJldHVybiB3YXMgYSBnb29kIGlkZWEgbmVlZHMgdG8KICAgICBnZXQgdGhlaXIgaGVhZCBleGFtaW1lZAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAwNDowOTo0NAogICAgIFttb25pdG9yLmNdCiAgICAgbWVtb3J5IGxlYWtzIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7CiAgICAgZGVyYWFkdEAgb2sKICAgICB0aGF0IHNob3VsZCBiZSBhbGwgb2YgdGhlbSBub3cKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTE6Mzg6NDYKICAgICBba2V5LmNdCiAgICAgKHJlYWxseSkgbGFzdCBvZiB0aGUgQ292ZXJpdHkgZGlmZnM6IGF2b2lkIHBvc3NpYmxlIE5VTEwgZGVyZWYgaW4KICAgICBrZXlfZnJlZS4gdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsgbWFya3VzQCBvawogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTc6MTA6MTkKICAgICBbYXV0aC5jIGtleS5jIG1pc2MuYyBwYWNrZXQuYyBzc2gtYWRkLmNdCiAgICAgaW4gYSBzd2l0Y2ggKCksIGJyZWFrIGFmdGVyIHJldHVybiBvciBnb3RvIGlzIHN0dXBpZAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTc6MTM6MTYKICAgICBba2V5LmNdCiAgICAgZGptIGRpZCBhIHR5cG8KICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE3OjE3OjIzCiAgICAgW3NzaC1yc2EuY10KICAgICBpbiBhIHN3aXRjaCAoKSwgYnJlYWsgYWZ0ZXIgcmV0dXJuIG9yIGdvdG8gaXMgc3R1cGlkCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODoxNDowMgogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBtb25pdG9yX3dyYXAuYyBtb25pdG9yX3dyYXAuaCBzZXJ2ZXJsb29wLmNdCiAgICAgW3NzaC5jIHNzaHB0eS5jIHNzaHB0eS5oXQogICAgIHNwcmlua2xlIHVfaW50IHRocm91Z2hvdXQgcHR5IHN1YnN5c3RlbSwgb2sgbWFya3VzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODoxNzoyMAogICAgIFthdXRoMS5jIGF1dGgyLmMgc3NoZC5jXQogICAgIHNwcmlua2xlIHNvbWUgQVJHU1VTRUQgZm9yIHRhYmxlIGRyaXZlbiBmdW5jdGlvbnMgKHdoaWNoIHNvbWV0aW1lcyAKICAgICBtdXN0IGlnbm9yZSB0aGVpciBhcmdzKQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6MjY6NTUKICAgICBbY2hhbm5lbHMuYyBtb25pdG9yLmMgc2Vzc2lvbi5jIHNlc3Npb24uaCBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmNdCiAgICAgW3NzaC1yc2EuYyBzc2guYyBzc2hsb2dpbi5jXQogICAgIGFubm95aW5nIHNwYWNpbmcgZml4ZXMgZ2V0dGluZyBpbiB0aGUgd2F5IG9mIHJlYWwgZGlmZnMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjI3OjUwCiAgICAgW21vbml0b3IuY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODozNToxMgogICAgIFtjaGFubmVscy5jXQogICAgIHgxMV9mYWtlX2RhdGEgaXMgb25seSBldmVyIHVzZWQgYXMgdV9jaGFyICoKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjQxOjQzCiAgICAgW2Rucy5jXQogICAgIGNhc3QgeHN0cmR1cCB0byBwcm9wZXJ0IHVfY2hhciAqCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODo0MjoyNwogICAgIFtjYW5vaG9zdC5jIG1hdGNoLmMgc3NoLmMgc3NoY29ubmVjdC5jXQogICAgIGJlIHN0cmljdCB3aXRoIHRvbG93ZXIoKSBjYXN0aW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODo0ODozNAogICAgIFtjaGFubmVscy5jIGZhdGFsLmMga2V4LmMgcGFja2V0LmMgc2VydmVybG9vcC5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDIxOjExOjUzCiAgICAgW3R0eW1vZGVzLmNdCiAgICAgc3BhY2luZwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAwMDowNTo0MQogICAgIFthdXRoLWJzZGF1dGguYyBhdXRoLXNrZXkuYyBhdXRoLmMgYXV0aDItY2hhbGwuYyBjaGFubmVscy5jXQogICAgIFtjbGllbnRsb29wLmMgZGVhdHRhY2suYyBnc3MtZ2Vuci5jIGtleC5jIGtleS5jIG1pc2MuYyBtb2R1bGkuY10KICAgICBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jIHBhY2tldC5jIHNjYXJkLmMgc2Z0cC1zZXJ2ZXIuYyBzc2gtYWdlbnQuY10KICAgICBbc3NoLWtleXNjYW4uYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDIuYyBzc2hkLmMgdXVlbmNvZGUuY10KICAgICBbeG1hbGxvYy5jIHhtYWxsb2MuaF0KICAgICBpbnRyb2R1Y2UgeGNhbGxvYygpIGFuZCB4YXNwcmludGYoKSBmYWlsdXJlLWNoZWNrZWQgYWxsb2NhdGlvbnMgCiAgICAgZnVuY3Rpb25zIGFuZCB1c2UgdGhlbSB0aHJvdWdob3V0IG9wZW5zc2gKCiAgICAgeGNhbGxvYyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGJlY2F1c2UgbWFsbG9jKG5tZW1iICogc2l6ZSkgaXMgYQogICAgIGRhbmdlcm91cyBpZGlvbSAoc3ViamVjdCB0byBpbnRlZ2VyIG92ZXJmbG93KSBhbmQgaXQgaXMgdGltZSBmb3IgaXQgCiAgICAgdG8gZGllCgogICAgIGZlZWRiYWNrIGFuZCBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAwMToxMzoyMwogICAgIFtidWZmZXIuYyBjaGFubmVscy5jIGRlYXR0YWNrLmMgbWlzYy5jIHNjcC5jIHNlc3Npb24uYyBzZnRwLWNsaWVudC5jXQogICAgIFtzZnRwLXNlcnZlci5jIHNzaC1hZ2VudC5jIHNzaC1yc2EuYyB4bWFsbG9jLmMgeG1hbGxvYy5oIGF1dGgtcGFtLmNdCiAgICAgW3VpZHN3YXAuY10KICAgICBjaGFuZ2UgT3BlblNTSCdzIHhyZWFsbG9jKCkgZnVuY3Rpb24gZnJvbSBiZWluZyB4cmVhbGxvYyhwLCBuZXdfc2l6ZSkKICAgICB0byB4cmVhbGxvYyhwLCBuZXdfbm1lbWIsIG5ld19pdGVtc2l6ZSkuCgogICAgIHJlYWxsb2MgaXMgcGFydGljdWxhcmx5IHByb25lIHRvIGludGVnZXIgb3ZlcmZsb3dzIGJlY2F1c2UgaXQgaXMKICAgICBhbG1vc3QgYWx3YXlzIGFsbG9jYXRpbmcgIm4gKiBzaXplIiBieXRlcywgc28gdGhpcyBpcyBhIGZhciBzYWZlciAKICAgICBBUEk7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDAxOjMwOjIzCiAgICAgW3NmdHAuY10KICAgICAiYWJvcm1hbGx5IiBpcyBhIHBlcmZlY3RseSBjcm9tdWxlbnQgd29yZCwgYnV0ICJhYm5vcm1hbGx5IiBpcyBiZXR0ZXIKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTM6MTc6MDMKICAgICBbYXRvbWljaW8uYyBhdXRoLWJzZGF1dGguYyBhdXRoLWNoYWxsLmMgYXV0aC1vcHRpb25zLmMgYXV0aC1wYXNzd2QuY10KICAgICBbYXV0aC1yaC1yc2EuYyBhdXRoLXJob3N0cy5jIGF1dGgtcnNhLmMgYXV0aC1za2V5LmMgYXV0aC5jIGF1dGgxLmNdCiAgICAgW2F1dGgyLWNoYWxsLmMgYXV0aDItaG9zdGJhc2VkLmMgYXV0aDIta2JkaW50LmMgYXV0aDItbm9uZS5jXQogICAgIFthdXRoMi1wYXNzd2QuYyBhdXRoMi1wdWJrZXkuYyBhdXRoMi5jIGF1dGhmZC5jIGF1dGhmaWxlLmMgYnVmYXV4LmNdCiAgICAgW2J1ZmZlci5jIGNhbm9ob3N0LmMgY2hhbm5lbHMuYyBjaXBoZXItM2RlczEuYyBjaXBoZXItYmYxLmNdCiAgICAgW2NpcGhlci1jdHIuYyBjaXBoZXIuYyBjbGVhbnVwLmMgY2xpZW50bG9vcC5jIGNvbXBhdC5jIGNvbXByZXNzLmNdCiAgICAgW2RlYXR0YWNrLmMgZGguYyBkaXNwYXRjaC5jIGZhdGFsLmMgZ3JvdXBhY2Nlc3MuYyBob3N0ZmlsZS5jIGtleC5jXQogICAgIFtrZXhkaC5jIGtleGRoYy5jIGtleGRocy5jIGtleGdleC5jIGtleGdleGMuYyBrZXhnZXhzLmMga2V5LmMgbG9nLmNdCiAgICAgW21hYy5jIG1hdGNoLmMgbWQtc2hhMjU2LmMgbWlzYy5jIG1vbml0b3IuYyBtb25pdG9yX2ZkcGFzcy5jXQogICAgIFttb25pdG9yX21tLmMgbW9uaXRvcl93cmFwLmMgbXNnLmMgbmNoYW4uYyBwYWNrZXQuYyBwcm9ncmVzc21ldGVyLmNdCiAgICAgW3JlYWRjb25mLmMgcmVhZHBhc3MuYyByc2EuYyBzY2FyZC5jIHNjcC5jIHNlcnZjb25mLmMgc2VydmVybG9vcC5jXQogICAgIFtzZXNzaW9uLmMgc2Z0cC1jbGllbnQuYyBzZnRwLWNvbW1vbi5jIHNmdHAtZ2xvYi5jIHNmdHAtc2VydmVyLmNdCiAgICAgW3NmdHAuYyBzc2gtYWRkLmMgc3NoLWFnZW50LmMgc3NoLWRzcy5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jXQogICAgIFtzc2gta2V5c2lnbi5jIHNzaC1yc2EuYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuY10KICAgICBbc3NoY29ubmVjdDIuYyBzc2hkLmMgc3NobG9naW4uYyBzc2hwdHkuYyBzc2h0dHkuYyB0dHltb2Rlcy5jXQogICAgIFt1aWRzd2FwLmMgdXVlbmNvZGUuYyB4bWFsbG9jLmNdCiAgICAgUHV0ICRPcGVuQlNEJCB0YWdzIGJhY2sgKGFzIGNvbW1lbnRzKSB0byByZXBsYWNlIHRoZSBSQ1NJRCgpcyB0aGF0CiAgICAgVGhlbyBudWtlZCAtIG91ciBzY3JpcHRzIHRvIHN5bmMgLXBvcnRhYmxlIG5lZWQgdGhlbSBpbiB0aGUgZmlsZXMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjI5OjM1CiAgICAgW2F1dGgtcnNhLmMgYXV0aGZkLmMgcGFja2V0LmNdCiAgICAgbmVlZGVkIGNhc3RzIChhbHdheXMgd2lsbCBiZSBuZWVkZWQpCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODozMDo1NQogICAgIFtjbGllbnRsb29wLmMgc2VydmVybG9vcC5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjM2OjE1CiAgICAgW3NzaGxvZ2luLmMgc3NobG9naW4uaF0KICAgICBuaWNlciBzaXplX3QgYW5kIHRpbWVfdCB0eXBlcwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6NDA6MTQKICAgICBbc3NoLWtleWdlbi5jXQogICAgIGNhc3Qgc3RydG9udW0oKSByZXN1bHQgdG8gcmlnaHQgdHlwZQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6NDE6NDUKICAgICBbc3NoLWFnZW50LmNdCiAgICAgbWFyayB0d28gbW9yZSBzaWduYWwgaGFuZGxlcnMgQVJHU1VTRUQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjQzOjMwCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgdXNlIHN0cnRvbnVtKCkgaW5zdGVhZCBvZiBhdG9pKCkgW2xpbWl0IFggc2NyZWVucyB0byA0MDAsIHNvcnJ5XQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6NTY6NTUKICAgICBbYnVmYXV4LmMgY2hhbm5lbHMuYyBwYWNrZXQuY10KICAgICByZW1vdmUgKGNoYXIgKikgY2FzdHMgdG8gYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdm9pZCAqIGZvciB0aGUgYXJnCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODo1ODoxMAogICAgIFtjaGFubmVscy5jXQogICAgIGRlbGV0ZSBjYXN0IG5vdCByZXF1aXJlZAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAyMjoyMjo0MwogICAgIFthdG9taWNpby5oIGF1dGgtb3B0aW9ucy5oIGF1dGguaCBhdXRoMi1nc3MuYyBhdXRoZmQuaCBhdXRoZmlsZS5oXQogICAgIFtidWZhdXguaCBidWZmZXIuaCBjYW5vaG9zdC5oIGNoYW5uZWxzLmggY2lwaGVyLmggY2xpZW50bG9vcC5oXQogICAgIFtjb21wYXQuaCBjb21wcmVzcy5oIGNyYzMyLmMgY3JjMzIuaCBkZWF0dGFjay5oIGRoLmggZGlzcGF0Y2guaF0KICAgICBbZG5zLmMgZG5zLmggZ2V0cHV0LmggZ3JvdXBhY2Nlc3MuaCBnc3MtZ2Vuci5jIGdzcy1zZXJ2LWtyYjUuY10KICAgICBbZ3NzLXNlcnYuYyBob3N0ZmlsZS5oIGluY2x1ZGVzLmgga2V4Lmgga2V5LmggbG9nLmggbWFjLmggbWF0Y2guaF0KICAgICBbbWlzYy5oIG1vbml0b3IuaCBtb25pdG9yX2ZkcGFzcy5oIG1vbml0b3JfbW0uaCBtb25pdG9yX3dyYXAuaCBtc2cuaF0KICAgICBbbXlwcm9wb3NhbC5oIHBhY2tldC5oIHBhdGhuYW1lcy5oIHByb2dyZXNzbWV0ZXIuaCByZWFkY29uZi5oIHJzYS5oXQogICAgIFtzY2FyZC5oIHNlcnZjb25mLmggc2VydmVybG9vcC5oIHNlc3Npb24uaCBzZnRwLWNvbW1vbi5oIHNmdHAuaF0KICAgICBbc3NoLWdzcy5oIHNzaC5oIHNzaDEuaCBzc2gyLmggc3NoY29ubmVjdC5oIHNzaGxvZ2luLmggc3NocHR5LmhdCiAgICAgW3R0eW1vZGVzLmggdWlkc3dhcC5oIHV1ZW5jb2RlLmggeG1hbGxvYy5oXQogICAgIHN0YW5kYXJkaXNlIHNwYWNpbmcgaW4gJE9wZW5CU0QkIHRhZ3M7IHJlcXVlc3RlZCBieSBkZXJhYWR0QAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjYgMDE6MzE6NDgKICAgICBbdXVlbmNvZGUuY10KICAgICB0eXBvCgoyMDA2MDMyNQogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE2IDA0OjI0OjQyCiAgICAgW3NzaC4xXQogICAgIEFkZCBSRkM0NDE5IChEaWZmaWUtSGVsbG1hbiBncm91cCBleGNoYW5nZSBLRVgpIHRvIHRoZSBsaXN0IG9mIFNTSCBSRkNzCiAgICAgdGhhdCBPcGVuU1NIIHN1cHBvcnRzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1MToxOAogICAgIFthdG9taWNpby5jIGF1dGgtYnNkYXV0aC5jIGF1dGgtY2hhbGwuYyBhdXRoLWtyYjUuYyBhdXRoLW9wdGlvbnMuY10KICAgICBbYXV0aC1wYW0uYyBhdXRoLXBhc3N3ZC5jIGF1dGgtcmgtcnNhLmMgYXV0aC1yaG9zdHMuYyBhdXRoLXJzYS5jXQogICAgIFthdXRoLXNoYWRvdy5jIGF1dGgtc2tleS5jIGF1dGguYyBhdXRoMS5jIGF1dGgyLWNoYWxsLmNdCiAgICAgW2F1dGgyLWhvc3RiYXNlZC5jIGF1dGgyLWtiZGludC5jIGF1dGgyLW5vbmUuYyBhdXRoMi1wYXNzd2QuY10KICAgICBbYXV0aDItcHVia2V5LmMgYXV0aDIuYyBhdXRoZmQuYyBhdXRoZmlsZS5jIGJ1ZmF1eC5jIGJ1ZmZlci5jXQogICAgIFtjYW5vaG9zdC5jIGNoYW5uZWxzLmMgY2lwaGVyLTNkZXMxLmMgY2lwaGVyLWFjc3MuYyBjaXBoZXItYWVzLmNdCiAgICAgW2NpcGhlci1iZjEuYyBjaXBoZXItY3RyLmMgY2lwaGVyLmMgY2xlYW51cC5jIGNsaWVudGxvb3AuYyBjb21wYXQuY10KICAgICBbY29tcHJlc3MuYyBkZWF0dGFjay5jIGRoLmMgZGlzcGF0Y2guYyBkbnMuYyBlbnRyb3B5LmMgZmF0YWwuY10KICAgICBbZ3JvdXBhY2Nlc3MuYyBob3N0ZmlsZS5jIGluY2x1ZGVzLmgga2V4LmMga2V4ZGguYyBrZXhkaGMuY10KICAgICBba2V4ZGhzLmMga2V4Z2V4LmMga2V4Z2V4Yy5jIGtleGdleHMuYyBrZXkuYyBsb2cuYyBsb2dpbnJlYy5jXQogICAgIFtsb2dpbnJlYy5oIGxvZ2ludGVzdC5jIG1hYy5jIG1hdGNoLmMgbWQtc2hhMjU2LmMgbWQ1Y3J5cHQuYyBtaXNjLmNdCiAgICAgW21vbml0b3IuYyBtb25pdG9yX2ZkcGFzcy5jIG1vbml0b3JfbW0uYyBtb25pdG9yX3dyYXAuYyBtc2cuY10KICAgICBbbmNoYW4uYyBwYWNrZXQuYyBwcm9ncmVzc21ldGVyLmMgcmVhZGNvbmYuYyByZWFkcGFzcy5jIHJzYS5jXQogICAgIFtzY2FyZC5jIHNjcC5jIHNlcnZjb25mLmMgc2VydmVybG9vcC5jIHNlc3Npb24uYyBzZnRwLWNsaWVudC5jXQogICAgIFtzZnRwLWNvbW1vbi5jIHNmdHAtZ2xvYi5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jIHNzaC1hZGQuY10KICAgICBbc3NoLWFnZW50LmMgc3NoLWRzcy5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jIHNzaC1rZXlzaWduLmNdCiAgICAgW3NzaC1yYW5kLWhlbHBlci5jIHNzaC1yc2EuYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuY10KICAgICBbc3NoY29ubmVjdDIuYyBzc2hkLmMgc3NobG9naW4uYyBzc2hwdHkuYyBzc2h0dHkuYyB0dHltb2Rlcy5jXQogICAgIFt1aWRzd2FwLmMgdXVlbmNvZGUuYyB4bWFsbG9jLmMgb3BlbmJzZC1jb21wYXQvYnNkLWFyYzRyYW5kb20uY10KICAgICBbb3BlbmJzZC1jb21wYXQvYnNkLWNsb3NlZnJvbS5jIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5jXQogICAgIFtvcGVuYnNkLWNvbXBhdC9ic2QtZ2V0cGVlcmVpZC5jIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdCiAgICAgW29wZW5ic2QtY29tcGF0L2JzZC1uZXh0c3RlcC5jIG9wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jXQogICAgIFtvcGVuYnNkLWNvbXBhdC9ic2Qtd2FpdHBpZC5jIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5jXQogICAgIFJDU0lEKCkgY2FuIGRpZQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTM6MTIKICAgICBba2V4LmggbXlwcm9wb3NhbC5oXQogICAgIHNwYWNpbmcKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMDQ6MDc6MjIKICAgICBbYXV0aDItZ3NzLmNdCiAgICAgR1NTQVBJIHJlbGF0ZWQgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICByZXZpZXdlZCBieSBzaW1vbiBBVCBzeHcub3JnLnVrOyBkZXJhYWR0QCBvawogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAwNDowNzo0OQogICAgIFtnc3MtZ2Vuci5jXQogICAgIG1vcmUgR1NTQVBJIHJlbGF0ZWQgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICByZXZpZXdlZCBieSBzaW1vbiBBVCBzeHcub3JnLnVrOyBkZXJhYWR0QCBvawogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAwNDowODoxOAogICAgIFtnc3Mtc2Vydi5jXQogICAgIGxhc3QgbG90IG9mIEdTU0FQSSByZWxhdGVkIGxlYWtzIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYQogICAgIGVsYWQgQVQgbmV0YnNkLm9yZzsgcmV2aWV3ZWQgYnkgc2ltb24gQVQgc3h3Lm9yZy51azsgZGVyYWFkdEAgb2sKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjE0OjAyCiAgICAgW21vbml0b3Jfd3JhcC5oIHNzaHB0eS5oXQogICAgIHNwcmlua2xlIHVfaW50IHRocm91Z2hvdXQgcHR5IHN1YnN5c3RlbSwgb2sgbWFya3VzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODoyNjo1NQogICAgIFtzZXNzaW9uLmhdCiAgICAgYW5ub3lpbmcgc3BhY2luZyBmaXhlcyBnZXR0aW5nIGluIHRoZSB3YXkgb2YgcmVhbCBkaWZmcwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6NDE6NDMKICAgICBbZG5zLmNdCiAgICAgY2FzdCB4c3RyZHVwIHRvIHByb3BlcnQgdV9jaGFyICoKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMiAyMToxNjoyNAogICAgIFtzc2guMV0KICAgICBzaW1wbGlmeSBTU0hGUCBleGFtcGxlOyBvayBqbWNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIyIDIxOjI3OjE1CiAgICAgW2RlYXR0YWNrLmMgZGVhdHRhY2suaF0KICAgICByZW1vdmUgSVYgc3VwcG9ydCBmcm9tIHRoZSBDUkMgYXR0YWNrIGRldGVjdG9yLCBPcGVuU1NIIGhhcyBuZXZlciB1c2VkCiAgICAgaXQgLSBpdCBvbmx5IGFwcGxpZWQgdG8gSURFQS1DRkIsIHdoaWNoIHdlIGRvbid0IHN1cHBvcnQuCiAgICAgcHJvbXB0ZWQgYnkgTmV0QlNEIENvdmVyaXR5IHJlcG9ydCB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIGZlZWRiYWNrIG1hcmt1c0AgIm51a2UgaXQiIGRlcmFhZHRACgoyMDA2MDMxOAogLSAoZGptKSBbYXV0aC1wYW0uY10gRml4IG1lbWxlYWsgaW4gZXJyb3IgcGF0aCwgZnJvbSBDb3Zlcml0eSB2aWEKICAgZWxhZCBBVCBOZXRCU0Qub3JnCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmNdIEJ1ZyAjMTE3MzogbWFrZSBmbXRpbnQoKSB0YWtlCiAgIGEgTExPTkcgcmF0aGVyIHRoYW4gYSBsb25nLiAgRml4ZXMgc2NwJ2luZyBvZiBsYXJnZSBmaWxlcyBvbiBwbGF0Zm9ybXMKICAgd2l0aCBtaXNzaW5nL2Jyb2tlbiBzbnByaW50ZnMuICBQYXRjaCBmcm9tIGUuYm9yb3ZhYyBhdCBib20uZ292LmF1LgoKMjAwNjAzMTYKIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmNdIEFkZCBoZWFkZXJzIGZvciBXSUZFWElURUQgYW5kIGZyaWVuZHMuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG1kLXNoYTI1Ni5jXSBOZXRCU0QgaGFzIHNoYTIuaCBpbgogICAvdXNyL2luY2x1ZGUvY3J5cHRvLiAgSGludCBmcm9tIGRqbUAuCiAtICh0aW0pIFtrZXguYyBteXByb3Bvc2FsLmggbWQtc2hhMjU2LmMgb3BlbmJzZC1jb21wYXQvc2hhMi5jLGhdCiAgIERpc2FibGUgc2hhMjU2IHdoZW4gb3BlbnNzbCA8IDAuOS43LiBQYXRjaCBmcm9tIGRqbUAuCiAtIChkam0pIFtrZXguY10gU2xpZ2h0bHkgbW9yZSBjbGVhbiBkZWFjdGl2YXRpb24gb2YgZGhnZXgtc2hhMjU2IG9uIG9sZAogICBPcGVuU1NMOyBvayB0aW0KCjIwMDYwMzE1CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmM6CiAgIC0gbXNmQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA2IDE1OjU0OjA3CiAgICAgW3NzaC4xXQogICAgIC0gdHlwbyBmaXgKICAgICBvayBqbWNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA2IDIxOjQ0OjQ3CiAgICAgW3NzaC4xXQogICAgIG1ha2UgdGhpcyBhIGxpdHRsZSBsZXNzIGFtYmlndW91cy4uLgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDcgMDE6MDg6MDQKICAgICBbYXV0aC1yaG9zdHMuYyBpbmNsdWRlcy5oXQogICAgIG1vdmUgI2luY2x1ZGUgPG5ldGdyb3VwLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNyAwMToxODowOQogICAgIFtpbmNsdWRlcy5oIHNzaC1hZ2VudC5jIHNzaC1rZXlzY2FuLmMgc3NoY29ubmVjdDIuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvcXVldWUuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA3IDAxOjQyOjAwCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIGNsaWVudGxvb3AuaCBpbmNsdWRlcy5oIHBhY2tldC5oXQogICAgIFtzZXJ2ZXJsb29wLmMgc3NocHR5LmMgc3NocHR5Lmggc3NodHR5LmMgdHR5bW9kZXMuY10KICAgICBtb3ZlICNpbmNsdWRlIDx0ZXJtaW9zLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNyAwMTo1Mjo1MAogICAgIFtzc2h0dHkuY10KICAgICAibG9nLmgiIG5vdCBuZWVkZWQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA3IDAzOjQ3OjA1CiAgICAgW2hvc3RmaWxlLmNdCiAgICAgInBhY2tldC5oIiBub3QgbmVlZGVkCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNyAwMzo1OToyMAogICAgIFtkZWF0dGFjay5jXQogICAgIGR1cGxpY2F0ZSAjaW5jbHVkZQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTI6MTU6MjcKICAgICBbYXV0aC5jIGNsaWVudGxvb3AuYyBpbmNsdWRlcy5oIG1pc2MuYyBtb25pdG9yLmMgcmVhZHBhc3MuY10KICAgICBbc2Vzc2lvbi5jIHNmdHAuYyBzc2gtYWdlbnQuYyBzc2gta2V5c2lnbi5jIHNzaC5jIHNzaGNvbm5lY3QuY10KICAgICBbc3NoZC5jIHNzaHB0eS5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHBhdGhzLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAxMjozMjo0OQogICAgIFtpbmNsdWRlcy5oIG1pc2MuY10KICAgICBtb3ZlICNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTM6MTU6NDQKICAgICBbZ3NzLXNlcnYuYyBtb25pdG9yLmNdCiAgICAgc21hbGwgS05GCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAxNDoxNjo1OQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgPG9wZW5zc2wvYm4uaD4gbm90IG5lZWRlZAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTQ6MzE6MzAKICAgICBbaW5jbHVkZXMuaCBzc2gtYWdlbnQuYyBzc2gta2V5c2Nhbi5jIHNzaC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTQ6Mzg6MTgKICAgICBbaW5jbHVkZXMuaCBwYWNrZXQuY10KICAgICBtb3ZlICNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+IGFuZCA8bmV0aW5ldC9pcC5oPiBvdXQgb2YKICAgICBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOCAyMzo1MToyNAogICAgIFtpbmNsdWRlcy5oIHNjcC5jIHNmdHAtZ2xvYi5jIHNmdHAtc2VydmVyLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8ZGlyZW50Lmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOSAwMDozMjowNwogICAgIFtpbmNsdWRlcy5oXQogICAgICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+IG5vdCBuZWVkZWQ7IG9rIGRqbUAKICAgICBOQi4gSUQgU3luYyBvbmx5IC0gd2Ugc3RpbGwgbmVlZCB0aGlzIChidXQgaXQgbWF5IG1vdmUgbGF0ZXIpCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA5IDEwOjEwOjQ3CiAgICAgW3NzaGQuOF0KICAgICAtIG1vdmUgc29tZSB0ZXh0IGludG8gYSBDQVZFQVRTIHNlY3Rpb24KICAgICAtIG1lcmdlIHRoZSBDT01NQU5EIEVYRUNVVElPTi4uLiBzZWN0aW9uIGludG8gQVVUSEVOVElDQVRJT04KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEwIDAwOjI3OjEzCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggbWlzYy5jIHByb2dyZXNzbWV0ZXIuYyBzZnRwLmNdCiAgICAgW3NzaC5jIHNzaGQuYyBzc2hwdHkuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEwIDAxOjQ0OjI3CiAgICAgW2luY2x1ZGVzLmggbW9uaXRvci5jIHJlYWRwYXNzLmMgc2NwLmMgc2VydmVybG9vcC5jIHNlc3Npb24uY39dCiAgICAgW3NmdHAuYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDIuYyBzc2hkLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3dhaXQuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzExIDE5OjMxOjE4CiAgICAgW2F0b21pY2lvLmNdCiAgICAgdHlwZSBjb3JyZWN0bmVzczsgZnJvbSBSYXkgTGFpIGluIFBSIDUwMTE7IG9rIG1pbGxlcnRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEyIDA2OjQ1OjM0CiAgICAgW3NzaC5jIHNzaF9jb25maWcuNV0KICAgICBhZGQgYSAlbCBleHBhbnNpb24gY29kZSB0byB0aGUgQ29udHJvbFBhdGgsIHdoaWNoIGlzIGZpbGxlZCBpbiB3aXRoIHRoZQogICAgIGxvY2FsIGhvc3RuYW1lIGF0IHJ1bnRpbWUuIFJlcXVlc3RlZCBieSBoZW5uaW5nQCB0byBhdm9pZCBzb21lIHByb2JsZW1zCiAgICAgd2l0aCAvaG9tZSBvbiBORlM7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEyIDEwOjQ0OjE4CiAgICAgW3JlYWRjb25mLmNdCiAgICAgcmFpc2UgZXJyb3Igd2hlbiB0aGUgdXNlciBzcGVjaWZpZXMgYSBSZWtleUxpbWl0IHRoYXQgaXMgc21hbGxlciB0aGFuIDE2CiAgICAgKHRoZSBzbWFsbGVzdCBvZiBvdXIgY2lwaGVyJ3MgYmxvY2tzaXplKSBvciBiaWcgZW5vdWdoIHRvIGNhdXNlIGludGVnZXIKICAgICB3cmFwYXJvdW5kOyBvayAmIGZlZWRiYWNrIGR0dWNrZXJACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEyIDEwOjQ5OjQ0CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBzbGlnaHQgcmV3b3JkaW5nOyBvayBkam0KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTIgMTA6NTI6NDEKICAgICBbc3NoZC44XQogICAgIHJld29yayB0aGUgZGVzY3JpcHRpb24gb2YgYXV0aG9yaXplZF9rZXlzIGEgbGl0dGxlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMiAxNzo1NzoxOQogICAgIFtzc2hkLjhdCiAgICAgc29ydCB0aGUgbGlzdCBvZiBvcHRpb25zIHBlcm1pc3NhYmxlIHcvIGF1dGhvcml6ZWRfa2V5czsKICAgICBvayBkam0gZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMyAxMDoxNjozOQogICAgIFtzc2hkLjhdCiAgICAgbm8gbmVlZCB0byBzdWJzZWN0aW9uIHRoZSBhdXRob3JpemVkX2tleXMgZXhhbXBsZXMgLSBpbnN0ZWFkLCBjb252ZXJ0CiAgICAgdGhpcyB0byBsb29rIGxpa2UgYW4gYWN0dWFsIGZpbGUuIGFsc28gdXNlIHByb3RvIDIga2V5cywgYW5kIHVzZSBJRVRGCiAgICAgZXhhbXBsZSBhZGRyZXNzZXM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEzIDEwOjIxOjI1CiAgICAgW3NzaGQuOF0KICAgICBzbWFsbCB0d2Vha3MgZm9yIHRoZSBzc2hfa25vd25faG9zdHMgc2VjdGlvbjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTMgMTE6MDI6MjYKICAgICBbc3NoZC44XQogICAgIHR1cm4gdGhpcyBpbnRvIGFuIGV4YW1wbGUgc3NoX2tub3duX2hvc3RzIGZpbGU7IG9rIGRqbQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMyAxMTowODo0MwogICAgIFtzc2hkLjhdCiAgICAgLSBhdm9pZCBuYXN0eSBsaW5lIHNwbGl0CiAgICAgLSBgKicgZG9lcyBub3QgbmVlZCB0byBiZSBlc2NhcGVkCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEzIDExOjI3OjI1CiAgICAgW3NzaGQuOF0KICAgICBzb3J0IEZJTEVTIGFuZCB1c2UgYSAtY29tcGFjdCBsaXN0OwogICAtIGRhdmlkQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE1IDA1OjA4OjI0CiAgICAgW3NmdHAtY2xpZW50LmNdCiAgICAgdHlwbyBpbiBjb21tZW50OyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE1IDE2OjUzOjIwCiAgICAgW3NzaC4xXQogICAgIHJlbW92ZSB0aGUgSUVURiBkcmFmdCByZWZlcmVuY2VzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBzb21lIHVwZGF0ZWQgUkZDczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTUgMTY6NTU6MzMKICAgICBbc3NoZC44XQogICAgIHJlbW92ZSBpZXRmIGRyYWZ0IHJlZmVyZW5jZXM7IFJGQyBsaXN0IG5vdyBtYWludGFpbmVkIGluIHNzaC4xOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xNiAwOTowNTozNAogICAgIFtzc2hkLjhdCiAgICAgc3luYyBzb21lIG9mIHRoZSBGSUxFUyBlbnRyaWVzIHcvIHNzaC4xOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xOSAxOTo1MjoxMAogICAgIFtzc2hkLjhdCiAgICAgbW92ZSB0aGUgc3NocmMgc3R1ZmYgb3V0IG9mIEZJTEVTLCBhbmQgaW50byBpdHMgb3duIHNlY3Rpb246CiAgICAgRklMRVMgaXMgbm90IGEgZ29vZCBwbGFjZSB0byBkb2N1bWVudCBob3cgc3R1ZmYgd29ya3M7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE5IDIwOjAyOjE3CiAgICAgW3NzaGQuOF0KICAgICBzeW5jIHRoZSAocylob3N0cy5lcXVpdiBGSUxFUyBlbnRyaWVzIHcvIHRob3NlIGZyb20gc3NoLjE7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE5IDIwOjA1OjAwCiAgICAgW3NzaGQuOF0KICAgICBncmFtbWFyOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xOSAyMDoxMjoyNQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgYWRkIHNvbWUgdmVydGljYWwgc3BhY2U7CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yMCAxNjozNjoxNQogICAgIFthdXRoZmQuYyBjaGFubmVscy5jIGluY2x1ZGVzLmggc2Vzc2lvbi5jIHNzaC1hZ2VudC5jIHNzaC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy91bi5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjAgMTc6MDI6NDQKICAgICBbY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggbW9uaXRvci5jIHByb2dyZXNzbWV0ZXIuYyBzY3AuY10KICAgICBbc2VydmVybG9vcC5jIHNlc3Npb24uYyBzZnRwLmMgc3NoLWFnZW50LmMgc3NoLmMgc3NoZC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHNpZ25hbC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjAgMTc6MTk6NTQKICAgICBbYXV0aC1yaG9zdHMuYyBhdXRoLXJzYS5jIGF1dGguYyBhdXRoMi1ub25lLmMgYXV0aDItcHVia2V5LmNdCiAgICAgW2F1dGhmaWxlLmMgY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggcmVhZGNvbmYuYyBzY3AuYyBzZXNzaW9uLmNdCiAgICAgW3NmdHAtY2xpZW50LmMgc2Z0cC1jb21tb24uYyBzZnRwLWNvbW1vbi5oIHNmdHAtZ2xvYi5jXQogICAgIFtzZnRwLXNlcnZlci5jIHNmdHAuYyBzc2gtYWRkLmMgc3NoLWtleWdlbi5jIHNzaC5jIHNzaGNvbm5lY3QuY10KICAgICBbc3NoY29ubmVjdDIuYyBzc2hkLmMgc3NocHR5LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3N0YXQuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzIyIDAwOjA0OjQ1CiAgICAgW2Nhbm9ob3N0LmMgY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggbWF0Y2guYyByZWFkY29uZi5jIHNjcC5jIHNzaC5jXQogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8Y3R5cGUuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMTA6MjU6MTQKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGFkZCBzZWN0aW9uIG9uIHBhdHRlcm5zOwogICAgIGZyb20gZHR1Y2tlciArIG15c2VsZgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAxMDozMzo1NAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHNpZ25wb3N0IHRvIFBBVFRFUk5TOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAxMDozNzowNwogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgdGlkeSB1cCB0aGUgcmVmcyB0byBQQVRURVJOUzsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMTA6Mzk6NTIKICAgICBbc3NoZC44XQogICAgIHNpZ25wb3N0IHRvIFBBVFRFUk5TIHNlY3Rpb247CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDIwOjIyOjE2CiAgICAgW3NzaC1rZXlzaWduLjggc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgc29tZSBjb25zaXN0ZW5jeSBmaXhlczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMjA6MzE6MzEKICAgICBbc3NoLjEgc3NoX2NvbmZpZy41IHNzaGQuOCBzc2hkX2NvbmZpZy41XQogICAgIG1vcmUgY29uc2lzdGVuY3kgZml4ZXM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDIzOjIwOjA3CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBzb21lIGdyYW1tYXIvd29yZGluZyBmaXhlczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMjM6NDM6NTcKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBzb21lIGdyYW1tYXIvd29yZGluZyBmaXhlczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMjM6NTE6MTcKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBvb3BzIC0gYml0cyBpIG1pc3NlZDsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjUgMTI6MjY6MTcKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGRvY3VtZW50IHRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIEtiZEludGVyYWN0aXZlRGV2aWNlczsKICAgICBoZWxwL29rIGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjUgMTI6Mjg6MzQKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBkb2N1bWVudCB0aGUgb3JkZXIgaW4gd2hpY2ggYWxsb3cvZGVueSBkaXJlY3RpdmVzIGFyZSBwcm9jZXNzZWQ7CiAgICAgaGVscC9vayBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI2IDE3OjE3OjE4CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBtb3ZlIFBBVFRFUk5TIHRvIHRoZSBlbmQgb2YgdGhlIG1haW4gYm9keTsgcmVxdWVzdGVkIGJ5IGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjYgMTg6MDE6MTMKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBzdWJzZWN0aW9uIGlzIHBvaW50bGVzcyBoZXJlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNiAxODowMzoxMAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgY29tbWE7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI4IDAxOjEwOjIxCiAgICAgW3Nlc3Npb24uY10KICAgICBmaXggbG9nb3V0IHJlY29yZGluZyB3aGVuIHByaXZpbGVnZSBzZXBhcmF0aW9uIGlzIGRpc2FibGVkLCBhbmFseXNpcyBhbmQKICAgICBwYXRjaCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb207IHRlc3RlZCBieSBkdHVja2VyQCBvayBkZXJhYWR0QAogICAgIE5CLiBJRCBzeW5jIG9ubHkgLSBwYXRjaCBhbHJlYWR5IGluIHBvcnRhYmxlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzA0IDA0OjEyOjU4CiAgICAgW3NlcnZlcmxvb3AuY10KICAgICBtb3ZlIGEgZGVidWcoKSBvdXRzaWRlIG9mIGEgc2lnbmFsIGhhbmRsZXI7IG9rIG1hcmt1c0AgYSBsaXR0bGUgd2hpbGUgYmFjawogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xMiAwNDoyMzowNwogICAgIFtzc2guY10KICAgICBrbmYgbml0CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzEzIDA4OjE2OjAwCiAgICAgW3NzaGQuY10KICAgICBkb24ndCBsb2cgdGhhdCB3ZSBhcmUgbGlzdGVuaW5nIG9uIGEgc29ja2V0IGJlZm9yZSB0aGUgbGlzdGVuKCkgY2FsbAogICAgIGFjdHVhbGx5IHN1Y2NlZWRzLCBieiAjMTE2MiByZXBvcnRlZCBieSBTZW50aGlsIEt1bWFyOyBvayBkdHVja2VyQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTMgMDg6MzM6MDAKICAgICBbcGFja2V0LmNdCiAgICAgU2V0IFRDUF9OT0RFTEFZIGZvciBhbGwgY29ubmVjdGlvbnMgbm90IGp1c3QgImludGVyYWN0aXZlIiBvbmVzLiAgRml4ZXMKICAgICBwb29yIHBlcmZvcm1hbmNlIGFuZCBwcm90b2NvbCBzdGFsbHMgdW5kZXIgc29tZSBuZXR3b3JrIGNvbmRpdGlvbnMgKG1pbmRyb3QKICAgICBidWdzICM1NTYgYW5kICM5ODEpLiBQYXRjaCBvcmlnaW5hbGx5IGZyb20gbWFya3VzQCwgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTMgMDg6NDM6MTYKICAgICBbc3NoLWtleWdlbi5jXQogICAgIE1ha2Ugc3NoLWtleWdlbiBoYW5kbGUgQ1IgYW5kIENSTEYgbGluZSB0ZXJtaW5hdGlvbiB3aGVuIGNvbnZlcnRpbmcgSUVURgogICAgIGZvcm1hdCBrZXlzLCBpbiBhZGl0aW9uIHRvIHZhbmlsbGEgTEYuICBtaW5kcm90ICMxMTU3LCB0ZXN0ZWQgYnkgQ2hyaXMKICAgICBQZXBwZXIsIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzEzIDEwOjE0OjI5CiAgICAgW21pc2MuYyBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBBbGxvdyBjb25maWcgZGlyZWN0aXZlcyB0byBjb250YWluIHdoaXRlc3BhY2UgYnkgc3Vycm91bmRpbmcgdGhlbSBieSBkb3VibGUKICAgICBxdW90ZXMuICBtaW5kcm90ICM0ODIsIG1hbiBwYWdlIGhlbHAgZnJvbSBqbWNALCBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xMyAxMDoyNjo1MgogICAgIFthdXRoZmlsZS5jIGF1dGhmaWxlLmggc3NoLWFkZC5jXQogICAgIE1ha2Ugc3NoLWFkZCBjaGVjayBmaWxlIHBlcm1pc3Npb25zIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGxvYWQgcHJpdmF0ZQogICAgIGtleSBmaWxlcyBtdWx0aXBsZSB0aW1lczsgaXQgd2lsbCBmYWlsIGFueXdheSBhbmQgdGhpcyBwcmV2ZW50cyBjb25mdXNpbmcKICAgICBtdWx0aXBsZSBwcm9tcHRzIGFuZCB3YXJuaW5ncy4gIG1pbmRyb3QgIzExMzgsIG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTQgMDA6MTU6MzkKICAgICBbY2Fub2hvc3QuY10KICAgICBsb2cgdGhlIG9yaWdpbmF0aW5nIGFkZHJlc3MgYW5kIG5vdCBqdXN0IHRoZSBuYW1lIHdoZW4gYSByZXZlcnNlCiAgICAgbWFwcGluZyBjaGVjayBmYWlscywgcmVxdWVzdGVkIGJ5IGxpbnV4IEFUIGxpbnVvbi5jb20KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTQgMTY6MzI6NDgKICAgICBbc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgKkFsaXZlQ291bnRNYXggYXBwbGllcyB0byBwcm90Y29sIHYyIG9ubHk7IG9rIGR0dWNrZXIsIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8wNyAwOTowNzo0MAogICAgIFtrZXguYyBrZXguaCBtb25pdG9yLmMgbXlwcm9wb3NhbC5oIHNzaC1rZXlzY2FuLmMgc3NoY29ubmVjdDIuYyBzc2hkLmNdCiAgICAgSW1wbGVtZW50IHRoZSBkaWZmaWUtaGVsbG1hbi1ncm91cC1leGNoYW5nZS1zaGEyNTYga2V5IGV4Y2hhbmdlIG1ldGhvZAogICAgIHVzaW5nIHRoZSBTSEEyNTYgY29kZSBpbiBsaWJjIChhbmQgd3JhcHBlciB0byBtYWtlIGl0IGludG8gYW4gT3BlblNTTAogICAgIEVWUCksIGludGVyb3AgdGVzdGVkIGFnYWluc3QgQ1ZTIFB1VFRZCiAgICAgTkIuIG5vIHBvcnRhYmlsaXR5IGJpdHMgY29tbWl0dGVkIHlldAogLSAoZGptKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaCBrZXguYyBtZC1zaGEyNTYuY10KICAgW29wZW5ic2QtY29tcGF0L3NoYTIuaCBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXQogICBbb3BlbmJzZC1jb21wYXQvc2hhMi5jXSBGaXJzdCBzdGFiIGF0IHBvcnRhYmlsaXR5IGdsdWUgZm9yIFNIQTI1NgogICBLRVggc3VwcG9ydCwgc2hvdWxkIHdvcmsgd2l0aCBsaWJjIFNIQTI1NiBzdXBwb3J0IG9yIE9wZW5TU0wKICAgRVZQX3NoYTI1NiBpZiBwcmVzZW50CiAtIChkam0pIFtpbmNsdWRlcy5oXSBSZXN0b3JlIGFjY2lkZW50YWxseSBkcm9wcGVkIG5ldGluZXQvaW4uaAogLSAoZGptKSBbTWFrZWZpbGUuaW4gb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW5dIEFkZCBhZGRlZCBmaWxlcwogLSAoZGptKSBbbWQtc2hhMjU2LmMgY29uZmlndXJlLmFjXSBtZC1zaGEyNTYuYyBuZWVkcyBzaGEyLmggaWYgcHJlc2VudAogLSAoZGptKSBbcmVncmVzcy8uY3ZzaWdub3JlXSBJZ25vcmUgTWFrZWZpbGUgaGVyZQogLSAoZGptKSBbbG9naW5yZWMuY10gTmVlZCBzdGF0LmgKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3NoYTIuaF0gQXZvaWQgaW5jbHVkZSBtYWNybyBjbGFzaCB3aXRoCiAgIHN5c3RlbSBzaGEyLmgKIC0gKGRqbSkgW3NzaC1yYW5kLWhlbHBlci5jXSBOZWVkcyBhIGJ1bmNoIG9mIGhlYWRlcnMKIC0gKGRqbSkgW3NzaC1hZ2VudC5jXSBSZXN0b3JlIGRyb3BwZWQgc3RhdC5oCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9zaGEyLmggb3BlbmJzZC1jb21wYXQvc2hhMi5jXSBDb21tZW50IG91dCAKICAgU0hBMzg0LCB3aGljaCB3ZSBkb24ndCBuZWVkIGFuZCBkb2Vzbid0IGNvbXBpbGUgd2l0aG91dCB0d2Vha3MKIC0gKGRqbSkgW2F1dGgtcGFtLmMgY2xpZW50bG9vcC5jIGluY2x1ZGVzLmggbW9uaXRvci5jIHNlc3Npb24uY10KICAgW3NmdHAtY2xpZW50LmMgc3NoLWtleXNpZ24uYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDIuY10KICAgW3NzaGQuYyBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jIG9wZW5ic2QtY29tcGF0L2JzZC1vcGVucHR5LmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9nbG9iLmMgb3BlbmJzZC1jb21wYXQvbWt0ZW1wLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5jXSBMb3RzIG9mIGluY2x1ZGUgZml4ZXMgZm9yCiAgIE9wZW5Tb2xhcmlzCiAtICh0aW0pIFtpbmNsdWRlcy5oXSBwdXQgc3lzL3N0YXQuaCBiYWNrIGluIHRvIHF1aWV0IHNvbWUgIm1hY3JvIHJlZGVmaW5lZDoiCiAtICh0aW0pIFtvcGVuc3NoL3NzaHB0eS5jIG9wZW5zc2gvb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uY10gcHV0IGluIHNvbWUKICAgaW5jbHVkZXMgcmVtb3ZlZCBmcm9tIGluY2x1ZGVzLmgKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEZpeCBnbG9iIHRlc3QgY29udmVyc2lvbiB0byBBQ19UUllfQ09NUElMRQogLSAoZGptKSBbaW5jbHVkZXMuaF0gUHV0IGJhY2sgcGF0aHMuaCwgaXQgaXMgbmVlZGVkIGluIGRlZmluZXMuaAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdIEFJWCAoYXQgbGVhc3QpIG5lZWRzCiAgIHN5cy9pb2N0bC5oIGZvciBzdHJ1Y3Qgd2luc2l6ZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIGxvZ2luX2NhcC5oIHJlcXVpcmVzIHN5cy90eXBlcy5oIG9uIE5ldEJTRC4KCjIwMDYwMzEzCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzExNzE6IERvbid0IHVzZSBwcmludGYoIiVsbGQiLCBsb25nbG9uZykKICAgc2luY2Ugbm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBpdC4gIEluc3RlYWQsIHVzZSBpbnRlcm5hbCBlcXVpdmFsZW50IHdoaWxlCiAgIGNvbXB1dGluZyBMTE9OR19NSU4gYW5kIExMT05HX01BWC4gIFJlbW92ZSBzcGVjaWFsIGNhc2UgZm9yIGFscGhhLWRlYy1vc2YqCiAgIGFzIGl0J3Mgbm8gbG9uZ2VyIHJlcXVpcmVkLiAgVGVzdGVkIGJ5IEJlcm5oYXJkIFNpbW9uLCBvayBkam1ACgoyMDA2MDMwNAogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY3lnd2luL3NzaC1ob3N0LWNvbmZpZ10gUmVxdWlyZSB1c2Ugb2YgbGFzdGxvZyBhcyBhCiAgIGZpbGUgcmF0aGVyIHRoYW4gZGlyZWN0b3J5LCByZXF1aXJlZCBhcyBDeWd3aW4gd2lsbCBiZSBpbXBvcnRpbmcgbGFzdGxvZygxKS4KICAgQWxzbyB0aWdodGVucyB1cCBwZXJtaXNzaW9ucyBvbiB0aGUgZmlsZS4gIFBhdGNoIGZyb20gdmluc2NoZW5AcmVkaGF0LmNvbS4KIC0gKGR0dWNrZXIpIFtnc3Mtc2Vydi1rcmI1LmNdIEJ1ZyAjMTE2NjogQ29ycmVjdCAjaWZkZWZzIGZvciBnc3NhcGlfa3JiNS5oCiAgIGluY2x1ZGVzLiAgUGF0Y2ggZnJvbSBnZW50b28ucml2ZXJyYXQgYXQgZ21haWwuY29tLgoKMjAwNjAyMjYKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTE1NjogUU5YIGFwcGFyZW50bHkgbmVlZHMgU1NIRF9BQ1FVSVJFU19DVFRZCiAgIHBhdGNoIGZyb20ga3JhYWkgYXQgZnRiZnMub3JnLgoKMjAwNjAyMjMKIC0gKGR0dWNrZXIpIFtzc2hkX2NvbmZpZyBzc2hkX2NvbmZpZy41XSBVcGRhdGUgVXNlUEFNIHRvIHJlZmxlY3QgY3VycmVudAogICByZWFsaXR5LiAgUG9pbnRlZCBvdXQgYnkgdHJ5cG9ucmFqIGF0IGdtYWlsLmNvbS4KCjIwMDYwMjIyCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQue2MsaH1dIE1pbm9yIHRpZHkgdXA6IG9ubHkKICAgY29tcGlsZSBpbiBjb21wYXQgY29kZSBpZiByZXF1aXJlZC4KCjIwMDYwMjIxCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaF0gUHJldmVudCB3YXJuaW5nIGFib3V0CiAgIHJlZGVmaW5pdGlvbiBvZiBTU0xlYXlfYWRkX2FsbF9hbGdvcml0aG1zLgoKMjAwNjAyMjAKIC0gKGR0dWNrZXIpIFtJTlNUQUxMIGNvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC57YyxofV0KICAgQWRkIG9wdGlvbmFsIGVuYWJsaW5nIG9mIE9wZW5TU0wncyAoaGFyZHdhcmUpIEVuZ2luZSBzdXBwb3J0LCB2aWEKICAgY29uZmlndXJlIC0td2l0aC1zc2wtZW5naW5lLiAgQmFzZWQgaW4gcGFydCBvbiBhIGRpZmYgYnkgbWljaGFsIGF0CiAgIGxvZ2l4LmN6LgoKMjAwNjAyMTkKIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbiBjb25maWd1cmUuYWMsIGFkZGVkIG9wZW5ic2QtY29tcGF0L3JlZ3Jlc3MvXQogICBBZGQgZmlyc3QgYXR0ZW1wdCBhdCByZWdyZXNzIHRlc3RzIGZvciBjb21wYXQgbGlicmFyeS4gIG9rIGRqbUAKCjIwMDYwMjE0CiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbl0gTWFrZSB0aGUgbmFtZXMgY29uc2lzdGVudC4KICAgcy9wa2dfcG9zdF9tYWtlX2luc3RhbGxfZml4ZXMuc2gvcGtnLXBvc3QtbWFrZS1pbnN0YWxsLWZpeGVzLnNoLyBPSyBkdHVja2VyQAoKMjAwNjAyMTIKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuY10gTWFrZSBsb29wIGNvdW50ZXIgdW5zaWduZWQKICAgdG8gc2lsZW5jZSBjb21waWxlciB3YXJuaW5nLCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTE0OS4gRGlzYWJsZSAvZXRjL2RlZmF1bHQvbG9naW4gY2hlY2sgZm9yIFFOWC4KIC0gKGR0dWNrZXIpIFtSRUFETUUgdmVyc2lvbi5oIGNvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMKICAgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjIGNvbnRyaWIvc3VzZS9vcGVuc3NoLnNwZWNdIEJ1bXAgdmVyc2lvbgogICBzdHJpbmdzIHRvIG1hdGNoIDQuM3AyIHJlbGVhc2UuCgoyMDA2MDIwOAogLSAodGltKSBbc2Vzc2lvbi5jXSBMb2dvdXQgcmVjb3JkcyB3ZXJlIG5vdCB1cGRhdGVkIG9uIHN5c3RlbXMgd2l0aAogICBwb3N0IGF1dGggcHJpdnNlcCBkaXNhYmxlZCBkdWUgdG8gYnVnIDEwODYgY2hhbmdlcy4gQW5hbHlzaXMgYW5kIHBhdGNoCiAgIGJ5IHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uIE9LIHRpbUAsIGR0dWNrZXJALgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVHlwbyBpbiBVbHRyaXggYW5kIE5ld3NPUyBzZWN0aW9ucyAoTkVFRF9TRVRQUkdQCiAgIC0+IE5FRURfU0VUUEdSUCksIHJlcG9ydGVkIGJ5IEJlcm5oYXJkIFNpbW9uLiAgb2sgdGltQAoKMjAwNjAyMDYKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gUmVtb3ZlIHVubmVjZXNzYXJ5IHRlc3RzIGZvciBuZXQvaWYuaCBhbmQgCiAgIG5ldGluZXQvaW5fc3lzdG0uaC4gT0sgZHR1Y2tlckAuCgoyMDA2MDIwNQogLSAodGltKSBbY29uZmlndXJlLmFjXSBBZGQgQUNfUkVWSVNJT04uIEFkZCBzeXMvdGltZS5oIHRvIGxhc3Rsb2cuaCB0ZXN0CiAgIGZvciBTb2xhcmlzLiBPSyBkdHVja2VyQC4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTQ5LiBDaGFuZ2VzIGluIFFOWCBzZWN0aW9uIG9ubHkuIFBhdGNoIGJ5CiAgIGtyYWFpIGF0IGZ0YmZzLm9yZy4KCjIwMDYwMjAzCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIHRlc3QgZm9yIGVncmVwIChBQ19QUk9HX0VHUkVQKSBiZWZvcmUgZmlyc3QKICAgQUNfQ0hFQ0tfSEVBREVSUyB0ZXN0LiBXaXRob3V0IGl0LCBpZiBBQ19DSEVDS19IRUFERVJTIGlzIGZpcnN0IHJ1bgogICBieSBhIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrLCBidWlsdGluIHN0YW5kYXJkIGluY2x1ZGVzIHRlc3RzIHdpbGwgYmUKICAgc2tpcHBlZCBvbiB0aGUgb3RoZXIgcGxhdGZvcm1zLgogICBBbmFseXNpcyBhbmQgc3VnZ2VzdGlvbiBieSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLCBwYXRjaCBieSBkdHVja2VyQC4KICAgT0sgdGltQCwgZGptQC4KCjIwMDYwMjAyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzExNDg6IEZpeCAiY3JpcHBsZWQgQUVTIiB0ZXN0IHNvIHRoYXQgaXQKICAgd29ya3Mgd2l0aCBwaWNreSBjb21waWxlcnMuICBQYXRjaCBmcm9tIGFsZXgua2llcm5hbiBhdCB0aHVzLm5ldC4KCjIwMDYwMjAxCiAtIChkam0pIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0gVHJ5ICdsb2duYW1lJyBhcyB3ZWxsIGFzICd3aG9hbWknIHRvIAogICBkZXRlcm1pbmUgdGhlIHVzZXIncyBsb2dpbiBuYW1lIC0gbmVlZGVkIGZvciByZWdyZXNzIHRlc3RzIG9uIFNvbGFyaXMgCiAgIDEwIGFuZCBPcGVuU29sYXJpcwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzAxIDA5OjA2OjUwCiAgICAgW3NzaGQuOF0KICAgICAtIG1lcmdlIHNlY3Rpb25zIG9uIHByb3RvY29scyAxIGFuZCAyIGludG8gYSBzaW5nbGUgc2VjdGlvbgogICAgIC0gcmVtb3ZlIGNvbmZpZ3VyYXRpb24gZmlsZSBzZWN0aW9uCiAgICAgb2sgbWFya3VzCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzAxIDA5OjExOjQxCiAgICAgW3NzaGQuOF0KICAgICBzbWFsbCB0d2VhazsKIC0gKGRqbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjXQogICBbY29udHJpYi9zdXNlL29wZW5zc2guc3BlY10gVXBkYXRlIHZlcnNpb25zIGFoZWFkIG9mIHJlbGVhc2UKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDEgMTE6Mjc6MjIKICAgICBbdmVyc2lvbi5oXQogICAgIG9wZW5zc2ggNC4zCiAtIChkam0pIFJlbGVhc2UgT3BlblNTSCA0LjNwMQoKMjAwNjAxMzEKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8yMCAxMToyMTo0NQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgLSB3b3JkIGNoYW5nZSwgYWdyZWVkIHcvIG1hcmt1cwogICAgIC0gY29uc2lzdGVuY3kgZml4ZXMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMjUgMDk6MDQ6MzQKICAgICBbc3NoZC44XQogICAgIG1vdmUgdGhlIG9wdGlvbnMgZGVzY3JpcHRpb24gdXAgdGhlIHBhZ2UsIGFuZCBhIGZldyBhZGRpdGlvbmFsIHR3ZWFrcwogICAgIHdoaWxzdCBpbiBoZXJlOwogICAgIG9rIG1hcmt1cwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8yNSAwOTowNzoyMgogICAgIFtzc2hkLjhdCiAgICAgbW92ZSBzdWJzZWN0aW9ucyB0byBmdWxsIHNlY3Rpb25zOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8yNiAwODo0Nzo1NgogICAgIFtzc2guMV0KICAgICBhZGQgYSBzZWN0aW9uIG9uIHZlcmlmeWluZyBob3N0IGtleXMgaW4gZG5zOwogICAgIHdyaXR0ZW4gd2l0aCBhIGxvdCBvZiBoZWxwIGZyb20gamFrb2I7CiAgICAgZmVlZGJhY2sgZHR1Y2tlci9tYXJrdXM7CiAgICAgb2sgbWFya3VzCiAgIC0gcmV5a0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8zMCAxMjoyMjoyMgogICAgIFtjaGFubmVscy5jXQogICAgIG1hcmsgY2hhbm5lbCBhcyB3cml0ZSBmYWlsZWQgb3IgZGVhZCBpbnN0ZWFkIG9mIHJlYWQgZmFpbGVkIG9uIGVycm9yCiAgICAgb2YgdGhlIGNoYW5uZWwgb3V0cHV0IGZpbHRlci4KICAgICBvayBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMwIDEzOjM3OjQ5CiAgICAgW3NzaC4xXQogICAgIHJlbW92ZSBhbiBpbmNvcnJlY3Qgc2VudGVuY2U7CiAgICAgcmVwb3J0ZWQgYnkgcm91bWVuIHBldHJvdjsKICAgICBvayBkam0gbWFya3VzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMxIDEwOjE5OjAyCiAgICAgW21pc2MuYyBtaXNjLmggc2NwLmMgc2Z0cC5jXQogICAgIGZpeCBsb2NhbCBhcmJpdHJhcnkgY29tbWFuZCBleGVjdXRpb24gdnVsbmVyYWJpbGl0eSBvbiBsb2NhbC9sb2NhbCBhbmQKICAgICByZW1vdGUvcmVtb3RlIGNvcGllcyAoQ1ZFLTIwMDYtMDIyNSwgYnogIzEwOTQpLCBwYXRjaCBieQogICAgIHQ4bSBBVCBjZW50cnVtLmN6LCBwb2xpc2hlZCBieSBkdHVja2VyQCBhbmQgbXlzZWxmOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMxIDEwOjM1OjQzCiAgICAgW3NjcC5jXQogICAgICJzY3AgYSBiIGMiIHNob3VsZG4ndCBjbG9iYmVyICJjIiB3aGVuIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSwgcmVwb3J0IGFuZAogICAgIGZpeCBmcm9tIGJpb3JuQDsgb2sgbWFya3VzQAogLSAoZGptKSBTeW5jIHJlZ3Jlc3MgdGVzdHMgdG8gT3BlbkJTRDoKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzEwIDEwOjIwOjM5CiAgICAgW3JlZ3Jlc3MvZm9yd2FyZGluZy5zaF0KICAgICBSZWdyZXNzIHRlc3QgZm9yIENsZWFyQWxsRm9yd2FyZGluZ3MgKGJ6ICM5OTQpOyBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8yNSAwOTo1NDowOQogICAgIFtyZWdyZXNzL211bHRpcGxleC5zaF0KICAgICBEb24ndCBjYWxsIGNsZWFudXAgaW4gbXVsdGlwbGV4IGFzIHRlc3QtZXhlYyB3aWxsIGNsZWFudXAgYW55d2F5CiAgICAgZm91bmQgYnkgdGltQCwgb2sgZGptQAogICAgIE5CLiBJRCBzeW5jIG9ubHksIHdlIGFscmVhZHkgaGFkIHRoaXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjAgMjM6MTQ6MTUKICAgICBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdCiAgICAgZm9yY2UgYWRkcmVzc2ZhbWlseT1pbmV0IGZvciB0ZXN0cywgdW5icmVha2luZyBkeW5hbWljLWZvcndhcmQgcmVncmVzcyBmb3IKICAgICByZWNlbnRseSBjb21taXR0ZWQgbmMgU09DS1M1IGNoYW5nZXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjQgMDQ6MTA6NTQKICAgICBbcmVncmVzcy90cnktY2lwaGVycy5zaF0KICAgICBvb3BzLCBuZXcgYXJjZm91ciBtb2RlcyBoZXJlIHRvbwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8zMCAxMTowMjozNwogICAgIFtyZWdyZXNzL3NjcC5zaF0KICAgICBhbGxvdyBTVURPPXN1ZG87IGZyb20gQWxleGFuZGVyIEJsdWhtCiAgIC0gZ3J1bmtAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMTQgMjE6MjU6NTYKICAgICBbcmVncmVzcy9hZ2VudC1nZXRwZWVyZWlkLnNoXQogICAgIGFsbCBvdGhlciBzY3JpcHRzIGluIHRoaXMgZGlyIHVzZSAkU1VETywgbm90ICdzdWRvJywgc28gcHVsbCB0aGlzIGV2ZW4KICAgICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNCAwNDozNjozOQogICAgIFtyZWdyZXNzL3NjcC1zc2gtd3JhcHBlci5zaF0KICAgICBGaXggYXNzdW1wdGlvbiBhYm91dCBob3cgbWFueSBhcmdzIHNjcCB3aWxsIHBhc3M7IG9rIGRqbUAKICAgICBOQi4gSUQgc3luYyBvbmx5LCB3ZSBhbHJlYWR5IGhhZCB0aGlzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzI3IDA2OjQ5OjIxCiAgICAgW3NjcC5zaF0KICAgICByZWdyZXNzIHRlc3QgZm9yIGxvY2FsIHRvIGxvY2FsIHNjcCBjb3BpZXM7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzMxIDEwOjIzOjIzCiAgICAgW3NjcC5zaF0KICAgICByZWdyZXNzaW9uIHRlc3QgZm9yIENWRS0yMDA2LTAyMjUgd3JpdHRlbiBieSBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8zMSAxMDozNjozMwogICAgIFtzY3Auc2hdCiAgICAgcmVncmVzcyB0ZXN0IGZvciAic2NwIGEgYiBjIiB3aGVyZSAiYyIgaXMgbm90IGEgZGlyZWN0b3J5CgoyMDA2MDEyOQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuc3NoZC5pbml0LmluXSBCdWcgIzExNDQ6IFVzZSAvYmluL3NoIGZvciB0aGUKICAgb3BlbnNzaGQuaW5pdCBzY3JpcHQgaW50ZXJwcmV0dGVyIGlmIC9zYmluL3NoIGRvZXMgbm90IGV4aXN0LiAgb2sgdGltQAoKMjAwNjAxMjAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTUgMTc6Mzc6MDUKICAgICBbc3NoLjFdCiAgICAgY29ycmVjdGlvbiBmcm9tIGRlcmFhZHQKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTggMTA6NTM6MjkKICAgICBbc3NoLjFdCiAgICAgYWRkIGEgc2VjdGlvbiBvbiBzc2gtYmFzZWQgdnBuLCBiYXNlZCBvbiByZXlrJ3MgUkVBRE1FLnR1bjsKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzIwIDAwOjE0OjU1CiAgICAgW3NjcC4xIHNzaC4xIHNzaF9jb25maWcuNSBzZnRwLjFdCiAgICAgRG9jdW1lbnQgUmVrZXlMaW1pdC4gIEJhc2VkIG9uIHBhdGNoIGZyb20gamFuLml2ZW4gYXQgY2Vybi5jaCBmcm9tIG1pbmRyb3QKICAgICAjMTA1NiB3aXRoIGZlZWRiYWNrIGZyb20gam1jLCBkam0gYW5kIG1hcmt1czsgb2sgam1jQCBkam1ACgoyMDA2MDExNAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA2IDEzOjI3OjMyCiAgICAgW3NzaC4xXQogICAgIHdlZWQgb3V0IHNvbWUgZHVwbGljYXRlIGluZm8gaW4gdGhlIGtub3duX2hvc3RzIEZJTEVTIGVudHJpZXM7CiAgICAgb2sgZGptCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA2IDEzOjI5OjEwCiAgICAgW3NzaC4xXQogICAgIGZpbmFsIHJvdW5kIG9mIHdoYWNraW5nIEZJTEVTIGZvciBkdXBsaWNhdGUgaW5mbywgYW5kIHNvbWUgY29uc2lzdGVuY3kKICAgICBmaXhlczsKICAgICBvayBkam0KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTIgMTQ6NDQ6MTIKICAgICBbc3NoLjFdCiAgICAgc3BsaXQgc2VjdGlvbnMgb24gdGNwIGFuZCB4MTEgZm9yd2FyZGluZyBpbnRvIHR3byBzZWN0aW9ucy4KICAgICBhZGQgYW4gZXhhbXBsZSBpbiB0aGUgdGNwIHNlY3Rpb24sIGJhc2VkIG9uIHN0aCBpIHdyb3RlIGZvciBzc2ggZmFxOwogICAgIGhlbHAgKyBvazogZGptIG1hcmt1cyBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzEyIDE4OjQ4OjQ4CiAgICAgW3NzaC4xXQogICAgIHJlZmVyIHRvIGBUQ1AnIHJhdGhlciB0aGFuIGBUQ1AvSVAnIGluIHRoZSBjb250ZXh0IG9mIGNvbm5lY3Rpb24KICAgICBmb3J3YXJkaW5nOwogICAgIG9rIG1hcmt1cwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xMiAyMjoyMDowMAogICAgIFtzc2hkLjhdCiAgICAgcmVmZXIgdG8gVENQIGZvcndhcmRpbmcsIHJhdGhlciB0aGFuIFRDUC9JUCBmb3J3YXJkaW5nOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xMiAyMjoyNjowMgogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgcmVmZXIgdG8gVENQIGZvcndhcmRpbmcsIHJhdGhlciB0aGFuIFRDUC9JUCBmb3J3YXJkaW5nOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xMiAyMjozNDoxMgogICAgIFtzc2guMV0KICAgICBiYWNrIG91dCBhIHNlbnRlbmNlIC0gQVVUSEVOVElDQVRJT04gYWxyZWFkeSBkb2N1bWVudHMgdGhpczsKCjIwMDYwMTA5CiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBNYWtlIHNzaGQgc2VydmljZSBkZXBlbmQgb24KICAgdGNwaXAgc2VydmljZSBzbyBpdCdzIGFsd2F5cyBzdGFydGVkIGFmdGVyIElQIGlzIHVwLiAgUGF0Y2ggZnJvbQogICB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgoKMjAwNjAxMDYKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMyAxNjozMToxMAogICAgIFtzc2guMV0KICAgICBtb3ZlIEZJTEVTIHRvIGEgLWNvbXBhY3QgbGlzdCwgYW5kIG1ha2UgZWFjaCBmaWxlcyBhbiBpdGVtIGluIHRoYXQgbGlzdC4KICAgICB0aGlzIGF2b2lkcyBuYXN0bHkgbGluZSB3cmFwIHdoZW4gd2UgaGF2ZSBsb25nIHBhdGhuYW1lcywgYW5kIHRyZWF0cwogICAgIGVhY2ggZmlsZSBhcyBhIHNlcGFyYXRlIGl0ZW07CiAgICAgcmVtb3ZlIHRoZSAuUGEgdG9vLCBzaW5jZSBpdCBpcyB1c2VsZXNzLgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMyAxNjozNTozMAogICAgIFtzc2guMV0KICAgICB1c2UgYSBsYXJnZXIgd2lkdGggZm9yIHRoZSBFTlZJUk9OTUVOVCBsaXN0OwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMyAxNjo1MjozNgogICAgIFtzc2guMV0KICAgICBwdXQgRklMRVMgaW4gc29tZSBzb3J0IG9mIG9yZGVyOiBzb3J0IGJ5IHBhdGhuYW1lCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAzIDE2OjU1OjE4CiAgICAgW3NzaC4xXQogICAgIHR3ZWFrIHRoZSBkZXNjcmlwdGlvbiBvZiB+Ly5zc2gvZW52aXJvbm1lbnQKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDQgMTg6NDI6NDYKICAgICBbc3NoLjFdCiAgICAgY2hvcCBvdXQgc29tZSBkdXBsaWNhdGlvbiBpbiB0aGUgLntyLHN9aG9zdHMve2gsc2h9b3N0cy5lcXVpdiBGSUxFUwogICAgIGVudHJpZXM7CiAgICAgb2sgbWFya3VzCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA0IDE4OjQ1OjAxCiAgICAgW3NzaC4xXQogICAgIHJlbW92ZSAuWHIncyB0byByc2goMSkgYW5kIHRlbG5ldCgxKTogdGhleSBhcmUgaGFyZGx5IG5lZWRlZDsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDQgMTk6NDA6MjQKICAgICBbc3NoLjFdCiAgICAgKy5YciBzc2gta2V5c2NhbiAxICwKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDQgMTk6NTA6MDkKICAgICBbc3NoLjFdCiAgICAgLS5YciBnemlwIDEgLAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wNSAyMzo0Mzo1MwogICAgIFttaXNjLmNdCiAgICAgY2hlY2sgdGhhdCBzdGRpbyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBhY3R1YWxseSBjbG9zZWQgYmVmb3JlIGNsb2JiZXJpbmcKICAgICB0aGVtIGluIHNhbml0aXNlX3N0ZGZkKCkuIHByb2JsZW1zIG9jY3VycmVkIHdoZW4gYSBsb3dlciBudW1iZXJlZCBmZCB3YXMKICAgICBjbG9zZWQsIGJ1dCBoaWdoZXIgb25lcyB3ZXJlbid0LiBzcG90dGVkIGJ5LCBhbmQgcGF0Y2ggdGVzdGVkIGJ5CiAgICAgRnLpZOlyaWMgT2xpdmnpCgoyMDA2MDEwMwogLSAoZGptKSBbY2hhbm5lbHMuY10gY2xlYW4gdXAgaGFybWxlc3MgbWVyZ2UgZXJyb3IsIGZyb20gcmV5a0AKCjIwMDYwMTAzCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDIgMTc6MDk6NDkKICAgICBbc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgc29tZSBjb3JyZWN0aW9ucyBmcm9tIG1pY2hhZWwga251ZHNlbjsKCjIwMDYwMTAyCiAtIChkam0pIFtSRUFETUUudHVuXSBBZGQgUkVBRE1FLnR1biwgbWlzc2VkIGR1cmluZyBzeW5jIG9mIHR1big0KSBzdXBwb3J0CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMzEgMTA6NDY6MTcKICAgICBbc3NoLjFdCiAgICAgbWVyZ2UgdGhlICJMT0dJTiBTRVNTSU9OIEFORCBSRU1PVEUgRVhFQ1VUSU9OIiBhbmQgIlNFUlZFUgogICAgIEFVVEhFTlRJQ0FUSU9OIiBzZWN0aW9ucyBpbnRvICJBVVRIRU5USUNBVElPTiI7CiAgICAgc29tZSByZXdvcmRpbmcgZG9uZSB0byBtYWtlIHRoZSB0ZXh0IHJlYWQgYmV0dGVyLCBwbHVzIHNvbWUKICAgICBpbXByb3ZlbWVudHMgZnJvbSBkam07CiAgICAgb2sgZGptCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzMxIDEzOjQ0OjA0CiAgICAgW3NzaC4xXQogICAgIGNsZWFuIHVwIEVOVklST05NRU5UIGEgbGl0dGxlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMSAxMzo0NToxOQogICAgIFtzc2guMV0KICAgICAuTm0gZG9lcyBub3QgcmVxdWlyZSBhbiBhcmd1bWVudDsKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAxIDA4OjU5OjI3CiAgICAgW2luY2x1ZGVzLmggbWlzYy5jXQogICAgIG1vdmUgPG5ldC9pZi5oPjsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDEgMTA6MDg6NDgKICAgICBbbWlzYy5jXQogICAgIG5vIHRyYWlsaW5nICJcbiIgZm9yIGRlYnVnKCkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDIgMDE6MjA6MzEKICAgICBbc2Z0cC1jbGllbnQuYyBzZnRwLWNvbW1vbi5oIHNmdHAtc2VydmVyLmNdCiAgICAgdXNlIGEgY29tbW9uIG1heC4gcGFja2V0IGxlbmd0aCwgbm8gYmluYXJ5IGNoYW5nZQogICAtIHJleWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDIgMDc6NTM6NDQKICAgICBbbWlzYy5jXQogICAgIGNsYXJpZnkgdHVuKDQpIG9wZW5pbmcgLSBzZXQgdGhlIG1vZGUgYW5kIGJyaW5nIHRoZSBpbnRlcmZhY2UgdXAuIGFsc28KICAgICAocmUpc2V0cyB0aGUgdHVuKDQpIGxheWVyIDIgTElOSzAgZmxhZyBmb3IgZXhpc3RpbmcgdHVubmVsIGludGVyZmFjZXMuCiAgICAgc3VnZ2VzdGVkIGFuZCBvayBieSBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAyIDEyOjMxOjA2CiAgICAgW3NzaC4xXQogICAgIHN0YXJ0IHRvIGN1dCBzb21lIGR1cGxpY2F0ZSBpbmZvIGZyb20gRklMRVM7CiAgICAgaGVscC9vayBkam0KCjIwMDYwMTAxCiAtIChkam0pIFtNYWtlZmlsZS5pbiBjb25maWd1cmUuYWMgaW5jbHVkZXMuaCBtaXNjLmNdCiAgICAgICAgIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jIG9wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmhdIEFkZCBzdXBwb3J0CiAgICAgICAgIGZvciB0dW5uZWwgZm9yd2FyZGluZyBmb3IgRnJlZUJTRCBhbmQgTmV0QlNELiBOZXRCU0QncyBzdXBwb3J0IGlzCiAgICAgICAgIGxpbWl0ZWQgdG8gSVB2NCB0dW5uZWxzIG9ubHksIGFuZCBtb3N0IHZlcnNpb25zIGRvbid0IHN1cHBvcnQgdGhlCiAgICAgICAgIHRhcCg0KSBkZXZpY2UgYXQgYWxsLgogLSAoZGptKSBbY29uZmlndXJlLmFjXSBGaXggbGludXgvaWZfdHVuLmggdGVzdAogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uY10gTGludXggbmVlZHMgbGludXgvaWYuaCB0b28KCjIwMDUxMjI5CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzI4IDIyOjQ2OjA2CiAgICAgW2Nhbm9ob3N0LmMgY2hhbm5lbHMuYyBjbGllbnRsb29wLmNdCiAgICAgdXNlICdicmVhay1pbicgZm9yIGNvbnNpc3RlbmN5OyBvayBkZXJhYWR0QCBvayBhbmQgaW5wdXQgam1jQAogICAtIHJleWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMzAgMTU6NTY6MzcKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuY10KICAgICBhZGQgY2hhbm5lbCBvdXRwdXQgZmlsdGVyIGludGVyZmFjZS4KICAgICBvayBkam1ALCBzdWdnZXN0ZWQgYnkgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMCAxNjo1OTowMAogICAgIFtzZnRwLjFdCiAgICAgZG8gbm90IHN1Z2dlc3QgdGhhdCBpbnRlcmFjdGl2ZSBhdXRoZW50aWNhdGlvbiB3aWxsIHdvcmsKICAgICB3aXRoIHRoZSAtYiBmbGFnOwogICAgIGJhc2VkIG9uIGEgZGlmZiBmcm9tIGpvaG4gbC4gc2NhcmZvbmU7CiAgICAgb2sgZGptCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMSAwMTozODo0NQogICAgIFtzc2guMV0KICAgICBkb2N1bWVudCAtTU07IG9rIGRqbUAKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmMgb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uaCBjb25maWd1cmUuYWNdCiAgIFtzZXJ2ZXJsb29wLmMgc3NoLmMgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW5dCiAgIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBJbXBsZW1lbnQgdHVuKDQpIGZvcndhcmRpbmcgCiAgIGNvbXBhdGFiaWxpdHkgc3VwcG9ydCBmb3IgTGludXgsIGRpZmYgZnJvbSByZXlrQAogLSAoZGptKSBbY29uZmlndXJlLmFjXSBEaXNhYmxlIExpbnV4IHR1big0KSBjb21wYXQgY29kZSBpZiBsaW51eC90dW4uaCBkb2VzCiAgIG5vdCBleGlzdAogLSAoZGptKSBbY29uZmlndXJlLmFjXSBvb3BzLCBtYWtlIHRoYXQgbGludXgvaWZfdHVuLmgKCjIwMDUxMjI5CiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbl0gZ3JlcCBmb3IgJFNTSERVSUQgaW5zdGVhZCBvZiAkU1NIREdJRCBvbiAvZXRjL3Bhc3N3ZAoKMjAwNTEyMjQKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMCAyMTo1OTo0MwogICAgIFtzc2guMV0KICAgICBtZXJnZSB0aGUgc2VjdGlvbnMgb24gcHJvdG9jb2xzIDEgYW5kIDIgaW50byBvbmUgc2VjdGlvbiBvbgogICAgIGF1dGhlbnRpY2F0aW9uOwogICAgIGZlZWRiYWNrIGRqbSBkdHVja2VyCiAgICAgb2sgZGVyYWFkdCBtYXJrdXMgZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMCAyMjowMjo1MAogICAgIFtzc2guMV0KICAgICAuU3MgLT4gLlNoOiBzdWJzZWN0aW9ucyBoYXZlIG5vdCBtYWRlIHRoaXMgcGFnZSBtb3JlIHJlYWRhYmxlCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIwIDIyOjA5OjQxCiAgICAgW3NzaC4xXQogICAgIG1vdmUgaW5mbyBvbiBzc2ggcmV0dXJuIHZhbHVlcyBhbmQgY29uZmlnIGZpbGVzIHVwIGludG8gdGhlIG1haW4KICAgICBkZXNjcmlwdGlvbjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjEgMTE6NDg6MTYKICAgICBbc3NoLjFdCiAgICAgLUwgYW5kIC1SIGRlc2NyaXB0aW9ucyBhcmUgbm93IGFib3ZlLCBub3QgYmVsb3csIH5DIGRlc2NyaXB0aW9uOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMSAxMTo1NzoyNQogICAgIFtzc2guMV0KICAgICBvcHRpb25zIG5vdyBkZXNjcmliZWQgYGFib3ZlJywgcmF0aGVyIHRoYW4gYGxhdGVyJzsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjEgMTI6NTM6MzEKICAgICBbc3NoLjFdCiAgICAgLVkgZG9lcyBYMTEgZm9yd2FyZGluZyB0b287CiAgICAgb2sgbWFya3VzCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMSAyMjo0NDoyNgogICAgIFtzc2hkLjhdCiAgICAgY2xhcmlmeSBwcmVjZWRlbmNlIG9mIC1wLCBQb3J0LCBMaXN0ZW5BZGRyZXNzOyBvayBhbmQgaGVscCBqbWNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIyIDEwOjMxOjQwCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBwdXQgdGhlIGRlc2NyaXB0aW9uIG9mICJVc2VQcml2aWxlZ2VkUG9ydCIgaW4gdGhlIGNvcnJlY3QgcGxhY2U7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIyIDExOjIzOjQyCiAgICAgW3NzaC4xXQogICAgIGV4cGFuZCB0aGUgZGVzY3JpcHRpb24gb2YgLXcgc29tZXdoYXQ7CiAgICAgaGVscC9vayByZXlrCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIzIDE0OjU1OjUzCiAgICAgW3NzaC4xXQogICAgIC0gc3luYyB0aGUgZGVzY3JpcHRpb24gb2YgLWUgdy8gc3lub3BzaXMKICAgICAtIHNpbXBsaWZ5IHRoZSBkZXNjcmlwdGlvbiBvZiAtSQogICAgIC0gbm90ZSB0aGF0IC1JIGlzIG9ubHkgYXZhaWxhYmxlIGlmIHN1cHBvcnQgY29tcGlsZWQgaW4sIGFuZCB0aGF0IGl0CiAgICAgaXNuJ3QgYnkgZGVmYXVsdAogICAgIGZlZWRiYWNrL29rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjMgMjM6NDY6MjMKICAgICBbc3NoLjFdCiAgICAgbGVzcyBtYXJrIHVwIGZvciAtYzsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjQgMDI6Mjc6NDEKICAgICBbc2Vzc2lvbi5jIHNzaGQuY10KICAgICBlbGltaW5hdGUgc29tZSBjb2RlIGR1cGxpY2F0ZWQgaW4gcHJpdnNlcCBhbmQgbm9uLXByaXZzZXAgcGF0aHMsIGFuZAogICAgIGV4cGxpY2l0bHkgY2xlYXIgU0lHQUxSTSBoYW5kbGVyOyAiZ3Jvb3Z5IiBkZXJhYWR0QAoKMjAwNTEyMjAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSByZXlrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzEzIDE1OjAzOjAyCiAgICAgW3NlcnZlcmxvb3AuY10KICAgICBpZiBmb3JjZWRfdHVuX2RldmljZSBpcyBub3Qgc2V0LCBpdCBpcyAtMSBhbmQgbm90IFNTSF9UVU5JRF9BTlkKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTYgMTg6MDc6MDgKICAgICBbc3NoLjFdCiAgICAgbW92ZSB0aGUgb3B0aW9uIGRlc2NyaXB0aW9ucyB1cCB0aGUgcGFnZTogc3RhcnQgb2YgYSByZXN0cnVjdHVyZTsKICAgICBvayBtYXJrdXMgZGVyYWFkdAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNiAxODowODo1MwogICAgIFtzc2guMV0KICAgICBzaW1wbGlmeSBhIHNlbnRlbmNlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xNiAxODoxMjoyMgogICAgIFtzc2guMV0KICAgICBtYWtlIHRoZSBkZXNjcmlwdGlvbiBvZiAtYyBhIGxpdHRsZSBuaWNlcjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTYgMTg6MTQ6NDAKICAgICBbc3NoLjFdCiAgICAgc2lnbnBvc3QgdGhlIHByb3RvY29sIHNlY3Rpb25zOwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTcgMjE6MTM6MDUKICAgICBbc3NoX2NvbmZpZy41IHNlc3Npb24uY10KICAgICBzcGVsbGluZzogZm93YXJkaW5nLCBmb3dhcmRlZAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTcgMjE6MzY6NDIKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHNwZWxsaW5nOiBpbnRlbnRlZCAtPiBpbnRlbmRlZAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjAgMDQ6NDE6MDcKICAgICBbc3NoLmNdCiAgICAgZXhpdCgyNTUpIG9uIGVycm9yIHRvIG1hdGNoIGRlc2NyaXB0aW9uIGluIHNzaCgxKTsgYnogIzExMzc7IG9rIGRlcmFhZHRACgoyMDA1MTIxOQogLSAoZHR1Y2tlcikgW2NpcGhlci1hZXMuYyBjaXBoZXItY3RyLmMgY2lwaGVyLmMgY29uZmlndXJlLmFjCiAgIG9wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmhdIENoZWNrIGZvciBhbmQgd29yayBhcm91bmQgYnJva2VuIEFFUwogICBjaXBoZXJzID4xMjhiaXQgb24gKHNvbWUpIFNvbGFyaXMgMTAgc3lzdGVtcy4gIG9rIGRqbUAKCjIwMDUxMjE3CiAtIChkdHVja2VyKSBbZGVmaW5lcy5oXSBIUC1VWCBzeXN0ZW0gaGVhZGVycyBkZWZpbmUgIllFUyIgYW5kICJOTyIgd2hpY2gKICAgc2NwLmMgYWxzbyB1c2VzLCBzbyB1bmRlZiB0aGVtIGhlcmUuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jXSBCdWcgIzExMzM6IE91cgogICBzbnByaW50ZiByZXBsYWNlbWVudCBjYW4gaGF2ZSBhIGNvbmZsaWN0aW5nIGRlY2xhcmF0aW9uIGluIEhQLVVYJ3Mgc3lzdGVtCiAgIGhlYWRlcnMgKGNvbnN0IHZzLiBubyBjb25zdCkgc28gd2Ugbm93IGNoZWNrIGZvciBhbmQgd29yayBhcm91bmQgaXQuICBQYXRjaAogICBmcm9tIHRoZSBkeW5hbWljIGR1byBvZiBEYXZpZCBMZW9uYXJkIGFuZCBUZWQgUGVyY2l2YWwuCgoyMDA1MTIxNAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYyAocmVncmVzcy8pCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMCAwNDozNjozOQogICAgIFtyZWdyZXNzL3NjcC1zc2gtd3JhcHBlci5zaF0KICAgICBGaXggYXNzdW1wdGlvbiBhYm91dCBob3cgbWFueSBhcmdzIHNjcCB3aWxsIHBhc3M7IG9rIGRqbUAKCjIwMDUxMjEzCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMzAgMTE6MTg6MjcKICAgICBbc3NoLjFdCiAgICAgdGltZXpvbmUgLT4gdGltZSB6b25lCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzMwIDExOjQ1OjIwCiAgICAgW3NzaC4xXQogICAgIGF2b2lkIGFtYmlndWl0aWVzIGluIGRlc2NyaWJpbmcgVFo7CiAgICAgb2sgZGptQAogICAtIHJleWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDYgMjI6Mzg6MjgKICAgICBbYXV0aC1vcHRpb25zLmMgYXV0aC1vcHRpb25zLmggY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuY10KICAgICBbbWlzYy5jIG1pc2MuaCByZWFkY29uZi5jIHJlYWRjb25mLmggc2NwLmMgc2VydmNvbmYuYyBzZXJ2Y29uZi5oXQogICAgIFtzZXJ2ZXJsb29wLmMgc2Z0cC5jIHNzaC4xIHNzaC5jIHNzaF9jb25maWcgc3NoX2NvbmZpZy41IHNzaGNvbm5lY3QuY10KICAgICBbc3NoY29ubmVjdC5oIHNzaGQuOCBzc2hkX2NvbmZpZyBzc2hkX2NvbmZpZy41XQogICAgIEFkZCBzdXBwb3J0IGZvciB0dW4oNCkgZm9yd2FyZGluZyBvdmVyIE9wZW5TU0gsIGJhc2VkIG9uIGFuIGlkZWEgYW5kCiAgICAgaW5pdGlhbCBjaGFubmVsIGNvZGUgYml0cyBieSBtYXJrdXNALiBUaGlzIGlzIGEgc2ltcGxlIGFuZCBlYXN5IHdheSB0bwogICAgIHVzZSBPcGVuU1NIIGZvciBhZCBob2MgdmlydHVhbCBwcml2YXRlIG5ldHdvcmsgY29ubmVjdGlvbnMsIGUuZy4KICAgICBhZG1pbmlzdHJhdGl2ZSB0dW5uZWxzIG9yIHNlY3VyZSB3aXJlbGVzcyBhY2Nlc3MuIEl0J3MgYmFzZWQgb24gYSBuZXcKICAgICBzc2ggY2hhbm5lbCBhbmQgd29ya3Mgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcgVENQIGZvcndhcmRpbmcgc3VwcG9ydCwKICAgICBleGNlcHQgdGhhdCBpdCBkZXBlbmRzIG9uIHRoZSB0dW4oNCkgbmV0d29yayBpbnRlcmZhY2Ugb24gYm90aCBlbmRzIG9mCiAgICAgdGhlIGNvbm5lY3Rpb24gZm9yIGxheWVyIDIgb3IgbGF5ZXIgMyB0dW5uZWxpbmcuIFRoaXMgZGlmZiBhbHNvIGFkZHMKICAgICBzdXBwb3J0IGZvciBMb2NhbENvbW1hbmQgaW4gdGhlIHNzaCgxKSBjbGllbnQuCiAgICAgb2sgZGptQCwgbWFya3VzQCwgam1jQCAobWFucGFnZXMpLCB0ZXN0ZWQgYW5kIGRpc2N1c3NlZCB3aXRoIG90aGVycwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wNyAwMzo1MjoyMgogICAgIFtjbGllbnRsb29wLmNdCiAgICAgcmV5ayBmb3Jnb3QgdG8gY29tcGlsZSB3aXRoIC1XZXJyb3IgKG1pc3NpbmcgaGVhZGVyKQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wNyAxMDo1MjoxMwogICAgIFtzc2guMV0KICAgICAtIGF2b2lkIGxpbmUgc3BsaXQgaW4gU1lOT1BTSVMKICAgICAtIGFkZCBhcmdzIHRvIC13CiAgICAgLSBraWxsIHRyYWlsaW5nIHdoaXRlc3BhY2UKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDggMTQ6NTk6NDQKICAgICBbc3NoLjEgc3NoX2NvbmZpZy41XQogICAgIG1ha2UgYCFjb21tYW5kJyBhIGxpdHRsZSBjbGVhcmVyOwogICAgIG9rIHJleWsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDggMTU6MDY6MjkKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGtlZXAgb3B0aW9ucyBpbiBvcmRlcjsKICAgLSByZXlrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzA4IDE4OjM0OjExCiAgICAgW2F1dGgtb3B0aW9ucy5jIGluY2x1ZGVzLmggbWlzYy5jIG1pc2MuaCByZWFkY29uZi5jIHNlcnZjb25mLmNdCiAgICAgW3NlcnZlcmxvb3AuYyBzc2guYyBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNSBjb25maWd1cmUuYWNdCiAgICAgdHdvIGNoYW5nZXMgdG8gdGhlIG5ldyBzc2ggdHVubmVsIHN1cHBvcnQuIHRoaXMgYnJlYWtzIGNvbXBhdGliaWxpdHkKICAgICB3aXRoIHRoZSBpbml0aWFsIGNvbW1pdCBidXQgaXMgcmVxdWlyZWQgZm9yIGEgcG9ydGFibGUgYXBwcm9hY2guCiAgICAgLSBtYWtlIHRoZSB0dW5uZWwgaWQgdV9pbnQgYW5kIHBsYXRmb3JtIGZyaWVuZGx5LCB1c2UgcHJlZGVmaW5lZCB0eXBlcy4KICAgICAtIHN1cHBvcnQgY29uZmlndXJhdGlvbiBvZiBsYXllciAyIChldGhlcm5ldCkgb3IgbGF5ZXIgMwogICAgIChwb2ludC10by1wb2ludCwgZGVmYXVsdCkgbW9kZXMuIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB1c2luZyB0aGUKICAgICBUdW5uZWwgKHllc3xwb2ludC10by1wb2ludHxldGhlcm5ldHxubykgb3B0aW9uIGlzIHNzaF9jb25maWcoNSkgYW5kCiAgICAgcmVzdHJpY3RlZCBieSB0aGUgUGVybWl0VHVubmVsICh5ZXN8cG9pbnQtdG8tcG9pbnR8ZXRoZXJuZXR8bm8pIG9wdGlvbgogICAgIGluIHNzaGRfY29uZmlnKDUpLgogICAgIG9rIGRqbUAsIG1hbiBwYWdlIGJpdHMgYnkgam1jQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wOCAyMTozNzo1MAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgbmV3IHNlbnRlbmNlLCBuZXcgbGluZTsKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTIgMTM6NDY6MTgKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIHNlc3Npb24uY10KICAgICBtYWtlIHN1cmUgcHJvdG9jb2wgbWVzc2FnZXMgZm9yIGludGVybmFsIGNoYW5uZWxzIGFyZSBpZ25vcmVkLgogICAgIGFsbG93IGFkanVzdCBtZXNzYWdlcyBmb3Igbm9uLW9wZW4gY2hhbm5lbHM7IHdpdGggYW5kIG9rIGRqbUAKIC0gKGRqbSkgW21pc2MuY10gRGlzYWJsZSB0dW5uZWwgY29kZSBmb3Igbm9uLU9wZW5CU0QgKGZvciBub3cpLCBlbmFibGUKICAgYWdhaW4gYnkgcHJvdmlkaW5nIGEgc3lzX3R1bl9vcGVuKCkgZnVuY3Rpb24gZm9yIHlvdXIgcGxhdGZvcm0gYW5kIAogICBzZXR0aW5nIHRoZSBDVVNUT01fU1lTX1RVTl9PUEVOIGRlZmluZS4gTW9yZSB3b3JrIGlzIHJlcXVpcmVkIHRvIG1hdGNoIAogICBPcGVuQlNEJ3MgdHVubmVsIHByb3RvY29sLCB3aGljaCBwcmVwZW5kcyB0aGUgYWRkcmVzcyBmYW1pbHkgdG8gdGhlIAogICBwYWNrZXQKCjIwMDUxMjAxCiAtIChkam0pIFtlbnZwYXNzLnNoXSBSZW1vdmUgcmVncmVzcyBzY3JpcHQgdGhhdCB3YXMgYWNjaWRlbnRhbGx5IGNvbW1pdHRlZCAKICAgaW4gdG9wIGxldmVsIGRpcmVjdG9yeSBhbmQgbm90IG5vdGljZWQgZm9yIG92ZXIgYSB5ZWFyIDopCgoyMDA1MTEyOQogLSAodGltKSBbc3NoLWtleWdlbi5jXSBNb3ZlIERTQSBsZW5ndGggdGVzdCBhZnRlciBzZXR0aW5nIGRlZmF1bHQgd2hlbgogICBiaXRzID09IDAuCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8yOSAwMjowNDo1NQogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgUG9wdWxhdGUgZGVmYXVsdCBrZXkgc2l6ZXMgYmVmb3JlIGNoZWNraW5nIHRoZW07IGZyb20gJiBvayB0aW1ACiAtICh0aW0pIFtjb25maWd1cmUuYWMgc3NoZC44XSBFbmFibGUgbG9ja2VkIGFjY291bnQgY2hlY2sgKGEgIipMSyoiIHN0cmluZykKICAgZm9yIFVuaXhXYXJlLgoKMjAwNTExMjgKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3llcy1oZWFkLnNoXSBXb3JrIGFyb3VuZCBicmVha2FnZSBjYXVzZWQgYnkgc29tZQogICB2ZXJzaW9ucyBvZiBHTlUgaGVhZC4gIEJhc2VkIG9uIHBhdGNoIGZyb20gemFwcGFtYW4gYXQgYnVyYXBoYWxpbnV4Lm9yZwogLSAoZHR1Y2tlcikgW2luY2x1ZGVzLmhdIEJ1ZyAjMTEyMjogX19VU0VfR05VIGlzIGEgZ2xpYmMgaW50ZXJuYWwgbWFjcm8sIHVzZQogICBfR05VX1NPVVJDRSBpbnN0ZWFkLiAgUGF0Y2ggZnJvbSB0OG0gYXQgY2VudHJ1bS5jei4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzI4IDA1OjE2OjUzCiAgICAgW3NzaC1rZXlnZW4uMSBzc2gta2V5Z2VuLmNdCiAgICAgRW5mb3JjZSBEU0Ega2V5IGxlbmd0aCBvZiBleGFjdGx5IDEwMjQgYml0cyB0byBjb21wbHkgd2l0aCBGSVBTLTE4Ni0yLAogICAgIGluY3JlYXNlIG1pbnVtdW0gUlNBIGtleSBzaXplIHRvIDc2OCBiaXRzIGFuZCB1cGRhdGUgbWFuIHBhZ2UgdG8gcmVmbGVjdAogICAgIHRoZXNlLiAgUGF0Y2ggb3JpZ2luYWxseSBieiMxMTE5IChzZW50aGlsa3VtYXJfc2VuIGF0IGhvdHBvcC5jb20pLAogICAgIG9rIGRqbUAsIGdydWRnaW5nIG9rIGRlcmFhZHRALgogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMjggMDY6MDI6NTYKICAgICBbc3NoLWFnZW50LjFdCiAgICAgVXBkYXRlIGFnZW50IHNvY2tldCBwYXRoIHRlbXBsYXRlcyB0byByZWZsZWN0IHJlYWxpdHksIGNvcnJlY3QgeHJlZiBmb3IKICAgICB0aW1lIGZvcm1hdHMuICBieiMxMTIxLCBwYXRjaCBmcm9tIG9wZW5zc2ggYXQgcm91bWVucGV0cm92LmluZm8sIG9rIGRqbUAKCjIwMDUxMTI2CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzExMjY6IEFJWCA1LjIgYW5kIDUuMyAoYW5kIHByZXN1bWFibHkgbmV3ZXIsCiAgIHdoZW4gdGhleSdyZSBhdmFpbGFibGUpIG5lZWQgdGhlIHJlYWwgVUlEIHNldCBvdGhlcndpc2UgcGFtX2NoYXV0aHRvayB3aWxsCiAgIHNldCBBRE1DSEcgYWZ0ZXIgY2hhbmdpbmcgdGhlIHBhc3N3b3JkLCBmb3JjaW5nIHRoZSB1c2VyIHRvIGNoYW5nZSBpdAogICBhZ2FpbiBpbW1lZGlhdGVseS4KCjIwMDUxMTI1CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBBcHBseSB0aW0ncyBmaXggZm9yIG9sZGVyIHN5c3RlbXMgd2hlcmUgdGhlCiAgIHJlc29sdmVyIHN0YXRlIGluIHJlc29sdi5oIGlzICJzdGF0ZSIgbm90ICJfX3Jlc19zdGF0ZSIuICBXaXRoIHNsaWdodAogICBtb2RpZmljYXRpb24gYnkgbWUgdG8gYWxzbyB3b3JrIG9uIG9sZCBBSVhlcy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtwcm9ncmVzc21ldGVyLmMgc2NwLmMgc2Z0cC1zZXJ2ZXIuY10gVXNlIGNvcnJlY3QgY2FzdHMgZm9yCiAgIHNucHJpbnRmIGZvcm1hdHMsIGZpeGVzIHdhcm5pbmdzIG9uIHNvbWUgNjQgYml0IHBsYXRmb3Jtcy4gIFBhdGNoIGZyb20KICAgc2hhdyBhdCB2cmFuaXguY29tLCBvayBkam1ACgoyMDA1MTEyNAogLSAoZGptKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIG9wZW5ic2QtY29tcGF0L2JzZC1hc3ByaW50Zi5jIAogICBvcGVuYnNkLWNvbXBhdC9ic2Qtc25wcmludGYuYyBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBBZGQgYW4gCiAgIGFzcHJpbnRmKCkgaW1wbGVtZW50YXRpb24sIGFmdGVyIHN5bmNpbmcgb3VyIHt2LH1zbnByaW50ZigpIGltcGxlbWVudGF0aW9uCiAgIHdpdGggc29tZSBleHRyYSBmaXhlcyBmcm9tIFNhbWJhJ3MgdmVyc2lvbi4gV2l0aCBoZWxwIGFuZCBkZWJ1Z2dpbmcgZnJvbSAKICAgZHR1Y2tlciBhbmQgdGltOyBvayBkdHVja2VyQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRml4IHR5cG9zIGluIGNvbW1lbnRzIGFuZCBBQ19TRUFSQ0hfTElCIGFyZ3VtZW50CiAgIG9yZGVyIGluIFJlbGlhbnQgVW5peCBibG9jay4gIFBhdGNoIGZyb20gam9oYW5lIGF0IGx5c2F0b3IubGl1LnNlLgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXSBVc2UgMTAyNCBiaXQga2V5cyBzaW5jZSB3ZSBnZW5lcmF0ZSBzbwogICBtYW55IGFuZCB1c2UgdGhlbSBvbmx5IG9uY2UuICBTcGVlZHMgdXAgdGVzdGluZyBvbiBvbGRlci9zbG93ZXIgaGFyZHdhcmUuCgoyMDA1MTEyMgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMTIgMTg6Mzc6NTkKICAgICBbc3NoLWFkZC5jXQogICAgIHNwYWNlCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8xMiAxODozODoxNQogICAgIFtzY3AuY10KICAgICBhdm9pZCBjbG9zZSgtMSksIGFzIGluIHJjcDsgb2sgY2xvZGVyCiAgIC0gbWlsbGVydEBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8xNSAxMTo1OTo1NAogICAgIFtpbmNsdWRlcy5oXQogICAgIEluY2x1ZGUgc3lzL3F1ZXVlLmggZXhwbGljaXRseSBpbnN0ZWFkIG9mIGFzc3VtaW5nIHNvbWUgb3RoZXIgaGVhZGVyCiAgICAgd2lsbCBwdWxsIGl0IGluLiAgQXQgdGhlIG1vbWVudCBpdCBnZXRzIHB1bGxlZCBpbiBieSBzeXMvc2VsZWN0LmgKICAgICAod2hpY2ggc3NoIGhhcyBubyBidXNpbmVzcyBpbmNsdWRpbmcpIHZpYSBldmVudC5oLiAgT0sgbWFya3VzQAogICAgIChJRCBzeW5jIG9ubHkgaW4gLXBvcnRhYmxlKQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMjEgMDk6NDI6MTAKICAgICBbYXV0aC1rcmI1LmNdCiAgICAgUGVyZm9ybSBLZXJiZXJvcyBjYWxscyBldmVuIGZvciBpbnZhbGlkIHVzZXJzIHRvIHByZXZlbnQgbGVha2luZwogICAgIGluZm9ybWF0aW9uIGFib3V0IGFjY291bnQgdmFsaWRpdHkuICBieiAjOTc1LCBwYXRjaCBvcmlnaW5hbGx5IGZyb20KICAgICBTZW50aGlsIEt1bWFyLCBzYW5pdHkgY2hlY2tlZCBieSBTaW1vbiBXaWxraW5zb24sIHRlc3RlZCBieSBkam1ALCBiaW9ybkAsCiAgICAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMjIgMDM6MzY6MDMKICAgICBbaG9zdGZpbGUuY10KICAgICBDb3JyZWN0IGZvcm1hdC9hcmd1bWVudHMgdG8gZGVidWcgY2FsbDsgc3BvdHRlZCBieSBzaGF3IGF0IHZyYW5peC5jb20KICAgICBvayBkam1ACiAtIChkdHVja2VyKSBbbG9naW5yZWMuY10gQWRkIGNhc3RzIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MsIHBhdGNoCiAgIGZyb20gc2hhdyBhdCB2cmFuaXguY29tLgoKMjAwNTExMjAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5oXSBBZGQgY29tbWVudCBleHBsYWluaW5nIHdoYXQKICAgaXMgZ29pbmcgb24uCgoyMDA1MTExMgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIFJlc3RvcmUgUG9ydGFibGUtc3BlY2lmaWMKICAgaWZkZWYgbG9zdCBkdXJpbmcgc3luYy4gIFNwb3R0ZWQgYnkgdGltQC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC97cmVhbHBhdGguYyxzdHJvbGwuYyxycmVzdnBvcnQuY31dICRPcGVuQlNEIHRhZy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFVzZSAiJEFXSyIgaW5zdGVhZCBvZiAiYXdrIiBpbiBnY2MgdmVyc2lvbiB0ZXN0LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUmVtb3ZlIGR1cGxpY2F0ZSB1dGltZXMoKSBjaGVjay4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3JlY29uZmlndXJlLnNoXSBGaXggcG90ZW50aWFsIHJhY2UgaW4gdGhlIHJlY29uZmlndXJlCiAgIHRlc3Q6IGlmIHNzaGQgdGFrZXMgdG9vIGxvbmcgdG8gcmVjb25maWd1cmUgdGhlIHN1YnNlcXVlbnQgY29ubmVjdGlvbiB3aWxsCiAgIGZhaWwuICBaYXAgcGlkZmlsZSBiZWZvcmUgSFVQaW5nIHNzaGQgd2hpY2ggd2lsbCByZXdyaXRlIGl0IHdoZW4gaXQncyByZWFkeS4KCjIwMDUxMTEwCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2V0ZW52LmNdIE1lcmdlIGNoYW5nZXMgZm9yIF9fZmluZGVudiBmcm9tCiAgIE9wZW5CU0QgZ2V0ZW52LmMgcmV2cyAxLjQgLSAxLjggKEFOU0lmaWNhdGlvbiBvZiBhcmd1bWVudHMsIHJlbW92YWwgb2YKICAgInJlZ2lzdGVyIikuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2V0ZW52LmNdIE1ha2UgX19maW5kZW52IHN0YXRpYywgcmVtb3ZlCiAgIHVubmVjZXNzYXJ5IHByb3RvdHlwZS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zZXRlbnYuY10gU3luYyBjaGFuZ2VzIGZyb20gT3BlbkJTRCBzZXRlbnYuYwogICByZXZzIDEuNyAtIDEuOS4KIC0gKGR0dWNrZXIpIFthdXRoLWtyYjUuY10gRml4IC1Xc2lnbi1jb21wYXJlIHdhcm5pbmcgaW4gbm9uLUhlaW1kYWwgcGF0aC4KICAgUGF0Y2ggZnJvbSBkam1ALgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRGlzYWJsZSBwb2ludGVyLXNpZ24gd2FybmluZ3Mgb24gZ2NjIDQuMCsKICAgc2luY2UgdGhleSdyZSBub3QgdXNlZnVsIHJpZ2h0IG5vdy4gIFBhdGNoIGZyb20gZGptQC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRncm91cGxpc3QuY10gU3luYyBPcGVuQlNEIHJldnMgMS4xMCAtIDEuMiAoQU5TSQogICBwcm90b3R5cGVzLCByZW1vdmFsIG9mICJyZWdpc3RlciIpLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3N0cmxjYXQuY10gU3luYyBPcGVuQlNEIHJldnMgMS4xMSAtIDEuMTIgKHJlbW92YWwKICAgb2YgInJlZ2lzdGVyIikuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQve0xPVFN9XSBNb3ZlIHRoZSAiT1BFTkJTRCBPUklHSU5BTCIgbWFya2VycyB0bwogICBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMuICBIYXZpbmcgdGhlbSBhdCB0aGUgdG9wIG5leHQgdG8gdGhlIENWU0lEcwogICBndWFyYW50ZWVzIGEgY29uZmxpY3QgZm9yIGVhY2ggYW5kIGV2ZXJ5IHN5bmMuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3RybGNweS5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuOCAtPiAxLjEwLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3NpZ2FjdC5oXSBBZGQgIk9QRU5CU0QgT1JJR0lOQUwiIG1hcmtlci4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zdHJtb2RlLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS41IC0+IDEuNy4KICAgUmVtb3ZhbCBvZiByY3NpZCwgIndoaXRlb3V0IiBpbm9kZSB0eXBlLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Jhc2VuYW1lLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4xMSAtPiAxLjE0LgogICBSZW1vdmFsIG9mIHJjc2lkLCB3aWxsIG5vIGxvbmdlciBzdHJsY3B5IHBhcnRzIG9mIHRoZSBzdHJpbmcuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3RydG9sbC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNCAtPiAxLjUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3RydG91bC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNSAtPiAxLjcuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjE2IC0+IDEuMTguCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuaF0gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjMgLT4gMS41LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dsb2IuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjIyIC0+IDEuMjUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2xvYi5oXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuOCAtPiAxLjkuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0Y3dkLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS45IC0+IDEuMTQuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0Y3dkLmNdIFJlcGxhY2UgbHN0YXQgd2l0aCBmc3RhdCB0byBtYXRjaCB1cAogICB3aXRoIE9wZW5CU0QgY29kZSBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IHBsYXRmb3JtcyB3aXRob3V0IGZzdGF0IGFueSBtb3JlLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2luZXRfYXRvbi5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNyAtPiAxLjkuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvaW5ldF9udG9hLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS40IC0+IDEuNi4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9pbmV0X250b3AuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjUgLT4gMS43LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2RhZW1vbi5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNSAtPiAxLjYuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3Ryc2VwLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS41IC0+IDEuNi4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9kYWVtb24uY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjEwIC0+IDEuMTMuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvbWt0ZW1wLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4xNyAtPiAxLjE5LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3JyZXN2cG9ydC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNiAtPiAxLjguCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYmluZHJlc3Zwb3J0LmNdIEFkZCAiT1BFTkJTRCBPUklHSU5BTCIgbWFya2VyLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMTYgLT4gMS4xNy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zaWdhY3QuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjMgLT4gMS40LgogICBJZCBhbmQgY29weXJpZ2h0IHN5bmMgb25seSwgdGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBjaGFuZ2VzIHdlIG5lZWQuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLWNsb3NlZnJvbS5jIG9wZW5ic2QtY29tcGF0L2Jhc2U2NC5jXQogICAtV3NpZ24tY29tcGFyZSBmaXhlcyBmcm9tIGRqbS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaF0gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjIgLT4gMS4zLgogICBJZCBhbmQgY29weXJpZ2h0IHN5bmMgb25seSwgdGhlcmUgd2VyZSBubyBzdWJzdGFudGlhbCBjaGFuZ2VzIHdlIG5lZWQuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBUcnkgdG8gZ2V0IHRoZSBnY2MgdmVyc2lvbiBudW1iZXIgaW4gYSB3YXkgdGhhdAogICBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIHZlcnNpb25zLCBhbmQgdXNlIGEgc2FmZXIgZGVmYXVsdC4KCjIwMDUxMTA1CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMDcgMTE6MTM6NTcKICAgICBbc3NoLWtleWdlbi5jXQogICAgIGNoYW5nZSBEU0EgZGVmYXVsdCBiYWNrIHRvIDEwMjQsIGFzIGl0J3MgZGVmaW5lZCBmb3IgMTAyNCBiaXRzIG9ubHkKICAgICBhbmQgdGhpcyBjYXVzZXMgaW50ZXJvcCBwcm9ibGVtcyB3aXRoIG90aGVyIGNsaWVudHMuICBtb3Jlb3ZlciwKICAgICBpbiBvcmRlciB0byBpbXByb3ZlIHRoZSBzZWN1cml0eSBvZiBEU0EgeW91IG5lZWQgdG8gY2hhbmdlIG1vcmUKICAgICBjb21wb25lbnRzIG9mIERTQSBrZXkgZ2VuZXJhdGlvbiAoZS5nLiB0aGUgaW50ZXJuYWwgU0hBMSBoYXNoKTsKICAgICBvayBkZXJhYWR0CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzEwIDEwOjIzOjA4CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmMgc2VydmVybG9vcC5jIHNlc3Npb24uY10KICAgICBmaXggcmVncmVzc2lvbiBJIGludHJvZHVjZWQgaW4gNC4yOiBYMTEgZm9yd2FyZGluZ3MgaW5pdGlhdGVkIGFmdGVyCiAgICAgYSBzZXNzaW9uIGhhcyBleGl0ZWQgKGUuZy4gIihzbGVlcCA1OyB4dGVybSkgJiIpIHdvdWxkIG5vdCBzdGFydC4KICAgICBieiAjMTA4NiByZXBvcnRlZCBieSB0OG0gQVQgY2VudHJ1bS5jejsgb2sgbWFya3VzQCBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMSAyMzozNzozNwogICAgIFtjaGFubmVscy5jXQogICAgIGJ6ICMxMDc2IHNldCBTT19SRVVTRUFERFIgb24gWDExIGZvcndhcmRpbmcgbGlzdG5lciBzb2NrZXRzLCBwcmV2ZW50aW5nCiAgICAgYmluZCgpIGZhaWx1cmUgd2hlbiBhIHByZXZpb3VzIGNvbm5lY3Rpb24ncyBsaXN0ZW5lcnMgYXJlIGluIFRJTUVfV0FJVCwKICAgICByZXBvcnRlZCBieSBwbGF0dG5lciBBVCBpbmYuZXRoei5jaDsgb2sgZHR1Y2tlckAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzEzIDE0OjAzOjAxCiAgICAgW2F1dGgyLWdzcy5jIGdzcy1nZW5yLmMgZ3NzLXNlcnYuY10KICAgICByZW1vdmUgdW5uZWVkZWQgI2luY2x1ZGVzOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMyAxNDoyMDozNwogICAgIFtnc3Mtc2Vydi5jXQogICAgIHNwZWxsaW5nIGluIGNvbW1lbnRzCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMyAxOTowODowOAogICAgIFtnc3Mtc2Vydi1rcmI1LmMgZ3NzLXNlcnYuY10KICAgICB1bnVzZWQgZGVjbGFyYXRpb25zOyBvayBkZXJhYWR0QAogICAgIChpZCBzeW5jIG9ubHkgZm9yIGdzcy1zZXJ2LWtyYjUuYykKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzEzIDE5OjEzOjQxCiAgICAgW2Rucy5jXQogICAgIHVubmVlZGVkICNpbmNsdWRlLCB1bnVzZWQgZGVjbGFyYXRpb24sIGxpdHRsZSBrbmY7IG9rIGRlcmFhZHRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMyAyMjoyNDozMQogICAgIFthdXRoMi1nc3MuYyBnc3MtZ2Vuci5jIGdzcy1zZXJ2LmMgbW9uaXRvci5jXQogICAgIEtORjsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTQgMDI6MTc6NTkKICAgICBbc3NoLWtleWdlbi5jIHNzaC5jIHNzaGNvbm5lY3QyLmNdCiAgICAgbm8gdHJhaWxpbmcgIlxuIiBmb3IgbG9nIGZ1bmN0aW9uczsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTQgMDI6Mjk6MzcKICAgICBbY2hhbm5lbHMuYyBjbGllbnRsb29wLmNdCiAgICAgZnJlZSgpLT54ZnJlZSgpOyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xNSAxNToyODoxMgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgbWFrZSBleHRlcm5hbCBkZWZpbml0aW9uIHN0YXRpYzsgb2sgZGVyYWFkdEAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzE3IDEzOjQ1OjA1CiAgICAgW2Rucy5jXQogICAgIGZpeCBtZW1vcnkgbGVha3MgZnJvbSAyIHNvdXJjZXM6CiAgICAgICAgIDEpIGtleV9maW5nZXJwcmludF9yYXcoKQogICAgICAgICAyKSBtYWxsb2MgaW4gZG5zX3JlYWRfcmRhdGEoKQogICAgIG9rIGpha29iQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTcgMTQ6MDE6MjgKICAgICBbZG5zLmNdCiAgICAgcmVtb3ZlICNpZmRlZiBMV1JFUzsgb2sgamFrb2JACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xNyAxNDoxMzozNQogICAgIFtkbnMuYyBkbnMuaF0KICAgICBtb3JlIGNsZWFudXBzOyBvayBqYWtvYkAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzAgMDE6MjM6MTkKICAgICBbc3NoX2NvbmZpZy41XQogICAgIG1lbnRpb24gY29udHJvbCBzb2NrZXQgZmFsbGJhY2sgYmVoYXZpb3VyLCByZXBvcnRlZCBieSAKICAgICB0cnlwb25yYWogQVQgZ21haWwuY29tCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMwIDA0OjAxOjAzCiAgICAgW3NzaC1rZXlzY2FuLmNdCiAgICAgbWFrZSBzc2gta2V5Z2VuIGRpc2NhcmQganVuayBmcm9tIHNlcnZlciBiZWZvcmUgU1NILSBpZGVudCwgc3BvdHRlZCBieQogICAgIGRhdmUgQVQgY2lydC5uZXQ7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMwIDA0OjAzOjI0CiAgICAgW3NzaC5jXQogICAgIGZpeCBtaXNsZWFkaW5nIGRlYnVnIG1lc3NhZ2U7IG9rIGR0dWNrZXJACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMCAwODoyOToyOQogICAgIFtjYW5vaG9zdC5jIHNzaGQuY10KICAgICBDaGVjayBmb3IgY29ubmVjdGlvbnMgd2l0aCBJUCBvcHRpb25zIGVhcmxpZXIgYW5kIGRyb3Agc2lsZW50bHkuICBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMwIDA4OjQzOjQ3CiAgICAgW3NzaF9jb25maWcuNV0KICAgICByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZTsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzAgMDg6NTI6MTgKICAgICBbY2xpZW50bG9vcC5jIHBhY2tldC5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jXQogICAgIFtzc2guYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuYyBzc2hkLmNdCiAgICAgbm8gbmVlZCB0byBlc2NhcGUgc2luZ2xlIHF1b3RlcyBpbiBjb21tZW50cywgbm8gYmluYXJ5IGNoYW5nZQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzEgMDY6MTU6MDQKICAgICBbc2Z0cC5jXQogICAgIEZpeCBzb3J0aW5nIHdpdGggImxzIC0xIiBjb21tYW5kLiBGcm9tIFJvYmVydCBUc2FpLCAibG9va3MgcmlnaHQiIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMxIDExOjEyOjQ5CiAgICAgW3NzaC1rZXlnZW4uMSBzc2gta2V5Z2VuLmNdCiAgICAgZ2VuZXJhdGUgYSBwcm90b2NvbCAyIFJTQSBrZXkgYnkgZGVmYXVsdAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMSAxMTo0ODoyOQogICAgIFtzZXJ2ZXJsb29wLmNdCiAgICAgbWFrZSBzdXJlIHdlIGNsZWFuIHVwIHd0bXAsIGV0Yy4gZmlsZSB3aGVuIHdlIHJlY2VpdmUgYSBTSUdURVJNLAogICAgIFNJR0lOVCBvciBTSUdRVUlUIHdoZW4gcnVubmluZyB3aXRob3V0IHByaXZpbGVnZSBzZXBhcmF0aW9uICh0aGUKICAgICBub3JtYWwgcHJpdnNlcCBjYXNlIGlzIGFscmVhZHkgT0spLiBQYXRjaCBtYWlubHkgYnkgZHR1Y2tlckAgYW5kCiAgICAgc2VudGhpbGt1bWFyX3NlbiBBVCBob3Rwb3AuY29tOyBvayBkdHVja2VyQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMSAxOTo1NToyNQogICAgIFtzc2gta2V5Z2VuLjFdCiAgICAgZ3JhbW1hcjsKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzAzIDEzOjM4OjI5CiAgICAgW2Nhbm9ob3N0LmNdCiAgICAgQ2FjaGUgcmV2ZXJzZSBsb29rdXBzIHdpdGggYW5kIHdpdGhvdXQgRE5TIHNlcGFyYXRlbHk7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMDQgMDU6MTU6NTkKICAgICBba2V4LmMga2V4Lmgga2V4ZGguYyBrZXhkaGMuYyBrZXhkaHMuYyBrZXhnZXguYyBrZXhnZXhjLmMga2V4Z2V4cy5jXQogICAgIHJlbW92ZSBoYXJkY29kZWQgaGFzaCBsZW5ndGhzIGluIGtleSBleGNoYW5nZSBjb2RlLCBhbGxvd2luZwogICAgIGltcGxlbWVudGF0aW9uIG9mIEtFWCBtZXRob2RzIHdpdGggZGlmZmVyZW50IGhhc2hlcyAoZS5nLiBTSEEtMjU2KTsKICAgICBvayBtYXJrdXNAIGR0dWNrZXJAIHN0ZXZlc2tACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzA1IDA1OjAxOjE1CiAgICAgW2J1ZmF1eC5jXQogICAgIEZpeCBsZWFrcyBpbiBlcnJvciBwYXRocywgYnogIzExMDkgYW5kICMxMTEwIHJlcG9ydGVkIGJ5IGtyZW1lbmVrIEFUCiAgICAgY3Muc3RhbmZvcmQuZWR1OyBvayBkdHVja2VyQAogLSAoZHR1Y2tlcikgW1JFQURNRS5wbGF0Zm9ybV0gQWRkIFBBTSBzZWN0aW9uLgogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gU3luYyB0byBsYXRlc3QgT3BlbkJTRCB2ZXJzaW9uLAogICByZXNvbHZpbmcgbWVtb3J5IGxlYWsgYnojMTExMSByZXBvcnRlZCBieSBrcmVtZW5layBBVCBjcy5zdGFuZm9yZC5lZHU7CiAgIG9rIGR0dWNrZXJACgoyMDA1MTEwMgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdIEJ1ZyAjMTEwODogZml4IGJyb2tlbiBzdHJkdXAoKS4KICAgUmVwb3J0ZWQgYnkgb2xhdmkgYXQgaXB1bnBsdWdnZWQuY29tIGFuZCBhbnRvaW5lLmJyb2RpbiBhdCBsYXBvc3RlLm5ldAogICB2aWEgRnJlZUJTRC4KCjIwMDUxMDMwCiAtIChkam0pIFtjb250cmliL3N1c2Uvb3BlbnNzaC5zcGVjIGNvbnRyaWIvc3VzZS9yYy4KICAgc3NoZCBjb250cmliL3N1c2Uvc3lzY29uZmlnLnNzaF0gQnVnICMxMTA2OiBVcGRhdGVkIFN1U0Ugc3BlYyBhbmQgaW5pdCAKICAgZmlsZXMgZnJvbSBpbW9yZ2FuIEFUIG5hcy5uYXNhLmdvdgogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQnVnICMxMDQ1ZG8gbm90IGNoZWNrIC9ldGMvbm9sb2dpbiB3aGVuIFBBTSBpcwogICBlbmFibGVkLCBpbnN0ZWFkIGFsbG93IFBBTSB0byBoYW5kbGUgaXQuICBOb3RlIHRoYXQgb24gcGxhdGZvcm1zIHVzaW5nIFBBTSwKICAgdGhlIHBhbV9ub2xvZ2luIG1vZHVsZSBzaG91bGQgYmUgYWRkZWQgdG8gc3NoZCdzIHNlc3Npb24gc3RhY2sgaW4gb3JkZXIgdG8KICAgbWFpbnRhaW4gZXhpc2luZyBiZWhhdmlvdXIuICBCYXNlZCBvbiBwYXRjaCBhbmQgZGlzY3Vzc2lvbiBmcm9tIHQ4bSBhdAogICBjZW50cnVtLmN6LCBvayBkam1ACgoyMDA1MTAyNQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUmVsb2NhdGUgTExPTkdfTUFYIGNhbGN1bGF0aW9uIHRvIGFmdGVyIHRoZQogICBzaXplb2YobG9uZyBsb25nKSBjaGVja3MsIHRvIG1ha2UgZml4aW5nIGJ1ZyAjMTEwNCBlYXNpZXIgKG5vIGNoYW5nZXMKICAgeWV0KS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTEwNDogVHJ1NjQncyBwcmludGYgZmFtaWx5IGRvZXNuJ3QKICAgdW5kZXJzdGFuZCAiJWxsZCIsIGV2ZW4gdGhvdWdoIHRoZSBjb21waWxlciBoYXMgImxvbmcgbG9uZyIsIHNvIGhhbmRsZQogICBpdCBhcyBhIHNwZWNpYWwgY2FzZS4gIFBhdGNoIHRlc3RlZCBieSBtY2Fza2lsbC5zY290dCBhdCBlcGEuZ292LgogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY3lnd2luL3NzaC11c2VyLWNvbmZpZ10gUmVtb3ZlIGR1cGxpY2F0ZSB5ZXMvbm8KICAgcHJvbXB0LiAgUGF0Y2ggZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgoKMjAwNTEwMTcKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTA5NzogRml4IGNvbmZpZ3VyZSBmb3IgY3Jvc3MtY29tcGlsaW5nLgogICAvZXRjL2RlZmF1bHQvbG9naW4gcmVwb3J0IGFuZCB0ZXN0aW5nIGZyb20gYWFiYWtlciBhdCBpZWUub3JnLCBjb3JyZWN0aW9ucwogICBmcm9tIHRpbUAuCgoyMDA1MTAwOQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBkZWZpbmVzLmggb3BlbmJzZC1jb21wYXQvdmlzLntjLGh9XSBTeW5jIGN1cnJlbnQKICAgdmVyc2lvbnMgZnJvbSBPcGVuQlNELiAgb2sgZGptQAoKMjAwNTEwMDgKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTA5ODogZGVmaW5lICRNQUlMIGZvciBIUC1VWDsgcmVwb3J0IGZyb20KICAgYnJpYW4uc21pdGggYXQgYWdpbGVudCBjb20uCiAtIChkam0pIFtjb25maWd1cmUuYWNdIG1pc3NpbmcgJ3Rlc3QnIGNhbGwgZm9yIC13aXRoLVdlcnJvciB0ZXN0CgoyMDA1MTAwNQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBzc2hkLjhdIEVuYWJsZSBsb2NrZWQgYWNjb3VudCBjaGVjayAoYSBwcmVwZW5kZWQKICAgIipMT0NLRUQqIiBzdHJpbmcpIGZvciBGcmVlQlNELiAgUGF0Y2ggamVyZW1pZSBhdCBsZS1oZW4ub3JnIGFuZAogICBzZW50aGlsa3VtYXJfc2VuIGF0IGhvdHBvcC5jb20uCgoyMDA1MTAwMwogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8wNyAwODo1Mzo1MwogICAgIFtjaGFubmVscy5jXQogICAgIGVuZm9yY2UgY2hhbmlkICE9IE5VTEw7IG9rIGRqbQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8wOSAxOToxODowNQogICAgIFtjbGllbnRsb29wLmNdCiAgICAgdHlwbzsgZnJvbSBtYXJrIGF0IG1jcy52dXcuYWMubnosIGJ1ZyAjMTA4MgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xMyAyMzo0MDowNwogICAgIFtzc2hkLmMgc3NoLmMgbWlzYy5oIHNmdHAuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNpZ24uYyBzZnRwLXNlcnZlci5jCiAgICAgc2NwLmMgbWlzYy5jIHNzaC1rZXlzY2FuLmMgc3NoLWFkZC5jIHNzaC1hZ2VudC5jXQogICAgIGVuc3VyZSB0aGF0IHN0ZGlvIGZkcyBhcmUgYXR0YWNoZWQ7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzE5IDExOjM3OjM0CiAgICAgW3NzaF9jb25maWcuNSBzc2guMV0KICAgICBtZW50aW9uIGFiaWxpdHkgdG8gc3BlY2lmeSBiaW5kX2FkZHJlc3MgZm9yIER5bmFtaWNGb3J3YXJkIGFuZCAtRCBvcHRpb25zOwogICAgIGJ6IzEwNzcgc3BvdHRlZCBieSBIYXJ1eWFtYSBTZWlnbwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xOSAxMTo0NzowOQogICAgIFtzc2hkLmNdCiAgICAgc3RvcCBjb25uZWN0aW9uIGFib3J0IG9uIHJla2V5IHdpdGggZGVsYXllZCBjb21wcmVzc2lvbiBlbmFibGVkIHdoZW4KICAgICBwb3N0LWF1dGggcHJpdnNlcCBpcyBkaXNhYmxlZCAoZS5nLiB3aGVuIHJvb3QgaXMgbG9nZ2VkIGluKTsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMTkgMTE6NDg6MTAKICAgICBbZ3NzLXNlcnYuY10KICAgICB0eXBvCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzE5IDE1OjM4OjI3CiAgICAgW3NzaC4xXQogICAgIHNvbWUgbW9yZSAuQmsvLkVrIHRvIGF2b2lkIHVnbHkgbGluZSBzcGxpdDsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMTkgMTU6NDI6NDQKICAgICBbc3NoLmNdCiAgICAgdXBkYXRlIC1EIHVzYWdlIGhlcmUgdG9vOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xOSAyMzozMTozMQogICAgIFtzc2guMV0KICAgICBzcGVsbGluZyBuaXQgZnJvbSBzdGV2ZXNrQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8yMSAyMzozNjo1NAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIGFxdWlyZSAtPiBhY3F1aXJlLCBmcm9tIHN0ZXZlc2tACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzIxIDIzOjM3OjExCiAgICAgW3NzaGQuY10KICAgICBjaGFuZ2UgbGFiZWwgYXQgbWFya3VzQCdzIHJlcXVlc3QKICAgLSBqYXJlZHlAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMzAgMjA6MzQ6MjYKICAgICBbc3NoLWtleXNjYW4uMV0KICAgICBkZXBsb3kgLkFuIC1ub3NwbGl0OyBvayBqbWMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzAzIDA3OjQ0OjQyCiAgICAgW2Nhbm9ob3N0LmNdCiAgICAgUmVsb2NhdGUgY2hlY2tfaXBfb3B0aW9ucyBjYWxsIHRvIHByZXZlbnQgbG9nZ2luZyBvZiBnYXJiYWdlIGZvcgogICAgIGNvbm5lY3Rpb25zIHdpdGggSVAgb3B0aW9ucyBzZXQuICBieiMxMDkyIGZyb20gRGF2aWQgTGVvbmFyZCwKICAgICAibG9va3MgZ29vZCIgZGVyYWFkdEAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL1JFQURNRS5yZWdyZXNzXSBCdWcgIzk4OTogRG9jdW1lbnQgbGltaXRhdGlvbiB0aGF0IHNjcAogICBpcyByZXF1aXJlZCBpbiB0aGUgc3lzdGVtIHBhdGggZm9yIHRoZSBtdWx0aXBsZXggdGVzdCB0byB3b3JrLgoKMjAwNTA5MzAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBCdWcgIzEwOTY6IEFkZCBwcm90b3R5cGUKICAgZm9yIHN0cnRvbGwuICBQYXRjaCBmcm9tIG8uZmxlYmJlIGF0IHNjaWVuY2UtY29tcHV0aW5nLmRlLgogLSAoZHR1Y2tlcikgW21vbml0b3IuY10gQnVnICMxMDg3OiBTZW5kIGxvZ2lubXNnIHRvIHByZWF1dGggcHJpdnNlcAogICBjaGlsZCBkdXJpbmcgUEFNIGFjY291bnQgY2hlY2sgd2l0aG91dCBjbGVhcmluZyBpdC4gIFRoaXMgcmVzdG9yZXMgdGhlCiAgIHBvc3QtbG9naW4gd2FybmluZ3Mgc3VjaCBhcyBMREFQIHBhc3N3b3JkIGV4cGlyeS4gIFBhdGNoIGZyb20gVG9tYXMgTXJhegogICB3aXRoIGhlbHAgZnJvbSBzZXZlcmFsIG90aGVycy4KCjIwMDUwOTI5CiAtIChkdHVja2VyKSBbbW9uaXRvcl93cmFwLmNdIFJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiBsb2dpbm1zZwogICBpbnRyb2R1Y2VkIGR1cmluZyBzeW5jLgoKMjAwNTA5MjgKIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmNdIFVzZSB1X2NoYXIgZm9yIHJlY2VpdmluZyBSTkcgc2VlZCBmb3IgY29uc2lzdGVuY3kuCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gQnVnICMxMDI4OiBzZW5kIGZpbmFsIG5vbi1xdWVyeSBtZXNzYWdlcyBmcm9tCiAgIFBBTSB2aWEga2V5Ym9hcmQtaW50ZXJhY3RpdmUuICBQYXRjaCB0ZXN0ZWQgYnkgdGhlIGZvbGtzIGF0IFZpbnRlbGEuCgoyMDA1MDkyNwogLSAoZHR1Y2tlcikgW2VudHJvcHkuY10gUmVtb3ZlIHVubmVjZXNzYXJ5IHRlc3RzIGZvciBnZXR1aWQgYW5kIGdldGV1aWQKICAgY2FsbHMsIHNpbmNlIHRoZXkgY2FuJ3QgcG9zc2libHkgZmFpbC4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmMgZW50cm9weS5oIHNzaGQuY10gUGFzcyBSTkcgc2VlZCB0byB0aGUgcmVleGVjJ2VkCiAgIHByb2Nlc3Mgd2hlbiBzc2hkIHJlbGllcyBvbiBzc2gtcmFuZG9tLWhlbHBlci4gIFNob3VsZCByZXN1bHQgaW4gZmFzdGVyCiAgIGxvZ2lucyBvbiBzeXN0ZW1zIHdpdGhvdXQgYSByZWFsIHJhbmRvbSBkZXZpY2Ugb3IgcHJuZ2QuICBvayBkam1ACgoyMDA1MDkyNAogLSAoZHR1Y2tlcikgW2F1dGgyLmNdIE1vdmUgc3RhcnRfcGFtKCkgY2FsbHMgb3V0IG9mIGlmLWVsc2UgYmxvY2sgdG8gcmVtb3ZlCiAgIGR1cGxpY2F0ZSBjYWxsLiAgb2sgZGptQAoKMjAwNTA5MjIKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFVzZSAtUiBsaW5rZXIgZmxhZyBmb3IgbGliZWRpdCB0b287IHBhdGNoIGZyb20KICAgc2tlbGV0ZW4gYXQgc2hpbGxlc3QubmV0LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRml4IGhlbHAgZm9yIC0td2l0aC1vcGVuc2M7IHBhdGNoIGZyb20gc2tlbGV0ZW4gYXQKICAgc2hpbGxlc3QubmV0LgoKMjAwNTA5MTkKIC0gKHRpbSkgW2FjbG9jYWwubTQgY29uZmlndXJlLmFjXSBEZWxldGUgYWNjb25maWcuaCBhbmQgYWRkIHRlbXBsYXRlcyB0bwogICBBQ19ERUZJTkUgYW5kIEFDX0RFRklORV9VTlFVT1RFRCB0byBxdWlldCBhdXRvY29uZiAyLjU5IHdhcm5pbmcgbWVzc2FnZXMuCiAgIG9rIGR0dWNrZXJACgoyMDA1MDkxMgogLSAodGltKSBbY29uZmlndXJlLmFjXSBCdWcgMTA3OC4gRml4IC0td2l0aG91dC1rZXJiZXJvczUuIFJlcG9ydGVkIGJ5CiAgIE1pa2UgRnJ5c2luZ2VyLgoKMjAwNTA5MDgKIC0gKHRpbSkgW2RlZmluZXMuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3LmNdIEFkZCBsb25nIHBhc3N3b3JkIHN1cHBvcnQgdG8KICAgT3BlblNlcnZlciA2IGFuZCBhZGQgb3NyNWJpZ2NyeXB0IHN1cHBvcnQgc28gd2hlbiBzb21lb25lIG1pZ3JhdGVzCiAgIHBhc3N3b3JkcyBiZXR3ZWVuIFVuaXhXYXJlIGFuZCBPcGVuU2VydmVyIHRoZXkgd2lsbCBzdGlsbCB3b3JrLiBPSyBkdHVja2VyQAoKJElkOiBDaGFuZ2VMb2csdiAxLjUxNzUgMjAwOS8wMS8yOCAwNTozMToyMiBkam0gRXhwICQKCg==