MjAwNjA4MDUKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjQgMTM6NTg6MjIKICAgICBbc3NoY29ubmVjdC5jXQogICAgIGRpc2FibGUgdHVubmVsIGZvcndhcmRpbmcgd2hlbiBubyBzdHJpY3QgaG9zdCBrZXkgY2hlY2tpbmcKICAgICBhbmQga2V5IGNoYW5nZWQ7IG9rIGRqbUAgbWFya3VzQCBkdHVja2VyQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjUgMDI6MDE6MzQKICAgICBbc2NhcmQuY10KICAgICBuZWVkICNpbmNsdWRlIDxzdHJpbmcuaD4KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzI1IDAyOjU5OjIxCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIHBhY2tldC5jIHNjcC5jIHNlcnZlcmxvb3AuYyBzZnRwLWNsaWVudC5jXQogICAgIFtzZnRwLXNlcnZlci5jIHNzaC1hZ2VudC5jIHNzaC1rZXlzY2FuLmMgc3NoY29ubmVjdC5jIHNzaGQuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvdGltZS5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjYgMDI6MzU6MTcKICAgICBbYXRvbWljaW8uYyBhdXRoLmMgZGguYyBhdXRoZmlsZS5jIGJ1ZmZlci5jIGNsaWVudGxvb3AuYyBrZXguY10KICAgICBbZ3JvdXBhY2Nlc3MuYyBnc3MtZ2Vuci5jIGtleGdleHMuYyBtaXNjLmMgbW9uaXRvci5jIG1vbml0b3JfbW0uY10KICAgICBbcGFja2V0LmMgc2NwLmMgc2VydmVybG9vcC5jIHNlc3Npb24uYyBzZnRwLWNsaWVudC5jIHNmdHAtY29tbW9uLmNdCiAgICAgW3NmdHAtc2VydmVyLmMgc2Z0cC5jIHNzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmMgc3NobG9naW4uY10KICAgICBbdWlkc3dhcC5jIHhtYWxsb2MuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzI2IDEzOjU3OjE3CiAgICAgW2F1dGhmZC5jIGF1dGhmaWxlLmMgZGguYyBjYW5vaG9zdC5jIGNoYW5uZWxzLmMgY2xpZW50bG9vcC5jIGNvbXBhdC5jXQogICAgIFtob3N0ZmlsZS5jIGtleC5jIGxvZy5jIG1pc2MuYyBtb2R1bGkuYyBtb25pdG9yLmMgcGFja2V0LmMgcmVhZHBhc3MuY10KICAgICBbc2NwLmMgc2VydmNvbmYuYyBzZXNzaW9uLmMgc2Z0cC1zZXJ2ZXIuYyBzZnRwLmMgc3NoLWFkZC5jIHNzaC1hZ2VudC5jXQogICAgIFtzc2gta2V5Z2VuLmMgc3NoLWtleXNjYW4uYyBzc2gta2V5c2lnbi5jIHNzaC5jIHNzaGNvbm5lY3QuY10KICAgICBbc3NoY29ubmVjdDEuYyBzc2hkLmMgeG1hbGxvYy5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN0ZGxpYi5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yNyAwODowMDo1MAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgYXZvaWQgY29uZnVzaW5nIHdvcmRpbmcgaW4gSGFzaEtub3duSG9zdHM6CiAgICAgb3JpZ2luYWxseSBzcG90dGVkIGJ5IGFsYW4gYW1lc2J1cnk7CiAgICAgb2sgZGVyYWFkdAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8yNyAwODowMDo1MAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgYXZvaWQgY29uZnVzaW5nIHdvcmRpbmcgaW4gSGFzaEtub3duSG9zdHM6CiAgICAgb3JpZ2luYWxseSBzcG90dGVkIGJ5IGFsYW4gYW1lc2J1cnk7CiAgICAgb2sgZGVyYWFkdAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMDEgMTE6MzQ6MzYKICAgICBbc3NoY29ubmVjdC5jXQogICAgIEFsbG93IGZhbGxiYWNrIHRvIGtub3duX2hvc3RzIGVudHJpZXMgd2l0aG91dCBwb3J0IHF1YWxpZmllcnMgZm9yCiAgICAgbm9uLXN0YW5kYXJkIHBvcnRzIHRvbywgc28gdGhhdCBhbGwgZXhpc3Rpbmcga25vd25faG9zdHMgZW50cmllcyB3aWxsIGJlCiAgICAgcmVjb2duaXNlZC4gIFJlcXVlc3RlZCBieSwgZmVlZGJhY2sgYW5kIG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA4LzAxIDIzOjIyOjQ4CiAgICAgW2F1dGgtcGFzc3dkLmMgYXV0aC1yaG9zdHMuYyBhdXRoLXJzYS5jIGF1dGguYyBhdXRoLmggYXV0aDEuY10KICAgICBbYXV0aDItY2hhbGwuYyBhdXRoMi1wdWJrZXkuYyBhdXRoZmlsZS5jIGJ1ZmZlci5jIGNhbm9ob3N0LmNdCiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jIGRoLmMgZG5zLmMgZG5zLmggaG9zdGZpbGUuYyBrZXguYyBrZXhkaGMuY10KICAgICBba2V4Z2V4Yy5jIGtleGdleHMuYyBrZXkuYyBrZXkuaCBsb2cuYyBtaXNjLmMgbWlzYy5oIG1vZHVsaS5jXQogICAgIFttb25pdG9yX3dyYXAuYyBwYWNrZXQuYyBwcm9ncmVzc21ldGVyLmMgcmVhZGNvbmYuYyByZWFkcGFzcy5jIHNjcC5jXQogICAgIFtzZXJ2Y29uZi5jIHNlc3Npb24uYyBzZnRwLWNsaWVudC5jIHNmdHAtY29tbW9uLmMgc2Z0cC1zZXJ2ZXIuYyBzZnRwLmNdCiAgICAgW3NzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNjYW4uYyBzc2guYyBzc2hjb25uZWN0LmNdCiAgICAgW3NzaGNvbm5lY3QxLmMgc3NoY29ubmVjdDIuYyBzc2hkLmMgc3NobG9naW4uYyBzc2h0dHkuYyB1dWVuY29kZS5jXQogICAgIFt1dWVuY29kZS5oIHhtYWxsb2MuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzdGRpby5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDgvMDEgMjM6MzY6MTIKICAgICBbYXV0aGZpbGUuYyBjaGFubmVscy5jIHByb2dyZXNzbWV0ZXIuYyBzY2FyZC5jIHNlcnZjb25mLmMgc3NoLmNdCiAgICAgY2xlYW4gZXh0cmEgc3BhY2VzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8wMyAwMzozNDo0MgogICAgIFtPVkVSVklFVyBhdG9taWNpby5jIGF0b21pY2lvLmggYXV0aC1ic2RhdXRoLmMgYXV0aC1jaGFsbC5jIGF1dGgta3JiNS5jXQogICAgIFthdXRoLW9wdGlvbnMuYyBhdXRoLW9wdGlvbnMuaCBhdXRoLXBhc3N3ZC5jIGF1dGgtcmgtcnNhLmMgYXV0aC1yaG9zdHMuY10KICAgICBbYXV0aC1yc2EuYyBhdXRoLXNrZXkuYyBhdXRoLmMgYXV0aC5oIGF1dGgxLmMgYXV0aDItY2hhbGwuYyBhdXRoMi1nc3MuY10KICAgICBbYXV0aDItaG9zdGJhc2VkLmMgYXV0aDIta2JkaW50LmMgYXV0aDItbm9uZS5jIGF1dGgyLXBhc3N3ZC5jIF0KICAgICBbYXV0aDItcHVia2V5LmMgYXV0aDIuYyBhdXRoZmQuYyBhdXRoZmQuaCBhdXRoZmlsZS5jIGJ1ZmF1eC5jIGJ1ZmJuLmNdCiAgICAgW2J1ZmZlci5jIGJ1ZmZlci5oIGNhbm9ob3N0LmMgY2hhbm5lbHMuYyBjaGFubmVscy5oIGNpcGhlci0zZGVzMS5jXQogICAgIFtjaXBoZXItYmYxLmMgY2lwaGVyLWN0ci5jIGNpcGhlci5jIGNsZWFudXAuYyBjbGllbnRsb29wLmMgY29tcGF0LmNdCiAgICAgW2NvbXByZXNzLmMgZGVhdHRhY2suYyBkaC5jIGRpc3BhdGNoLmMgZG5zLmMgZG5zLmggZmF0YWwuYyBncm91cGFjY2Vzcy5jXQogICAgIFtncm91cGFjY2Vzcy5oIGdzcy1nZW5yLmMgZ3NzLXNlcnYta3JiNS5jIGdzcy1zZXJ2LmMgaG9zdGZpbGUuYyBrZXguY10KICAgICBba2V4Lmgga2V4ZGguYyBrZXhkaGMuYyBrZXhkaHMuYyBrZXhnZXguYyBrZXhnZXhjLmMga2V4Z2V4cy5jIGtleS5jXQogICAgIFtrZXkuaCBsb2cuYyBsb2cuaCBtYWMuYyBtYXRjaC5jIG1kLXNoYTI1Ni5jIG1pc2MuYyBtaXNjLmggbW9kdWxpLmNdCiAgICAgW21vbml0b3IuYyBtb25pdG9yX2ZkcGFzcy5jIG1vbml0b3JfbW0uYyBtb25pdG9yX21tLmggbW9uaXRvcl93cmFwLmNdCiAgICAgW21vbml0b3Jfd3JhcC5oIG1zZy5jIG5jaGFuLmMgcGFja2V0LmMgcHJvZ3Jlc3NtZXRlci5jIHJlYWRjb25mLmNdCiAgICAgW3JlYWRjb25mLmggcmVhZHBhc3MuYyByc2EuYyBzY2FyZC5jIHNjYXJkLmggc2NwLmMgc2VydmNvbmYuYyBzZXJ2Y29uZi5oXQogICAgIFtzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jIHNlc3Npb24uaCBzZnRwLWNsaWVudC5jIHNmdHAtY29tbW9uLmNdCiAgICAgW3NmdHAtY29tbW9uLmggc2Z0cC1nbG9iLmMgc2Z0cC1zZXJ2ZXIuYyBzZnRwLmMgc3NoLWFkZC5jIHNzaC1hZ2VudC5jXQogICAgIFtzc2gtZHNzLmMgc3NoLWdzcy5oIHNzaC1rZXlnZW4uYyBzc2gta2V5c2Nhbi5jIHNzaC1rZXlzaWduLmMgc3NoLXJzYS5jXQogICAgIFtzc2guYyBzc2guaCBzc2hjb25uZWN0LmMgc3NoY29ubmVjdC5oIHNzaGNvbm5lY3QxLmMgc3NoY29ubmVjdDIuY10KICAgICBbc3NoZC5jIHNzaGxvZ2luLmMgc3NobG9naW4uaCBzc2hwdHkuYyBzc2hwdHkuaCBzc2h0dHkuYyB0dHltb2Rlcy5jXQogICAgIFt1aWRzd2FwLmMgdWlkc3dhcC5oIHV1ZW5jb2RlLmMgdXVlbmNvZGUuaCB4bWFsbG9jLmMgeG1hbGxvYy5oXQogICAgIFtsb2dpbnJlYy5jIGxvZ2lucmVjLmggb3BlbmJzZC1jb21wYXQvcG9ydC1haXguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5oXQogICAgIGFsbW9zdCBlbnRpcmVseSBnZXQgcmlkIG9mIHRoZSBjdWx0dXJlIG9mICIuaCBmaWxlcyB0aGF0IGluY2x1ZGUgLmggZmlsZXMiCiAgICAgb2sgZGptLCBzb3J0IG9mIG9rIHN0ZXZlc2sKICAgICBtYWtlcyB0aGUgcGFpbiBzdG9wIGluIG9uZSBlYXN5IHN0ZXAKICAgICBOQi4gcG9ydGFibGUgY29tbWl0IGNvbnRhaW5zIGV2ZXJ5dGhpbmcgKmV4Y2VwdCogcmVtb3ZpbmcgaW5jbHVkZXMuaCwgYXMKICAgICB0aGF0IHdpbGwgdGFrZSBhIGZhaXIgYml0IG1vcmUgd29yayBhcyB3ZSBtb3ZlIGhlYWRlcnMgdGhhdCBhcmUgcmVxdWlyZWQKICAgICBmb3IgcG9ydGFiaWxpdHkgd29ya2Fyb3VuZHMgdG8gZGVmaW5lcy5oLiAoYWxzbywgdGhpcyBzdGVwIHdhc24ndCAiZWFzeSIpCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wOC8wNCAyMDo0NjowNQogICAgIFttb25pdG9yLmMgc2Vzc2lvbi5jIHNzaC1hZ2VudC5jXQogICAgIHNwYWNlcwoKMjAwNjA4MDQKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFRoZSAiY3JpcHBsZWQgQUVTIiB0ZXN0IGRvZXMgbm90IHdvcmsgb24gcmVjZW50CiAgIHZlcnNpb25zIG9mIFNvbGFyaXMsIHNvIHVzZSBBQ19MSU5LX0lGRUxTRSB0byBhY3R1YWxseSBsaW5rIHRoZSB0ZXN0IHByb2dyYW0KICAgcmF0aGVyIHRoYW4ganVzdCBjb21waWxpbmcgaXQuICBTcG90dGVkIGJ5IGRsZ0AuCgoyMDA2MDgwMgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2RhZW1vbi5jXSBBZGQgdW5pc3RkLmggZm9yIGZvcmsoKSBwcm90b3R5cGUuCgoyMDA2MDcyNQogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3htbWFwLmNdIE5lZWQgZmNudGwuaCBmb3IgT19SRFJXLgoKMjAwNjA3MjQKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMiAxMzozOTo1NQogICAgIFtzc2hkX2NvbmZpZy41XQogICAgICAtIG5ldyBzZW50ZW5jZSwgbmV3IGxpbmUKICAgICAgLSBzL1RoZSB0aGUvVGhlLwogICAgICAtIGtpbGwgYSBiYWQgY29tbWEKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEyIDIyOjI4OjUyCiAgICAgW2F1dGgtb3B0aW9ucy5jIGNhbm9ob3N0LmMgY2hhbm5lbHMuYyBpbmNsdWRlcy5oIHJlYWRjb25mLmNdCiAgICAgW3NlcnZjb25mLmMgc3NoLWtleXNjYW4uYyBzc2guYyBzc2hjb25uZWN0LmMgc3NoZC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPG5ldGRiLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMiAyMjo0MjozMgogICAgIFtpbmNsdWRlcy5oIHNzaC5jIHNzaC1yYW5kLWhlbHBlci5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN0ZGRlZi5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTQgMDE6MTU6MjgKICAgICBbbW9uaXRvcl93cmFwLmhdCiAgICAgZG9uJ3QgbmVlZCBpbmNvbXBsZXRlbHktdHlwZWQgJ3N0cnVjdCBwYXNzd2QnIG5vdyB3aXRoCiAgICAgI2luY2x1ZGUgPHB3ZC5oPjsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTcgMDE6MzE6MTAKICAgICBbYXV0aGZkLmMgYXV0aGZpbGUuYyBjaGFubmVscy5jIGNsZWFudXAuYyBjbGllbnRsb29wLmMgZ3JvdXBhY2Nlc3MuY10KICAgICBbaW5jbHVkZXMuaCBsb2cuYyBtaXNjLmMgbXNnLmMgcGFja2V0LmMgcHJvZ3Jlc3NtZXRlci5jIHJlYWRjb25mLmNdCiAgICAgW3JlYWRwYXNzLmMgc2NwLmMgc2VydmNvbmYuYyBzZnRwLWNsaWVudC5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jXQogICAgIFtzc2gtYWRkLmMgc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jIHNzaC1rZXlzY2FuLmMgc3NoLWtleXNpZ24uYyBzc2guY10KICAgICBbc3NoY29ubmVjdC5jIHNzaGxvZ2luLmMgc3NocHR5LmMgdWlkc3dhcC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHVuaXN0ZC5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTcgMTI6MDI6MjQKICAgICBbYXV0aC1vcHRpb25zLmNdCiAgICAgVXNlICdcMCcgcmF0aGVyIHRoYW4gMCB0byB0ZXJtaW5hdGVzIHN0cmluZ3M7IG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE3IDEyOjA2OjAwCiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBzZXJ2Y29uZi5jIHNzaGRfY29uZmlnLjVdCiAgICAgQWRkIFBlcm1pdE9wZW4gZGlyZWN0aXZlIHRvIHNzaGRfY29uZmlnIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlCiAgICAgInBlcm1pdG9wZW4iIGtleSBvcHRpb24uICBBbGxvd3Mgc2VydmVyIGFkbWluIHRvIGFsbG93IFRDUCBwb3J0CiAgICAgZm9yd2FyZGluZyBvbmx5IHR3byBzcGVjaWZpYyBob3N0L3BvcnQgcGFpcnMuICBVc2VmdWwgd2hlbiBjb21iaW5lZAogICAgIHdpdGggTWF0Y2guCiAgICAgSWYgcGVybWl0b3BlbiBpcyB1c2VkIGluIGJvdGggc3NoZF9jb25maWcgYW5kIGEga2V5IG9wdGlvbiwgYm90aAogICAgIG11c3QgYWxsb3cgYSBnaXZlbiBjb25uZWN0aW9uIGJlZm9yZSBpdCB3aWxsIGJlIHBlcm1pdHRlZC4KICAgICBOb3RlIHRoYXQgdXNlcnMgY2FuIHN0aWxsIHVzZSBleHRlcm5hbCBmb3J3YXJkZXJzIHN1Y2ggYXMgbmV0Y2F0LAogICAgIHNvIHRvIGJlIHRob3NlIG11c3QgYmUgY29udHJvbGxlZCB0b28gZm9yIHRoZSBsaW1pdHMgdG8gYmUgZWZmZWN0aXZlLgogICAgIEZlZWRiYWNrICYgb2sgZGptQCwgbWFuIHBhZ2UgY29ycmVjdGlvbnMgJiBvayBqbWNALgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xOCAwNzo1MDo0MAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHR3ZWFrOyBvayBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE4IDA3OjU2OjI4CiAgICAgW3NjcC4xXQogICAgIHJlcGxhY2UgRElBR05PU1RJQ1Mgd2l0aCAuRXg7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE4IDA4OjAzOjA5CiAgICAgW3NzaC1hZ2VudC4xIHNzaGRfY29uZmlnLjVdCiAgICAgbWFyayB1cCBhbmdsZSBicmFja2V0czsKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE4IDA4OjIyOjIzCiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgQ2xhcmlmeSBkZXNjcmlwdGlvbiBvZiBNYXRjaCwgd2l0aCBtaW5vciBjb3JyZWN0aW9uIGZyb20gam1jQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTggMjI6Mjc6NTUKICAgICBbZGguY10KICAgICByZW1vdmUgdW5uZWVkZWQgaW5jbHVkZXM7IG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE5IDA4OjU2OjQxCiAgICAgW3NlcnZjb25mLmMgc3NoZF9jb25maWcuNV0KICAgICBBZGQgc3VwcG9ydCBmb3IgWDExRm9yd2FyaW5nLCBYMTFEaXNwbGF5T2Zmc2V0IGFuZCBYMTFVc2VMb2NhbGhvc3QgdG8KICAgICBNYXRjaC4gIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzE5IDEzOjA3OjEwCiAgICAgW3NlcnZjb25mLmMgc2VydmNvbmYuaCBzZXNzaW9uLmMgc3NoZC44IHNzaGRfY29uZmlnIHNzaGRfY29uZmlnLjVdCiAgICAgQWRkIEZvcmNlQ29tbWFuZCBrZXl3b3JkIHRvIHNzaGRfY29uZmlnLCBlcXVpdmFsZW50IHRvIHRoZSAiY29tbWFuZD0iCiAgICAga2V5IG9wdGlvbiwgbWFuIHBhZ2UgZW50cnkgYW5kIGV4YW1wbGUgaW4gc3NoZF9jb25maWcuCiAgICAgRmVlZGJhY2sgJiBvayBkam1ALCBtYW4gcGFnZSBjb3JyZWN0aW9ucyAmIG9rIGptY0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzIwIDE1OjI2OjE1CiAgICAgW2F1dGgxLmMgc2VydmVybG9vcC5jIHNlc3Npb24uYyBzc2hjb25uZWN0Mi5jXQogICAgIG1pc3NlZCBzb21lIG5lZWRlZCAjaW5jbHVkZSA8dW5pc3RkLmg+IHdoZW4gS0VSQkVST1M1PW5vOyBpc3N1ZSBmcm9tCiAgICAgbWFzc2ltb0BjZWRvYy5tby5pdAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjEgMTI6NDM6MzYKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIHNlcnZjb25mLmMgc2VydmNvbmYuaCBzc2hkX2NvbmZpZy41XQogICAgIE1ha2UgUGVybWl0T3BlbiB0YWtlIGEgbGlzdCBvZiBwZXJtaXR0ZWQgcG9ydHMgYW5kIGFjdCBtb3JlIGxpa2UgbW9zdAogICAgIG90aGVyIGtleXdvcmRzIChpZSB0aGUgZmlyc3QgbWF0Y2ggaXMgdGhlIGVmZmVjdGl2ZSBzZXR0aW5nKS4gVGhpcwogICAgIGFsc28gbWFrZXMgaXQgZWFzaWVyIHRvIG92ZXJyaWRlIGEgcHJldmlvdXNseSBzZXQgUGVybWl0T3Blbi4gb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjEgMjE6MTM6MzAKICAgICBbY2hhbm5lbHMuY10KICAgICBtb3JlIEFSR1NVU0VEIChsaW50KSBmb3IgZGlzcGF0Y2ggdGFibGUtZHJpdmVuIGZ1bmN0aW9uczsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjEgMjE6MjY6NTUKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIEFSR1NVU0VEIGZvciBzaWduYWwgaGFuZGxlcgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMjIgMTk6MDg6NTQKICAgICBbaW5jbHVkZXMuaCBtb2R1bGkuYyBwcm9ncmVzc21ldGVyLmMgc2NwLmMgc2Z0cC1jb21tb24uY10KICAgICBbc2Z0cC1zZXJ2ZXIuYyBzc2gtYWdlbnQuYyBzc2hsb2dpbi5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHRpbWUuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzIyIDIwOjQ4OjIzCiAgICAgW2F0b21pY2lvLmMgYXV0aC1vcHRpb25zLmMgYXV0aC1wYXNzd2QuYyBhdXRoLXJob3N0cy5jIGF1dGgtcnNhLmNdCiAgICAgW2F1dGguYyBhdXRoMS5jIGF1dGgyLWNoYWxsLmMgYXV0aDItaG9zdGJhc2VkLmMgYXV0aDItcGFzc3dkLmMgYXV0aDIuY10KICAgICBbYXV0aGZkLmMgYXV0aGZpbGUuYyBidWZhdXguYyBidWZibi5jIGJ1ZmZlci5jIGNhbm9ob3N0LmMgY2hhbm5lbHMuY10KICAgICBbY2lwaGVyLTNkZXMxLmMgY2lwaGVyLWJmMS5jIGNpcGhlci1jdHIuYyBjaXBoZXIuYyBjbGllbnRsb29wLmNdCiAgICAgW2NvbXBhdC5jIGRlYXR0YWNrLmMgZGguYyBkbnMuYyBnc3MtZ2Vuci5jIGdzcy1zZXJ2LmMgaG9zdGZpbGUuY10KICAgICBbaW5jbHVkZXMuaCBrZXguYyBrZXhkaGMuYyBrZXhkaHMuYyBrZXhnZXhjLmMga2V4Z2V4cy5jIGtleS5jIGxvZy5jXQogICAgIFttYWMuYyBtYXRjaC5jIG1kLXNoYTI1Ni5jIG1pc2MuYyBtb2R1bGkuYyBtb25pdG9yLmMgbW9uaXRvcl9mZHBhc3MuY10KICAgICBbbW9uaXRvcl9tbS5jIG1vbml0b3Jfd3JhcC5jIG1zZy5jIG5jaGFuLmMgcGFja2V0LmMgcnNhLmNdCiAgICAgW3Byb2dyZXNzbWV0ZXIuYyByZWFkY29uZi5jIHJlYWRwYXNzLmMgc2NwLmMgc2VydmNvbmYuYyBzZXJ2ZXJsb29wLmNdCiAgICAgW3Nlc3Npb24uYyBzZnRwLWNsaWVudC5jIHNmdHAtY29tbW9uLmMgc2Z0cC1nbG9iLmMgc2Z0cC1zZXJ2ZXIuYyBzZnRwLmNdCiAgICAgW3NzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2gtZHNzLmMgc3NoLWtleWdlbi5jIHNzaC1rZXlzY2FuLmNdCiAgICAgW3NzaC1rZXlzaWduLmMgc3NoLXJzYS5jIHNzaC5jIHNzaGNvbm5lY3QuYyBzc2hjb25uZWN0MS5jIHNzaGNvbm5lY3QyLmNdCiAgICAgW3NzaGQuYyBzc2hsb2dpbi5jIHNzaHB0eS5jIHR0eW1vZGVzLmMgdWlkc3dhcC5jIHhtYWxsb2MuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzdHJpbmcuaD4gb3V0IG9mIGluY2x1ZGVzLmgKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzIzIDAxOjExOjA1CiAgICAgW2F1dGguaCBkaXNwYXRjaC5jIGtleC5oIHNmdHAtY2xpZW50LmNdCiAgICAgI2luY2x1ZGUgPHNpZ25hbC5oPiBmb3Igc2lnX2F0b21pY190OyBuZWVkIHRoaXMgcHJpb3IgdG8gPHN5cy9wYXJhbS5oPgogICAgIG1vdmUKIC0gKGRqbSkgW2Fjc3MuYyBhdXRoLWtyYjUuYyBhdXRoLW9wdGlvbnMuYyBhdXRoLXBhbS5jIGF1dGgtc2hhZG93LmNdCiAgIFtjYW5vaG9zdC5jIGNoYW5uZWxzLmMgY2lwaGVyLWFjc3MuYyBkZWZpbmVzLmggZG5zLmMgZ3NzLWdlbnIuY10KICAgW2dzcy1zZXJ2LWtyYjUuYyBnc3Mtc2Vydi5jIGxvZy5oIGxvZ2lucmVjLmMgbG9naW50ZXN0LmMgcmVhZGNvbmYuY10KICAgW3NlcnZjb25mLmMgc3NoLWtleWdlbi5jIHNzaC1rZXlzY2FuLmMgc3NoLWtleXNpZ24uYyBzc2gtcmFuZC1oZWxwZXIuY10KICAgW3NzaC5jIHNzaGNvbm5lY3QuYyBzc2hkLmMgb3BlbmJzZC1jb21wYXQvYmluZHJlc3Zwb3J0LmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9ic2QtYXJjNHJhbmRvbS5jIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jIG9wZW5ic2QtY29tcGF0L2dsb2IuY10KICAgW29wZW5ic2QtY29tcGF0L21rdGVtcC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtbGludXguY10KICAgW29wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmMgb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuY10KICAgW29wZW5ic2QtY29tcGF0L3NldHByb2N0aXRsZS5jIG9wZW5ic2QtY29tcGF0L3htbWFwLmNdCiAgIG1ha2UgdGhlIHBvcnRhYmxlIHRyZWUgY29tcGlsZSBhZ2FpbiAtIHNwcmlua2xlIHVuaXN0ZC5oIGFuZCBzdHJpbmcuaCAKICAgYmFjayBpbi4gRG9uJ3QgcmVkZWZpbmUgX191bnVzZWQsIGFzIGl0IHR1cm5lZCBvdXQgdG8gYmUgdXNlZCBpbgogICBoZWFkZXJzIG9uIExpbnV4LCBhbmQgcmVwbGFjZSBpdHMgdXNlIGluIGF1dGgtcGFtLmMgd2l0aCBBUkdTVVNFRAogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvZ2xvYi5jXQogICBNb3ZlIGdldF9hcmdfbWF4KCkgaW50byB0aGUgaWZkZWYgSEFWRV9HTE9CIGJsb2NrIHNvIHRoYXQgaXQgY29tcGlsZXMKICAgb24gT3BlbkJTRCAob3Igb3RoZXIgcGxhdGZvcm1zIHdpdGggYSBkZWNlbnQgZ2xvYiBpbXBsZW1lbnRhdGlvbikgd2l0aAogICAtV2Vycm9yCiAtIChkam0pIFt1dWVuY29kZS5jXQogICBBZGQgcmVzb2x2LmgsIGlzIGl0IGNvbnRhaW5zIHRoZSBwcm90b3R5cGVzIGZvciBfX2I2NF9udG9wL19fYjY0X3B0b24gb24KICAgc29tZSBwbGF0Zm9ybXMKIC0gKGRqbSkgW3Nlc3Npb24uY10KICAgZml4IGNvbXBpbGUgZXJyb3Igd2l0aCAtV2Vycm9yIC1XYWxsOiAncGF0aCcgaXMgb25seSB1c2VkIGluCiAgIGRvX3NldHVwX2VudigpIGlmIEhBVkVfTE9HSU5fQ0FQIGlzIG5vdCBkZWZpbmVkCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9iYXNlbmFtZS5jIG9wZW5ic2QtY29tcGF0L2JzZC1jbG9zZWZyb20uY10KICAgW29wZW5ic2QtY29tcGF0L2JzZC1jcmF5LmMgb3BlbmJzZC1jb21wYXQvYnNkLW9wZW5wdHkuY10KICAgW29wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5jXQogICBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWlyaXguY10KICAgW29wZW5ic2QtY29tcGF0L3JyZXN2cG9ydC5jXQogICBUaGVzZSBsb29rIHRvIG5lZWQgc3RyaW5nLmggYW5kL29yIHVuaXN0ZC5oIChiYXNlZCBvbiBhIGdyZXAgZm9yIGZ1bmN0aW9uCiAgIG5hbWVzKQogLSAoZGptKSBbTWFrZWZpbGUuaW5dCiAgIFJlbW92ZSBnZW5lcmF0ZWQgb3BlbmJzZC1jb21wYXQvcmVncmVzcy9NYWtlZmlsZSBpbiBkaXN0Y2xlYW4gdGFyZ2V0CiAtIChkam0pIFtyZWdyZXNzL01ha2VmaWxlIHJlZ3Jlc3MvYWdlbnQtZ2V0cGVlcmVpZC5zaCByZWdyZXNzL2NmZ21hdGNoLnNoXQogICBbcmVncmVzcy9jaXBoZXItc3BlZWQuc2ggcmVncmVzcy9mb3JjZWNvbW1hbmQuc2ggcmVncmVzcy9mb3J3YXJkaW5nLnNoXQogICBTeW5jIHJlZ3Jlc3MgdGVzdHMgdG8gLWN1cnJlbnQ7IGluY2x1ZGUgZHR1Y2tlckAncyBuZXcgY2ZnbWF0Y2ggYW5kIAogICBmb3JjZWNvbW1hbmQgdGVzdHMuIEFkZCBjaXBoZXItc3BlZWQuc2ggdGVzdCAobm90IGxpbmtlZCBpbiB5ZXQpCiAtIChkdHVja2VyKSBbY2xlYW51cC5jXSBTaW5jZSBjb25maWcuaCBkZWZpbmVzIF9MQVJHRV9GSUxFUyBvbiBBSVgsIGluY2x1ZGluZwogICBzeXN0ZW0gaGVhZGVycyBiZWZvcmUgZGVmaW5lcy5oIHdpbGwgY2F1c2UgY29uZmxpY3RpbmcgZGVmaW5pdGlvbnMuCiAtIChkdHVja2VyKSBbcmVncmVzcy9mb3JjZWNvbW1hbmQuc2hdIFBvcnRhYmxpemUuCgoyMDA2MDcxMwogLSAoZHR1Y2tlcikgW2F1dGgta3JiNS5jIGF1dGgtcGFtLmNdIFN0aWxsIG1vcmUgZXJybm8uaAoKMjAwNjA3MTIKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgZGVmaW5lcy5oXSBPbmx5IGRlZmluZSBTSFVUX1JEIChhbmQgZnJpZW5kcykgYW5kCiAgIE9fTk9OQkxPQ0sgaWYgdGhleSdyZSByZWFsbHkgbmVlZGVkLiAgRml4ZXMgYnVpbGQgZXJyb3JzIG9uIEhQLVVYLCBvbGQKICAgTGludXhlcyBhbmQgcHJvYmFibHkgbW9yZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIE9wZW5CU0QgbmVlZHMgPHN5cy90eXBlcy5oPiBiZWZvcmUgPHN5cy9zb2NrZXQuaD4KICAgZm9yIFNIVVRfUkQuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uY10gT3BlbkJTRCBuZWVkcyA8bmV0aW5ldC9pbi5oPiBiZWZvcmUKICAgPG5ldGluZXQvaXAuaD4uCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMCAxNjowMTo1NwogICAgIFtzZnRwLWdsb2IuYyBzZnRwLWNvbW1vbi5oIHNmdHAuY10KICAgICBidWZmZXIuaCBvbmx5IG5lZWRlZCBpbiBzZnRwLWNvbW1vbi5oIGFuZCByZW1vdmUgc29tZSB1bm5lZWRlZAogICAgIHVzZXIgaW5jbHVkZXM7IG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTAgMTY6MDQ6MjEKICAgICBbc3NoZC44XQogICAgIHMvYW5kIGFuZC9hbmQvCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMCAxNjozNzozNgogICAgIFtyZWFkcGFzcy5jIGxvZy5oIHNjcC5jIGZhdGFsLmMgeG1hbGxvYy5jIGluY2x1ZGVzLmggc3NoLWtleXNjYW4uYyBtaXNjLmMKICAgICBhdXRoLmMgcGFja2V0LmMgbG9nLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3RkYXJnLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMSAxMDoxMjowNwogICAgIFtzc2guY10KICAgICBPbmx5IGNvcHkgdGhlIHBhcnQgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCB3ZSBhY3R1YWxseSB1c2UuICBQcmV2ZW50cwogICAgIHNzaCBiYWlsaW5nIHdoZW4gU2VuZEVudiBpcyB1c2VkIGFuZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIGEgcmVhbGx5CiAgICAgbG9uZyB2YWx1ZSBleGlzdHMuICBvayBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzExIDE4OjUwOjQ4CiAgICAgW2NsaWVudGxvb3AuYyBzc2guMSBzc2guYyBjaGFubmVscy5jIHNzaF9jb25maWcuNSByZWFkY29uZi5oIHNlc3Npb24uYwogICAgIGNoYW5uZWxzLmggcmVhZGNvbmYuY10KICAgICBhZGQgRXhpdE9uRm9yd2FyZEZhaWx1cmU6IHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBpZiBzc2goMSkKICAgICBjYW5ub3Qgc2V0IHVwIGFsbCByZXF1ZXN0ZWQgZHluYW1pYywgbG9jYWwsIGFuZCByZW1vdGUgcG9ydAogICAgIGZvcndhcmRpbmdzLiBvayBkam0sIGR0dWNrZXIsIHN0ZXZlc2ssIGptYwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTEgMjA6MDc6MjUKICAgICBbc2NwLmMgYXV0aC5jIG1vbml0b3IuYyBzZXJ2ZXJsb29wLmMgc2Z0cC1zZXJ2ZXIuYyBzc2hwdHkuYyByZWFkcGFzcy5jCiAgICAgc3NoZC5jIG1vbml0b3Jfd3JhcC5jIG1vbml0b3JfZmRwYXNzLmMgc3NoLWFnZW50LmMgdHR5bW9kZXMuYyBhdG9taWNpby5jCiAgICAgaW5jbHVkZXMuaCBzZXNzaW9uLmMgc3NobG9naW4uYyBtb25pdG9yX21tLmMgcGFja2V0LmMgc3NoY29ubmVjdDIuYwogICAgIHNmdHAtY2xpZW50LmMgbmNoYW4uYyBjbGllbnRsb29wLmMgc2Z0cC5jIG1pc2MuYyBjYW5vaG9zdC5jIGNoYW5uZWxzLmMKICAgICBzc2gta2V5Z2VuLmMgcHJvZ3Jlc3NtZXRlci5jIHVpZHN3YXAuYyBtc2cuYyByZWFkY29uZi5jIHNzaGNvbm5lY3QuY10KICAgICBtb3ZlICNpbmNsdWRlIDxlcnJuby5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTEgMjA6MTY6NDMKICAgICBbc3NoLmNdCiAgICAgY2FzdCBhc3RlcmlzayBmaWVsZCBwcmVjaXNpb24gYXJndW1lbnQgdG8gaW50IHRvIHJlbW92ZSB3YXJuaW5nOwogICAgIG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzExIDIwOjI3OjU2CiAgICAgW2F1dGhmaWxlLmMgc3NoLmNdCiAgICAgbmVlZCA8ZXJybm8uaD4gaGVyZSBhbHNvIChpdCdzIGFsc28gaW5jbHVkZWQgaW4gPG9wZW5zc2wvZXJyLmg+KQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTIgMTE6MzQ6NTgKICAgICBbc3NoZC5jIHNlcnZjb25mLmggc2VydmNvbmYuYyBzc2hkX2NvbmZpZy41IGF1dGguY10KICAgICBBZGQgc3VwcG9ydCBmb3IgY29uZGl0aW9uYWwgZGlyZWN0aXZlcyB0byBzc2hkX2NvbmZpZyB2aWEgYSAiTWF0Y2giCiAgICAga2V5d29yZCwgd2hpY2ggd29ya3Mgc2ltaWxhcmx5IHRvIHRoZSAiSG9zdCIgZGlyZWN0aXZlIGluIHNzaF9jb25maWcuCiAgICAgTGluZXMgYWZ0ZXIgYSBNYXRjaCBsaW5lIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldCBpbiB0aGUgbWFpbiBzZWN0aW9uCiAgICAgaWYgdGhlIGNvbmRpdGlvbiBvbiB0aGUgTWF0Y2ggbGluZSBpcyB0cnVlLCBlZwogICAgIEFsbG93VGNwRm9yd2FyZGluZyB5ZXMKICAgICBNYXRjaCBVc2VyIGFub25jdnMKICAgICAgICAgICAgIEFsbG93VGNwRm9yd2FyZGluZyBubwogICAgIHdpbGwgYWxsb3cgcG9ydCBmb3J3YXJkaW5nIGJ5IGFsbCB1c2VycyBleGNlcHQgImFub25jdnMiLgogICAgIEN1cnJlbnRseSBvbmx5IGEgdmVyeSBzbWFsbCBzdWJzZXQgb2YgZGlyZWN0aXZlcyBhcmUgc3VwcG9ydGVkLgogICAgIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtsb2dpbnJlYy5jIG9wZW5ic2QtY29tcGF0L3htbWFwLmMgb3BlbmJzZC1jb21wYXQvYmluZHJlc3Zwb3J0LmMKICAgb3BlbmJzZC1jb21wYXQvZ2xvYi5jIG9wZW5ic2QtY29tcGF0L21rdGVtcC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmMKICAgb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuYyBvcGVuYnNkLWNvbXBhdC9zdHJ0b251bS5jXSBJbmNsdWRlIDxlcnJuby5oPi4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zZXRwcm9jdGl0bGUuY10gSW5jbHVkZSBzdGRhcmcuaC4KIC0gKGR0dWNrZXIpIFtzc2gta2V5c2Nhbi5jIHNzaC1yYW5kLWhlbHBlci5jXSBNb3JlIGVycm5vLmggaGVyZSB0b28uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0gdipwcmludGYgbmVlZHMgc3RkYXJnLmguCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLWFzcHJpbnRmLmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguYwogICBvcGVuYnNkLWNvbXBhdC9ycmVzdnBvcnQuY10gTW9yZSBlcnJuby5oLgoKMjAwNjA3MTEKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgc3NoLWtleWdlbi5jIG9wZW5ic2QtY29tcGF0L2JzZC1vcGVucHR5LmMKICAgb3BlbmJzZC1jb21wYXQvZGFlbW9uLmNdIEFkZCBpbmNsdWRlcyBuZWVkZWQgYnkgb3BlbigyKS4gIENvbmRpdGlvbmFsbHkKICAgaW5jbHVkZSBwYXRocy5oLiAgRml4ZXMgYnVpbGQgZXJyb3Igb24gU29sYXJpcy4KIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmNdIE1vcmUgZmNudGwuaCwgdGhpcyB0aW1lIG9uIEFJWCAoYW5kIHByb2JhYmx5CiAgIG90aGVycykuCgoyMDA2MDcxMAogLSAoZHR1Y2tlcikgW0lOU1RBTExdIE5ldyBhdXRvY29uZiB2ZXJzaW9uOiAyLjYwLgogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA2LzE0IDEwOjUwOjQyCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBsaW1pdCB0aGUgbnVtYmVyIG9mIHByZS1iYW5uZXIgY2hhcmFjdGVycyB3ZSB3aWxsIGFjY2VwdDsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNi8yNiAxMDozNjoxNQogICAgIFtjbGllbnRsb29wLmNdCiAgICAgbWVudGlvbiBvcHRpb25hbCBiaW5kX2FkZHJlc3MgaW4gcnVudGltZSBwb3J0IGZvcndhcmRpbmcgc2V0dXAKICAgICBjb21tYW5kLWxpbmUgaGVscC4gcGF0Y2ggZnJvbSBzYW50aGkuYW1pcnRhIEFUIGdtYWlsLmNvbQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDIgMTc6MTI6NTgKICAgICBbc3NoLjEgc3NoLmMgc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgbW9yZSBkZXRhaWxzIGFuZCBjbGFyaXR5IGZvciB0dW4oNCkgZGV2aWNlIGZvcndhcmRpbmc7IG9rIGFuZCBoZWxwCiAgICAgam1jQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDIgMTg6MzY6NDcKICAgICBbZ3NzLXNlcnYta3JiNS5jIGdzcy1zZXJ2LmNdCiAgICAgbm8gInNlcnZjb25mLmgiIG5lZWRlZCBoZXJlCiAgICAgKGdzcy1zZXJ2LWtyYjUuYyBjaGFuZ2Ugbm90IGFwcGxpZWQsIHBvcnRhYmxlIG5lZWRzIHRoZSBzZXJ2ZXIgb3B0aW9ucykKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzAyIDIyOjQ1OjU5CiAgICAgW2dyb3VwYWNjZXNzLmMgZ3JvdXBhY2Nlc3MuaCBpbmNsdWRlcy5oIHNlc3Npb24uYyBzZnRwLWNvbW1vbi5jIHNzaHB0eS5jXQogICAgIG1vdmUgI2luY2x1ZGUgPGdycC5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAgIChwb3J0YWJsZSBuZWVkZWQgdWlkc3dhcC5jIHRvbykKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzAyIDIzOjAxOjU1CiAgICAgW2NsaWVudGxvb3AuYyBzc2guMV0KICAgICB1c2UgLUtSW2JpbmRfYWRkcmVzczpdcG9ydCBoZXJlOyBvayBkam1ACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wMyAwODo1NDoyMAogICAgIFtpbmNsdWRlcy5oIHNzaC5jIHNzaGNvbm5lY3QuYyBzc2hkLmNdCiAgICAgbW92ZSAjaW5jbHVkZSAidmVyc2lvbi5oIiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDMgMTc6NTk6MzIKICAgICBbY2hhbm5lbHMuYyBpbmNsdWRlcy5oXQogICAgIG1vdmUgI2luY2x1ZGUgPGFycGEvaW5ldC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2xkIG9rIGRqbUAKICAgICAocG9ydGFibGUgbmVlZGVkIHNlc3Npb24uYyB0b28pCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wNSAwMjo0MjowOQogICAgIFtjYW5vaG9zdC5jIGhvc3RmaWxlLmMgaW5jbHVkZXMuaCBtaXNjLmMgcGFja2V0LmMgcmVhZGNvbmYuY10KICAgICBbc2VydmVybG9vcC5jIHNzaGNvbm5lY3QuYyB1dWVuY29kZS5jXQogICAgIG1vdmUgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIGRlcmFhZHRACiAgICAgKGFsc28gc3NoLXJhbmQtaGVscGVyLmMgbG9naW50ZXN0LmMgbG9naW5yZWMuYykKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDYgMTA6NDc6MDUKICAgICBbc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNlc3Npb24uYyBzc2hkX2NvbmZpZy41XQogICAgIHN1cHBvcnQgYXJndW1lbnRzIHRvIFN1YnN5c3RlbSBjb21tYW5kczsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wNiAxMDo0Nzo1NwogICAgIFtzZnRwLXNlcnZlci44IHNmdHAtc2VydmVyLmNdCiAgICAgYWRkIGNvbW1hbmRsaW5lIG9wdGlvbnMgdG8gZW5hYmxlIGxvZ2dpbmcgb2YgdHJhbnNhY3Rpb25zOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wNiAxNjowMzo1MwogICAgIFthdXRoLW9wdGlvbnMuYyBhdXRoLW9wdGlvbnMuaCBhdXRoLXBhc3N3ZC5jIGF1dGgtcmgtcnNhLmNdCiAgICAgW2F1dGgtcmhvc3RzLmMgYXV0aC1yc2EuYyBhdXRoLmMgYXV0aC5oIGF1dGgyLWhvc3RiYXNlZC5jXQogICAgIFthdXRoMi1wdWJrZXkuYyBhdXRoMi5jIGluY2x1ZGVzLmggbWlzYy5jIG1pc2MuaCBtb25pdG9yLmNdCiAgICAgW21vbml0b3Jfd3JhcC5jIG1vbml0b3Jfd3JhcC5oIHNjcC5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmNdCiAgICAgW3Nlc3Npb24uaCBzZnRwLWNvbW1vbi5jIHNzaC1hZGQuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNpZ24uY10KICAgICBbc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QuaCBzc2hkLmMgc3NocHR5LmMgc3NocHR5LmggdWlkc3dhcC5jXQogICAgIFt1aWRzd2FwLmhdCiAgICAgbW92ZSAjaW5jbHVkZSA8cHdkLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wNiAxNjoyMjozOQogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgbW92ZSAjaW5jbHVkZSAiZG5zLmgiIHVwCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wNiAxNzozNjozNwogICAgIFttb25pdG9yX3dyYXAuaF0KICAgICB0eXBvIGluIGNvbW1lbnQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzA4IDIxOjQ3OjEyCiAgICAgW2F1dGhmZC5jIGNhbm9ob3N0LmMgY2xpZW50bG9vcC5jIGRucy5jIGRucy5oIGluY2x1ZGVzLmhdCiAgICAgW21vbml0b3JfZmRwYXNzLmMgbmNoYW4uYyBwYWNrZXQuYyBzZXJ2Y29uZi5jIHNmdHAuYyBzc2gtYWdlbnQuY10KICAgICBbc3NoLWtleXNjYW4uYyBzc2guYyBzc2hjb25uZWN0Lmggc3NoZC5jIHNzaGxvZ2luLmhdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDggMjE6NDg6NTMKICAgICBbbW9uaXRvci5jIHNlc3Npb24uY10KICAgICBtaXNzZWQgdGhlc2UgZnJvbSBsYXN0IGNvbW1pdDoKICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+IG91dCBvZiBpbmNsdWRlcy5oCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wOCAyMzozMDowNgogICAgIFtsb2cuY10KICAgICBtb3ZlIHVzZXIgaW5jbHVkZXMgYWZ0ZXIgL3Vzci9pbmNsdWRlIGZpbGVzCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8wOSAxNToxNToxMQogICAgIFthdXRoMi1ub25lLmMgYXV0aGZkLmMgYXV0aGZpbGUuYyBpbmNsdWRlcy5oIG1pc2MuYyBtb25pdG9yLmNdCiAgICAgW3JlYWRwYXNzLmMgc2NwLmMgc2VydmVybG9vcC5jIHNmdHAtY2xpZW50LmMgc2Z0cC1zZXJ2ZXIuY10KICAgICBbc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uYyBzc2gta2V5c2lnbi5jIHNzaC5jIHNzaGQuY10KICAgICBbc3NobG9naW4uYyBzc2hwdHkuY10KICAgICBtb3ZlICNpbmNsdWRlIDxmY250bC5oPiBvdXQgb2YgaW5jbHVkZXMuaAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMDkgMTU6Mjc6NTkKICAgICBbc3NoLWFkZC5jXQogICAgIHVzZSBPX1JET05MWSB2cy4gMCBpbiBvcGVuKCk7IG5vIGJpbmFyeSBjaGFuZ2UKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTAgMTE6MjQ6NTQKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICByZW1vdmUgb3B0aW5kIC0gaXQgaXNuJ3QgdXNlZCBoZXJlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA3LzEwIDExOjI1OjUzCiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgZG9uJ3QgbG9nIHZhcmlhYmxlcyB0aGF0IGFyZW4ndCB5ZXQgc2V0CiAtIChkam0pIFtsb2dpbnJlYy5jIHNzaC1yYW5kLWhlbHBlci5jIHNzaGQuYyBvcGVuYnNkLWNvbXBhdC9nbG9iLmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9ta3RlbXAuYyBvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXQogICBbb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uYyBvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5jXQogICBbb3BlbmJzZC1jb21wYXQveGNyeXB0LmNdIEZpeCBpbmNsdWRlcy5oIGZhbGxvdXQsIG1haW5seSBmY250bC5oCiAtIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDcvMTAgMTI6MDM6MjAKICAgICBbc2NwLmNdCiAgICAgZHVwbGljYXRlIGFyZ3YgYXQgdGhlIHN0YXJ0IG9mIG1haW4oKSBiZWNhdXNlIGl0IGdldHMgbW9kaWZpZWQgbGF0ZXI7CiAgICAgcG9pbnRlZCBvdXQgYnkgZGVyYWFkdEAgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMCAxMjowODowOAogICAgIFtjaGFubmVscy5jXQogICAgIGZpeCBtaXNwYXJzaW5nIG9mIFNPQ0tTIDUgcGFja2V0cyB0aGF0IGNvdWxkIHJlc3VsdCBpbiBhIGNyYXNoOwogICAgIHJlcG9ydGVkIGJ5IG1rQCBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNy8xMCAxMjo0Njo1MQogICAgIFttaXNjLmMgbWlzYy5oIHNzaGQuOCBzc2hjb25uZWN0LmNdCiAgICAgQWRkIHBvcnQgaWRlbnRpZmllciB0byBrbm93bl9ob3N0cyBmb3Igbm9uLWRlZmF1bHQgcG9ydHMsIGJhc2VkIG9yaWdpbmFsbHkKICAgICBvbiBhIHBhdGNoIGZyb20gRGV2aW4gTmF0ZSBpbiBieiM5MTAuCiAgICAgRm9yIGFueSBjb25uZWN0aW9uIHVzaW5nIHRoZSBkZWZhdWx0IHBvcnQgb3IgdXNpbmcgYSBIb3N0S2V5QWxpYXMgdGhlCiAgICAgZm9ybWF0IGlzIHVuY2hhbmdlZCwgb3RoZXJ3aXNlIHRoZSBob3N0IG5hbWUgb3IgYWRkcmVzcyBpcyBlbmNsb3NlZAogICAgIHdpdGhpbiBzcXVhcmUgYnJhY2tldHMgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIHNzaGQncyBMaXN0ZW5BZGRyZXNzLgogICAgIFRlc3RlZCBieSBtYW55LCBvayBtYXJrdXNALgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdIE5lZWQgdG8gaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogICBmb3Igc3RydWN0IHNvY2thZGRyIG9uIHBsYXRmb3JtcyB0aGF0IHVzZSB0aGUgZmFrZS1yZmMgc3R1ZmYuCgoyMDA2MDcwNgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVHJ5IEFJWCBibGlicGF0aCB0ZXN0IGluIGRpZmZlcmVudCBvcmRlciB3aGVuCiAgIGNvbXBpbGluZyB3aXRoIGdjYy4gIGdjYyA0LjEueCB3aWxsIGFjY2VwdCAoYnV0IGlnbm9yZSkgLWIgZmxhZ3Mgc28KICAgY29uZmlndXJlIHdvdWxkIG5vdCBzZWxlY3QgdGhlIGNvcnJlY3QgbGlicGF0aCBsaW5rZXIgZmxhZ3MuCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gQSBiaXQgbW9yZSBpbmZvIG9uIGF1dG9jb25mLgoKMjAwNjA3MDUKIC0gKGR0dWNrZXIpIFtzc2gtcmFuZC1oZWxwZXIuY10gRG9uJ3QgZXhpdCBpZiBta2RpciBmYWlscyBiZWNhdXNlIHRoZQogICB0YXJnZXQgYWxyZWFkeSBleGlzdHMuCgoyMDA2MDYzMAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmhdIFNOUFJJTlRGX0NPTlNUIGZvciBzbnByaW50ZgogICBkZWNsYXJhdGlvbiB0b28uICBQYXRjaCBmcm9tIHJ1c3MgYXQgc2x1ZGdlLm5ldC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBVbmRlZiBfcmVzIGJlZm9yZSBkZWZpbmluZyBpdCwKICAgcHJldmVudHMgd2FybmluZ3Mgb24gcGxhdGZvcm1zIHdoZXJlIF9yZXMgaXMgaW4gdGhlIHN5c3RlbSBoZWFkZXJzLgogLSAoZHR1Y2tlcikgW0lOU1RBTExdIEJ1ZyAjMTIwMjogTm90ZSB3aGVuIGF1dG9jb25mIGlzIHJlcXVpcmVkIGFuZCB3aGljaAogICB2ZXJzaW9uLgoKMjAwNjA2MjcKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTIwMzogQWRkIG1pc3NpbmcgJ1snLCB3aGljaCBjYXVzZXMgcHJvYmxlbXMKICAgd2l0aCBhdXRvY29uZiAyLjYwLiAgUGF0Y2ggZnJvbSB2YXBpZXIgYXQgZ2VudG9vLm9yZy4KCjIwMDYwNjI1CiAtIChkdHVja2VyKSBbY2hhbm5lbHMuYyBzZXJ2ZXJsb29wLmNdIEFwcGx5IHRoZSBidWcgIzExMDIgd29ya2Fyb3VuZCB0byBwdHlzCiAgIG9ubHksIG90aGVyd2lzZSBzc2hkIGNhbiBoYW5nIGV4aXRpbmcgbm9uLWludGVyYWN0aXZlIHNlc3Npb25zLgoKMjAwNjA2MjQKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTE5MzogRGVmaW5lIFBBU1NXRF9ORUVEU19VU0VSTkFNRSBvbiBTb2xhcmlzLgogICBXb3JrcyBhcm91bmQgbGltaXRhdGlvbiBpbiBTb2xhcmlzJyBwYXNzd2QgcHJvZ3JhbSBmb3IgY2hhbmdpbmcgcGFzc3dvcmRzCiAgIHdoZXJlIHRoZSB1c2VybmFtZSBpcyBsb25nZXIgdGhhbiA4IGNoYXJhY3RlcnMuICBvayBkam1ACiAtIChkdHVja2VyKSBbc2VydmVybG9vcC5jXSBHZXQgaWZkZWYvaWZuZGVmIHRoZSByaWdodCB3YXkgYXJvdW5kIGZvciB0aGUgYnVnCiAgICMxMTAyIHdvcmthcm91bmQuCgoyMDA2MDYyMwogLSAoZHR1Y2tlcikgW1JFQURNRS5wbGF0Zm9ybSBjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uY10gQWRkCiAgIHR1bm5lbCBzdXBwb3J0IGZvciBNYWMgT1MgWC9EYXJ3aW4gdmlhIGEgdGhpcmQtcGFydHkgdHVuIGRyaXZlci4gIFBhdGNoCiAgIGZyb20gcmV5a0AsIHRlc3RlZCBieSBhbmlsQAogLSAoZHR1Y2tlcikgW2NoYW5uZWxzLmMgY29uZmlndXJlLmFjIHNlcnZlcmxvb3AuY10gQnVnICMxMTAyOiBBcm91bmQgQUlYCiAgIDQuMy4zIE1MMyBvciBzbywgdGhlIEFJWCBwdHkgbGF5ZXIgc3RhcnRpbmcgcGFzc2luZyB6ZXJvLWxlbmd0aCB3cml0ZXMKICAgb24gdGhlIHB0eSBzbGF2ZSBhcyB6ZXJvLWxlbmd0aCByZWFkcyBvbiB0aGUgcHR5IG1hc3Rlciwgd2hpY2ggc3NoZAogICBpbnRlcnByZXRzIGFzIHRoZSBkZXNjcmlwdG9yIGNsb3NpbmcuICBTaW5jZSBtb3N0IHRoaW5ncyBkb24ndCBkbyB6ZXJvCiAgIGxlbmd0aCB3cml0ZXMgdGhpcyByYXJlbHkgbWF0dGVycywgYnV0IG9jY2FzaW9uYWxseSBpdCBoYXBwZW5zLCBhbmQgd2hlbgogICBpdCBkb2VzIHRoZSBTU0ggcHR5IHNlc3Npb24gYXBwZWFycyB0byBoYW5nLCBzbyB3ZSBhZGQgYSBzcGVjaWFsIGNhc2UgZm9yCiAgIHRoaXMgY29uZGl0aW9uLiAgb2sgZGptQAoKMjAwNjA2MTMKIC0gKGRqbSkgW2dldHB1dC5oXSBUaGlzIGZpbGUgaGFzIGJlZW4gcmVwbGFjZWQgYnkgZnVuY3Rpb25zIGluIG1pc2MuYwogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzA4IDEwOjQ5OjQ4CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgdWludDMyX3QgLT4gdV9pbnQzMl90ICh3aGljaCB3ZSB1c2UgZXZlcnl3aGVyZSBlbHNlKQogICAgIChJZCBzeW5jIG9ubHkgLSBwb3J0YWJsZSBhbHJlYWR5IGhhZCB0aGlzKQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8xNiAwOTowMDowMAogICAgIFtjbGllbnRsb29wLmNdCiAgICAgbWlzc2luZyBmcmVlOyBmcm9tIEt5bGVuZSBIYWxsCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzE3IDEyOjQzOjM0CiAgICAgW3NjcC5jIHNmdHAuYyBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmMgc3NoY29ubmVjdC5jXQogICAgIGZpeCBsZWFrOyBjb3Zlcml0eSB2aWEgS3lsZW5lIEpvIEhhbGwKICAgLSBtaW9kQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzE4IDIxOjI3OjI1CiAgICAgW2tleGRoYy5jIGtleGdleGMuY10KICAgICBwYXJhbXRlciAtPiBwYXJhbWV0ZXIKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzI5IDEyOjU0OjA4CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBBZGQgZ3NzYXBpLXdpdGgtbWljIHRvIFByZWZlcnJlZEF1dGhlbnRpY2F0aW9ucyBkZWZhdWx0IGxpc3Q7IG9rIGptYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMjkgMTI6NTY6MzMKICAgICBbc3NoX2NvbmZpZ10KICAgICBBZGQgR1NTQVBJQXV0aGVudGljYXRpb24gYW5kIEdTU0FQSURlbGVnYXRlQ3JlZGVudGlhbHMgdG8gZXhhbXBsZXMgaW4KICAgICBzYW1wbGUgc3NoX2NvbmZpZy4gIG9rIG1hcmt1c0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMjkgMTY6MTA6MDMKICAgICBbc3NoX2NvbmZpZy41XQogICAgIG9vcHMgLSBwcmV2aW91cyB3YXMgdG9vIGxvbmc7IHNwbGl0IHRoZSBsaXN0IG9mIGF1dGhzIHVwCiAgIC0gbWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMzAgMTE6NDY6MzgKICAgICBbc3NoLWFkZC5jXQogICAgIFN5bmMgdXNhZ2UoKSB3aXRoIG1hbiBwYWdlIGFuZCByZWFsaXR5LgogICAgIG9rIGRlcmFhZHQgZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8yOSAxNjoxMzoyMwogICAgIFtzc2guMV0KICAgICBhZGQgR1NTQVBJIHRvIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgc3VwcG9ydGVkOwogICAtIG1rQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA1LzMwIDExOjQ2OjM4CiAgICAgW3NzaC1hZGQuY10KICAgICBTeW5jIHVzYWdlKCkgd2l0aCBtYW4gcGFnZSBhbmQgcmVhbGl0eS4KICAgICBvayBkZXJhYWR0IGR0dWNrZXIKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDYvMDEgMDk6MjE6NDgKICAgICBbc3NoZC5jXQogICAgIGNhbGwgZ2V0X3JlbW90ZV9pcGFkZHIoKSBlYXJseTsgZml4ZXMgbG9nZ2luZyBhZnRlciBjbGllbnQgZGlzY29ubmVjdHM7CiAgICAgcmVwb3J0IG1wZkA7IG9rIGR0dWNrZXJACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA2LzA2IDEwOjIwOjIwCiAgICAgW3JlYWRwYXNzLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QuaCBzc2hjb25uZWN0Mi5jIHVpZHN3YXAuY10KICAgICByZXBsYWNlIHJlbWFpbmluZyBzZXR1aWQoKSBjYWxscyB3aXRoIHBlcm1hbmVudGx5X3NldF91aWQoKSBhbmQKICAgICBjaGVjayBzZXRldWlkKCkgcmV0dXJuIHZhbHVlczsgcmVwb3J0IE1hcmN1cyBNZWlzc25lcjsgb2sgZHR1Y2tlciBkam0KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDYvMDggMTQ6NDU6NDkKICAgICBbcmVhZHBhc3MuYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDIuYyB1aWRzd2FwLmMgdWlkc3dhcC5oXQogICAgIGRvIG5vdCBzZXQgdGhlIGdpZCwgbm90ZWQgYnkgc29sYXI7IG9rIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNi8xMyAwMToxODozNgogICAgIFtzc2gtYWdlbnQuY10KICAgICBhbHdheXMgdXNlIGEgZm9ybWF0IHN0cmluZywgZXZlbiB3aGVuIHByaW50aW5nIGEgY29uc3RhbnQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDYvMTMgMDI6MTc6MDcKICAgICBbc3NoLWFnZW50LmNdCiAgICAgcmV2ZXJ0OyBpIGFtIG9uIGRydWdzLiBzcG90dGVkIGJ5IGFsZXhhbmRlciBBVCBiZWFyZC5zZQoKMjAwNjA1MjEKIC0gKGR0dWNrZXIpIFthdXRoLmMgbW9uaXRvci5jXSBOb3cgdGhhdCB3ZSBkb24ndCBsb2cgZnJvbSBib3RoIHRoZSBtb25pdG9yCiAgIGFuZCBzbGF2ZSwgd2UgY2FuIHJlbW92ZSB0aGUgc3BlY2lhbC1jYXNlIGhhbmRsaW5nIGluIHRoZSBhdWRpdCBob29rIGluCiAgIGF1dGhfbG9nLgoKMjAwNjA1MTcKIC0gKGR0dWNrZXIpIFtzc2gtcmFuZC1oZWxwZXIuY10gQ2hlY2sgcmV0dXJuIGNvZGUgb2YgbWtkaXIgYW5kIGZpeCBmaWxlCiAgIHBvaW50ZXIgbGVhay4gIEZyb20ga2poYWxsIGF0IHVzLmlibS5jb20sIGZvdW5kIGJ5IGNvdmVyaXR5LgoKMjAwNjA1MTUKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBVc2UgX2NvbXBhdF9yZXMgaW5zdGVhZCBvZgogICBfcmVzLCBwcmV2ZW50cyBwcm9ibGVtcyBvbiBzb21lIHBsYXRmb3JtcyB0aGF0IGhhdmUgX3JlcyBhcyBhIGdsb2JhbCBidXQKICAgZG9uJ3QgaGF2ZSBnZXRycnNldGJ5bmFtZSgpLCBlZyBJUklYIDUuMy4gIEZvdW5kIGFuZCB0ZXN0ZWQgYnkKICAgZ2Vvcmcuc2Nod2FyeiBhdCBmcmVlbmV0LmRlLCBvayBkam1ALgogLSAoZHR1Y2tlcikgW2RlZmluZXMuaF0gRmluZCBhIHZhbHVlIGZvciBJT1ZfTUFYIG9yIHVzZSBhIGNvbnNlcnZhdGl2ZQogICBkZWZhdWx0LiAgUGF0Y2ggb3JpZ2luYWxseSBmcm9tIHRpbUAsIG9rIGRqbQogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEJ1ZyAjMTE4ODogcGFzcyByZXN1bHQgb2YgZG9fcGFtX2FjY291bnQgYmFjayBhbmQKICAgZG8gbm90IGFsbG93IGtiZGludCBhZ2FpbiBhZnRlciB0aGUgUEFNIGFjY291bnQgY2hlY2sgZmFpbHMuICBvayBkam1ACgoyMDA2MDUwNgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMjUgMDg6MDI6MjcKICAgICBbYXV0aGZpbGUuYyBhdXRoZmlsZS5oIHNzaGNvbm5lY3QyLmMgc3NoLmMgc3NoY29ubmVjdDEuY10KICAgICBQcmV2ZW50IHNzaCBmcm9tIHRyeWluZyB0byBvcGVuIHByaXZhdGUga2V5cyB3aXRoIGJhZCBwZXJtaXNzaW9ucyBtb3JlIHRoYW4KICAgICBvbmNlIG9yIHByb21wdGluZyBmb3IgdGhlaXIgcGFzc3BocmFzZXMgKHdoaWNoIGl0IHN1YnNlcXVlbnRseSBpZ25vcmVzCiAgICAgYW55d2F5KSwgc2ltaWxhciB0byBhIHByZXZpb3VzIGNoYW5nZSBpbiBzc2gtYWRkLiAgYnogIzExODYsIG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDUvMDQgMTQ6NTU6MjMKICAgICBbZGguY10KICAgICB0aWdodGVyIERIIGV4cG9uZW50IGNoZWNrcyBoZXJlIHRvbzsgZmVlZGJhY2sgYW5kIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMDEgMDU6Mzc6NDYKICAgICBbT1ZFUlZJRVddCiAgICAgJE9wZW5CU0QkIGluIGhlcmUgdG9vCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNS8wNiAwODozNTo0MAogICAgIFthdXRoLWtyYjUuY10KICAgICBBZGQgJE9wZW5CU0QkIGluIGNvbW1lbnQgaGVyZSB0b28KCjIwMDYwNTA0CiAtIChkdHVja2VyKSBbYXV0aC1wYW0uYyBncm91cGFjY2Vzcy5jIG1vbml0b3IuYyBtb25pdG9yX3dyYXAuYyBzY2FyZC1vcGVuc2MuYwogICBzZXNzaW9uLmMgc3NoLXJhbmQtaGVscGVyLmMgc3NoZC5jIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5jCiAgIG9wZW5ic2QtY29tcGF0L3NldHByb2N0aXRsZS5jXSBDb252ZXJ0IG1hbGxvYyhmb28qYmFyKSAtPiBjYWxsb2MoZm9vLGJhcikKICAgaW4gUG9ydGFibGUtb25seSBjb2RlOyBzaW5jZSBjYWxsb2MgemVyb3MsIHJlbW92ZSBub3ctcmVkdW5kYW50IG1lbXNldHMuCiAgIEFsc28gYWRkIGEgY291cGxlIG9mIHNhbml0eSBjaGVja3MuICBXaXRoICYgb2sgZGptQAoKMjAwNjA1MDMKIC0gKGR0dWNrZXIpIFtwYWNrZXQuY10gUmVtb3ZlIGluX3N5c3RtLmggc2luY2UgaXQncyBhbHNvIGluIGluY2x1ZGVzLmgKICAgYW5kIGRvdWJsZSBpbmNsdWRpbmcgaXQgb24gSVJJWCA1LjMgY2F1c2VzIHByb2JsZW1zLiAgRnJvbSBHZW9yZyBTY2h3YXJ6LAogICAibm8gb2JqZWN0aW9ucyIgdGltQAoKMjAwNjA0MjMKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMDEgMDU6NDI6MjAKICAgICBbc2NwLmNdCiAgICAgbWluaW1hbCBsaW50IGNsZWFudXAgKHVudXNlZCBjcnVkLCBhbmQgc29tZSBzaXplX3QpOyBvayBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMDEgMDU6NTA6MjkKICAgICBbc2NwLmNdCiAgICAgeGFzcHJpbnRpZmljYXRpb247IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzAxIDA1OjUxOjM0CiAgICAgW2F0b21pY2lvLmNdCiAgICAgQU5TSWZ5OyByZXF1ZXN0ZWQgZGVyYWFkdEAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzAyIDA4OjM0OjUyCiAgICAgW3NzaC1rZXlzaWduLmNdCiAgICAgc2Vzc2lvbmlkIGNhbiBiZSAzMiBieXRlcyBub3cgdG9vIHdoZW4gc2hhMjU2IGtleCBpcyB1c2VkOyBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzAzIDA3OjEwOjM4CiAgICAgW2dzcy1nZW5yLmNdCiAgICAgR1NTQVBJIGJ1ZmZlcnMgc2hvdWxkbid0IGJlIG51bC10ZXJtaW5hdGVkLCBzcG90dGVkIGluIGJ1Z3ppbGxhICMxMDY2CiAgICAgYnkgZGxlb25hcmQgQVQgdmludGVsYS5jb20uIHVzZSB4YXNwcmludGYoKSB0byBzaW1wbGlmeSBjb2RlIHdoaWxlIGluCiAgICAgdGhlcmU7ICJsb29rcyByaWdodCIgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMTYgMDA6NDg6NTIKICAgICBbYnVmZmVyLmMgYnVmZmVyLmggY2hhbm5lbHMuY10KICAgICBGaXggY29uZGl0aW9uIHdoZXJlIHdlIGNvdWxkIGV4aXQgd2l0aCBhIGZhdGFsIGVycm9yIHdoZW4gYW4gaW5wdXQKICAgICBidWZmZXIgYmVjYW1lIHRvbyBsYXJnZSBhbmQgdGhlIHJlbW90ZSBlbmQgaGFkIGFkdmVydGlzZWQgYSBiaWcgd2luZG93LgogICAgIFRoZSBwcm9ibGVtIHdhcyBhIG1pc21hdGNoIGluIHRoZSBiYWNrb2ZmIG1hdGggYmV0d2VlbiB0aGUgY2hhbm5lbHMgY29kZQogICAgIGFuZCB0aGUgYnVmZmVyIGNvZGUsIHNvIG1ha2UgYSBidWZmZXJfY2hlY2tfYWxsb2MoKSBmdW5jdGlvbiB0aGF0IHRoZQogICAgIGNoYW5uZWxzIGNvZGUgY2FuIHVzZSB0byBwcm9wc2VjdGl2bHkgY2hlY2sgd2hldGhlciBhbiBpbmNyZW1lbnRhbAogICAgIGFsbG9jYXRpb24gd2lsbCBzdWNjZWVkLiAgYnogIzExMzEsIGRlYnVnZ2VkIHdpdGggdGhlIGFzc2lzdGFuY2Ugb2YKICAgICBjb3ZlIEFUIHdpbGRwYWNrZXRzLmNvbTsgb2sgZHR1Y2tlckAgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMTYgMDA6NTI6NTUKICAgICBbYXRvbWljaW8uYyBhdG9taWNpby5oXQogICAgIGludHJvZHVjZSBhdG9taWNpb3YoKSBmdW5jdGlvbiB0aGF0IHdyYXBzIHJlYWR2L3dyaXRldiB0byByZXRyeQogICAgIGludGVycnVwdGVkIHRyYW5zZmVycyBsaWtlIGF0b21pY2lvKCkgZG9lcyBmb3IgcmVhZC93cml0ZTsKICAgICBmZWVkYmFjayBkZXJhYWR0QCBkdHVja2VyQCBzdGV2ZXNrQCBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8xNiAwMDo1NDoxMAogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIGF2b2lkIG1ha2luZyBhIHRpbnkgNC1ieXRlIHdyaXRlIHRvIHNlbmQgdGhlIHBhY2tldCBsZW5ndGggb2Ygc2Z0cAogICAgIGNvbW1hbmRzLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSBzZXBhcmF0ZSB0aW55IHBhY2tldCBvbiB0aGUgd2lyZSBieQogICAgIHVzaW5nIGF0b21pY2lvdih3cml0ZXYsIC4uLikgdG8gd3JpdGUgdGhlIGxlbmd0aCBhbmQgdGhlIGNvbW1hbmQgaW4gb25lCiAgICAgcGFzczsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDQvMTYgMDc6NTk6MDAKICAgICBbYXRvbWljaW8uY10KICAgICByZW9yZGVyIHNhbml0eSB0ZXN0IHNvIHRoYXQgaXQgY2Fubm90IGRlcmVmZXJlbmNlIHBhc3QgdGhlIGVuZCBvZiB0aGUKICAgICBpb3YgYXJyYXk7IHdlbGwgc3BvdHRlZCBjYW5hY2FyQCEKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzE4IDEwOjQ0OjI4CiAgICAgW2J1ZmF1eC5jIGJ1ZmJuLmMgTWFrZWZpbGUuaW5dCiAgICAgTW92ZSBCdWZmZXIgYmlnbnVtIGZ1bmN0aW9ucyBpbnRvIHRoZWlyIG93biBmaWxlLCBidWZibi5jLiBUaGlzIG1lYW5zCiAgICAgdGhhdCBzZnRwIGFuZCBzZnRwLXNlcnZlciAod2hpY2ggdXNlIHRoZSBCdWZmZXIgZnVuY3Rpb25zIGluIGJ1ZmF1eC5jIAogICAgIGJ1dCBub3QgdGhlIGJpZ251bSBvbmVzKSBubyBsb25nZXIgbmVlZCB0byBiZSBsaW5rZWQgd2l0aCBsaWJjcnlwdG8uCiAgICAgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8yMCAwOToyNzowOQogICAgIFthdXRoLmggY2xpZW50bG9vcC5jIGRpc3BhdGNoLmMgZGlzcGF0Y2guaCBrZXguaF0KICAgICByZXBsYWNlIHRoZSBsYXN0IG5vbi1zaWdfYXRvbWljX3QgZmxhZyB1c2VkIGluIGEgc2lnbmFsIGhhbmRsZXIgd2l0aCBhCiAgICAgc2lnX2F0b21pY190LCB1bmZvcnR1bmF0ZWx5IHdpdGggc29tZSBrbm9jay1vbiBlZmZlY3RzIGluIG90aGVyIChub24tCiAgICAgc2lnbmFsKSBjb250ZXh0cyBpbiB3aGljaCBpdCBpcyB1c2VkOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzIwIDA5OjQ3OjU5CiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBzaW1wbGlmeTsgb2sgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wNC8yMCAyMTo1Mzo0NAogICAgIFtpbmNsdWRlcy5oIHNlc3Npb24uYyBzZnRwLmNdCiAgICAgU3dpdGNoIGZyb20gdXNpbmcgcGlwZXMgdG8gc29ja2V0cGFpcnMgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbgogICAgIHNmdHAvc2NwIGFuZCBzc2gsIGFuZCBiZXR3ZWVuIHNzaGQgYW5kIGl0cyBzdWJwcm9jZXNzZXMuIFRoaXMgc2F2ZXMKICAgICBhIGZpbGUgZGVzY3JpcHRvciBwZXIgc2Vzc2lvbiBhbmQgYXBwYXJlbnRseSBtYWtlcyB1c2VybGFuZCBwcHAgb3ZlcgogICAgIHNzaCB3b3JrOyBvayBtYXJrdXNAIGRlcmFhZHRAIChJRCBTeW5jIG9ubHkgLSBwb3J0YWJsZSBtYWtlcyB0aGlzCiAgICAgZGVjaXNpb24gb24gYSBwZXItcGxhdGZvcm0gYmFzaXMpCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzIyIDA0OjA2OjUxCiAgICAgW3VpZHN3YXAuY10KICAgICB1c2Ugc2V0cmVzW3VnXWlkKCkgdG8gcGVybWFuZW50bHkgcmV2b2tlIHByaXZpbGVnZXM7IG9rIGRlcmFhZHRACiAgICAgKElEIFN5bmMgb25seSAtIHBvcnRhYmxlIGFscmVhZHkgdXNlcyBzZXRyZXNbdWddaWQoKSB3aGVuZXZlciBwb3NzaWJsZSkKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzA0LzIyIDE4OjI5OjMzCiAgICAgW2NyYzMyLmNdCiAgICAgcmVtb3ZlIGV4dHJhIHNwYWNlcwogLSAoZGptKSBbYXV0aC5oIGRpc3BhdGNoLmgga2V4LmhdIHNwcmlua2xlIGluIHNpZ25hbC5oIHRvIGdldAogICBzaWdfYXRvbWljX3QKCjIwMDYwNDIxCiAtIChkam0pIFtNYWtlZmlsZS5pbiBjb25maWd1cmUuYWMgc2Vzc2lvbi5jIHNzaHB0eS5jXQogICBbY29udHJpYi9yZWRoYXQvc3NoZC5pbml0IG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluXQogICBbb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWxpbnV4LmhdIEFkZCBzdXBwb3J0IGZvciBTRUxpbnV4LCBzZXR0aW5nIAogICB0aGUgZXhlY3V0aW9uIGFuZCBUVFkgY29udGV4dHMuIGJhc2VkIG9uIHBhdGNoIGZyb20gRGFuaWVsIFdhbHNoLAogICBieiAjODgwOyBvayBkdHVja2VyQAoKMjAwNjA0MTgKIC0gKGRqbSkgW2Nhbm9ob3N0LmNdIFJlb3JkZXIgSVAgb3B0aW9ucyBjaGVjayBzbyB0aGF0IGl0IGlzbid0IGJyb2tlbgogICBieSBtYXBwZWQgYWRkcmVzc2VzOyBieiAjMTE3OSByZXBvcnRlZCBieSBtYXJrdyB3dGVjaC1sbGMuY29tOwogICBvayBkdHVja2VyQAoKMjAwNjAzMzEKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjcgMDE6MjE6MTgKICAgICBbeG1hbGxvYy5jXQogICAgIHdlIGNhbiBkbyB0aGUgc2l6ZSAmIG5tZW1iIGNoZWNrIGJlZm9yZSB0aGUgaW50ZWdlciBvdmVyZmxvdyBjaGVjazsgCiAgICAgZXZvbAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjcgMTM6MDM6NTQKICAgICBbZGguY10KICAgICB1c2Ugc3RydG9udW0oKSBpbnN0ZWFkIG9mIGF0b2koKSwgbGltaXQgZGhnIHNpemUgdG8gNjRrOyBvayBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjcgMjM6MTU6NDYKICAgICBbc2Z0cC5jXQogICAgIGFsd2F5cyB1c2UgYSBmb3JtYXQgc3RyaW5nIGZvciBhZGRhcmdzOyBzcG90dGVkIGJ5IG1vdXJpbmdACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yOCAwMDoxMjozMQogICAgIFtSRUFETUUudHVuIHNzaC5jXQogICAgIHNwYWNpbmcKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI4IDAxOjUyOjI4CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgZG8gbm90IGFjY2VwdCB1bnJlYXNvbmFibGUgWCBwb3J0cyBudW1iZXJzOyBvayBkam0KICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI4IDAxOjUzOjQzCiAgICAgW3NzaC1hZ2VudC5jXQogICAgIHVzZSBzdHJ0b251bSgpIHRvIHBhcnNlIHRoZSBwaWQgZnJvbSB0aGUgZmlsZSwgYW5kIHJhbmdlIGNoZWNrIGl0CiAgICAgYmV0dGVyOyBvayBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMzAgMDk6NDE6MjUKICAgICBbY2hhbm5lbHMuY10KICAgICBBUkdTVVNFRCBmb3IgZGlzcGF0Y2ggdGFibGUtZHJpdmVuIGZ1bmN0aW9ucwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMCAwOTo1ODoxNgogICAgIFthdXRoZmQuYyBidWZhdXguYyBkZWF0dGFjay5jIGdzcy1zZXJ2LmMgbWFjLmMgbWlzYy5jIG1pc2MuaF0KICAgICBbbW9uaXRvcl93cmFwLmMgbXNnLmMgcGFja2V0LmMgc2Z0cC1jbGllbnQuYyBzZnRwLXNlcnZlci5jIHNzaC1hZ2VudC5jXQogICAgIHJlcGxhY2Uge0dFVCxQVVR9X1hYQklUIG1hY3JvcyB3aXRoIGZ1bmN0aW9uYWxseSBzaW1pbGFyIGZ1bmN0aW9ucywKICAgICBzaWxlbmNpbmcgYSBoZWFwIG9mIGxpbnQgd2FybmluZ3MuIGFsc28gYWxsb3dzIHRoZW0gdG8gdXNlCiAgICAgX19ib3VuZGVkX18gY2hlY2tpbmcgd2hpY2ggY2FuJ3QgYmUgYXBwbGllZCB0byBtYWNyb3M7IHJlcXVlc3RlZAogICAgIGJ5IGFuZCBmZWVkYmFjayBmcm9tIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzMwIDEwOjQxOjI1CiAgICAgW3NzaC5jIHNzaF9jb25maWcuNV0KICAgICBhZGQgcGVyY2VudCBlc2NhcGUgY2hhcnMgdG8gdGhlIElkZW50aXR5RmlsZSBvcHRpb24sIGJ6ICMxMTU5IGJhc2VkCiAgICAgb24gYSBwYXRjaCBieSBpbWFnaW5nIEFUIG1hdGgudWFsYmVydGEuY2E7IGZlZWRiYWNrIGFuZCBvayBkdHVja2VyQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMzAgMTE6MDU6MTcKICAgICBbc3NoLWtleWdlbi5jXQogICAgIENvcnJlY3RseSBoYW5kbGUgdHJ1bmNhdGVkIGZpbGVzIHdoaWxlIGNvbnZlcnRpbmcga2V5czsgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMzAgMTE6NDA6MjEKICAgICBbYXV0aC5jIG1vbml0b3IuY10KICAgICBQcmV2ZW50IGR1cGxpY2F0ZSBsb2cgbWVzc2FnZXMgd2hlbiBwcml2c2VwPXllczsgb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMSAwOTowOTozMAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAga2lsbCB0cmFpbGluZyB3aGl0ZXNwYWNlOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8zMSAwOToxMzo1NgogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgcmVtb3RlIHVzZXIgZXNjYXBlIGlzICVyIG5vdCAlaDsgc3BvdHRlZCBieSBqbWNACgoyMDA2MDMyNgogLSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTUgMDg6NDY6NDQKICAgICBbc3NoLWtleWdlbi5jXQogICAgIGlmIG5vIGtleSBmaWxlIGFyZSBnaXZlbiB3aGVuIHByaW50aW5nIHRoZSBETlMgaG9zdCByZWNvcmQsIHVzZSB0aGUKICAgICBob3N0IGtleSBmaWxlKHMpIGFzIGRlZmF1bHQuIG9rIGRqbUAKICAgLSBiaW9ybkBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xNiAxMDozMTo0NQogICAgIFtzY3AuY10KICAgICBUcnkgdG8gZGlzcGxheSBlcnJvcm1lc3NhZ2UgZXZlbiBpZiByZW1vdXQgPT0gLTEKICAgICBvayBkam1ALCBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE3IDIyOjMxOjUwCiAgICAgW2F1dGhmZC5jXQogICAgIGFub3RoZXIgdW5yZWFjaGFibGUgZm91bmQgYnkgbGludAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xNyAyMjozMToxMQogICAgIFthdXRoZmQuY10KICAgICB1bnJlYWNoYW5ibGUgc3RhdGVtZW50LCBmb3VuZCBieSBsaW50CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDAyOjIyOjMyCiAgICAgW3NlcnZlcmxvb3AuY10KICAgICBtZW1vcnkgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICBvayBkZXJhYWR0QCBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAwMjoyMjo1NgogICAgIFtzZnRwLmNdCiAgICAgbW9yZSBtZW1vcnkgbGVha3MgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICBkZXJhYWR0QCBvawogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAwMjoyMzoyNgogICAgIFtob3N0ZmlsZS5jXQogICAgIEZJTEUqIGxlYWsgZGV0ZWN0ZWQgYnkgQ292ZXJpdHkgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAwMjoyNDowNQogICAgIFtkaC5jIHJlYWRjb25mLmMgc2VydmNvbmYuY10KICAgICBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBkZXRlY3RlZCBieSBDb3Zlcml0eQogICAgIHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDA3OjQxOjMwCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgbWVtb3J5IGxlYWtzIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7CiAgICAgZGVyYWFkdEAgb2sKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDExOjUxOjUyCiAgICAgW3NlcnZjb25mLmNdCiAgICAgQ29ycmVjdCBzdHJkZWxpbSBudWxsIHRlc3Q7IG9rIGRqbUAKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjUyOjExCiAgICAgW2F1dGgxLmMgYXV0aGZkLmMgY2hhbm5lbHMuY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1MzoxMgogICAgIFtrZXguYyBrZXguaCBtb25pdG9yLmMgbXlwcm9wb3NhbC5oIHNlc3Npb24uY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xOSAxODo1Njo0MQogICAgIFtjbGllbnRsb29wLmMgcHJvZ3Jlc3NtZXRlci5jIHNlcnZlcmxvb3AuYyBzc2hkLmNdCiAgICAgQVJHU1VTRUQgZm9yIHNpZ25hbCBoYW5kbGVycwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTk6NDkKICAgICBbc3NoLWtleXNjYW4uY10KICAgICBwbGVhc2UgbGludAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTk6MzAKICAgICBbc3NoLmNdCiAgICAgc3BhY2luZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTk6MDkKICAgICBbYXV0aGZpbGUuY10KICAgICB3aG9ldmVyIHRob3VnaHQgdGhhdCBicmVhayBhZnRlciByZXR1cm4gd2FzIGEgZ29vZCBpZGVhIG5lZWRzIHRvCiAgICAgZ2V0IHRoZWlyIGhlYWQgZXhhbWltZWQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMDQ6MDk6NDQKICAgICBbbW9uaXRvci5jXQogICAgIG1lbW9yeSBsZWFrcyBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEgZWxhZCBBVCBuZXRic2Qub3JnOwogICAgIGRlcmFhZHRAIG9rCiAgICAgdGhhdCBzaG91bGQgYmUgYWxsIG9mIHRoZW0gbm93CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDExOjM4OjQ2CiAgICAgW2tleS5jXQogICAgIChyZWFsbHkpIGxhc3Qgb2YgdGhlIENvdmVyaXR5IGRpZmZzOiBhdm9pZCBwb3NzaWJsZSBOVUxMIGRlcmVmIGluCiAgICAga2V5X2ZyZWUuIHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7IG1hcmt1c0Agb2sKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE3OjEwOjE5CiAgICAgW2F1dGguYyBrZXkuYyBtaXNjLmMgcGFja2V0LmMgc3NoLWFkZC5jXQogICAgIGluIGEgc3dpdGNoICgpLCBicmVhayBhZnRlciByZXR1cm4gb3IgZ290byBpcyBzdHVwaWQKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE3OjEzOjE2CiAgICAgW2tleS5jXQogICAgIGRqbSBkaWQgYSB0eXBvCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxNzoxNzoyMwogICAgIFtzc2gtcnNhLmNdCiAgICAgaW4gYSBzd2l0Y2ggKCksIGJyZWFrIGFmdGVyIHJldHVybiBvciBnb3RvIGlzIHN0dXBpZAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6MTQ6MDIKICAgICBbY2hhbm5lbHMuYyBjbGllbnRsb29wLmMgbW9uaXRvcl93cmFwLmMgbW9uaXRvcl93cmFwLmggc2VydmVybG9vcC5jXQogICAgIFtzc2guYyBzc2hwdHkuYyBzc2hwdHkuaF0KICAgICBzcHJpbmtsZSB1X2ludCB0aHJvdWdob3V0IHB0eSBzdWJzeXN0ZW0sIG9rIG1hcmt1cwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6MTc6MjAKICAgICBbYXV0aDEuYyBhdXRoMi5jIHNzaGQuY10KICAgICBzcHJpbmtsZSBzb21lIEFSR1NVU0VEIGZvciB0YWJsZSBkcml2ZW4gZnVuY3Rpb25zICh3aGljaCBzb21ldGltZXMgCiAgICAgbXVzdCBpZ25vcmUgdGhlaXIgYXJncykKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjI2OjU1CiAgICAgW2NoYW5uZWxzLmMgbW9uaXRvci5jIHNlc3Npb24uYyBzZXNzaW9uLmggc3NoLWFnZW50LmMgc3NoLWtleWdlbi5jXQogICAgIFtzc2gtcnNhLmMgc3NoLmMgc3NobG9naW4uY10KICAgICBhbm5veWluZyBzcGFjaW5nIGZpeGVzIGdldHRpbmcgaW4gdGhlIHdheSBvZiByZWFsIGRpZmZzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODoyNzo1MAogICAgIFttb25pdG9yLmNdCiAgICAgc3BhY2luZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6MzU6MTIKICAgICBbY2hhbm5lbHMuY10KICAgICB4MTFfZmFrZV9kYXRhIGlzIG9ubHkgZXZlciB1c2VkIGFzIHVfY2hhciAqCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODo0MTo0MwogICAgIFtkbnMuY10KICAgICBjYXN0IHhzdHJkdXAgdG8gcHJvcGVydCB1X2NoYXIgKgogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6NDI6MjcKICAgICBbY2Fub2hvc3QuYyBtYXRjaC5jIHNzaC5jIHNzaGNvbm5lY3QuY10KICAgICBiZSBzdHJpY3Qgd2l0aCB0b2xvd2VyKCkgY2FzdGluZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6NDg6MzQKICAgICBbY2hhbm5lbHMuYyBmYXRhbC5jIGtleC5jIHBhY2tldC5jIHNlcnZlcmxvb3AuY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAyMToxMTo1MwogICAgIFt0dHltb2Rlcy5jXQogICAgIHNwYWNpbmcKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMDA6MDU6NDEKICAgICBbYXV0aC1ic2RhdXRoLmMgYXV0aC1za2V5LmMgYXV0aC5jIGF1dGgyLWNoYWxsLmMgY2hhbm5lbHMuY10KICAgICBbY2xpZW50bG9vcC5jIGRlYXR0YWNrLmMgZ3NzLWdlbnIuYyBrZXguYyBrZXkuYyBtaXNjLmMgbW9kdWxpLmNdCiAgICAgW21vbml0b3IuYyBtb25pdG9yX3dyYXAuYyBwYWNrZXQuYyBzY2FyZC5jIHNmdHAtc2VydmVyLmMgc3NoLWFnZW50LmNdCiAgICAgW3NzaC1rZXlzY2FuLmMgc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QyLmMgc3NoZC5jIHV1ZW5jb2RlLmNdCiAgICAgW3htYWxsb2MuYyB4bWFsbG9jLmhdCiAgICAgaW50cm9kdWNlIHhjYWxsb2MoKSBhbmQgeGFzcHJpbnRmKCkgZmFpbHVyZS1jaGVja2VkIGFsbG9jYXRpb25zIAogICAgIGZ1bmN0aW9ucyBhbmQgdXNlIHRoZW0gdGhyb3VnaG91dCBvcGVuc3NoCgogICAgIHhjYWxsb2MgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBiZWNhdXNlIG1hbGxvYyhubWVtYiAqIHNpemUpIGlzIGEKICAgICBkYW5nZXJvdXMgaWRpb20gKHN1YmplY3QgdG8gaW50ZWdlciBvdmVyZmxvdykgYW5kIGl0IGlzIHRpbWUgZm9yIGl0IAogICAgIHRvIGRpZQoKICAgICBmZWVkYmFjayBhbmQgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMDE6MTM6MjMKICAgICBbYnVmZmVyLmMgY2hhbm5lbHMuYyBkZWF0dGFjay5jIG1pc2MuYyBzY3AuYyBzZXNzaW9uLmMgc2Z0cC1jbGllbnQuY10KICAgICBbc2Z0cC1zZXJ2ZXIuYyBzc2gtYWdlbnQuYyBzc2gtcnNhLmMgeG1hbGxvYy5jIHhtYWxsb2MuaCBhdXRoLXBhbS5jXQogICAgIFt1aWRzd2FwLmNdCiAgICAgY2hhbmdlIE9wZW5TU0gncyB4cmVhbGxvYygpIGZ1bmN0aW9uIGZyb20gYmVpbmcgeHJlYWxsb2MocCwgbmV3X3NpemUpCiAgICAgdG8geHJlYWxsb2MocCwgbmV3X25tZW1iLCBuZXdfaXRlbXNpemUpLgoKICAgICByZWFsbG9jIGlzIHBhcnRpY3VsYXJseSBwcm9uZSB0byBpbnRlZ2VyIG92ZXJmbG93cyBiZWNhdXNlIGl0IGlzCiAgICAgYWxtb3N0IGFsd2F5cyBhbGxvY2F0aW5nICJuICogc2l6ZSIgYnl0ZXMsIHNvIHRoaXMgaXMgYSBmYXIgc2FmZXIgCiAgICAgQVBJOyBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAwMTozMDoyMwogICAgIFtzZnRwLmNdCiAgICAgImFib3JtYWxseSIgaXMgYSBwZXJmZWN0bHkgY3JvbXVsZW50IHdvcmQsIGJ1dCAiYWJub3JtYWxseSIgaXMgYmV0dGVyCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDEzOjE3OjAzCiAgICAgW2F0b21pY2lvLmMgYXV0aC1ic2RhdXRoLmMgYXV0aC1jaGFsbC5jIGF1dGgtb3B0aW9ucy5jIGF1dGgtcGFzc3dkLmNdCiAgICAgW2F1dGgtcmgtcnNhLmMgYXV0aC1yaG9zdHMuYyBhdXRoLXJzYS5jIGF1dGgtc2tleS5jIGF1dGguYyBhdXRoMS5jXQogICAgIFthdXRoMi1jaGFsbC5jIGF1dGgyLWhvc3RiYXNlZC5jIGF1dGgyLWtiZGludC5jIGF1dGgyLW5vbmUuY10KICAgICBbYXV0aDItcGFzc3dkLmMgYXV0aDItcHVia2V5LmMgYXV0aDIuYyBhdXRoZmQuYyBhdXRoZmlsZS5jIGJ1ZmF1eC5jXQogICAgIFtidWZmZXIuYyBjYW5vaG9zdC5jIGNoYW5uZWxzLmMgY2lwaGVyLTNkZXMxLmMgY2lwaGVyLWJmMS5jXQogICAgIFtjaXBoZXItY3RyLmMgY2lwaGVyLmMgY2xlYW51cC5jIGNsaWVudGxvb3AuYyBjb21wYXQuYyBjb21wcmVzcy5jXQogICAgIFtkZWF0dGFjay5jIGRoLmMgZGlzcGF0Y2guYyBmYXRhbC5jIGdyb3VwYWNjZXNzLmMgaG9zdGZpbGUuYyBrZXguY10KICAgICBba2V4ZGguYyBrZXhkaGMuYyBrZXhkaHMuYyBrZXhnZXguYyBrZXhnZXhjLmMga2V4Z2V4cy5jIGtleS5jIGxvZy5jXQogICAgIFttYWMuYyBtYXRjaC5jIG1kLXNoYTI1Ni5jIG1pc2MuYyBtb25pdG9yLmMgbW9uaXRvcl9mZHBhc3MuY10KICAgICBbbW9uaXRvcl9tbS5jIG1vbml0b3Jfd3JhcC5jIG1zZy5jIG5jaGFuLmMgcGFja2V0LmMgcHJvZ3Jlc3NtZXRlci5jXQogICAgIFtyZWFkY29uZi5jIHJlYWRwYXNzLmMgcnNhLmMgc2NhcmQuYyBzY3AuYyBzZXJ2Y29uZi5jIHNlcnZlcmxvb3AuY10KICAgICBbc2Vzc2lvbi5jIHNmdHAtY2xpZW50LmMgc2Z0cC1jb21tb24uYyBzZnRwLWdsb2IuYyBzZnRwLXNlcnZlci5jXQogICAgIFtzZnRwLmMgc3NoLWFkZC5jIHNzaC1hZ2VudC5jIHNzaC1kc3MuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNjYW4uY10KICAgICBbc3NoLWtleXNpZ24uYyBzc2gtcnNhLmMgc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QxLmNdCiAgICAgW3NzaGNvbm5lY3QyLmMgc3NoZC5jIHNzaGxvZ2luLmMgc3NocHR5LmMgc3NodHR5LmMgdHR5bW9kZXMuY10KICAgICBbdWlkc3dhcC5jIHV1ZW5jb2RlLmMgeG1hbGxvYy5jXQogICAgIFB1dCAkT3BlbkJTRCQgdGFncyBiYWNrIChhcyBjb21tZW50cykgdG8gcmVwbGFjZSB0aGUgUkNTSUQoKXMgdGhhdAogICAgIFRoZW8gbnVrZWQgLSBvdXIgc2NyaXB0cyB0byBzeW5jIC1wb3J0YWJsZSBuZWVkIHRoZW0gaW4gdGhlIGZpbGVzCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODoyOTozNQogICAgIFthdXRoLXJzYS5jIGF1dGhmZC5jIHBhY2tldC5jXQogICAgIG5lZWRlZCBjYXN0cyAoYWx3YXlzIHdpbGwgYmUgbmVlZGVkKQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6MzA6NTUKICAgICBbY2xpZW50bG9vcC5jIHNlcnZlcmxvb3AuY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODozNjoxNQogICAgIFtzc2hsb2dpbi5jIHNzaGxvZ2luLmhdCiAgICAgbmljZXIgc2l6ZV90IGFuZCB0aW1lX3QgdHlwZXMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjQwOjE0CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBjYXN0IHN0cnRvbnVtKCkgcmVzdWx0IHRvIHJpZ2h0IHR5cGUKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjQxOjQ1CiAgICAgW3NzaC1hZ2VudC5jXQogICAgIG1hcmsgdHdvIG1vcmUgc2lnbmFsIGhhbmRsZXJzIEFSR1NVU0VECiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yNSAxODo0MzozMAogICAgIFtjaGFubmVscy5jXQogICAgIHVzZSBzdHJ0b251bSgpIGluc3RlYWQgb2YgYXRvaSgpIFtsaW1pdCBYIHNjcmVlbnMgdG8gNDAwLCBzb3JyeV0KICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI1IDE4OjU2OjU1CiAgICAgW2J1ZmF1eC5jIGNoYW5uZWxzLmMgcGFja2V0LmNdCiAgICAgcmVtb3ZlIChjaGFyICopIGNhc3RzIHRvIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHZvaWQgKiBmb3IgdGhlIGFyZwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMTg6NTg6MTAKICAgICBbY2hhbm5lbHMuY10KICAgICBkZWxldGUgY2FzdCBub3QgcmVxdWlyZWQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjUgMjI6MjI6NDMKICAgICBbYXRvbWljaW8uaCBhdXRoLW9wdGlvbnMuaCBhdXRoLmggYXV0aDItZ3NzLmMgYXV0aGZkLmggYXV0aGZpbGUuaF0KICAgICBbYnVmYXV4LmggYnVmZmVyLmggY2Fub2hvc3QuaCBjaGFubmVscy5oIGNpcGhlci5oIGNsaWVudGxvb3AuaF0KICAgICBbY29tcGF0LmggY29tcHJlc3MuaCBjcmMzMi5jIGNyYzMyLmggZGVhdHRhY2suaCBkaC5oIGRpc3BhdGNoLmhdCiAgICAgW2Rucy5jIGRucy5oIGdldHB1dC5oIGdyb3VwYWNjZXNzLmggZ3NzLWdlbnIuYyBnc3Mtc2Vydi1rcmI1LmNdCiAgICAgW2dzcy1zZXJ2LmMgaG9zdGZpbGUuaCBpbmNsdWRlcy5oIGtleC5oIGtleS5oIGxvZy5oIG1hYy5oIG1hdGNoLmhdCiAgICAgW21pc2MuaCBtb25pdG9yLmggbW9uaXRvcl9mZHBhc3MuaCBtb25pdG9yX21tLmggbW9uaXRvcl93cmFwLmggbXNnLmhdCiAgICAgW215cHJvcG9zYWwuaCBwYWNrZXQuaCBwYXRobmFtZXMuaCBwcm9ncmVzc21ldGVyLmggcmVhZGNvbmYuaCByc2EuaF0KICAgICBbc2NhcmQuaCBzZXJ2Y29uZi5oIHNlcnZlcmxvb3AuaCBzZXNzaW9uLmggc2Z0cC1jb21tb24uaCBzZnRwLmhdCiAgICAgW3NzaC1nc3MuaCBzc2guaCBzc2gxLmggc3NoMi5oIHNzaGNvbm5lY3QuaCBzc2hsb2dpbi5oIHNzaHB0eS5oXQogICAgIFt0dHltb2Rlcy5oIHVpZHN3YXAuaCB1dWVuY29kZS5oIHhtYWxsb2MuaF0KICAgICBzdGFuZGFyZGlzZSBzcGFjaW5nIGluICRPcGVuQlNEJCB0YWdzOyByZXF1ZXN0ZWQgYnkgZGVyYWFkdEAKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzI2IDAxOjMxOjQ4CiAgICAgW3V1ZW5jb2RlLmNdCiAgICAgdHlwbwoKMjAwNjAzMjUKIC0gT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xNiAwNDoyNDo0MgogICAgIFtzc2guMV0KICAgICBBZGQgUkZDNDQxOSAoRGlmZmllLUhlbGxtYW4gZ3JvdXAgZXhjaGFuZ2UgS0VYKSB0byB0aGUgbGlzdCBvZiBTU0ggUkZDcwogICAgIHRoYXQgT3BlblNTSCBzdXBwb3J0cwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTkgMTg6NTE6MTgKICAgICBbYXRvbWljaW8uYyBhdXRoLWJzZGF1dGguYyBhdXRoLWNoYWxsLmMgYXV0aC1rcmI1LmMgYXV0aC1vcHRpb25zLmNdCiAgICAgW2F1dGgtcGFtLmMgYXV0aC1wYXNzd2QuYyBhdXRoLXJoLXJzYS5jIGF1dGgtcmhvc3RzLmMgYXV0aC1yc2EuY10KICAgICBbYXV0aC1zaGFkb3cuYyBhdXRoLXNrZXkuYyBhdXRoLmMgYXV0aDEuYyBhdXRoMi1jaGFsbC5jXQogICAgIFthdXRoMi1ob3N0YmFzZWQuYyBhdXRoMi1rYmRpbnQuYyBhdXRoMi1ub25lLmMgYXV0aDItcGFzc3dkLmNdCiAgICAgW2F1dGgyLXB1YmtleS5jIGF1dGgyLmMgYXV0aGZkLmMgYXV0aGZpbGUuYyBidWZhdXguYyBidWZmZXIuY10KICAgICBbY2Fub2hvc3QuYyBjaGFubmVscy5jIGNpcGhlci0zZGVzMS5jIGNpcGhlci1hY3NzLmMgY2lwaGVyLWFlcy5jXQogICAgIFtjaXBoZXItYmYxLmMgY2lwaGVyLWN0ci5jIGNpcGhlci5jIGNsZWFudXAuYyBjbGllbnRsb29wLmMgY29tcGF0LmNdCiAgICAgW2NvbXByZXNzLmMgZGVhdHRhY2suYyBkaC5jIGRpc3BhdGNoLmMgZG5zLmMgZW50cm9weS5jIGZhdGFsLmNdCiAgICAgW2dyb3VwYWNjZXNzLmMgaG9zdGZpbGUuYyBpbmNsdWRlcy5oIGtleC5jIGtleGRoLmMga2V4ZGhjLmNdCiAgICAgW2tleGRocy5jIGtleGdleC5jIGtleGdleGMuYyBrZXhnZXhzLmMga2V5LmMgbG9nLmMgbG9naW5yZWMuY10KICAgICBbbG9naW5yZWMuaCBsb2dpbnRlc3QuYyBtYWMuYyBtYXRjaC5jIG1kLXNoYTI1Ni5jIG1kNWNyeXB0LmMgbWlzYy5jXQogICAgIFttb25pdG9yLmMgbW9uaXRvcl9mZHBhc3MuYyBtb25pdG9yX21tLmMgbW9uaXRvcl93cmFwLmMgbXNnLmNdCiAgICAgW25jaGFuLmMgcGFja2V0LmMgcHJvZ3Jlc3NtZXRlci5jIHJlYWRjb25mLmMgcmVhZHBhc3MuYyByc2EuY10KICAgICBbc2NhcmQuYyBzY3AuYyBzZXJ2Y29uZi5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc2Z0cC1jbGllbnQuY10KICAgICBbc2Z0cC1jb21tb24uYyBzZnRwLWdsb2IuYyBzZnRwLXNlcnZlci5jIHNmdHAuYyBzc2gtYWRkLmNdCiAgICAgW3NzaC1hZ2VudC5jIHNzaC1kc3MuYyBzc2gta2V5Z2VuLmMgc3NoLWtleXNjYW4uYyBzc2gta2V5c2lnbi5jXQogICAgIFtzc2gtcmFuZC1oZWxwZXIuYyBzc2gtcnNhLmMgc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QxLmNdCiAgICAgW3NzaGNvbm5lY3QyLmMgc3NoZC5jIHNzaGxvZ2luLmMgc3NocHR5LmMgc3NodHR5LmMgdHR5bW9kZXMuY10KICAgICBbdWlkc3dhcC5jIHV1ZW5jb2RlLmMgeG1hbGxvYy5jIG9wZW5ic2QtY29tcGF0L2JzZC1hcmM0cmFuZG9tLmNdCiAgICAgW29wZW5ic2QtY29tcGF0L2JzZC1jbG9zZWZyb20uYyBvcGVuYnNkLWNvbXBhdC9ic2QtY3lnd2luX3V0aWwuY10KICAgICBbb3BlbmJzZC1jb21wYXQvYnNkLWdldHBlZXJlaWQuYyBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jXQogICAgIFtvcGVuYnNkLWNvbXBhdC9ic2QtbmV4dHN0ZXAuYyBvcGVuYnNkLWNvbXBhdC9ic2Qtc25wcmludGYuY10KICAgICBbb3BlbmJzZC1jb21wYXQvYnNkLXdhaXRwaWQuYyBvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuY10KICAgICBSQ1NJRCgpIGNhbiBkaWUKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE5IDE4OjUzOjEyCiAgICAgW2tleC5oIG15cHJvcG9zYWwuaF0KICAgICBzcGFjaW5nCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDA0OjA3OjIyCiAgICAgW2F1dGgyLWdzcy5jXQogICAgIEdTU0FQSSByZWxhdGVkIGxlYWtzIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7CiAgICAgcmV2aWV3ZWQgYnkgc2ltb24gQVQgc3h3Lm9yZy51azsgZGVyYWFkdEAgb2sKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMDQ6MDc6NDkKICAgICBbZ3NzLWdlbnIuY10KICAgICBtb3JlIEdTU0FQSSByZWxhdGVkIGxlYWtzIGRldGVjdGVkIGJ5IENvdmVyaXR5IHZpYSBlbGFkIEFUIG5ldGJzZC5vcmc7CiAgICAgcmV2aWV3ZWQgYnkgc2ltb24gQVQgc3h3Lm9yZy51azsgZGVyYWFkdEAgb2sKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMDQ6MDg6MTgKICAgICBbZ3NzLXNlcnYuY10KICAgICBsYXN0IGxvdCBvZiBHU1NBUEkgcmVsYXRlZCBsZWFrcyBkZXRlY3RlZCBieSBDb3Zlcml0eSB2aWEKICAgICBlbGFkIEFUIG5ldGJzZC5vcmc7IHJldmlld2VkIGJ5IHNpbW9uIEFUIHN4dy5vcmcudWs7IGRlcmFhZHRAIG9rCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMCAxODoxNDowMgogICAgIFttb25pdG9yX3dyYXAuaCBzc2hwdHkuaF0KICAgICBzcHJpbmtsZSB1X2ludCB0aHJvdWdob3V0IHB0eSBzdWJzeXN0ZW0sIG9rIG1hcmt1cwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjAgMTg6MjY6NTUKICAgICBbc2Vzc2lvbi5oXQogICAgIGFubm95aW5nIHNwYWNpbmcgZml4ZXMgZ2V0dGluZyBpbiB0aGUgd2F5IG9mIHJlYWwgZGlmZnMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzIwIDE4OjQxOjQzCiAgICAgW2Rucy5jXQogICAgIGNhc3QgeHN0cmR1cCB0byBwcm9wZXJ0IHVfY2hhciAqCiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMjIgMjE6MTY6MjQKICAgICBbc3NoLjFdCiAgICAgc2ltcGxpZnkgU1NIRlAgZXhhbXBsZTsgb2sgam1jQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8yMiAyMToyNzoxNQogICAgIFtkZWF0dGFjay5jIGRlYXR0YWNrLmhdCiAgICAgcmVtb3ZlIElWIHN1cHBvcnQgZnJvbSB0aGUgQ1JDIGF0dGFjayBkZXRlY3RvciwgT3BlblNTSCBoYXMgbmV2ZXIgdXNlZAogICAgIGl0IC0gaXQgb25seSBhcHBsaWVkIHRvIElERUEtQ0ZCLCB3aGljaCB3ZSBkb24ndCBzdXBwb3J0LgogICAgIHByb21wdGVkIGJ5IE5ldEJTRCBDb3Zlcml0eSByZXBvcnQgdmlhIGVsYWQgQVQgbmV0YnNkLm9yZzsKICAgICBmZWVkYmFjayBtYXJrdXNAICJudWtlIGl0IiBkZXJhYWR0QAoKMjAwNjAzMTgKIC0gKGRqbSkgW2F1dGgtcGFtLmNdIEZpeCBtZW1sZWFrIGluIGVycm9yIHBhdGgsIGZyb20gQ292ZXJpdHkgdmlhCiAgIGVsYWQgQVQgTmV0QlNELm9yZwogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jXSBCdWcgIzExNzM6IG1ha2UgZm10aW50KCkgdGFrZQogICBhIExMT05HIHJhdGhlciB0aGFuIGEgbG9uZy4gIEZpeGVzIHNjcCdpbmcgb2YgbGFyZ2UgZmlsZXMgb24gcGxhdGZvcm1zCiAgIHdpdGggbWlzc2luZy9icm9rZW4gc25wcmludGZzLiAgUGF0Y2ggZnJvbSBlLmJvcm92YWMgYXQgYm9tLmdvdi5hdS4KCjIwMDYwMzE2CiAtIChkdHVja2VyKSBbZW50cm9weS5jXSBBZGQgaGVhZGVycyBmb3IgV0lGRVhJVEVEIGFuZCBmcmllbmRzLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBtZC1zaGEyNTYuY10gTmV0QlNEIGhhcyBzaGEyLmggaW4KICAgL3Vzci9pbmNsdWRlL2NyeXB0by4gIEhpbnQgZnJvbSBkam1ALgogLSAodGltKSBba2V4LmMgbXlwcm9wb3NhbC5oIG1kLXNoYTI1Ni5jIG9wZW5ic2QtY29tcGF0L3NoYTIuYyxoXQogICBEaXNhYmxlIHNoYTI1NiB3aGVuIG9wZW5zc2wgPCAwLjkuNy4gUGF0Y2ggZnJvbSBkam1ALgogLSAoZGptKSBba2V4LmNdIFNsaWdodGx5IG1vcmUgY2xlYW4gZGVhY3RpdmF0aW9uIG9mIGRoZ2V4LXNoYTI1NiBvbiBvbGQKICAgT3BlblNTTDsgb2sgdGltCgoyMDA2MDMxNQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jOgogICAtIG1zZkBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNiAxNTo1NDowNwogICAgIFtzc2guMV0KICAgICAtIHR5cG8gZml4CiAgICAgb2sgam1jQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNiAyMTo0NDo0NwogICAgIFtzc2guMV0KICAgICBtYWtlIHRoaXMgYSBsaXR0bGUgbGVzcyBhbWJpZ3VvdXMuLi4KICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA3IDAxOjA4OjA0CiAgICAgW2F1dGgtcmhvc3RzLmMgaW5jbHVkZXMuaF0KICAgICBtb3ZlICNpbmNsdWRlIDxuZXRncm91cC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDcgMDE6MTg6MDkKICAgICBbaW5jbHVkZXMuaCBzc2gtYWdlbnQuYyBzc2gta2V5c2Nhbi5jIHNzaGNvbm5lY3QyLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNyAwMTo0MjowMAogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBjbGllbnRsb29wLmggaW5jbHVkZXMuaCBwYWNrZXQuaF0KICAgICBbc2VydmVybG9vcC5jIHNzaHB0eS5jIHNzaHB0eS5oIHNzaHR0eS5jIHR0eW1vZGVzLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8dGVybWlvcy5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDcgMDE6NTI6NTAKICAgICBbc3NodHR5LmNdCiAgICAgImxvZy5oIiBub3QgbmVlZGVkCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wNyAwMzo0NzowNQogICAgIFtob3N0ZmlsZS5jXQogICAgICJwYWNrZXQuaCIgbm90IG5lZWRlZAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDcgMDM6NTk6MjAKICAgICBbZGVhdHRhY2suY10KICAgICBkdXBsaWNhdGUgI2luY2x1ZGUKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA4IDEyOjE1OjI3CiAgICAgW2F1dGguYyBjbGllbnRsb29wLmMgaW5jbHVkZXMuaCBtaXNjLmMgbW9uaXRvci5jIHJlYWRwYXNzLmNdCiAgICAgW3Nlc3Npb24uYyBzZnRwLmMgc3NoLWFnZW50LmMgc3NoLWtleXNpZ24uYyBzc2guYyBzc2hjb25uZWN0LmNdCiAgICAgW3NzaGQuYyBzc2hwdHkuY10KICAgICBtb3ZlICNpbmNsdWRlIDxwYXRocy5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTI6MzI6NDkKICAgICBbaW5jbHVkZXMuaCBtaXNjLmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA4IDEzOjE1OjQ0CiAgICAgW2dzcy1zZXJ2LmMgbW9uaXRvci5jXQogICAgIHNtYWxsIEtORgogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMTQ6MTY6NTkKICAgICBbc3NoY29ubmVjdC5jXQogICAgIDxvcGVuc3NsL2JuLmg+IG5vdCBuZWVkZWQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA4IDE0OjMxOjMwCiAgICAgW2luY2x1ZGVzLmggc3NoLWFnZW50LmMgc3NoLWtleXNjYW4uYyBzc2guY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzA4IDE0OjM4OjE4CiAgICAgW2luY2x1ZGVzLmggcGFja2V0LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPiBhbmQgPG5ldGluZXQvaXAuaD4gb3V0IG9mCiAgICAgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDggMjM6NTE6MjQKICAgICBbaW5jbHVkZXMuaCBzY3AuYyBzZnRwLWdsb2IuYyBzZnRwLXNlcnZlci5jXQogICAgIG1vdmUgI2luY2x1ZGUgPGRpcmVudC5oPiBvdXQgb2YgaW5jbHVkZXMuaDsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMDkgMDA6MzI6MDcKICAgICBbaW5jbHVkZXMuaF0KICAgICAjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPiBub3QgbmVlZGVkOyBvayBkam1ACiAgICAgTkIuIElEIFN5bmMgb25seSAtIHdlIHN0aWxsIG5lZWQgdGhpcyAoYnV0IGl0IG1heSBtb3ZlIGxhdGVyKQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wOSAxMDoxMDo0NwogICAgIFtzc2hkLjhdCiAgICAgLSBtb3ZlIHNvbWUgdGV4dCBpbnRvIGEgQ0FWRUFUUyBzZWN0aW9uCiAgICAgLSBtZXJnZSB0aGUgQ09NTUFORCBFWEVDVVRJT04uLi4gc2VjdGlvbiBpbnRvIEFVVEhFTlRJQ0FUSU9OCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMCAwMDoyNzoxMwogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBpbmNsdWRlcy5oIG1pc2MuYyBwcm9ncmVzc21ldGVyLmMgc2Z0cC5jXQogICAgIFtzc2guYyBzc2hkLmMgc3NocHR5LmNdCiAgICAgbW92ZSAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMCAwMTo0NDoyNwogICAgIFtpbmNsdWRlcy5oIG1vbml0b3IuYyByZWFkcGFzcy5jIHNjcC5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmN/XQogICAgIFtzZnRwLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QyLmMgc3NoZC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy93YWl0Lmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMSAxOTozMToxOAogICAgIFthdG9taWNpby5jXQogICAgIHR5cGUgY29ycmVjdG5lc3M7IGZyb20gUmF5IExhaSBpbiBQUiA1MDExOyBvayBtaWxsZXJ0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMiAwNjo0NTozNAogICAgIFtzc2guYyBzc2hfY29uZmlnLjVdCiAgICAgYWRkIGEgJWwgZXhwYW5zaW9uIGNvZGUgdG8gdGhlIENvbnRyb2xQYXRoLCB3aGljaCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUKICAgICBsb2NhbCBob3N0bmFtZSBhdCBydW50aW1lLiBSZXF1ZXN0ZWQgYnkgaGVubmluZ0AgdG8gYXZvaWQgc29tZSBwcm9ibGVtcwogICAgIHdpdGggL2hvbWUgb24gTkZTOyBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMiAxMDo0NDoxOAogICAgIFtyZWFkY29uZi5jXQogICAgIHJhaXNlIGVycm9yIHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzIGEgUmVrZXlMaW1pdCB0aGF0IGlzIHNtYWxsZXIgdGhhbiAxNgogICAgICh0aGUgc21hbGxlc3Qgb2Ygb3VyIGNpcGhlcidzIGJsb2Nrc2l6ZSkgb3IgYmlnIGVub3VnaCB0byBjYXVzZSBpbnRlZ2VyCiAgICAgd3JhcGFyb3VuZDsgb2sgJiBmZWVkYmFjayBkdHVja2VyQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMiAxMDo0OTo0NAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgc2xpZ2h0IHJld29yZGluZzsgb2sgZGptCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEyIDEwOjUyOjQxCiAgICAgW3NzaGQuOF0KICAgICByZXdvcmsgdGhlIGRlc2NyaXB0aW9uIG9mIGF1dGhvcml6ZWRfa2V5cyBhIGxpdHRsZTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTIgMTc6NTc6MTkKICAgICBbc3NoZC44XQogICAgIHNvcnQgdGhlIGxpc3Qgb2Ygb3B0aW9ucyBwZXJtaXNzYWJsZSB3LyBhdXRob3JpemVkX2tleXM7CiAgICAgb2sgZGptIGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTMgMTA6MTY6MzkKICAgICBbc3NoZC44XQogICAgIG5vIG5lZWQgdG8gc3Vic2VjdGlvbiB0aGUgYXV0aG9yaXplZF9rZXlzIGV4YW1wbGVzIC0gaW5zdGVhZCwgY29udmVydAogICAgIHRoaXMgdG8gbG9vayBsaWtlIGFuIGFjdHVhbCBmaWxlLiBhbHNvIHVzZSBwcm90byAyIGtleXMsIGFuZCB1c2UgSUVURgogICAgIGV4YW1wbGUgYWRkcmVzc2VzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMyAxMDoyMToyNQogICAgIFtzc2hkLjhdCiAgICAgc21hbGwgdHdlYWtzIGZvciB0aGUgc3NoX2tub3duX2hvc3RzIHNlY3Rpb247CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzEzIDExOjAyOjI2CiAgICAgW3NzaGQuOF0KICAgICB0dXJuIHRoaXMgaW50byBhbiBleGFtcGxlIHNzaF9rbm93bl9ob3N0cyBmaWxlOyBvayBkam0KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTMgMTE6MDg6NDMKICAgICBbc3NoZC44XQogICAgIC0gYXZvaWQgbmFzdHkgbGluZSBzcGxpdAogICAgIC0gYConIGRvZXMgbm90IG5lZWQgdG8gYmUgZXNjYXBlZAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xMyAxMToyNzoyNQogICAgIFtzc2hkLjhdCiAgICAgc29ydCBGSUxFUyBhbmQgdXNlIGEgLWNvbXBhY3QgbGlzdDsKICAgLSBkYXZpZEBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xNSAwNTowODoyNAogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIHR5cG8gaW4gY29tbWVudDsgb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xNSAxNjo1MzoyMAogICAgIFtzc2guMV0KICAgICByZW1vdmUgdGhlIElFVEYgZHJhZnQgcmVmZXJlbmNlcyBhbmQgcmVwbGFjZSB0aGVtIHdpdGggc29tZSB1cGRhdGVkIFJGQ3M7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzE1IDE2OjU1OjMzCiAgICAgW3NzaGQuOF0KICAgICByZW1vdmUgaWV0ZiBkcmFmdCByZWZlcmVuY2VzOyBSRkMgbGlzdCBub3cgbWFpbnRhaW5lZCBpbiBzc2guMTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTYgMDk6MDU6MzQKICAgICBbc3NoZC44XQogICAgIHN5bmMgc29tZSBvZiB0aGUgRklMRVMgZW50cmllcyB3LyBzc2guMTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTkgMTk6NTI6MTAKICAgICBbc3NoZC44XQogICAgIG1vdmUgdGhlIHNzaHJjIHN0dWZmIG91dCBvZiBGSUxFUywgYW5kIGludG8gaXRzIG93biBzZWN0aW9uOgogICAgIEZJTEVTIGlzIG5vdCBhIGdvb2QgcGxhY2UgdG8gZG9jdW1lbnQgaG93IHN0dWZmIHdvcmtzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xOSAyMDowMjoxNwogICAgIFtzc2hkLjhdCiAgICAgc3luYyB0aGUgKHMpaG9zdHMuZXF1aXYgRklMRVMgZW50cmllcyB3LyB0aG9zZSBmcm9tIHNzaC4xOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8xOSAyMDowNTowMAogICAgIFtzc2hkLjhdCiAgICAgZ3JhbW1hcjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMTkgMjA6MTI6MjUKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGFkZCBzb21lIHZlcnRpY2FsIHNwYWNlOwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjAgMTY6MzY6MTUKICAgICBbYXV0aGZkLmMgY2hhbm5lbHMuYyBpbmNsdWRlcy5oIHNlc3Npb24uYyBzc2gtYWdlbnQuYyBzc2guY10KICAgICBtb3ZlICNpbmNsdWRlIDxzeXMvdW4uaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzIwIDE3OjAyOjQ0CiAgICAgW2NsaWVudGxvb3AuYyBpbmNsdWRlcy5oIG1vbml0b3IuYyBwcm9ncmVzc21ldGVyLmMgc2NwLmNdCiAgICAgW3NlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc2Z0cC5jIHNzaC1hZ2VudC5jIHNzaC5jIHNzaGQuY10KICAgICBtb3ZlICNpbmNsdWRlIDxzaWduYWwuaD4gb3V0IG9mIGluY2x1ZGVzLmg7IG9rIG1hcmt1c0AKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzIwIDE3OjE5OjU0CiAgICAgW2F1dGgtcmhvc3RzLmMgYXV0aC1yc2EuYyBhdXRoLmMgYXV0aDItbm9uZS5jIGF1dGgyLXB1YmtleS5jXQogICAgIFthdXRoZmlsZS5jIGNsaWVudGxvb3AuYyBpbmNsdWRlcy5oIHJlYWRjb25mLmMgc2NwLmMgc2Vzc2lvbi5jXQogICAgIFtzZnRwLWNsaWVudC5jIHNmdHAtY29tbW9uLmMgc2Z0cC1jb21tb24uaCBzZnRwLWdsb2IuY10KICAgICBbc2Z0cC1zZXJ2ZXIuYyBzZnRwLmMgc3NoLWFkZC5jIHNzaC1rZXlnZW4uYyBzc2guYyBzc2hjb25uZWN0LmNdCiAgICAgW3NzaGNvbm5lY3QyLmMgc3NoZC5jIHNzaHB0eS5jXQogICAgIG1vdmUgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBtYXJrdXNACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yMiAwMDowNDo0NQogICAgIFtjYW5vaG9zdC5jIGNsaWVudGxvb3AuYyBpbmNsdWRlcy5oIG1hdGNoLmMgcmVhZGNvbmYuYyBzY3AuYyBzc2guY10KICAgICBbc3NoY29ubmVjdC5jXQogICAgIG1vdmUgI2luY2x1ZGUgPGN0eXBlLmg+IG91dCBvZiBpbmNsdWRlcy5oOyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDEwOjI1OjE0CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBhZGQgc2VjdGlvbiBvbiBwYXR0ZXJuczsKICAgICBmcm9tIGR0dWNrZXIgKyBteXNlbGYKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMTA6MzM6NTQKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBzaWducG9zdCB0byBQQVRURVJOUzsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjQgMTA6Mzc6MDcKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHRpZHkgdXAgdGhlIHJlZnMgdG8gUEFUVEVSTlM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDEwOjM5OjUyCiAgICAgW3NzaGQuOF0KICAgICBzaWducG9zdCB0byBQQVRURVJOUyBzZWN0aW9uOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAyMDoyMjoxNgogICAgIFtzc2gta2V5c2lnbi44IHNzaF9jb25maWcuNSBzc2hkX2NvbmZpZy41XQogICAgIHNvbWUgY29uc2lzdGVuY3kgZml4ZXM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDIwOjMxOjMxCiAgICAgW3NzaC4xIHNzaF9jb25maWcuNSBzc2hkLjggc3NoZF9jb25maWcuNV0KICAgICBtb3JlIGNvbnNpc3RlbmN5IGZpeGVzOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNCAyMzoyMDowNwogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgc29tZSBncmFtbWFyL3dvcmRpbmcgZml4ZXM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDIzOjQzOjU3CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgc29tZSBncmFtbWFyL3dvcmRpbmcgZml4ZXM7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI0IDIzOjUxOjE3CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgb29wcyAtIGJpdHMgaSBtaXNzZWQ7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI1IDEyOjI2OjE3CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBkb2N1bWVudCB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBLYmRJbnRlcmFjdGl2ZURldmljZXM7CiAgICAgaGVscC9vayBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI1IDEyOjI4OjM0CiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgZG9jdW1lbnQgdGhlIG9yZGVyIGluIHdoaWNoIGFsbG93L2RlbnkgZGlyZWN0aXZlcyBhcmUgcHJvY2Vzc2VkOwogICAgIGhlbHAvb2sgZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yNiAxNzoxNzoxOAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgbW92ZSBQQVRURVJOUyB0byB0aGUgZW5kIG9mIHRoZSBtYWluIGJvZHk7IHJlcXVlc3RlZCBieSBkdHVja2VyCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzI2IDE4OjAxOjEzCiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgc3Vic2VjdGlvbiBpcyBwb2ludGxlc3MgaGVyZTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDIvMjYgMTg6MDM6MTAKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGNvbW1hOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8yOCAwMToxMDoyMQogICAgIFtzZXNzaW9uLmNdCiAgICAgZml4IGxvZ291dCByZWNvcmRpbmcgd2hlbiBwcml2aWxlZ2Ugc2VwYXJhdGlvbiBpcyBkaXNhYmxlZCwgYW5hbHlzaXMgYW5kCiAgICAgcGF0Y2ggZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tOyB0ZXN0ZWQgYnkgZHR1Y2tlckAgb2sgZGVyYWFkdEAKICAgICBOQi4gSUQgc3luYyBvbmx5IC0gcGF0Y2ggYWxyZWFkeSBpbiBwb3J0YWJsZQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8wNCAwNDoxMjo1OAogICAgIFtzZXJ2ZXJsb29wLmNdCiAgICAgbW92ZSBhIGRlYnVnKCkgb3V0c2lkZSBvZiBhIHNpZ25hbCBoYW5kbGVyOyBvayBtYXJrdXNAIGEgbGl0dGxlIHdoaWxlIGJhY2sKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTIgMDQ6MjM6MDcKICAgICBbc3NoLmNdCiAgICAga25mIG5pdAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xMyAwODoxNjowMAogICAgIFtzc2hkLmNdCiAgICAgZG9uJ3QgbG9nIHRoYXQgd2UgYXJlIGxpc3RlbmluZyBvbiBhIHNvY2tldCBiZWZvcmUgdGhlIGxpc3RlbigpIGNhbGwKICAgICBhY3R1YWxseSBzdWNjZWVkcywgYnogIzExNjIgcmVwb3J0ZWQgYnkgU2VudGhpbCBLdW1hcjsgb2sgZHR1Y2tlckAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzEzIDA4OjMzOjAwCiAgICAgW3BhY2tldC5jXQogICAgIFNldCBUQ1BfTk9ERUxBWSBmb3IgYWxsIGNvbm5lY3Rpb25zIG5vdCBqdXN0ICJpbnRlcmFjdGl2ZSIgb25lcy4gIEZpeGVzCiAgICAgcG9vciBwZXJmb3JtYW5jZSBhbmQgcHJvdG9jb2wgc3RhbGxzIHVuZGVyIHNvbWUgbmV0d29yayBjb25kaXRpb25zIChtaW5kcm90CiAgICAgYnVncyAjNTU2IGFuZCAjOTgxKS4gUGF0Y2ggb3JpZ2luYWxseSBmcm9tIG1hcmt1c0AsIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzEzIDA4OjQzOjE2CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBNYWtlIHNzaC1rZXlnZW4gaGFuZGxlIENSIGFuZCBDUkxGIGxpbmUgdGVybWluYXRpb24gd2hlbiBjb252ZXJ0aW5nIElFVEYKICAgICBmb3JtYXQga2V5cywgaW4gYWRpdGlvbiB0byB2YW5pbGxhIExGLiAgbWluZHJvdCAjMTE1NywgdGVzdGVkIGJ5IENocmlzCiAgICAgUGVwcGVyLCBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMy8xMyAxMDoxNDoyOQogICAgIFttaXNjLmMgc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgQWxsb3cgY29uZmlnIGRpcmVjdGl2ZXMgdG8gY29udGFpbiB3aGl0ZXNwYWNlIGJ5IHN1cnJvdW5kaW5nIHRoZW0gYnkgZG91YmxlCiAgICAgcXVvdGVzLiAgbWluZHJvdCAjNDgyLCBtYW4gcGFnZSBoZWxwIGZyb20gam1jQCwgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMTMgMTA6MjY6NTIKICAgICBbYXV0aGZpbGUuYyBhdXRoZmlsZS5oIHNzaC1hZGQuY10KICAgICBNYWtlIHNzaC1hZGQgY2hlY2sgZmlsZSBwZXJtaXNzaW9ucyBiZWZvcmUgYXR0ZW1wdGluZyB0byBsb2FkIHByaXZhdGUKICAgICBrZXkgZmlsZXMgbXVsdGlwbGUgdGltZXM7IGl0IHdpbGwgZmFpbCBhbnl3YXkgYW5kIHRoaXMgcHJldmVudHMgY29uZnVzaW5nCiAgICAgbXVsdGlwbGUgcHJvbXB0cyBhbmQgd2FybmluZ3MuICBtaW5kcm90ICMxMTM4LCBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE0IDAwOjE1OjM5CiAgICAgW2Nhbm9ob3N0LmNdCiAgICAgbG9nIHRoZSBvcmlnaW5hdGluZyBhZGRyZXNzIGFuZCBub3QganVzdCB0aGUgbmFtZSB3aGVuIGEgcmV2ZXJzZQogICAgIG1hcHBpbmcgY2hlY2sgZmFpbHMsIHJlcXVlc3RlZCBieSBsaW51eCBBVCBsaW51b24uY29tCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAzLzE0IDE2OjMyOjQ4CiAgICAgW3NzaF9jb25maWcuNSBzc2hkX2NvbmZpZy41XQogICAgICpBbGl2ZUNvdW50TWF4IGFwcGxpZXMgdG8gcHJvdGNvbCB2MiBvbmx5OyBvayBkdHVja2VyLCBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDMvMDcgMDk6MDc6NDAKICAgICBba2V4LmMga2V4LmggbW9uaXRvci5jIG15cHJvcG9zYWwuaCBzc2gta2V5c2Nhbi5jIHNzaGNvbm5lY3QyLmMgc3NoZC5jXQogICAgIEltcGxlbWVudCB0aGUgZGlmZmllLWhlbGxtYW4tZ3JvdXAtZXhjaGFuZ2Utc2hhMjU2IGtleSBleGNoYW5nZSBtZXRob2QKICAgICB1c2luZyB0aGUgU0hBMjU2IGNvZGUgaW4gbGliYyAoYW5kIHdyYXBwZXIgdG8gbWFrZSBpdCBpbnRvIGFuIE9wZW5TU0wKICAgICBFVlApLCBpbnRlcm9wIHRlc3RlZCBhZ2FpbnN0IENWUyBQdVRUWQogICAgIE5CLiBubyBwb3J0YWJpbGl0eSBiaXRzIGNvbW1pdHRlZCB5ZXQKIC0gKGRqbSkgW2NvbmZpZ3VyZS5hYyBkZWZpbmVzLmgga2V4LmMgbWQtc2hhMjU2LmNdCiAgIFtvcGVuYnNkLWNvbXBhdC9zaGEyLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0KICAgW29wZW5ic2QtY29tcGF0L3NoYTIuY10gRmlyc3Qgc3RhYiBhdCBwb3J0YWJpbGl0eSBnbHVlIGZvciBTSEEyNTYKICAgS0VYIHN1cHBvcnQsIHNob3VsZCB3b3JrIHdpdGggbGliYyBTSEEyNTYgc3VwcG9ydCBvciBPcGVuU1NMCiAgIEVWUF9zaGEyNTYgaWYgcHJlc2VudAogLSAoZGptKSBbaW5jbHVkZXMuaF0gUmVzdG9yZSBhY2NpZGVudGFsbHkgZHJvcHBlZCBuZXRpbmV0L2luLmgKIC0gKGRqbSkgW01ha2VmaWxlLmluIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluXSBBZGQgYWRkZWQgZmlsZXMKIC0gKGRqbSkgW21kLXNoYTI1Ni5jIGNvbmZpZ3VyZS5hY10gbWQtc2hhMjU2LmMgbmVlZHMgc2hhMi5oIGlmIHByZXNlbnQKIC0gKGRqbSkgW3JlZ3Jlc3MvLmN2c2lnbm9yZV0gSWdub3JlIE1ha2VmaWxlIGhlcmUKIC0gKGRqbSkgW2xvZ2lucmVjLmNdIE5lZWQgc3RhdC5oCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9zaGEyLmhdIEF2b2lkIGluY2x1ZGUgbWFjcm8gY2xhc2ggd2l0aAogICBzeXN0ZW0gc2hhMi5oCiAtIChkam0pIFtzc2gtcmFuZC1oZWxwZXIuY10gTmVlZHMgYSBidW5jaCBvZiBoZWFkZXJzCiAtIChkam0pIFtzc2gtYWdlbnQuY10gUmVzdG9yZSBkcm9wcGVkIHN0YXQuaAogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvc2hhMi5oIG9wZW5ic2QtY29tcGF0L3NoYTIuY10gQ29tbWVudCBvdXQgCiAgIFNIQTM4NCwgd2hpY2ggd2UgZG9uJ3QgbmVlZCBhbmQgZG9lc24ndCBjb21waWxlIHdpdGhvdXQgdHdlYWtzCiAtIChkam0pIFthdXRoLXBhbS5jIGNsaWVudGxvb3AuYyBpbmNsdWRlcy5oIG1vbml0b3IuYyBzZXNzaW9uLmNdCiAgIFtzZnRwLWNsaWVudC5jIHNzaC1rZXlzaWduLmMgc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QyLmNdCiAgIFtzc2hkLmMgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuYyBvcGVuYnNkLWNvbXBhdC9ic2Qtb3BlbnB0eS5jXQogICBbb3BlbmJzZC1jb21wYXQvZ2xvYi5jIG9wZW5ic2QtY29tcGF0L21rdGVtcC5jXQogICBbb3BlbmJzZC1jb21wYXQvcmVhZHBhc3NwaHJhc2UuY10gTG90cyBvZiBpbmNsdWRlIGZpeGVzIGZvcgogICBPcGVuU29sYXJpcwogLSAodGltKSBbaW5jbHVkZXMuaF0gcHV0IHN5cy9zdGF0LmggYmFjayBpbiB0byBxdWlldCBzb21lICJtYWNybyByZWRlZmluZWQ6IgogLSAodGltKSBbb3BlbnNzaC9zc2hwdHkuYyBvcGVuc3NoL29wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmNdIHB1dCBpbiBzb21lCiAgIGluY2x1ZGVzIHJlbW92ZWQgZnJvbSBpbmNsdWRlcy5oCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBGaXggZ2xvYiB0ZXN0IGNvbnZlcnNpb24gdG8gQUNfVFJZX0NPTVBJTEUKIC0gKGRqbSkgW2luY2x1ZGVzLmhdIFB1dCBiYWNrIHBhdGhzLmgsIGl0IGlzIG5lZWRlZCBpbiBkZWZpbmVzLmgKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9vcGVuYnNkLWNvbXBhdC5oXSBBSVggKGF0IGxlYXN0KSBuZWVkcwogICBzeXMvaW9jdGwuaCBmb3Igc3RydWN0IHdpbnNpemUuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBsb2dpbl9jYXAuaCByZXF1aXJlcyBzeXMvdHlwZXMuaCBvbiBOZXRCU0QuCgoyMDA2MDMxMwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTcxOiBEb24ndCB1c2UgcHJpbnRmKCIlbGxkIiwgbG9uZ2xvbmcpCiAgIHNpbmNlIG5vdCBhbGwgcGxhdGZvcm1zIHN1cHBvcnQgaXQuICBJbnN0ZWFkLCB1c2UgaW50ZXJuYWwgZXF1aXZhbGVudCB3aGlsZQogICBjb21wdXRpbmcgTExPTkdfTUlOIGFuZCBMTE9OR19NQVguICBSZW1vdmUgc3BlY2lhbCBjYXNlIGZvciBhbHBoYS1kZWMtb3NmKgogICBhcyBpdCdzIG5vIGxvbmdlciByZXF1aXJlZC4gIFRlc3RlZCBieSBCZXJuaGFyZCBTaW1vbiwgb2sgZGptQAoKMjAwNjAzMDQKIC0gKGR0dWNrZXIpIFtjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddIFJlcXVpcmUgdXNlIG9mIGxhc3Rsb2cgYXMgYQogICBmaWxlIHJhdGhlciB0aGFuIGRpcmVjdG9yeSwgcmVxdWlyZWQgYXMgQ3lnd2luIHdpbGwgYmUgaW1wb3J0aW5nIGxhc3Rsb2coMSkuCiAgIEFsc28gdGlnaHRlbnMgdXAgcGVybWlzc2lvbnMgb24gdGhlIGZpbGUuICBQYXRjaCBmcm9tIHZpbnNjaGVuQHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbZ3NzLXNlcnYta3JiNS5jXSBCdWcgIzExNjY6IENvcnJlY3QgI2lmZGVmcyBmb3IgZ3NzYXBpX2tyYjUuaAogICBpbmNsdWRlcy4gIFBhdGNoIGZyb20gZ2VudG9vLnJpdmVycmF0IGF0IGdtYWlsLmNvbS4KCjIwMDYwMjI2CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzExNTY6IFFOWCBhcHBhcmVudGx5IG5lZWRzIFNTSERfQUNRVUlSRVNfQ1RUWQogICBwYXRjaCBmcm9tIGtyYWFpIGF0IGZ0YmZzLm9yZy4KCjIwMDYwMjIzCiAtIChkdHVja2VyKSBbc3NoZF9jb25maWcgc3NoZF9jb25maWcuNV0gVXBkYXRlIFVzZVBBTSB0byByZWZsZWN0IGN1cnJlbnQKICAgcmVhbGl0eS4gIFBvaW50ZWQgb3V0IGJ5IHRyeXBvbnJhaiBhdCBnbWFpbC5jb20uCgoyMDA2MDIyMgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LntjLGh9XSBNaW5vciB0aWR5IHVwOiBvbmx5CiAgIGNvbXBpbGUgaW4gY29tcGF0IGNvZGUgaWYgcmVxdWlyZWQuCgoyMDA2MDIyMQogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L29wZW5zc2wtY29tcGF0LmhdIFByZXZlbnQgd2FybmluZyBhYm91dAogICByZWRlZmluaXRpb24gb2YgU1NMZWF5X2FkZF9hbGxfYWxnb3JpdGhtcy4KCjIwMDYwMjIwCiAtIChkdHVja2VyKSBbSU5TVEFMTCBjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQue2MsaH1dCiAgIEFkZCBvcHRpb25hbCBlbmFibGluZyBvZiBPcGVuU1NMJ3MgKGhhcmR3YXJlKSBFbmdpbmUgc3VwcG9ydCwgdmlhCiAgIGNvbmZpZ3VyZSAtLXdpdGgtc3NsLWVuZ2luZS4gIEJhc2VkIGluIHBhcnQgb24gYSBkaWZmIGJ5IG1pY2hhbCBhdAogICBsb2dpeC5jei4KCjIwMDYwMjE5CiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW4gY29uZmlndXJlLmFjLCBhZGRlZCBvcGVuYnNkLWNvbXBhdC9yZWdyZXNzL10KICAgQWRkIGZpcnN0IGF0dGVtcHQgYXQgcmVncmVzcyB0ZXN0cyBmb3IgY29tcGF0IGxpYnJhcnkuICBvayBkam1ACgoyMDA2MDIxNAogLSAodGltKSBbYnVpbGRwa2cuc2guaW5dIE1ha2UgdGhlIG5hbWVzIGNvbnNpc3RlbnQuCiAgIHMvcGtnX3Bvc3RfbWFrZV9pbnN0YWxsX2ZpeGVzLnNoL3BrZy1wb3N0LW1ha2UtaW5zdGFsbC1maXhlcy5zaC8gT0sgZHR1Y2tlckAKCjIwMDYwMjEyCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmNdIE1ha2UgbG9vcCBjb3VudGVyIHVuc2lnbmVkCiAgIHRvIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZywgZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgogLSAodGltKSBbY29uZmlndXJlLmFjXSBCdWcgIzExNDkuIERpc2FibGUgL2V0Yy9kZWZhdWx0L2xvZ2luIGNoZWNrIGZvciBRTlguCiAtIChkdHVja2VyKSBbUkVBRE1FIHZlcnNpb24uaCBjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjCiAgIGNvbnRyaWIvcmVkaGF0L29wZW5zc2guc3BlYyBjb250cmliL3N1c2Uvb3BlbnNzaC5zcGVjXSBCdW1wIHZlcnNpb24KICAgc3RyaW5ncyB0byBtYXRjaCA0LjNwMiByZWxlYXNlLgoKMjAwNjAyMDgKIC0gKHRpbSkgW3Nlc3Npb24uY10gTG9nb3V0IHJlY29yZHMgd2VyZSBub3QgdXBkYXRlZCBvbiBzeXN0ZW1zIHdpdGgKICAgcG9zdCBhdXRoIHByaXZzZXAgZGlzYWJsZWQgZHVlIHRvIGJ1ZyAxMDg2IGNoYW5nZXMuIEFuYWx5c2lzIGFuZCBwYXRjaAogICBieSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLiBPSyB0aW1ALCBkdHVja2VyQC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFR5cG8gaW4gVWx0cml4IGFuZCBOZXdzT1Mgc2VjdGlvbnMgKE5FRURfU0VUUFJHUAogICAtPiBORUVEX1NFVFBHUlApLCByZXBvcnRlZCBieSBCZXJuaGFyZCBTaW1vbi4gIG9rIHRpbUAKCjIwMDYwMjA2CiAtICh0aW0pIFtjb25maWd1cmUuYWNdIFJlbW92ZSB1bm5lY2Vzc2FyeSB0ZXN0cyBmb3IgbmV0L2lmLmggYW5kIAogICBuZXRpbmV0L2luX3N5c3RtLmguIE9LIGR0dWNrZXJALgoKMjAwNjAyMDUKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQWRkIEFDX1JFVklTSU9OLiBBZGQgc3lzL3RpbWUuaCB0byBsYXN0bG9nLmggdGVzdAogICBmb3IgU29sYXJpcy4gT0sgZHR1Y2tlckAuCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIEJ1ZyAjMTE0OS4gQ2hhbmdlcyBpbiBRTlggc2VjdGlvbiBvbmx5LiBQYXRjaCBieQogICBrcmFhaSBhdCBmdGJmcy5vcmcuCgoyMDA2MDIwMwogLSAodGltKSBbY29uZmlndXJlLmFjXSB0ZXN0IGZvciBlZ3JlcCAoQUNfUFJPR19FR1JFUCkgYmVmb3JlIGZpcnN0CiAgIEFDX0NIRUNLX0hFQURFUlMgdGVzdC4gV2l0aG91dCBpdCwgaWYgQUNfQ0hFQ0tfSEVBREVSUyBpcyBmaXJzdCBydW4KICAgYnkgYSBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVjaywgYnVpbHRpbiBzdGFuZGFyZCBpbmNsdWRlcyB0ZXN0cyB3aWxsIGJlCiAgIHNraXBwZWQgb24gdGhlIG90aGVyIHBsYXRmb3Jtcy4KICAgQW5hbHlzaXMgYW5kIHN1Z2dlc3Rpb24gYnkgdmluc2NoZW4gYXQgcmVkaGF0LmNvbSwgcGF0Y2ggYnkgZHR1Y2tlckAuCiAgIE9LIHRpbUAsIGRqbUAuCgoyMDA2MDIwMgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTQ4OiBGaXggImNyaXBwbGVkIEFFUyIgdGVzdCBzbyB0aGF0IGl0CiAgIHdvcmtzIHdpdGggcGlja3kgY29tcGlsZXJzLiAgUGF0Y2ggZnJvbSBhbGV4LmtpZXJuYW4gYXQgdGh1cy5uZXQuCgoyMDA2MDIwMQogLSAoZGptKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdIFRyeSAnbG9nbmFtZScgYXMgd2VsbCBhcyAnd2hvYW1pJyB0byAKICAgZGV0ZXJtaW5lIHRoZSB1c2VyJ3MgbG9naW4gbmFtZSAtIG5lZWRlZCBmb3IgcmVncmVzcyB0ZXN0cyBvbiBTb2xhcmlzIAogICAxMCBhbmQgT3BlblNvbGFyaXMKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wMSAwOTowNjo1MAogICAgIFtzc2hkLjhdCiAgICAgLSBtZXJnZSBzZWN0aW9ucyBvbiBwcm90b2NvbHMgMSBhbmQgMiBpbnRvIGEgc2luZ2xlIHNlY3Rpb24KICAgICAtIHJlbW92ZSBjb25maWd1cmF0aW9uIGZpbGUgc2VjdGlvbgogICAgIG9rIG1hcmt1cwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMi8wMSAwOToxMTo0MQogICAgIFtzc2hkLjhdCiAgICAgc21hbGwgdHdlYWs7CiAtIChkam0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjIGNvbnRyaWIvcmVkaGF0L29wZW5zc2guc3BlY10KICAgW2NvbnRyaWIvc3VzZS9vcGVuc3NoLnNwZWNdIFVwZGF0ZSB2ZXJzaW9ucyBhaGVhZCBvZiByZWxlYXNlCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAyLzAxIDExOjI3OjIyCiAgICAgW3ZlcnNpb24uaF0KICAgICBvcGVuc3NoIDQuMwogLSAoZGptKSBSZWxlYXNlIE9wZW5TU0ggNC4zcDEKCjIwMDYwMTMxCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMjAgMTE6MjE6NDUKICAgICBbc3NoX2NvbmZpZy41XQogICAgIC0gd29yZCBjaGFuZ2UsIGFncmVlZCB3LyBtYXJrdXMKICAgICAtIGNvbnNpc3RlbmN5IGZpeGVzCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzI1IDA5OjA0OjM0CiAgICAgW3NzaGQuOF0KICAgICBtb3ZlIHRoZSBvcHRpb25zIGRlc2NyaXB0aW9uIHVwIHRoZSBwYWdlLCBhbmQgYSBmZXcgYWRkaXRpb25hbCB0d2Vha3MKICAgICB3aGlsc3QgaW4gaGVyZTsKICAgICBvayBtYXJrdXMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMjUgMDk6MDc6MjIKICAgICBbc3NoZC44XQogICAgIG1vdmUgc3Vic2VjdGlvbnMgdG8gZnVsbCBzZWN0aW9uczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMjYgMDg6NDc6NTYKICAgICBbc3NoLjFdCiAgICAgYWRkIGEgc2VjdGlvbiBvbiB2ZXJpZnlpbmcgaG9zdCBrZXlzIGluIGRuczsKICAgICB3cml0dGVuIHdpdGggYSBsb3Qgb2YgaGVscCBmcm9tIGpha29iOwogICAgIGZlZWRiYWNrIGR0dWNrZXIvbWFya3VzOwogICAgIG9rIG1hcmt1cwogICAtIHJleWtAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMzAgMTI6MjI6MjIKICAgICBbY2hhbm5lbHMuY10KICAgICBtYXJrIGNoYW5uZWwgYXMgd3JpdGUgZmFpbGVkIG9yIGRlYWQgaW5zdGVhZCBvZiByZWFkIGZhaWxlZCBvbiBlcnJvcgogICAgIG9mIHRoZSBjaGFubmVsIG91dHB1dCBmaWx0ZXIuCiAgICAgb2sgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8zMCAxMzozNzo0OQogICAgIFtzc2guMV0KICAgICByZW1vdmUgYW4gaW5jb3JyZWN0IHNlbnRlbmNlOwogICAgIHJlcG9ydGVkIGJ5IHJvdW1lbiBwZXRyb3Y7CiAgICAgb2sgZGptIG1hcmt1cwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8zMSAxMDoxOTowMgogICAgIFttaXNjLmMgbWlzYy5oIHNjcC5jIHNmdHAuY10KICAgICBmaXggbG9jYWwgYXJiaXRyYXJ5IGNvbW1hbmQgZXhlY3V0aW9uIHZ1bG5lcmFiaWxpdHkgb24gbG9jYWwvbG9jYWwgYW5kCiAgICAgcmVtb3RlL3JlbW90ZSBjb3BpZXMgKENWRS0yMDA2LTAyMjUsIGJ6ICMxMDk0KSwgcGF0Y2ggYnkKICAgICB0OG0gQVQgY2VudHJ1bS5jeiwgcG9saXNoZWQgYnkgZHR1Y2tlckAgYW5kIG15c2VsZjsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8zMSAxMDozNTo0MwogICAgIFtzY3AuY10KICAgICAic2NwIGEgYiBjIiBzaG91bGRuJ3QgY2xvYmJlciAiYyIgd2hlbiBpdCBpcyBub3QgYSBkaXJlY3RvcnksIHJlcG9ydCBhbmQKICAgICBmaXggZnJvbSBiaW9ybkA7IG9rIG1hcmt1c0AKIC0gKGRqbSkgU3luYyByZWdyZXNzIHRlc3RzIHRvIE9wZW5CU0Q6CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8xMCAxMDoyMDozOQogICAgIFtyZWdyZXNzL2ZvcndhcmRpbmcuc2hdCiAgICAgUmVncmVzcyB0ZXN0IGZvciBDbGVhckFsbEZvcndhcmRpbmdzIChieiAjOTk0KTsgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDQvMjUgMDk6NTQ6MDkKICAgICBbcmVncmVzcy9tdWx0aXBsZXguc2hdCiAgICAgRG9uJ3QgY2FsbCBjbGVhbnVwIGluIG11bHRpcGxleCBhcyB0ZXN0LWV4ZWMgd2lsbCBjbGVhbnVwIGFueXdheQogICAgIGZvdW5kIGJ5IHRpbUAsIG9rIGRqbUAKICAgICBOQi4gSUQgc3luYyBvbmx5LCB3ZSBhbHJlYWR5IGhhZCB0aGlzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzIwIDIzOjE0OjE1CiAgICAgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXQogICAgIGZvcmNlIGFkZHJlc3NmYW1pbHk9aW5ldCBmb3IgdGVzdHMsIHVuYnJlYWtpbmcgZHluYW1pYy1mb3J3YXJkIHJlZ3Jlc3MgZm9yCiAgICAgcmVjZW50bHkgY29tbWl0dGVkIG5jIFNPQ0tTNSBjaGFuZ2VzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzI0IDA0OjEwOjU0CiAgICAgW3JlZ3Jlc3MvdHJ5LWNpcGhlcnMuc2hdCiAgICAgb29wcywgbmV3IGFyY2ZvdXIgbW9kZXMgaGVyZSB0b28KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDYvMzAgMTE6MDI6MzcKICAgICBbcmVncmVzcy9zY3Auc2hdCiAgICAgYWxsb3cgU1VETz1zdWRvOyBmcm9tIEFsZXhhbmRlciBCbHVobQogICAtIGdydW5rQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzE0IDIxOjI1OjU2CiAgICAgW3JlZ3Jlc3MvYWdlbnQtZ2V0cGVlcmVpZC5zaF0KICAgICBhbGwgb3RoZXIgc2NyaXB0cyBpbiB0aGlzIGRpciB1c2UgJFNVRE8sIG5vdCAnc3VkbycsIHNvIHB1bGwgdGhpcyBldmVuCiAgICAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTQgMDQ6MzY6MzkKICAgICBbcmVncmVzcy9zY3Atc3NoLXdyYXBwZXIuc2hdCiAgICAgRml4IGFzc3VtcHRpb24gYWJvdXQgaG93IG1hbnkgYXJncyBzY3Agd2lsbCBwYXNzOyBvayBkam1ACiAgICAgTkIuIElEIHN5bmMgb25seSwgd2UgYWxyZWFkeSBoYWQgdGhpcwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8yNyAwNjo0OToyMQogICAgIFtzY3Auc2hdCiAgICAgcmVncmVzcyB0ZXN0IGZvciBsb2NhbCB0byBsb2NhbCBzY3AgY29waWVzOyBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8zMSAxMDoyMzoyMwogICAgIFtzY3Auc2hdCiAgICAgcmVncmVzc2lvbiB0ZXN0IGZvciBDVkUtMjAwNi0wMjI1IHdyaXR0ZW4gYnkgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMzEgMTA6MzY6MzMKICAgICBbc2NwLnNoXQogICAgIHJlZ3Jlc3MgdGVzdCBmb3IgInNjcCBhIGIgYyIgd2hlcmUgImMiIGlzIG5vdCBhIGRpcmVjdG9yeQoKMjAwNjAxMjkKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbnNzaGQuaW5pdC5pbl0gQnVnICMxMTQ0OiBVc2UgL2Jpbi9zaCBmb3IgdGhlCiAgIG9wZW5zc2hkLmluaXQgc2NyaXB0IGludGVycHJldHRlciBpZiAvc2Jpbi9zaCBkb2VzIG5vdCBleGlzdC4gIG9rIHRpbUAKCjIwMDYwMTIwCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzE1IDE3OjM3OjA1CiAgICAgW3NzaC4xXQogICAgIGNvcnJlY3Rpb24gZnJvbSBkZXJhYWR0CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzE4IDEwOjUzOjI5CiAgICAgW3NzaC4xXQogICAgIGFkZCBhIHNlY3Rpb24gb24gc3NoLWJhc2VkIHZwbiwgYmFzZWQgb24gcmV5aydzIFJFQURNRS50dW47CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8yMCAwMDoxNDo1NQogICAgIFtzY3AuMSBzc2guMSBzc2hfY29uZmlnLjUgc2Z0cC4xXQogICAgIERvY3VtZW50IFJla2V5TGltaXQuICBCYXNlZCBvbiBwYXRjaCBmcm9tIGphbi5pdmVuIGF0IGNlcm4uY2ggZnJvbSBtaW5kcm90CiAgICAgIzEwNTYgd2l0aCBmZWVkYmFjayBmcm9tIGptYywgZGptIGFuZCBtYXJrdXM7IG9rIGptY0AgZGptQAoKMjAwNjAxMTQKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wNiAxMzoyNzozMgogICAgIFtzc2guMV0KICAgICB3ZWVkIG91dCBzb21lIGR1cGxpY2F0ZSBpbmZvIGluIHRoZSBrbm93bl9ob3N0cyBGSUxFUyBlbnRyaWVzOwogICAgIG9rIGRqbQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wNiAxMzoyOToxMAogICAgIFtzc2guMV0KICAgICBmaW5hbCByb3VuZCBvZiB3aGFja2luZyBGSUxFUyBmb3IgZHVwbGljYXRlIGluZm8sIGFuZCBzb21lIGNvbnNpc3RlbmN5CiAgICAgZml4ZXM7CiAgICAgb2sgZGptCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzEyIDE0OjQ0OjEyCiAgICAgW3NzaC4xXQogICAgIHNwbGl0IHNlY3Rpb25zIG9uIHRjcCBhbmQgeDExIGZvcndhcmRpbmcgaW50byB0d28gc2VjdGlvbnMuCiAgICAgYWRkIGFuIGV4YW1wbGUgaW4gdGhlIHRjcCBzZWN0aW9uLCBiYXNlZCBvbiBzdGggaSB3cm90ZSBmb3Igc3NoIGZhcTsKICAgICBoZWxwICsgb2s6IGRqbSBtYXJrdXMgZHR1Y2tlcgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8xMiAxODo0ODo0OAogICAgIFtzc2guMV0KICAgICByZWZlciB0byBgVENQJyByYXRoZXIgdGhhbiBgVENQL0lQJyBpbiB0aGUgY29udGV4dCBvZiBjb25uZWN0aW9uCiAgICAgZm9yd2FyZGluZzsKICAgICBvayBtYXJrdXMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTIgMjI6MjA6MDAKICAgICBbc3NoZC44XQogICAgIHJlZmVyIHRvIFRDUCBmb3J3YXJkaW5nLCByYXRoZXIgdGhhbiBUQ1AvSVAgZm9yd2FyZGluZzsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTIgMjI6MjY6MDIKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHJlZmVyIHRvIFRDUCBmb3J3YXJkaW5nLCByYXRoZXIgdGhhbiBUQ1AvSVAgZm9yd2FyZGluZzsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMTIgMjI6MzQ6MTIKICAgICBbc3NoLjFdCiAgICAgYmFjayBvdXQgYSBzZW50ZW5jZSAtIEFVVEhFTlRJQ0FUSU9OIGFscmVhZHkgZG9jdW1lbnRzIHRoaXM7CgoyMDA2MDEwOQogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY3lnd2luL3NzaC1ob3N0LWNvbmZpZ10gTWFrZSBzc2hkIHNlcnZpY2UgZGVwZW5kIG9uCiAgIHRjcGlwIHNlcnZpY2Ugc28gaXQncyBhbHdheXMgc3RhcnRlZCBhZnRlciBJUCBpcyB1cC4gIFBhdGNoIGZyb20KICAgdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KCjIwMDYwMTA2CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDMgMTY6MzE6MTAKICAgICBbc3NoLjFdCiAgICAgbW92ZSBGSUxFUyB0byBhIC1jb21wYWN0IGxpc3QsIGFuZCBtYWtlIGVhY2ggZmlsZXMgYW4gaXRlbSBpbiB0aGF0IGxpc3QuCiAgICAgdGhpcyBhdm9pZHMgbmFzdGx5IGxpbmUgd3JhcCB3aGVuIHdlIGhhdmUgbG9uZyBwYXRobmFtZXMsIGFuZCB0cmVhdHMKICAgICBlYWNoIGZpbGUgYXMgYSBzZXBhcmF0ZSBpdGVtOwogICAgIHJlbW92ZSB0aGUgLlBhIHRvbywgc2luY2UgaXQgaXMgdXNlbGVzcy4KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDMgMTY6MzU6MzAKICAgICBbc3NoLjFdCiAgICAgdXNlIGEgbGFyZ2VyIHdpZHRoIGZvciB0aGUgRU5WSVJPTk1FTlQgbGlzdDsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDMgMTY6NTI6MzYKICAgICBbc3NoLjFdCiAgICAgcHV0IEZJTEVTIGluIHNvbWUgc29ydCBvZiBvcmRlcjogc29ydCBieSBwYXRobmFtZQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMyAxNjo1NToxOAogICAgIFtzc2guMV0KICAgICB0d2VhayB0aGUgZGVzY3JpcHRpb24gb2Ygfi8uc3NoL2Vudmlyb25tZW50CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA0IDE4OjQyOjQ2CiAgICAgW3NzaC4xXQogICAgIGNob3Agb3V0IHNvbWUgZHVwbGljYXRpb24gaW4gdGhlIC57cixzfWhvc3RzL3toLHNofW9zdHMuZXF1aXYgRklMRVMKICAgICBlbnRyaWVzOwogICAgIG9rIG1hcmt1cwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wNCAxODo0NTowMQogICAgIFtzc2guMV0KICAgICByZW1vdmUgLlhyJ3MgdG8gcnNoKDEpIGFuZCB0ZWxuZXQoMSk6IHRoZXkgYXJlIGhhcmRseSBuZWVkZWQ7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA0IDE5OjQwOjI0CiAgICAgW3NzaC4xXQogICAgICsuWHIgc3NoLWtleXNjYW4gMSAsCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzA0IDE5OjUwOjA5CiAgICAgW3NzaC4xXQogICAgIC0uWHIgZ3ppcCAxICwKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDYvMDEvMDUgMjM6NDM6NTMKICAgICBbbWlzYy5jXQogICAgIGNoZWNrIHRoYXQgc3RkaW8gZmlsZSBkZXNjcmlwdG9ycyBhcmUgYWN0dWFsbHkgY2xvc2VkIGJlZm9yZSBjbG9iYmVyaW5nCiAgICAgdGhlbSBpbiBzYW5pdGlzZV9zdGRmZCgpLiBwcm9ibGVtcyBvY2N1cnJlZCB3aGVuIGEgbG93ZXIgbnVtYmVyZWQgZmQgd2FzCiAgICAgY2xvc2VkLCBidXQgaGlnaGVyIG9uZXMgd2VyZW4ndC4gc3BvdHRlZCBieSwgYW5kIHBhdGNoIHRlc3RlZCBieQogICAgIEZy6WTpcmljIE9saXZp6QoKMjAwNjAxMDMKIC0gKGRqbSkgW2NoYW5uZWxzLmNdIGNsZWFuIHVwIGhhcm1sZXNzIG1lcmdlIGVycm9yLCBmcm9tIHJleWtACgoyMDA2MDEwMwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAyIDE3OjA5OjQ5CiAgICAgW3NzaF9jb25maWcuNSBzc2hkX2NvbmZpZy41XQogICAgIHNvbWUgY29ycmVjdGlvbnMgZnJvbSBtaWNoYWVsIGtudWRzZW47CgoyMDA2MDEwMgogLSAoZGptKSBbUkVBRE1FLnR1bl0gQWRkIFJFQURNRS50dW4sIG1pc3NlZCBkdXJpbmcgc3luYyBvZiB0dW4oNCkgc3VwcG9ydAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzMxIDEwOjQ2OjE3CiAgICAgW3NzaC4xXQogICAgIG1lcmdlIHRoZSAiTE9HSU4gU0VTU0lPTiBBTkQgUkVNT1RFIEVYRUNVVElPTiIgYW5kICJTRVJWRVIKICAgICBBVVRIRU5USUNBVElPTiIgc2VjdGlvbnMgaW50byAiQVVUSEVOVElDQVRJT04iOwogICAgIHNvbWUgcmV3b3JkaW5nIGRvbmUgdG8gbWFrZSB0aGUgdGV4dCByZWFkIGJldHRlciwgcGx1cyBzb21lCiAgICAgaW1wcm92ZW1lbnRzIGZyb20gZGptOwogICAgIG9rIGRqbQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8zMSAxMzo0NDowNAogICAgIFtzc2guMV0KICAgICBjbGVhbiB1cCBFTlZJUk9OTUVOVCBhIGxpdHRsZTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMzEgMTM6NDU6MTkKICAgICBbc3NoLjFdCiAgICAgLk5tIGRvZXMgbm90IHJlcXVpcmUgYW4gYXJndW1lbnQ7CiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMSAwODo1OToyNwogICAgIFtpbmNsdWRlcy5oIG1pc2MuY10KICAgICBtb3ZlIDxuZXQvaWYuaD47IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAxIDEwOjA4OjQ4CiAgICAgW21pc2MuY10KICAgICBubyB0cmFpbGluZyAiXG4iIGZvciBkZWJ1ZygpCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAyIDAxOjIwOjMxCiAgICAgW3NmdHAtY2xpZW50LmMgc2Z0cC1jb21tb24uaCBzZnRwLXNlcnZlci5jXQogICAgIHVzZSBhIGNvbW1vbiBtYXguIHBhY2tldCBsZW5ndGgsIG5vIGJpbmFyeSBjaGFuZ2UKICAgLSByZXlrQGN2cy5vcGVuYnNkLm9yZyAyMDA2LzAxLzAyIDA3OjUzOjQ0CiAgICAgW21pc2MuY10KICAgICBjbGFyaWZ5IHR1big0KSBvcGVuaW5nIC0gc2V0IHRoZSBtb2RlIGFuZCBicmluZyB0aGUgaW50ZXJmYWNlIHVwLiBhbHNvCiAgICAgKHJlKXNldHMgdGhlIHR1big0KSBsYXllciAyIExJTkswIGZsYWcgZm9yIGV4aXN0aW5nIHR1bm5lbCBpbnRlcmZhY2VzLgogICAgIHN1Z2dlc3RlZCBhbmQgb2sgYnkgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNi8wMS8wMiAxMjozMTowNgogICAgIFtzc2guMV0KICAgICBzdGFydCB0byBjdXQgc29tZSBkdXBsaWNhdGUgaW5mbyBmcm9tIEZJTEVTOwogICAgIGhlbHAvb2sgZGptCgoyMDA2MDEwMQogLSAoZGptKSBbTWFrZWZpbGUuaW4gY29uZmlndXJlLmFjIGluY2x1ZGVzLmggbWlzYy5jXQogICAgICAgICBbb3BlbmJzZC1jb21wYXQvcG9ydC10dW4uYyBvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5oXSBBZGQgc3VwcG9ydAogICAgICAgICBmb3IgdHVubmVsIGZvcndhcmRpbmcgZm9yIEZyZWVCU0QgYW5kIE5ldEJTRC4gTmV0QlNEJ3Mgc3VwcG9ydCBpcwogICAgICAgICBsaW1pdGVkIHRvIElQdjQgdHVubmVscyBvbmx5LCBhbmQgbW9zdCB2ZXJzaW9ucyBkb24ndCBzdXBwb3J0IHRoZQogICAgICAgICB0YXAoNCkgZGV2aWNlIGF0IGFsbC4KIC0gKGRqbSkgW2NvbmZpZ3VyZS5hY10gRml4IGxpbnV4L2lmX3R1bi5oIHRlc3QKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmNdIExpbnV4IG5lZWRzIGxpbnV4L2lmLmggdG9vCgoyMDA1MTIyOQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yOCAyMjo0NjowNgogICAgIFtjYW5vaG9zdC5jIGNoYW5uZWxzLmMgY2xpZW50bG9vcC5jXQogICAgIHVzZSAnYnJlYWstaW4nIGZvciBjb25zaXN0ZW5jeTsgb2sgZGVyYWFkdEAgb2sgYW5kIGlucHV0IGptY0AKICAgLSByZXlrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzMwIDE1OjU2OjM3CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmNdCiAgICAgYWRkIGNoYW5uZWwgb3V0cHV0IGZpbHRlciBpbnRlcmZhY2UuCiAgICAgb2sgZGptQCwgc3VnZ2VzdGVkIGJ5IG1hcmt1c0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMzAgMTY6NTk6MDAKICAgICBbc2Z0cC4xXQogICAgIGRvIG5vdCBzdWdnZXN0IHRoYXQgaW50ZXJhY3RpdmUgYXV0aGVudGljYXRpb24gd2lsbCB3b3JrCiAgICAgd2l0aCB0aGUgLWIgZmxhZzsKICAgICBiYXNlZCBvbiBhIGRpZmYgZnJvbSBqb2huIGwuIHNjYXJmb25lOwogICAgIG9rIGRqbQogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMzEgMDE6Mzg6NDUKICAgICBbc3NoLjFdCiAgICAgZG9jdW1lbnQgLU1NOyBvayBkam1ACiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9wb3J0LXR1bi5jIG9wZW5ic2QtY29tcGF0L3BvcnQtdHVuLmggY29uZmlndXJlLmFjXQogICBbc2VydmVybG9vcC5jIHNzaC5jIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluXQogICBbb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0gSW1wbGVtZW50IHR1big0KSBmb3J3YXJkaW5nIAogICBjb21wYXRhYmlsaXR5IHN1cHBvcnQgZm9yIExpbnV4LCBkaWZmIGZyb20gcmV5a0AKIC0gKGRqbSkgW2NvbmZpZ3VyZS5hY10gRGlzYWJsZSBMaW51eCB0dW4oNCkgY29tcGF0IGNvZGUgaWYgbGludXgvdHVuLmggZG9lcwogICBub3QgZXhpc3QKIC0gKGRqbSkgW2NvbmZpZ3VyZS5hY10gb29wcywgbWFrZSB0aGF0IGxpbnV4L2lmX3R1bi5oCgoyMDA1MTIyOQogLSAodGltKSBbYnVpbGRwa2cuc2guaW5dIGdyZXAgZm9yICRTU0hEVUlEIGluc3RlYWQgb2YgJFNTSERHSUQgb24gL2V0Yy9wYXNzd2QKCjIwMDUxMjI0CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjAgMjE6NTk6NDMKICAgICBbc3NoLjFdCiAgICAgbWVyZ2UgdGhlIHNlY3Rpb25zIG9uIHByb3RvY29scyAxIGFuZCAyIGludG8gb25lIHNlY3Rpb24gb24KICAgICBhdXRoZW50aWNhdGlvbjsKICAgICBmZWVkYmFjayBkam0gZHR1Y2tlcgogICAgIG9rIGRlcmFhZHQgbWFya3VzIGR0dWNrZXIKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjAgMjI6MDI6NTAKICAgICBbc3NoLjFdCiAgICAgLlNzIC0+IC5TaDogc3Vic2VjdGlvbnMgaGF2ZSBub3QgbWFkZSB0aGlzIHBhZ2UgbW9yZSByZWFkYWJsZQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMCAyMjowOTo0MQogICAgIFtzc2guMV0KICAgICBtb3ZlIGluZm8gb24gc3NoIHJldHVybiB2YWx1ZXMgYW5kIGNvbmZpZyBmaWxlcyB1cCBpbnRvIHRoZSBtYWluCiAgICAgZGVzY3JpcHRpb247CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIxIDExOjQ4OjE2CiAgICAgW3NzaC4xXQogICAgIC1MIGFuZCAtUiBkZXNjcmlwdGlvbnMgYXJlIG5vdyBhYm92ZSwgbm90IGJlbG93LCB+QyBkZXNjcmlwdGlvbjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjEgMTE6NTc6MjUKICAgICBbc3NoLjFdCiAgICAgb3B0aW9ucyBub3cgZGVzY3JpYmVkIGBhYm92ZScsIHJhdGhlciB0aGFuIGBsYXRlcic7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIxIDEyOjUzOjMxCiAgICAgW3NzaC4xXQogICAgIC1ZIGRvZXMgWDExIGZvcndhcmRpbmcgdG9vOwogICAgIG9rIG1hcmt1cwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMjEgMjI6NDQ6MjYKICAgICBbc3NoZC44XQogICAgIGNsYXJpZnkgcHJlY2VkZW5jZSBvZiAtcCwgUG9ydCwgTGlzdGVuQWRkcmVzczsgb2sgYW5kIGhlbHAgam1jQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMiAxMDozMTo0MAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgcHV0IHRoZSBkZXNjcmlwdGlvbiBvZiAiVXNlUHJpdmlsZWdlZFBvcnQiIGluIHRoZSBjb3JyZWN0IHBsYWNlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMiAxMToyMzo0MgogICAgIFtzc2guMV0KICAgICBleHBhbmQgdGhlIGRlc2NyaXB0aW9uIG9mIC13IHNvbWV3aGF0OwogICAgIGhlbHAvb2sgcmV5awogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8yMyAxNDo1NTo1MwogICAgIFtzc2guMV0KICAgICAtIHN5bmMgdGhlIGRlc2NyaXB0aW9uIG9mIC1lIHcvIHN5bm9wc2lzCiAgICAgLSBzaW1wbGlmeSB0aGUgZGVzY3JpcHRpb24gb2YgLUkKICAgICAtIG5vdGUgdGhhdCAtSSBpcyBvbmx5IGF2YWlsYWJsZSBpZiBzdXBwb3J0IGNvbXBpbGVkIGluLCBhbmQgdGhhdCBpdAogICAgIGlzbid0IGJ5IGRlZmF1bHQKICAgICBmZWVkYmFjay9vayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIzIDIzOjQ2OjIzCiAgICAgW3NzaC4xXQogICAgIGxlc3MgbWFyayB1cCBmb3IgLWM7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzI0IDAyOjI3OjQxCiAgICAgW3Nlc3Npb24uYyBzc2hkLmNdCiAgICAgZWxpbWluYXRlIHNvbWUgY29kZSBkdXBsaWNhdGVkIGluIHByaXZzZXAgYW5kIG5vbi1wcml2c2VwIHBhdGhzLCBhbmQKICAgICBleHBsaWNpdGx5IGNsZWFyIFNJR0FMUk0gaGFuZGxlcjsgImdyb292eSIgZGVyYWFkdEAKCjIwMDUxMjIwCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gcmV5a0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8xMyAxNTowMzowMgogICAgIFtzZXJ2ZXJsb29wLmNdCiAgICAgaWYgZm9yY2VkX3R1bl9kZXZpY2UgaXMgbm90IHNldCwgaXQgaXMgLTEgYW5kIG5vdCBTU0hfVFVOSURfQU5ZCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzE2IDE4OjA3OjA4CiAgICAgW3NzaC4xXQogICAgIG1vdmUgdGhlIG9wdGlvbiBkZXNjcmlwdGlvbnMgdXAgdGhlIHBhZ2U6IHN0YXJ0IG9mIGEgcmVzdHJ1Y3R1cmU7CiAgICAgb2sgbWFya3VzIGRlcmFhZHQKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTYgMTg6MDg6NTMKICAgICBbc3NoLjFdCiAgICAgc2ltcGxpZnkgYSBzZW50ZW5jZTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMTYgMTg6MTI6MjIKICAgICBbc3NoLjFdCiAgICAgbWFrZSB0aGUgZGVzY3JpcHRpb24gb2YgLWMgYSBsaXR0bGUgbmljZXI7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzE2IDE4OjE0OjQwCiAgICAgW3NzaC4xXQogICAgIHNpZ25wb3N0IHRoZSBwcm90b2NvbCBzZWN0aW9uczsKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzE3IDIxOjEzOjA1CiAgICAgW3NzaF9jb25maWcuNSBzZXNzaW9uLmNdCiAgICAgc3BlbGxpbmc6IGZvd2FyZGluZywgZm93YXJkZWQKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzE3IDIxOjM2OjQyCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBzcGVsbGluZzogaW50ZW50ZWQgLT4gaW50ZW5kZWQKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzIwIDA0OjQxOjA3CiAgICAgW3NzaC5jXQogICAgIGV4aXQoMjU1KSBvbiBlcnJvciB0byBtYXRjaCBkZXNjcmlwdGlvbiBpbiBzc2goMSk7IGJ6ICMxMTM3OyBvayBkZXJhYWR0QAoKMjAwNTEyMTkKIC0gKGR0dWNrZXIpIFtjaXBoZXItYWVzLmMgY2lwaGVyLWN0ci5jIGNpcGhlci5jIGNvbmZpZ3VyZS5hYwogICBvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5oXSBDaGVjayBmb3IgYW5kIHdvcmsgYXJvdW5kIGJyb2tlbiBBRVMKICAgY2lwaGVycyA+MTI4Yml0IG9uIChzb21lKSBTb2xhcmlzIDEwIHN5c3RlbXMuICBvayBkam1ACgoyMDA1MTIxNwogLSAoZHR1Y2tlcikgW2RlZmluZXMuaF0gSFAtVVggc3lzdGVtIGhlYWRlcnMgZGVmaW5lICJZRVMiIGFuZCAiTk8iIHdoaWNoCiAgIHNjcC5jIGFsc28gdXNlcywgc28gdW5kZWYgdGhlbSBoZXJlLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9ic2Qtc25wcmludGYuY10gQnVnICMxMTMzOiBPdXIKICAgc25wcmludGYgcmVwbGFjZW1lbnQgY2FuIGhhdmUgYSBjb25mbGljdGluZyBkZWNsYXJhdGlvbiBpbiBIUC1VWCdzIHN5c3RlbQogICBoZWFkZXJzIChjb25zdCB2cy4gbm8gY29uc3QpIHNvIHdlIG5vdyBjaGVjayBmb3IgYW5kIHdvcmsgYXJvdW5kIGl0LiAgUGF0Y2gKICAgZnJvbSB0aGUgZHluYW1pYyBkdW8gb2YgRGF2aWQgTGVvbmFyZCBhbmQgVGVkIFBlcmNpdmFsLgoKMjAwNTEyMTQKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMgKHJlZ3Jlc3MvKQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMzAgMDQ6MzY6MzkKICAgICBbcmVncmVzcy9zY3Atc3NoLXdyYXBwZXIuc2hdCiAgICAgRml4IGFzc3VtcHRpb24gYWJvdXQgaG93IG1hbnkgYXJncyBzY3Agd2lsbCBwYXNzOyBvayBkam1ACgoyMDA1MTIxMwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzMwIDExOjE4OjI3CiAgICAgW3NzaC4xXQogICAgIHRpbWV6b25lIC0+IHRpbWUgem9uZQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8zMCAxMTo0NToyMAogICAgIFtzc2guMV0KICAgICBhdm9pZCBhbWJpZ3VpdGllcyBpbiBkZXNjcmliaW5nIFRaOwogICAgIG9rIGRqbUAKICAgLSByZXlrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzA2IDIyOjM4OjI4CiAgICAgW2F1dGgtb3B0aW9ucy5jIGF1dGgtb3B0aW9ucy5oIGNoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmNdCiAgICAgW21pc2MuYyBtaXNjLmggcmVhZGNvbmYuYyByZWFkY29uZi5oIHNjcC5jIHNlcnZjb25mLmMgc2VydmNvbmYuaF0KICAgICBbc2VydmVybG9vcC5jIHNmdHAuYyBzc2guMSBzc2guYyBzc2hfY29uZmlnIHNzaF9jb25maWcuNSBzc2hjb25uZWN0LmNdCiAgICAgW3NzaGNvbm5lY3QuaCBzc2hkLjggc3NoZF9jb25maWcgc3NoZF9jb25maWcuNV0KICAgICBBZGQgc3VwcG9ydCBmb3IgdHVuKDQpIGZvcndhcmRpbmcgb3ZlciBPcGVuU1NILCBiYXNlZCBvbiBhbiBpZGVhIGFuZAogICAgIGluaXRpYWwgY2hhbm5lbCBjb2RlIGJpdHMgYnkgbWFya3VzQC4gVGhpcyBpcyBhIHNpbXBsZSBhbmQgZWFzeSB3YXkgdG8KICAgICB1c2UgT3BlblNTSCBmb3IgYWQgaG9jIHZpcnR1YWwgcHJpdmF0ZSBuZXR3b3JrIGNvbm5lY3Rpb25zLCBlLmcuCiAgICAgYWRtaW5pc3RyYXRpdmUgdHVubmVscyBvciBzZWN1cmUgd2lyZWxlc3MgYWNjZXNzLiBJdCdzIGJhc2VkIG9uIGEgbmV3CiAgICAgc3NoIGNoYW5uZWwgYW5kIHdvcmtzIHNpbWlsYXIgdG8gdGhlIGV4aXN0aW5nIFRDUCBmb3J3YXJkaW5nIHN1cHBvcnQsCiAgICAgZXhjZXB0IHRoYXQgaXQgZGVwZW5kcyBvbiB0aGUgdHVuKDQpIG5ldHdvcmsgaW50ZXJmYWNlIG9uIGJvdGggZW5kcyBvZgogICAgIHRoZSBjb25uZWN0aW9uIGZvciBsYXllciAyIG9yIGxheWVyIDMgdHVubmVsaW5nLiBUaGlzIGRpZmYgYWxzbyBhZGRzCiAgICAgc3VwcG9ydCBmb3IgTG9jYWxDb21tYW5kIGluIHRoZSBzc2goMSkgY2xpZW50LgogICAgIG9rIGRqbUAsIG1hcmt1c0AsIGptY0AgKG1hbnBhZ2VzKSwgdGVzdGVkIGFuZCBkaXNjdXNzZWQgd2l0aCBvdGhlcnMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDcgMDM6NTI6MjIKICAgICBbY2xpZW50bG9vcC5jXQogICAgIHJleWsgZm9yZ290IHRvIGNvbXBpbGUgd2l0aCAtV2Vycm9yIChtaXNzaW5nIGhlYWRlcikKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDcgMTA6NTI6MTMKICAgICBbc3NoLjFdCiAgICAgLSBhdm9pZCBsaW5lIHNwbGl0IGluIFNZTk9QU0lTCiAgICAgLSBhZGQgYXJncyB0byAtdwogICAgIC0ga2lsbCB0cmFpbGluZyB3aGl0ZXNwYWNlCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzA4IDE0OjU5OjQ0CiAgICAgW3NzaC4xIHNzaF9jb25maWcuNV0KICAgICBtYWtlIGAhY29tbWFuZCcgYSBsaXR0bGUgY2xlYXJlcjsKICAgICBvayByZXlrCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzA4IDE1OjA2OjI5CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBrZWVwIG9wdGlvbnMgaW4gb3JkZXI7CiAgIC0gcmV5a0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMi8wOCAxODozNDoxMQogICAgIFthdXRoLW9wdGlvbnMuYyBpbmNsdWRlcy5oIG1pc2MuYyBtaXNjLmggcmVhZGNvbmYuYyBzZXJ2Y29uZi5jXQogICAgIFtzZXJ2ZXJsb29wLmMgc3NoLmMgc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjUgY29uZmlndXJlLmFjXQogICAgIHR3byBjaGFuZ2VzIHRvIHRoZSBuZXcgc3NoIHR1bm5lbCBzdXBwb3J0LiB0aGlzIGJyZWFrcyBjb21wYXRpYmlsaXR5CiAgICAgd2l0aCB0aGUgaW5pdGlhbCBjb21taXQgYnV0IGlzIHJlcXVpcmVkIGZvciBhIHBvcnRhYmxlIGFwcHJvYWNoLgogICAgIC0gbWFrZSB0aGUgdHVubmVsIGlkIHVfaW50IGFuZCBwbGF0Zm9ybSBmcmllbmRseSwgdXNlIHByZWRlZmluZWQgdHlwZXMuCiAgICAgLSBzdXBwb3J0IGNvbmZpZ3VyYXRpb24gb2YgbGF5ZXIgMiAoZXRoZXJuZXQpIG9yIGxheWVyIDMKICAgICAocG9pbnQtdG8tcG9pbnQsIGRlZmF1bHQpIG1vZGVzLiBjb25maWd1cmF0aW9uIGlzIGRvbmUgdXNpbmcgdGhlCiAgICAgVHVubmVsICh5ZXN8cG9pbnQtdG8tcG9pbnR8ZXRoZXJuZXR8bm8pIG9wdGlvbiBpcyBzc2hfY29uZmlnKDUpIGFuZAogICAgIHJlc3RyaWN0ZWQgYnkgdGhlIFBlcm1pdFR1bm5lbCAoeWVzfHBvaW50LXRvLXBvaW50fGV0aGVybmV0fG5vKSBvcHRpb24KICAgICBpbiBzc2hkX2NvbmZpZyg1KS4KICAgICBvayBkam1ALCBtYW4gcGFnZSBiaXRzIGJ5IGptY0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTIvMDggMjE6Mzc6NTAKICAgICBbc3NoX2NvbmZpZy41XQogICAgIG5ldyBzZW50ZW5jZSwgbmV3IGxpbmU7CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEyLzEyIDEzOjQ2OjE4CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBzZXNzaW9uLmNdCiAgICAgbWFrZSBzdXJlIHByb3RvY29sIG1lc3NhZ2VzIGZvciBpbnRlcm5hbCBjaGFubmVscyBhcmUgaWdub3JlZC4KICAgICBhbGxvdyBhZGp1c3QgbWVzc2FnZXMgZm9yIG5vbi1vcGVuIGNoYW5uZWxzOyB3aXRoIGFuZCBvayBkam1ACiAtIChkam0pIFttaXNjLmNdIERpc2FibGUgdHVubmVsIGNvZGUgZm9yIG5vbi1PcGVuQlNEIChmb3Igbm93KSwgZW5hYmxlCiAgIGFnYWluIGJ5IHByb3ZpZGluZyBhIHN5c190dW5fb3BlbigpIGZ1bmN0aW9uIGZvciB5b3VyIHBsYXRmb3JtIGFuZCAKICAgc2V0dGluZyB0aGUgQ1VTVE9NX1NZU19UVU5fT1BFTiBkZWZpbmUuIE1vcmUgd29yayBpcyByZXF1aXJlZCB0byBtYXRjaCAKICAgT3BlbkJTRCdzIHR1bm5lbCBwcm90b2NvbCwgd2hpY2ggcHJlcGVuZHMgdGhlIGFkZHJlc3MgZmFtaWx5IHRvIHRoZSAKICAgcGFja2V0CgoyMDA1MTIwMQogLSAoZGptKSBbZW52cGFzcy5zaF0gUmVtb3ZlIHJlZ3Jlc3Mgc2NyaXB0IHRoYXQgd2FzIGFjY2lkZW50YWxseSBjb21taXR0ZWQgCiAgIGluIHRvcCBsZXZlbCBkaXJlY3RvcnkgYW5kIG5vdCBub3RpY2VkIGZvciBvdmVyIGEgeWVhciA6KQoKMjAwNTExMjkKIC0gKHRpbSkgW3NzaC1rZXlnZW4uY10gTW92ZSBEU0EgbGVuZ3RoIHRlc3QgYWZ0ZXIgc2V0dGluZyBkZWZhdWx0IHdoZW4KICAgYml0cyA9PSAwLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMjkgMDI6MDQ6NTUKICAgICBbc3NoLWtleWdlbi5jXQogICAgIFBvcHVsYXRlIGRlZmF1bHQga2V5IHNpemVzIGJlZm9yZSBjaGVja2luZyB0aGVtOyBmcm9tICYgb2sgdGltQAogLSAodGltKSBbY29uZmlndXJlLmFjIHNzaGQuOF0gRW5hYmxlIGxvY2tlZCBhY2NvdW50IGNoZWNrIChhICIqTEsqIiBzdHJpbmcpCiAgIGZvciBVbml4V2FyZS4KCjIwMDUxMTI4CiAtIChkdHVja2VyKSBbcmVncmVzcy95ZXMtaGVhZC5zaF0gV29yayBhcm91bmQgYnJlYWthZ2UgY2F1c2VkIGJ5IHNvbWUKICAgdmVyc2lvbnMgb2YgR05VIGhlYWQuICBCYXNlZCBvbiBwYXRjaCBmcm9tIHphcHBhbWFuIGF0IGJ1cmFwaGFsaW51eC5vcmcKIC0gKGR0dWNrZXIpIFtpbmNsdWRlcy5oXSBCdWcgIzExMjI6IF9fVVNFX0dOVSBpcyBhIGdsaWJjIGludGVybmFsIG1hY3JvLCB1c2UKICAgX0dOVV9TT1VSQ0UgaW5zdGVhZC4gIFBhdGNoIGZyb20gdDhtIGF0IGNlbnRydW0uY3ouCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8yOCAwNToxNjo1MwogICAgIFtzc2gta2V5Z2VuLjEgc3NoLWtleWdlbi5jXQogICAgIEVuZm9yY2UgRFNBIGtleSBsZW5ndGggb2YgZXhhY3RseSAxMDI0IGJpdHMgdG8gY29tcGx5IHdpdGggRklQUy0xODYtMiwKICAgICBpbmNyZWFzZSBtaW51bXVtIFJTQSBrZXkgc2l6ZSB0byA3NjggYml0cyBhbmQgdXBkYXRlIG1hbiBwYWdlIHRvIHJlZmxlY3QKICAgICB0aGVzZS4gIFBhdGNoIG9yaWdpbmFsbHkgYnojMTExOSAoc2VudGhpbGt1bWFyX3NlbiBhdCBob3Rwb3AuY29tKSwKICAgICBvayBkam1ALCBncnVkZ2luZyBvayBkZXJhYWR0QC4KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzI4IDA2OjAyOjU2CiAgICAgW3NzaC1hZ2VudC4xXQogICAgIFVwZGF0ZSBhZ2VudCBzb2NrZXQgcGF0aCB0ZW1wbGF0ZXMgdG8gcmVmbGVjdCByZWFsaXR5LCBjb3JyZWN0IHhyZWYgZm9yCiAgICAgdGltZSBmb3JtYXRzLiAgYnojMTEyMSwgcGF0Y2ggZnJvbSBvcGVuc3NoIGF0IHJvdW1lbnBldHJvdi5pbmZvLCBvayBkam1ACgoyMDA1MTEyNgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMxMTI2OiBBSVggNS4yIGFuZCA1LjMgKGFuZCBwcmVzdW1hYmx5IG5ld2VyLAogICB3aGVuIHRoZXkncmUgYXZhaWxhYmxlKSBuZWVkIHRoZSByZWFsIFVJRCBzZXQgb3RoZXJ3aXNlIHBhbV9jaGF1dGh0b2sgd2lsbAogICBzZXQgQURNQ0hHIGFmdGVyIGNoYW5naW5nIHRoZSBwYXNzd29yZCwgZm9yY2luZyB0aGUgdXNlciB0byBjaGFuZ2UgaXQKICAgYWdhaW4gaW1tZWRpYXRlbHkuCgoyMDA1MTEyNQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQXBwbHkgdGltJ3MgZml4IGZvciBvbGRlciBzeXN0ZW1zIHdoZXJlIHRoZQogICByZXNvbHZlciBzdGF0ZSBpbiByZXNvbHYuaCBpcyAic3RhdGUiIG5vdCAiX19yZXNfc3RhdGUiLiAgV2l0aCBzbGlnaHQKICAgbW9kaWZpY2F0aW9uIGJ5IG1lIHRvIGFsc28gd29yayBvbiBvbGQgQUlYZXMuICBvayBkam1ACiAtIChkdHVja2VyKSBbcHJvZ3Jlc3NtZXRlci5jIHNjcC5jIHNmdHAtc2VydmVyLmNdIFVzZSBjb3JyZWN0IGNhc3RzIGZvcgogICBzbnByaW50ZiBmb3JtYXRzLCBmaXhlcyB3YXJuaW5ncyBvbiBzb21lIDY0IGJpdCBwbGF0Zm9ybXMuICBQYXRjaCBmcm9tCiAgIHNoYXcgYXQgdnJhbml4LmNvbSwgb2sgZGptQAoKMjAwNTExMjQKIC0gKGRqbSkgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbiBvcGVuYnNkLWNvbXBhdC9ic2QtYXNwcmludGYuYyAKICAgb3BlbmJzZC1jb21wYXQvYnNkLXNucHJpbnRmLmMgb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0gQWRkIGFuIAogICBhc3ByaW50ZigpIGltcGxlbWVudGF0aW9uLCBhZnRlciBzeW5jaW5nIG91ciB7dix9c25wcmludGYoKSBpbXBsZW1lbnRhdGlvbgogICB3aXRoIHNvbWUgZXh0cmEgZml4ZXMgZnJvbSBTYW1iYSdzIHZlcnNpb24uIFdpdGggaGVscCBhbmQgZGVidWdnaW5nIGZyb20gCiAgIGR0dWNrZXIgYW5kIHRpbTsgb2sgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEZpeCB0eXBvcyBpbiBjb21tZW50cyBhbmQgQUNfU0VBUkNIX0xJQiBhcmd1bWVudAogICBvcmRlciBpbiBSZWxpYW50IFVuaXggYmxvY2suICBQYXRjaCBmcm9tIGpvaGFuZSBhdCBseXNhdG9yLmxpdS5zZS4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0gVXNlIDEwMjQgYml0IGtleXMgc2luY2Ugd2UgZ2VuZXJhdGUgc28KICAgbWFueSBhbmQgdXNlIHRoZW0gb25seSBvbmNlLiAgU3BlZWRzIHVwIHRlc3Rpbmcgb24gb2xkZXIvc2xvd2VyIGhhcmR3YXJlLgoKMjAwNTExMjIKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzEyIDE4OjM3OjU5CiAgICAgW3NzaC1hZGQuY10KICAgICBzcGFjZQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMTIgMTg6Mzg6MTUKICAgICBbc2NwLmNdCiAgICAgYXZvaWQgY2xvc2UoLTEpLCBhcyBpbiByY3A7IG9rIGNsb2RlcgogICAtIG1pbGxlcnRAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTEvMTUgMTE6NTk6NTQKICAgICBbaW5jbHVkZXMuaF0KICAgICBJbmNsdWRlIHN5cy9xdWV1ZS5oIGV4cGxpY2l0bHkgaW5zdGVhZCBvZiBhc3N1bWluZyBzb21lIG90aGVyIGhlYWRlcgogICAgIHdpbGwgcHVsbCBpdCBpbi4gIEF0IHRoZSBtb21lbnQgaXQgZ2V0cyBwdWxsZWQgaW4gYnkgc3lzL3NlbGVjdC5oCiAgICAgKHdoaWNoIHNzaCBoYXMgbm8gYnVzaW5lc3MgaW5jbHVkaW5nKSB2aWEgZXZlbnQuaC4gIE9LIG1hcmt1c0AKICAgICAoSUQgc3luYyBvbmx5IGluIC1wb3J0YWJsZSkKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzIxIDA5OjQyOjEwCiAgICAgW2F1dGgta3JiNS5jXQogICAgIFBlcmZvcm0gS2VyYmVyb3MgY2FsbHMgZXZlbiBmb3IgaW52YWxpZCB1c2VycyB0byBwcmV2ZW50IGxlYWtpbmcKICAgICBpbmZvcm1hdGlvbiBhYm91dCBhY2NvdW50IHZhbGlkaXR5LiAgYnogIzk3NSwgcGF0Y2ggb3JpZ2luYWxseSBmcm9tCiAgICAgU2VudGhpbCBLdW1hciwgc2FuaXR5IGNoZWNrZWQgYnkgU2ltb24gV2lsa2luc29uLCB0ZXN0ZWQgYnkgZGptQCwgYmlvcm5ALAogICAgIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzIyIDAzOjM2OjAzCiAgICAgW2hvc3RmaWxlLmNdCiAgICAgQ29ycmVjdCBmb3JtYXQvYXJndW1lbnRzIHRvIGRlYnVnIGNhbGw7IHNwb3R0ZWQgYnkgc2hhdyBhdCB2cmFuaXguY29tCiAgICAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2xvZ2lucmVjLmNdIEFkZCBjYXN0cyB0byBwcmV2ZW50IGNvbXBpbGVyIHdhcm5pbmdzLCBwYXRjaAogICBmcm9tIHNoYXcgYXQgdnJhbml4LmNvbS4KCjIwMDUxMTIwCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbnNzbC1jb21wYXQuaF0gQWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aGF0CiAgIGlzIGdvaW5nIG9uLgoKMjAwNTExMTIKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBSZXN0b3JlIFBvcnRhYmxlLXNwZWNpZmljCiAgIGlmZGVmIGxvc3QgZHVyaW5nIHN5bmMuICBTcG90dGVkIGJ5IHRpbUAuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQve3JlYWxwYXRoLmMsc3Ryb2xsLmMscnJlc3Zwb3J0LmN9XSAkT3BlbkJTRCB0YWcuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBVc2UgIiRBV0siIGluc3RlYWQgb2YgImF3ayIgaW4gZ2NjIHZlcnNpb24gdGVzdC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFJlbW92ZSBkdXBsaWNhdGUgdXRpbWVzKCkgY2hlY2suICBvayBkam1ACiAtIChkdHVja2VyKSBbcmVncmVzcy9yZWNvbmZpZ3VyZS5zaF0gRml4IHBvdGVudGlhbCByYWNlIGluIHRoZSByZWNvbmZpZ3VyZQogICB0ZXN0OiBpZiBzc2hkIHRha2VzIHRvbyBsb25nIHRvIHJlY29uZmlndXJlIHRoZSBzdWJzZXF1ZW50IGNvbm5lY3Rpb24gd2lsbAogICBmYWlsLiAgWmFwIHBpZGZpbGUgYmVmb3JlIEhVUGluZyBzc2hkIHdoaWNoIHdpbGwgcmV3cml0ZSBpdCB3aGVuIGl0J3MgcmVhZHkuCgoyMDA1MTExMAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3NldGVudi5jXSBNZXJnZSBjaGFuZ2VzIGZvciBfX2ZpbmRlbnYgZnJvbQogICBPcGVuQlNEIGdldGVudi5jIHJldnMgMS40IC0gMS44IChBTlNJZmljYXRpb24gb2YgYXJndW1lbnRzLCByZW1vdmFsIG9mCiAgICJyZWdpc3RlciIpLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3NldGVudi5jXSBNYWtlIF9fZmluZGVudiBzdGF0aWMsIHJlbW92ZQogICB1bm5lY2Vzc2FyeSBwcm90b3R5cGUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2V0ZW52LmNdIFN5bmMgY2hhbmdlcyBmcm9tIE9wZW5CU0Qgc2V0ZW52LmMKICAgcmV2cyAxLjcgLSAxLjkuCiAtIChkdHVja2VyKSBbYXV0aC1rcmI1LmNdIEZpeCAtV3NpZ24tY29tcGFyZSB3YXJuaW5nIGluIG5vbi1IZWltZGFsIHBhdGguCiAgIFBhdGNoIGZyb20gZGptQC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIERpc2FibGUgcG9pbnRlci1zaWduIHdhcm5pbmdzIG9uIGdjYyA0LjArCiAgIHNpbmNlIHRoZXkncmUgbm90IHVzZWZ1bCByaWdodCBub3cuICBQYXRjaCBmcm9tIGRqbUAuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0Z3JvdXBsaXN0LmNdIFN5bmMgT3BlbkJTRCByZXZzIDEuMTAgLSAxLjIgKEFOU0kKICAgcHJvdG90eXBlcywgcmVtb3ZhbCBvZiAicmVnaXN0ZXIiKS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zdHJsY2F0LmNdIFN5bmMgT3BlbkJTRCByZXZzIDEuMTEgLSAxLjEyIChyZW1vdmFsCiAgIG9mICJyZWdpc3RlciIpLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3tMT1RTfV0gTW92ZSB0aGUgIk9QRU5CU0QgT1JJR0lOQUwiIG1hcmtlcnMgdG8KICAgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLiAgSGF2aW5nIHRoZW0gYXQgdGhlIHRvcCBuZXh0IHRvIHRoZSBDVlNJRHMKICAgZ3VhcmFudGVlcyBhIGNvbmZsaWN0IGZvciBlYWNoIGFuZCBldmVyeSBzeW5jLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3N0cmxjcHkuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjggLT4gMS4xMC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9zaWdhY3QuaF0gQWRkICJPUEVOQlNEIE9SSUdJTkFMIiBtYXJrZXIuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc3RybW9kZS5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNSAtPiAxLjcuCiAgIFJlbW92YWwgb2YgcmNzaWQsICJ3aGl0ZW91dCIgaW5vZGUgdHlwZS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9iYXNlbmFtZS5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMTEgLT4gMS4xNC4KICAgUmVtb3ZhbCBvZiByY3NpZCwgd2lsbCBubyBsb25nZXIgc3RybGNweSBwYXJ0cyBvZiB0aGUgc3RyaW5nLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3N0cnRvbGwuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjQgLT4gMS41LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3N0cnRvdWwuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjUgLT4gMS43LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4xNiAtPiAxLjE4LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3JlYWRwYXNzcGhyYXNlLmhdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4zIC0+IDEuNS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nbG9iLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4yMiAtPiAxLjI1LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dsb2IuaF0gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjggLT4gMS45LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldGN3ZC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuOSAtPiAxLjE0LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldGN3ZC5jXSBSZXBsYWNlIGxzdGF0IHdpdGggZnN0YXQgdG8gbWF0Y2ggdXAKICAgd2l0aCBPcGVuQlNEIGNvZGUgc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBwbGF0Zm9ybXMgd2l0aG91dCBmc3RhdCBhbnkgbW9yZS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9pbmV0X2F0b24uY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjcgLT4gMS45LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2luZXRfbnRvYS5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNCAtPiAxLjYuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvaW5ldF9udG9wLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS41IC0+IDEuNy4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9kYWVtb24uY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjUgLT4gMS42LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3N0cnNlcC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuNSAtPiAxLjYuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZGFlbW9uLmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4xMCAtPiAxLjEzLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L21rdGVtcC5jXSBVcGRhdGUgZnJvbSBPcGVuQlNEIDEuMTcgLT4gMS4xOS4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ycmVzdnBvcnQuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjYgLT4gMS44LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JpbmRyZXN2cG9ydC5jXSBBZGQgIk9QRU5CU0QgT1JJR0lOQUwiIG1hcmtlci4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9iaW5kcmVzdnBvcnQuY10gVXBkYXRlIGZyb20gT3BlbkJTRCAxLjE2IC0+IDEuMTcuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2lnYWN0LmNdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4zIC0+IDEuNC4KICAgSWQgYW5kIGNvcHlyaWdodCBzeW5jIG9ubHksIHRoZXJlIHdlcmUgbm8gc3Vic3RhbnRpYWwgY2hhbmdlcyB3ZSBuZWVkLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1jbG9zZWZyb20uYyBvcGVuYnNkLWNvbXBhdC9iYXNlNjQuY10KICAgLVdzaWduLWNvbXBhcmUgZml4ZXMgZnJvbSBkam0uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvc2lnYWN0LmhdIFVwZGF0ZSBmcm9tIE9wZW5CU0QgMS4yIC0+IDEuMy4KICAgSWQgYW5kIGNvcHlyaWdodCBzeW5jIG9ubHksIHRoZXJlIHdlcmUgbm8gc3Vic3RhbnRpYWwgY2hhbmdlcyB3ZSBuZWVkLgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVHJ5IHRvIGdldCB0aGUgZ2NjIHZlcnNpb24gbnVtYmVyIGluIGEgd2F5IHRoYXQKICAgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiB2ZXJzaW9ucywgYW5kIHVzZSBhIHNhZmVyIGRlZmF1bHQuCgoyMDA1MTEwNQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzA3IDExOjEzOjU3CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBjaGFuZ2UgRFNBIGRlZmF1bHQgYmFjayB0byAxMDI0LCBhcyBpdCdzIGRlZmluZWQgZm9yIDEwMjQgYml0cyBvbmx5CiAgICAgYW5kIHRoaXMgY2F1c2VzIGludGVyb3AgcHJvYmxlbXMgd2l0aCBvdGhlciBjbGllbnRzLiAgbW9yZW92ZXIsCiAgICAgaW4gb3JkZXIgdG8gaW1wcm92ZSB0aGUgc2VjdXJpdHkgb2YgRFNBIHlvdSBuZWVkIHRvIGNoYW5nZSBtb3JlCiAgICAgY29tcG9uZW50cyBvZiBEU0Ega2V5IGdlbmVyYXRpb24gKGUuZy4gdGhlIGludGVybmFsIFNIQTEgaGFzaCk7CiAgICAgb2sgZGVyYWFkdAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMCAxMDoyMzowOAogICAgIFtjaGFubmVscy5jIGNoYW5uZWxzLmggY2xpZW50bG9vcC5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmNdCiAgICAgZml4IHJlZ3Jlc3Npb24gSSBpbnRyb2R1Y2VkIGluIDQuMjogWDExIGZvcndhcmRpbmdzIGluaXRpYXRlZCBhZnRlcgogICAgIGEgc2Vzc2lvbiBoYXMgZXhpdGVkIChlLmcuICIoc2xlZXAgNTsgeHRlcm0pICYiKSB3b3VsZCBub3Qgc3RhcnQuCiAgICAgYnogIzEwODYgcmVwb3J0ZWQgYnkgdDhtIEFUIGNlbnRydW0uY3o7IG9rIG1hcmt1c0AgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTEgMjM6Mzc6MzcKICAgICBbY2hhbm5lbHMuY10KICAgICBieiAjMTA3NiBzZXQgU09fUkVVU0VBRERSIG9uIFgxMSBmb3J3YXJkaW5nIGxpc3RuZXIgc29ja2V0cywgcHJldmVudGluZwogICAgIGJpbmQoKSBmYWlsdXJlIHdoZW4gYSBwcmV2aW91cyBjb25uZWN0aW9uJ3MgbGlzdGVuZXJzIGFyZSBpbiBUSU1FX1dBSVQsCiAgICAgcmVwb3J0ZWQgYnkgcGxhdHRuZXIgQVQgaW5mLmV0aHouY2g7IG9rIGR0dWNrZXJACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMyAxNDowMzowMQogICAgIFthdXRoMi1nc3MuYyBnc3MtZ2Vuci5jIGdzcy1zZXJ2LmNdCiAgICAgcmVtb3ZlIHVubmVlZGVkICNpbmNsdWRlczsgb2sgbWFya3VzQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTMgMTQ6MjA6MzcKICAgICBbZ3NzLXNlcnYuY10KICAgICBzcGVsbGluZyBpbiBjb21tZW50cwogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTMgMTk6MDg6MDgKICAgICBbZ3NzLXNlcnYta3JiNS5jIGdzcy1zZXJ2LmNdCiAgICAgdW51c2VkIGRlY2xhcmF0aW9uczsgb2sgZGVyYWFkdEAKICAgICAoaWQgc3luYyBvbmx5IGZvciBnc3Mtc2Vydi1rcmI1LmMpCiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xMyAxOToxMzo0MQogICAgIFtkbnMuY10KICAgICB1bm5lZWRlZCAjaW5jbHVkZSwgdW51c2VkIGRlY2xhcmF0aW9uLCBsaXR0bGUga25mOyBvayBkZXJhYWR0QAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTMgMjI6MjQ6MzEKICAgICBbYXV0aDItZ3NzLmMgZ3NzLWdlbnIuYyBnc3Mtc2Vydi5jIG1vbml0b3IuY10KICAgICBLTkY7IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzE0IDAyOjE3OjU5CiAgICAgW3NzaC1rZXlnZW4uYyBzc2guYyBzc2hjb25uZWN0Mi5jXQogICAgIG5vIHRyYWlsaW5nICJcbiIgZm9yIGxvZyBmdW5jdGlvbnM7IG9rIGRqbUAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzE0IDAyOjI5OjM3CiAgICAgW2NoYW5uZWxzLmMgY2xpZW50bG9vcC5jXQogICAgIGZyZWUoKS0+eGZyZWUoKTsgb2sgZGptQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTUgMTU6Mjg6MTIKICAgICBbc3NoY29ubmVjdC5jXQogICAgIG1ha2UgZXh0ZXJuYWwgZGVmaW5pdGlvbiBzdGF0aWM7IG9rIGRlcmFhZHRACiAgIC0gc3RldmVza0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8xNyAxMzo0NTowNQogICAgIFtkbnMuY10KICAgICBmaXggbWVtb3J5IGxlYWtzIGZyb20gMiBzb3VyY2VzOgogICAgICAgICAxKSBrZXlfZmluZ2VycHJpbnRfcmF3KCkKICAgICAgICAgMikgbWFsbG9jIGluIGRuc19yZWFkX3JkYXRhKCkKICAgICBvayBqYWtvYkAKICAgLSBzdGV2ZXNrQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzE3IDE0OjAxOjI4CiAgICAgW2Rucy5jXQogICAgIHJlbW92ZSAjaWZkZWYgTFdSRVM7IG9rIGpha29iQAogICAtIHN0ZXZlc2tAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMTcgMTQ6MTM6MzUKICAgICBbZG5zLmMgZG5zLmhdCiAgICAgbW9yZSBjbGVhbnVwczsgb2sgamFrb2JACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMwIDAxOjIzOjE5CiAgICAgW3NzaF9jb25maWcuNV0KICAgICBtZW50aW9uIGNvbnRyb2wgc29ja2V0IGZhbGxiYWNrIGJlaGF2aW91ciwgcmVwb3J0ZWQgYnkgCiAgICAgdHJ5cG9ucmFqIEFUIGdtYWlsLmNvbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMCAwNDowMTowMwogICAgIFtzc2gta2V5c2Nhbi5jXQogICAgIG1ha2Ugc3NoLWtleWdlbiBkaXNjYXJkIGp1bmsgZnJvbSBzZXJ2ZXIgYmVmb3JlIFNTSC0gaWRlbnQsIHNwb3R0ZWQgYnkKICAgICBkYXZlIEFUIGNpcnQubmV0OyBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMCAwNDowMzoyNAogICAgIFtzc2guY10KICAgICBmaXggbWlzbGVhZGluZyBkZWJ1ZyBtZXNzYWdlOyBvayBkdHVja2VyQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzAgMDg6Mjk6MjkKICAgICBbY2Fub2hvc3QuYyBzc2hkLmNdCiAgICAgQ2hlY2sgZm9yIGNvbm5lY3Rpb25zIHdpdGggSVAgb3B0aW9ucyBlYXJsaWVyIGFuZCBkcm9wIHNpbGVudGx5LiAgb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMCAwODo0Mzo0NwogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2U7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMwIDA4OjUyOjE4CiAgICAgW2NsaWVudGxvb3AuYyBwYWNrZXQuYyBzZXJ2ZXJsb29wLmMgc2Vzc2lvbi5jIHNzaC1hZ2VudC5jIHNzaC1rZXlnZW4uY10KICAgICBbc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QxLmMgc3NoZC5jXQogICAgIG5vIG5lZWQgdG8gZXNjYXBlIHNpbmdsZSBxdW90ZXMgaW4gY29tbWVudHMsIG5vIGJpbmFyeSBjaGFuZ2UKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzEwLzMxIDA2OjE1OjA0CiAgICAgW3NmdHAuY10KICAgICBGaXggc29ydGluZyB3aXRoICJscyAtMSIgY29tbWFuZC4gRnJvbSBSb2JlcnQgVHNhaSwgImxvb2tzIHJpZ2h0IiBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8zMSAxMToxMjo0OQogICAgIFtzc2gta2V5Z2VuLjEgc3NoLWtleWdlbi5jXQogICAgIGdlbmVyYXRlIGEgcHJvdG9jb2wgMiBSU0Ega2V5IGJ5IGRlZmF1bHQKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzEgMTE6NDg6MjkKICAgICBbc2VydmVybG9vcC5jXQogICAgIG1ha2Ugc3VyZSB3ZSBjbGVhbiB1cCB3dG1wLCBldGMuIGZpbGUgd2hlbiB3ZSByZWNlaXZlIGEgU0lHVEVSTSwKICAgICBTSUdJTlQgb3IgU0lHUVVJVCB3aGVuIHJ1bm5pbmcgd2l0aG91dCBwcml2aWxlZ2Ugc2VwYXJhdGlvbiAodGhlCiAgICAgbm9ybWFsIHByaXZzZXAgY2FzZSBpcyBhbHJlYWR5IE9LKS4gUGF0Y2ggbWFpbmx5IGJ5IGR0dWNrZXJAIGFuZAogICAgIHNlbnRoaWxrdW1hcl9zZW4gQVQgaG90cG9wLmNvbTsgb2sgZHR1Y2tlckAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMTAvMzEgMTk6NTU6MjUKICAgICBbc3NoLWtleWdlbi4xXQogICAgIGdyYW1tYXI7CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8wMyAxMzozODoyOQogICAgIFtjYW5vaG9zdC5jXQogICAgIENhY2hlIHJldmVyc2UgbG9va3VwcyB3aXRoIGFuZCB3aXRob3V0IEROUyBzZXBhcmF0ZWx5OyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzExLzA0IDA1OjE1OjU5CiAgICAgW2tleC5jIGtleC5oIGtleGRoLmMga2V4ZGhjLmMga2V4ZGhzLmMga2V4Z2V4LmMga2V4Z2V4Yy5jIGtleGdleHMuY10KICAgICByZW1vdmUgaGFyZGNvZGVkIGhhc2ggbGVuZ3RocyBpbiBrZXkgZXhjaGFuZ2UgY29kZSwgYWxsb3dpbmcKICAgICBpbXBsZW1lbnRhdGlvbiBvZiBLRVggbWV0aG9kcyB3aXRoIGRpZmZlcmVudCBoYXNoZXMgKGUuZy4gU0hBLTI1Nik7CiAgICAgb2sgbWFya3VzQCBkdHVja2VyQCBzdGV2ZXNrQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMS8wNSAwNTowMToxNQogICAgIFtidWZhdXguY10KICAgICBGaXggbGVha3MgaW4gZXJyb3IgcGF0aHMsIGJ6ICMxMTA5IGFuZCAjMTExMCByZXBvcnRlZCBieSBrcmVtZW5layBBVAogICAgIGNzLnN0YW5mb3JkLmVkdTsgb2sgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFtSRUFETUUucGxhdGZvcm1dIEFkZCBQQU0gc2VjdGlvbi4KIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIFN5bmMgdG8gbGF0ZXN0IE9wZW5CU0QgdmVyc2lvbiwKICAgcmVzb2x2aW5nIG1lbW9yeSBsZWFrIGJ6IzExMTEgcmVwb3J0ZWQgYnkga3JlbWVuZWsgQVQgY3Muc3RhbmZvcmQuZWR1OwogICBvayBkdHVja2VyQAoKMjAwNTExMDIKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jXSBCdWcgIzExMDg6IGZpeCBicm9rZW4gc3RyZHVwKCkuCiAgIFJlcG9ydGVkIGJ5IG9sYXZpIGF0IGlwdW5wbHVnZ2VkLmNvbSBhbmQgYW50b2luZS5icm9kaW4gYXQgbGFwb3N0ZS5uZXQKICAgdmlhIEZyZWVCU0QuCgoyMDA1MTAzMAogLSAoZGptKSBbY29udHJpYi9zdXNlL29wZW5zc2guc3BlYyBjb250cmliL3N1c2UvcmMuCiAgIHNzaGQgY29udHJpYi9zdXNlL3N5c2NvbmZpZy5zc2hdIEJ1ZyAjMTEwNjogVXBkYXRlZCBTdVNFIHNwZWMgYW5kIGluaXQgCiAgIGZpbGVzIGZyb20gaW1vcmdhbiBBVCBuYXMubmFzYS5nb3YKIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmNdIEJ1ZyAjMTA0NWRvIG5vdCBjaGVjayAvZXRjL25vbG9naW4gd2hlbiBQQU0gaXMKICAgZW5hYmxlZCwgaW5zdGVhZCBhbGxvdyBQQU0gdG8gaGFuZGxlIGl0LiAgTm90ZSB0aGF0IG9uIHBsYXRmb3JtcyB1c2luZyBQQU0sCiAgIHRoZSBwYW1fbm9sb2dpbiBtb2R1bGUgc2hvdWxkIGJlIGFkZGVkIHRvIHNzaGQncyBzZXNzaW9uIHN0YWNrIGluIG9yZGVyIHRvCiAgIG1haW50YWluIGV4aXNpbmcgYmVoYXZpb3VyLiAgQmFzZWQgb24gcGF0Y2ggYW5kIGRpc2N1c3Npb24gZnJvbSB0OG0gYXQKICAgY2VudHJ1bS5jeiwgb2sgZGptQAoKMjAwNTEwMjUKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFJlbG9jYXRlIExMT05HX01BWCBjYWxjdWxhdGlvbiB0byBhZnRlciB0aGUKICAgc2l6ZW9mKGxvbmcgbG9uZykgY2hlY2tzLCB0byBtYWtlIGZpeGluZyBidWcgIzExMDQgZWFzaWVyIChubyBjaGFuZ2VzCiAgIHlldCkuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzExMDQ6IFRydTY0J3MgcHJpbnRmIGZhbWlseSBkb2Vzbid0CiAgIHVuZGVyc3RhbmQgIiVsbGQiLCBldmVuIHRob3VnaCB0aGUgY29tcGlsZXIgaGFzICJsb25nIGxvbmciLCBzbyBoYW5kbGUKICAgaXQgYXMgYSBzcGVjaWFsIGNhc2UuICBQYXRjaCB0ZXN0ZWQgYnkgbWNhc2tpbGwuc2NvdHQgYXQgZXBhLmdvdi4KIC0gKGR0dWNrZXIpIFtjb250cmliL2N5Z3dpbi9zc2gtdXNlci1jb25maWddIFJlbW92ZSBkdXBsaWNhdGUgeWVzL25vCiAgIHByb21wdC4gIFBhdGNoIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KCjIwMDUxMDE3CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzEwOTc6IEZpeCBjb25maWd1cmUgZm9yIGNyb3NzLWNvbXBpbGluZy4KICAgL2V0Yy9kZWZhdWx0L2xvZ2luIHJlcG9ydCBhbmQgdGVzdGluZyBmcm9tIGFhYmFrZXIgYXQgaWVlLm9yZywgY29ycmVjdGlvbnMKICAgZnJvbSB0aW1ALgoKMjAwNTEwMDkKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgZGVmaW5lcy5oIG9wZW5ic2QtY29tcGF0L3Zpcy57YyxofV0gU3luYyBjdXJyZW50CiAgIHZlcnNpb25zIGZyb20gT3BlbkJTRC4gIG9rIGRqbUAKCjIwMDUxMDA4CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzEwOTg6IGRlZmluZSAkTUFJTCBmb3IgSFAtVVg7IHJlcG9ydCBmcm9tCiAgIGJyaWFuLnNtaXRoIGF0IGFnaWxlbnQgY29tLgogLSAoZGptKSBbY29uZmlndXJlLmFjXSBtaXNzaW5nICd0ZXN0JyBjYWxsIGZvciAtd2l0aC1XZXJyb3IgdGVzdAoKMjAwNTEwMDUKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgc3NoZC44XSBFbmFibGUgbG9ja2VkIGFjY291bnQgY2hlY2sgKGEgcHJlcGVuZGVkCiAgICIqTE9DS0VEKiIgc3RyaW5nKSBmb3IgRnJlZUJTRC4gIFBhdGNoIGplcmVtaWUgYXQgbGUtaGVuLm9yZyBhbmQKICAgc2VudGhpbGt1bWFyX3NlbiBhdCBob3Rwb3AuY29tLgoKMjAwNTEwMDMKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMDcgMDg6NTM6NTMKICAgICBbY2hhbm5lbHMuY10KICAgICBlbmZvcmNlIGNoYW5pZCAhPSBOVUxMOyBvayBkam0KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMDkgMTk6MTg6MDUKICAgICBbY2xpZW50bG9vcC5jXQogICAgIHR5cG87IGZyb20gbWFyayBhdCBtY3MudnV3LmFjLm56LCBidWcgIzEwODIKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMTMgMjM6NDA6MDcKICAgICBbc3NoZC5jIHNzaC5jIG1pc2MuaCBzZnRwLmMgc3NoLWtleWdlbi5jIHNzaC1rZXlzaWduLmMgc2Z0cC1zZXJ2ZXIuYwogICAgIHNjcC5jIG1pc2MuYyBzc2gta2V5c2Nhbi5jIHNzaC1hZGQuYyBzc2gtYWdlbnQuY10KICAgICBlbnN1cmUgdGhhdCBzdGRpbyBmZHMgYXJlIGF0dGFjaGVkOyBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xOSAxMTozNzozNAogICAgIFtzc2hfY29uZmlnLjUgc3NoLjFdCiAgICAgbWVudGlvbiBhYmlsaXR5IHRvIHNwZWNpZnkgYmluZF9hZGRyZXNzIGZvciBEeW5hbWljRm9yd2FyZCBhbmQgLUQgb3B0aW9uczsKICAgICBieiMxMDc3IHNwb3R0ZWQgYnkgSGFydXlhbWEgU2VpZ28KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMTkgMTE6NDc6MDkKICAgICBbc3NoZC5jXQogICAgIHN0b3AgY29ubmVjdGlvbiBhYm9ydCBvbiByZWtleSB3aXRoIGRlbGF5ZWQgY29tcHJlc3Npb24gZW5hYmxlZCB3aGVuCiAgICAgcG9zdC1hdXRoIHByaXZzZXAgaXMgZGlzYWJsZWQgKGUuZy4gd2hlbiByb290IGlzIGxvZ2dlZCBpbik7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzE5IDExOjQ4OjEwCiAgICAgW2dzcy1zZXJ2LmNdCiAgICAgdHlwbwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8xOSAxNTozODoyNwogICAgIFtzc2guMV0KICAgICBzb21lIG1vcmUgLkJrLy5FayB0byBhdm9pZCB1Z2x5IGxpbmUgc3BsaXQ7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzE5IDE1OjQyOjQ0CiAgICAgW3NzaC5jXQogICAgIHVwZGF0ZSAtRCB1c2FnZSBoZXJlIHRvbzsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMTkgMjM6MzE6MzEKICAgICBbc3NoLjFdCiAgICAgc3BlbGxpbmcgbml0IGZyb20gc3RldmVza0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDkvMjEgMjM6MzY6NTQKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBhcXVpcmUgLT4gYWNxdWlyZSwgZnJvbSBzdGV2ZXNrQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wOS8yMSAyMzozNzoxMQogICAgIFtzc2hkLmNdCiAgICAgY2hhbmdlIGxhYmVsIGF0IG1hcmt1c0AncyByZXF1ZXN0CiAgIC0gamFyZWR5QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA5LzMwIDIwOjM0OjI2CiAgICAgW3NzaC1rZXlzY2FuLjFdCiAgICAgZGVwbG95IC5BbiAtbm9zcGxpdDsgb2sgam1jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8xMC8wMyAwNzo0NDo0MgogICAgIFtjYW5vaG9zdC5jXQogICAgIFJlbG9jYXRlIGNoZWNrX2lwX29wdGlvbnMgY2FsbCB0byBwcmV2ZW50IGxvZ2dpbmcgb2YgZ2FyYmFnZSBmb3IKICAgICBjb25uZWN0aW9ucyB3aXRoIElQIG9wdGlvbnMgc2V0LiAgYnojMTA5MiBmcm9tIERhdmlkIExlb25hcmQsCiAgICAgImxvb2tzIGdvb2QiIGRlcmFhZHRACiAtIChkdHVja2VyKSBbcmVncmVzcy9SRUFETUUucmVncmVzc10gQnVnICM5ODk6IERvY3VtZW50IGxpbWl0YXRpb24gdGhhdCBzY3AKICAgaXMgcmVxdWlyZWQgaW4gdGhlIHN5c3RlbSBwYXRoIGZvciB0aGUgbXVsdGlwbGV4IHRlc3QgdG8gd29yay4KCjIwMDUwOTMwCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0gQnVnICMxMDk2OiBBZGQgcHJvdG90eXBlCiAgIGZvciBzdHJ0b2xsLiAgUGF0Y2ggZnJvbSBvLmZsZWJiZSBhdCBzY2llbmNlLWNvbXB1dGluZy5kZS4KIC0gKGR0dWNrZXIpIFttb25pdG9yLmNdIEJ1ZyAjMTA4NzogU2VuZCBsb2dpbm1zZyB0byBwcmVhdXRoIHByaXZzZXAKICAgY2hpbGQgZHVyaW5nIFBBTSBhY2NvdW50IGNoZWNrIHdpdGhvdXQgY2xlYXJpbmcgaXQuICBUaGlzIHJlc3RvcmVzIHRoZQogICBwb3N0LWxvZ2luIHdhcm5pbmdzIHN1Y2ggYXMgTERBUCBwYXNzd29yZCBleHBpcnkuICBQYXRjaCBmcm9tIFRvbWFzIE1yYXoKICAgd2l0aCBoZWxwIGZyb20gc2V2ZXJhbCBvdGhlcnMuCgoyMDA1MDkyOQogLSAoZHR1Y2tlcikgW21vbml0b3Jfd3JhcC5jXSBSZW1vdmUgZHVwbGljYXRlIGRlZmluaXRpb24gb2YgbG9naW5tc2cKICAgaW50cm9kdWNlZCBkdXJpbmcgc3luYy4KCjIwMDUwOTI4CiAtIChkdHVja2VyKSBbZW50cm9weS5jXSBVc2UgdV9jaGFyIGZvciByZWNlaXZpbmcgUk5HIHNlZWQgZm9yIGNvbnNpc3RlbmN5LgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEJ1ZyAjMTAyODogc2VuZCBmaW5hbCBub24tcXVlcnkgbWVzc2FnZXMgZnJvbQogICBQQU0gdmlhIGtleWJvYXJkLWludGVyYWN0aXZlLiAgUGF0Y2ggdGVzdGVkIGJ5IHRoZSBmb2xrcyBhdCBWaW50ZWxhLgoKMjAwNTA5MjcKIC0gKGR0dWNrZXIpIFtlbnRyb3B5LmNdIFJlbW92ZSB1bm5lY2Vzc2FyeSB0ZXN0cyBmb3IgZ2V0dWlkIGFuZCBnZXRldWlkCiAgIGNhbGxzLCBzaW5jZSB0aGV5IGNhbid0IHBvc3NpYmx5IGZhaWwuICBvayBkam1ACiAtIChkdHVja2VyKSBbZW50cm9weS5jIGVudHJvcHkuaCBzc2hkLmNdIFBhc3MgUk5HIHNlZWQgdG8gdGhlIHJlZXhlYydlZAogICBwcm9jZXNzIHdoZW4gc3NoZCByZWxpZXMgb24gc3NoLXJhbmRvbS1oZWxwZXIuICBTaG91bGQgcmVzdWx0IGluIGZhc3RlcgogICBsb2dpbnMgb24gc3lzdGVtcyB3aXRob3V0IGEgcmVhbCByYW5kb20gZGV2aWNlIG9yIHBybmdkLiAgb2sgZGptQAoKMjAwNTA5MjQKIC0gKGR0dWNrZXIpIFthdXRoMi5jXSBNb3ZlIHN0YXJ0X3BhbSgpIGNhbGxzIG91dCBvZiBpZi1lbHNlIGJsb2NrIHRvIHJlbW92ZQogICBkdXBsaWNhdGUgY2FsbC4gIG9rIGRqbUAKCjIwMDUwOTIyCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBVc2UgLVIgbGlua2VyIGZsYWcgZm9yIGxpYmVkaXQgdG9vOyBwYXRjaCBmcm9tCiAgIHNrZWxldGVuIGF0IHNoaWxsZXN0Lm5ldC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEZpeCBoZWxwIGZvciAtLXdpdGgtb3BlbnNjOyBwYXRjaCBmcm9tIHNrZWxldGVuIGF0CiAgIHNoaWxsZXN0Lm5ldC4KCjIwMDUwOTE5CiAtICh0aW0pIFthY2xvY2FsLm00IGNvbmZpZ3VyZS5hY10gRGVsZXRlIGFjY29uZmlnLmggYW5kIGFkZCB0ZW1wbGF0ZXMgdG8KICAgQUNfREVGSU5FIGFuZCBBQ19ERUZJTkVfVU5RVU9URUQgdG8gcXVpZXQgYXV0b2NvbmYgMi41OSB3YXJuaW5nIG1lc3NhZ2VzLgogICBvayBkdHVja2VyQAoKMjAwNTA5MTIKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQnVnIDEwNzguIEZpeCAtLXdpdGhvdXQta2VyYmVyb3M1LiBSZXBvcnRlZCBieQogICBNaWtlIEZyeXNpbmdlci4KCjIwMDUwOTA4CiAtICh0aW0pIFtkZWZpbmVzLmggb3BlbmJzZC1jb21wYXQvcG9ydC11dy5jXSBBZGQgbG9uZyBwYXNzd29yZCBzdXBwb3J0IHRvCiAgIE9wZW5TZXJ2ZXIgNiBhbmQgYWRkIG9zcjViaWdjcnlwdCBzdXBwb3J0IHNvIHdoZW4gc29tZW9uZSBtaWdyYXRlcwogICBwYXNzd29yZHMgYmV0d2VlbiBVbml4V2FyZSBhbmQgT3BlblNlcnZlciB0aGV5IHdpbGwgc3RpbGwgd29yay4gT0sgZHR1Y2tlckAKCjIwMDUwOTAxCiAtIChkam0pIFVwZGF0ZSBSUE0gc3BlYyBmaWxlIHZlcnNpb25zCgoyMDA1MDgzMQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA4LzMwIDIyOjA4OjA1CiAgICAgW2dzcy1zZXJ2LmMgc3NoY29ubmVjdDIuY10KICAgICBkZXN0cm95IGNyZWRlbnRpYWxzIGlmIGtyYjVfa3VzZXJvaygpIGNhbGwgZmFpbHMuIFN0b3BzIGNyZWRlbnRpYWxzIGJlaW5nCiAgICAgZGVsZWdhdGVkIHRvIHVzZXJzIHdobyBhcmUgbm90IGF1dGhvcmlzZWQgZm9yIEdTU0FQSUF1dGhlbnRpY2F0aW9uIHdoZW4KICAgICBHU1NBUElEZWxldGVnYXRlQ3JlZGVudGlhbHM9eWVzIGFuZCBhbm90aGVyIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSAKICAgICBzdWNjZWVkczsgYnojMTA3MyByZXBvcnRlZCBieSBwYXVsLm1vb3JlIEFUIGNlbnRyaWZ5LmNvbSwgZml4IGJ5IAogICAgIHNpbW9uIEFUIHN4dy5vcmcudWssIHRlc3RlZCB0b2RkQCBiaW9ybkAgamFrb2JAOyBvayBkZXJhYWR0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wOC8zMSAwOToyODo0MgogICAgIFt2ZXJzaW9uLmhdCiAgICAgNC4yCiAtIChkdHVja2VyKSBbUkVBRE1FXSBVcGRhdGUgcmVsZWFzZSBub3RlIFVSTCB0byA0LjIKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hYyBhdXRoLmMgZGVmaW5lcy5oIHNlc3Npb24uYyBvcGVuYnNkLWNvbXBhdC9wb3J0LXV3LmMKICAgb3BlbmJzZC1jb21wYXQvcG9ydC11dy5oIG9wZW5ic2QtY29tcGF0L3hjcnlwdC5jXSBsaWJpYWYgY2xlYW51cC4gRGlzYWJsZQogICBsaWJpYWYgYml0cyBmb3IgT3BlblNlcnZlcjYuIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSBpYV9nZXRfbG9ncHdkKCkuCiAgIEZlZWRiYWNrIGFuZCBPSyBkdHVja2VyQAoKMjAwNTA4MzAKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQmFjayBvdXQgbGFzdCBjaGFuZ2UuIEl0IG5lZWRzIHRvIGJlIGRvbmUgZGlmZmVyZW50bHkuCgoyMDA1MDgyOQogLSAodGltKSBbY29uZmlndXJlLmFjXSBpYV9vcGVuaW5mbygpIHNlZW1zIGJyb2tlbiBvbiBPU1I2LiBMaW1pdCBVVyBsb25nCiAgIHBhc3N3b3JkIHN1cHBvcnQgdG8gNy54IGZvciBub3cuCgoyMDA1MDgyNgogLSAodGltKSBbQ1JFRElUUyBMSUNFTkNFIGF1dGguYyBjb25maWd1cmUuYWMgZGVmaW5lcy5oIGluY2x1ZGVzLmggc2Vzc2lvbi5jCiAgIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIG9wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0LmgKICAgb3BlbmJzZC1jb21wYXQveGNyeXB0LmNdIE5ldyBmaWxlcyBbb3BlbnNzaC9vcGVuYnNkLWNvbXBhdC9wb3J0LXV3LmMKICAgb3BlbnNzaC9vcGVuYnNkLWNvbXBhdC9wb3J0LXV3LmhdIFN1cHBvcnQgbG9uZyBwYXNzd29yZHMgKD4gOC1jaGFyKQogICBvbiBVbml4V2FyZSA3IGZyb20gRGhpcmFqIEd1bGF0aSBhbmQgQWhzYW4gUmFzaGlkLiBDbGVhbnVwIGFuZCB0ZXN0aW5nCiAgIGJ5IHRpbUAuIEZlZWRiYWNrIGFuZCBPSyBkdHVja2VyQAoKMjAwNTA4MjMKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0gRG8gbm90IHByZXBlbmQgYW4gZXh0cmEgIi8iIHRvIGEgZnVsbHktCiAgIHF1YWxpZmllZCBzc2hkIHBhdGhuYW1lIHNpbmNlIHNvbWUgc3lzdGVtcyAoZWcgQ3lnd2luKSBtYXkgY29uc2lkZXIgIi9mb28iCiAgIGFuZCAiLy9mb28iIHRvIGJlIGRpZmZlcmVudC4gIFNwb3R0ZWQgYnkgdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gTm90IGFsbCBnY2MncyBzdXBwb3J0IC1Xc2lnbi1jb21wYXJlLiBFbmhhbmNlbWVudHMKICAgYW5kIE9LIGR0dWNrZXJACiAtICh0aW0pIFtkZWZpbmVzLmhdIFBBVEhfTUFYIGJpdHMgZm9yIE9wZW5TZXJ2ZXIgT0sgZHR1Y2tlckAKCjIwMDUwODIxCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGRlZmluZXMuaCBpbmNsdWRlcy5oIHNmdHAuY10gQWRkIHN1cHBvcnQgZm9yCiAgIEx5bnhPUywgcGF0Y2ggZnJvbSBPbGxpIFNhdmlhIChvcHMgYXQgaWtpLmZpKS4gIG9rIGRqbUAKCjIwMDUwODE2CiAtIChkam0pIFt0dHltb2Rlcy5jXSBidWd6aWxsYSAjMTAyNTogRml4IGVuY29kaW5nIG9mIF9QT1NJWF9WRElTQUJMRSwKICAgZnJvbSBKYWNvYiBOZXZpbnM7IG9rIGR0dWNrZXJACgoyMDA1MDgxNQogLSAodGltKSBbc2Z0cC5jXSB3cmFwIGVsX2VuZCgpIGluICNpZmRlZiBVU0VfTElCRURJVAogLSAodGltKSBbY29uZmlndXJlLmFjXSBjb3JyZWN0aW9ucyB0byBsaWJlZGl0IHRlc3RzLiBSZXBvcnQgYW5kIHBhdGNoZXMKICAgYnkgc2tlbGV0ZW4gQVQgc2hpbGxlc3QubmV0CgoyMDA1MDgxMgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzI4IDE3OjM2OjIyCiAgICAgW3BhY2tldC5jXQogICAgIG1pc3NpbmcgcGFja2V0X2luaXRfY29tcHJlc3Npb24oKTsgZnJvbSBzb2xhcgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8zMCAwMToyNjoxNgogICAgIFtzc2guY10KICAgICBmaXggLUQgbGlzdGVuX2hvc3QgaW5pdGlhbGlzYXRpb24sIHNvIGl0IHBpY2tzIHVwIGdhdGV3YXlfcG9ydHMgc2V0dGluZwogICAgIGNvcnJlY3RseQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8zMCAwMjowMzo0NwogICAgIFtyZWFkY29uZi5jXQogICAgIGxpc3Rlbl9ob3N0cyBpbml0aWFsaXNhdGlvbiBoZXJlIHRvbzsgc3BvdHRlZCBncmVnIEFUIHkyMDA1Lm5lc3QuY3gKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA4LzA2IDEwOjAzOjEyCiAgICAgW3NlcnZjb25mLmNdCiAgICAgVW5icmVhayBzc2hkIExpc3RlbkFkZHJlc3MgZm9yIGJhcmUgSVB2NiBhZGRyZXNzZXMuCiAgICAgUmVwb3J0IGZyb20gSmFudXN6IE11Y2thOyBvayBkam1ACiAgIC0gamFyZWR5QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA4LzA4IDEzOjIyOjQ4CiAgICAgW3NmdHAuY10KICAgICBzZnRwIHByb21wdCBlbmhhbmNlbWVudHM6CiAgICAgLSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgZG8gbm90IHByaW50IGFuIGVtcHR5IHByb21wdCBhdCB0aGUgZW5kCiAgICAgICBiZWZvcmUgZmluaXNoaW5nCiAgICAgLSBwcmludCBuZXdsaW5lIGFmdGVyIEVPRiBpbiBlZGl0bGluZSBtb2RlCiAgICAgLSBjYWxsIGVsX2VuZCgpIGluIGVkaXRsaW5lIG1vZGUKICAgICBvayBkdHVja2VyIGRqbQoKMjAwNTA4MTAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFRlc3QgbGliZWRpdCBsaWJyYXJ5IGFuZCBoZWFkZXJzIGZvciBjb21wYXRpYmlsaXR5LgogICBSZXBvcnQgZnJvbSBza2VsZXRlbiBBVCBzaGlsbGVzdC5uZXQsIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtMSUNFTkNFIGNvbmZpZ3VyZS5hYyBkZWZpbmVzLmggb3BlbmJzZC1jb21wYXQvcmVhbHBhdGguY10KICAgU3luYyBjdXJyZW50ICh0aHJlYWQtc2FmZSkgdmVyc2lvbiBvZiByZWFscGF0aC5jIGZyb20gT3BlbkJTRCAod2hpY2ggaXMKICAgaW4gdHVybiBiYXNlZCBvbiBGcmVlQlNEJ3MpLiAgb2sgZGptQAoKMjAwNTA4MDkKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQWxsb3cgLS13aXRoLWF1ZGl0PW5vLiBPSyBkdHVja2VyQAogICBSZXBvcnQgYnkgc2tlbGV0ZW4gQVQgc2hpbGxlc3QubmV0CgoyMDA1MDgwMwogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oXSBDaGVjayBmb3IgRUFJXyogZGVmaW5lcwogICBpbmRpdmlkdWFsbHkgYW5kIHVzZSBhIHZhbHVlIGxlc3MgbGlrZWx5IHRvIGNvbGxpZGUgd2l0aCByZWFsIHZhbHVlcyBmcm9tCiAgIG5ldGRiLmguICBGaXhlcyBjb21waWxlIHdhcm5pbmdzIG9uIEZyZWVCU0QgNS4zLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oXSBNQVhfSU5UIC0+IElOVF9NQVggc2luY2UgdGhlCiAgIGxhdHRlciBpcyBzcGVjaWZpZWQgaW4gdGhlIHN0YW5kYXJkLgoKMjAwNTA4MDIKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzI3IDEwOjM5OjAzCiAgICAgW3NjcC5jIGhvc3RmaWxlLmMgc2Z0cC1jbGllbnQuY10KICAgICBTaWxlbmNlIGJvZ3VzIC1XdW5pbml0aWFsaXplZCB3YXJuaW5nczsgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRW5hYmxlIC1XdW5pbml0aWFsaXplZCBieSBkZWZhdWx0IHdoZW4gY29tcGlsaW5nCiAgIHdpdGggZ2NjLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQWRkIGEgLS13aXRoLVdlcnJvciBvcHRpb24gdG8gY29uZmlndXJlIGZvcgogICBhZGRpbmcgLVdlcnJvciB0byBDRkxBR1Mgd2hlbiBhbGwgb2YgdGhlIGNvbmZpZ3VyZSB0ZXN0cyBhcmUgZG9uZS4gb2sgZGptQAoKMjAwNTA3MjYKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFVwZGF0ZSB6bGliIHdhcm5pbmcgbWVzc2FnZSB0b28sIHBvaW50ZWQgb3V0IGJ5CiAgIHRpbUAuCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzE5IDE1OjMyOjI2CiAgICAgW2F1dGgtcGFzc3dkLmNdCiAgICAgYXV0aF91c2VyY2hlY2soMykgY2FuIHJldHVybiBOVUxMLCBzbyBjaGVjayBmb3IgdGhhdC4gUmVwb3J0IGZyb20KICAgICBtcGVjaEAuIG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMjUgMTE6NTk6NDAKICAgICBba2V4LmMga2V4LmggbXlwcm9wb3NhbC5oIHBhY2tldC5jIHBhY2tldC5oIHNlcnZjb25mLmMgc2Vzc2lvbi5jXQogICAgIFtzc2hjb25uZWN0Mi5jIHNzaGQuYyBzc2hkX2NvbmZpZyBzc2hkX2NvbmZpZy41XQogICAgIGFkZCBhIG5ldyBjb21wcmVzc2lvbiBtZXRob2QgdGhhdCBkZWxheXMgY29tcHJlc3Npb24gdW50aWwgdGhlIHVzZXIKICAgICBoYXMgYmVlbiBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseSBhbmQgc2V0IGNvbXByZXNzaW9uIHRvICdkZWxheWVkJwogICAgIGZvciBzc2hkLgogICAgIHRoaXMgYnJlYWtzIG9sZGVyIG9wZW5zc2ggY2xpZW50cyAoPCAzLjUpIGlmIHRoZXkgaW5zaXN0IG9uCiAgICAgY29tcHJlc3Npb24sIHNvIHlvdSBoYXZlIHRvIHJlLWVuYWJsZSBjb21wcmVzc2lvbiBpbiBzc2hkX2NvbmZpZy4KICAgICBvayBkam1ACgoyMDA1MDcyNQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVXBkYXRlIHpsaWIgdmVyc2lvbiBjaGVjayBmb3IgQ0FOLTIwMDUtMjA5Ni4KCjIwMDUwNzE3Ci0gT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8xNiAwMTozNToyNAogICAgIFthdXRoMS5jIGNoYW5uZWxzLmMgY2lwaGVyLmMgY2xpZW50bG9vcC5jIGtleC5jIHNlc3Npb24uYyBzc2guY10KICAgICBbc3NoY29ubmVjdC5jXQogICAgIHNwYWNpbmcKIC0gKGRqbSkgW2Fjc3MuYyBhdXRoLXBhbS5jIGF1dGgtc2hhZG93LmMgYXV0aC1za2V5LmMgYXV0aDEuYyBjYW5vaG9zdC5jXQogICBbY2lwaGVyLWFjc3MuYyBsb2dpbnJlYy5jIHNzaC1yYW5kLWhlbHBlci5jIHNzaGQuY10gRml4IHdoaXRlc3BhY2UgYXQgRU9MIAogICBpbiBwb3J0YWJsZSB0b28gKCJwZXJsIC1wIC1pIC1lICdzL1xzKyQvXG4vJyAqLltjaF0iKQogLSAoZGptKSBbYXV0aC1wYW0uYyBzZnRwLmNdIHNwYWNlcyB2cy4gdGFicyBhdCBzdGFydCBvZiBsaW5lCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzE3IDA2OjQ5OjA0CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBzZXNzaW9uLmMgc2Vzc2lvbi5oXQogICAgIEZpeCBhIG51bWJlciBvZiBYMTEgZm9yd2FyZGluZyBjaGFubmVsIGxlYWtzOgogICAgIDEuIFJlZnVzZSBtdWx0aXBsZSBYMTEgZm9yd2FyZGluZyByZXF1ZXN0cyBvbiB0aGUgc2FtZSBzZXNzaW9uCiAgICAgMi4gQ2xlYW4gdXAgYWxsIGxpc3RlbmVycyBhZnRlciBhIHNpbmdsZV9jb25uZWN0aW9uIFgxMSBmb3J3YXJkLCBub3QganVzdAogICAgICAgIHRoZSBvbmUgdGhhdCBtYWRlIHRoZSBzaW5nbGUgY29ubmVjdGlvbgogICAgIDMuIERlc3Ryb3kgWDExIGxpc3RlbmVycyB3aGVuIHRoZSBzZXNzaW9uIG93bmluZyB0aGVtIGdvZXMgYXdheQogICAgIHRlc3RpbmcgYW5kIG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzE3IDA3OjE3OjU1CiAgICAgW2F1dGgtcmgtcnNhLmMgYXV0aC1yaG9zdHMuYyBhdXRoMi1jaGFsbC5jIGF1dGgyLWdzcy5jIGNoYW5uZWxzLmNdCiAgICAgW2NpcGhlci1jdHIuYyBnc3MtZ2Vuci5jIGdzcy1zZXJ2LmMga2V4LmMgbW9kdWxpLmMgcmVhZGNvbmYuY10KICAgICBbc2VydmVybG9vcC5jIHNlc3Npb24uYyBzZnRwLWNsaWVudC5jIHNmdHAuYyBzc2gtYWRkLmMgc3NoLWtleWdlbi5jXQogICAgIFtzc2hjb25uZWN0LmMgc3NoY29ubmVjdDIuY10KICAgICBrbmYgc2F5cyB0aGF0IGEgMm5kIGxldmVsIGluZGVudCBpcyBmb3VyIChub3QgdGhyZWUgb3IgZml2ZSkgc3BhY2VzCiAtKGRqbSkgW2F1ZGl0LmMgYXV0aDEuYyBhdXRoMi5jIGVudHJvcHkuYyBsb2dpbnJlYy5jIHNlcnZlcmxvb3AuY10KICBbc3NoLXJhbmQtaGVscGVyLmNdIGZpeCBwb3J0YWJsZSAybmQgbGV2ZWwgaW5kZW50cyBhdCA0IHNwYWNlcyB0b28KIC0gKGRqbSkgW21vbml0b3IuYyBtb25pdG9yX3dyYXAuY10gLVdzaWduLWNvbXBhcmUgZm9yIFBBTSBtb25pdG9yIGNhbGxzCiAKMjAwNTA3MTYKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBFbnN1cmUgdGhhdCBvbmx5IG9uZSBzaWRlIG9mIHRoZSBhdXRoZW50aWNhdGlvbgogICBzb2NrZXRwYWlyIHN0YXlzIG9wZW4gb24gaW4gYm90aCB0aGUgbW9uaXRvciBhbmQgUEFNIHByb2Nlc3MuICBQYXRjaCBmcm9tCiAgIEpvZXJnIFNvbm5lbmJlcmdlci4KCjIwMDUwNzE0CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8wNiAwOTozMzowNQogICAgIFtzc2guMV0KICAgICBjbGFyaWZ5IG1lYW5pbmcgb2Ygc3NoIC1iIDsgd2l0aCAmIG9rIGptY0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzA4IDA5OjI2OjE4CiAgICAgW21pc2MuY10KICAgICBNYWtlIGNvbW1lbnQgbWF0Y2ggY29kZTsgb2sgZGptQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8wOCAwOTo0MTozMwogICAgIFtjaGFubmVscy5oXQogICAgIHJhY2Ugd2hlbiBlZmQgZ2V0cyBjbG9zZWQgd2hpbGUgdGhlcmUgaXMgc3RpbGwgYnVmZmVyZWQgZGF0YToKICAgICBjaGFuZ2UgQ0hBTk5FTF9FRkRfT1VUUFVUX0FDVElWRSgpCiAgICAgICAgMSkgYy0+ZWZkIG11c3QgYWx3YXlzIGJlIHZhbGlkIEFORAogICAgICAgIDJhKSBubyBFT0YgaGFzIGJlZW4gc2VlbiBPUgogICAgICAgIDJiKSB0aGVyZSBpcyBidWZmZXJlZCBkYXRhCiAgICAgcmVwb3J0LCBpbml0aWFsIGZpeCBhbmQgdGVzdGluZyBDaHVjayBDcmFub3IKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA3LzA4IDEwOjIwOjQxCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBjaGFuZ2UgQmluZEFkZHJlc3MgdG8gbWF0Y2ggcmVjZW50IHNzaCAtYiBjaGFuZ2U7IHByb21wdGVkIGJ5IG1hcmt1c0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMDggMTI6NTM6MTAKICAgICBbc3NoX2NvbmZpZy41XQogICAgIG5ldyBzZW50ZW5jZSwgbmV3IGxpbmU7CiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8xNCAwNDowMDo0MwogICAgIFttaXNjLmhdCiAgICAgdXNlIF9fc2VudGluZWxfXyBhdHRyaWJ1dGU7IG9rIGRlcmFhZHRAIGRqbUAgbWFya3VzQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBkZWZpbmVzLmhdIERlZmluZSBfX3NlbnRpbmVsX18gdG8gbm90aGluZyBpZiB0aGUKICAgY29tcGlsZXIgZG9lc24ndCB1bmRlcnN0YW5kIGl0IHRvIHByZXZlbnQgd2FybmluZ3MuICBJZiBhbnkgbWFpbnN0cmVhbQogICBjb21waWxlciB2ZXJzaW9ucyBhY3F1aXJlIGl0IHdlIGNhbiB0ZXN0IGZvciB0aG9zZSB2ZXJzaW9ucy4gIEJhc2VkIG9uCiAgIGRpc2N1c3Npb24gd2l0aCBkam1ALgoKMjAwNTA3MDcKIC0gZHR1Y2tlciBbYXV0aC1rcmI1LmMgYXV0aC5oIGdzcy1zZXJ2LWtyYjUuY10gTW92ZSBLUkI1Q0NOQU1FIGdlbmVyYXRpb24gZm9yCiAgIHRoZSBNSVQgS2VyYmVyb3MgY29kZSBwYXRoIGludG8gYSBjb21tb24gZnVuY3Rpb24gYW5kIGV4cGFuZCBta3N0ZW1wCiAgIHRlbXBsYXRlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZiBPcGVuU1NILiAgRnJvbSBzeHcgYXQKICAgaW5mLmVkLmFjLnVrLCBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1rcmI1LmNdIFRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgc25wcmludGYgd2lsbCBzZXQgZXJybm8KICAgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGJ1ZmZlciBpcyBpbnN1ZmZpY2llbnQsIHNvIGFsd2F5cyByZXR1cm4gRU5PTUVNLgogICBBbHNvIHBvaW50ZWQgb3V0IGJ5IHN4dyBhdCBpbmYuZWQuYWMudWsuCiAtIChkdHVja2VyKSBbYWNjb25maWcuaCBhdXRoLWtyYjUuYyBjb25maWd1cmUuYWMgZ3NzLXNlcnYta3JiNS5jXSBSZW1vdmUKICAgY2FsbHMgdG8ga3JiNV9pbml0X2V0cywgd2hpY2ggaGFzIG5vdCBiZWVuIHJlcXVpcmVkIHNpbmNlIGtyYi0xLjEueCBhbmQKICAgbW9zdCBLZXJiZXJvcyB2ZXJzaW9ucyBubyBsb25nZXIgZXhwb3J0IGluIHRoZWlyIHB1YmxpYyBBUEkuICBGcm9tIHN4dwogICBhdCBpbmYuZWQuYWMudWssIG9rIGRqbUAKCjIwMDUwNzA2CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDcvMDEgMTM6MTk6NDcKICAgICBbY2hhbm5lbHMuY10KICAgICBkb24ndCBmcmVlKCkgaWYgZ2V0YWRkcmluZm8oKSBmYWlsczsgcmVwb3J0IG1wZWNoQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8wNCAwMDo1ODo0MwogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBjbGllbnRsb29wLmggbWlzYy5jIG1pc2MuaCBzc2guYyBzc2hfY29uZmlnLjVdCiAgICAgaW1wbGVtZW50IHN1cHBvcnQgZm9yIFgxMSBhbmQgYWdlbnQgZm9yd2FyZGluZyBvdmVyIG11bHRpcGxleCBzbGF2ZQogICAgIGNvbm5lY3Rpb25zLiBCZWNhdXNlIG9mIHByb3RvY29sIGxpbWl0YXRpb25zLCB0aGUgc2xhdmUgY29ubmVjdGlvbnMgaW5oZXJpdAogICAgIHRoZSBtYXN0ZXIncyBESVNQTEFZIGFuZCBTU0hfQVVUSF9TT0NLIHJhdGhlciB0aGFuIGRpc3RpbmN0bHkgZm9yd2FyZGluZwogICAgIHRoZWlyIG93bi4KICAgICBvayBkdHVja2VyQCAicHV0IGl0IGluIiBkZXJhYWR0QAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8wNCAxMToyOTo1MQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgZml4IFhyIGFuZCBhIGxpdHRsZSBncmFtbWFyOwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNy8wNCAxNDowNDoxMQogICAgIFtjaGFubmVscy5jXQogICAgIGRvbid0IGZvcmdldCB0byBzZXQgeDExX3NhdmVkX2Rpc3BsYXkKCjIwMDUwNjI2CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDYvMTcgMjI6NTM6NDcKICAgICBbc3NoLmMgc3NoY29ubmVjdC5jXQogICAgIEZpeCBDb250cm9sUGF0aCdzICVwIGV4cGFuZGluZyB0byAiMCIgZm9yIGEgZGVmYXVsdCBwb3J0LAogICAgIHNwb3R0ZWQgZHdtdzIgQVQgaW5mcmFkZWFkLm9yZzsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8xOCAwNDozMDozNgogICAgIFtzc2guYyBzc2hfY29uZmlnLjVdCiAgICAgYWxsb3cgQ29udHJvbFBhdGg9bm9uZSwgcGF0Y2ggZnJvbSBkd213MiBBVCBpbmZyYWRlYWQub3JnOyBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8yNSAyMjo0Nzo0OQogICAgIFtzc2guY10KICAgICBkbyB0aGUgZGVmYXVsdCBwb3J0IGZpbGxpbmcgY29kZSBhIGZldyBsaW5lcyBlYXJsaWVyLCBzbyBpdCByZWFsbHkgCiAgICAgZG9lcyBmaXggJXAKCjIwMDUwNjE4CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMjAgMTI6NTc6MDE7CiAgIFthdXRoMS5jXSBzcGxpdCBwcm90b2NvbCAxIGF1dGggbWV0aG9kcyBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucywgbWFrZXMgCiAgIGF1dGhsb29wIG11Y2ggbW9yZSByZWFkYWJsZTsgZml4ZXMgYW5kIG9rIG1hcmt1c0AgKHBvcnRhYmxlIG9rICYgCiAgIHBvbGlzaCBkdHVja2VyQCkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDYvMTcgMDI6NDQ6MzMKICAgW2F1dGgxLmNdIG1ha2UgdGhpcyAtV3NpZ24tY29tcGFyZSBjbGVhbjsgb2sgYXZzbUAgbWFya3VzQAogLSAoZGptKSBbbG9naW5yZWMuYyBzc2gtcmFuZC1oZWxwZXIuY10gRml4IC1Xc2lnbi1jb21wYXJlIGZvciBwb3J0YWJsZSwKICAgdGVzdGVkIGFuZCBmaXhlcyB0aW1ACgoyMDA1MDYxNwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzE2IDAzOjM4OjM2CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmMgY2xpZW50bG9vcC5oIHNzaC5jXQogICAgIG1vdmUgeDExX2dldF9wcm90byBmcm9tIHNzaC5jIHRvIGNsaWVudGxvb3AuYywgdG8gbWFrZSBtdWxpcGxleGVkIHhmd2QKICAgICBlYXNpZXIgbGF0ZXI7IG9rIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzE2IDA4OjAwOjAwCiAgICAgW2Nhbm9ob3N0LmMgY2hhbm5lbHMuYyBzc2hkLmNdCiAgICAgZG9uJ3QgZXhpdCBpZiBnZXRwZWVybmFtZSBmYWlscyBmb3IgZm9yd2FyZGVkIHBvcnRzOyBidWd6aWxsYSAjMTA1NDsKICAgICBvayBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDYvMTcgMDI6NDQ6MzMKICAgICBbYXV0aC1yc2EuYyBhdXRoLmMgYXV0aDEuYyBhdXRoMi1jaGFsbC5jIGF1dGgyLWdzcy5jIGF1dGhmZC5jIGF1dGhmaWxlLmNdCiAgICAgW2J1ZmF1eC5jIGNhbm9ob3N0LmMgY2hhbm5lbHMuYyBjaXBoZXIuYyBjbGllbnRsb29wLmMgZG5zLmMgZ3NzLXNlcnYuY10KICAgICBba2V4LmMga2V4Lmgga2V5LmMgbWFjLmMgbWF0Y2guYyBtaXNjLmMgcGFja2V0LmMgcGFja2V0Lmggc2NwLmNdCiAgICAgW3NlcnZjb25mLmMgc2Vzc2lvbi5jIHNlc3Npb24uaCBzZnRwLWNsaWVudC5jIHNmdHAtc2VydmVyLmMgc2Z0cC5jXQogICAgIFtzc2gta2V5c2Nhbi5jIHNzaC1yc2EuYyBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuYyBzc2hjb25uZWN0Mi5jIHNzaGQuY10KICAgICBtYWtlIHRoaXMgLVdzaWduLWNvbXBhcmUgY2xlYW47IG9rIGF2c21AIG1hcmt1c0AKICAgICBOQi4gYXV0aDEuYyBjaGFuZ2VzIG5vdCBjb21taXR0ZWQgeWV0IChjb25mbGljdHMgd2l0aCB1bmNvbW1pdHRlZCBzeW5jKQogICAgIE5CMi4gbW9yZSB3b3JrIG1heSBiZSBuZWVkZWQgdG8gbWFrZSBwb3J0YWJsZSBXc2lnbi1jb21wYXJlIGNsZWFuCiAtIChkdHVja2VyKSBbY2lwaGVyLmMgb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaAogICBvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC5jXSBvbmx5IGluY2x1ZGUgb3BlbnNzbCBjb21wYXQgc3R1ZmYgd2hlcmUKICAgaXQncyBuZWVkZWQgYXMgaXQgY2FuIGNhdXNlIGNvbmZsaWN0cyBlbHNld2hlcmUgKGVnIHhjcnlwdC5jKS4gIEZvdW5kIGJ5CiAgIGFuZCBvayB0aW1ACgoyMDA1MDYxNgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gamFyZWR5QGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzA3IDEzOjI1OjIzCiAgICAgW3Byb2dyZXNzbWV0ZXIuY10KICAgICBjYXRjaCBTSUdXSU5DSCBhbmQgcmVzaXplIHByb2dyZXNzIG1ldGVyIGFjY29yZGluZ2x5OyBvayBtYXJrdXMgZHR1Y2tlcgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8wNiAxMToyMDozNgogICAgIFthdXRoLmMgYXV0aC5oIG1pc2MuYyBtaXNjLmggc3NoLmMgc3NoX2NvbmZpZy41IHNzaGNvbm5lY3QuY10KICAgICBpbnRyb2R1Y2UgYSBnZW5lcmljICVmb28gZXhwYW5zaW9uIGZ1bmN0aW9uLiByZXBsYWNlIGV4aXN0aW5nICUgZXhwYW5zaW9uIAogICAgIGFuZCBhZGQgZXhwYW5zaW9uIHRvIENvbnRyb2xQYXRoOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA2LzA4IDAzOjUwOjAwCiAgICAgW3NzaC1rZXlnZW4uMSBzc2gta2V5Z2VuLmMgc3NoZC44XQogICAgIGluY3JlYXNlIGRlZmF1bHQgcnNhL2RzYSBrZXkgbGVuZ3RoIGZyb20gMTAyNCB0byAyMDQ4IGJpdHM7CiAgICAgb2sgbWFya3VzQCBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8wOCAxMToyNTowOQogICAgIFtjbGllbnRsb29wLmMgcmVhZGNvbmYuYyByZWFkY29uZi5oIHNzaC5jIHNzaF9jb25maWcuNV0KICAgICBhZGQgQ29udHJvbE1hc3Rlcj1hdXRvL2F1dG9hc2sgb3B0aW9ucyB0byBzdXBwb3J0IG9wcG9ydHVuaXN0aWMKICAgICBtdWx0aXBsZXhpbmc7IHRlc3RlZCBhdnNtQCBhbmQgamFrb2JALCBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNi8wOSAxMzo0Mzo0OQogICAgIFtjaXBoZXIuY10KICAgICBDb3JyZWN0bHkgaW5pdGlhbGl6ZSBlbmQgb2YgYXJyYXkgc2VudGluZWw7IG9rIGRqbUAKICAgICAoSWQgc3luYyBvbmx5LCBjaGFuZ2UgYWxyZWFkeSBpbiBwb3J0YWJsZSkKCjIwMDUwNjA5CiAtIChkdHVja2VyKSBbY2lwaGVyLmMgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4KICAgb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaCBvcGVuYnNkLWNvbXBhdC9vcGVuc3NsLWNvbXBhdC57YyxofV0KICAgTW92ZSBjb21wYXRpYmlsaXR5IGNvZGUgZm9yIHN1cHBvcnRpbmcgb2xkZXIgT3BlblNTTCB2ZXJzaW9ucyB0byB0aGUKICAgY29tcGF0IGxheWVyLiAgU3VnZ2VzdGVkIGJ5IGFuZCAibm8gb2JqZWN0aW9uIiBkam1ACgoyMDA1MDYwNwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQ29udGludWUgdGhlIGh1bnQgZm9yIExMT05HX01JTiBhbmQgTExPTkdfTUFYOgogICBpbiB0b2RheSdzIGVwaXNvZGUgd2UgYXR0ZW1wdCB0byBjb2F4IGl0IGZyb20gbGltaXRzLmggd2hlcmUgaXQgbWF5IGJlCiAgIGhpZGluZywgZmFpbGluZyB0aGF0IHdlIHRha2UgdGhlIERJWSBhcHByb2FjaC4gIFRlc3RlZCBieSB0aW1ACgoyMDA1MDYwMwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gT25seSB0cnkgZ2NjIC1zdGQ9Z251OTkgaWYgTExPTkdfTUFYIGlzbid0CiAgIGRlZmluZWQsIGFuZCBjaGVjayB0aGF0IGl0IGhlbHBzIGJlZm9yZSBrZWVwaW5nIGl0IGluIENGTEFHUy4gIFNvbWUgb2xkCiAgIGdjYydzIGRvbid0IHNldCBhbiBlcnJvciBjb2RlIHdoZW4gZW5jb3VudGVyaW5nIGFuIHVua25vd24gdmFsdWUgaW4gLXN0ZC4KICAgRm91bmQgYW5kIHRlc3RlZCBieSB0aW1ALgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUG9pbnQgY29uZmlndXJlJ3MgcmVwb3J0aW5nIGFkZHJlc3MgYXQgdGhlCiAgIG9wZW5zc2gtdW5peC1kZXYgbGlzdC4gIG9rIHRpbUAgZGptQAoKMjAwNTA2MDIKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gU29tZSBwbGF0Zm9ybXMgbmVlZCBzeXMvdHlwZXMuaCBmb3IgYXJwYS9uYW1lc2VyLmguCiAgIFRha2UgQUNfQ0hFQ0tfSEVBREVSUyB0ZXN0IG91dCBvZiB1bHRyaXggc2VjdGlvbi4gSXQgY2F1c2VkIG90aGVyIHBsYXRmb3JtcwogICB0byBza2lwIGJ1aWx0aW4gc3RhbmRhcmQgaW5jbHVkZXMgdGVzdHMuIChmaXJzdCBBQ19DSEVDS19IRUFERVJTIHRlc3QKICAgbXVzdCBiZSBydW4gb24gYWxsIHBsYXRmb3JtcykgQWRkIG1pc3NpbmcgOzsgdG8gY2FzZSBzdGF0ZW1lbnQuIE9LIGR0dWNrZXJACgoyMDA1MDYwMQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gTG9vayBmb3IgX2dldHNob3J0IGFuZCBfZ2V0bG9uZyBpbgogICBhcnBhL25hbWVzZXIuaC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvTWFrZWZpbGUuaW4gb3BlbmJzZC1jb21wYXQvc3RydG9sbC5jXQogICBBZGQgc3RydG9sbCB0byB0aGUgY29tcGF0IGxpYnJhcnksIGZyb20gT3BlbkJTRC4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBhdnNtQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzI2IDAyOjA4OjA1CiAgICAgW3NjcC5jXQogICAgIElmIGNvcHlpbmcgbXVsdGlwbGUgZmlsZXMgdG8gYSB0YXJnZXQgZmlsZSAod2hpY2ggbm9ybWFsbHkgZmFpbHMsIGFzIGl0CiAgICAgbXVzdCBiZSBhIHRhcmdldCBkaXJlY3RvcnkpLCBraWxsIHRoZSBzcGF3bmVkIHNzaCBjaGlsZCBiZWZvcmUgZXhpdGluZy4KICAgICBUaGlzIHN0b3BzIGl0IHRyeWluZyB0byBhdXRoZW50aWNhdGUgYW5kIHNwZXdpbmcgbG90cyBvZiBvdXRwdXQuCiAgICAgZGVyYWFkdEAgb2sKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzI2IDA5OjA4OjEyCiAgICAgW3NzaC1rZXlnZW4uY10KICAgICB1aW50MzJfdCAtPiB1X2ludDMyX3QgZm9yIGNvbnNpc3RlbmN5OyBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzI3IDA4OjMwOjM3CiAgICAgW3NzaC5jXQogICAgIGZpeCAtTyBmb3IgY2FzZXMgd2hlcmUgbm8gQ29udHJvbFBhdGggaGFzIGJlZW4gc3BlY2lmaWVkIG9yIHNvY2tldCBhdAogICAgIENvbnRyb2xQYXRoIGlzIG5vdCBjb250YWN0YWJsZTsgc3BvdHRlZCBieSBhbmQgb2sgYXZzbUAKIC0gKHRpbSkgW2NvbmZpZy5ndWVzcyBjb25maWcuc3ViXSBVcGRhdGUgdG8gJzIwMDUtMDUtMjcnIHZlcnNpb24uCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIHNldCBURVNUX1NIRUxMIGZvciBPcGVuU2VydmVyIDYKCjIwMDUwNTMxCiAtIChkdHVja2VyKSBbY29udHJpYi9haXgvcGFtLmNvbmZdIENvcnJlY3QgY29tbWVudHMuICBGcm9tIGRhdmlkbCBhdAogICB2aW50ZWxhLmNvbS4KIC0gKGR0dWNrZXIpIFttZG9jMm1hbi5hd2tdIFRlYWNoIGl0IHRvIHVuZGVyc3RhbmQgLk94LgoKMjAwNTA1MzAKIC0gKGR0dWNrZXIpIFtSRUFETUVdIExpbmsgdG8gbmV3IHJlbGVhc2Ugbm90ZXMuICBCZXRlciBsYXRlIHRoYW4gbmV2ZXIuLi4KCjIwMDUwNTI5CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gQnVnICMxMDQ2OiBBSVggNS4zIGV4cGVjdHMgdGhlCiAgIGFyZ3VtZW50IHRvIHBhc3N3ZGV4cGlyZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gTlVMTC4gIFN1Z2dlc3RlZCBieSB0aW1ACiAgIFdoaWxlIGF0IGl0LCBpbml0aWFsaXplIHRoZSBvdGhlciBhcmd1bWVudHMgdG8gYXV0aCBmdW5jdGlvbnMgaW4gY2FzZSB0aGV5CiAgIGV2ZXIgYWNxdWlyZSB0aGlzIGJlaGF2aW91ci4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jXSBXaGl0ZXNwYWNlIGNsZWFudXBzIHdoaWxlIHRoZXJlLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmNdIE1pbm9yIGNvcnJlY3Rpb24gdG8gZGVidWcgbWVzc2FnZSwKICAgc3BvdHRlZCBieSB0aW1ALgoKMjAwNTA1MjgKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEZvciBBQ19DSEVDS19IRUFERVJTKCkgYW5kIEFDX0NIRUNLX0ZVTkNTKCkgaGF2ZQogICBvbmUgZW50cnkgcGVyIGxpbmUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gbWVyZ2UgY2hhbmdlcy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIHN0cnNlcCgpIG1heSBiZSBkZWZpbmVkIGluIHN0cmluZy5oLCBzbyBjaGVjawogICBmb3IgaXRzIHByZXNlbmNlIGFuZCBpbmNsdWRlIGl0IGluIHRoZSBzdHJzZXAgY2hlY2suCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBnZXRwZ3JwIG1heSBiZSBkZWZpbmVkIGluIHVuaXN0ZC5oLCBzbyBjaGVjayBmb3IKICAgaXRzIHByZXNlbmNlIGJlZm9yZSBkb2luZyBBQ19GVU5DX0dFVFBHUlAuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBNZXJnZSBIUC1VWCBibG9ja3MgaW50byBhIGNvbW1vbiBibG9jayB3aXRoIG1pbm9yCiAgIHZlcnNpb24tc3BlY2lmaWMgdmFyaWF0aW9ucyBhcyByZXF1aXJlZC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oXSBVc2UgdGhlIEhBVkVfREVDTF8qIGRlZmluaXRpb25zIGFzCiAgIHBlciB0aGUgYXV0b2NvbmYgbWFuIHBhZ2UuICBDb25maWd1cmUgc2hvdWxkIGFsd2F5cyBkZWZpbmUgdGhlbSBidXQgaXQKICAgZG9lc24ndCBodXJ0IHRvIGNoZWNrLgoKMjAwNTA1MjcKIC0gKGRqbSkgW2RlZmluZXMuaF0gVXNlIG91ciByZWFscGF0aCBpZiB3ZSBoYXZlIHRvIGRlZmluZSBQQVRIX01BWCwgc3BvdHRlZCBieQogICBEYXZpZCBMZWFjaDsgb2sgZHR1Y2tlckAKIC0gKGR0dWNrZXIpIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBkZWZpbmVzLmggaW5jbHVkZXMuaCBzc2hwdHkuYwogICBvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jXSBBZGQgc3VwcG9ydCBmb3IgVWx0cml4LiAgTm8sIHRoYXQncyBub3QgYSB0eXBvLgogICBSZXF1aXJlZCBjaGFuZ2VzIGZyb20gQmVybmhhcmQgU2ltb24sIGludGVncmF0ZWQgYnkgbWUuICBvayBkam1ACgoyMDA1MDUyNQogLSAoZGptKSBbbXBhdXguYyBtcGF1eC5oIE1ha2VmaWxlLmluXSBSZW1vdmUgb2xkIG1wYXV4LltjaF0gY29kZSwgaXQgaGFzIG5vdCAKICAgYmVlbiB1c2VkIGZvciBhIHdoaWxlCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBvdHRvQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzA1IDEzOjQ1OjMxCiAgICAgW3NzaC1rZXlnZW4uY10KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDQvMDYgMDk6NDM6NTkKICAgICBbc3NoZC5jXQogICAgIGF2b2lkIGhhcm1sZXNzIGxvZ3NwYW0gYnkgbm90IHBlcmZvcm1pbmcgc2V0c29ja29wdCgpIG9uIG5vbi1zb2NrZXQ7CiAgICAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDQvMDYgMTI6MjY6MDYKICAgICBbc3NoLmNdCiAgICAgRml4IGRlYnVnIGNhbGwgZm9yIHBvcnQgZm9yd2FyZHM7IHBhdGNoIGZyb20gcGV0ZSBhdCBzZWViZXlvbmQuY29tLAogICAgIG9rIGRqbUAgKElEIHN5bmMgb25seSAtIGNoYW5nZSBhbHJlYWR5IGluIHBvcnRhYmxlKQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8wOSAwNDozMjo1NAogICAgIFttaXNjLmMgbWlzYy5oIHRpbGRleHBhbmQuYyBNYWtlZmlsZS5pbl0KICAgICByZXBsYWNlIHRpbGRlX2V4cGFuZF9maWxlbmFtZSB3aXRoIGEgc2ltcGxlciBpbXBsZW1lbnRhdGlvbiwgYWhlYWQgb2YKICAgICBtb3JlIHdoYWNraW5nOyBvayBkZXJhYWR0QAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8xNCAxMjozMDozMAogICAgIFtzc2guMV0KICAgICBhcmcgdG8gLWIgaXMgYW4gYWRkcmVzcywgbm90IGlmX25hbWU7CiAgICAgb2sgbWFya3VzQAogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzIwIDEwOjA1OjQ1CiAgICAgW2Rucy5jXQogICAgIGRvIG5vdCB0cnkgdG8gbG9vayB1cCBTU0hGUCBmb3IgbnVtZXJpY2FsIGhvc3RuYW1lLiBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzIxIDA2OjE3OjUwCiAgICAgW3NzaC1hZGQuMSBzc2gtYWdlbnQuMSBzc2gta2V5Z2VuLjEgc3NoLjEgc3NoX2NvbmZpZy41IHNzaGQuOF0KICAgICBbc3NoZF9jb25maWcuNV0gT3BlblNTSCBkb2Vzbid0IGV2ZXIgbG9vayBhdCB0aGUgJEhPTUUgZW52aXJvbm1lbnQKICAgICB2YXJpYWJsZSwgc28gZG9uJ3Qgc2F5IHRoYXQgd2UgZG8gKGJ6ICM2MjMpOyBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8yMSAxMTo0NzoxOQogICAgIFtzc2guY10KICAgICBkb24ndCBhbGxvY2F0ZSBhIHB0eSB3aGVuIC1uIGZsYWcgKC9kZXYvbnVsbCBzdGRpbikgaXMgc2V0LCBwYXRjaCBmcm9tCiAgICAgaWduYXNpLnJvY2EgQVQgZnVqaXRzdS1zaWVtZW5zLmNvbSAoYnogIzgyOSk7IG9rIGR0dWNrZXJACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8yMyAyMzo0Mzo0NwogICAgIFtyZWFkcGFzcy5jXQogICAgIEFkZCBkZWJ1ZyBtZXNzYWdlIGlmIHJlYWRfcGFzc3BocmFzZSBjYW4ndCBvcGVuIC9kZXYvdHR5OyBieiAjNDcxOwogICAgIG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDQvMjYgMTI6NTk6MDIKICAgICBbc2Z0cC1jbGllbnQuaF0KICAgICBzcGVsbGluZyBjb3JyZWN0aW9uIGluIGNvbW1lbnQgZnJvbSB3aXpAbmV0YnNkOwogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA0LzI2IDEzOjA4OjM3CiAgICAgW3NzaC5jIHNzaF9jb25maWcuNV0KICAgICBmYWxsYmFjayBncmFjZWZ1bGx5IGlmIGNsaWVudCBjYW5ub3QgY29ubmVjdCB0byBDb250cm9sUGF0aC4gb2sgZGptQAogICAtIG1vcml0ekBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8yOCAxMDoxNzo1NgogICAgIFtwcm9ncmVzc21ldGVyLmMgc3NoLWtleXNjYW4uY10KICAgICBhZGQgc25wcmludGYgY2hlY2tzLiBvayBkam1AIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMDIgMjE6MTM6MjIKICAgICBbcmVhZHBhc3MuY10KICAgICBtaXNzaW5nIHt9CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzEwIDEwOjI4OjExCiAgICAgW3NzaC5jXQogICAgIHByaW50IG5pY2UgZXJyb3IgbWVzc2FnZSBmb3IgRUFERFJJTlVTRSBhcyB3ZWxsIChJRCBzeW5jIG9ubHkpCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzEwIDEwOjMwOjQzCiAgICAgW3NzaC5jXQogICAgIHJlcG9ydCByZWFsIGVycm9ycyBvbiBmYWxsYmFjayBmcm9tIENvbnRyb2xNYXN0ZXI9bm8gdG8gbm9ybWFsIGNvbm5lY3QKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDUvMTYgMTU6MzA6NTEKICAgICBbcmVhZGNvbmYuYyBzZXJ2Y29uZi5jXQogICAgIGNoZWNrIHJldHVybiB2YWx1ZSBmcm9tIHN0cmRlbGltKCkgZm9yIE5VTEwgKEFkZHJlc3NGYW1pbHkpOyBtcGVjaAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNS8xOSAwMjozOTo1NQogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHNvcnQgY29uZmlnIG9wdGlvbnMsIGZyb20gZ3J1bmsgQVQgcGVzdGlsZW56Lm9yZzsgb2sgam1jQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNS8xOSAwMjo0MDo1MgogICAgIFtzc2hkX2NvbmZpZ10KICAgICB3aGl0ZXNwYWNlIG5pdCwgZnJvbSBncnVuayBBVCBwZXN0aWxlbnoub3JnCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzE5IDAyOjQyOjI2CiAgICAgW2luY2x1ZGVzLmhdCiAgICAgZml4IGNhc3QsIGZyb20gZ3J1bmsgQVQgcGVzdGlsZW56Lm9yZwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNS8yMCAxMDo1MDo1NQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgZ2l2ZSBhIFByb3h5Q29tbWFuZCBleGFtcGxlIHVzaW5nIG5jKDEpLCB3aXRoIGFuZCBvayBqbWNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzIwIDExOjIzOjMyCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBvb3BzIC0gYXJ0aWNsZSBhbmQgc3BhY2luZzsKICAgLSBhdnNtQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzIzIDIyOjQ0OjAxCiAgICAgW21vZHVsaS5jIHNzaC1rZXlnZW4uY10KICAgICAtIHJlbW92ZXMgc2lnbmVkL3Vuc2lnbmVkIGNvbXBhcmlzb25zIGluIG1vZHVsaSBnZW5lcmF0aW9uCiAgICAgLSB1c2Ugc3RydG9udW0gaW5zdGVhZCBvZiBhdG9pIHdoZXJlIGl0cyBlYXNpZXIKICAgICAtIGNoZWNrIHNvbWUgc3RybGNweSBvdmVyZmxvdyBhbmQgZmF0YWwgaW5zdGVhZCBvZiB0cnVuY2F0ZQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNS8yMyAyMzozMjo0NgogICAgIFtjaXBoZXIuYyBteXByb3Bvc2FsLmggc3NoLjEgc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgYWRkIHN1cHBvcnQgZm9yIGRyYWZ0LWhhcnJpcy1zc2gtYXJjZm91ci1maXhlcy0wMiBpbXByb3ZlZCBhcmNmb3VyIG1vZGVzOwogICAgIG9rIG1hcmt1c0AKICAgLSBhdnNtQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzI0IDAyOjA1OjA5CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBzb21lIHN0eWxlIG5pdHMgZnJvbSBkbWlsbGVyQCwgYW5kIHVzZSBhIGZhdGFsKCkgaW5zdGVhZCBvZiBhIHByaW50ZigpL2V4aXQKICAgLSBhdnNtQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzA1LzI0IDE3OjMyOjQ0CiAgICAgW2F0b21pY2lvLmMgYXRvbWljaW8uaCBhdXRoZmQuYyBtb25pdG9yX3dyYXAuYyBtc2cuYyBzY3AuYyBzZnRwLWNsaWVudC5jXQogICAgIFtzc2gta2V5c2Nhbi5jIHNzaGNvbm5lY3QuY10KICAgICBTd2l0Y2ggYXRvbWljaW8gdG8gdXNlIGEgc2ltcGxlciBpbnRlcmZhY2U7IGl0IG5vdyByZXR1cm5zIGEgc2l6ZV90CiAgICAgKGNvbnRhaW5pbmcgbnVtYmVyIG9mIGJ5dGVzIHJlYWQvd3JpdHRlbiksIGFuZCBpbmRpY2F0ZXMgZXJyb3IgYnkKICAgICByZXR1cm5pbmcgMC4gIEVPRiBpcyBzaWduYWxsZWQgYnkgZXJybm89PUVQSVBFLgogICAgIFR5cGljYWwgdXNlIG5vdyBiZWNvbWVzOgoKICAgICBpZiAoYXRvbWljaW8ocmVhZCwgLi4uLCBsZW4pICE9IGxlbikKICAgICAgICAgICAgIGVycigxLCJyZWFkIik7CgogICAgIG9rIGRlcmFhZHRALCBjbG9kZXJALCBkam1ACiAtIChkdHVja2VyKSBbcmVncmVzcy9yZWV4ZWMuc2hdIEFkZCAke0VYRUVYVH0gc28gdGhpcyB0ZXN0IGFsc28gd29ya3Mgb24KICAgQ3lnd2luLgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEJ1ZyAjMTAzMzogRml4IHdhcm5pbmdzIGJ1aWxkaW5nIHdpdGggUEFNIG9uIExpbnV4OgogICB3YXJuaW5nOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMKICAgd2FybmluZzogcGFzc2luZyBhcmcgMyBvZiBgcGFtX2dldF9pdGVtJyBmcm9tIGluY29tcGF0aWJsZSBwb2ludGVyIHR5cGUKICAgVGhlIHR5cGUtcHVubmVkIHBvaW50ZXIgZml4IGlzIGJhc2VkIG9uIGEgcGF0Y2ggZnJvbSBTdVNFJ3MgcnBtLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBCdWcgIzEwMzM6IFByb3ZpZGUKICAgdGVtcGxhdGVzIGZvciBfZ2V0c2hvcnQgYW5kIF9nZXRsb25nIGlmIG1pc3NpbmcgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncwogICBvbiBMaW51eC4KIC0gKGRqbSkgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbl0KICAgICAgICAgW29wZW5ic2QtY29tcGF0L29wZW5ic2QtY29tcGF0Lmggb3BlbmJzZC1jb21wYXQvc3RydG9udW0uY10KICAgICAgICAgQWRkIHN0cnRvbnVtKDMpIGZyb20gT3BlbkJTRCBsaWJjLCBuZXcgY29kZSBuZWVkcyBpdC4gCiAgICAgICAgIFVuZm9ydHVuYXRlbHkgTGludXggZm9yY2VzIHVzIHRvIGRvIGEgYml6YXJyZSBkYW5jZSB3aXRoIGNvbXBpbGVyCiAgICAgICAgIG9wdGlvbnMgdG8gZ2V0IExMT05HX01JTi9NQVg7IFNwb3R0ZWQgYnkgYW5kIG9rIGR0dWNrZXJAIAoKMjAwNTA1MjQKIC0gKGRqbSkgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjXQogICAgICAgICBbY29udHJpYi9zdXNlL29wZW5zc2guc3BlY10gVXBkYXRlIHNwZWMgZmlsZSB2ZXJzaW9ucyB0byA0LjFwMQogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIFNpbmNlIHBlb3BsZSBkb24ndCBzZWVtIHRvIGJlIGdldHRpbmcgdGhlIG1lc3NhZ2UKICAgdGhhdCBVU0VfUE9TSVhfVEhSRUFEUyBpcyB1bnN1cHBvcnRlZCwgbm90IHJlY29tbWVuZGVkIGFuZCBnZW5lcmFsbHkgYSBiYWQKICAgaWRlYSwgaXQgaXMgbm93IGtub3duIGFzIFVOU1VQUE9SVEVEX1BPU0lYX1RIUkVBRFNfSEFDSy4gIEF0dGVtcHRpbmcgdG8gdXNlCiAgIFVTRV9QT1NJWF9USFJFQURTIHdpbGwgbm93IGdlbmVyYXRlIGFuIGVycm9yIHNvIHdlIGRvbid0IHNpbGVudGx5IGNoYW5nZQogICBiZWhhdmlvdXIuICBvayBkam1ACiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvYnNkLWN5Z3dpbl91dGlsLmNdIEVuc3VyZSBzdWZmaWNpZW50IG1lbW9yeQogICBhbGxvY2F0aW9uIHdoZW4gcmV0cmlldmluZyBjb3JlIFdpbmRvd3MgZW52aXJvbm1lbnQuICBBZGQgQ1lHV0lOIHZhcmlhYmxlCiAgIHRvIHByb3BhZ2F0ZWQgdmFyaWFibGVzLiAgUGF0Y2ggZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLCBvayBkam1ACiAtIFJlbGVhc2UgNC4xcDEKCjIwMDUwNTI0CiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9yZWFkcGFzc3BocmFzZS5jXSBieiAjOTUwOiBSZXRyeSB0Y3NldGF0dHIgdG8gZW5zdXJlCiAgIHRlcm1pbmFsIG1vZGVzIGFyZSByZXNldCBjb3JyZWN0bHkuIEZpeCBmcm9tIHBlYWsgQVQgYXJnby50cm9qYS5tZmYuY3VuaS5jejsKICAgImxvb2tzIG9rIiBkdHVja2VyQAoKMjAwNTA1MTIKIC0gKHRpbSkgW2J1aWxkcGtnLnNoLmluXSBtaXNzaW5nICR7UEtHX0lOU1RBTExfUk9PVH0gaW4gaW5pdCBzY3JpcHQKICAgaGFyZCBsaW5rIHNlY3Rpb24uIEJ1ZyAxMDM4LgoKMjAwNTA1MDkKIC0gKGR0dWNrZXIpIFtjb250cmliL2N5Z3dpbi9zc2gtaG9zdC1jb25maWddIEFkZCBhIHRlc3QgYW5kIHdhcm5pbmcgZm9yIGEKICAgdXNlci1tb2RlIG1vdW50cyBpbiBDeWd3aW4gaW5zdGFsbGF0aW9uLiAgUGF0Y2ggZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgoKMjAwNTA1MDQKIC0gKGRqbSkgW3NzaC5jXSBzb21lIHN5c3RlbXMgcmV0dXJuIEVBRERSSU5VU0Ugb24gYSBiaW5kIHRvIGFuIGFscmVhZHktdXNlZAogICB1bml4IGRvbWFpbiBzb2NrZXQsIHNvIGNhdGNoIHRoYXQgdG9vOyBmcm9tIGpha29iQCBvayBkdHVja2VyQAoKMjAwNTA1MDMKIC0gKGR0dWNrZXIpIFtjYW5vaG9zdC5jXSBub3JtYWxpc2Ugc29ja2V0IGFkZHJlc3NlcyByZXR1cm5lZCBieQogICBnZXRfcmVtb3RlX2hvc3RuYW1lKCkuICBUaGlzIG1lYW5zIHRoYXQgSVB2NCBhZGRyZXNzZXMgaW4gbG9nIG1lc3NhZ2VzCiAgIG9uIElQdjYgZW5hYmxlZCBtYWNoaW5lcyB3aWxsIG5vIGxvbmdlciBiZSBwcmVmaXhlZCBieSAiOjpmZmZmOiIgYW5kCiAgIEFsbG93VXNlcnMsIERlbnlVc2VycywgQWxsb3dHcm91cHMsIERlbnlHcm91cHMgd2lsbCBtYXRjaCBJUHY0LXN0eWxlCiAgIGFkZHJlc3NlcyBvbmx5IGZvciA0LWluLTYgbWFwcGVkIGNvbm5lY3Rpb25zLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKICAgb3Igbm90IHRoZSBtYWNoaW5lIGlzIElQdjYgZW5hYmxlZC4gIG9rIGRqbUAKCjIwMDUwNDI1CiAtIChkdHVja2VyKSBbcmVncmVzcy9tdWx0aXBsZXguc2hdIFVzZSAia2lsbCAtMCAkcGlkIiB0byBjaGVjayBmb3IgdGhlCiAgIGV4aXN0ZW5jZSBvZiBhIHByb2Nlc3Mgc2luY2UgaXQncyBtb3JlIHBvcnRhYmxlLiAgRm91bmQgYnkgamJhc25leSBhdAogICBuY3NhLnVpdWMuZWR1OyBvayB0aW1ACiAtIChkdHVja2VyKSBbcmVncmVzcy9tdWx0aXBsZXguc2hdIFJlbW92ZSBjbGVhbnVwIGNhbGwgc2luY2UgdGVzdC1leGVjLnNoCiAgIHdpbGwgY2xlYW4gdXAgYW55d2F5LiAgRnJvbSB0aW1ACiAtIChkdHVja2VyKSBbcmVncmVzcy9tdWx0aXBsZXguc2hdIFB1dCBjb250cm9sIHNvY2tldCBpbiAvdG1wIHNvIHJ1bm5pbmcKICAgIm1ha2UgdGVzdHMiIHdvcmtzIGV2ZW4gaWYgeW91J3JlIGJ1aWxkaW5nIG9uIGEgZmlsZXN5c3RlbSB0aGF0IGRvZXNuJ3QKICAgc3VwcG9ydCBzb2NrZXRzLiAgRnJvbSBkZWVuZ2VydCBhdCBhbmwuZ292LCBvayBkam1ACgoyMDA1MDQyNAogLSAoZHR1Y2tlcikgW0lOU1RBTEwgY29uZmlndXJlLmFjXSBNYWtlIHpsaWIgdmVyc2lvbiBjaGVjayB0ZXN0IGZvciAxLjEuNCBvcgogICAxLjIuMS4yIG9yIGhpZ2hlci4gIFdpdGggdGltQCwgb2sgZGptQAoKMjAwNTA0MjMKIC0gKHRpbSkgW2NvbmZpZy5ndWVzc10gQWRkIHN1cHBvcnQgZm9yIE9wZW5TZXJ2ZXIgNi4KCjIwMDUwNDIxCiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jXSBCdWcgIzEwMjQ6IERvbid0IGNoZWNrIHBhbV9zZXNzaW9uX2lzX29wZW4gaWYKICAgVXNlTG9naW4gaXMgc2V0IGFzIFBBTSBpcyBub3QgdXNlZCB0byBlc3RhYmxpc2ggY3JlZGVudGlhbHMgaW4gdGhhdAogICBjYXNlLiAgRm91bmQgYnkgTWljaGFlbCBTZWx2ZXN0ZWVuLCBvayBkam1ACgoyMDA1MDQxOQogLSAoZHR1Y2tlcikgW0lOU1RBTExdIFJlZmVyZW5jZSBSRUFETUUucHJpdnNlcCBmb3IgdGhlIHByaXZpbGVnZSBzZXBhcmF0aW9uCiAgIHJlcXVpcmVtZW50cy4gIFBvaW50ZWQgb3V0IGJ5IEJlbmd0IFN2ZW5zc29uLgogLSAoZHR1Y2tlcikgW0lOU1RBTExdIFB1dCB0aGUgcy9rZXkgdGV4dCBhbmQgVVJMIGJhY2sgdG9nZXRoZXIuCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gRml4IHMva2V5IHRleHQgdG9vLgoKMjAwNTA0MTEKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gVW5peFdhcmUgbmVlZHMgUEFTU1dEX05FRURTX1VTRVJOQU1FCgoyMDA1MDQwNQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gRGVmaW5lIEhBVkVfU09fUEVFUkNSRUQgaWYgd2UgaGF2ZSBpdC4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXNpYS5jXSBDb25zdGlmeSBzeXNfYXV0aF9wYXNzd2QsIGZpeGVzIGJ1aWxkIGVycm9yIG9uCiAgIFRydTY0LiAgUGF0Y2ggZnJvbSBjbWFkYW1zIGF0IGhpd2FheS5uZXQuCiAtIChkdHVja2VyKSBbYXV0aC1wYXNzd2QuYyBhdXRoLXNpYS5oXSBSZW1vdmUgZHVwbGljYXRlIGRlZmluaXRpb25zIG9mCiAgIHN5c19hdXRoX3Bhc3N3ZCwgcG9pbnRlZCBvdXQgYnkgY21hZGFtcyBhdCBoaXdhYXkubmV0LgoKMjAwNTA0MDMKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMzEgMTg6Mzk6MjEKICAgICBbc2NwLmNdCiAgICAgY29weSBhcmd2W10gZWxlbWVudCBpbnN0ZWFkIG9mIHNtYXNoaW5nIHRoZSBvbmUgdGhhdCBwcyB3aWxsIHNlZTsgb2sgb3R0bwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wNC8wMiAxMjo0MToxNgogICAgIFtzY3AuY10KICAgICBzaW5jZSBzc2ggaGFzIHhzdHJkdXAsIHVzZSBpdCBpbnN0ZWFkIG9mIHN0cmR1cCt0ZXN0LiB1bmJyZWFrcyAtV2Vycm9yCiAgICAgYnVpbGQKIC0gKGR0dWNrZXIpIFttb25pdG9yLmNdIERvbid0IGZyZWUgYnVmZmVycyBpbiBhdWRpdCBmdW5jdGlvbnMsIG1vbml0b3JfcmVhZAogICB3aWxsIGZyZWUgYXMgbmVlZGVkLiAgb2sgdGltQCBkam1ACgoyMDA1MDMzMQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8xNiAxMToxMDozOAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgZ2V0IHRoZSBzeW50YXggcmlnaHQgZm9yIHtMb2NhbCxSZW1vdGV9Rm9yd2FyZDsKICAgICBiYXNlZCBvbiBhIGRpZmYgZnJvbSBtYXJrdXM7CiAgICAgcHJvYmxlbSByZXBvcnQgZnJvbSBwb25yYWo7CiAgICAgb2sgZHR1Y2tlckAgbWFya3VzQCBkZXJhYWR0QAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8xNiAyMToxNzozOQogICAgIFt2ZXJzaW9uLmhdCiAgICAgNC4xCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzE4IDE3OjA1OjAwCiAgICAgW3NzaGRfY29uZmlnLjVdCiAgICAgdHlwbzsKIC0gKGR0dWNrZXIpIFthdXRoLmggc3NoZC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmNdIEJ1ZyAjMTAwNjogZml4IGJ1ZyBpbgogICBoYW5kbGluZyBvZiBwYXNzd29yZCBleHBpcnkgbWVzc2FnZXMgcmV0dXJuZWQgYnkgQUlYJ3MgYXV0aGVudGljYXRpb24KICAgcm91dGluZXMsIG9yaWdpbmFsbHkgcmVwb3J0ZWQgYnkgcm9idmR3YWwgYXQgc2FyYS5ubC4KIC0gKGR0dWNrZXIpIFtzc2guY10gUHJldmVudCBudWxsIHBvaW50ZXIgZGVyZWYgaW4gcG9ydCBmb3J3YXJkaW5nIGRlYnVnCiAgIG1lc3NhZ2Ugb24gc29tZSBwbGF0Zm9ybXMuICBQYXRjaCBmcm9tIHBldGUgYXQgc2VlYmV5b25kLmNvbSB2aWEgZGptLgogLSAoZHR1Y2tlcikgW21vbml0b3IuY10gUmVtYWluaW5nIHBhcnQgb2YgZml4IGZvciBidWcgIzEwMDYuCgoyMDA1MDMyOQogLSAoZHR1Y2tlcikgW2NvbnRyaWIvYWl4L2J1aWxkYmZmLnNoXSBCdWcgIzEwMDU6IExvb2sgdXAgb25seSB0aGUgdXNlciB3ZSdyZQogICBpbnRlcmVzdGVkIGluIHdoaWNoIGlzIG11Y2ggZmFzdGVyIGluIGxhcmdlIChlZyBMREFQIG9yIE5JUykgZW52aXJvbm1lbnRzLgogICBQYXRjaCBmcm9tIGRsZW9uYXJkIGF0IHZpbnRlbGEuY29tLgoKMjAwNTAzMjEKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFByZXZlbnQgY29uZmlndXJlIC0td2l0aC16bGliIGZyb20gYWRkaW5nIC1JeWVzCiAgIGFuZCAtTHllcyB0byBDRkxBR1MgYW5kIExJQlMuICBQb2ludGVkIG91dCBieSBwZXRlciBhdCBzbGFnaGVhcC5uZXQsCiAgIHdpdGggJiBvayB0aW1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBNYWtlIGNvbmZpZ3VyZSBlcnJvciBvdXQgaWYgdGhlIHVzZXIgc3BlY2lmaWVzCiAgIC0td2l0aC1saWJlZGl0IGJ1dCB0aGUgcmVxdWlyZWQgbGlicyBjYW4ndCBiZSBmb3VuZCwgcmF0aGVyIHRoYW4gc2lsZW50bHkKICAgaWdub3JpbmcgYW5kIGNvbnRpbnVpbmcuICBvayB0aW1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmhdIFByZXZlbnQgcmVkZWZpbml0aW9ucwogICBvZiBzZXRhdXRoZGIgb24gQUlYIDUuMywgcmVwb3J0ZWQgYnkgYW5kZXJzLmxpbGplZ3JlbiBhdCBpdHMudXUuc2UuCgoyMDA1MDMxNwogLSAodGltKSBbY29uZmlndXJlLmFjXSBCdWcgOTk4LiBNYWtlIHBhdGggZm9yIC0td2l0aC1vcGVuc2Mgb3B0aW9uYWwuCiAgIE1ha2UgLS13aXRob3V0LW9wZW5zYyB3b3JrLgogLSAodGltKSBbY29uZmlndXJlLmFjXSBwb3J0YWJpbGl0eSBjaGFuZ2VzIG9uIHRlc3Qgc3RhdGVtZW50cy4gU29tZSBzaGVsbHMKICAgaGF2ZSBwcm9ibGVtcyB3aXRoIC1hIG9wZXJhdG9yLgogLSAodGltKSBbY29uZmlndXJlLmFjXSBtYWtlIHNvbWUgY29uZmlndXJlIG9wdGlvbnMgYSBsaXR0bGUgbW9yZSBlcnJvciBwcm9vZi4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlIHNwYWNlLgoKMjAwNTAzMTQKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzEwIDEwOjE1OjAyCiAgICAgW3JlYWRjb25mLmNdCiAgICAgQ2hlY2sgbGlzdGVuIGFkZHJlc3NlcyBmb3IgbnVsbCwgcHJldmVudHMgeGZyZWUgZnJvbSBkeWluZyBkdXJpbmcKICAgICBDbGVhckFsbEZvcndhcmRpbmdzIChieiAjOTk2KS4gIEZyb20gIENyYWlnIExlcmVzLCBvayBtYXJrdXNACiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8xMCAyMjowMTowNQogICAgIFttaXNjLmMgc3NoLWtleWdlbi5jIHNlcnZjb25mLmMgY2xpZW50bG9vcC5jIGF1dGgtb3B0aW9ucy5jIHNzaC1hZGQuYwogICAgIG1vbml0b3IuYyBzZnRwLWNsaWVudC5jIGJ1ZmF1eC5oIGhvc3RmaWxlLmMgc3NoLmMgc3NoY29ubmVjdC5jIGNoYW5uZWxzLmMKICAgICByZWFkY29uZi5jIGJ1ZmF1eC5jIHNmdHAuY10KICAgICBzcGFjaW5nCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8xMCAyMjo0MDozOAogICAgIFthdXRoLW9wdGlvbnMuY10KICAgICBzcGFjaW5nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzExIDE0OjU5OjA2CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICB0eXBvLCBtaXNzaW5nIFxuOyBtcGVjaAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8xMiAxMTo1NTowMwogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgZXNjYXBlIGAuJyBhdCBlb2wgdG8gYXZvaWQgZG91YmxlIHNwYWNpbmcgaXNzdWVzOwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMTQgMTA6MDk6MDMKICAgICBbc3NoLWtleWdlbi4xXQogICAgIENvcnJlY3QgZGVzY3JpcHRpb24gb2YgLUggKGJ6ICM5OTcpOyAgb2sgbWFya3VzQCwgcHVuY3R1YXRpb24gam1jQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMTQgMTE6NDQ6NDIKICAgICBbYXV0aC5jXQogICAgIFBvcHVsYXRlIGhvc3QgZm9yIGxvZyBtZXNzYWdlIGZvciBsb2dpbnMgZGVuaWVkIGJ5IEFsbG93VXNlcnMgYW5kCiAgICAgRGVueVVzZXJzIChieiAjOTk5KTsgb2sgbWFya3VzQCAocGF0Y2ggYnkgdHJ5cG9ucmFqIGF0IGdtYWlsLmNvbSkKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMTQgMTE6NDY6NTYKICAgICBbYnVmZmVyLmMgYnVmZmVyLmggY2hhbm5lbHMuY10KICAgICBsaW1pdCBpbnB1dCBidWZmZXIgc2l6ZSBmb3IgY2hhbm5lbHM7IGJ1Z3ppbGxhICM4OTY7IHdpdGggYW5kIG9rIGR0dWNrZXJACiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSBsaW5rcyBpbiByYz8uZCB3ZXJlIGdldHRpbmcgdHJhc2hlZAogICB3aXRoIGEgcnBtIC1GCgoyMDA1MDMxMwogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY3lnd2luL3NzaC1ob3N0LWNvbmZpZ10gTWFrZXMgdGhlIHF1ZXJ5IGZvciB0aGUKICAgbG9jYWxpemVkIG5hbWUgb2YgdGhlIGxvY2FsIGFkbWluaXN0cmF0b3JzIGdyb3VwIG1vcmUgcmVsaWFibGUuICBGcm9tCiAgIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCgoyMDA1MDMxMgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXSBERUJVRyBjYW4gY2F1c2UgcHJvYmxlbXMgd2hlcmUgZGVidWcKICAgb3V0cHV0IGVuZHMgdXAgaW4gdGhlIGNsaWVudCdzIG91dHB1dCwgY2F1c2luZyByZWdyZXNzIGZhaWx1cmVzLiAgRm91bmQKICAgYnkgQ29yaW5uYSBWaW5zY2hlbi4KCjIwMDUwMzA5CiAtIChkdHVja2VyKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdIFNldCBCSU5fU0g9eHBnNCBvbiBPU0YxL0RpZ2l0YWwgVW5peC9UcnU2NAogICBzbyB0aGF0IHJlZ3Jlc3MgdGVzdHMgYmVoYXZlLiAgRnJvbSBDaHJpcyBBZGFtcy4KIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wNyAyMzo0MTo1NAogICAgIFtzc2guMSBzc2hfY29uZmlnLjVdCiAgICAgbW9yZSBtYWNybyBzaW1wbGlmaWNhdGlvbjsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMDggMjM6NDk6NDgKICAgICBbdmVyc2lvbi5oXQogICAgIE9wZW5TU0ggNC4wCiAtIChkam0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjIGNvbnRyaWIvcmVkaGF0L29wZW5zc2guc3BlY10gCiAgIFtjb250cmliL3N1c2Uvb3BlbnNzaC5zcGVjXSBVcGRhdGUgc3BlYyBmaWxlIHZlcnNpb25zCiAtIChkam0pIFtsb2cuY10gRml4IGR1bWIgc3ludGF4IGVycm9yOyBvayBkdHVja2VyQAogLSAoZGptKSBSZWxlYXNlIE9wZW5TU0ggNC4wcDEKCjIwMDUwMzA3CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBEaXNhYmxlIGdldHRleHQgc2VhcmNoIHdoZW4gY29uZmlndXJpbmcgd2l0aAogICBCU00gYXVkaXQgc3VwcG9ydCBmb3IgdGhlIHRpbWUgYmVpbmcuICBvayBkam1ACiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jIChyZWdyZXNzLykKICAgLSBmZ3NjaEBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMi8xMCAwMTozMTozMAogICAgIFtNYWtlZmlsZSBzZnRwLWdsb2Iuc2hdCiAgICAgc29tZSBnbG9iYmluZyByZWdyZXNzOyBwcm9tcHRlZCBhbmQgb2sgZGptQAogICAtIGRhdmlkQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAxLzE0IDA0OjIxOjE4CiAgICAgW01ha2VmaWxlIHRlc3QtZXhlYy5zaF0KICAgICBwYXNzIHRoZSBTVURPIG1ha2UgdmFyaWFibGUgdG8gdGhlIGluZGl2aWR1YWwgc2ggdGVzdHM7IG9rIGR0dWNrZXJAIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAyLzI3IDExOjMzOjMwCiAgICAgW211bHRpcGxleC5zaCB0ZXN0LWV4ZWMuc2ggc3NoZC1sb2ctd3JhcHBlci5zaF0KICAgICBBZGQgb3B0aW9uYWwgY2FwYWJpbGl0eSB0byBsb2cgb3V0cHV0IGZyb20gcmVncmVzcyBjb21tYW5kczsgb2sgbWFya3VzQAogICAgIFVzZSB3aXRoOiBtYWtlIFRFU1RfU1NIX0xPR0ZJTEU9L3RtcC9yZWdyZXNzLmxvZwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMi8yNyAyMzoxMzozNgogICAgIFtsb2dpbi10aW1lb3V0LnNoXQogICAgIGF2b2lkIG5hbWVzZXJ2aWNlIGxvb2t1cHMgaW4gcmVncmVzcyB0ZXN0OyBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wNCAwODo0ODo0NgogICAgIFtNYWtlZmlsZSBlbnZwYXNzLnNoXQogICAgIHJlZ3Jlc3MgdGVzdCBmb3IgU2VuZEVudiBjb25maWcgcGFyc2luZyBidWc7IG9rIGR0dWNrZXJACiAtIChkdHVja2VyKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdIFB1dCBTVURPIGluIHRoZSByaWdodCBwbGFjZS4KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gU0NPIDMuMnY0LjIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KCjIwMDUwMzA2CiAtIChkdHVja2VyKSBbbW9uaXRvci5jXSBCdWcgIzEyNSBjb21tZW50ICM0NzogZml4IGVycm9ycyByZXR1cm5lZCBieSBtb25pdG9yCiAgIHdoZW4gYXR0ZW1wdGluZyB0byBhdWRpdCBkaXNjb25uZWN0IGV2ZW50cy4gIFJlcG9ydGVkIGJ5IFBoaWwgRGlib3dpdHouCiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jIHNzaGQuY10gQnVnICMxMjUgY29tbWVudCAjNDk6IFNlbmQgZGlzY29ubmVjdCBhdWRpdAogICBldmVudHMgZWFybGllciwgcHJldmVudHMgbW1fcmVxdWVzdF9zZW5kIGVycm9ycyByZXBvcnRlZCBieSBNYXR0IEdvZWJlbC4KCjIwMDUwMzA1CiAtIChkam0pIFtjb250cmliL2N5Z3dpbi9SRUFETUVdIEltcHJvdmUgQ3lnd2luIGJ1aWxkIGRvY3VtZW50YXRpb24uIFBhdGNoIAogICBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20KIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMiAxMTo0NTowMQogICAgIFtzc2guMV0KICAgICBtaXNzaW5nIHdvcmQ7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzA0IDA4OjQ4OjA2CiAgICAgW3JlYWRjb25mLmNdCiAgICAgZml4IFNlbmRFbnYgY29uZmlnIHBhcnNpbmcgYnVnIGZvdW5kIGJ5IFJvdW1lbiBQZXRyb3Y7IG9rIGR0dWNrZXJACgoyMDA1MDMwMgogLSAoZGptKSBPcGVuQlNEIENWUyBzeW5jOgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxNDo0Nzo1OAogICAgIFtzc2guMV0KICAgICByZW1vdmUgc29tZSB1bm5lY2Nlc2FyeSBtYWNyb3M7CiAgICAgZG8gbm90IG1hcmsgdXAgcHVuY3R1YXRpb247CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAxIDE0OjU1OjIzCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBkbyBub3QgbWFyayB1cCBwdW5jdHVhdGlvbjsKICAgICB3aGl0ZXNwYWNlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxNDo1OTo0OQogICAgIFtzc2hkLjhdCiAgICAgbmV3IHNlbnRlbmNlLCBuZXcgbGluZTsKICAgICB3aGl0ZXNwYWNlOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxNTowNTowMAogICAgIFtzc2gta2V5Z2VuLjFdCiAgICAgd2hpdGVzcGFjZTsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMDEgMTU6NDc6MTQKICAgICBbc3NoLWtleXNjYW4uMSBzc2gta2V5c2Nhbi5jXQogICAgIHNvcnQgb3B0aW9ucyBhbmQgc3luYyB1c2FnZSgpOwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxNzoxOTozNQogICAgIFtzY3AuMSBzZnRwLjFdCiAgICAgYWRkIEhhc2hLbm93bkhvc3RzIHRvIC1vIGxpc3Q7CiAgICAgb2sgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxNzoyMjowNgogICAgIFtzc2guY10KICAgICBzeW5jIHVzYWdlKCkgdy8gbWFuIFNZTk9QU0lTOwogICAgIG9rIG1hcmt1c0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMDEgMTc6MzI6MTkKICAgICBbc3NoLWFkZC4xXQogICAgIHNvcnQgb3B0aW9uczsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMDEgMTg6MTU6NTYKICAgICBbc3NoLWtleWdlbi4xXQogICAgIHNvcnQgb3B0aW9ucyAobm8gYXR0ZW1wdCBtYWRlIGF0IHN5bm9wc2lzIGNsZWFuIHVwIHRob3VnaCk7CiAgICAgc3BlbGxpbmcgKG9jY3VyYW5jZSAtPiBvY2N1cnJlbmNlKTsKICAgICB1c2UgcHJvbXB0IGJlZm9yZSBleGFtcGxlczsKICAgICBncmFtbWFyOwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMiAwMTowMDowNgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgZml4IGFkZGl0aW9uIG9mIG5ldyBoYXNoZWQgaG9zdG5hbWVzIHdoZW4gQ2hlY2tIb3N0SVA9eWVzOwogICAgIGZvdW5kIGFuZCBvayBkdHVja2VyQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMiAwMToyNzo0MQogICAgIFtzc2gta2V5Z2VuLmNdCiAgICAgaWdub3JlIGhvc3RuYW1lcyB3aXRoIG1ldGFjaGFycyB3aGVuIGhhc2hpbmc7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAzLzAyIDAyOjIxOjA3CiAgICAgW3NzaC4xXQogICAgIGJ6Izk4NzogbWVudGlvbiBGb3J3YXJkWDExVHJ1c3RlZCBpbiBzc2guMSwKICAgICByZXBvcnRlZCBieSBhbmRyZXcuYmVuaGFtIEFUIHRodXMubmV0OyBvayBkZXJhYWR0QAogLSAodGltKSBbcmVncmVzcy9hZ2VudC1wdHJhY2Uuc2hdIGFkZCBhbm90aGVyIHBvc3NpYmxlIGdkYiBlcnJvci4KCjIwMDUwMzAxCiAtIChkam0pIE9wZW5CU0QgQ1ZTIHN5bmM6CiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMi8xNiAwOTo1Njo0NAogICAgIFtzc2guY10KICAgICBCZXR0ZXIgZGlhZ25vc3RpYyBpZiBhbiBpZGVudGl0eSBmaWxlIGlzIG5vdCBhY2Nlc2libGUuIG9rIG1hcmt1c0AgZGptQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMi8xOCAwMzowNTo1MwogICAgIFtjYW5vaG9zdC5jXQogICAgIGJldHRlciBlcnJvciBtZXNzYWdlcyBmb3IgZ2V0bmFtZWluZm8gZmFpbHVyZXM7IG9rIGR0dWNrZXJACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAyLzIwIDIyOjU5OjA2CiAgICAgW3NmdHAuY10KICAgICB0dXJuIG9uIHNzaCBiYXRjaCBtb2RlIHdoZW4gaW4gc2Z0cCBiYXRjaCBtb2RlLCBwYXRjaCBmcm9tIAogICAgIGpkbW9zc2ggQVQgbmFuZC5uZXQ7CiAgICAgb2sgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMi8yNSAxMDo1NToxMwogICAgIFtzc2hkLjhdCiAgICAgYWRkIC9ldGMvbW90ZCBhbmQgJEhPTUUvLmh1c2hsb2dpbiB0byBGSUxFUzsKICAgICBmcm9tIG1pY2hhZWwga251ZHNlbjsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDIvMjggMDA6NTQ6MTAKICAgICBbc3NoX2NvbmZpZy41XQogICAgIGJ6Izg0OTogZG9jdW1lbnQgdGltZW91dCBvbiB1bnRydXN0ZWQgeDExIGZvcndhcmRpbmcgc2Vzc2lvbnMuIFJlcG9ydGVkIGJ5CiAgICAgb3Jpb24gQVQgY29yYS5ud3JhLmNvbTsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxMDowOTo1MgogICAgIFthdXRoLW9wdGlvbnMuYyBjaGFubmVscy5jIGNoYW5uZWxzLmggY2xpZW50bG9vcC5jIGNvbXBhdC5jIGNvbXBhdC5oXQogICAgIFttaXNjLmMgbWlzYy5oIHJlYWRjb25mLmMgcmVhZGNvbmYuaCBzZXJ2Y29uZi5jIHNzaC4xIHNzaC5jIHNzaF9jb25maWcuNV0KICAgICBbc3NoZF9jb25maWcuNV0KICAgICBieiM0MTM6IGFsbG93IG9wdGlvbmFsIHNwZWNpZmljYXRpb24gb2YgYmluZCBhZGRyZXNzIGZvciBwb3J0IGZvcndhcmRpbmdzLgogICAgIFBhdGNoIG9yaWdpbmFsbHkgYnkgRGFuIEFzdG9yaWFuLCBidXQgd29ya2VkIG9uIGJ5IHNldmVyYWwgcGVvcGxlCiAgICAgQWRkcyBHYXRld2F5UG9ydHM9Y2xpZW50c3BlY2lmaWVkIG9wdGlvbiBvbiBzZXJ2ZXIgdG8gYWxsb3cgcmVtb3RlIAogICAgIGZvcndhcmRzIHRvIGJpbmQgdG8gY2xpZW50LXNwZWNpZmllZCBwb3J0cy4KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDMvMDEgMTA6NDA6MjcKICAgICBbaG9zdGZpbGUuYyBob3N0ZmlsZS5oIHJlYWRjb25mLmMgcmVhZGNvbmYuaCBzc2guMSBzc2hfY29uZmlnLjVdCiAgICAgW3NzaGNvbm5lY3QuYyBzc2hkLjhdCiAgICAgYWRkIHN1cHBvcnQgZm9yIGhhc2hpbmcgaG9zdCBuYW1lcyBhbmQgYWRkcmVzc2VzIGFkZGVkIHRvIGtub3duX2hvc3RzCiAgICAgZmlsZXMsIHRvIGltcHJvdmUgcHJpdmFjeSBvZiB3aGljaCBob3N0cyB1c2VyIGhhdmUgYmVlbiB2aXNpdGluZzsgb2sgCiAgICAgbWFya3VzQCBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxMDo0MToyOAogICAgIFtzc2gta2V5c2Nhbi4xIHNzaC1rZXlzY2FuLmNdCiAgICAgb3B0aW9uIHRvIGhhc2ggaG9zdG5hbWVzIG91dHB1dCBieSBzc2gta2V5c2Nhbjsgb2sgbWFya3VzQCBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNS8wMy8wMSAxMDo0Mjo0OQogICAgIFtzc2gta2V5Z2VuLjEgc3NoLWtleWdlbi5jIHNzaF9jb25maWcuNV0KICAgICBhZGQgdG9vbHMgZm9yIG1hbmFnaW5nIGtub3duX2hvc3RzIGZpbGVzIHdpdGggaGFzaGVkIGhvc3RuYW1lcywgaW5jbHVkaW5nCiAgICAgaGFzaGluZyBleGlzdGluZyBmaWxlcyBhbmQgZGVsZXRpbmcgaG9zdHMgYnkgbmFtZTsgb2sgbWFya3VzQCBkZXJhYWR0QAoKMjAwNTAyMjYKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2Qtb3BlbnB0eS5jIG9wZW5ic2QtY29tcGF0L2luZXRfbnRvcC5jXQogICBSZW1vdmUgdHdvIG9ic29sZXRlIEN5Z3dpbiAjaWZkZWZzLiAgUGF0Y2ggZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLntjLGh9XQogICBSZW1vdmUgU0VUR1JPVVBTX05PT1AsIHdhcyBvbmx5IHVzZWQgYnkgQ3lnd2luLCB3aGljaCBkb2Vzbid0IG5lZWQgaXQgYW55CiAgIG1vcmUuICBQYXRjaCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW5dIEFkZCBhIGluc3RhbGwtbm9zeXNjb25mIHRhcmdldCBmb3IgaW5zdGFsbGluZyB0aGUKICAgYmluYXJpZXMgd2l0aG91dCB0aGUgY29uZmlnIGZpbGVzLiAgUHJpbWFyaWx5IHVzZWZ1bCBmb3IgcGFja2FnaW5nLgogICBQYXRjaCBmcm9tIHBoaWwgYXQgdXNjLmVkdS4gIG9rIGRqbUAKCjIwMDUwMjI0CiAtIChkam0pIFtjb25maWd1cmUuYWNdIGluX2FkZHJfdCB0ZXN0IG5lZWRzIHN5cy90eXBlcy5oIHRvbwoKMjAwNTAyMjIKIC0gKGR0dWNrZXIpIFt1aWRzd2FwLmNdIFNraXAgdWlkIHJlc3RvcmUgdGVzdCBvbiBDeWd3aW4uICBQYXRjaCBmcm9tCiAgIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCgoyMDA1MDIyMAogLSAoZHR1Y2tlcikgW0xJQ0VOQ0UgTWFrZWZpbGUuaW4gUkVBRE1FLnBsYXRmb3JtIGF1ZGl0LWJzbS5jIGNvbmZpZ3VyZS5hYwogICBkZWZpbmVzLmhdIEJ1ZyAjMTI1OiBBZGQgKkVYUEVSSU1FTlRBTCogQlNNIGF1ZGl0IHN1cHBvcnQuICBDb25maWd1cmUKICAgLS13aXRoLWF1ZGl0PWJzbSB0byBlbmFibGUuICBQYXRjaCBvcmlnaW5hbGx5IGZyb20gU3VuIE1pY3Jvc3lzdGVtcywKICAgcGFydHMgYnkgSm9obiBSLiBKYWNrc29uLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gTWlzc2luZyBjb21tYSBpbiBBSVggc2VjdGlvbiwgc29tZWhvdyBjYXVzZXMKICAgdW5yZWxhdGVkIHBsYXRmb3JtcyB0byBiZSBjb25maWd1cmVkIGluY29ycmVjdGx5LgoKMjAwNTAyMTYKIC0gKGRqbSkgd3JpdGUgc2VlZCB0byB0ZW1wb3JhcnkgZmlsZSBhbmQgYXRvbWljYWxseSByZW5hbWUgaW50byBwbGFjZTsgCiAgIG9rIGR0dWNrZXJACiAtIChkdHVja2VyKSBbc3NoLXJhbmQtaGVscGVyLmNdIFByb3ZpZGUgc2VlZF9ybmcgc2luY2UgaXQgbWF5IGJlIGNhbGxlZAogICB2aWEgbWtzdGVtcCBpbiBzb21lIGNvbmZpZ3VyYXRpb25zLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtc2hhZG93LmNdIFByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MgaWYgIkRBWSIgaXMgZGVmaW5lZAogICBieSB0aGUgc3lzdGVtIGhlYWRlcnMuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzg5MzogY2hlY2sgZm9yIGxpYnJlc29sdiBlYXJseSBvbiBSZWxpYW50CiAgIFVuaXg7IHByZXZlbnRzIHByb2JsZW1zIHJlbGF0aW5nIHRvIHRoZSBsb2NhdGlvbiBvZiAtbHJlc29sdiBpbiB0aGUKICAgbGluayBvcmRlci4KIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmNdIEJ1ZyAjOTE4OiBzdG9yZSBjcmVkZW50aWFscyBmcm9tIGdzc2FwaS13aXRoLW1pYwogICBhdXRoZW50aWNhdGlvbiBlYXJseSBlbm91Z2ggdG8gYmUgYXZhaWxhYmxlIHRvIFBBTSBzZXNzaW9uIG1vZHVsZXMgd2hlbgogICBwcml2c2VwPXllcy4gIFBhdGNoIGZyb20gZGVlbmdlcnQgYXQgYW5sLmdvdiwgb2snZWQgaW4gcHJpbmNpcGxlIGJ5IFNhbQogICBIYXJ0bWFuIGFuZCBzaW1pbGFyIHRvIERlYmlhbidzIHNzaC1rcmI1IHBhY2thZ2UuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LntjLGh9XSBTaWxlbmNlIHNvbWUgbW9yZQogICBjb21waWxlciB3YXJuaW5ncyBvbiBBSVguCgoyMDA1MDIxNQogLSAoZHR1Y2tlcikgW2NvbmZpZy5zaC5pbl0gQ29sbGVjdCBvc2xldmVsIC1yIHRvby4KIC0gKGR0dWNrZXIpIFtSRUFETUUucGxhdGZvcm0gYXV0aC5jIGNvbmZpZ3VyZS5hYyBsb2dpbnJlYy5jCiAgIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaF0gQnVnICM4MzU6IGVuYWJsZSBJUHY2CiAgIG9uIEFJWCB3aGVyZSBwb3NzaWJsZSAoc2VlIFJFQURNRS5wbGF0Zm9ybSBmb3IgZGV0YWlscykgYW5kIHdvcmsgYXJvdW5kCiAgIGEgbWlzZmVhdHVyZSBvZiBBSVgncyBnZXRuYW1laW5mby4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtsb2dpbnJlYy5jXSBBZGQgbWlzc2luZyAjaW5jbHVkZS4KCjIwMDUwMjExCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBUaWR5IHVwIGNvbmZpZ3VyZSAtLWhlbHAgb3V0cHV0LgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oXSBXZSBub3cgbmVlZCBFQUlfU1lTVEVNIHRvby4KCjIwMDUwMjEwCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzkxOTogUHJvdmlkZSB2aXNpYmxlIGZlZWRiYWNrIGZvciB0aGUKICAgLS1kaXNhYmxlLWV0Yy1kZWZhdWx0LWxvZ2luIGNvbmZpZ3VyZSBvcHRpb24uCgoyMDA1MDIwOQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMjggMDk6NDU6NTMKICAgICBbc3NoX2NvbmZpZ10KICAgICBNYWtlIGl0IGNsZWFyIHRoYXQgdGhlIGV4YW1wbGUgZW50cmllcyBpbiBzc2hfY29uZmlnIGFyZSBvbmx5IHNvbWUgb2YgdGhlCiAgICAgY29tbW9ubHktdXNlZCBvcHRpb25zIGFuZCByZWZlciB0aGUgdXNlciB0byBzc2hfY29uZmlnKDUpIGZvciBtb3JlCiAgICAgZGV0YWlsczsgb2sgZGptQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8yOCAxNTowNTo0MwogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgZ3JhbW1hcjsKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMjggMTg6MTQ6MDkKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHdvcmRpbmc7CiAgICAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMzAgMTE6MTg6MDgKICAgICBbbW9uaXRvci5jXQogICAgIE1ha2UgY29kZSBtYXRjaCBpbnRlbnQ7IG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAyLzA4IDIyOjI0OjU3CiAgICAgW3NzaGQuY10KICAgICBQcm92aWRlIHJlYXNvbiBpbiBlcnJvciBtZXNzYWdlIGlmIGdldG5hbWVpbmZvIGZhaWxzOyBvayBtYXJrdXNACiAtIChkdHVja2VyKSBbYXV0aC1wYXNzd2QuYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jXSBEb24ndCBjYWxsCiAgIGRpc2FibGVfZm9yd2FyZGluZygpIGZyb20gY29tcGF0IGxpYnJhcnkuIFByZXZlbnQgbGlua2VyIGVycnJvcnMgdHJ5aW5nCiAgIHRvIHJlc29sdmUgaXQgZm9yIGJpbmFyaWVzIG90aGVyIHRoYW4gc3NoZC4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjODU0OiBwcmVwZW5kIHB3ZCB0byByZWxhdGl2ZSAtLXdpdGgtc3NsLWRpcgogICBwYXRocy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgc2Vzc2lvbi5jXSBTb21lIHBsYXRmb3JtcyAoZWcgc29tZSBTQ08pIHJlcXVpcmUKICAgdGhlIHVzZXJuYW1lIHRvIGJlIHBhc3NlZCB0byB0aGUgcGFzc3dkIGNvbW1hbmQgd2hlbiBjaGFuZ2luZyBleHBpcmVkCiAgIHBhc3N3b3Jkcy4gIG9rIGRqbUAKCjIwMDUwMjA4CiAtIChkdHVja2VyKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdIEJ1ZyAjOTEyOiBTZXQgX1BPU0lYMl9WRVJTSU9OIGZvciB0aGUKICAgcmVncmVzcyB0ZXN0cyBzbyBuZXdlciB2ZXJzaW9ucyBvZiBHTlUgaGVhZCgxKSBiZWhhdmUgdGhlbXNlbHZlcy4gIFBhdGNoCiAgIGJ5IGRqbSwgc28gb2sgbWUuCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gU2lsZW5jZSBjb21waWxlciB3YXJuaW5ncy4KIC0gKGR0dWNrZXIpIFthdWRpdC5jIGF1ZGl0LmggYXV0aC5jIGF1dGgxLmMgYXV0aDIuYyBsb2dpbnJlYy5jIG1vbml0b3IuYwogICBtb25pdG9yX3dyYXAuYyBtb25pdG9yX3dyYXAuaCBzZXNzaW9uLmMgc3NoZC5jXTogUHJlcGVuZCBhbGwgb2YgdGhlIGF1ZGl0CiAgIGRlZmluZXMgYW5kIGVudW1zIHdpdGggU1NIXyB0byBwcmV2ZW50IG5hbWVzcGFjZSBjb2xsaXNpb25zIG9uIHNvbWUKICAgcGxhdGZvcm1zIChlZyBBSVgpLgoKMjAwNTAyMDQKIC0gKGR0dWNrZXIpIFttb25pdG9yLmNdIFBlcm1pdCBJTlZBTElEX1VTRVIgYXVkaXQgZXZlbnRzIGZyb20gc2xhdmUgdG9vLgogLSAoZHR1Y2tlcikgW2F1dGguY10gRml4IHBhcmVucyBpbiBhdWRpdCBsb2cgY2hlY2suCgoyMDA1MDIwMgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9yZWFscGF0aC5jXSBTeW5jIHVwIHdpdGggcmVhbHBhdGgKICAgcmV2IDEuMTEgZnJvbSBPcGVuQlNEIGFuZCBtYWtlIGl0IHVzZSBmY2hkaXIgaWYgYXZhaWxhYmxlLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGguYyBsb2dpbnJlYy5oIG9wZW5ic2QtY29tcGF0L3tic2QtY3JheSxwb3J0LWFpeH0ue2MsaH1dCiAgIE1ha2UgcmVjb3JkX2ZhaWxlZF9sb2dpbigpIGNhbGwgcHJvdmlkZSBob3N0bmFtZSByYXRoZXIgdGhhbiBoYXZpbmcgdGhlCiAgIGltcGxlbWVudGF0aW9ucyBoYXZpbmcgdG8gZG8gbG9va3VwcyB0aGVtc2VsdmVzLiAgT25seSBhZmZlY3RzIEFJWCBhbmQKICAgVU5JQ09TICh0aGUgbGF0dGVyIG9ubHkgdXNlcyB0aGUgInVzZXIiIHBhcmFtZXRlciBhbnl3YXkpLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3Nlc3Npb24uYyBzc2hkLmNdIEJ1ZyAjNDQ1OiBQcm9wb2dhdGUgS1JCNUNDTkFNRSBpZiBzZXQgdG8gY2hpbGQKICAgdGhlIHByb2Nlc3MuICBTaW5jZSB3ZSBhbHNvIHVuc2V0IEtSQjVDQ05BTUUgYXQgc3RhcnR1cCwgaWYgaXQncyBzZXQgYWZ0ZXIKICAgYXV0aGVudGljYXRpb24gaXQgbXVzdCBoYXZlIGJlZW4gc2V0IGJ5IHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZSBhdXRoIHN5c3RlbS4KICAgVGhpcyB3YXMgYWxyZWFkeSBkb25lIGZvciBBSVg7IHRoaXMgZW5hYmxlcyBpdCBmb3IgdGhlIGdlbmVyYWwgY2FzZS4KIC0gKGR0dWNrZXIpIFthdXRoLmMgY2Fub2hvc3QuYyBjYW5vaG9zdC5oIGNvbmZpZ3VyZS5hYyBkZWZpbmVzLmggbG9naW5yZWMuY10KICAgQnVnICM5NzQ6IFRlYWNoIHNzaGQgdG8gd3JpdGUgZmFpbGVkIGxvZ2luIHJlY29yZHMgdG8gYnRtcCBmb3IgZmFpbGVkIGF1dGgKICAgYXR0ZW1wdHMgKGN1cnJlbnRseSBvbmx5IGZvciBwYXNzd29yZCwga2JkaW50IGFuZCBDL1IsIG9ubHkgb24gTGludXggYW5kCiAgIEhQLVVYKSwgYmFzZWQgb24gY29kZSBmcm9tIGxvZ2luLmMgZnJvbSB1dGlsLWxpbnV4LiBXaXRoIGFzaG9rX2tvdmFpIGF0CiAgIGhvdG1haWwuY29tLCBvayBkam1ACiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW4gYXV0aC5jIGF1dGguaCBhdXRoMS5jIGF1dGgyLmMgbG9naW5yZWMuYyBtb25pdG9yLmMKICAgbW9uaXRvci5oIG1vbml0b3Jfd3JhcC5jIG1vbml0b3Jfd3JhcC5oIHNlc3Npb24uYyBzc2hkLmNdIEJ1ZyAjMTI1OgogICAoZmlyc3Qgc3RhZ2UpIEFkZCBhdWRpdCBpbnN0cnVtZW50YXRpb24gdG8gc3NoZCwgY3VycmVudGx5IGRpc2FibGVkIGJ5CiAgIGRlZmF1bHQuICB3aXRoIHN1Z2dlc3Rpb25zIGZyb20gYW5kIG9rIGRqbUAKCjIwMDUwMjAxCiAtIChkdHVja2VyKSBbbG9nLmNdIEJ1ZyAjOTczOiBmb3JjZSBsb2dfaW5pdCgpIHRvIG9wZW4gc3lzbG9nLCBzaW5jZSBvbiBzb21lCiAgIHBsYXRmb3JtcyBzeXNsb2cgd2lsbCByZXZlcnQgdG8gaXRzIGRlZmF1bHQgdmFsdWVzLiAgVGhpcyBtYXkgcmVzdWx0IGluCiAgIG1lc3NhZ2VzIGZyb20gZXh0ZXJuYWwgbGlicmFyaWVzIChlZyBsaWJ3cmFwKSBiZWluZyBzZW50IHRvIGEgZGlmZmVyZW50CiAgIGZhY2lsaXR5LgogLSAoZHR1Y2tlcikgW3NzaGRfY29uZmlnLjVdIEJ1ZyAjNzAxOiByZW1vdmUgd2FybmluZyBhYm91dAogICBrZXlib2FyZC1pbnRlcmFjdGl2ZSBzaW5jZSB0aGlzIGlzIG5vIGxvbmdlciB0aGUgY2FzZS4KCjIwMDUwMTI0CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gb3R0b0BjdnMub3BlbmJzZC5vcmcgMjAwNS8wMS8yMSAwODozMjowMgogICAgIFthdXRoLXBhc3N3ZC5jIHNzaGQuY10KICAgICBXYXJuIGluIGFkdmFuY2UgZm9yIHBhc3N3b3JkIGFuZCBhY2NvdW50IGV4cGlyeTsgaW5pdGlhbGl6ZSBsb2dpbm1zZwogICAgIGJ1ZmZlciBlYXJsaWVyIGFuZCBjbGVhciBpdCBhZnRlciBwcml2c2VwIGZvcmsuIG9rIGFuZCBoZWxwIGR0dWNrZXJACiAgICAgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMjIgMDg6MTc6NTkKICAgICBbYXV0aC5jXQogICAgIExvZyBzb3VyY2Ugb2YgY29ubmVjdGlvbnMgZGVuaWVkIGJ5IEFsbG93VXNlcnMsIERlbnlVc2VycywgQWxsb3dHcm91cHMgYW5kCiAgICAgRGVueUdyb3Vwcy4gIGJ6ICM5MDksIG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMjMgMTA6MTg6MTIKICAgICBbY2lwaGVyLmNdCiAgICAgY29uZmlnIG9wdGlvbiAiQ2lwaGVycyIgc2hvdWxkIGJlIGNhc2Utc2Vuc2l0aXZlOyBvayBkdHVja2VyQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMjQgMTA6MjI6MDYKICAgICBbc2NwLmMgc2Z0cC5jXQogICAgIEhhdmUgc2NwIGFuZCBzZnRwIHdhaXQgZm9yIHRoZSBzcGF3bmVkIHNzaCB0byBleGl0IGJlZm9yZSB0aGV5IGV4aXQKICAgICB0aGVtc2VsdmVzLiAgVGhpcyBwcmV2ZW50cyBzc2ggZnJvbSBiZWluZyB1bmFibGUgdG8gcmVzdG9yZSB0ZXJtaW5hbAogICAgIG1vZGVzIChub3Qgbm9ybWFsbHkgYSBwcm9ibGVtIG9uIE9wZW5CU0QgYnV0IGNvbW1vbiB3aXRoIC1Qb3J0YWJsZQogICAgIG9uIFBPU0lYIHBsYXRmb3JtcykuICBGcm9tIHBlYWsgYXQgYXJnby50cm9qYS5tZmYuY3VuaS5jeiAoYnojOTUwKTsKICAgICBvayBkam1AIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAxLzI0IDEwOjI5OjA2CiAgICAgW21vZHVsaV0KICAgICBJbXBvcnQgbmV3IG1vZHVsaTsgcmVxdWVzdGVkIGJ5IGRlcmFhZHRAIGEgd2VlayBhZ28KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAxLzI0IDExOjQ3OjEzCiAgICAgW2F1dGgtcGFzc3dkLmNdCiAgICAgI2lmIC0+ICNpZmRlZiBzbyBidWlsZHMgd2l0aG91dCBIQVZFX0xPR0lOX0NBUCB3b3JrIHRvbzsgb2sgZGptQCBvdHRvQAoKMjAwNTAxMjAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTIvMjMgMTc6MzU6NDgKICAgICBbc2Vzc2lvbi5jXQogICAgIGNoZWNrIGZvciBOVUxMOyBmcm9tIG1wZWNoCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEyLzIzIDE3OjM4OjA3CiAgICAgW3NzaC1rZXlnZW4uY10KICAgICBsZWFrOyBmcm9tIG1wZWNoCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEyLzIzIDIzOjExOjAwCiAgICAgW3NlcnZjb25mLmMgc2VydmNvbmYuaCBzc2hkLmMgc3NoZF9jb25maWcgc3NoZF9jb25maWcuNV0KICAgICBieiAjODk4OiBzdXBwb3J0IEFkZHJlc3NGYW1pbHkgaW4gc3NoZF9jb25maWcuIGZyb20KICAgICBwZWFrQGFyZ28udHJvamEubWZmLmN1bmkuY3o7IG9rIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAxLzA1IDA4OjUxOjMyCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICByZW1vdmUgZGVhZCBjb2RlLCBsb2cgY29ubmVjdCgpIGZhaWx1cmVzIHdpdGggbGV2ZWwgZXJyb3IsIG9rIGRqbUAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMDggMDA6NDE6MTkKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBgbG9naW4nKG4pIC0+IGBsb2cgaW4nKHYpOwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMTcgMDM6MjU6NDYKICAgICBbbW9kdWxpLmNdCiAgICAgQ29ycmVjdCBzcGVsbGluZzogU0NITk9PUi0+U0NITk9SUjsgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDUvMDEvMTcgMjI6NDg6MzkKICAgICBbc3NoZC5jXQogICAgIE1ha2UgZGVidWdnaW5nIG91dHB1dCBjb250aW51ZSBhZnRlciByZWV4ZWM7IG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA1LzAxLzE5IDEzOjExOjQ3CiAgICAgW2F1dGgtYnNkYXV0aC5jIGF1dGgyLWNoYWxsLmNdCiAgICAgSGF2ZSBrZXlib2FyZC1pbnRlcmFjdGl2ZSBjb2RlIGNhbGwgdGhlIGRyaXZlcnMgZXZlbiBmb3IgcmVzcG9uc2VzIGZvcgogICAgIGludmFsaWQgbG9naW5zLiAgVGhpcyBhbGxvd3MgdGhlIGRyaXZlcnMgdGhlbXNlbHZlcyB0byBkZWNpZGUgaG93IHRvCiAgICAgaGFuZGxlIHRoZW0gYW5kIHByZXZlbnQgbGVha2luZyBpbmZvcm1hdGlvbiB3aGVyZSBwb3NzaWJsZS4gIEV4aXN0aW5nCiAgICAgYmVoYXZpb3VyIGZvciBic2RhdXRoIGlzIG1haW50YWluZWQgYnkgY2hlY2tpbmcgYXV0aGN0eHQtPnZhbGlkIGluIHRoZQogICAgIGJzZGF1dGggZHJpdmVyLiAgTm90ZSB0aGF0IGFueSB0aGlyZC1wYXJ0eSBrYmRpbnQgZHJpdmVycyB3aWxsIG5vdyBuZWVkCiAgICAgdG8gYmUgYWJsZSB0byBoYW5kbGUgcmVzcG9uc2VzIGZvciBpbnZhbGlkIGxvZ2lucy4gIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTIvMjIgMDI6MTM6MTkKICAgICBbY2lwaGVyLWN0ci5jIGNpcGhlci5jXQogICAgIHJlbW92ZSBmYWxsYmFjayBBRVMgc3VwcG9ydCBmb3Igb2xkIE9wZW5TU0wsIGFzIE9wZW5CU0QgaGFzIGhhZCBpdCBmb3IKICAgICBtYW55IHllYXJzIG5vdzsgb2sgZGVyYWFkdEAKICAgICAoSWQgc3luYyBvbmx5OiBQb3J0YWJsZSB3aWxsIGNvbnRpbnVlIHRvIHN1cHBvcnQgb2xkZXIgT3BlblNTTHMpCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gQnVnICM5NzE6IFByZXZlbnQgbGVha2luZyBpbmZvcm1hdGlvbiBhYm91dCB1c2VyCiAgIGV4aXN0ZW5jZSB2aWEga2V5Ym9hcmQtaW50ZXJhY3RpdmUvcGFtLCBpbiBjb25qdW5jdGlvbiB3aXRoIHByZXZpb3VzCiAgIGF1dGgyLWNoYWxsLmMgY2hhbmdlOyB3aXRoIENvbGluIFdhdHNvbiBhbmQgZGptLgogLSAoZHR1Y2tlcikgW2xvZ2lucmVjLmhdIEJ1ZyAjOTUyOiBJbmNyZWFzZSBzaXplIG9mIHVzZXJuYW1lIGZpZWxkIHRvIDEyOAogICBieXRlcyB0byBwcmV2ZW50IGVycm9ycyBmcm9tIGxvZ2luX2luaXRfZW50cnkoKSB3aGVuIHRoZSB1c2VybmFtZSBpcwogICBleGFjdGx5IDY0IGJ5dGVzKCEpIGxvbmcuICBGcm9tIGJyaGFtb24gYXQgY2lzY28uY29tLCBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1jaGFsbC5jIGF1dGguaCBhdXRoMi1jaGFsbC5jXSBCdWcgIzkzNjogUmVtb3ZlIHBhbSBmcm9tCiAgIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBrYmRpbnQgZGV2aWNlcyBpZiBVc2VQQU09bm8uICBvayBkam1ACgoyMDA1MDExOAogLSAoZHR1Y2tlcikgW0lOU1RBTEwgTWFrZWZpbGUuaW4gY29uZmlndXJlLmFjIHN1cnZleS5zaC5pbl0gSW1wbGVtZW50CiAgICJtYWtlIHN1cnZleSIgYW5kICJtYWtlIHNlbmQtc3VydmV5Ii4gIFRoaXMgd2lsbCBwcm92aWRlIGRhdGEgb24gdGhlCiAgIGNvbmZpZ3VyZSBwYXJhbWV0ZXJzLCBwbGF0Zm9ybSBhbmQgcGxhdGZvcm0gZmVhdHVyZXMgdG8gdGhlIGRldmVsb3BtZW50CiAgIHRlYW0sIHdoaWNoIHdpbGwgYWxsb3cgKGFtb25nIG90aGVyIHRoaW5ncykgYmV0dGVyIHRhcmdldHRpbmcgb2YgdGVzdGluZy4KICAgSXQncyBlbnRpcmVseSB2b2x1bnRhcnkgYW5kIGlzIG9mZiBiZSBkZWZhdWx0LiBvayBkam1ACiAtIChkdHVja2VyKSBbc3VydmV5LnNoLmluXSBSZW1vdmUgYW55IGJsYW5rIGxpbmVzIGZyb20gdGhlIG91dHB1dCBvZgogICBjY3Zlci12IGFuZCBjY3Zlci1WLgoKMjAwNDEyMjAKIC0gKGR0dWNrZXIpIFtzc2gtcmFuZC1oZWxwZXIuY10gRmFsbCBiYWNrIHRvIGNvbW1hbmQtYmFzZWQgc2VlZGluZyBpZiByZWFkaW5nCiAgIGZyb20gcHJuZ2QgaXMgZW5hYmxlZCBhdCBjb21waWxlIHRpbWUgYnV0IGZhaWxzIGF0IHJ1biB0aW1lLCBlZyBiZWNhdXNlCiAgIHBybmdkIGlzIG5vdCBydW5uaW5nLiAgTm90ZSB0aGF0IGlmIHlvdSBoYXZlIHBybmdkIHJ1bm5pbmcgd2hlbiBPcGVuU1NIIGlzCiAgIGJ1aWx0LCBPcGVuU1NMIHdpbGwgY29uc2lkZXIgaXRzZWxmIGludGVybmFsbHkgc2VlZGVkIGFuZCByYW5kLWhlbHBlciB3b24ndAogICBiZSBidWlsdCBhdCBhbGwgdW5sZXNzIGV4cGxpY2l0bHkgZW5hYmxlZCB2aWEgLS13aXRoLXJhbmQtaGVscGVyLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvcmVrZXkuc2hdIFRvdWNoIGRhdGFmaWxlIGJlZm9yZSBmaWxsaW5nIHdpdGggZGQsIHNpbmNlCiAgIG9uIHNvbWUgd2Fja3kgcGxhdGZvcm1zIChlZyBvbGQgQUlYZXMpLCBkZCB3aWxsIHJlZnVzZSB0byBjcmVhdGUgYW4gb3V0cHV0CiAgIGZpbGUgaWYgaXQgZG9lc24ndCBleGlzdC4KCjIwMDQxMjEzCiAtIChkdHVja2VyKSBbY29udHJpYi9maW5kc3NoLnNoXSBDbGVhbiB1cCBvbiBpbnRlcnJ1cHQ7IGZyb20KICAgYW1hcmVuZHJhLmdvZGJvbGUgYXQgZ2UgY29tLgoKMjAwNDEyMTEKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTIvMDYgMTY6MDA6NDMKICAgICBbYnVmYXV4LmNdCiAgICAgdXNlIDB4MDAgbm90IFwwIHNpbmNlIGJ1ZltdIGlzIGEgYmlnbnVtCiAgIC0gZmdzY2hAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTIvMTAgMDM6MTA6NDIKICAgICBbc2Z0cC5jXQogICAgIC0gZml4IGdsb2JiZWQgbHMgZm9yIHBhdGhzIHRoZSBzYW1lIGxlbmdodCBhcyB0aGUgZ2xvYmJlZCBwYXRoIHdoZW4KICAgICAgIHdlIGhhdmUgYSB1bmlxdWUgbWF0Y2hpbmcuCiAgICAgLSBmaXggZ2xvYmJlZCBscyBpbiBjYXNlIG9mIGEgZGlyZWN0b3J5IHdoZW4gd2UgaGF2ZSBhIHVuaXF1ZSBtYXRjaGluZy4KICAgICAtIGFzIGEgc2lkZSBlZmZlY3QsIGlmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0IGVycm9yICh1c2VkIHRvIHNpbGVudGx5CiAgICAgICBpZ25vcmUpLgogICAgIC0gZG9uJ3QgZG8gZXh0cmEgZG9fbHN0YXQoKSBpZiB3ZSBvbmx5IGhhdmUgb25lIG1hdGNoaW5nIGZpbGUuCiAgICAgZGptQCBvawogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTIvMTEgMDE6NDg6NTYKICAgICBbYXV0aC1yc2EuYyBhdXRoMi1wdWJrZXkuYyBhdXRoZmlsZS5jIG1pc2MuYyBtaXNjLmhdCiAgICAgRml4IGRlYnVnIGNhbGwgaW4gZXJyb3IgcGF0aCBvZiBhdXRob3JpemVkX2tleXMgcHJvY2Vzc2luZyBhbmQgZml4IHJlbGF0ZWQKICAgICB3YXJuaW5nczsgb2sgZGptQAoKMjAwNDEyMDgKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQ29tbWVudCBzb21lIG5vbiBvYnZpb3VzIHBsYXRmb3JtcyBpbiB0aGUKIHRhcmdldC1zcGVjaWZpYyBjYXNlIHN0YXRlbWVudC4gU3VnZ2VzdGVkIGFuZCBPSyBieSBkdHVja2VyQAoKMjAwNDEyMDcKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL3NjcC5zaF0gVXNlIHBvcnRhYmxlLWZyaWVuZGx5ICRESUZGT1BUcyBpbiBuZXcgdGVzdC4KCjIwMDQxMjA2CiAtIChkdHVja2VyKSBbVE9ETyBXQVJOSU5HLlJOR10gVXBkYXRlIHRvIHJlZmxlY3QgY3VycmVudCByZWFsaXR5LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8xMS8yNSAyMjoyMjoxNAogICAgIFtzZnRwLWNsaWVudC5jIHNmdHAuY10KICAgICBsZWFrOyBmcm9tIG1wZWNoCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzExLzI5IDAwOjA1OjE3CiAgICAgW3NmdHAuMV0KICAgICBtaXNzaW5nIGZ1bGwgc3RvcDsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTEvMjkgMDc6NDE6MjQKICAgICBbc2Z0cC1jbGllbnQuaCBzZnRwLmNdCiAgICAgU29tZSBzbWFsbCBmaXhlcyBmcm9tIG1vcml0ekBqb2RlaXQub3JnLiBvayBkZXJhYWR0QAogICAtIGphcmVkeUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMi8wNSAyMzo1NTowNwogICAgIFtzZnRwLjFdCiAgICAgLSBleHBsYWluIHRoYXQgcGF0dGVybnMgY2FuIGJlIHVzZWQgYXMgYXJndW1lbnRzIGluIGdldC9wdXQvbHMvZXRjCiAgICAgICBjb21tYW5kcyAocHJvZGRlZCBieSBNaWNoYWVsIEtudWRzZW4pCiAgICAgLSBkZXNjcmliZSBscyBmbGFncyBhcyBhIGxpc3QKICAgICAtIG90aGVyIG1pbm9yIGltcHJvdmVtZW50cwogICAgIG9rIGptYywgZGptCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMi8wNiAxMTo0MTowMwogICAgIFthdXRoLXJzYS5jIGF1dGgyLXB1YmtleS5jIGF1dGhmaWxlLmMgbWlzYy5jIG1pc2MuaCBzc2guaCBzc2hkLjhdCiAgICAgRGlzY2FyZCBvdmVyLWxlbmd0aCBhdXRob3JpemVkX2tleXMgZW50cmllcyByYXRoZXIgdGhhbiBjb21wbGFpbmluZyB3aGVuCiAgICAgdGhleSBkb24ndCBkZWNvZGUuICBieiAjODg0LCB3aXRoICYgb2sgZGptQAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYyAocmVncmVzcy8pCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI2IDA2OjE2OjA3CiAgICAgW3JlZXhlYy5zaF0KICAgICBkb24ndCBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIGNvcGllZCBzc2hkIGZvciB0aGUgcmVleGVjIGZhbGxiYWNrIHRlc3QsCiAgICAgbWFrZXMgbGlmZSBzaW1wbGVyIGZvciBwb3J0YWJsZQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMDggMTI6NTk6MzUKICAgICBbc2NwLnNoXQogICAgIFJlZ3Jlc3MgdGVzdCBmb3IgYnogIzg2MyAoc2NwIGRvdWJsZS1lcnJvciksIHJlcXVpcmVzICRTVURPLiAgb2sgbWFya3VzQAogICAtIGRhdmlkQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA3LzA5IDE5OjQ1OjQzCiAgICAgW01ha2VmaWxlXQogICAgIGFkZCBhIG1pc3NpbmcgQ0xFQU5GSUxFUyB1c2VkIGluIHRoZSByZS1leGVjIHRlc3QKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTAvMDggMDI6MDE6NTAKICAgICBbcmVleGVjLnNoXQogICAgIHNocmluayBhbmQgdGlkeTsgb2sgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTAvMjkgMjM6NTk6MjIKICAgICBbTWFrZWZpbGUgYWRkZWQgYnJva2Vua2V5cy5zaF0KICAgICByZWdyZXNzaW9uIHRlc3QgZm9yIGhhbmRsaW5nIG9mIGNvcnJ1cHQga2V5cyBpbiBhdXRob3JpemVkX2tleXMgZmlsZQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMS8wNyAwMDozMjo0MQogICAgIFttdWx0aXBsZXguc2hdCiAgICAgcmVncmVzc2lvbiB0ZXN0cyBmb3IgbmV3IG11bHRpcGxleCBjb21tYW5kcwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTEvMjUgMDk6Mzk6MjcKICAgICBbdGVzdC1leGVjLnNoXQogICAgIFJlbW92ZSBvYnNvbGV0ZSBSaG9zdHNBdXRoZW50aWNhdGlvbiBmcm9tIHRlc3QgY29uZmlnOyBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMi8wNiAxMDo0OTo1NgogICAgIFt0ZXN0LWV4ZWMuc2hdCiAgICAgQ2hlY2sgaWYgVEVTVF9TU0hfU1NIRCBpcyBhIGZ1bGwgcGF0aCB0byBzc2hkIGJlZm9yZSBzZWFyY2hpbmc7IG9rIG1hcmt1c0AKCjIwMDQxMjAzCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzExLzA3IDE3OjQyOjM2CiAgICAgW3NzaC4xXQogICAgIG9wdGlvbnMgc29ydCwgYW5kIHdoaXRlc3BhY2U7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzExLzA3IDE3OjU3OjMwCiAgICAgW3NzaC5jXQogICAgIHVzYWdlKCk6CiAgICAgLSBhZGQgLU8KICAgICAtIHN5bmMgLVMgdy8gbWFucGFnZQogICAgIC0gcmVtb3ZlIC1oCiAtIChkdHVja2VyKSBbYXV0aDEuYyBhdXRoMi5jXSBJZiB0aGUgdXNlciBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlcyBidXQgaXMKICAgc3Vic2VxdWVudGx5IGRlbmllZCBieSB0aGUgUEFNIGF1dGggc3RhY2ssIHNlbmQgdGhlIFBBTSBtZXNzYWdlIHRvIHRoZQogICB1c2VyIHZpYSBwYWNrZXRfZGlzY29ubmVjdCAoUHJvdG9jb2wgMSkgb3IgdXNlcmF1dGhfYmFubmVyIChQcm90b2NvbCAyKS4KICAgb2sgZGptQAoKMjAwNDExMDcKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTEvMDUgMTI6MTk6NTYKICAgICBbc2Z0cC5jXQogICAgIGNvbW1hbmQgZWRpdGluZyBhbmQgaGlzdG9yeSBzdXBwb3J0IHZpYSBsaWJlZGl0OyBvayBtYXJrdXNACiAgICAgdGhhbmtzIHRvIGhzaG9leGVyQCBhbmQgbWFueSB0ZXN0ZXJzIG9uIHRlY2hAIHRvbwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMS8wNyAwMDowMTo0NgogICAgIFtjbGllbnRsb29wLmMgY2xpZW50bG9vcC5oIHNzaC4xIHNzaC5jXQogICAgIGFkZCBiYXNpYyBjb250cm9sIG9mIGEgcnVubmluZyBtdWx0aXBsZXggbWFzdGVyIGNvbm5lY3Rpb247IGluY2x1ZGluZyB0aGUKICAgICBhYmlsaXR5IHRvIGNoZWNrIGl0cyBzdGF0dXMgYW5kIHJlcXVlc3QgaXQgdG8gZXhpdDsgb2sgbWFya3VzQAogLSAoZHR1Y2tlcikgW0lOU1RBTEwgTWFrZWZpbGUuaW4gY29uZmlndXJlLmFjXSBBZGQgLS13aXRoLWxpYmVkaXQgY29uZmlndXJlCiAgIG9wdGlvbiBhbmQgc3VwcG9ydGluZyBtYWtlZmlsZSBiaXRzIGFuZCBkb2N1bWVudGF0aW9uLgoKMjAwNDExMDUKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMzAgMDk6MTg6MDgKICAgICBbTElDRU5DRV0KICAgICBzL2tleWdlbi9rZXlzY2FuLwogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wOC8zMCAyMToyMjo0OQogICAgIFtzc2gtYWRkLjEgc3NoLjFdCiAgICAgLlhzZXNzaW9uIC0+IC54c2Vzc2lvbjsKICAgICBvcmlnaW5hbGx5IGZyb20gYSBwciBmcm9tIGYgYXQgb2JpaXQgZG90IG9yZywgYnV0IG1pc3NlZCBieSBteXNlbGY7CiAgICAgb2sgbWFya3VzQCBtYXR0aGlldUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDkvMDcgMjM6NDE6MzAKICAgICBbY2xpZW50bG9vcC5jIHNzaC5jXQogICAgIGNsZWFudXAgbXVsdGlwbGV4IGNvbnRyb2wgc29ja2V0IG9uIFNJR0hVUCB0b28sIHNwb3R0ZWQgYnkgc3R1cm1ACiAgICAgb2sgbWFya3VzQCBkZXJhYWR0QAogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDkvMTUgMDA6NDY6MDEKICAgICBbc3NoLmNdCiAgICAgLyogZmFsbHRocm91Z2ggKi8gaXMgc29tZXRoaW5nIGEgcHJvZ3JhbW1lciB1bmRlcnN0YW5kcy4gIEJ1dAogICAgIC8qIEZBTExUSFJPVUdIICovIGlzIGFsc28gdW5kZXJzdG9vZCBieSBsaW50LCBzbyB0aGF0IGlzIGJldHRlci4KICAgLSBqYXJlZHlAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDkvMTUgMDM6MjU6NDEKICAgICBbc3NoZF9jb25maWcuNV0KICAgICBtZW50aW9uIFByaW50TGFzdExvZyBvbmx5IHByaW50cyBsYXN0IGxvZ2luIHRpbWUgZm9yIGludGVyYWN0aXZlCiAgICAgc2Vzc2lvbnMsIGxpa2UgUHJpbnRNb3RkIG1lbnRpb25zLgogICAgIEZyb20gTWljaGFlbCBLbnVkc2VuLCB3aXRoIHdvcmRpbmcgY2hhbmdlZCBzbGlnaHRseSB0byBtYXRjaCB0aGUKICAgICBQcmludE1vdGQgZGVzY3JpcHRpb24uCiAgICAgb2sgZGptCiAgIC0gbWlja2V5QGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA5LzE1IDE4OjQyOjI3CiAgICAgW3NzaGQuY10KICAgICB1c2UgbGVzcyBkb3VibGVzIGluIGRhZW1vbnM7IG1hcmt1c0Agb2sKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA5LzE1IDE4OjQ2OjA0CiAgICAgW3NjcC5jXQogICAgIHNjcmF0Y2ggdGhhdCBkbyB7IH0gd2hpbGUgKDApIHdyYXBwZXIgaW4gdGhpcyBjYXNlCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA5LzIzIDEzOjAwOjA0CiAgICAgW3NzaC5jXQogICAgIGNvcnJlY3RseSBob25vdXIgLW4gaW4gbXVsdGlwbGV4IGNsaWVudCBtb2RlOyBzcG90dGVkIGJ5IHN0dXJtQCBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA5LzI1IDAzOjQ1OjE0CiAgICAgW3NzaGQuY10KICAgICB0aGVzZSBwcmludGYgYXJncyBhcmUgbm8gbG9uZ2VyIGRvdWJsZTsgb2sgZGVyYWFkdEAgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMC8wNyAxMDoxMDoyNAogICAgIFtzY3AuMSBzZnRwLjEgc3NoLjEgc3NoX2NvbmZpZy41XQogICAgIGRvY3VtZW50IEtiZEludGVyYWN0aXZlRGV2aWNlczsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8xMC8wNyAxMDoxMjozNgogICAgIFtzc2gtYWdlbnQuY10KICAgICBkb24ndCB1bmxpbmsgYWdlbnQgc29ja2V0IHdoZW4gYmluZCgpIGZhaWxzLCBzcG90dGVkIGJ5IHJpY2ggQVQKICAgICByaWNoLXBhdWwubmV0LCBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEwLzIwIDExOjQ4OjUzCiAgICAgW3BhY2tldC5jIHNzaDEuaF0KICAgICBkaXNjb25uZWN0IGZvciBpbnZhbGlkIChvdXQgb2YgcmFuZ2UpIG1lc3NhZ2UgdHlwZXMuCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEwLzI5IDIxOjQ3OjE1CiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmNdCiAgICAgZml4IHNvbWUgd2luZG93IHNpemUgY2hhbmdlIGJ1Z3MgZm9yIG11bHRpcGxleGVkIGNvbm5lY3Rpb25zOiB3aW5kb3dzIHNpemVzCiAgICAgd2VyZSBub3QgYmVpbmcgdXBkYXRlZCBpZiB0aGV5IGhhZCBjaGFuZ2VkIGFmdGVyIH5eWiBzdXNwZW5kcyBhbmQgU0lHV0lOQ0gKICAgICB3YXMgbm90IGJlaW5nIHByb2Nlc3NlZCB1bmxlc3MgdGhlIGZpcnN0IGNvbm5lY3Rpb24gaGFkIHJlcXVlc3RlZCBhIHR0eTsKICAgICBvayBtYXJrdXMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTAvMjkgMjI6NTM6NTYKICAgICBbY2xpZW50bG9vcC5jIG1pc2MuaCByZWFkcGFzcy5jIHNzaC1hZ2VudC5jXQogICAgIGZhY3RvciBvdXQgY29tbW9uIHBlcm1pc3Npb24tYXNraW5nIGNvZGUgdG8gc2VwYXJhdGUgZnVuY3Rpb247IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMTAvMjkgMjM6NTY6MTcKICAgICBbYnVmYXV4LmMgYnVmYXV4LmggYnVmZmVyLmMgYnVmZmVyLmhdCiAgICAgaW50cm9kdWNlIGEgbmV3IGJ1ZmZlciBBUEkgdGhhdCByZXR1cm5zIGFuIGVycm9yIHJhdGhlciB0aGFuIGZhdGFsKClpbmcKICAgICB3aGVuIHByZXNlbnRlZCB3aXRoIGJhZCBkYXRhOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzEwLzI5IDIzOjU3OjA1CiAgICAgW2tleS5jXQogICAgIHVzZSBuZXcgYnVmZmVyIEFQSSB0byBhdm9pZCBmYXRhbCBlcnJvcnMgb24gY29ycnVwdCBrZXlzIGluIGF1dGhvcml6ZWRfa2V5cwogICAgIGZpbGVzOyBvayBtYXJrdXNACgoyMDA0MTEwMgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBpbmNsdWRlcy5oXSBCdWcgIzk0NzogRml4IGNvbXBpbGUgZXJyb3Igb24gSFAtVVgKICAgMTAueCBieSB0ZXN0aW5nIGZvciBjb25mbGljdHMgaW4gc2hhZG93LmggYW5kIHVuZGVmJ2luZyBfSU5DTFVERV9fU1REQ19fCiAgIG9ubHkgaWYgYSBjb25mbGljdCBpcyBkZXRlY3RlZC4KCjIwMDQxMDE5CiAtIChkdHVja2VyKSBbdWlkc3dhcC5jXSBEb24ndCB0ZXN0IGRyb3BwaW5nIG9mIGdpZHMgZm9yIHRoZSByb290IHVzZXIgb3IKICAgb24gQ3lnd2luLiAgQ3lnd2luIHBhcnRzIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0IGNvbTsgb2sgZGptQAoKMjAwNDEwMTYKIC0gKGRqbSkgW2F1dGgtcGFtLmNdIHNucHJpbnRmLT5zdHJsKiwgZml4IHNlcnZlciBtZXNzYWdlIGxlbmd0aCBjYWxjdWxhdGlvbnM7CiAgIG9rIGR0dWNrZXJACgoyMDA0MTAwNgogLSAoZHR1Y2tlcikgW1JFQURNRS5wcml2c2VwXSBCdWcgIzkzOTogdXBkYXRlIGluZm8gYWJvdXQgSFAtVVggVHJ1c3RlZCBNb2RlCiAgIGFuZCBvdGhlciBQQU0gcGxhdGZvcm1zLgogLSAoZHR1Y2tlcikgW21vbml0b3JfbW0uYyBvcGVuYnNkLWNvbXBhdC94bW1hcC5jXSBCdWcgIzk0MDogY2FzdCBjb25zdGFudHMKICAgdG8gdm9pZCAqIHRvIGFwcGVhc2UgcGlja3kgY29tcGlsZXJzIChlZyBUcnU2NCdzICJjYyAtc3RkMSIpLgoKMjAwNDA5MzAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFNldCBBQ19QQUNLQUdFX05BTUUuICBvayBkam1ACgoyMDA0MDkyMwogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1zbnByaW50Zi5jXSBQcmV2aW91cyBjaGFuZ2Ugd2FzIG9mZiBieSBvbmUsCiAgIHdoaWNoIGNvdWxkIGhhdmUgY2F1c2VkIHRoZSBqdXN0aWZpY2F0aW9uIHRvIGJlIHdyb25nLiAgb2sgZGptQAoKMjAwNDA5MjEKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9ic2Qtc25wcmludGYuY10gQ2hlY2sgZm9yIG1heCBsZW5ndGggdG9vLgogICBvayBkam1ACiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBVcGRhdGUgdG8gbWF0Y2ggY3VycmVudCBDeWd3aW4KICAgaW5zdGFsbCBwcm9jZXNzLiAgUGF0Y2ggZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgoKMjAwNDA5MTIKIC0gKGRqbSkgW2xvZ2lucmVjLmNdIFN0YXJ0IEtORiBhbmQgdGlkeSB1cCBvZiB0aGlzIGxvbmctbmVnbGVjdGVkIGZpbGUuCiAgIE5vIGNoYW5nZSBpbiByZXN1bHRhbnQgYmluYXJ5CiAtIChkam0pIFtsb2dpbnJlYy5jXSBfX2Z1bmNfX2lmaXkKIC0gKGRqbSkgW2xvZ2lucmVjLmNdIHhtYWxsb2MKIC0gKGRqbSkgW3NzaC5jIHNzaGQuYyB2ZXJzaW9uLmhdIERvbid0IGRpdnVsZ2UgcG9ydGFibGUgdmVyc2lvbiBpbiBwcm90b2NvbAogICBiYW5uZXIuIFN1Z2dlc3RlZCBieSBkZXJhYWR0QCwgb2sgbW91cmluZ0AsIGR0dWNrZXJACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBGaXggaW5jb3JyZWN0IHF1b3RpbmcgYW5kIHRlc3RzIGZvciBjcm9zcy1jb21waWxlLgogICBQYXJ0bHkgYnkgJiBvayBkam1ALgoKMjAwNDA5MTEKIC0gKGRqbSkgW3NzaC1hZ2VudC5jXSB1bmlmZGVmIHNvbWUgY3lnd2luIGNvZGU7IG9rIGR0dWNrZXJACiAtIChkdHVja2VyKSBbYXV0aC1wYW0uYyBhdXRoLXBhbS5oIHNlc3Npb24uY10gQnVnICM4OTA6IFNlbmQgb3V0cHV0IGZyb20KICAgZmFpbGluZyBQQU0gc2Vzc2lvbiBtb2R1bGVzIHRvIHVzZXIgdGhlbiBleGl0LCBzaW1pbGFyIHRvIHRoZSB3YXkKICAgL2V0Yy9ub2xvZ2luIGlzIGhhbmRsZWQuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gUmVsb2NhdGUgc3NocGFtX3N0b3JlX2NvbnYoKSwgbm8gY29kZSBjaGFuZ2UuCiAtIChkam0pIFthdXRoMi1rYmRpbnQuYyBhdXRoMi1ub25lLmMgIGF1dGgyLXBhc3N3ZC5jIGF1dGgyLXB1YmtleS5jXSAKICAgTWFrZSBjeWd3aW4gY29kZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGF0IHdoaWNoIHN1cnJvdW5kcyBpdAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmMgYXV0aC5oIGF1dGgyLW5vbmUuYyBhdXRoMi5jIG1vbml0b3IuYyBtb25pdG9yX3dyYXAuY10KICAgQnVnICM4OTI6IFNlbmQgbWVzc2FnZXMgZnJvbSBmYWlsaW5nIFBBTSBhY2NvdW50IG1vZHVsZXMgdG8gdGhlIGNsaWVudCB2aWEKICAgU1NIMl9NU0dfVVNFUkFVVEhfQkFOTkVSIG1lc3NhZ2VzLiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBub3QgaGFwcGVuIHdpdGgKICAgU1NIMiBrYmRpbnQgYXV0aGVudGljYXRpb24sIHdoaWNoIG5lZWQgdG8gYmUgZGVhbHQgd2l0aCBzZXBhcmF0ZWx5LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gQnVnICM5Mjc6IG1ha2UgLmh1c2hsb2dpbiBzaWxlbnQgYWdhaW4uICBvayBkam1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzMyMTogQWRkIGNyb3NzLWNvbXBpbGUgc3VwcG9ydCB0byBjb25maWd1cmUuCiAgIFBhcnRzIGJ5IGNodWEgYXQgYXlybmV0d29ya3MuY29tLCBhc3RyYW5kIGF0IGx5c2F0b3IubGl1LnNlIGFuZCBtZS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLWtyYjUuY10gQnVnICM5MjI6IFBhc3MgS1JCNUNDTkFNRSB0byBQQU0uICBGcm9tIGRlZW5nZXJ0CiAgIGF0IGFubC5nb3YsIG9rIGRqbUAKCjIwMDQwODMwCiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jIG9wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC57YyxofV0gQnVnICM5MTU6IG9ubHkKICAgY29weSByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gQ3lnd2luLiAgUGF0Y2ggZnJvbSB2aW5zY2hlbiBhdAogICByZWRoYXQuY29tLCBvayBkam1ACiAtIChkdHVja2VyKSBbcmVncmVzcy9NYWtlZmlsZV0gQ2xlYW4gc2NwLXNzaC13cmFwcGVyLnNjcCB0b28uICBQYXRjaCBmcm9tCiAgIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbTWFrZWZpbGUuaW4gY29udHJpYi9zc2gtY29weS1pZF0gQnVnICM4OTQ6IEltcHJvdmUgcG9ydGFiaWxpdHkKICAgb2Ygc2hlbGwgY29uc3RydWN0cy4gIFBhdGNoIGZyb20gY2p3YXRzb24gYXQgZGViaWFuLm9yZy4KCjIwMDQwODI5CiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gUHJldmVudCBnZXRycnNldGJ5bmFtZSBmcm9tCiAgIGZhaWxpbmcgd2l0aCBOT01FTU9SWSBpZiBubyBzaWdzIGFyZSByZXR1cm5lZCBhbmQgbWFsbG9jKDApIHJldHVybnMgTlVMTC4KICAgRnJvbSBNYXJ0aW4uS3JhZW1lciBhdCBGdWppdHN1LVNpZW1lbnMuY29tOyBvayBkam1ACiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzIzIDExOjQ4OjA5CiAgICAgW2F1dGhmaWxlLmNdCiAgICAgZml4IGVycm9yIHBhdGgsIHNwb3R0ZWQgYnkgTWFydGluLktyYWVtZXIgQVQgRnVqaXRzdS1TaWVtZW5zLmNvbTsgb2sgbWFya3VzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzIzIDExOjQ4OjQ3CiAgICAgW2NoYW5uZWxzLmNdCiAgICAgdHlwbywgc3BvdHRlZCBieSBNYXJ0aW4uS3JhZW1lciBBVCBGdWppdHN1LVNpZW1lbnMuY29tOyBvayBtYXJrdXMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzIzIDE0OjI2OjM4CiAgICAgW3NzaC1rZXlzaWduLmMgc3NoLmNdCiAgICAgVXNlIHBlcm1hbmVudGx5X3NldF91aWQoKSBpbiBzc2ggYW5kIHNzaC1rZXlzaWduIGZvciBjb25zaXN0ZW5jeSwgbWF0Y2hlcwogICAgIGNoYW5nZSBpbiBQb3J0YWJsZTsgb2sgbWFya3VzQCAoQ1ZTIElEIHN5bmMgb25seSkKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzIzIDE0OjI5OjIzCiAgICAgW3NzaC1rZXlzaWduLmNdCiAgICAgUmVtb3ZlIGR1cGxpY2F0ZSBnZXR1aWQoKSwgc3VnZ2VzdGVkIGJ5ICYgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wOC8yNiAxNjowMDo1NQogICAgIFtzc2guMSBzc2hkLjhdCiAgICAgZ2V0IHJpZCBvZiByZWZlcmVuY2VzIHRvIHJob3N0cyBhdXRoZW50aWNhdGlvbjsgd2l0aCBqbWNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzI4IDAxOjAxOjQ4CiAgICAgW3NzaGQuY10KICAgICBkb24ndCBlcnJvbmVvdXNseSBjbG9zZSBzdGRpbiBmb3IgIXJlZXhlYyBjYXNlLCBmcm9tIERhdmUgSm9obnNvbjsKICAgICBvayBtYXJrdXNACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBJbmNsdWRlIHN5cy9zdHJlYW0uaCBpbiBzeXMvcHRtcy5oIGhlYWRlciBjaGVjaywKICAgZml4ZXMgY29uZmlndXJlIHdhcm5pbmcgb24gU29sYXJpcyByZXBvcnRlZCBieSB3a25veCBhdCBtaXRyZS5vcmcuCiAtIChkdHVja2VyKSBbcmVncmVzcy9tdWx0aXBsZXguc2hdIFNraXAgdGVzdCBvbiBwbGF0Zm9ybXMgdGhhdCBkbyBub3QKICAgc3VwcG9ydCBGRCBwYXNzaW5nIHNpbmNlIG11bHRpcGxleCByZXF1aXJlcyBpdC4gIE5vdGVkIGJ5IHRpbUAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2R5bmFtaWMtZm9yd2FyZC5zaF0gQWxsb3cgdGltZSBmb3IgY29ubmVjdGlvbnMgdG8gYmUgdG9ybgogICBkb3duLCBuZWVkZWQgb24gc29tZSBwbGF0Zm9ybXMsIHNob3VsZCBiZSBoYXJtbGVzcyBvbiBvdGhlcnMuICBQYXRjaCBmcm9tCiAgIGphc29uIGF0IGRldnJhbmRvbS5vcmcuCiAtIChkdHVja2VyKSBbcmVncmVzcy9zY3Auc2hdIE1ha2UgdGhpcyB3b3JrIG9uIEN5Z3dpbiB0b28sIHdoaWNoIGRvZXNuJ3QgbGlrZQogICBmaWxlcyBlbmRpbmcgaW4gLmV4ZSB0aGF0IGFyZW4ndCBiaW5hcmllczsgcGF0Y2ggZnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluXSBHZXQgcmVncmVzcy9NYWtlZmlsZSBzeW1saW5rIHJpZ2h0IGZvciBvdXQtb2YtdHJlZQogICBidWlsZHMgdG9vLCBmcm9tIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbcmVncmVzcy9hZ2VudC1wdHJhY2Uuc2hdIFNraXAgcHRyYWNlIHRlc3Qgb24gT1NGMS9EVW5peC9UcnU2NAogICB0b287IHBhdGNoIGZyb20gY21hZGFtcyBhdCBoaXdhYXkubmV0LgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gUmVwbGFjZSBub24tcG9ydGFibGUgZWNobyBcbiB3aXRoIGV4dHJhIGVjaG8uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gQnVnICM3MTI6IEV4cGxpY2l0bHkgY2hlY2sgZm9yCiAgIGFjY291bnRzIHdpdGggYXV0aGVudGljYXRpb24gY29uZmlncyB0aGF0IHNzaGQgY2FuJ3Qgc3VwcG9ydCAoaWUKICAgU1lTVEVNPU5PTkUgYW5kIEFVVEgxPXNvbWV0aGluZykuCgoyMDA0MDgyOAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L21rdGVtcC5jXSBSZW1vdmUgc3VwZXJmbHVvdXMgQ3lnd2luICNpZmRlZjsgZnJvbQogICB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgoKMjAwNDA4MjMKIC0gKGRqbSkgW3NzaC1yYW5kLWhlbHBlci5jXSBUeXBvLiBGb3VuZCBieSAKICAgTWFydGluLktyYWVtZXIgQVQgRnVqaXRzdS1TaWVtZW5zLmNvbQogLSAoZGptKSBbbG9naW5yZWMuY10gVHlwbyBhbmQgYmFkIGFyZ3MgaW4gZXJyb3IgbWVzc2FnZXM7IFNwb3R0ZWQgYnkgCiAgIE1hcnRpbi5LcmFlbWVyIEFUIEZ1aml0c3UtU2llbWVucy5jb20KCjIwMDQwODE3CiAtIChkdHVja2VyKSBbcmVncmVzcy9SRUFETUUucmVncmVzc10gTm90ZSBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIEdOVSBoZWFkLgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzE2IDA4OjE3OjAxCiAgICAgW3ZlcnNpb24uaF0KICAgICAzLjkKIC0gKGRqbSkgQ3JhbmsgUlBNIHNwZWMgdmVyc2lvbiBudW1iZXJzCiAtIChkam0pIFJlbGVhc2UgMy45cDEKCjIwMDQwODE2CiAtIChkdHVja2VyKSBbYWNjb25maWcuaCBhdXRoLXBhbS5jIGNvbmZpZ3VyZS5hY10gU2V0IHJlYWwgdWlkIHRvIG5vbi1yb290CiAgIHRvIGNvbnZpbmNlIFNvbGFyaXMgUEFNIHRvIGhvbm91ciBwYXNzd29yZCBjb21wbGV4aXR5IHJ1bGVzLiAgb2sgZGptQAoKMjAwNDA4MTUKIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbiBzc2gta2V5c2lnbi5jIHNzaC5jXSBVc2UgcGVybWFuZW50bHlfc2V0X3VpZCgpIHNpbmNlCiAgIGl0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIG9uIGFsbCBwbGF0Zm9ybXMuICBvayBkam1ACiAtIChkam0pIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9NYWtlZmlsZS5pbiAKICAgb3BlbmJzZC1jb21wYXQvYnNkLWNsb3NlZnJvbS5jIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmMgCiAgIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmggb3BlbmJzZC1jb21wYXQvb3BlbmJzZC1jb21wYXQuaF0gVXNlIHNtYXJ0ZXIgCiAgIGNsb3NlZnJvbSgpIHJlcGxhY2VtZW50IGZyb20gc3Vkbzsgb2sgZHR1Y2tlckAKIC0gKGRqbSkgW2xvZ2lucmVjLmNdIENoZWNrIHRoYXQgc2VlayBzdWNjZWVkZWQgaGVyZSB0b287IG9rIGR0dWNrZXIKIC0gKGR0dWNrZXIpIFtNYWtlZmlsZS5pbl0gRml4IHR5cG8uCgoyMDA0MDgxNAogLSAoZHR1Y2tlcikgW2F1dGgta3JiNS5jIGdzcy1zZXJ2LWtyYjUuYyBvcGVuYnNkLWNvbXBhdC94bW1hcC5jXQogICBFeHBsaWNpdGx5IHNldCB1bWFzayBmb3IgbWtzdGVtcDsgb2sgZGptQAogLSAoZHR1Y2tlcikgW2luY2x1ZGVzLmhdIFVuZGVmIF9JTkNMVURFX19TVERDX18gb24gSFAtVVgsIG90aGVyd2lzZQogICBwcm90LmggYW5kIHNoYWRvdy5oIHByb3ZpZGUgY29uZmxpY3RpbmcgZGVjbGFyYXRpb25zIG9mIGdldHNwbmFtLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2xvZ2lucmVjLmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5oXQogICBQbHVnIEFJWCBsb2dpbiByZWNvcmRpbmcgaW50byBsb2dpbl93cml0ZSBzbyBsb2dpbnMgd2lsbCBiZSByZWNvcmRlZCBmb3IKICAgYWxsIGF1dGggdHlwZXMuCgoyMDA0MDgxMwogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2JzZC1taXNjLmNdIFR5cG8gaW4gI2lmZGVmOyBmcm9tIHZpbnNjaGVuIGF0CiAgIHJlZGhhdC5jb20KLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGF2c21AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTEgMjE6NDM6MDUKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuYyBtaXNjLmMgbWlzYy5oIHNlcnZlcmxvb3AuYyBzc2gtYWdlbnQuY10KICAgICBzb21lIHNpZ25lZC91bnNpZ25lZCBpbnQgY29tcGFyaXNvbiBjbGVhbnVwczsgbWFya3VzQCBvawogICAtIGF2c21AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTEgMjE6NDQ6MzIKICAgICBbYXV0aGZkLmMgc2NwLmMgc3NoLWtleXNjYW4uY10KICAgICB1c2UgYXRvbWljaW8gaW5zdGVhZCBvZiBob21lZ3Jvd24gZXF1aXZhbGVudHMgb3IgcmVhZC93cml0ZS4KICAgICBtYXJrdXNAIG9rCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzEyIDA5OjE4OjI0CiAgICAgW3NzaGxvZ2luLmNdCiAgICAgdHlwbyBpbiBlcnJvciBtZXNzYWdlLCBzcG90dGVkIGJ5IG1vcml0eiBBVCBqb2RlaXQub3JnIChJZCBzeW5jIG9ubHkpCiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTIgMjE6NDE6MTMKICAgICBbc3NoLWtleWdlbi4xIHNzaC4xXQogICAgIGltcHJvdmUgU1NIRlAgZG9jdW1lbnRhdGlvbjsgb2sgZGVyYWFkdEAKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTMgMDA6MDE6NDMKICAgICBbc3NoLWtleWdlbi4xXQogICAgIGtpbGwgd2hpdGVzcGFjZSBhdCBlb2w7CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzEzIDAyOjUxOjQ4CiAgICAgW21vbml0b3JfZmRwYXNzLmNdCiAgICAgZXh0cmEgY2hlY2sgZm9yIG5vIG1lc3NhZ2UgY2FzZTsgb2sgbWFya3VzLCBkZXJhYWR0LCBoc2hvZXhlciwgaGVubmluZwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTMgMTE6MDk6MjQKICAgICBbc2VydmNvbmYuY10KICAgICBGaXggbGluZSBudW1iZXJzIG9mZi1ieS1vbmUgaW4gZXJyb3IgbWVzc2FnZXMsIGZyb20gdG9ydGF5IGF0IGNjLmluMnAzLmZyCiAgICAgb2sgbWFya3VzQCwgZGptQAoKMjAwNDA4MTIKIC0gKGR0dWNrZXIpIFtzc2hkLmNdIFJlbW92ZSBkdXBsaWNhdGUgdmFyaWFibGUgaW1wb3J0ZWQgZHVyaW5nIHN5bmMuCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA3LzI4IDA4OjU2OjIyCiAgICAgW3NzaGQuY10KICAgICBjYWxsIHNldHNpZCgpIF9iZWZvcmVfIHJlLWV4ZWMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMjggMDk6NDA6MjkKICAgICBbYXV0aC5jIGF1dGgxLmMgYXV0aDIuYyBjaXBoZXIuYyBjaXBoZXIuaCBrZXkuYyBzZXNzaW9uLmMgc3NoLmMKICAgICBzc2hjb25uZWN0MS5jXQogICAgIG1vcmUgcy9pbGxlZ2FsL2ludmFsaWQvCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzA0IDEwOjM3OjUyCiAgICAgW2RoLmNdCiAgICAgcmV0dXJuIGdyb3VwMTQgd2hlbiBubyBwcmltZXMgZm91bmQgLSBmaXhlcyBoYW5nIG9uIGVtcHR5IC9ldGMvbW9kdWxpOwogICAgIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzExIDExOjA5OjU0CiAgICAgW3NlcnZjb25mLmNdCiAgICAgRml4IG1pbm9yIGxlYWs7ICJsb29rcyByaWdodCIgZGVyYWFkdEAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzExIDExOjUwOjA5CiAgICAgW3NzaGQuY10KICAgICBEb24ndCB0cnkgdG8gY2xvc2Ugc3RhcnR1cF9waXBlIGlmIGl0J3Mgbm90IG9wZW47IG9rIGRqbUAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDgvMTEgMTE6NTk6MjIKICAgICBbc3NobG9naW4uY10KICAgICBjaGVjayB0aGF0IGxzZWVrIHdlbnQgd2VyZSB3ZSB0b2xkIGl0IHRvOyBvayBtYXJrdXNACiAgICAgKElkIHN5bmMgb25seSwgYnV0IHNpbWlsYXIgY2hhbmdlcyBhcmUgbmVlZGVkIGluIGxvZ2lucmVjLmMpCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA4LzExIDEyOjAxOjE2CiAgICAgW3NzaGxvZ2luLmNdCiAgICAgbWFrZSBzdG9yZV9sYXN0bG9nX21lc3NhZ2UoKSBzdGF0aWMgdG8gYXBwZWFzZSAtV2FsbDsgb2sgbWFya3VzCiAtIChkdHVja2VyKSBbc3NoZC5jXSBDbGVhciBsb2dpbm1zZyBpbiBwb3N0YXV0aCBtb25pdG9yLCBwcmV2ZW50cyBkb3VibGluZwogICAgbWVzc2FnZXMgZ2VuZXJhdGVkIGJlZm9yZSB0aGUgcG9zdGF1dGggcHJpdnNlcCBzcGxpdC4KCjIwMDQwNzIwCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMjEgMDg6NTY6MTIKICAgICBbYXV0aC5jXQogICAgIHMvSWxsZWdhbCB1c2VyL0ludmFsaWQgdXNlci87IG1hbnkgcmVxdWVzdHM7IG9rIGRqbSwgbWlsbGVydCwgbmlrbGFzLAogICAgIG1pb2QsIC4uLgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8yMSAxMDozMzozMQogICAgIFthdXRoMS5jIGF1dGgyLmNdCiAgICAgYnojODk5OiBEb24ndCBkaXNwbGF5IGludmFsaWQgdXNlcm5hbWVzIGluIHNldHByb2N0aXRsZQogICAgIGZyb20gcGVhayBBVCBhcmdvLnRyb2phLm1mZi5jdW5pLmN6OyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA3LzIxIDEwOjM2OjIzCiAgICAgW2dzcy1zZXJ2LWtyYjUuY10KICAgICBmaXggZnVuY3Rpb24gZGVjbGFyYXRpb24KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMjEgMTE6NTE6MjkKICAgICBbY2Fub2hvc3QuY10KICAgICBieiM5MDI6IGNhY2hlIHJlbW90ZSBwb3J0IHNvIHdlIGRvbid0IGZhdGFsKCkgaW4gYXV0aF9sb2cgd2hlbiByZW1vdGUKICAgICBjb25uZWN0aW9uIGdvZXMgYXdheSBxdWlja2x5LiBmcm9tIHBlYWsgQVQgYXJnby50cm9qYS5tZmYuY3VuaS5jejsKICAgICBvayBtYXJrdXNACiAtIChkam0pIFthdXRoLXBhbS5jXSBQb3J0YWJsZSBwYXJ0cyBvZiBieiM4OTk6IERvbid0IGRpc3BsYXkgaW52YWxpZCAKICAgdXNlcm5hbWVzIGluIHNldHByb2N0aXRsZSBmcm9tIHBlYWsgQVQgYXJnby50cm9qYS5tZmYuY3VuaS5jejsKCjIwMDQwNzIwCiAtIChkam0pIFtsb2cuY10gYnogIzExMTogRXNjYXBlIG1vcmUgY29udHJvbCBjaGFyYWN0ZXJzIHdoZW4gc2VuZGluZyBkYXRhIAogICB0byBzeXNsb2c7IGZyb20gcGVhayBBVCBhcmdvLnRyb2phLm1mZi5jdW5pLmN6CiAtIChkam0pIFtjb250cmliL3JlZGhhdC9zc2hkLnBhbV0gYnogIzkwMzogUmVtb3ZlIHJlZHVuZGFudCBlbnRyaWVzOyBmcm9tIAogICBwZWFrIEFUIGFyZ28udHJvamEubWZmLmN1bmkuY3oKIC0gKGRqbSkgW3JlZ3Jlc3MvUkVBRE1FLnJlZ3Jlc3NdIFJlbW92ZSBjYXZlYXQgcmVnYXJkaW5nIFRDUCB3cmFwcGVycywgbm93CiAgIHRoYXQgc3NoZCBpcyBmaXhlZCB0byBiZWhhdmUgYmV0dGVyOyBzdWdnZXN0ZWQgYnkgdGltCgoyMDA0MDcxOQogLSAoZGptKSBbb3BlbmJzZC1jb21wYXQvYnNkLWFyYzRyYW5kb20uY10gRGlzY2FyZCBlYXJseSBrZXlzdHJlYW0sIGxpa2UgT3BlbkJTRAogICBvayBkdHVja2VyQAogLSAoZGptKSBbYXV0aC1wYW0uY10gQXZvaWQgdXNlIG9mIHhzdHJkdXAgYW5kIGZyaWVuZHMgaW4gY29udmVyc2F0aW9uIGZ1bmN0aW9uLAogICBpbnN0ZWFkIHJldHVybiBQQU1fQ09OVl9FUlIsIGF2b2lkaW5nIGFub3RoZXIgcGF0aCB0byBmYXRhbCgpOyBvayBkdHVja2VyQAogLSAodGltKSBbY29uZmlndXJlLmFjXSB1cGR3dG1weCgpIG9uIE9wZW5TZXJ2ZXIgc2VlbXMgdG8gYWRkIGR1cGxpY2F0ZSBlbnRyeS4KICAgUmVwb3J0IGJ5IHJhYyBBVCB0ZW56aW5nLm9yZwoKMjAwNDA3MTcKIC0gKGR0dWNrZXIpIFtsb2dpbnRlc3QuYyBzY3AuYyBzZnRwLXNlcnZlci5jIHNmdHAuYyBzc2gtYWRkLmMgc3NoLWFnZW50LmMKICAgc3NoLWtleWdlbi5jIHNzaC1rZXlzY2FuLmMgc3NoLWtleXNpZ24uYyBzc2gtcmFuZC1oZWxwZXIuYyBzc2guYyBzc2hkLmMKICAgb3BlbmJzZC1jb21wYXQvYnNkLW1pc2MuY10gTW92ZSAiY2hhciAqX19wcm9nbmFtZSIgdG8gYnNkLW1pc2MuYy4gIFJlZHVjZXMKICAgZGlmZiB2cyBPcGVuQlNEOyBvayBtb3VyaW5nQCwgdGVzdGVkIGJ5IHRpbUAgdG9vLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMTEgMTc6NDg6NDcKICAgICBbY2hhbm5lbHMuYyBjaXBoZXIuYyBjbGllbnRsb29wLmMgY2xpZW50bG9vcC5oIGNvbXBhdC5oIG1vZHVsaS5jCiAgICAgcmVhZGNvbmYuYyBuY2hhbi5jIHBhdGhuYW1lcy5oIHByb2dyZXNzbWV0ZXIuYyByZWFkY29uZi5oIHNlcnZjb25mLmMKICAgICBzZXNzaW9uLmMgc2Z0cC1jbGllbnQuYyBzZnRwLmMgc3NoLWFnZW50LjEgc3NoLWtleWdlbi5jIHNzaC5jIHNzaDEuaAogICAgIHNzaGQuYyB0dHltb2Rlcy5oXQogICAgIHNwYWNlcwogICAtIGJyYWRAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMTIgMjM6MzQ6MjUKICAgICBbc3NoLWtleXNjYW4uMV0KICAgICBGaXggaW5jb3JyZWN0IG1hY3JvLCAuSSAtPiAuRW0KICAgICBGcm9tOiBFcmljIFMuIFJheW1vbmQgPGVzciBhdCB0aHlyc3VzIGRvdCBjb20+CiAgICAgb2sgam1jQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMTcgMDU6MzE6NDEKICAgICBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jIHNlc3Npb24uYyBzZXNzaW9uLmggc3NoZC5jIHNzaGxvZ2luLmNdCiAgICAgTW92ZSAiTGFzdCBsb2dnZWQgaW4gYXQuLiIgbWVzc2FnZSBnZW5lcmF0aW9uIHRvIHRoZSBtb25pdG9yLCByaWdodAogICAgIGJlZm9yZSByZWNvcmRpbmcgdGhlIG5ldyBsb2dpbi4gIEZpeGVzIG1pc3NpbmcgbGFzdGxvZyBtZXNzYWdlIHdoZW4KICAgICAvdmFyL2xvZy9sYXN0bG9nIGlzIG5vdCB3b3JsZC1yZWFkYWJsZSBhbmQgaW5jb3JyZWN0IGRhdGVzdGFtcCB3aGVuCiAgICAgbXVsdGlwbGUgc2Vzc2lvbnMgYXJlIHVzZWQgKGJ6ICM0NjMpOyAgbXVjaCBhc3Npc3RhbmNlICYgb2sgbWFya3VzQAoKMjAwNDA3MTEKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBDaGVjayBmb3IgemVybyBmcm9tIHdhaXRwaWQoKSB0b28sIHdoaWNoIGFsbG93cwogICB0aGUgbW9uaXRvciB0byBwcm9wZXJseSBjbGVhbiB1cCB0aGUgUEFNIHRocmVhZCAoRGViaWFuIGJ1ZyAjMjUyNjc2KS4KCjIwMDQwNzA5CiAtICh0aW0pIFtjb250cmliL2N5Z3dpbi9SRUFETUVdIGFkZCBtaW5pcmVzLWRldmVsIHJlcXVpcmVtZW50LiBQYXRjaCBmcm9tCiAgIHZpbnNjaGVuIEFUIHJlZGhhdC5jb20KCjIwMDQwNzA4CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNy8wMyAwNToxMTozMwogICAgIFtzc2hsb2dpbi5jXSAoUkNTSUQgc3luYyBvbmx5LCB0aGUgY29ycmVzcG9uZGluZyBjb2RlIGlzIG5vdCBpbiBQb3J0YWJsZSkKICAgICBVc2UgJ1wwJyBub3QgMCBmb3Igc3RyaW5nOyBvayBkam1ALCBkZXJhYWR0QAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMDMgMTE6MDI6MjUKICAgICBbbW9uaXRvcl93cmFwLmNdCiAgICAgUHV0IHMva2V5IGZ1bmN0aW9ucyBpbnNpZGUgI2lmZGVmIFNLRVkgc2FtZSBhcyBtb25pdG9yLmMsCiAgICAgZnJvbSBkZXNAZnJlZWJzZCB2aWEgYnogIzMzMCwgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDcvMDggMTI6NDc6MjEKICAgICBbc2NwLmNdCiAgICAgUHJldmVudCBzY3AgZnJvbSBza2lwcGluZyB0aGUgZmlsZSBmb2xsb3dpbmcgYSBkb3VibGUtZXJyb3IuCiAgICAgYnogIzg2Mywgb2sgbWFya3VzQAoKMjAwNDA3MDIKIC0gKGR0dWNrZXIpIFttZG9jMm1hbi5hd2tdIFRlYWNoIGl0IHRvIGlnbm9yZSAuQmsgLXdvcmRzLCByZXBvcnRlZCBieQogICBzdHJ1YmUgYXQgcGh5c2lrMy5nd2RnLmRlIGEgbG9uZyB0aW1lIGFnby4KCjIwMDQwNzAxCiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jXSBDYWxsIGRpc3BsYXlfbG9naW5tc2cgYWdhaW4gYWZ0ZXIgZG9fcGFtX3Nlc3Npb24uCiAgIEVuc3VyZXMgbWVzc2FnZXMgZnJvbSBQQU0gbW9kdWxlcyBhcmUgZGlzcGxheWVkIHdoZW4gcHJpdnNlcD1uby4KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBCdWcgIzcwNTogTWFrZSBhcmd1bWVudHMgbWF0Y2ggUEFNIHNwZWNzLCBmaXhlcwogICB3YXJuaW5ncyBvbiBjb21wbGlhbnQgcGxhdGZvcm1zLiAgRnJvbSBwYXVsLmEuYm9sdG9uIGF0IGJ0LmNvbS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBCdWcgIzU1OSAobGFzdCBwaWVjZSk6IFBhc3MgRElTQUxMT1dfTlVMTF9BVVRIVE9LCiAgIHRvIHBhbV9hdXRoZW50aWNhdGUgZm9yIGNoYWxsZW5nZS1yZXNwb25zZSBhdXRoIHRvby4gIE9yaWdpbmFsbHkgZnJvbQogICBmY3VzYWNrIGF0IGZjdXNhY2suY29tLCBvayBkam1ACiAtICh0aW0pIFtidWlsZHBrZy5zaC5pbl0gQWRkICRSRVYgdG8gYnVtcCB0aGUgcGFja2FnZSByZXZpc2lvbiB3aXRoaW4KICAgdGhlIHNhbWUgdmVyc2lvbi4gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHNvbWVvbmUgdXNlcyAtLXdpdGgtcHJpdnNlcC11c2VyPQogICBhbmQgdGhlIHVzZXIgbmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgZ3JvdXAgbmFtZS4gb2sgZHR1Y2tlckAKCjIwMDQwNjMwCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gQ2hlY2sgZm9yIGJ1Z2d5IFBBTSBtb2R1bGVzIHRoYXQgcmV0dXJuIGEgTlVMTAogICBhcHBkYXRhX3B0ciB0byB0aGUgY29udmVyc2F0aW9uIGZ1bmN0aW9uLiAgb2sgZGptQAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI2IDA5OjAzOjIxCiAgICAgW3NzaC4xXQogICAgIC0gcmVtb3ZlIGRvdWJsZSB3b3JkCiAgICAgLSByZWFycmFuZ2UgLkJrIHRvIGtlZXAgU1lOT1BTSVMgbmljZQogICAgIC0gLU0gYmVmb3JlIC1tIGluIG9wdGlvbnMgZGVzY3JpcHRpb24KICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjYgMDk6MTE6MTQKICAgICBbc3NoX2NvbmZpZy41XQogICAgIHB1bmN0dWF0aW9uIGFuZCBncmFtbWFyIGZpeGVzLiBhbHNvLCBrZWVwIHRoZSBvcHRpb25zIGluIG9yZGVyLgogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yNiAwOToxNDo0MAogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIG5ldyBzZW50ZW5jZSwgbmV3IGxpbmU7CiAgIC0gYXZzbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yNiAyMDowNzoxNgogICAgIFtzc2hkLmNdCiAgICAgaW5pdGlhbGlzZSBzb21lIGZkIHZhcmlhYmxlcyB0byAtMSwgZGptQCBvawogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8zMCAwODozNjo1OQogICAgIFtzZXNzaW9uLmNdCiAgICAgdW5icmVhayBUVFkgYnJlYWssIGRpYWdub3NlZCBieSBkYXJyZW4gQVQgZGF6d2luLmNvbTsgb2sgbWFya3VzQAoKMjAwNDA2MjcKIC0gKHRpbSkgdXBkYXRlIFJFQURNRSBmaWxlcy4KIC0gKGR0dWNrZXIpIFttZG9jMm1hbi5hd2tdIEJ1ZyAjODgzOiBjb3JyZWN0bHkgcmVjb2duaXNlIC5QYSBhbmQgLkV2IG1hY3Jvcy4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL1JFQURNRS5yZWdyZXNzXSBEb2N1bWVudCBuZXcgdmFyaWFibGVzLgogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIHNmdHAtc2VydmVyLmNdIEJ1ZyAjODIzOiBhZGQgc2Z0cAogICByZW5hbWUgaGFuZGxpbmcgZm9yIExpbnV4IHdoaWNoIHJldHVybnMgRVBFUk0gZm9yIGxpbmsoKSBvbiAoYXQgbGVhc3Qgc29tZSkKICAgZmlsZXN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBoYXJkIGxpbmtzLiAgc2Z0cC1zZXJ2ZXIgd2lsbCBmYWxsIGJhY2sgdG8KICAgc3RhdCtyZW5hbWUoKSBpbiBzdWNoIGNhc2VzLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmNdIE1pc3NpbmcgX19mdW5jX18uCgoyMDA0MDYyNgogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI1IDE4OjQzOjM2CiAgICAgW3NzaGQuY10KICAgICBmaXggYnJva2VuIGZkIGhhbmRsaW5nIGluIHRoZSByZS1leGVjIGZhbGxiYWNrIHBhdGgsIHBhcnRpY3VsYXJseSB3aGVuCiAgICAgL2Rldi9jcnlwdG8gaXMgaW4gdXNlOyBvayBkZXJhYWR0QCBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI1IDIzOjIxOjM4CiAgICAgW3NmdHAuY10KICAgICBieiAjODc1OiBmaXggYmFkIGVzY2FwZSBjaGFyIGVycm9yIG1lc3NhZ2U7IHJlcG9ydGVkIGJ5IGZfbW9ociBBVCB5YWhvby5kZQoKMjAwNDA2MjUKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjQgMTk6MzA6NTQKICAgICBbc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNzaGQuY10KICAgICByZS1leGVjIHNzaGQgb24gYWNjZXB0KCk7IGluaXRpYWwgd29yaywgZmluYWwgZGVidWdnaW5nIGFuZCBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI1IDAxOjE2OjA5CiAgICAgW3NzaGQuY10KICAgICBvbmx5IHBlcmZvcm0gdGNwIHdyYXBwZXJzIGNoZWNrcyB3aGVuIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uIGlzIG9uIGEKICAgICBzb2NrZXQuICBzaWxlbmNlcyB1c2VsZXNzIHdhcm5pbmdzIGZyb20gcmVncmVzcyB0ZXN0cyB0aGF0IHVzZQogICAgIHByb3h5Y29tbWFuZD0ic3NoZCAtaSIuICBwcm9tcHRlZCBieSBkYXZpZEAgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yNCAxOTozMjowMAogICAgIFtyZWdyZXNzL01ha2VmaWxlIHJlZ3Jlc3MvdGVzdC1leGVjLnNoLCBhZGRlZCByZWdyZXNzL3JlZXhlYy5zaF0KICAgICByZWdyZXNzIHRlc3QgZm9yIHJlLWV4ZWMgY29ybmVyIGNhc2VzCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI1IDAxOjI1OjEyCiAgICAgW3JlZ3Jlc3MvdGVzdC1leGVjLnNoXQogICAgIGNsZWFuIHJlZXhlYy1zcGVjaWZpYyBqdW5rIG91dCBvZiB0ZXh0LWV4ZWMuc2ggYW5kIHNpbXBsaWZ5OyBpZGVhIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzI1IDA1OjM4OjQ4CiAgICAgW3NmdHAtc2VydmVyLmNdCiAgICAgRmFsbCBiYWNrIHRvIHN0YXQrcmVuYW1lIGlmIGZpbGVzeXN0ZW0gZG9lc24ndCBkb2Vzbid0IHN1cHBvcnQgaGFyZAogICAgIGxpbmtzLiAgYnojODIzLCBvayBkam1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L21pc2MuYyBbb3BlbmJzZC1jb21wYXQvbWlzYy5oXQogICBBZGQgY2xvc2Vmcm9tKCkgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgaXQuCiAtIChkdHVja2VyKSBbc3NoZC5jXSBhZGQgbGluZSBtaXNzaW5nIGZyb20gcmVleGVjIHN5bmMuCgoyMDA0MDYyMwogLSAoZHR1Y2tlcikgW2F1dGgxLmNdIEVuc3VyZSBkb19wYW1fYWNjb3VudCBpcyBjYWxsZWQgZm9yIFByb3RvY29sIDEKICAgY29ubmVjdGlvbnMgd2l0aCBlbXB0eSBwYXNzd29yZHMuICBQYXRjaCBmcm9tIGRhdmlkd3UgYXQgbmJ0dGVjaC5jb20sCiAgIG9rIGRqbUAKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIyIDIyOjQyOjAyCiAgICAgW3JlZ3Jlc3MvZW52cGFzcy5zaF0KICAgICBBZGQgcXVvdGluZyBmb3IgdGVzdCAtejsgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjIgMjI6NDU6NTIKICAgICBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdCiAgICAgQWRkIFRFU1RfU1NIX1NTSERfQ09ORk9QVFMgYW5kIFRFU1RfU1NIX1NTSF9DT05GT1BUUyB0byBhbGxvdyBhZGRpbmcKICAgICBhcmJpdGFyeSBvcHRpb25zIHRvIHNzaGRfY29uZmlnIGFuZCBzc2hfY29uZmlnIGR1cmluZyB0ZXN0cy4gIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIyIDIyOjU1OjU2CiAgICAgW3JlZ3Jlc3MvZHluYW1pYy1mb3J3YXJkLnNoIHJlZ3Jlc3MvdGVzdC1leGVjLnNoXQogICAgIEFsbG93IHNldHRpbmcgb2YgcG9ydCBmb3IgcmVncmVzcyBmcm9tIFRFU1RfU1NIX1BPUlQgdmFyaWFibGU7IG9rIG1hcmt1c0AKICAgLSBtb3VyaW5nQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIzIDAwOjM5OjM4CiAgICAgW3Jpam5kYWVsLmNdCiAgICAgLVdzaGFkb3cgZml4IHVwIHMvZW5jcnlwdC9kb19lbmNyeXB0Ly4gIE9LIGRqbUAsIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIzIDE0OjMxOjAxCiAgICAgW3NzaC5jXQogICAgIEZpeCBjb3VudGluZyBpbiBtYXN0ZXIvc2xhdmUgd2hlbiBwYXNzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlczsgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NpcGhlci5jXSBlbmNyeXB0LT5kb19lbmNyeXB0IGluc2lkZSBTU0hfT0xEX0VWUCB0byBtYXRjaAogICAtV3NoYWRvdyBjaGFuZ2UuCiAtIChiYWwpIFtNYWtlZmlsZS5pbl0gUmVtb3ZlIG9wZW5zc2hkLmluaXQgb24gJ21ha2UgZGlzdGNsZWFuJwogLSAoZHR1Y2tlcikgW2F1dGguYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmhdCiAgIE1vdmUgbG9naW5yZXN0cmljdGlvbnMgdGVzdCB0byBwb3J0LWFpeC5jLCByZXBsYWNlIHdpdGggYSBnZW5lcmljIGhvb2suCiAtICh0aW0pIFtyZWdyZXNzL3RyeS1jaXBoZXJzLnNoXSAiaWYgISBzb21lX2NvbW1hbmQiIGlzIG5vdCBwb3J0YWJsZS4KIC0gKGJhbCkgW2NvbnRyaWIvUkVBRE1FXSBSZW1vdmVkICJtZG9jMm1hbi5wbCIgcmVmZXJlbmNlIGFuZCBhZGRlZAogICByZWZlcmVuY2UgdG8gImZpbmRzc2wuc2giCgoyMDA0MDYyMgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yMCAxNzozNjo1OQogICAgIFtzc2guY10KICAgICBmaWx0ZXIgcGFzc2VkIGVudiB2YXJzIGF0IHNsYXZlIGluIGNvbm5lY3Rpb24gc2hhcmluZyBjYXNlOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIwIDE4OjUzOjM5CiAgICAgW3NmdHAuY10KICAgICBtYWtlICJscyAtbCIgbGlzdGluZ3MgcHJpbnQgdXNlci9ncm91cCBuYW1lcywgYWRkICJscyAtbiIgdG8gc2hvdyB1aWQvZ2lkCiAgICAgKGxpa2UgL2Jpbi9scyk7IGlkZWEgJiBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIwIDE5OjI4OjEyCiAgICAgW3NmdHAuMV0KICAgICBtZW50aW9uIG5ldyAtbiBmbGFnCiAgIC0gYXZzbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yMSAxNzozNjozMQogICAgIFthdXRoLXJzYS5jIGF1dGgyLWdzcy5jIGF1dGgyLXB1YmtleS5jIGF1dGhmaWxlLmMgY2Fub2hvc3QuYyBjaGFubmVscy5jCiAgICAgY2lwaGVyLmMgZG5zLmMga2V4LmMgbW9uaXRvci5jIG1vbml0b3JfZmRwYXNzLmMgbW9uaXRvcl93cmFwLmMKICAgICBtb25pdG9yX3dyYXAuaCBuY2hhbi5jIHBhY2tldC5jIHByb2dyZXNzbWV0ZXIuYyBzY3AuYyBzZnRwLXNlcnZlci5jIHNmdHAuYwogICAgIHNzaC1nc3MuaCBzc2gta2V5Z2VuLmMgc3NoLmMgc3NoY29ubmVjdC5jIHNzaGNvbm5lY3QxLmMgc3NobG9naW4uYwogICAgIHNzaHB0eS5jXQogICAgIG1ha2Ugc3NoIC1Xc2hhZG93IGNsZWFuLCBubyBmdW5jdGlvbmFsIGNoYW5nZXMKICAgICBtYXJrdXNAIG9rCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIxIDE3OjUzOjAzCiAgICAgW3Nlc3Npb24uY10KICAgICBmaXggZmQgbGVhayBmb3IgbXVsdGlwbGUgc3Vic3lzdGVtIGNvbm5lY3Rpb25zOyB3aXRoIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjEgMjI6MDI6NTgKICAgICBbbG9nLmhdCiAgICAgbWFyayBmYXRhbCBhbmQgY2xlYW51cCBleGl0IGFzIF9fZGVhZDsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yMSAyMjowNDo1MAogICAgIFtzZnRwLmNdCiAgICAgaW50cm9kdWNlIHNvcnRpbmcgZm9yIGxzLCBzYW1lIG9wdGlvbnMgYXMgL2Jpbi9sczsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yMSAyMjozMDo0NQogICAgIFtzZnRwLmNdCiAgICAgcHJlZml4IGxzIG9wdGlvbiBmbGFncyB3aXRoIExTXwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yMSAyMjo0MTozMQogICAgIFtzZnRwLjFdCiAgICAgZG9jdW1lbnQgc29ydCBvcHRpb25zCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzIyIDAxOjE2OjM5CiAgICAgW3NmdHAuY10KICAgICBkb24ndCBzaG93IC5maWxlcyBieSBkZWZhdWx0IGluIGxzLCBhZGQgLWEgb3B0aW9uIHRvIHR1cm4gdGhlbSBiYWNrIG9uOwogICAgIG9rIG1hcmt1cwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8yMiAwMzoxMjoxMwogICAgIFtyZWdyZXNzL2VudnBhc3Muc2ggcmVncmVzcy9tdWx0aXBsZXguc2hdCiAgICAgbW9yZSBwb3J0YWJsZSBlbnYgcGFzc2luZyB0ZXN0cwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMjIgMDU6MDU6NDUKICAgICBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXQogICAgIENoYW5nZSBsb2dpbi0+dXNlcm5hbWUsIHdpbGwgcHJldmVudCAtV3NoYWRvdyBlcnJvcnMgaW4gUG9ydGFibGU7CiAgICAgb2sgbWFya3VzQAogLSAoZHR1Y2tlcikgW21vbml0b3IuY10gRml4IFBvcnRhYmxlLXNwZWNpZmljIC1Xc2hhZG93IHdhcm5pbmdzIG9uICJzb2NrZXQiLgogLSAoZHR1Y2tlcikgW2RlZmluZXMuaF0gRGVmaW5lIF9fZGVhZCBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgogLSAoYmFsKSBbYXV0aC1wYXNzd2QuYyBhdXRoMS5jXSBDbGVhbiB1cCB1bnVzZWQgdmFyaWFibGVzLgoKMjAwNDA2MjAKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hYyBNYWtlZmlsZS5pbl0gT25seSBjaGFuZ2UgVEVTVF9TSEVMTCBvbiBicm9rZW4gcGxhdGZvcm1zLgoKMjAwNDA2MTkKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBEb24ndCB1c2UgUEFNIG5hbWVzcGFjZSBmb3IKICAgIHBhbV9wYXNzd29yZF9jaGFuZ2VfcmVxdWlyZWQgZWl0aGVyLgogLSAodGltKSBbY29uZmlndXJlLmFjIGJ1aWxkcGtnLnNoLmluIGNvbnRyaWIvc29sYXJpcy9SRUFETUVdIG1vdmUgb3BlbnNzaGQKICAgaW5pdCBzY3JpcHQgdG8gdG9wIGxldmVsIGRpcmVjdG9yeS4gIEFkZCBvcGVuc3NoZC5pbml0LmluLgogICBSZW1vdmUgY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoLCBjb250cmliL3NvbGFyaXMvb3BlbnNzaGQuaW4KCjIwMDQwNjE4CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTcgMTQ6NTI6NDgKICAgICBbY2xpZW50bG9vcC5jIGNsaWVudGxvb3AuaCBzc2guY10KICAgICBzdXBwb3J0IGVudmlyb25tZW50IHBhc3Npbmcgb3ZlciBzaGFyZWQgY29ubmVjdGlvbnM7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTcgMTU6MTA6MTQKICAgICBbY2xpZW50bG9vcC5jIG1pc2MuaCByZWFkY29uZi5jIHJlYWRwYXNzLmMgc3NoLmMgc3NoX2NvbmZpZy41XQogICAgIEFkZCBvcHRpb24gZm9yIGNvbmZpcm1hdGlvbiAoQ29udHJvbE1hc3Rlcj1hc2spIHZpYSBzc2gtYXNrcGFzcyBiZWZvcmUgCiAgICAgb3BlbmluZyBzaGFyZWQgY29ubmVjdGlvbnM7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTcgMTQ6NTM6MjcKICAgICBbcmVncmVzcy9tdWx0aXBsZXguc2hdCiAgICAgc2hhcmVkIGNvbm5lY3Rpb24gZW52IHBhc3NpbmcgcmVncmVzcyB0ZXN0CiAtIChkdHVja2VyKSBbcmVncmVzcy9SRUFETUUucmVncmVzc10gQWRkIGRldGFpbCBvbiBob3cgdG8gcnVuIGEgc2luZ2xlCiAgIHRlc3QgZnJvbSB0aGUgdG9wLWxldmVsIE1ha2VmaWxlLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xNyAyMzo1Njo1NwogICAgIFtzc2guMSBzc2guY10KICAgICBzeW5jIHVzYWdlKCkgYW5kIFNZTlBPU0lTIHdpdGggY29ubmVjdGlvbiBzaGFyaW5nIGNoYW5nZXMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzE4IDA2OjEzOjI1CiAgICAgW3NmdHAuY10KICAgICBVc2UgZXhlY3ZwIGluc3RlYWQgb2YgZXhlY3Ygc28gc2Z0cCAtUyBzc2ggd29ya3MuICAibWFrZXMgc2Vuc2UiIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzE4IDA2OjE1OjUxCiAgICAgW211bHRpcGxleC5zaF0KICAgICBVc2UgLVMgZm9yIHNjcC9zZnRwIHRvIGZvcmNlIHRoZSB1c2Ugb2YgdGhlIHNzaCBiZWluZyB0ZXN0ZWQuCiAgICAgb2sgZGptQCxtYXJrdXNACiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTggMTA6NDA6MTkKICAgICBbc3NoLmNdCiAgICAgZGVsYXkgc2lnbmFsIGhhbmRsZXIgc2V0dXAgdW50aWwgd2UgaGF2ZSBmaW5pc2hlZCB0YWxraW5nIHRvIHRoZSBtYXN0ZXIuCiAgICAgYWxsb3cgaW50ZXJydXB0aW5nIG9mIHNldHVwIChlLmcuIGlmIG1hc3RlciBpcyBzdHVjayk7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTggMTA6NTU6NDMKICAgICBbc3NoLjEgc3NoLmNdCiAgICAgdHJpbSBzeW5vcHNpcyBmb3IgLVMsIGFsbG93IC1TIGFuZCAtb0NvbnRyb2xNYXN0ZXIsIC1NTSBtZWFucyAnYXNrJzsKICAgICBvayBkam0KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTggMTE6MTE6NTQKICAgICBbY2hhbm5lbHMuYyBjbGllbnRsb29wLmNdCiAgICAgRG9uJ3QgZXhwbG9kZSBpbiBjbGllbnRsb29wIHdoZW4gd2UgcmVjZWl2ZSBhIGJvZ3VzIGNoYW5uZWwgaWQsIGJ1dAogICAgIGFsc28gZG9uJ3QgZ2VuZXJhdGUgdGhlbSB0byBiZWdpbiB3aXRoOyBvayBtYXJrdXNACgoyMDA0MDYxNwogLSAoZHR1Y2tlcikgW3JlZ3Jlc3Mvc2NwLnNoXSBkaWZmIC1OIGlzIG5vdCBwb3J0YWJsZSAoYnV0IG5lZWRlZCBmb3Igc29tZQogICBwbGF0Zm9ybXMpLCBzbyB0ZXN0IGlmIGRpZmYgdW5kZXJzdGFuZHMgaXQuICBQb2ludGVkIG91dCBieSB0aW1ALCBvayBkam1ACiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jIHJlZ3Jlc3MvCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xNyAwNTo1MTo1OQogICAgIFtyZWdyZXNzL211bHRpcGxleC5zaF0KICAgICBSZW1vdmUgZGF0YWZpbGUgYmV0d2VlbiBhbmQgYWZ0ZXIgdGVzdHMsIGtpbGwgc3NoZCByYXRoZXIgdGhhbiB3YWl0OwogICAgIG9rIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzE3IDA2OjAwOjA1CiAgICAgW3JlZ3Jlc3MvbXVsdGlwbGV4LnNoXQogICAgIFVzZSBEQVRBIGFuZCBDT1BZIGZvciB0ZXN0IGRhdGEgcmF0aGVyIHRoYW4gaGFyZC1jb2RlZCBwYXRoczsgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTcgMDY6MTk6MDYKICAgICBbcmVncmVzcy9tdWx0aXBsZXguc2hdCiAgICAgQWRkIHNtYWxsIGRlc2NyaXB0aW9uIG9mIGZhaWxpbmcgdGVzdCB0byBmYWlsdXJlIG1lc3NhZ2U7IG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL211bHRpcGxleC5zaF0gYWRkIEVYRUVYVCBmb3IgdGhvc2UgcGxhdGZvcm1zIHRoYXQgbmVlZAogICBpdC4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL211bHRpcGxleC5zaF0gSW5jcmVhc2Ugc2xlZXAgdGltZSB0byAxMjAgc2VjICg2MCBpcyBub3QKICAgZW5vdWdoIGZvciBzbG93IHN5c3RlbXMsIGVzcGVjaWFsbHkgaWYgdGhleSBkb24ndCBoYXZlIGEga2VybmVsIFJORykuCgoyMDA0MDYxNgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmNdIEV4cGFuZCB3aGl0ZXNwYWNlIC0+IHRhYnMuIE5vCiAgIGNvZGUgY2hhbmdlcy4KIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMgcmVncmVzcy8KICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDQvMjcgMDk6NDc6MzAKICAgICBbcmVncmVzcy9NYWtlZmlsZSByZWdyZXNzL3Rlc3QtZXhlYy5zaCwgYWRkZWQgcmVncmVzcy9lbnZwYXNzLnNoXQogICAgIHJlZ3Jlc3MgdGVzdCBmb3IgZW52aXJvbm1lbnQgcGFzc2luZywgU2VuZEVudiAmIEFjY2VwdEVudiBvcHRpb25zOwogICAgIG9rIG1hcmt1c0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzEzIDEzOjUxOjAyCiAgICAgW3JlZ3Jlc3MvTWFrZWZpbGUgcmVncmVzcy90ZXN0LWV4ZWMuc2gsIGFkZGVkIHJlZ3Jlc3Mvc2NwLXNzaC13cmFwcGVyLnNoCiAgICAgcmVncmVzcy9zY3Auc2hdCiAgICAgQWRkIHNjcCByZWdyZXNzaW9uIHRlc3Q7IHdpdGggJiBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzEzIDE1OjA0OjA4CiAgICAgW3JlZ3Jlc3MvTWFrZWZpbGUgcmVncmVzcy90ZXN0LWV4ZWMuc2gsIGFkZGVkIHJlZ3Jlc3MvZW52cGFzcy5zaF0KICAgICByZWdyZXNzIHRlc3QgZm9yIGNsaWVudCBtdWx0aXBsZXhpbmc7IG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTMgMTU6MTY6NTQKICAgICBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdCiAgICAgcmVtb3ZlIGR1cGxpY2F0ZSBzZXR0aW5nIG9mICRTQ1A7IHNwb3R0ZWQgYnkgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTYgMTM6MTU6MDkKICAgICBbcmVncmVzcy9zY3Auc2hdCiAgICAgTWFrZSBzY3AgLXIgdGVzdHMgdXNlIGRpZmYgLXJOIG5vdCBjbXAgKHdoaWNoIHdvbid0IGRvIGRpcnMuICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xNiAxMzoxNjo0MAogICAgIFtyZWdyZXNzL211bHRpcGxleC5zaF0KICAgICBTaWxlbmNlIG11bHRpcGxleCBzZnRwIGFuZCBzY3AgdGVzdHMuICBvayBtYXJrdXNACiAtIChkdHVja2VyKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdCiAgIE1vdmUgUG9ydGFibGUtb25seSBTdHJpY3RNb2RlcyB0byB0b3Agb2YgbGlzdCB0byBtYWtlIHN5bmNzIGVhc2llci4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL1JFQURNRS5yZWdyZXNzXQogICBBZGQgJFRFU1RfU0hFTEwgdG8gcmVhZG1lLgoKMjAwNDA2MTUKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8yNiAwODo1OTo1NwogICAgIFtzZnRwLmNdCiAgICAgZXhpdCAtPiBfZXhpdCBpbiBmb3JrZWQgY2hpbGQgb24gZXJyb3I7IGZyb20gYW5kcnVzaG9jayBBVCBrb3Jvdmluby5uZXQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMjYgMjM6MDI6MzkKICAgICBbY2hhbm5lbHMuY10KICAgICBtaXNzaW5nIGZyZWVhZGRyaW5mbzsgQW5kcmV5IE1hdHZlZXYKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzI3IDAwOjUwOjEzCiAgICAgW3JlYWRjb25mLmNdCiAgICAgS2lsbCBkZWFkIGNvZGUgYWZ0ZXIgZmF0YWwoKTsgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMDEgMTQ6MjA6NDUKICAgICBbYXV0aDItY2hhbGwuY10KICAgICBSZW1vdmUgcmVkdW5kYW50ICNpbmNsdWRlOyBvayBtYXJrdXNACiAgIC0gcGVkcm9AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMDMgMTI6MjI6MjAKICAgICBbc2Z0cC1jbGllbnQuYyBzZnRwLmNdCiAgICAgaW5pdGlhbGl6ZSBwb2ludGVycywgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xMyAxMjo1MzoyNAogICAgIFtkaC5jIGRoLmgga2V4LmMga2V4Lmgga2V4ZGhjLmMga2V4ZGhzLmMgbW9uaXRvci5jIG15cHJvcG9zYWwuaF0gCiAgICAgW3NzaC1rZXlzY2FuLmMgc3NoY29ubmVjdDIuYyBzc2hkLmNdCiAgICAgaW1wbGVtZW50IGRpZmZpZS1oZWxsbWFuLWdyb3VwMTQtc2hhMSBrZXggbWV0aG9kICh0cml2aWFsIGV4dGVuc2lvbiB0bwogICAgIGV4aXN0aW5nIGRpZmZpZS1oZWxsbWFuLWdyb3VwMS1zaGExKTsgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDYvMTMgMTQ6MDE6NDIKICAgICBbc3NoLjEgc3NoX2NvbmZpZy41IHNzaGRfY29uZmlnLjVdCiAgICAgTGlzdCBzdXBwb3J0ZWQgY2lwaGVycyBpbiBtYW4gcGFnZXMsIHRpZHkgdXAgc3NoIC1jOwogICAgICJsb29rcyBmaW5lIiBqbWNALCBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzEzIDE1OjAzOjAyCiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmMgY2xpZW50bG9vcC5oIGluY2x1ZGVzLmggcmVhZGNvbmYuY10gCiAgICAgW3JlYWRjb25mLmggc2NwLjEgc2Z0cC4xIHNzaC4xIHNzaC5jIHNzaF9jb25maWcuNV0KICAgICBpbXBsZW1lbnQgc2Vzc2lvbiBtdWx0aXBsZXhpbmcgaW4gdGhlIGNsaWVudCAodGhlIHNlcnZlciBoYXMgc3VwcG9ydGVkIAogICAgIHRoaXMgc2luY2UgMi4wKTsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNi8xNCAwMTo0NDozOQogICAgIFtjaGFubmVscy5jIGNsaWVudGxvb3AuYyBtaXNjLmMgbWlzYy5oIHBhY2tldC5jIHNzaC1hZ2VudC5jIHNzaC1rZXlzY2FuLmNdCiAgICAgW3NzaGQuY10KICAgICBzZXRfbm9uYmxvY2soKSBpbnN0ZWFkIG9mIGZuY3RsKC4uLixPX05PTkJMT0NLKTsgImxvb2tzIHNhbmUiIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA2LzE1IDA1OjQ1OjA0CiAgICAgW2NsaWVudGxvb3AuY10KICAgICBtaXNzZWQgb25lIHVuc2V0X25vbmJsb2NrOyBzcG90dGVkIGJ5IFRpbSBSaWNlCiAtIChkam0pIEZpeCBNYWtlZmlsZS5pbiBmb3IgY29ubmVjdGlvbiBzaGFyaW5nIGNoYW5nZXMKIC0gKGRqbSkgW3NzaC5jXSBVc2Ugc2VwYXJhdGUgdmFyIGZvciBhZGRyZXNzIGxlbmd0aAoKMjAwNDA2MDMKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBEb24ndCB1c2UgcGFtXyogbmFtZXNwYWNlIGZvciBzc2hkJ3MgUEFNIGZ1bmN0aW9ucy4KICAgb2sgZGptQAoKMjAwNDA2MDEKIC0gKGRqbSkgW2F1dGgtcGFtLmNdIEFkZCBjb3B5cmlnaHQgZm9yIGxvY2FsIGNoYW5nZXMKCjIwMDQwNTMwCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uYyBhdXRoLXBhbS5oIGF1dGgtcGFzc3dkLmNdIEJ1ZyAjODc0OiBSZS1hZGQgUEFNIAogICBzdXBwb3J0IGZvciBQYXNzd29yZEF1dGhlbnRpY2F0aW9uPXllcy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBVc2UgYW4gaW52YWxpZCBwYXNzd29yZCBmb3Igcm9vdCBpZgogICBQZXJtaXRSb290TG9naW4gIT0geWVzIG9yIHRoZSBsb2dpbiBpcyBpbnZhbGlkLCB0byBwcmV2ZW50IGxlYWtpbmcKICAgaW5mb3JtYXRpb24uICBCYXNlZCBvbiBPcGVud2FsbCdzIG93bC1hbHdheXMtYXV0aCBwYXRjaC4gIG9rIGRqbUAKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hYyBNYWtlZmlsZS5pbl0gQWRkIHN1cHBvcnQgZm9yICJtYWtlIHBhY2thZ2UiIG9rIGRqbUAKIC0gKHRpbSkgW2J1aWxkcGtnLnNoLmluXSBOZXcgZmlsZS4gQSBtb3JlIGZsZXhpYmxlIHZlcnNpb24gb2YKICAgY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoIHVzZWQgZm9yICJtYWtlIHBhY2thZ2UiLgogLSAodGltKSBbYnVpbGRwa2cuc2guaW5dIExhc3QgbWludXRlIGZpeCBkaWRuJ3QgbWFrZSBpdCBpbiB0aGUgLmluIGZpbGUuCgoyMDA0MDUyNwogLSAoZHR1Y2tlcikgW2NvbnRyaWIvY2FsZGVyYS9vcGVuc3NoLnNwZWMgY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjCiAgIGNvbnRyaWIvUkVBRE1FIENSRURJVFMgSU5TVEFMTF0gQnVnICM4NzM6IENvcnJlY3QgVVJMcyBmb3IgeDExLXNzaC1hc2twYXNzCiAgIGFuZCBKaW0gS25vYmxlJ3MgZW1haWwgYWRkcmVzcyAsIGZyb20gSmltIGhpbXNlbGYuCgoyMDA0MDUyNAogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8xOSAxMjoxNzozMwogICAgIFtzZnRwLWNsaWVudC5jIHNmdHAuY10KICAgICBncmFjZWZ1bGx5IGFib3J0IHRyYW5zZmVycyBvbiByZWNlaXB0IG9mIFNJR0lOVCwgYWxzbyBpZ25vcmUgU0lHSU5UIHdoaWxlCiAgICAgd2FpdGluZyBmb3IgYSBjb21tYW5kOyBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8yMCAxMDo1ODowNQogICAgIFtjbGllbnRsb29wLmNdCiAgICAgVHJpdmlhbCB0eXBlIGZpeCAwIC0+ICdcMCc7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMjEgMDg6NDM6MDMKICAgICBba2V4LmggbW9kdWxpLmMgdGlsZGV4cGFuZC5jXQogICAgIGFkZCBwcm90b3R5cGVzIGZvciAtV2FsbDsgb2sgZGptCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzIxIDExOjMzOjExCiAgICAgW2NoYW5uZWxzLmMgY2hhbm5lbHMuaCBjbGllbnRsb29wLmMgc2VydmVybG9vcC5jIHNzaC4xXQogICAgIGJ6ICM3NTY6IGFkZCBzdXBwb3J0IGZvciB0aGUgY2FuY2VsLXRjcGlwLWZvcndhcmQgcmVxdWVzdCBmb3IgdGhlIHNlcnZlcgogICAgIGFuZCB0aGUgY2xpZW50ICh0aHJvdWdoIHRoZSB+QyBjb21tYW5kbGluZSkuIHJlcG9ydGVkIGJ5IHozcCBBVAogICAgIHR3aXN0ZWRtYXRyaXguY29tOyBvayBtYXJrdXNACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzIyIDA2OjMyOjEyCiAgICAgW2NsaWVudGxvb3AuYyBzc2guMV0KICAgICB1c2UgJy1oJyBmb3IgaGVscCBpbiB+QyBjb21tYW5kbGluZSBpbnN0ZWFkIG9mICctPyc7IGluc3BpcmVkIGJ5IGptY0AKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMjIgMTY6MDE6MDUKICAgICBbc3NoLjFdCiAgICAga2lsbCB3aGl0ZXNwYWNlIGF0IGVvbDsKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzIzIDIzOjU5OjUzCiAgICAgW2F1dGguYyBhdXRoLmggYXV0aDEuYyBhdXRoMi5jIHNlcnZjb25mLmMgc2VydmNvbmYuaCBzc2hkX2NvbmZpZwogICAgIHNzaGRfY29uZmlnLjVdCiAgICAgQWRkIE1heEF1dGhUcmllcyBzc2hkIGNvbmZpZyBvcHRpb247IG9rIG1hcmt1c0AKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBCdWcgIzgzOTogRW5zdXJlIHRoYXQgcGFtIGF1dGhlbnRpY2F0aW9uICJ0aHJlYWQiCiAgIGlzIHRlcm1pbmF0ZWQgaWYgdGhlIHByaXZzZXAgc2xhdmUgZXhpdHMgZHVyaW5nIGtleWJvYXJkLWludGVyYWN0aXZlCiAgIGF1dGhlbnRpY2F0aW9uLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3NzaGQuY10gRml4IHR5cG8gaW4gY29tbWVudC4KCjIwMDQwNTIzCiAtIChkam0pIFtzc2hkX2NvbmZpZ10gRXhwbGFpbiBjb25zZXF1ZW5jZXMgb2YgVXNlUEFNPXllcyBhIGxpdHRsZSBiZXR0ZXIgaW4gCiAgIHNzaGRfY29uZmlnOyBvayBkdHVja2VyQAogLSAoZGptKSBbY29uZmlndXJlLmFjXSBXYXJuIGlmIHRoZSBzeXN0ZW0gaGFzIG5vIGtub3duIHdheSBvZiBmaWd1cmluZyBvdXQgCiAgIHdoaWNoIHVzZXIgaXMgb24gdGhlIG90aGVyIGVuZCBvZiBhIFVuaXggZG9tYWluIHNvY2tldDsgb2sgZHR1Y2tlckAKIC0gKGJhbCkgW29wZW5ic2QtY29tcGF0L3N5cy1xdWV1ZS5oXSBSZWludHJvZHVjZSBtYWNoaW5hcnkgdG8gaGFuZGxlCiAgIG9sZC9icm9rZW4vaW5jb21wbGV0ZSA8c3lzL3F1ZXVlLmg+LgoKMjAwNDA1MTMKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjODY3OiBBZGRpdGlvbmFsIHRlc3RzIGZvciByZXNfcXVlcnkgaW4KICAgbGlicmVzb2x2LCBmaXhlcyBwcm9ibGVtcyBkZXRlY3RpbmcgaXQgb24gc29tZSBwbGF0Zm9ybXMKICAgKGVnIExpbnV4L3g4Ni02NCkuICBGcm9tIEt1cnQgUm9lY2t4IHZpYSBEZWJpYW4sIG9rIG1vdXJpbmdACiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzA0IDE4OjM2OjA3CiAgICAgW3NjcC4xXQogICAgIFNlbmRFbnYgaGVyZSB0b287CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzA2IDExOjI0OjIzCiAgICAgW3NzaF9jb25maWcuNV0KICAgICB0eXBvIGZyb20gSm9obiBDb3NpbWFubyAoUFIgMzc3MCk7CiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8wOCAwMDowMTozNwogICAgIFthdXRoLmMgY2xpZW50bG9vcC5jIG1pc2MuaCBzZXJ2Y29uZi5jIHNzaC5jIHNzaHB0eS5oIHNzaHR0eS5jCiAgICAgdGlsZGV4cGFuZC5jXSwgcmVtb3ZlZDogc3NodHR5LmggdGlsZGV4cGFuZC5oCiAgICAgbWFrZSB0d28gdGlueSBoZWFkZXIgZmlsZXMgZ28gYXdheTsgZGptIG9rCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzA4IDAwOjIxOjMxCiAgICAgW2NsaWVudGxvb3AuYyBtaXNjLmggcmVhZHBhc3MuYyBzY2FyZC5jIHNzaC1hZGQuYyBzc2gtYWdlbnQuYyBzc2gta2V5Z2VuLmMKICAgICBzc2hjb25uZWN0LmMgc3NoY29ubmVjdDEuYyBzc2hjb25uZWN0Mi5jXSByZW1vdmVkOiByZWFkcGFzcy5oCiAgICAga2lsbCBhIHRpbnkgaGVhZGVyOyBvayBkZXJhYWR0QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8wOSAwMDowNjo0NwogICAgIFttb2R1bGkuYyBzc2gta2V5Z2VuLmNdIHJlbW92ZWQ6IG1vZHVsaS5oCiAgICAgemFwIGFub3RoZXIgdGlueSBoZWFkZXI7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzA5IDAxOjE5OjI4CiAgICAgW09WRVJWSUVXIGF1dGgtcnNhLmMgYXV0aDEuYyBrZXguYyBtb25pdG9yLmMgc2Vzc2lvbi5jIHNzaGNvbm5lY3QxLmMKICAgICBzc2hkLmNdIHJlbW92ZWQ6IG1wYXV4LmMgbXBhdXguaAogICAgIGtpbGwgc29tZSBtb3JlIHRpbnkgZmlsZXM7IG9rIGRlcmFhZHRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzA5IDAxOjI2OjQ4CiAgICAgW2tleC5jXQogICAgIGRvbid0IG92ZXJ3cml0ZSB3aGF0IHdlIGFyZSB0cnlpbmcgdG8gY29tcHV0ZQogICAtIGRlcmFhZHRAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMTEgMTk6MDE6NDMKICAgICBbYXV0aC5jIGF1dGgyLW5vbmUuYyBhdXRoZmlsZS5jIGNoYW5uZWxzLmMgbW9uaXRvci5jIG1vbml0b3JfbW0uYwogICAgIHBhY2tldC5jIHBhY2tldC5oIHByb2dyZXNzbWV0ZXIuYyBzZXNzaW9uLmMgb3BlbmJzZC1jb21wYXQveG1tYXAuY10KICAgICBpbXByb3ZlIHNvbWUgY29kZSBsaW50IGRpZCBub3QgbGlrZTsgZGptIG1pbGxlcnQgb2sKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzEzIDAyOjQ3OjUwCiAgICAgW3NzaC1hZ2VudC4xXQogICAgIEFkZCBleGFtcGxlcyB0byBzc2gtYWdlbnQuMSwgYnojNDgxIGZyb20gUmFsZiBIYXVzZXI7IG9rIGRlcmFhZHRACiAtIChkdHVja2VyKSBbc3NoZC44XSBCdWcgIzg0MzogQWRkIHdhcm5pbmcgYWJvdXQgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB0bwogICBVc2VQQU0gc2VjdGlvbi4gIFBhcnRzIGZyb20gZGptQCBhbmQgam1jQC4KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jIHNjYXJkLW9wZW5zYy5jXSBUaW5kZXJib3ggc2F5cyBhdXRoLXBhbS5jIHVzZXMKICAgcmVhZHBhc3MuaCwgZ3JlcCBzYXlzIHNjYXJkLW9wZW5zYy5jIGRvZXMgdG9vLiAgUmVwbGFjZSB3aXRoIG1pc2MuaC4KIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBDaGVjayB0aGF0IEhBVkVfREVDTF9IX0VSUk9SCiAgIGlzIGRlZmluZWQgYmVmb3JlIHVzaW5nLgogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmNdIEZpeCB0eXBvIHRvbzogSEFWRV9ERUNMX0hfRVJST1IKICAgLT4gSEFWRV9ERUNMX0hfRVJSTk8uCgoyMDA0MDUwMgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8yMiAxMTo1Njo1NwogICAgIFttb2R1bGkuY10KICAgICBCdWd6aWxsYSAjODUwOiBTb3BoaWUgR2VybWFpbiBpcyB0aGUgY29ycmVjdCBuYW1lIG9mIHRoZSBGcmVuY2gKICAgICBtYXRoZW1hdGljaWFuLCAiU29waGllIEdlcm1haW5lIiBpc24ndDsgZnJvbSBMdWMuTWFpc29ub2JlQGMtcy5mcgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8yNyAwOTo0NjozNwogICAgIFtyZWFkY29uZi5jIHJlYWRjb25mLmggc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNlc3Npb24uYyBzZXNzaW9uLmggc3NoLmMKICAgICBzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBieiAjODE1OiBpbXBsZW1lbnQgYWJpbGl0eSB0byBwYXNzIHNwZWNpZmllZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbQogICAgIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlcjsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8yOCAwNToxNzoxMAogICAgIFtzc2hfY29uZmlnLjUgc3NoZF9jb25maWcuNV0KICAgICBtYW5wYWdlIGZpeGVzIGluIGVudnBhc3Mgc3R1ZmYgZnJvbSBCcmlhbiBQb29sZSAocmFqIEFUIGNlcmlhcy5wdXJkdWUuZWR1KQogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8yOCAwNzowMjo1NgogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHJlbW92ZSB1bm5lY2Vzc2FyeSAuUHA7CiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzI4IDA3OjEzOjQyCiAgICAgW3NmdHAuMSBzc2guMV0KICAgICBhZGQgU2VuZEVudiB0byAtbyBsaXN0OwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMDIgMTE6NTQ6MzEKICAgICBbc3NoZC44XQogICAgIE1hbiBwYWdlIGdyYW1tYXIgZml4IChieiAjODU4KSwgZnJvbSBkYW1lcmVsbCBhdCBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrCiAgICAgdmlhIERlYmlhbjsgb2sgZGptQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDUvMDIgMTE6NTc6NTIKICAgICBbc3NoLjFdCiAgICAgQ29ubmVjdGlvblRpbWVvdXQgLT4gQ29ubmVjdFRpbWVvdXQsIGZyb20gbS5hLmVsbGlzIGF0IG5jbC5hYy51ayB2aWEKICAgICBEZWJpYW4uICBvayBkam1ACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNS8wMiAyMzowMjoxNwogICAgIFtzZnRwLjFdCiAgICAgQ29ubmVjdGlvblRpbWVvdXQgLT4gQ29ubmVjdFRpbWVvdXQgaGVyZSB0b28sIHBvaW50ZWQgb3V0IGJ5IGptY0AKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA1LzAyIDIzOjE3OjUxCiAgICAgW3NjcC4xXQogICAgIENvbm5lY3Rpb25UaW1lb3V0IC0+IENvbm5lY3RUaW1lb3V0IGZvciBzY3AuMSB0b28uCgoyMDA0MDQyMwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hYyBvcGVuYnNkLWNvbXBhdC9nZXRycnNldGJ5bmFtZS5jXSBEZWNsYXJlIGhfZXJybm8KICAgYXMgZXh0ZXJuIGludCBpZiBub3QgYWxyZWFkeSBkZWNsYXJlZC4gIEZpeGVzIGNvbXBpbGUgZXJyb3JzIG9uIG9sZCBTQ08KICAgcGxhdGZvcm1zLiAgb2sgdGltQAogLSAoZHR1Y2tlcikgW1JFQURNRS5wbGF0Zm9ybV0gTGlzdCBwcmVyZXFzIGZvciBidWlsZGluZyBvbiBDeWd3aW4uCgoyMDA0MDQyMQogLSAoZGptKSBVcGRhdGUgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHRvIGF1dG9jb25mLTIuNTkgdmVyc2lvbnM7IG9rIHRpbUAKCjIwMDQwNDIwCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBoZW5uaW5nQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzA4IDE2OjA4OjIxCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgc3dhcCB0aGUgbGFzdCB0d28gcGFyYW1ldGVycyB0byBUQUlMUV9GT1JFQUNIX1JFVkVSU0UuIG1hdGNoZXMgd2hhdAogICAgIEZyZWVCU0QgYW5kIE5ldEJTRCBkby4KICAgICBvayBtaWxsZXJ0QCBtY2JyaWRlQCBtYXJrdXNAIGhvQCwgY2hlY2tlZCB0byBub3QgYWZmZWN0IHBvcnRzIGJ5IG5hZGR5QAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8xOCAyMzoxMDoyNgogICAgIFtyZWFkY29uZi5jIHJlYWRjb25mLmggc3NoLWtleXNpZ24uYyBzc2guY10KICAgICBwZXJmb3JtIHN0cmljdCBvd25lcnNoaXAgYW5kIG1vZGVzIGNoZWNrcyBmb3Igfi8uc3NoL2NvbmZpZyBmaWxlcywgCiAgICAgYXMgdGhlc2UgY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgcHJvZ3JhbXM7IG9rIG1hcmt1c0AKICAgICBOQi4gc3NoIHdpbGwgbm93IGV4aXQgd2hlbiBpdCBkZXRlY3RzIGEgY29uZmlnIHdpdGggcG9vciBwZXJtaXNzaW9ucwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8xOSAxMzowMjo0MAogICAgIFtzc2guMSBzc2hfY29uZmlnLjVdCiAgICAgZG9jdW1lbnQgc3RyaWN0IHBlcm1pc3Npb24gY2hlY2tzIG9uIH4vLnNzaC9jb25maWc7IHByb21wdGVkIGJ5LCAKICAgICB3aXRoICYgb2sgam1jQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wNC8xOSAxNjoxMjoxNAogICAgIFtzc2hfY29uZmlnLjVdCiAgICAga2lsbCB3aGl0ZXNwYWNlIGF0IGVvbDsKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDQvMTkgMjE6NTE6NDkKICAgICBbc3NoLmNdCiAgICAgZml4IGlkaW90IHR5cG8gdGhhdCBpIGludHJvZHVjZWQgaW4gbXkgbGFzdCBjb21taXQ7CiAgICAgc3BvdHRlZCBieSBjc2NobmVpZCBBVCBjc2NobmVpZC5jb20KIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L3N5cy1xdWV1ZS5oXSBTeW5jIHdpdGggT3BlbkJTRCwgbmVlZGVkIGZvciAKICAgYWJvdmUgY2hhbmdlCiAtIChkam0pIFtjb25maWd1cmUuYWNdIENoZWNrIHdoZXRoZXIgbGlicm9rZW4gaXMgcmVxdWlyZWQgd2hlbiBidWlsZGluZyAKICAgd2l0aCBIZWltZGFsCgoyMDA0MDQxOQogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMjkgMjI6MDQ6NDUKICAgICBbcmVncmVzcy9sb2dpbi10aW1lb3V0LnNoXQogICAgIFVzZSBzdWRvIHdoZW4gcmVzdGFydGluZyBkYWVtb24gZHVyaW5nIHRlc3QuICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8wOCAxMDoxNzoxMgogICAgIFtyZWdyZXNzL2xvZ2luLXRpbWVvdXQuc2hdCiAgICAgTWlzc2luZyBPQkosIGZyb20gdGltQC4gIG9rIG1hcmt1c0AgKEFscmVhZHkgZml4ZWQsIElEIHN5bmMgb25seSkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDMvMzAgMTI6NDE6NTYKICAgICBbc2Z0cC1jbGllbnQuY10KICAgICBzeW5jIGNvbW1lbnQgd2l0aCByZWFsaXR5CiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzMxIDIxOjU4OjQ3CiAgICAgW2Nhbm9ob3N0LmNdCiAgICAgZG9uJ3Qgc2tpcCBpcCBvcHRpb25zIGNoZWNrIHdoZW4gVXNlRE5TPW5vOyBvayBtYXJrdXNAIChJRCBzeW5jIG9ubHkpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzA0LzAxIDEyOjE5OjU3CiAgICAgW3NjcC5jXQogICAgIGxpbWl0IHRydXN0IGJldHdlZW4gbG9jYWwgYW5kIHJlbW90ZSByY3Avc2NwIHByb2Nlc3MsCiAgICAgbm90aWNlZCBieSBsY2FtdHVmOyBvayBkZXJhYWR0QCwgZGptQAoKMjAwNDA0MTgKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBMb2cgdXNlcm5hbWUgYW5kIHNvdXJjZSBob3N0IGZvciBmYWlsZWQgUEFNCiAgIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHRzLiAgV2l0aCAmIG9rIGRqbUAKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2JzZC1jeWd3aW5fdXRpbC5jXSBSZWNlbnQgdmVyc2lvbnMgb2YgQ3lnd2luIGFsbG93CiAgIGNoYW5nZSBvZiB1c2VyIGNvbnRleHQgd2l0aG91dCBhIHBhc3N3b3JkLCBzbyByZWxheCBhdXRoIG1ldGhvZCAKICAgcmVzdHJpY3Rpb25zOyBmcm9tIHZpbnNjaGVuIEFUIHJlZGhhdC5jb207IG9rIGR0dWNrZXJACgoyMDA0MDQxNgogLSAoZHR1Y2tlcikgW3JlZ3Jlc3Mvc2Z0cC1jbWRzLnNoXSBTa2lwIHF1b3RpbmcgdGVzdCBvbiBDeWd3aW4sIHNpbmNlCiAgIEZBVC9OVEZTIGRvZXMgbm90IHBlcm1pdCBxdW90ZXMgaW4gZmlsZW5hbWVzLiAgRnJvbSB2aW5zY2hlbiBhdCByZWRoYXQuY29tCiAtIChkam0pIFthdXRoLWtyYjUuYyBhdXRoLmggc2Vzc2lvbi5jXSBFeHBsaWNpdGx5IHJlZmVyIHRvIEtlcmJlcm9zIGNjYWNoZSAKICAgZmlsZSB1c2luZyBGSUxFOiBtZXRob2QsIGZpeGVzIHByb2JsZW1zIG9uIE1hYyBPU1guCiAgIFBhdGNoIGZyb20gc2ltb25Ac3h3Lm9yZy51azsgb2sgZHR1Y2tlckAKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gU2V0IFNFVEVVSURfQlJFQUtTX1NFVFVJRCwgQlJPS0VOX1NFVFJFVUlEIGFuZAogICBCUk9LRU5fU0VUUkVHSUQgZm9yIFNDTyBPcGVuU2VydmVyIDMKCjIwMDQwNDEyCiAtIChkdHVja2VyKSBbc3NoZF9jb25maWcuNV0gQWRkIFBlcm1pdFJvb3RMb2dpbiB3aXRob3V0LXBhc3N3b3JkIHdhcm5pbmcKICAgZnJvbSBidWcgIzcwMSAodGV4dCBmcm9tIGpmaCBhdCBjaXNlLnVmbC5lZHUpLgogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIGRlZmluZXMuaF0gQnVnICM2NzM6IGNoZWNrIGZvciA0LWFyZwogICBza2V5Y2hhbGxlbmdlKCksIGVnIG9uIE5ldEJTRC4gIG9rIG1vdXJpbmdACiAtIChkdHVja2VyKSBbYXV0aC1za2V5LmMgZGVmaW5lcy5oIG1vbml0b3IuY10gTWFrZSBza2V5Y2hhbGxlbmdlIGV4cGxpY2l0bHkKICAgNC1hcmcsIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgMy1hcmcgdmVyc2lvbnMuICBGcm9tIGRqbUAsIG9rIG1lLgogLSAoZGptKSBbY29uZmlndXJlLmFjXSBGaXggZGV0ZWN0aW9uIG9mIGxpYndyYXAgb24gT3BlbkJTRDsgb2sgZHR1Y2tlckAKCjIwMDQwNDA4CiAtIChkdHVja2VyKSBbbG9naW5yZWMuY10gVXNlIFVUX0xJTkVTSVpFIGlmIGF2YWlsYWJsZSwgcHJldmVudHMgdHJ1bmNhdGluZwogICBwdHkgbmFtZSBvbiBMaW51eCAyLjYueCBzeXN0ZW1zLiAgUGF0Y2ggZnJvbSBqcGUgYXQgZWlzZW5tZW5nZXIub3JnLgogLSAoYmFsKSBbbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jXSBTZWNvbmQgdHJ5LiAgUHV0IHRoZSB6bGliLmggaGVhZGVycwogICBiYWNrIGFuZCAjdW5kZWYgVEFSR0VUX09TX01BQyBpbnN0ZWFkLiAgKEJ1ZyByZXBvcnQgcGVuZGluZyB3aXRoIEFwcGxlKQogLSAoZHR1Y2tlcikgW2RlZmluZXMuaCBsb2dpbnJlYy5jXSBEZWZpbmUgVVRfTElORVNJWkUgaWYgbm90IGRlZmluZWQgYW5kCiAgIHNpbXBsaWZ5IGxvZ2lucmVjLmMuICBvayB0aW1ACiAtIChiYWwpIFttb25pdG9yLmMgbW9uaXRvcl93cmFwLmNdIE9rLi4gTGFzdCB0aW1lLiAgUHJvbWlzZS4gIFRpbSBzdWdnZXN0ZWQKICAgbGltaXRpbmcgc2NvcGUgYW5kIGR0dWNrZXJAIGFncmVlZC4KCjIwMDQwNDA3CiAtIChkdHVja2VyKSBbc2Vzc2lvbi5jXSBGbHVzaCBzdGRvdXQgYWZ0ZXIgZGlzcGxheWluZyBsb2dpbm1zZy4gIEZyb20KICAgZl9tb2hyIGF0IHlhaG9vLmRlLgogLSAoYmFsKSBbYWNjb25maWcuaCBhdXRoLWtyYjUuYyBjb25maWd1cmUuYWMgZ3NzLXNlcnYta3JiNS5jXSBDaGVjayB0byBzZWUKICAgaWYgS3JiNSBsaWJyYXJ5IGV4cG9ydHMga3JiNV9pbml0X2V0YygpIHNpbmNlIHNvbWUgT1NlcyAobGlrZSBNYWNPUy9YKQogICBhcmUgc3RhcnRpbmcgdG8gcmVzdHJpY3QgaXQgYXMgaW50ZXJuYWwgc2luY2UgaXQgaXMgbm90IG5lZWRlZCBieQogICBkZXZlbG9wZXJzIGFueSBtb3JlLiAoUGF0Y2ggYmFzZWQgb24gQXBwbGUgdHJlZSkKIC0gKGJhbCkgW21vbml0b3IuYyBtb25pdG9yX3dyYXAuY10gbW9uaXRvcl93cmFwLmNdIG1vdmVkIHpsaWIuaCBoaWdoZXIgc2luY2UgCiAgIGtyYjUgb24gTWFjT1MvWCBjb25mbGljdHMuICBUaGVyZSBtYXkgYmUgYSBiZXR0ZXIgc29sdXRpb24sIGJ1dCB0aGlzIHdpbGwgCiAgIHdvcmsgZm9yIG5vdy4KCjIwMDQwNDA2CiAtIChkdHVja2VyKSBbYWNjb25maWcuaCBjb25maWd1cmUuYWMgZGVmaW5lcy5oXSBCdWcgIzgyMDogZG9uJ3QgdXNlCiAgIHVwZHd0bXB4KCkgb24gSVJJWCBzaW5jZSBpdCBzZWVtcyB0byBjbG9iYmVyIHV0bXAuICBvayBkam1ACiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzgxNiwgIzc0OCAoYWdhaW4pOiBBdHRlbXB0IHRvIGRldGVjdAogICBicm9rZW4gZ2V0YWRkcmluZm8gYW5kIGZyaWVuZHMgb24gSFAtVVguICBvayBkam1ACgoyMDA0MDMzMAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM4MTE6IFVzZSAiISIgZm9yIExPQ0tFRF9QQVNTV0RfUFJFRklYIG9uCiAgIExpbnV4ZXMsIHNpbmNlIHRoYXQncyB3aGF0IG1hbnkgdXNlLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIHJlbmFtZSB0aGVfYXV0aGN0eHQgdG8gc3NocGFtX2F1dGhjdHh0IGluIGF1dGgtcGFtLmMKICAgdG8gcmVkdWNlIHBvdGVudGlhbCBjb25mdXNpb24gd2l0aCB0aGUgb25lIGluIHNzaGQuYy4gIG9rIGRqbUAKIC0gKGRqbSkgQnVnICM4MjU6IEZpeCBpcF9vcHRpb25zX2NoZWNrKCkgZm9yIG1hcHBlZCBJUHY0L0lQdjYgY29ubmVjdGlvbjsgCiAgIHdpdGggJiBvayBkdHVja2VyQAoKMjAwNDAzMjcKIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmNdIEJ1ZyAjODE3OiBDbGVhciBsb2dpbm1zZyBhZnRlciBmb3JrIHRvIHByZXZlbnQKICAgZHVwbGljYXRlIGxvZ2luIG1lc3NhZ2VzIGZvciBtdXRsaS1zZXNzaW9uIGxvZ2lucy4gIG9rIGRqbUAKCjIwMDQwMzIyCiAtIChkam0pIFtzc2hkLmNdIERyb3Agc3VwcGxlbWVudGFsIGdyb3VwcyBpZiBzdGFydGVkIGFzIHJvb3QKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8wOSAyMjoxMTowNQogICAgIFtzc2guY10KICAgICBpbmNyZWFzZSB4MTEgY29va2llIGxpZmV0aW1lIHRvIDIwIG1pbnV0ZXM7IG9rIGRqbQogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8xMCAwOTo0NTowNgogICAgIFtzc2guY10KICAgICB0cmltIHVzYWdlIHRvIG1hdGNoIHNzaCgxKSBhbmQgbG9vayBtb3JlIGxpa2UgdW5peC4gb2sgZGptQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8xMSAwODozNjoyNgogICAgIFtzc2hkLmNdCiAgICAgdHJpbSB1c2FnZTsgb2sgZGVyYWFkdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8xMSAxMDoyMToxNwogICAgIFtzc2guYyBzc2hkLmNdCiAgICAgc3NoLCBzc2hkOiBzeW5jIHZlcnNpb24gb3V0cHV0LCBvayBkam0KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDMvMjAgMTA6NDA6NTkKICAgICBbdmVyc2lvbi5oXQogICAgIDMuOC4xCiAtIChkam0pIENyYW5rIFJQTSBzcGVjIHZlcnNpb25zCgoyMDA0MDMxMQogLSAoZGptKSBbY29uZmlndXJlLmFjXSBBZGQgc3RhbmRhcmQgbGljZW5zZSB0byBjb25maWd1cmUuYWM7IG9rIGJlbiwgZHR1Y2tlcgoKMjAwNDAzMTAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuaF0gQnVnICM4MTI6ICN1bmRlZiBnZXRhZGRyaW5mbwogICBiZWZvcmUgcmVkZWZpbmluZyBpdCwgc2lsZW5jZXMgd2FybmluZ3Mgb24gVHJ1NjQuCgoyMDA0MDMwOAogLSAoZHR1Y2tlcikgW3NzaGQuY10gQmFjayBvdXQgcmV2IDEuMjcwIGFzIGl0IGNhdXNlZCBwcm9ibGVtcyBvbiBzb21lCiAgIHBsYXRmb3JtcyAoZWcgU0NPLCBIUC1VWCkgd2l0aCBsb2dnaW5nIGluIHRoZSB3cm9uZyBUWi4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgc3NoZC5jIG9wZW5ic2QtY29tcGF0L2JzZC1taXNjLmgKICAgb3BlbmJzZC1jb21wYXQvc2V0ZW52LmNdIFVuc2V0IEtSQjVDQ05BTUUgb24gQUlYIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZwogICBpbmhlcml0ZWQgYnkgdGhlIGNoaWxkLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmMgYXV0aC1wYW0uaCBhdXRoMS5jIGF1dGgyLmMgbW9uaXRvci5jIG1vbml0b3Jfd3JhcC5jCiAgIG1vbml0b3Jfd3JhcC5oXSBCdWcgIzgwODogRW5zdXJlIGZvcmNlX3B3Y2hhbmdlIGlzIGNvcnJlY3RseSBpbml0aWFsaXplZAogICBldmVuIGlmIGtleWJvYXJkLWludGVyYWN0aXZlIGlzIG5vdCB1c2VkIGJ5IHRoZSBjbGllbnQuICBQcmV2ZW50cyAKICAgc2VnZmF1bHRzIGluIHNvbWUgY2FzZXMgd2hlcmUgdGhlIHVzZXIncyBwYXNzd29yZCBpcyBleHBpcmVkIChub3RlIHRoaXMgCiAgIGlzIG5vdCBjb25zaWRlcmVkIGEgc2VjdXJpdHkgZXhwb3N1cmUpLiAgb2sgZGptQAogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzAzIDA2OjQ3OjUyCiAgICAgW3NzaGQuY10KICAgICBjaGFuZ2UgcHJvY3RpbHRsZSBhZnRlciBhY2NlcHQoMik7IG9rIGhlbm5pbmcsIGRlcmFhZHQsIGRqbQogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8wMyAwOTozMDo0MgogICAgIFtzZnRwLWNsaWVudC5jXQogICAgIERvbid0IHByaW50IGR1cGxpY2F0ZSBtZXNzYWdlcyB3aGVuIHByb2dyZXNzbWV0ZXIgaXMgb2ZmCiAgICAgU3BvdHRlZCBieSBqb2IzMTcgQVQgbWFpbHZhdWx0LmNvbTsgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8wMyAwOTozMToyMAogICAgIFtzZnRwLmNdCiAgICAgRml4IGluaXRpYWxpc2F0aW9uIG9mIHByb2dyZXNzIG1ldGVyOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAzLzA1IDEwOjUzOjU4CiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzY3AuMSBzZnRwLjEgc3NoLjEgc3NoX2NvbmZpZy41IHNzaGNvbm5lY3QyLmNdCiAgICAgYWRkIElkZW50aXRpZXNPbmx5OyBvayBkam1ALCBwYkAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDMvMDggMDk6Mzg6MDUKICAgICBbc3NoLWtleXNjYW4uY10KICAgICBleHBsaWNpdGx5IGluaXRpYWxpc2UgcmVtb3RlX21ham9yIGFuZCByZW1vdGVfbWlub3IuCiAgICAgZnJvbSBjandhdHNvbiBBVCBkZWJpYW4ub3JnOyBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMy8wOCAxMDoxODo1NwogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIERvY3VtZW50IEtlcmJlcm9zR2V0QUZTVG9rZW47ICBvayBtYXJrdXNACiAtICh0aW0pIFtyZWdyZXNzL1JFQURNRS5yZWdyZXNzXSBEb2N1bWVudCBzc2gtcmFuZC1oZWxwZXIgaXNzdWUuIG9rIGJhbAoKMjAwNDAzMDcKIC0gKHRpbSkgW3JlZ3Jlc3MvbG9naW4tdGltZW91dC5zaF0gZml4IGJ1aWxkaW5nIG91dHNpZGUgb2Ygc291cmNlIHRyZWUuCgoyMDA0MDMwNAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIERvbid0IHRyeSB0byBleHBvcnQgUEFNIHdoZW4gY29tcGlsZWQgd2l0aAogICAtRFVTRV9QT1NJWF9USFJFQURTLiAgRnJvbSBhbnRvaW5lLnZlcmhlaWplbiBhdCB1YWxiZXJ0IGNhLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIFJlc2V0IHNpZ25hbCBzdGF0dXMgd2hlbiBzdGFydGluZyBwYW0gYXV0aCB0aHJlYWQsCiAgIHByZXZlbnQgaGFuZ2luZyBkdXJpbmcgUEFNIGtleWJvYXJkLWludGVyYWN0aXZlIGF1dGhlbnRpY2F0aW9ucy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXBhc3N3ZC5jIGF1dGgtc2lhLmMgYXV0aC1zaWEuaCBkZWZpbmVzLmgKICAgb3BlbmJzZC1jb21wYXQveGNyeXB0LmNdIEJ1ZyAjODAyOiBGaXggYnVpbGQgZXJyb3Igb24gVHJ1NjQgd2hlbgogICBjb25maWd1cmVkIC0td2l0aC1vc2ZzaWEuICBvayBkam1ACgoyMDA0MDMwMwogLSAoZGptKSBbY29uZmlndXJlLmFjIHNzaC1hZ2VudC5jXSBVc2UgcHJjdGwgdG8gcHJldmVudCBwdHJhY2Ugb24gc3NoLWFnZW50CiAgIG9rIGR0dWNrZXIgIAoKMjAwNDAyMjkKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gUHV0IGJhY2sgYml0cyBtaXN0YWtlbmx5IHJlbW92ZWQgZnJvbSBSZXYgMS4xODgKCjIwMDQwMjI5CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzI1IDAwOjIyOjQ1CiAgICAgW3NzaGQuY10KICAgICB0eXBvIGluIGNvbW1lbnQKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzI3IDIyOjQyOjQ3CiAgICAgW2RoLmNdCiAgICAgUHJldmVudCBzc2hkIGZyb20gc2VuZGluZyBESCBncm91cHMgd2l0aCBhIHByaW1pdGl2ZSBnZW5lcmF0b3Igb2YgemVybyBvcgogICAgIG9uZSwgZXZlbiBpZiB0aGV5IGFyZSBsaXN0ZWQgaW4gL2V0Yy9tb2R1bGkuICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8yNyAyMjo0NDo1NgogICAgIFtkaC5jXQogICAgIE1ha2UgL2V0Yy9tb2R1bGkgbGluZSBidWZmZXIgYmlnIGVub3VnaCBmb3IgOGtiaXQgcHJpbWVzLCBpbiBjYXNlIGFueW9uZQogICAgIGV2ZXIgdXNlcyBvbmUuICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8yNyAyMjo0OToyNwogICAgIFtkaC5jXQogICAgIFJlc2V0IGJpdCBjb3VudGVyIGF0IHRoZSByaWdodCB0aW1lLCBmaXhlcyBkZWJ1ZyBvdXRwdXQgaW4gdGhlIGNhc2Ugd2hlcmUKICAgICB0aGUgREggZ3JvdXAgaXMgcmVqZWN0ZWQuICBvayBtYXJrdXNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8xNyAwODoyMzoyMAogICAgIFtyZWdyZXNzL01ha2VmaWxlIHJlZ3Jlc3MvbG9naW4tdGltZW91dC5zaF0KICAgICBBZGQgcmVncmVzc2lvbiB0ZXN0IGZvciBMb2dpbkdyYWNlVGltZTsgb2sgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8yNCAxNjo1NjozMAogICAgIFtyZWdyZXNzL3Rlc3QtZXhlYy5zaF0KICAgICBhbGxvdyBhcmd1bWVudHMgaW4gJHtURVNUX1NTSF9YWFh9CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzI0IDE3OjA2OjUyCiAgICAgW3JlZ3Jlc3Mvc3NoLWNvbS1jbGllbnQuc2ggcmVncmVzcy9zc2gtY29tLWtleWdlbi5zaAogICAgIHJlZ3Jlc3Mvc3NoLWNvbS1zZnRwLnNoIHJlZ3Jlc3Mvc3NoLWNvbS5zaF0KICAgICB0ZXN0IGFnYWluc3QgcmVjZW50IHNzaC5jb20gcmVsZWFzZXMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzI4IDEyOjE2OjU3CiAgICAgW3JlZ3Jlc3MvZHluYW1pYy1mb3J3YXJkLnNoXQogICAgIE1ha2UgZHluYW1pYy1mb3J3YXJkIHVuZGVyc3RhbmQgbmMncyBuZXcgb3V0cHV0LiAgb2sgbWFya3VzQAogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMjggMTM6NDQ6NDUKICAgICBbcmVncmVzcy90cnktY2lwaGVycy5zaF0KICAgICBUZXN0IGFjc3MgdG9vOyBvayBtYXJrdXNACiAtIChkdHVja2VyKSBbcmVncmVzcy90cnktY2lwaGVycy5zaF0gU2tpcCBhY3NzIGlmIG5vdCBjb21waWxlZCBpbiAoZWcgaWYgd2UKICAgYnVpbHQgd2l0aCBvcGVuc3NsIDwgMC45LjcpCgoyMDA0MDIyNgogLSAoYmFsKSBLTkYgb3VyIHNzaGxvZ2luLmMgZXZlbiBpZiB0aGUgY29kZSBsb29rcyBub3RoaW5nIGxpa2UgdXBzdHJlYW0KICAgY29kZSBkdWUgdG8gZGl2ZXJzaXR5IGlzc3Vlcy4KCjIwMDQwMjI1CiAtIChkam0pIFRyaW0gQ2hhbmdlTG9nIAogLSAoZGptKSBEb24ndCBzcGVjaWZ5IHBhdGggdG8gUEFNIG1vZHVsZXMgaW4gUmVkaGF0IHNzaGQucGFtOyBmcm9tIEZlZG9yYQoKMjAwNDAyMjQKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMTkgMjE6MTU6MDQKICAgICBbc2Z0cC1zZXJ2ZXIuY10KICAgICBzd2l0Y2ggdG8gbmV3IGxpY2Vuc2UudGVtcGxhdGUKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMjMgMTI6MDI6MzMKICAgICBbc3NoZC5jXQogICAgIGJhY2tvdXQgcmV2aXNpb24gMS4yNzk7IHNldCBsaXN0ZW4gc29ja2V0IHRvIG5vbi1ibG9jazsgb2sgaGVubmluZy4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMjMgMTU6MTI6NDYKICAgICBbYnVmYXV4LmNdCiAgICAgZW5jb2RlIDAgY29ycmVjdGx5IGluIGJ1ZmZlcl9wdXRfYmlnbnVtMjsgbm90ZWQgYnkgTWlrdWxhcyBQYXRvY2thCiAgICAgYW5kIGRyb3Agc3VwcG9ydCBmb3IgbmVnYXRpdmUgQk5zOyBvayBvdHRvQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8yMyAxNToxNjo0NgogICAgIFt2ZXJzaW9uLmhdCiAgICAgZW50ZXIgMy44CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGdzcy1zZXJ2LWtyYjUuYyBzc2gtZ3NzLmhdIERlZmluZSBHU1NBUEkgd2hlbiBmb3VuZAogICB3aXRoIGtyYjUtY29uZmlnLCBodW50IGRvd24gZ3NzYXBpLmggYW5kIGZyaWVuZHMuICBCYXNlZCBwYXJ0aWFsbHkgb24gcGF0Y2gKICAgZnJvbSBkZWVuZ2VydCBhdCBhbmwuZ292LiAgb2sgZGptQAogLSAoZGptKSBbZ3JvdXBhY2Nlc3MuYyB1aWRzd2FwLmNdIEJ1ZyAjNzg3OiBTaXplIGdyb3VwIGFycmF5cyBhdCBydW50aW1lIAogICB1c2luZyBzeXNjb25mKCkgaWYgYXZhaWxhYmxlIEJhc2VkIG9uIHBhdGNoZXMgZnJvbSAKICAgaG9sZ2VyIEFUIHZhbi1sZW5nZXJpY2guZGUgYW5kIG9wZW5zc2hfYnVnemlsbGEgQVQgaG9ja2luLm9yZwogLSAoZHR1Y2tlcikgW3VpZHN3YXAuY10gTWlub3IgS05GLiAgb2sgZGptQAogLSAodGltKSBbb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuY10gTWFrZSBnY2MgMi43LjIuMyBoYXBweS4gIG9rIGRqbUAKIC0gKGRqbSkgQ3JhbmsgUlBNIHNwZWMgdmVyc2lvbnMKIC0gKGR0dWNrZXIpIFtSRUFETUVdIEFkZCBwb2ludGVyIHRvIHJlbGVhc2Ugbm90ZXMuICBvayBkam1ACiAtIChkdHVja2VyKSB7UkVBRE1FLnBsYXRmb3JtXSBBZGQgcGxhdGZvcm0tc3BlY2lmaWMgbm90ZXMuCiAtICh0aW0pIFtjb25maWd1cmUuYWNdIFNDTzMgbmVlZHMgLWxjcnlwdF9pIGZvciAtbHByb3QKIC0gKGRqbSkgUmVsZWFzZSAzLjhwMQoKMjAwNDAyMjMKIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmNdIEJ1ZyAjNzg5OiBPbmx5IG1ha2Ugc2V0Y3JlZCBjYWxsIGZvciAhcHJpdnNlcCBpbiB0aGUKICAgbm9uLWludGVyYWN0aXZlIHBhdGguICBvayBkam1ACgoyMDA0MDIyMgogLSAoZHR1Y2tlcikgW2F1dGgtc2hhZG93LmMgYXV0aC5jIGF1dGguaF0gTW92ZSBzaGFkb3cgYWNjb3VudCBleHBpcnkgdGVzdAogICB0byBhdXRoLXNoYWRvdy5jLCBubyBmdW5jdGlvbmFsIGNoYW5nZS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXNoYWRvdy5jIGF1dGguaF0gUHJvdmlkZSB3YXJuaW5ncyBvZiBpbXBlbmRpbmcgYWNjb3VudCBvcgogICBwYXNzd29yZCBleHBpcnkuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1wYXNzd2QuY10gT25seSBjaGVjayBwYXNzd29yZCBleHBpcnkgb25jZS4gIFByZXZlbnRzCiAgIG11bHRpcGxlIHdhcm5pbmdzIGlmIGEgd3JvbmcgcGFzc3dvcmQgaXMgZW50ZXJlZC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEFwcGx5IGtyYjUtY29uZmlnIC0tbGlicyBmaXggdG8gbm9uLWdzc2FwaSBwYXRoCiAgIHRvby4KCjIwMDQwMjIwCiAtIChkam0pIFtvcGVuYnNkLWNvbXBhdC9zZXRwcm9jdGl0bGUuY10gZml4IGNvbW1lbnRzOyBmcm9tIGdyYW5nZUAKCjIwMDQwMjE4CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBIYW5kbGUgY2FzZSB3aGVyZSBrcmI1LWNvbmZpZyAtLWxpYnMgcmV0dXJucyBhCiAgIHBhdGggd2l0aCBhICItIiBpbiBpdC4gIEZyb20gU2VyZ2lvLkdlbGF0byBhdCBhc3Ryby5zdS5zZS4KIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8xNyAwNzoxNzoyOQogICAgIFtzZnRwLWdsb2IuYyBzZnRwLmNdCiAgICAgUmVtb3ZlIHVzZWxlc3MgaGVhZGVyczsgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMTcgMTE6MDM6MDgKICAgICBbc2Z0cC5jXQogICAgIHNmdHAuYyBhbmQgc2Z0cC1pbnQuYywgdG9nZXRoZXIgYXQgbGFzdDsgb2sgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMi8xNyAxOTozNToyMQogICAgIFtzc2hkX2NvbmZpZy41XQogICAgIHJlbW92ZSBjcnVmdCBsZWZ0IG92ZXIgZnJvbSBSaG9zdHNBdXRoZW50aWNhdGlvbiByZW1vdmFsOwogICAgIG9rIG1hcmt1c0AKIC0gKGRqbSkgW2xvZy5jXSBDb3JyZWN0IHVzZSBvZiBIQVZFX09QRU5MT0dfUgogLSAoZGptKSBbbG9nLmNdIFRpZ2h0ZW4gb3BlbmxvZ19yIHRlc3RzCgoyMDA0MDIxNwogLSAoZGptKSBTaW1wbGlmeSB0aGUgbGljZW5zZSBvbiBjb2RlIEkgaGF2ZSB3cml0dGVuLiBObyBjb2RlIGNoYW5nZXMuCiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDIvMTcgMDU6Mzk6NTEKICAgICBbc2Z0cC1jbGllbnQuYyBzZnRwLWNsaWVudC5oIHNmdHAtZ2xvYi5jIHNmdHAtZ2xvYi5oIHNmdHAtaW50LmNdCiAgICAgW3NmdHAtaW50Lmggc2Z0cC5jXQogICAgIHN3aXRjaCB0byBsaWNlbnNlLnRlbXBsYXRlIGZvciBjb2RlIHdyaXR0ZW4gYnkgbWUgKGJlbGF0ZWQsIEkga25vdy4uLikKIC0gKGRqbSkgQnVnICM2OTg6IFNwZWNpZnkgRklMRTogZm9yIEtSQjVDQ05BTUU7IHBhdGNoIGZyb20gCiAgIHN0YWRhbEBzdXNlLmN6IGFuZCBzaW1vbkBzeHcub3JnLnVrCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gVGlkeSB1cCBQQU0gZGVidWdnaW5nLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIFN0b3JlIG91dHB1dCBmcm9tIHBhbV9zZXNzaW9uIGFuZCBwYW1fc2V0Y3JlZCBmb3IKICAgZGlzcGxheSBhZnRlciBsb2dpbi4gIFNob3VsZCBmaXggcHJvYmxlbXMgbGlrZSBwYW1fbW90ZCBub3QgZGlzcGxheWluZwogICBhbnl0aGluZywgbm90aWNlZCBieSBjandhdHNvbiBhdCBkZWJpYW4ub3JnLiAgb2sgZGptQAoKMjAwNDAyMTIKIC0gKHRpbSkgW01ha2VmaWxlLmluIHJlZ3Jlc3Mvc2Z0cC1iYWRjbWRzLnNoIHJlZ3Jlc3MvdGVzdC1leGVjLnNoXQogICBQb3J0YWJsaXR5IGZpeGVzLiBEYXRhIHNmdHAgdHJhbnNmZXJzIG5lZWRzIHRvIGJlIHdvcmxkIHJlYWRhYmxlLiBTb21lCiAgIG9sZGVyIHNoZWxscyBoYW5nIG9uIHdoaWxlIGxvb3BzIHdoZW4gIGRvaW5nIHNoIC1uIHNvbWVfc2NyaXB0LiBPSyBkdHVja2VyQAogLSAodGltKSBbY29uZmlndXJlLmFjXSBNYWtlIHN1cmUgLWxjcnlwdG8gaXMgYmVmb3JlIC1sc29ja2V0IGZvciBzY28zLgogICBvayBtb3VyaW5nQAoKMjAwNDAyMTEKIC0gKGR0dWNrZXIpIFthdXRoLXBhc3N3ZC5jIGF1dGgtc2hhZG93LmNdIE9ubHkgZW5hYmxlIHNoYWRvdyBleHBpcnkgY2hlY2sKICAgaWYgSEFTX1NIQURPV19FWFBJUlkgaXMgc2V0LgogLSAodGltKSBbY29uZmlndXJlLmFjXSBGaXggY29tbWVudCB0byBtYXRjaCBjb2RlIGNoYW5nZXMgaW4gdmVyIDEuMTE3CgoyMDA0MDIxMAogLSAoZHR1Y2tlcikgW2F1dGgtcGFzc3dkLmMgYXV0aC5oIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmMKICAgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaF0gQnVnICMxNDogVXNlIGRvX3B3Y2hhbmdlIHRvIHN1cHBvcnQgQUlYJ3MKICAgbmF0aXZlIHBhc3N3b3JkIGV4cGlyeS4KIC0gKGR0dWNrZXIpIFtMSUNFTkNFIE1ha2VmaWxlLmluIGF1dGgtcGFzc3dkLmMgYXV0aC1zaGFkb3cuYyBhdXRoLmMgYXV0aC5oCiAgIGRlZmluZXMuaF0gQnVnICMxNDogVXNlIGRvX3B3Y2hhbmdlIHRvIHN1cHBvcnQgcGFzc3dvcmQgZXhwaXJ5IGFuZCBmb3JjZQogICBjaGFuZ2UgZm9yIHBsYXRmb3JtcyB1c2luZyAvZXRjL3NoYWRvdy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtvcGVuYnNkLWNvbXBhdC9mYWtlLXJmYzI1NTMuaF0gQnVnICM1NjM6IFByZXBlbmQgc3NoXyB0byBjb21wYXQKICAgZnVuY3Rpb25zIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIEhlaW1kYWwncyBsaWJyb2tlbi4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jIGF1dGgtcGFtLmggc2Vzc2lvbi5jXSBCdWcgIzE0OiBVc2UgZG9fcHdjaGFuZ2UgdG8KICAgY2hhbmdlIGV4cGlyZWQgUEFNIHBhc3N3b3JkcyBmb3IgU1NIdjEgY29ubmVjdGlvbnMgd2l0aG91dCBwcml2c2VwLgogICBwYW1fY2hhdXRodG9rIGlzIHN0aWxsIHVzZWQgd2hlbiBwcml2c2VwIGlzIGRpc2FibGVkLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaF0gTW92ZQogICBpbmNsdWRlIGZyb20gcG9ydC1haXguaCB0byBwb3J0LWFpeC5jIGFuZCByZW1vdmUgdW5uZWNlc3NhcnkgZnVuY3Rpb24KICAgZGVmaW5pdGlvbi4gIEZpeGVzIGJ1aWxkIGVycm9ycyBvbiBBSVguCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGxvZ2lucmVjLmNdIEJ1ZyAjNDY0OiBVc2UgdXBkd3RtcHggb24gcGxhdGZvcm1zCiAgIHRoYXQgc3VwcG9ydCBpdC4gIGZyb20gJiBvayBtb3VyaW5nQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICMzNDU6IERvIG5vdCBkaXNhYmxlIHV0bXAgb24gSFAtVVggMTAueC4KICAgb2sgZGptQAoKMjAwNDAyMDcKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzA2IDIzOjQxOjEzCiAgICAgW2NpcGhlci1jdHIuY10KICAgICBVc2UgRVZQX0NJUEhFUl9DVFhfa2V5X2xlbmd0aCBmb3Iga2V5IGxlbmd0aC4gIG9rIG1hcmt1c0AKICAgICAoVGhpcyB3aWxsIGZpeCBidWlsZHMgd2l0aCBPcGVuU1NMIDAuOS41KQogLSAoZHR1Y2tlcikgW2NpcGhlci5jXSBlbmFibGUgQUVTIGNvdW50ZXIgbW9kZXMgd2l0aCBPcGVuU1NMIDAuOS41LgogICBvayBkam1ALCBtYXJrdXNACgoyMDA0MDIwNgogLSAoZHR1Y2tlcikgW2Fjc3MuYyBhY3NzLmhdIEZpeCAkSWQgdGFncy4KIC0gKGR0dWNrZXIpIFtjaXBoZXItYWNzcy5jIGNpcGhlci5jXSBFbmFibGUgYWNzcyBvbmx5IGlmIGJ1aWxkaW5nIHdpdGgKICAgT3BlblNTTCA+PSAwLjkuNy4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtzZXNzaW9uLmNdIEJ1ZyAjNzg5OiBEbyBub3QgY2FsbCBkb19wYW1fc2V0Y3JlZCBhcyBhIG5vbi1yb290CiAgIHVzZXIsIHNpbmNlIHNvbWUgbW9kdWxlcyBtaWdodCBmYWlsIGR1ZSB0byBsYWNrIG9mIHByaXZpbGVnZS4gIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjNzQ4OiBBbHdheXMgZGVmaW5lIEJST0tFTl9HRVRBRERSSU5GTwogICBmb3IgSFAtVVggMTEuMTEuICBJZiB0aGVyZSBhcmUga25vd24tZ29vZCBjb25maWdzIHdoZXJlIHRoaXMgaXMgbm90CiAgIHJlcXVpcmVkLCBwbGVhc2UgcmVwb3J0IHRoZW0uICBvayBkam1ACiAtIChkdHVja2VyKSBbc3NoZC5jXSBCdWcgIzc1NzogQ2xlYXIgY2hpbGQncyBlbnZpcm9ubWVudCB0byBwcmV2ZW50CiAgIGFjY2lkZW50YWxseSBpbmhlcml0aW5nIGZyb20gcm9vdCdzIGVudmlyb25tZW50LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW29wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmMgb3BlbmJzZC1jb21wYXQvcG9ydC1haXguaF0gQnVnICM3OTY6CiAgIFJlc3RvcmUgcHJldmlvdXMgYXV0aGRiIHNldHRpbmcgYWZ0ZXIgYXV0aCBjYWxscy4gIEZpeGVzIHByb2JsZW1zIHdpdGgKICAgc2V0cGNyZWQgZmFpbGluZyBvbiBhY2NvdW50cyB0aGF0IHVzZSBBRlMgb3IgTklTIHBhc3N3b3JkIHJlZ2lzdHJpZXMuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIGluY2x1ZGVzLmhdIEluY2x1ZGUgPHN5cy9zdHJlYW0uaD4gaWYgcHJlc2VudCwKICAgcmVxdWlyZWQgb24gU29sYXJpcyAyLjUuMSBmb3IgcXVldWVfdCwgd2hpY2ggaXMgdXNlZCBieSA8c3lzL3B0bXMuaD4uCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzMwIDA5OjQ4OjU3CiAgICAgW2F1dGgtcGFzc3dkLmMgYXV0aC5oIHBhdGhuYW1lcy5oIHNlc3Npb24uY10KICAgICBzdXBwb3J0IGZvciBwYXNzd29yZCBjaGFuZ2U7IG9rIGR0dWNrZXJACiAgICAgKHNldCBwYXNzd29yZC1kZWFkPTF3IGluIGxvZ2luLmNvbmYgdG8gdXNlIHRoaXMpLgogICAgIEluIC1Qb3J0YWJsZSwgdGhpcyBpcyBjdXJyZW50bHkgb25seSBwbGF0Zm9ybXMgdXNpbmcgYnNkYXV0aC4KICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzA1IDA1OjM3OjE3CiAgICAgW21vbml0b3IuYyBzc2hkLmNdCiAgICAgUGFzcyBTSUdBTFJNIHRocm91Z2ggdG8gcHJpdnNlcCBjaGlsZCBpZiBMb2dpbkdyYWNlVGltZSBleHBpcmVzLiBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAyLzA1IDE1OjMzOjMzCiAgICAgW3Byb2dyZXNzbWV0ZXIuY10KICAgICBmaXggRVRBIGZvciA+IDRHQjsgYnVnemlsbGEgIzc5MTsgb2sgaGVubmluZ0AgZGVyYWFkdEAKCjIwMDQwMTI5CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jIHJlZ3Jlc3MvCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8xMSAxMTo0OTo0OQogICAgIFtNYWtlZmlsZSBiYW5uZXIuc2hdCiAgICAgVGVzdCBtaXNzaW5nIGJhbm5lciBmaWxlLCBzdXBwcmVzc2lvbiBvZiBiYW5uZXIgd2l0aCBzc2ggLXEsIGNoZWNrIHJldHVybgogICAgIGNvZGUgZnJvbSBzc2guICBvayBtYXJrdXNACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzA3IDEwOjE2OjQ0CiAgICAgW3NzaC1jb20uc2hdCiAgICAgYWRyZXNzIC0+IGFkZHJlc3MsIGFuZCBhIGZldyBtb3JlOyBhbGwgZnJvbSBKb25hdGhvbiBHcmF5OwogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMS8xMyAwOTo0OTowNgogICAgIFtzZnRwLWJhdGNoLnNoXQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQWRkIC0td2l0aG91dC16bGliLXZlcnNpb24tY2hlY2suICBGZWVkYmFjayBmcm9tCiAgIHRpbUAsIG9rIHNldmVyYWwKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQvYnNkLWNyYXkuYyBvcGVuYnNkLWNvbXBhdC9ic2QtY3JheS5oXQogICBCdWcgIzc3NTogQ3JheSBmaXhlcyBmcm9tIHdlbmR5IGF0IGNyYXkuY29tCgoyMDA0MDEyOAogLSAoZHR1Y2tlcikgW3JlZ3Jlc3MvUkVBRE1FLnJlZ3Jlc3NdIEFkZCB0Y3B3cmFwcGVycyBpc3N1ZSwgbm90ZWQgYnkgdGltQAogLSAoZHR1Y2tlcikgW21vZHVsaV0gSW1wb3J0IG5ldyBtb2R1bGkgZmlsZSBmcm9tIE9wZW5CU0QuCgoyMDA0MDEyNwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gaHNob2V4ZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMjMgMTc6MDY6MDMKICAgICBbY2lwaGVyLmNdCiAgICAgZW5hYmxlIGFjc3MgZm9yIHNzaAogICAgIG9rIGRlcmFhZHRAIG1hcmt1c0AKICAgLSBtb3VyaW5nQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzIzIDE3OjU3OjQ4CiAgICAgW3NmdHAtaW50LmNdCiAgICAgRml4IGlzc3VlIHBvaW50ZWQgb3V0IHdpdGggbHMgbm90IGhhbmRsaW5nIGxhcmdlIGRpcmVjdG9yaWVzIAogICAgIHdpdGggZW1iZWRlZCBwYXRocyBjb3JyZWN0bHkuICBPSyBkYW1pZW5ACiAgIC0gaHNob2V4ZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMjMgMTk6MjY6MzMKICAgICBbY2lwaGVyLmNdCiAgICAgcmVuYW1lIGFjc3NAb3BlYnNkLm9yZyB0byBhY3NzQG9wZW5zc2gub3JnCiAgICAgb2sgZGVyYWFkdEAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMjUgMDM6NDk6MDkKICAgICBbc3NoY29ubmVjdC5jXQogICAgIHJlc2V0IG5vbmJsb2NraW5nIGZsYWcgYWZ0ZXIgQ29ubmVjdFRpbWVvdXQgPiAwIGNvbm5lY3Q7IChidWd6aWxsYSAjNzg1KQogICAgIGZyb20gamNsb25ndWV0IEFUIGZyZWUuZnI7IG9rIG1pbGxlcnRACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzI3IDEwOjA4OjEwCiAgICAgW3NmdHAuY10KICAgICByZW9yZGVyIHBhcnNpbmcgc28gdXNlcjpza2V5QGhvc3Q6ZmlsZSB3b3JrcyAoYnVnemlsbGEgIzc3NykKICAgICBwYXRjaCBmcm9tIGFkbW9ydGVuIEFUIHVtaWNoLmVkdTsgb2sgbWFya3VzQAogLSAoZGptKSBbYWNzcy5jIGFjc3MuaCBjaXBoZXItYWNzcy5jXSBQb3J0YWJsZSBzdXBwb3J0IGZvciBBQ1NTIAogICBpZiBsaWJjcnlwdG8gbGFja3MgaXQKCjIwMDQwMTI2CiAtICh0aW0pIFR5cG8gaW4gcmVncmVzcy9SRUFETUUucmVncmVzcwogLSAodGltKSBbcmVncmVzcy90ZXN0LWV4ZWMuc2hdIFJob3N0c0F1dGhlbnRpY2F0aW9uIGlzIGRlcHJlY2F0ZWQuCiAtICh0aW0pIFtkZWZpbmVzLmhdIEFkZCBkZWZpbmVzIGZvciBIRklYRURTWiBhbmQgVF9TSUcKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hYyBpbmNsdWRlcy5oXSBhZGQgPHN5cy9wdG1zLmg+IGZvciBncmFudHB0KCkgYW5kIGZyaWVuZHMuCiAtICh0aW0pIFtkZWZpbmVzLmggb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuaF0gTW92ZSBkZWZpbmVzIGZvciBIRklYRURTWgogICBhbmQgVF9TSUcgdG8gZ2V0cnJzZXRieW5hbWUuaAoKMjAwNDAxMjQKIC0gKGRqbSkgVHlwbyBpbiBvcGVuYnNkLWNvbXBhdC9ic2Qtb3BlbnB0eS5jOyBmcm9tIHdlbmR5cCBBVCBjcmF5LmNvbQoKMjAwNDAxMjMgCiAtIChkam0pIERvIHBhbV9zZXNzaW9uIHByb2Nlc3NpbmcgZm9yIHN5c3RlbXMgd2l0aCBIQVZFX0xPR0lOX0NBUDsgZnJvbSAKICAgcmFsZi5oYWNrIEFUIHBpcGV4Lm5ldDsgb2sgZHR1Y2tlckAKIC0gKGRqbSkgQnVnICM3NzY6IFVwZGF0ZSBjb250cmliL3JlZGhhdC9vcGVuc3NoLnNwZWMgdG8gZHluYW1pY2FsbHkgZGV0ZWN0CiAgIEtlcmJlcm9zIGxvY2F0aW9uIChhbmQgdGh1cyB3b3JrIHdpdGggRmVkb3JhIENvcmUgMSk7CiAgIGZyb20gamFzb24gQVQgZGV2cmFuZG9tLm9yZwogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM3ODg6IFRlc3QgZm9yIHpsaWIuaCBwcmVzZW5jZSBhbmQgZm9yCiAgIHpsaWIgPj0gMS4xLjQuICBQYXJ0bHkgZnJvbSBqYmFzbmV5IGF0IG5jc2EudWl1Yy5lZHUuICBvayBkam1ACiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vUkVBRE1FXSBEb2N1bWVudCBuZXcgc3NoLWhvc3QtY29uZmlnIG9wdGlvbnMuCiAgIFBhdGNoIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KIC0gKGR0dWNrZXIpIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBpbmNsdWRlcy5oIHNlcnZjb25mLmMgc2Vzc2lvbi5jXQogICBDaGFuZ2UgQUZTIHN5bWJvbCB0byBVU0VfQUZTIHRvIHByZXZlbnQgbmFtZXNwYWNlIGNvbGxpc2lvbnMsIGRvIG5vdAogICBpbmNsdWRlIGthZnMuaCB1bmxlc3MgbmVjZXNzYXJ5LiAgRnJvbSBkZWVuZ2VydCBhdCBhbmwuZ292LgogLSAodGltKSBbY29uZmlndXJlLmFjXSBSZW1vdmUgaGFyZCBjb2RlZCAtTC91c3IvbG9jYWwvbGliIGFuZAogICAtSS91c3IvbG9jYWwvaW5jbHVkZS4gVXNlcnMgY2FuIGRvIExERkxBR1M9Ii1ML3Vzci9sb2NhbC9saWIiIFwKICAgQ1BQRkxBR1M9Ii1JL3Vzci9sb2NhbC9pbmNsdWRlIiAuL2NvbmZpZ3VyZSBpZiBuZWVkZWQuCgoyMDA0MDEyMgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gVXNlIGtyYjUtY29uZmlnIHdoZXJlIGF2YWlsYWJsZSBmb3IgS2VyYmVyb3MvCiAgIEdTU0FQSSBkZXRlY3Rpb24sIGxpYnMgYW5kIGluY2x1ZGVzLiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gRW5hYmxlIEFGUyBzdXBwb3J0IGluIGNvbmp1bmN0aW9uIHdpdGggS1JCNSBub3QKICAganVzdCBIRUlNREFMLgogLSAodGltKSBbY29udHJpYi9zb2xhcmlzL2J1aWxkcGtnLnNoXSBBbGxvdyBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mCiAgIC91c3IvbG9jYWwgYmVpbmcgYSBzeW1ib2xpYyBsaW5rLiBGaXhlcyBwcm9ibGVtIHJlcG9ydGVkIGJ5IEhlbnJ5IEdyZWJsZXIuCgoyMDA0MDEyMQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzEzIDA5OjI1OjA1CiAgICAgW3NmdHAtaW50LmMgc2Z0cC4xIHNmdHAuY10KICAgICBUaWR5IHNmdHAgYmF0Y2htb2RlIGhhbmRsaW5nLCBlbGltaW5hdGUganVuayB0byBzdGRlcnIgKGJ1Z3ppbGxhICM3NTQpIGFuZAogICAgIGVuYWJsZSB1c2Ugb2YgIi1iIC0iIHRvIGFjY2VwdCBiYXRjaGZpbGUgZnJvbSBzdGRpbjsgb2sgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMS8xMyAxMjoxNzozMwogICAgIFtzZnRwLjFdCiAgICAgcmVtb3ZlIHVubmVjZXNzYXJ5IEljJ3M7CiAgICAga2lsbCB3aGl0ZXNwYWNlIGF0IEVPTDsKICAgICBvayBkam1ACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzEzIDE5OjIzOjE1CiAgICAgW2NvbXByZXNzLmMgc2Vzc2lvbi5jXQogICAgIC1XYWxsOyBvayBoZW5uaW5nCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzEzIDE5OjQ1OjE1CiAgICAgW2NvbXByZXNzLmNdCiAgICAgY2FzdCBmb3IgcG9ydGFiaWxpdHk7IG1pbGxlcnRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDA0LzAxLzE5IDA5OjI0OjIxCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgZmFrZSBjb25zdW1wdGlvbiBmb3IgaGFsZiBjbG9zZWQgY2hhbm5lbHMgc2luY2UgdGhlIHBlZXIgaXMgd2FpdGluZyBmb3IKICAgICB3aW5kb3cgYWRqdXN0IG1lc3NhZ2VzOyBidWd6aWxsYSAjNzkwIE1hdHRoZXcgRGlsbG9uOyB0ZXN0ICsgb2sgZHR1Y2tlckAKICAgICByZXByb2R1Y2Ugd2l0aCBzaCAtYyAndWxpbWl0IC1mIDEwOyBzc2ggaG9zdCAtbiBvZCAvYnNkIHwgY2F0ID4gZm9vJwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwNC8wMS8xOSAyMToyNToxNQogICAgIFthdXRoMi1ob3N0YmFzZWQuYyBhdXRoMi1wdWJrZXkuYyBzZXJ2ZXJsb29wLmMgc3NoLWtleXNpZ24uYyBzc2hjb25uZWN0Mi5jXQogICAgIGZpeCBtZW0gbGVha3M7IHNvbWUgZml4ZXMgZnJvbSBQZXRlIEZsdWdzdGFkOyB0ZXN0ZWQgZHR1Y2tlckAKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDQvMDEvMjEgMDM6MDc6NTkKICAgICBbc2Z0cC5jXQogICAgIGluaXRpYWxpc2UgaW5maWxlIGluIG1haW4sIHJhdGhlciB0aGFuIHN0YXRpY2FsbHkgLSBmcm9tIHBvcnRhYmxlCiAgIC0gZGVyYWFkdEBjdnMub3BlbmJzZC5vcmcgMjAwNC8wMS8xMSAyMTo1NTowNgogICAgIFtzc2hwdHkuY10KICAgICBmb3IgcHR5IG9wZW5pbmcsIG9ubHkgdXNlIHRoZSBvcGVucHR5KCkgcGF0aC4gIHRoZSBvdGhlciBzdHVmZiBvbmx5IG5lZWRzCiAgICAgdG8gYmUgaW4gb3BlbnNzaC1wOyBtYXJrdXMgb2sKIC0gKGRqbSkgW29wZW5ic2QtY29tcGF0L2JzZC1vcGVucHR5LmNdIFJld29yayBvbGQgc3NocHR5LmMgY29kZSBpbnRvIGFuCiAgIG9wZW5wdHkoKSByZXBsYWNlbWVudAoKMjAwNDAxMTQKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBIYXZlIG1vbml0b3IgZGllIGlmIFBBTSBhdXRoZW50aWNhdGlvbiB0aHJlYWQgZXhpdHMKICAgdW5leHBlY3RlZGx5LiAgd2l0aCAmIG9rIGRqbUAKIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBSZXNldCBzaWduYWwgaGFuZGxlciBpbiBwdGhyZWFkX2NhbmNlbCB0b28sIGFkZAogICB0ZXN0IGZvciBjYXNlIHdoZXJlIGNsZWFudXAgaGFzIGFscmVhZHkgcnVuLgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIEFkZCBtaW5vciBkZWJ1Z2dpbmcuCgoyMDA0MDExMwogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIFJlbG9jYXRlIHN0cnVjdCBwYW1fY3R4dCBhbmQgcHJvdG90eXBlcy4gIE5vCiAgIGZ1bmN0aW9uYWwgY2hhbmdlcy4KCjIwMDQwMTA4CiAtIChkdHVja2VyKSBbYXV0aC1wYW0uYyBkZWZpbmVzLmhdIEJ1ZyAjNzgzOiBtb3ZlIF9fdW51c2VkIHRvIGRlZmluZXMuaCBhbmQKICAgb25seSBkZWZpbmUgaWYgbm90IGFscmVhZHkuICBGcm9tIGRlcyBhdCBmcmVlYnNkLm9yZy4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIFJlbW92ZSBleHRyYSAodHlwbykgY29tbWEuCgoyMDA0MDEwNQogLSAoZHR1Y2tlcikgW2NvbnRyaWIvc3NoLWNvcHktaWRdIEJ1ZyAjNzgxOiBleGl0IGlmIHNzaCBmYWlscy4gIFBhdGNoIGZyb20KICAgY2p3YXRzb24gYXQgZGViaWFuLm9yZy4KIC0gKGR0dWNrZXIpIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyBpbmNsdWRlcy5oIHNlcnZjb25mLmMgc2Vzc2lvbi5jXQogICBPbmx5IGVuYWJsZSBLZXJiZXJvc0dldEFGU1Rva2VuIGlmIEhlaW1kYWwncyBsaWJrYWZzIGlzIGZvdW5kLiAgd2l0aCBqYWtvYkAKCjIwMDQwMTAyCiAtIChkam0pIE9TWC9EYXJ3aW4gbmVlZHMgQklORF84X0NPTVBBVCB0byBidWlsZCBnZXRycnNldGJ5bmFtZS4gUmVwb3J0IGZyb20KICAgamFrb2JACiAtIChkam0pIFJlbW92ZSB1c2VsZXNzIEROUyBzdXBwb3J0IGNvbmZpZ3VyZSBzdW1tYXJ5IG1lc3NhZ2UuIGZyb20gamFrb2JACiAtIChkam0pIE9TWC9EYXJ3aW4gcHV0IHRoZSBQQU0gaGVhZGVycyBpbiBhIGRpZmZlcmVudCBwbGFjZSwgZGV0ZWN0IHRoaXMuCiAgIFJlcG9ydCBmcm9tIGpha29iQAoKMjAwMzEyMzEKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTIvMjIgMDk6MTY6NTgKICAgICBbbW9kdWxpLmMgc3NoLWtleWdlbi4xIHNzaC1rZXlnZW4uY10KICAgICB0aWR5IHVwIG1vZHVsaSBnZW5lcmF0aW9uIGRlYnVnZ2luZywgYWRkIC12ICh2ZXJib3NlL2RlYnVnKSBvcHRpb24gdG8KICAgICBzc2gta2V5Z2VuOyBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzIyIDIwOjI5OjU1CiAgICAgW2NpcGhlci0zZGVzMS5jXQogICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoKSBmb3IgdGhlIGRlcyBjb250ZXh0czsgcHJ1aWtzbWFAZnJlZXN1cmYuZnIKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8yMyAxNjoxMjoxMAogICAgIFtzZXJ2Y29uZi5jIHNlcnZjb25mLmggc2Vzc2lvbi5jIHNzaGRfY29uZmlnXQogICAgIGltcGxlbWVudCBLZXJiZXJvc0dldEFGU1Rva2VuIHNlcnZlciBvcHRpb24uIG9rIG1hcmt1c0AsIGJlY2tACiAgIC0gbWlsbGVydEBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8yOSAxNjozOTo1MAogICAgIFtzc2hkX2NvbmZpZ10KICAgICBLZWVwQWxpdmUgaGFzIGJlZW4gb2Jzb2xldGVkLCB1c2UgVENQS2VlcEFsaXZlIGluc3RlYWQ7IG1hcmt1c0AgT0sKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzMxIDAwOjI0OjUwCiAgICAgW2F1dGgyLXBhc3N3ZC5jXQogICAgIElnbm9yZSBwYXNzd29yZCBjaGFuZ2UgcmVxdWVzdCBkdXJpbmcgcGFzc3dvcmQgYXV0aCAod2hpY2ggd2UgY3VycmVudGx5CiAgICAgZG9uJ3Qgc3VwcG9ydCkgYW5kIGRpc2NhcmQgcHJvcG9zZWQgbmV3IHBhc3N3b3JkLiAgY29ycmVjdGlvbnMvb2sgbWFya3VzQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gT25seSB0ZXN0IHNldHJlc3VpZCBhbmQgc2V0cmVzZ2lkIGlmIHRoZXkgZXhpc3QuCgoyMDAzMTIxOQogLSAoZHR1Y2tlcikgW2RlZmluZXMuaF0gQnVnICM0NTg6IERlZmluZSBTSVpFX1RfTUFYIGFzIFVJTlRfTUFYIGlmIHdlCiAgIHR5cGVkZWYgc2l6ZV90IG91cnNlbHZlcy4KCjIwMDMxMjE4CiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBEb24ndCB1c2Ugc2V0cmVbdWddaWQgb24gREctVVgsIGZyb20gVG9tIE9yYmFuLgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmNdIERvIFBBTSBjaGF1dGh0b2sgZHVyaW5nIFNTSDIga2V5Ym9hcmQtaW50ZXJhY3RpdmUKICAgYXV0aGVudGljYXRpb24uICBQYXJ0aWFsbHkgZml4ZXMgYnVnICM0MjMuICBGZWVkYmFjayAmIG9rIGRqbUAKCjIwMDMxMjE3CiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTIvMDkgMTU6Mjg6NDMKICAgICBbc2VydmVybG9vcC5jXQogICAgIG1ha2UgQ2xpZW50S2VlcEFsaXZlIHdvcmsgZm9yIHNzaCAtTiwgdG9vIChubyBsb2dpbiBzaGVsbCByZXF1ZXN0ZWQpLgogICAgIDEpIHNlbmQgYSBib2d1cyBjaGFubmVsIHJlcXVlc3QgaWYgd2UgZmluZCBhIGNoYW5uZWwKICAgICAyKSBzZW5kIGEgYm9ndXMgZ2xvYmFsIHJlcXVlc3QgaWYgd2UgZG9uJ3QgaGF2ZSBhIGNoYW5uZWwKICAgICBvayArIHRlc3QgYmVja0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTIvMDkgMTc6Mjk6MDQKICAgICBbc3NoZC5jXQogICAgIGZpeCAtbyBhbmQgSFVQOyBvayBoZW5uaW5nQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8wOSAxNzozMDowNQogICAgIFtzc2guY10KICAgICBkb24ndCBtb2RpZnkgYXJndiBmb3Igc3NoIC1vOyBzaW1pbGFyIHRvIHNzaGQuYyAxLjI4MwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8wOSAyMTo1MzozNwogICAgIFtyZWFkY29uZi5jIHJlYWRjb25mLmggc2NwLjEgc2VydmNvbmYuYyBzZXJ2Y29uZi5oIHNmdHAuMSBzc2guMV0KICAgICBbc3NoX2NvbmZpZy41IHNzaGNvbm5lY3QuYyBzc2hkLmMgc3NoZF9jb25maWcuNV0KICAgICByZW5hbWUga2VlcGFsaXZlIHRvIHRjcGtlZXBhbGl2ZTsgdGhlIG9sZCBuYW1lIGNhdXNlcyB0b28gbXVjaAogICAgIGNvbmZ1c2lvbjsgb2sgZGptLCBkdHVja2VyOyB3aXRoIGhlbHAgZnJvbSBqbWNACiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8wOSAyMzo0NTozMgogICAgIFtjbGllbnRsb29wLmNdCiAgICAgQ2xlYXIgZXhpdCBjb2RlIHdoZW4gc3NoIC1OIGlzIHRlcm1pbmF0ZWQgd2l0aCBhIFNJR1RFUk0uICBvayBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzE0IDEyOjM3OjIxCiAgICAgW3NzaF9jb25maWcuNV0KICAgICB3ZSBkb24ndCBzdXBwb3J0IEdTUyBLRVg7IGZyb20gU2ltb24gV2lsa2luc29uCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzE2IDE1OjQ5OjUxCiAgICAgW2NsaWVudGxvb3AuYyBjbGllbnRsb29wLmggcmVhZGNvbmYuYyByZWFkY29uZi5oIHNjcC4xIHNmdHAuMSBzc2guMV0KICAgICBbc3NoLmMgc3NoX2NvbmZpZy41XQogICAgIGFwcGxpY2F0aW9uIGxheWVyIGtlZXAgYWxpdmUgKFNlcnZlckFsaXZlSW50ZXJ2YWwgU2VydmVyQWxpdmVDb3VudE1heCkKICAgICBmb3Igc3NoKDEpLCBzaW1pbGFyIHRvIHRoZSBzc2hkKDgpIG9wdGlvbjsgb2sgYmVja0A7IHdpdGggaGVscCBmcm9tCiAgICAgam1jIGFuZCBkdHVja2VyQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8xNiAxNTo1MTo1NAogICAgIFtkaC5jXQogICAgIHVzZSA8PSBpbnN0ZWFkIG9mIDwgaW4gZGhfZXN0aW1hdGU7IG9rIHByb3Zvcy9oc2hvZXhlcjsgCiAgICAgZG8gbm90IHJldHVybiA8IERIX0dSUF9NSU4KIC0gKGR0dWNrZXIpIFthY2NvbmZpZy5oIGNvbmZpZ3VyZS5hYyB1aWRzd2FwLmNdIEJ1ZyAjNjQ1OiBDaGVjayBmb3IKICAgc2V0cmVzW3VnXWlkKCkgcHJlc2VudCBidXQgbm90IGltcGxlbWVudGVkIChlZyBzb21lIExpbnV4L2dsaWJjCiAgIGNvbWJpbmF0aW9ucykuCiAtIChiYWwpIFtvcGVuYnNkLWNvbXBhdC9ic2QtbWlzYy5jXSB1bnNldCAnc2lnbmFsJyBkZWZpbmVkIGlmIHdlIGFyZQogICB1c2luZyBhIHJlYWwgJ3NpZ25hbCgpJyAoTm90aWNlZCBieSBhIE5lWFQgQ29tcGlsZSkKCjIwMDMxMjA5CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWF0dGhpZXVAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMjUgMjM6MTA6MDgKICAgICBbc3NoLWFkZC4xXQogICAgIHNzaC1hZGQgZG9lc24ndCBuZWVkIHRvIGJlIGEgZGVzY2VuZGFudCBvZiBzc2gtYWdlbnQuIE9rIG1hcmt1c0AsIGptY0AuCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzI2IDIxOjQ0OjI5CiAgICAgW2NpcGhlci1hZXMuY10KICAgICBmaXggI2lmZGVmIGJlZm9yZSAjZGVmaW5lOyBvayBtYXJrdXNACiAgICAgKFJDUyBJRCBzeW5jIG9ubHksIFBvcnRhYmxlIGFscmVhZHkgaGFkIHRoaXMpCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEyLzAyIDEyOjE1OjEwCiAgICAgW3Byb2dyZXNzbWV0ZXIuY10KICAgICBpbXByb3ZtZW50cyBmcm9tIGFuZHJlYXNAOgogICAgICogc2FuZXIgc3BlZWQgZXN0aW1hdGUgZm9yIHRyYW5zZmVycyB0aGF0IHRha2VzIGxlc3MgdGhhbiBhIHNlY29uZCBieQogICAgICAgcm91bmRpbmcgdGhlIHRpbWUgdG8gMSBzZWNvbmQuCiAgICAgKiB3aGVuIHRoZSB0cmFuc2ZlciBpcyBmaW5pc2hlZCBjYWxjdWxhdGUgdGhlIGFjdHVhbCB0b3RhbCBzcGVlZAogICAgICAgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgc3BlZWQgd2hpY2ggaXMgZ2l2ZW4gZHVyaW5nIHRoZSB0cmFuc2ZlcgogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8wMiAxNzowMToxNQogICAgIFtjaGFubmVscy5jIHNlc3Npb24uYyBzc2gtYWdlbnQuYyBzc2guaCBzc2hkLmNdCiAgICAgdXNlIFNTSF9MSVNURU5fQkFDS0xPRyAoPTEyOCkgaW4gbGlzdGVuKDIpLgogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8wNyAwNjozNDoxOAogICAgIFttb2R1bGkuY10KICAgICByZW1vdmUgdW51c2VkIGRlYnVnZ2luZyAjZGVmaW5lIHRlbXBsYXRlcwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMi8wOCAxMTowMDo0NwogICAgIFtrZXhnZXhjLmNdCiAgICAgcHJpbnQgcmVxdWVzdGVkIGdyb3VwIHNpemUgaW4gZGVidWc7IG9rIGRqbQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTIvMDkgMTM6NTI6NTUKICAgICBbbW9kdWxpLmNdCiAgICAgUHJldmVudCBzc2gta2V5Z2VuIC1UIGZyb20gb3V0cHV0dGluZyBtb2R1bGkgd2l0aCBhIGdlbmVyYXRvciBvZiAwLCBzaW5jZQogICAgIHRoZXkgY2FuJ3QgYmUgdXNlZCBmb3IgRGlmZmllLUhlbGxtYW4uICBBc3Npc3RhbmNlIGFuZCBvayBkam1ACiAtIChkdHVja2VyKSBbc3NoLWtleXNjYW4uY10gU3luYyBSQ1NJRHMsIG1pc3NlZCBpbiBTU0hfU1NGRE1BWCBjaGFuZ2UgYmVsb3cuCgoyMDAzMTIwOAogLSAodGltKSBbY29uZmlndXJlLmFjXSBCdWcgNzcwLiBGaXggLS13aXRob3V0LXJwYXRoLgoKMjAwMzExMjMKIC0gKGRqbSkgW2Nhbm9ob3N0LmNdIE1vdmUgSVB2NGluVjYgbWFwcGVkIGFkZHJlc3Mgbm9ybWFsaXNhdGlvbiB0byBpdHMgb3duCiAgIGZ1bmN0aW9uIGFuZCBjYWxsIGl0IHVuY29uZGl0aW9uYWxseQogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzIzIDIzOjE3OjM0CiAgICAgW3NzaC1rZXlzY2FuLmNdCiAgICAgZnJvbSBwb3J0YWJsZSAtIHVzZSBzeXNjb25mIHRvIGRldGVjdCBmZCBsaW1pdDsgb2sgbWFya3VzQAogICAgICh0aWR5IGRpZmYgYnkgYWRkaW5nIFNTSF9TU0ZETUFYIG1hY3JvIHRvIGRlZmluZXMuaCkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMjMgMjM6MTg6NDUKICAgICBbc3NoLWtleWdlbi5jXQogICAgIGNvbnNpc3RlbmN5IFBBVEhfTUFYIC0+IE1BWFBBVEhMRU47IG9rIG1hcmt1c0AKICAgICAoUkNTIElEIHN5bmMgb25seSkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMjMgMjM6MjE6MjEKICAgICBbc2NwLmNdCiAgICAgZnJvbSBwb3J0YWJsZTogcmVuYW1lIGNsYXNoaW5nIHZhcmlhYmxlIGxpbWl0LT4gbGltaXRfcmF0ZTsgb2sgbWFya3VzQAogICAgIChSQ1MgSUQgc3luYyBvbmx5KQogICAtIGR0dWNrZXJAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMjQgMDA6MTY6MzUKICAgICBbc3NoLjEgc3NoLmNdCiAgICAgTWFrZSBzc2ggLWsgbWVhbiBHU1NBUElEZWxlZ2F0ZUNyZWRlbnRpYWxzPW5vLiBTdWdnZXN0aW9uICYgb2sgbWFya3VzQAogLSAoZGptKSBBbm5vdGF0ZSBPcGVuQlNELWRlcml2ZWQgZmlsZXMgaW4gb3BlbmJzZC1jb21wYXQvIHdpdGggb3JpZ2luYWwgCiAgIHNvdXJjZSBmaWxlIHBhdGggKGluIE9wZW5CU0QgdHJlZSkuCgoyMDAzMTEyMgogLSAoZHR1Y2tlcikgW2NoYW5uZWxzLmNdIE1ha2UgQUlYIHdyaXRlIGxpbWl0IGNvZGUgY2xlYXJlci4gIFN1Z2dlc3RlZCBieSBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1wYXNzd2QuYyBvcGVuYnNkLWNvbXBhdC9wb3J0LWFpeC5jIG9wZW5ic2QtY29tcGF0L3BvcnQtYWl4LmhdCiAgIE1vdmUgQUlYIHNwZWNpZmljIHBhc3N3b3JkIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gcG9ydC1haXguYywgY2FsbAogICBhdXRoZW50aWNhdGUoKSB1bnRpbCByZWVudGVyIGZsYWcgaXMgY2xlYXIuCiAtIChkdHVja2VyKSBbYXV0aC1zaWEuYyBjb25maWd1cmUuYWNdIFRydTY0IHVwZGF0ZSBmcm9tIGNtYWRhbXMgYXQgaGl3YWF5Lm5ldC4KICAgVXNlIHBlcm1hbmVudGx5X3NldF91aWQgZm9yIFNJQSwgb25seSBkZWZpbmUgRElTQUJMRV9GRF9QQVNTSU5HIHdoZW4gU0lBCiAgIGlzIGVuYWJsZWQsIHJlbHkgb24gU0lBIHRvIGNoZWNrIGZvciBsb2NrZWQgYWNjb3VudHMgaWYgZW5hYmxlZC4gIG9rIGRqbUAKIC0gKGRqbSkgW3NjcC5jXSBSZW5hbWUgbGltaXRidyAtPiBsaW1pdF9yYXRlIHRvIG1hdGNoIHVwc3RyZWFtZWQgcGF0Y2gKIC0gKGRqbSkgW3NmdHAtaW50LmNdIFJlbW92ZSBkdXBsaWNhdGVkIGNvZGUgZnJvbSBib2d1cyBzeW5jCiAtIChkam0pIFtwYWNrZXQuY10gU2h1ZmZsZSAjaWZkZWYgdG8gcmVkdWNlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgY29kZQoKMjAwMzExMjEKIC0gKGRqbSkgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8yMCAxMTozOToyOAogICAgIFtwcm9ncmVzc21ldGVyLmNdCiAgICAgZml4IHJvdW5kaW5nIGVycm9yczsgZnJvbSBhbmRyZWFzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8yMSAxMTo1NzowMwogICAgIFtldmVyeXRoaW5nXQogICAgIHVuZXhwYW5kIGFuZCBkZWxldGUgd2hpdGVzcGFjZSBhdCBFT0w7IG9rIG1hcmt1c0AKICAgICAoZG9uZSBsb2NhbGx5IGFuZCBSQ1MgSURzIHN5bmNlZCkKCjIwMDMxMTE4CiAtIChkam0pIEZpeCBlYXJseSBleGl0IGZvciByb290IGF1dGggc3VjY2VzcyB3aGVuIFVzZVBBTT15ZXMgYW5kIAogICBQZXJtaXRSb290TG9naW49bm8KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBDb252ZXJ0IGNoYXV0aHRva19jb252IGludG8gYSBnZW5lcmljIHR0eV9jb252LAogICBhbmQgdXNlIGl0IGZvciBkb19wYW1fc2Vzc2lvbi4gIEZpeGVzIHByb2JsZW1zIGxpa2UgcGFtX21vdGQgbm90CiAgIGRpc3BsYXlpbmcgYW55dGhpbmcuICBvayBkam1ACiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gT25seSB1c2UgcGFtX3B1dGVudiBpZiBvdXIgcGxhdGZvcm0gaGFzIGl0LiBvayBkam1ACiAtIChkam0pIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzE4IDAwOjQwOjA1CiAgICAgW3NlcnZlcmxvb3AuY10KICAgICBDb3JyZWN0IGNoZWNrIGZvciBhdXRoY3R4dC0+dmFsaWQuICBvayBkam1ACiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzE4IDEwOjUzOjA3CiAgICAgW21vbml0b3IuY10KICAgICB1bmJyZWFrIGZha2UgYXV0aGxvb3AgZm9yIG5vbi1leGlzdGVudCB1c2VycyAobXkgc2NyZXd1cCkuIFNwb3R0ZWQgYW5kCiAgICAgdGVzdGVkIGJ5IGR0dWNrZXJAOyBvayBtYXJrdXNACgoyMDAzMTExNwogLSAoZGptKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzAzIDA5OjAzOjM3CiAgICAgW2F1dGgtY2hhbGwuY10KICAgICBtYWtlIHRoaXMgYSBsaXR0bGUgbW9yZSBpZGlvdC1wcm9vZjsgb2sgbWFya3VzQAogICAgIChpbmNsdWRlcyBwb3J0YWJsZS1zcGVjaWZpYyBjaGFuZ2VzKQogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzAzIDA5OjA5OjQxCiAgICAgW3NzaGNvbm5lY3QuY10KICAgICBtb3ZlIGNoYW5nZWQga2V5IHdhcm5pbmcgaW50byB3YXJuX2NoYW5nZWRfa2V5KCkuIG9rIG1hcmt1c0AKICAgLSBqYWtvYkBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8wMyAwOTozNzozMgogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgZG8gbm90IGZyZWUgc3RhdGljIHR5cGUgcG9pbnRlciBpbiB3YXJuX2NoYW5nZWRfa2V5KCkKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMDQgMDg6NTQ6MDkKICAgICBbYXV0aDEuYyBhdXRoMi5jIGF1dGgyLXB1YmtleS5jIGF1dGguaCBhdXRoLWtyYjUuYyBhdXRoLXBhc3N3ZC5jXQogICAgIFthdXRoLXJob3N0cy5jIGF1dGgtcmgtcnNhLmMgYXV0aC1yc2EuYyBtb25pdG9yLmMgc2VydmVybG9vcC5jXQogICAgIFtzZXNzaW9uLmNdCiAgICAgc3RhbmRhcmRpc2UgYXJndW1lbnRzIHRvIGF1dGggbWV0aG9kcyAtIHRoZXkgc2hvdWxkIGFsbCB0YWtlIGF1dGhjdHh0LgogICAgIGNoZWNrIGF1dGhjdHh0LT52YWxpZCByYXRoZXIgdGhlbiBwdyAhPSBOVUxMOyBvayBtYXJrdXNACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMDggMTY6MDI6NDAKICAgICBbYXV0aDEuY10KICAgICByZW1vdmUgdW51c2VkIHZhcmlhYmxlIChwdykuIG9rIGRqbUAKICAgICAoaWQgc3luYyBvbmx5IC0gc3RpbGwgdXNlZCBpbiBwb3J0YWJsZSkKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMDggMTk6MTc6MjkKICAgICBbc2Z0cC1pbnQuY10KICAgICB0eXBvcyBmcm9tIEpvbmF0aG9uIEdyYXk7CiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMTAgMTY6MjM6NDEKICAgICBbYnVmYXV4LmMgYnVmYXV4LmggY2lwaGVyLmMgY2lwaGVyLmggaG9zdGZpbGUuYyBob3N0ZmlsZS5oIGtleS5jXQogICAgIFtrZXkuaCBzZnRwLWNvbW1vbi5jIHNmdHAtY29tbW9uLmggc2Z0cC1zZXJ2ZXIuYyBzc2hjb25uZWN0LmMgc3NoZC5jXQogICAgIFtzc2gtZHNzLmMgc3NoLXJzYS5jIHV1ZW5jb2RlLmMgdXVlbmNvZGUuaF0KICAgICBjb25zdGlmeS4gb2sgbWFya3VzQCAmIGRqbUAKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzEyIDEwOjEyOjE1CiAgICAgW3NjcC5jXQogICAgIFdoZW4gY2FsbGVkIHdpdGggLXEsIHBhc3MgLXEgdG8gc3NoOyBzdXBwcmVzc2VzIFNTSDIgYmFubmVyLiAgb2sgbWFya3VzQAogICAtIGpha29iQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzEyIDE2OjM5OjU4CiAgICAgW2Rucy5jIGRucy5oIHJlYWRjb25mLmMgc3NoX2NvbmZpZy41IHNzaGNvbm5lY3QuY10KICAgICB1cGRhdGUgU1NIRlAgdmFsaWRhdGlvbi4gb2sgbWFya3VzQAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8xMiAyMDoxNDo1MQogICAgIFtzc2hfY29uZmlnLjVdCiAgICAgbWFrZSB2ZXJiIGFncmVlIHdpdGggc3ViamVjdCwgYW5kIGtpbGwgc29tZSB3aGl0ZXNwYWNlOwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8xNCAxMzoxOTowOQogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIGNsZWFudXAgYW5kIG1pbm9yIGZpeGVzIGZvciB0aGUgY2xpZW50IGNvZGU7IGZyb20gU2ltb24gV2lsa2luc29uCiAgIC0gZGptQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzExLzE3IDA5OjQ1OjM5CiAgICAgW21zZy5jIG1zZy5oIHNzaGNvbm5lY3QyLmMgc3NoLWtleXNpZ24uY10KICAgICByZXR1cm4gZXJyb3Igb24gbXNnIHNlbmQvcmVjZWl2ZSBmYWlsdXJlIChyYXRoZXIgdGhhbiBmYXRhbCk7IG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTEvMTcgMTE6MDY6MDcKICAgICBbYXV0aDItZ3NzLmMgZ3NzLWdlbnIuYyBnc3Mtc2Vydi5jIG1vbml0b3IuYyBtb25pdG9yLmggbW9uaXRvcl93cmFwLmNdCiAgICAgW21vbml0b3Jfd3JhcC5oIHNzaGNvbm5lY3QyLmMgc3NoLWdzcy5oXQogICAgIHJlcGxhY2UgImdzc2FwaSIgd2l0aCAiZ3NzYXBpLXdpdGgtbWljIjsgZnJvbSBTaW1vbiBXaWxraW5zb247IAogICAgIHRlc3QgKyBvayBqYWtvYi4KIC0gKGRqbSkgQnVnICM2MzI6IERvbid0IGNhbGwgcGFtX2VuZCBpbmRpcmVjdGx5IGZyb20gd2l0aGluIGtiZC1pbnQKICAgY29udmVyc2F0aW9uIGZ1bmN0aW9uCiAtIChkam0pIEV4cG9ydCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBhdXRoZW50aWNhdGlvbiBzdWJwcm9jZXNzIHRvIAogICBwYXJlbnQuIFBhcnQgb2YgQnVnICM3MTcKCjIwMDMxMTE1CiAtIChkdHVja2VyKSBbcmVncmVzcy9hZ2VudC1wdHJhY2Uuc2hdIFRlc3QgZm9yIEdEQiBvdXRwdXQgZnJvbSBTb2xhcmlzIGFuZAogICBIUC1VWCwgc2tpcCB0ZXN0IG9uIEFJWC4KCjIwMDMxMTEzCiAtIChkdHVja2VyKSBbYXV0aC1wYW0uY10gQXBwZW5kIG5ld2xpbmVzIHRvIGxpbmVzIG91dHB1dCBieSB0aGUKICAgcGFtX2NoYXV0aHRva19jb252KCkuCiAtIChkdHVja2VyKSBbUkVBRE1FIHNzaC1ob3N0LWNvbmZpZyBzc2gtdXNlci1jb25maWcgTWFrZWZpbGVdIChBbGwKICAgY29udHJpYi9jeWd3aW4pLiAgTWFqb3IgdXBkYXRlIGZyb20gdmluc2NoZW4gYXQgcmVkaGF0LmNvbS4KICAgLSBNYWtlZmlsZSBwcm92aWRlcyBhIGBjeWd3aW4tcG9zdGluc3RhbGwnIHRhcmdldCB0byBydW4gcmlnaHQgYWZ0ZXIKICAgICBgbWFrZSBpbnN0YWxsJy4KICAgLSBCZXR0ZXIgc3VwcG9ydCBmb3IgV2luZG93cyAyMDAzIFNlcnZlci4KICAgLSBUcnkgdG8gZ2V0IHBlcm1pc3Npb25zIGFzIGNvcnJlY3QgYXMgcG9zc2libGUuCiAgIC0gTmV3IGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIGFsbG93IGZ1bGwgYXV0b21hdGVkIGhvc3QgY29uZmlndXJhdGlvbi4KICAgLSBDcmVhdGUgY29uZmlncyBmcm9tIHNrZWxldG9ucyBpbiAvZXRjL2RlZmF1bHRzL2V0Yy4KICAgLSBVc2UgL2Jpbi9iYXNoLCBhbGxvd3MgcmVhZGluZyB1c2VyIGlucHV0IHdpdGggcmVhZGxpbmUgc3VwcG9ydC4KICAgLSBSZW1vdmUgcmVhbGx5IG9sZCBjb25maWdzIGZyb20gL3Vzci9sb2NhbC4KIC0gKGR0dWNrZXIpIFthdXRoLXBhbS5jXSBBZGQgbmV3bGluZSB0byBhY2N1bXVsYXRlZCBQQU1fVEVYVF9JTkZPIGFuZAogICBQQU1fRVJST1JfTVNHIG1lc3NhZ2VzLgoKMjAwMzExMDYKIC0gKGRqbSkgQ2xhcmlmeSBVc2VQQU0gY29uc2VxdWVuY2VzIGEgbGl0dGxlIG1vcmUKCjIwMDMxMTAzCiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vc3NoLWhvc3QtY29uZmlnXSBFbnN1cmUgZW50cmllcyBpbiAvZXRjL3NlcnZpY2VzCiAgIGFyZSBjcmVhdGVkIGNvcnJlY3RseSB3aXRoIENSTEYgbGluZSB0ZXJtaW5hdGlvbnMuICBQYXRjaCBmcm9tIHZpbnNjaGVuIGF0CiAgIHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzE1IDA5OjQ4OjQ1CiAgICAgW21vbml0b3Jfd3JhcC5jXQogICAgIGNoZWNrIHBtb25pdG9yICE9IE5VTEwKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMjEgMDk6NTA6MDYKICAgICBbYXV0aDItZ3NzLmNdCiAgICAgbWFrZSBzdXJlIHRoZSBkb2lkIGlzIGxhcmdlciB0aGFuIDIKICAgLSBhdnNtQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzI2IDE2OjU3OjQzCiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgcmVuYW1lICdzdXBwb3J0ZWQnIHN0YXRpYyB2YXIgaW4gdXNlcmF1dGhfZ3NzYXBpKCkgdG8gJ2dzc19zdXBwb3J0ZWQnCiAgICAgdG8gYXZvaWQgc2hhZG93aW5nIHRoZSBnbG9iYWwgdmVyc2lvbi4gIG1hcmt1c0Agb2sKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMjggMDk6MDg6MDYKICAgICBbbWlzYy5jXQogICAgIGVycm9yLT5kZWJ1ZyBmb3IgZ2V0c29ja29wdCtUQ1BfTk9ERUxBWTsgc2V2ZXJhbCByZXF1ZXN0cwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMS8wMiAxMTowMTowMwogICAgIFthdXRoMi1nc3MuYyBjb21wYXQuYyBjb21wYXQuaCBzc2hjb25uZWN0Mi5jXQogICAgIHJlbW92ZSBzdXBwb3J0IGZvciBTU0hfQlVHX0dTU0FQSV9CRVI7IHNpbW9uQHN4dy5vcmcudWsKIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2FnZW50LXB0cmFjZS5zaF0gVXNlIG51bWVyaWMgdWlkIGFuZCBnaWQuCgoyMDAzMTAyMQogLSAoZHR1Y2tlcikgW0lOU1RBTExdIFNvbWUgc3lzdGVtIGNyeXB0KCkgZnVuY3Rpb25zIHN1cHBvcnQgTUQ1IHBhc3N3b3JkcwogICBkaXJlY3RseS4gIE5vdGVkIGJ5IERhcnJlbi5Nb2ZmYXQgYXQgc3VuLmNvbS4KIC0gKGR0dWNrZXIpIFtyZWdyZXNzL2FnZW50LXB0cmFjZS5zaF0gU2tpcCBhZ2VudC10ZXN0IHVubGVzcyBTVURPIGlzIHNldCwKICAgbWFrZSBhZ2VudCBzZXRnaWQgZHVyaW5nIHRlc3QuCgoyMDAzMTAxNwogLSAoZHR1Y2tlcikgW0lOU1RBTExdIE5vdGUgdGhhdCAtLXdpdGgtbWQ1IGlzIG5vdyByZXF1aXJlZCBvbiBwbGF0Zm9ybXMgd2l0aAogICBNRDUgcGFzc3dvcmRzIGV2ZW4gaWYgUEFNIHN1cHBvcnQgaXMgZW5hYmxlZC4gIEZyb20gc3RlZXYgYXQgZGV0cml0dXMubmV0LgoKMjAwMzEwMTUKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBqbWNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDggMDg6Mjc6MzYKICAgICBbc2NwLjEgc2NwLmMgc2Z0cC1zZXJ2ZXIuOCBzZnRwLjEgc2Z0cC5jIHNzaC4xIHNzaGQuOF0KICAgICBzY3AgYW5kIHNmdHA6IGFkZCBvcHRpb25zIGxpc3QgYW5kIHNvcnQgb3B0aW9ucy4gb3B0aW9ucyBsaXN0IHJlcXVlc3RlZAogICAgIGJ5IGRlcmFhZHRACiAgICAgc3NoZDogdXNlIHNhbWUgZm9ybWF0IGFzIHNzaAogICAgIHNzaDogcmVtb3ZlIHdyb25nIG9wdGlvbiBmcm9tIGxpc3QKICAgICBzZnRwLXNlcnZlcjogU3Vic3lzdGVtIGlzIGRvY3VtZW50ZWQgaW4gc3NoX2NvbmZpZyg1KSwgbm90IHNzaGQoOCkKICAgICBvayBkZXJhYWR0QCBtYXJrdXNACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzA4IDE1OjIxOjI0CiAgICAgW3JlYWRjb25mLmMgc3NoX2NvbmZpZy41XQogICAgIGRlZmF1bHQgR1NTIEFQSSB0byBubyBpbiBjbGllbnQsIHRvbzsgb2sgamFrb2IsIGRlcmFhZHRACiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzExIDA4OjI0OjA4CiAgICAgW3JlYWRjb25mLmMgcmVhZGNvbmYuaCBzc2guMSBzc2guYyBzc2hfY29uZmlnLjVdCiAgICAgcmVtb3RlIHgxMSBjbGllbnRzIGFyZSBub3cgdW50cnVzdGVkIGJ5IGRlZmF1bHQsIHVzZXMgeGF1dGgoOCkgdG8gZ2VuZXJhdGUKICAgICB1bnRydXN0ZWQgY29va2llczsgRm9yd2FyZFgxMVRydXN0ZWQ9eWVzIHJlc3RvcmVzIG9sZCBiZWhhdmlvdXIuCiAgICAgb2sgZGVyYWFkdDsgZmVlZGJhY2sgYW5kIG9rIGRqbS9mcmllcwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8xMSAwODoyNjo0MwogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIHNlYXJjaCBrZXlzIGluIHJldmVyc2Ugb3JkZXI7IGZpeGVzICM2ODQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTEgMTE6MzY6MjMKICAgICBbbW9uaXRvcl93cmFwLmNdCiAgICAgcmV0dXJuIE5VTEwgZm9yIG1pc3NpbmcgYmFubmVyOyBvayBkam1ACiAgIC0gam1jQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzEyIDEzOjEyOjEzCiAgICAgW3NzaF9jb25maWcuNV0KICAgICBub3RlIHRoYXQgRW5hYmxlU1NIS2V5U2lnbiBzaG91bGQgYmUgaW4gdGhlIG5vbi1ob3N0c3BlY2lmaWMgc2VjdGlvbjsKICAgICByZW1vdmUgdW5uZWNlc3NhcnkgLlBwOwogICAgIG9rIG1hcmt1c0AKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTMgMDg6MjI6MjUKICAgICBbc2NwLjEgc2Z0cC4xXQogICAgIGRvbid0IHJlZmVyIHRvIG9wdGlvbnMgcmVsYXRlZCB0byBmb3J3YXJkaW5nOyBvayBqbWNACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTQgMTk6NDI6MTAKICAgICBbZG5zLmMgZG5zLmggcmVhZGNvbmYuYyBzc2gta2V5Z2VuLmMgc3NoY29ubmVjdC5jXQogICAgIGluY2x1ZGUgU1NIRlAgbG9va3VwIGNvZGUgKG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQpLiBvayBtYXJrdXNACiAgIC0gamFrb2JAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTQgMTk6NDM6MjMKICAgICBbUkVBRE1FLmRuc10KICAgICB1cGRhdGUKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMTQgMTk6NTQ6MzkKICAgICBbc2Vzc2lvbi5jIHNzaC1hZ2VudC5jXQogICAgIDEwWCBmb3IgbWtkdGVtcDsgZGptQAogLSAoZHR1Y2tlcikgW2FjY29uZmlnLmggY29uZmlndXJlLmFjIGRucy5jIG9wZW5ic2QtY29tcGF0L2dldHJyc2V0YnluYW1lLmMKICAgb3BlbmJzZC1jb21wYXQvZ2V0cnJzZXRieW5hbWUuaF0gRE5TIGZpbmdlcnByaW50IHN1cHBvcnQgaXMgbm93IGFsd2F5cwogICBjb21waWxlZCBpbiBidXQgZGlzYWJsZWQgaW4gY29uZmlnLgogLSAoZHR1Y2tlcikgW2F1dGguY10gQ2hlY2sgZm9yIGRpc2FibGVkIHBhc3N3b3JkIGV4cGlyeSBvbiBIUC1VWCBUcnVzdGVkIE1vZGUuCiAtICh0aW0pIFtyZWdyZXNzL2Jhbm5lci5zaF0gcG9ydGFiaWxpdHkgZml4LgoKMjAwMzEwMDkKIC0gKGR0dWNrZXIpIFtzc2hkX2NvbmZpZy41XSBVc2VQQU0gZGVmYXVsdHMgdG8gIm5vIi4gIG9rIGRqbUAKCjIwMDMxMDA4CiAtIChkdHVja2VyKSBPcGVuQlNEIENWUyBTeW5jCiAgIC0gZHR1Y2tlckBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8wNyAwMTo0NzoyNwogICAgIFtzc2hjb25uZWN0Mi5jXQogICAgIERvbid0IHVzZSBsb2dpdCBmb3IgYmFubmVyLCBzaW5jZSBpdCB0cnVuY2F0ZXMgdG8gTVNHQlVGU0laOyBieiAjNjY4ICYKICAgICAjNzA3LiAgb2sgbWFya3VzQAogICAtIGRqbUBjdnMub3BlbmJzZC5vcmcgMjAwMy8xMC8wNyAwNzowNDoxNgogICAgIFtzZnRwLWludC5jXQogICAgIHNmdHAgcXVvdGluZyBmaXggZnJvbSBhZG1vcnRlbiBBVCB1bWljaC5lZHU7IG9rIG1hcmt1c0AKICAgLSBkZXJhYWR0QGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzA3IDIxOjU4OjI4CiAgICAgW3NzaGNvbm5lY3QyLmNdCiAgICAgc2V0IHB0ciB0byBOVUxMIGFmdGVyIGZyZWUKICAgLSBkdHVja2VyQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzEwLzA3IDAxOjUyOjEzCiAgICAgW3JlZ3Jlc3MvTWFrZWZpbGUgcmVncmVzcy9iYW5uZXIuc2hdCiAgICAgVGVzdCBTU0gyIGJhbm5lci4gIG9rIG1hcmt1c0AKICAgLSBkam1AY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDcgMDc6MDQ6NTIKICAgICBbcmVncmVzcy9zZnRwLWNtZHMuc2hdCiAgICAgbW9yZSBzZnRwIHF1b3RpbmcgcmVncmVzcyB0ZXN0czsgb2sgbWFya3VzCgoyMDAzMTAwNwogLSAoZGptKSBEZWxldGUgYXV0b200dGUuY2FjaGUgYWZ0ZXIgYXV0b3JlY29uZgogLSAoZHR1Y2tlcikgW2F1dGgtcGFtLmMgYXV0aC1wYW0uaCBzZXNzaW9uLmNdIE1ha2UgUEFNIHVzZSB0aGUgbmV3IHN0YXRpYwogICBjbGVhbnVwIGZ1bmN0aW9ucy4gIFdpdGggJiBvayBkam1ACiAtIChkdHVja2VyKSBbY29udHJpYi9yZWRoYXQvb3BlbnNzaC5zcGVjXSBCdWcgIzcxNDogTm93IHRoYXQgVXNlUEFNIGlzIGEKICAgcnVuLXRpbWUgc3dpdGNoLCBhbHdheXMgYnVpbGQgLS13aXRoLW1kNS1wYXNzd29yZHMuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L01ha2VmaWxlLmluIG9wZW5ic2QtY29tcGF0L3N0cnRvdWwuY10KICAgQnVnICM2NzA6IGFkZCBzdHJ0b3VsKCkgdG8gb3BlbmJzZC1jb21wYXQgZm9yIHBsYXRmb3JtcyBsYWNraW5nIGl0LiAgb2sgZGptQAogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM3MTU6IFNldCBCUk9LRU5fU0VUUkVVSUQgYW5kIEJST0tFTl9TRVRSRUdJRAogICBvbiBSZWxpYW50IFVuaXguICBQYXRjaCBmcm9tIFJvYmVydC5EYWhsZW0gYXQgc2llbWVucy5jb20uCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzcxMDogQ2hlY2sgZm9yIGRsc3ltKCkgaW4gbGliZGwgb24KICAgUmVsaWFudCBVbml4LiAgQmFzZWQgb24gcGF0Y2ggZnJvbSBSb2JlcnQuRGFobGVtIGF0IHNpZW1lbnMuY29tLgoKMjAwMzEwMDMKIC0gKGR0dWNrZXIpIE9wZW5CU0QgQ1ZTIFN5bmMKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDIgMTA6NDE6NTkKICAgICBbc3NoZC5jXQogICAgIHByaW50IG9wZW5zc2wgdmVyc2lvbiwgdG9vLCBzZXZlcmFsIHJlcXVlc3RzOyBvayBoZW5uaW5nL2RqbS4KICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMTAvMDIgMDg6MjY6NTMKICAgICBbc3NoLWdzcy5oXQogICAgIG1pc3NpbmcgJE9wZW5CU0Q6OyBkdHVja2VyCiAtICh0aW0pIFtjb250cmliL2NhbGRlcmEvb3BlbnNzaC5zcGVjXSBSZW1vdmUgb2Jzb2xldGUgLS13aXRoLWlwdjQtZGVmYXVsdAogICBvcHRpb24uCgoyMDAzMTAwMgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8yMyAyMDoxNzoxMQogICAgIFtNYWtlZmlsZS5pbiBhdXRoMS5jIGF1dGgyLmMgYXV0aC5jIGF1dGguaCBhdXRoLWtyYjUuYyBjYW5vaG9zdC5jCiAgICAgY2xlYW51cC5jIGNsaWVudGxvb3AuYyBmYXRhbC5jIGdzcy1zZXJ2LmMgbG9nLmMgbG9nLmggbW9uaXRvci5jIG1vbml0b3IuaAogICAgIG1vbml0b3Jfd3JhcC5jIG1vbml0b3Jfd3JhcC5oIHBhY2tldC5jIHNlcnZlcmxvb3AuYyBzZXNzaW9uLmMgc2Vzc2lvbi5oCiAgICAgc3NoLWFnZW50LmMgc3NoZC5jXQogICAgIHJlcGxhY2UgZmF0YWxfY2xlYW51cCgpIGFuZCBsaW5rZWQgbGlzdCBvZiBmYXRhbCBjYWxsYmFja3Mgd2l0aCBzdGF0aWMKICAgICBjbGVhbnVwX2V4aXQoKSBmdW5jdGlvbi4gIHJlLXJlZmluZSBjbGVhbnVwX2V4aXQoKSB3aGVyZSBhcHByb3ByaWF0ZSwKICAgICBhbGxvY2F0ZSBzc2hkJ3MgYXV0aGN0eHQgZWFyeSB0byBhbGxvdyBzaW1wbGVyIGNsZWFudXAgaW4gc3NoZC4KICAgICB0ZXN0ZWQgYnkgbWFueSwgb2sgZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMjMgMjA6MTg6NTIKICAgICBbcHJvZ3Jlc3NtZXRlci5jXQogICAgIGRvbid0IHByaW50IHRyYWlsaW5nIFwwOyBidWcgIzcwOTsgUm9iZXJ0LkRhaGxlbUBzaWVtZW5zLmNvbQogICAgIG9rIG1pbGxlcnQvZGVyYWFkdEAKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMjMgMjA6NDE6MTEKICAgICBbY2hhbm5lbHMuYyBjaGFubmVscy5oIGNsaWVudGxvb3AuY10KICAgICBtb3ZlIGNsaWVudCBvbmx5IGFnZW50IGNvZGUgdG8gY2xpZW50bG9vcC5jCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzI2IDA4OjE5OjI5CiAgICAgW3NzaGQuY10KICAgICBubyBuZWVkIHRvIHNldCB0aGUgbGlzdGVuIHNvY2tldHMgdG8gbm9uLWJsb2NrOyBvayBkZXJhYWR0QAogICAtIGptY0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8yOSAxMTo0MDo1MQogICAgIFtzc2guMV0KICAgICAtIGFkZCBsaXN0IG9mIG9wdGlvbnMgdG8gLW8gYW5kIC5YciBzc2hfY29uZmlnKDUpCiAgICAgLSBzb21lIG90aGVyIGNsZWFudXAKICAgICByZXF1ZXN0ZWQgYnkgZGVyYWFkdEA7CiAgICAgb2sgZGVyYWFkdEAgbWFya3VzQAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8yOSAyMDoxOTo1NwogICAgIFtzZXJ2Y29uZi5jIHNzaGRfY29uZmlnXQogICAgIEdTU0FQSUNsZWFudXBDcmVkcyAtPiBHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIERvbid0IHNldCBESVNBQkxFX1NIQURPVyB3aGVuIGNvbmZpZ3VyaW5nCiAgIC0td2l0aC1wYW0uICBvayBkam1ACiAtIChkdHVja2VyKSBbc3NoLWdzcy5oXSBQcm90b3R5cGUgY2hhbmdlIG1pc3NlZCBpbiBzeW5jLgogLSAoZHR1Y2tlcikgW3Nlc3Npb24uY10gRml4IGJ1cyBlcnJvcnMgb24gc29tZSA2NC1iaXQgU29sYXJpcyBjb25maWd1cmF0aW9ucy4KICAgQmFzZWQgb24gcGF0Y2hlcyBieSBNYXR0aGlhcyBLb2VwcGUgYW5kIFRob21hcyBCYWRlbi4gIG9rIGRqbUAKCjIwMDMwOTMwCiAtIChiYWwpIEZpeCBpc3N1ZXMgaW4gb3BlbmJzZC1jb21wYXQvcmVhbHBhdGguYwoKMjAwMzA5MjUKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWMgb3BlbmJzZC1jb21wYXQveGNyeXB0LmNdIEJ1ZyAjNjMzOiBSZW1vdmUKICAgRElTQUJMRV9TSEFET1cgZm9yIEhQLVVYLCB1c2UgZ2V0c3BuYW0gaW5zdGVhZCBvZiBnZXRwcnB3bmFtLiAgUGF0Y2ggZnJvbQogICBtaWNoYWVsX3N0ZWZmZW5zIGF0IGhwLmNvbSwgb2sgZGptQAogLSAodGltKSBbc3NoZF9jb25maWddIFVzZVBBTSBkZWZhdWx0cyB0byBuby4KCjIwMDMwOTI0CiAtIChkam0pIFVwZGF0ZSB2ZXJzaW9uLmggYW5kIHNwZWMgZmlsZXMgZm9yIEhFQUQKIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIElSSVg1IG5lZWRzIHRoZSBzYW1lIHNldHJlW3VnXWlkIGRlZmluZXMgYXMgSVJJWDYuCgoyMDAzMDkyMwogLSAoZHR1Y2tlcikgW01ha2VmaWxlLmluXSBCdWcgIzY0NDogRml4ICJtYWtlIGNsZWFuIiBmb3Igb3V0LW9mLXRyZWUKICAgYnVpbGRzLiAgUG9ydGFiaWxpdHkgY29ycmVjdGlvbnMgZnJvbSB0aW1ALgogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM2NjU6IHVpZCBzd2FwcGluZyBpc3N1ZXMgb24gTWFjIE9TIFguCiAgIFBhdGNoIGZyb20gbWF4IGF0IHF1ZW5kaS5kZS4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjNjU3OiB1aWQgc3dhcHBpbmcgaXNzdWVzIG9uIEJTRGkuCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjXSBCdWcgIzY1MzogdWlkIHN3YXBwaW5nIGlzc3VlcyBvbiBUcnU2NC4KIC0gKGR0dWNrZXIpIFtjb25maWd1cmUuYWNdIEJ1ZyAjNjkzOiB1aWQgc3dhcHBpbmcgaXNzdWVzIG9uIE5DUiBNUC1SQVMuCiAgIFBhdGNoIGZyb20gZGF2aWQuaGF1Z2h0b24gYXQgbmNyLmNvbQogLSAoZHR1Y2tlcikgW2NvbmZpZ3VyZS5hY10gQnVnICM2NTk6IHVpZCBzd2FwcGluZyBpc3N1ZXMgb24gSVJJWCA2LgogICBQYXJ0IG9mIHBhdGNoIHN1cHBsaWVkIGJ5IGJ1Z3ppbGxhLW9wZW5zc2ggYXQgdGhld3JpdHRlbndvcmQuY29tCiAtIChkdHVja2VyKSBbY29uZmlndXJlLmFjIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5jCiAgIG9wZW5ic2QtY29tcGF0L2Zha2UtcmZjMjU1My5oXSBCdWcgIzY1OTogVGVzdCBmb3IgYW5kIGhhbmRsZSBzeXN0ZW1zIHdpdGgKICAgd2hlcmUgZ2FpX3N0cmVycm9yIGlzIGRlZmluZWQgYXMgImNvbnN0IGNoYXIgKiIuICBQYXJ0IG9mIHBhdGNoIHN1cHBsaWVkCiAgIGJ5IGJ1Z3ppbGxhLW9wZW5zc2ggYXQgdGhld3JpdHRlbndvcmQuY29tCiAtIChkdHVja2VyKSBbY29udHJpYi9jeWd3aW4vUkVBRE1FIGNvbnRyaWIvY3lnd2luL3NzaC1ob3N0LWNvbmZpZ10gVXBkYXRlCiAgIHNzaC1ob3N0LWNvbmZpZyB0byBtYXRjaCBjdXJyZW50IGRlZmF1bHRzLCBidW1wIFJFQURNRSB2ZXJzaW9uLiAgUGF0Y2ggZnJvbQogICB2aW5zY2hlbiBhdCByZWRoYXQuY29tLgogLSAoZHR1Y2tlcikgW3VpZHN3YXAuY10gRG9uJ3QgdGVzdCByZXN0b3JhdGlvbiBvZiB1aWQgb24gQ3lnd2luIHNpbmNlIHRoZQogICBPUyBkb2VzIG5vdCBzdXBwb3J0IHBlcm1hbmVudGx5IGRyb3BwaW5nIHByaXZpbGVnZXMuICBQYXRjaCBmcm9tCiAgIHZpbnNjaGVuIGF0IHJlZGhhdC5jb20uCiAtIChkdHVja2VyKSBbb3BlbmJzZC1jb21wYXQvcG9ydC1haXguY10gVXNlIGNvcnJlY3QgaW5jbHVkZSBmb3IgeG1hbGxvYy5oLAogICBhZGQgY2Fub2hvc3QuaCB0byBzdG9wIHdhcm5pbmcuICBCYXNlZCBvbiBwYXRjaCBmcm9tIG9wZW5zc2gtdW5peC1kZXYgYXQKICAgdGhld3JpdHRlbndvcmQuY29tCiAtIChkdHVja2VyKSBbSU5TVEFMTF0gQnVnICM2ODY6IERvY3VtZW50IHJlcXVpcmVtZW50IGZvciB6bGliIDEuMS40IG9yCiAgIGhpZ2hlci4KIC0gKHRpbSkgRml4IHR5cG8uIHMvU0VURUlVRF9CUkVBS1NfU0VUVUlEL1NFVEVVSURfQlJFQUtTX1NFVFVJRC8KIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gQnVnIDY2NTogbW92ZSAzIG5ldyBBQ19ERUZJTkVTIG91dHNpZGUgb2YgQUNfVFJZX1JVTi4KICAgUmVwb3J0IGJ5IGRpc3RsZXIgQVQgZ29sZW0gcGggdXRleGFzIGVkdS4KIC0gKGR0dWNrZXIpIFtjb250cmliL2FpeC9wYW0uY29uZl0gSW5jbHVkZSBleGFtcGxlIHBhbS5jb25mIGZvciBBSVggZnJvbQogICBhcnRpY2xlIGJ5IGdlbnR5IGF0IGF1c3Rpbi5pYm0uY29tLCBpbmNsdWRlZCB3aXRoIHRoZSBhdXRob3IncyBwZXJtaXNzaW9uLgogLSAoZHR1Y2tlcikgT3BlbkJTRCBDVlMgU3luYwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOCAwNzo1Mjo1NAogICAgIFtzc2hjb25uZWN0LmNdCiAgICAgbWlzc2luZyB7fTsgYnVnICM2NTY7IGpjbG9uZ3VldCBhdCBmcmVlLmZyCiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE4IDA3OjU0OjQ4CiAgICAgW2J1ZmZlci5jXQogICAgIHByb3RlY3QgYWdhaW5zdCBkb3VibGUgZnJlZTsgIzY2MDsgIHphcmRveiBhdCB1c2Vycy5zZi5uZXQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTggMDc6NTY6MDUKICAgICBbYXV0aGZpbGUuY10KICAgICBtaXNzaW5nICBidWZmZXJfZnJlZSgmZW5jcnlwdGVkKTsgIzY2MjsgemFyZG96IGF0IHVzZXJzLnNmLm5ldAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOCAwODo0OTo0NQogICAgIFtkZWF0dGFjay5jIG1pc2MuYyBzZXNzaW9uLmMgc3NoLWFnZW50LmNdCiAgICAgbW9yZSBidWZmZXIgYWxsb2NhdGlvbiBmaXhlczsgZnJvbSBTb2xhciBEZXNpZ25lcjsgQ0FOLTIwMDMtMDY4MjsKICAgICBvayBtaWxsZXJ0QAogICAtIG1pb2RAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTggMTM6MDI6MjEKICAgICBbYXV0aGZkLmMgYnVmYXV4LmMgZGguYyBtYWMuYyBzc2gta2V5Z2VuLmNdCiAgICAgQSBmZXcgc2lnbmVkbmVzcyBmaXhlcyBmb3IgaGFybWxlc3Mgc2l0dWF0aW9uczsgbWFya3VzQCBvawogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAwOTowMjowMgogICAgIFtwYWNrZXQuY10KICAgICBidWZmZXJfZHVtcCBvbmx5IGlmIFBBQ0tFVF9ERUJVRyBpcyBkZWZpbmVkOyBKZWRpL1NlY3RvciBPbmU7IHByIDM0NzEKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTkgMDk6MDM6MDAKICAgICBbYnVmZmVyLmNdCiAgICAgc2lnbiBmaXggaW4gYnVmZmVyX2R1bXA7IEplZGkvU2VjdG9yIE9uZTsgcHIgMzQ3MwogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAxMToyOTo0MAogICAgIFtzc2gtYWdlbnQuY10KICAgICBwcm92aWRlIGEgc3NoLWFnZW50IHNwZWNpZmljIGZhdGFsKCkgZnVuY3Rpb247IG9rIGRlcmFhZHQKICAgLSBtYXJrdXNAY3ZzLm9wZW5ic2Qub3JnIDIwMDMvMDkvMTkgMTE6MzA6MzkKICAgICBbc3NoLWtleXNjYW4uY10KICAgICBhdm9pZCBmYXRhbF9jbGVhbnVwLCBqdXN0IGNhbGwgZXhpdCgpOyBvayBkZXJhYWR0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE5IDExOjMxOjMzCiAgICAgW2NoYW5uZWxzLmNdCiAgICAgZG8gbm90IGNhbGwgY2hhbm5lbF9mcmVlX2FsbCBvbiBmYXRhbDsgb2sgZGVyYWFkdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAxMTozMzowOQogICAgIFtwYWNrZXQuYyBzc2hkLmNdCiAgICAgZG8gbm90IGNhbGwgcGFja2V0X2Nsb3NlIG9uIGZhdGFsOyBvayBkZXJhYWR0CiAgIC0gbWFya3VzQGN2cy5vcGVuYnNkLm9yZyAyMDAzLzA5LzE5IDE3OjQwOjIwCiAgICAgW3NjcC5jXQogICAgIGVycm9yIGhhbmRsaW5nIGZvciByZW1vdGUtcmVtb3RlIGNvcHk7ICM2Mzg7IHJlcG9ydCBIYXJhbGQgS29lbmlnOwogICAgIG9rIG1pbGxlcnQsIGZncywgaGVubmluZywgZGVyYWFkdAogICAtIG1hcmt1c0BjdnMub3BlbmJzZC5vcmcgMjAwMy8wOS8xOSAxNzo0MzozNQogICAgIFtjbGllbnRsb29wLmMgc3NodHR5LmMgc3NodHR5LmhdCiAgICAgcmVtb3ZlIGZhdGFsIGNhbGxiYWNrcyBmcm9tIGNsaWVudCBjb2RlOyBvayBkZXJhYWR0CiAtIChiYWwpICJleHRyYXRpb24iIC0+ICJleHRyYWN0aW9uIiBpbiBzc2gtcmFuZC1oZWxwZXIuYzsgcmVwb3RlZCBieSBqb2huCglvbiAjdW5peGhlbHBAZWZuZXQKIC0gKHRpbSkgW2NvbmZpZ3VyZS5hY10gYWRkIC0tZGlzYWJsZS1ldGMtZGVmYXVsdC1sb2dpbiBvcHRpb24uIG9rIGRqbQogLSAoZGptKSBTeW5jIHdpdGggVl8zXzcgYnJhbmNoOgogICAtIChkam0pIEZpeCBTU0gxIGNoYWxsZW5nZSBrbHVkZ2UKICAgLSAoZGptKSBCdWcgIzY3MTogRml4IGJ1aWxkcyBvbiBPcGVuQlNECiAgIC0gKGRqbSkgQnVnICM2NzY6IEZpeCBQQU0gc3RhY2sgY29ycnVwdGlvbgogICAtIChkam0pIEZpeCBiYWQgZnJlZSgpIGluIFBBTSBjb2RlCiAgIC0gKGRqbSkgRG9uJ3QgY2FsbCBwYW1fZW5kIGJlZm9yZSBwYW1faW5pdAogICAtIChkam0pIEVuYWJsZSBidWlsZCB3aXRoIG9sZCBPcGVuU1NMIGFnYWluCiAgIC0gKGRqbSkgVHJpbSBkZXByZWNhdGVkIG9wdGlvbnMgZnJvbSBJTlNUQUxMLiBNZW50aW9uIFVzZVBBTQogICAtIChkam0pIEZpeCBxdW90ZSBoYW5kbGluZyBpbiBzZnRwOyBQYXRjaCBmcm9tIGFkbW9ydGVuIEFUIHVtaWNoLmVkdQoKJElkOiBDaGFuZ2VMb2csdiAxLjQ0NTMgMjAwNi8wOC8wNSAwMjo0MDoxMSBkam0gRXhwICQK