PT09IENoYW5nZUxvZyBkaXNjb250aW51ZWQgPT09CgoJV2l0aCB0aGUgbW92ZSB0byBnaXQsIEdMaWIgaXMgc3dpdGNoaW5nIGZyb20gYSBDaGFuZ2VMb2cgZmlsZQoJdG8gcmVseWluZyBvbiBjb21taXQgbWVzc2FnZXMgdG8gcHJvdmlkZSBjaGFuZ2UgaGlzdG9yeS4gUGxlYXNlCglzZWUgUkVBRE1FLmNvbW1pdHMgZm9yIGd1aWRhbmNlIG9uIHRoZSBleHBlY3RlZCBtZXNzYWdlIGZvcm1hdC4KCjIwMDktMDMtMTMgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjIwLjAgPT09CgoyMDA5LTAzLTAyICBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE5LjEwID09PQoKMjAwOS0wMy0wMiAgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xOS45ID09PQoKMjAwOS0wMy0wMSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCUJ1ZyA3MTcwNCAtIEhlYWRlciBmaWxlIGluY2x1ZGUgb3JkZXIKCgkqIGdtb2R1bGUuYzogSW5jbHVkZSBnbW9kdWxlLmggYmVmb3JlIGlvLmguCglQb2ludGVkIG91dCBieSBLYXp1a2kgSXdhbW90bwoKMjAwOS0wMi0xNyAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTkuOCA9PT0KCjIwMDktMDItMTYgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE5LjcgPT09CgoyMDA5LTAyLTAyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xOS42ID09PQoKMjAwOS0wMS0xOSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTkuNSA9PT0KCjIwMDktMDEtMDUgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE5LjQgPT09CgoyMDA4LTEyLTE1ICBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE5LjMgPT09CgoyMDA4LTEyLTAxICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xOS4yID09PQoKMjAwOC0xMi0wMSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTkuMSA9PT0KCjIwMDgtMTAtMTYgIE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTkuMCA9PT0KCjIwMDgtMDktMjYgIFRvciBMaWxscXZpc3QgIDx0bWxAbm92ZWxsLmNvbT4KCgkqIGdtb2R1bGUtd2luMzIuYzogSW1wcm92ZSBlcnJvciByZXBvcnRpbmc6IFdoZW4gZ19tb2R1bGVfb3BlbigpCglmYWlscywgaW5jbHVkZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHBhc3NlZCB0byBMb2FkTGlicmFyeSgpIGluCgl3aGF0IGdfbW9kdWxlX2Vycm9yKCkgcmV0dXJucy4KCjIwMDgtMDktMTcgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE4LjEgPT09CgoyMDA4LTA5LTA4ICBUb3IgTGlsbHF2aXN0ICA8dG1sQG5vdmVsbC5jb20+CgoJQnVnIDU1MTQwOCAtIGdtb2R1bGUuZGVmIGdlbmVyYXRlZCB0byBidWlsZGRpciwgYnV0IHJlcXVpcmVkIGluIHNyY2RpcgoKCSogTWFrZWZpbGUuYW06IFVzZSBnbW9kdWxlLmRlZiBmcm9tIGJ1aWxkZGlyLCBub3Qgc3JjZGlyLgoKMjAwOC0wOS0wMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTguMCA9PT0KCjIwMDgtMDgtMTggIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE3LjcgPT09CgoyMDA4LTA4LTA0ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xNy42ID09PQoKMjAwOC0wOC0wNCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTcuNSA9PT0KCjIwMDgtMDgtMDEgIEhhbnMgQnJldWVyICA8aGFuc0BicmV1ZXIub3JnPgoKCSogbWFrZWZpbGUubXNjLmluIDogYWRhcHQgdG8gZ21vZHVsZS5zeW1ib2xzIHVzYWdlCgoyMDA4LTA3LTI3ICBUb3IgTGlsbHF2aXN0ICA8dG1sQG5vdmVsbC5jb20+CgoJKiBnbW9kdWxlLnN5bWJvbHM6IE5ldyBmaWxlLgoKCSogZ21vZHVsZS5jOiBCeXBhc3MgdGhlIFdpbmRvd3MgQUJJIGNvbXBhdGliaWxpdHkgc3ltYm9scyBvbgoJNjQtYml0IFdpbmRvd3MuIFRodXMgbm8gbmVlZCB0byBrZWVwIHRoZSBmaWxlIG5hbWUgaW4gc3lzdGVtCgljb2RlcGFnZSBhcm91bmQgb24gNjQtYml0IFdpbmRvd3MgZWl0aGVyLgoJCgkqIE1ha2VmaWxlLmFtOiBQcm9kdWNlIGdtb2R1bGUuZGVmIGZyb20gZ21vZHVsZS5zeW1ib2xzLiBEaXN0CglnbW9kdWxlLnN5bWJvbHMgaW5zdGVhZCBvZiBnbW9kdWxlLmRlZi4KCgkqIGdtb2R1bGUuZGVmOiBEcm9wIGZyb20gU1ZOLgoKMjAwOC0wNy0yNyAgVG9yIExpbGxxdmlzdCAgPHRtbEBub3ZlbGwuY29tPgoKCSogTWFrZWZpbGUuYW0gKGdtb2R1bGUtMi4wLmxpYik6IFBhc3MgYXBwcm9wcmlhdGUgLW1hY2hpbmUgZmxhZyB0bwoJbGliLmV4ZS4KCjIwMDgtMDctMjEgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW4ycmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE3LjQgPT09CgoyMDA4LTA3LTAyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xNy4zID09PQoKMjAwOC0wNi0xMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoJCgkqID09PSBSZWxlYXNlZCAyLjE3LjIgPT09CgoyMDA4LTA2LTEyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xNy4xID09PQoKMjAwOC0wNS0yOCAgTWljaGFlbCBOYXR0ZXJlciAgPG1pdGNoQGltZW5kaW8uY29tPgoKCSogTWFrZWZpbGUuYW06IGRvbid0IGRlZmluZSBHX0RJU0FCTEVfU0lOR0xFX0lOQ0xVREVTLCBpdCdzIGluCgl0aGUgZ2xvYmFsIENQUEZMQUdTIG5vdy4KCjIwMDgtMDUtMjcgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE3LjAgPT09CgoyMDA4LTA1LTA1ICBNaWNoYWVsIE5hdHRlcmVyICA8bWl0Y2hAaW1lbmRpby5jb20+CgoJKiBNYWtlZmlsZS5hbS4gYnVpbGQgd2l0aCBHX0RJU0FCTEVfU0lOR0xFX0lOQ0xVREVTIHRvIHByZXZlbnQKCWNvZGUgZnJvbSBiZWluZyBjaGVja2VkIGluIHRoYXQgYnJlYWtzIHRoZSBidWlsZCBvZiBhcHBsaWNhdGlvbnMKCXdoaWNoIHVzZSBHX0RJU0FCTEVfU0lOR0xFX0lOQ0xVREVTLgoKCSogZ21vZHVsZS5jOiAjaW5jbHVkZSAiZ2xpYi5oIiBpbnN0ZWFkIG9mICJnbGliY29uZmlnLmgiCgoyMDA4LTAzLTE2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQG5vdmVsbC5jb20+CgoJKiBNYWtlZmlsZS5hbTogRGVmaW5lIGdtb2R1bGVfZGVmIGxvY2FsbHkgaGVyZSBpbnN0ZWFkIG9mIHVzaW5nIGFuCglBdXRvY29uZiB2YXJpYWJsZS4KCjIwMDgtMDMtMTAgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCQoJKiA9PT0gUmVsZWFzZWQgMi4xNi4xID09PQoKMjAwOC0wMy0xMCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTYuMCA9PT0KCjIwMDgtMDItMjUgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE1LjYgPT09CgoyMDA4LTAyLTExICBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE1LjUgPT09CgoyMDA4LTAxLTI4ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xNS40ID09PQoKMjAwOC0wMS0yMSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTUuMyA9PT0KCjIwMDgtMDEtMTQgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE1LjIgPT09CgowMDgtMDEtMDcgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE1LjEgPT09CgoyMDA3LTEyLTIyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX29wZW4pOiBEb24ndCBmYWlsIHRvIGxvYWQgbW9kdWxlcwoJd2l0aCBzdWZmaXggLmxhLiAgKCM0ODAxMjIsIEFuZHJleSBUc3l2YXJldikKCjIwMDctMTItMjAgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE1LjAgPT09CgoyMDA3LTExLTA4ICBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqIGdtb2R1bGUuYzogSW5jbHVkZSBnbGliY29uZmlnLmggYmVmb3JlIGNoZWNraW5nIEdfT1NfV0lOMzIuCgoyMDA3LTExLTA3ICBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqICouYzogTWFrZSBoZWFkZXIgaW5jbHVkZSBvcmRlciBjb25zaXN0ZW50ICgjNzE3MDQsCglEaWVnbyBFc2NhbGFudGUgVXJyZWxvKQoKMjAwNy0xMS0wNyAgTWF0dGhpYXMgQ2xhc2VuIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xNC4zID09PQoKMjAwNy0xMC0xNiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTQuMiA9PT0KCjIwMDctMDktMTkgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjE0LjEgPT09CgoyMDA3LTA4LTAzICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xNC4wID09PQoKMjAwNy0wNy0xMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTMuNyA9PT0KCjIwMDctMDctMDkgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfb3Blbik6IEluY2x1ZGUgdGhlIG1vZHVsZSBmaWxlIAoJbmFtZSB0byB0aGUgZXJyb3IgbWVzc2FnZSBnaXZlbiB3aGVuIG1vZHVsZSBpbml0aWFsaXphdGlvbiAKCWZhaWxzLiAgKCM0NDU4MTMsIEd1c3Rhdm8gQ2FybmVpcm8pCgpGcmkgSnVuIDI5IDIwMDcgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjEzLjYgPT09CgoyMDA3LTA2LTE4ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xMy41ID09PQoKMjAwNy0wNi0wNSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTMuNCA9PT0KCjIwMDctMDYtMDQgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCQoJKiA9PT0gUmVsZWFzZWQgMi4xMy4zID09PQoKMjAwNy0wNS0yMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTMuMiA9PT0KCjIwMDctMDUtMDMgIE1hdHRoaWFzIENsYXNlbiA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTMuMSA9PT0KCjIwMDctMDMtMTYgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjEzLjAgPT09CgoyMDA3LTAxLTE5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQG5vdmVsbC5jb20+CgoJKiBNYWtlZmlsZS5hbSAoZ21vZHVsZS0yLjAubGliKTogVXNlICQoc3JjZGlyKSBmb3IgYnVpbGRzIG91dHNpZGUKCXNyY2Rpci4KCjIwMDYtMTItMzEgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqIGdtb2R1bGUuYzogRml4IGluY2x1ZGUgb3JkZXIgZm9yIHdpbjMyLiAoIzM5MDk0MywgCglLYXp1a2kgSXdhbW90bykKCjIwMDYtMTItMjggIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqIGdtb2R1bGUuYzogQ2xlYW4gdXAgaW5jbHVkZXMuCgoyMDA2LTEyLTEzICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX29wZW4pOgoJKiBnbW9kdWxlLWRsLmMgKF9nX21vZHVsZV9zeW1ib2wpOiBIYW5kbGUgdmFsaWQgc3ltYm9scwoJdGhhdCBhcmUgTlVMTCBjb3JyZWN0bHkuICAoIzM4NTM4OCwgRmVsaXggS2F0ZXIpCgpNb24gU2VwIDExIDE0OjU4OjU2IDIwMDYgIFRpbSBKYW5payAgPHRpbWpAaW1lbmRpby5jb20+CgoJKiBnbW9kdWxlLmM6IGFwcGxpZWQgcGF0Y2ggZnJvbSBDaHJpc3RpYW4gUGVyc2NoIHRvIHN1cHBvcnQKCUdfREVCVUcgZmxhZ3MgcmVzaWRlbnQtbW9kdWxlcyBhbmQgYmluZC1ub3ctbW9kdWxlcywgYnVnICMzNDUwOTkuCgoyMDA2LTA4LTI5ICBUb3IgTGlsbHF2aXN0ICA8dG1sQG5vdmVsbC5jb20+CgoJUmVtb3ZlIHN1cHBvcnQgZm9yIFdpbmRvd3MgOXgvTUUuIEdUSysgaGFzbid0IHdvcmtlZCBvbiBXaW45eAoJc2luY2UgMi42LiBJdCdzIHBvaW50bGVzcyB0byBrZWVwIHRoZSBXaW45eCBjb2RlIGluIGhlcmUgYXMgaXQKCWlzbid0IGJlaW5nIG1haW50YWluZWQgYW55d2F5LiBJZiBzb21lYm9keSBpcyBpbnRlcmVzdGVkLCBpdCBpcyBpbgoJb2xkZXIgR0xpYiB2ZXJzaW9ucywgYW5kIGluIENWUy4KCgkqIGdtb2R1bGUtd2luMzIuYyAoX2dfbW9kdWxlX29wZW4pOiBSZW1vdmUgdGhlIFdpbjl4IGJyYW5jaCBvZiBpZgoJc3RhdGVtZW50LgoKMjAwNi0wOC0xNSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTIuMiA9PT0KCjIwMDYtMDctMjIgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjEyLjEgPT09CgoyMDA2LTA3LTAyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xMi4wID09PQoKMjAwNi0wNi0yMCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTEuNCA9PT0KCjIwMDYtMDYtMTIgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjExLjMgPT09CgoyMDA2LTA2LTA1ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi4xMS4yID09PQoKMjAwNi0wNS0xNSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTEuMSA9PT0KCjIwMDYtMDUtMDIgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCQoJKiA9PT0gUmVsZWFzZWQgMi4xMS4wID09PQoKMjAwNi0wMy0yOSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9zeW1ib2wpOiBNYWtlIHN1cmUgdG8KCW5vdCByZXR1cm4gVFJVRSBpZiBzeW1ib2wgaXMgTlVMTC4gICgjMzM0NDQwLAoJSVRPSCBZYXN1ZnVtaSkKCjIwMDYtMDMtMDcgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSAgUmVsZWFzZWQgMi4xMC4xID09PQoKMjAwNi0wMi0yNCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMTAuMCA9PT0KCjIwMDYtMDItMTAgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjkuNiA9PT0KCjIwMDYtMDEtMjcgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjkuNSA9PT0KCjIwMDYtMDEtMTggIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCQoJKiA9PT0gUmVsZWFzZWQgMi45LjQgPT09CgoyMDA2LTAxLTE2ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi45LjMgPT09CgoyMDA2LTAxLTA1ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi45LjIgPT09CgoyMDA1LTEyLTA5ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi45LjEgPT09CgoyMDA1LTExLTI4ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiBnbW9kdWxlLmMgKHBhcnNlX2xpYnRvb2xfYXJjaGl2ZSk6IFNpbGVuY2UKCWNvbXBpbGVyIHdhcm5pbmdzLgoKMjAwNS0xMS0xNyAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuOS4wID09PQoKMjAwNS0wOC0yMyAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuOC4xID09PQoKMjAwNS0wOC0xMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuOC4wID09PQoKMjAwNS0wOC0wNSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNy43ID09PQoKMjAwNS0wOC0wMyAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNy42ID09PQoKMjAwNS0wOC0wMiAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNy41ID09PQoKMjAwNS0wNy0yMSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNy40ID09PQoKMjAwNS0wNy0xNSAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNy4zID09PQoJCjIwMDUtMDctMDkgIFRvciBMaWxscXZpc3QgIDx0bWxAbm92ZWxsLmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBEb24ndCB1c2UgdGhlIHNjcmlwdHMgaW4gYnVpbGQvd2luMzIgdG8gY29tcGlsZQoJZ21vZHVsZS5yYyBpbnRvIGEgcmVzb3VyY2Ugb2JqZWN0IGZpbGUuIChUaGlzIG1lYW5zIHdlIGxvc2UgdGhlCglidWlsZCBudW1iZXIgaW5jcmVtZW50IG1hZ2ljLCBidXQgSSBkb3VidCBpdCB3YXMgdGhhdCB1c2VmdWwKCWFueXdheS4pIEluc3RlYWQgdXNlIHdpbmRyZXMgZGlyZWN0bHkuIFRvIHBhc3MgdGhlIG5vcm1hbCAubyBmaWxlCglwcm9kdWNlZCBieSB3aW5kcmVzIHRocm91Z2ggbGlidG9vbCwgd2hpY2ggd2FudHMgLmxvIGZpbGVzLCBwYXNzCglpdCBkaXJlY3RseSB0byB0aGUgbGlua2VyIHVzaW5nIGEgLVdsIG9wdGlvbi4KCgkqIGdtb2R1bGUucmMuaW46IFRodXMgcmVwbGFjZSBCVUlMRE5VTUJFUiB3aXRoIDAuCgoyMDA1LTA3LTA4ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgkKCSogPT09IFJlbGVhc2VkIDIuNy4yID09PQoKMjAwNS0wNi0zMCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNy4xID09PQoKMjAwNS0wNi0zMCAgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogZ21vZHVsZS1hci5jOiBJbmNsdWRlIHN0ZGxpYi5oCgoyMDA1LTA2LTI2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQG5vdmVsbC5jb20+CgoJKiBNYWtlZmlsZS5hbTogbGlidG9vbCBpbnN0YWxscy91bmluc3RhbGxzIHRoZSBpbXBvcnQgbGlicmFyeSwgbm8KCW5lZWQgdG8gZG8gaXQgb3Vyc2VsdmVzLiBEbyBzdGlsbCBpbnN0YWxsL3VuaW5zdGFsbCB0aGUgLmRlZiBmaWxlLAoJdGhvdWdoLgoKMjAwNS0wNi0yNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBub3ZlbGwuY29tPgoKCSogTWFrZWZpbGUuYW0gKGluc3RhbGwtbGlidG9vbC1pbXBvcnQtbGliKTogQ3VycmVudCBHTlUgdG9vbHMgZG8KCXVuZGVyc3RhbmQgdGhlIFBSSVZBVEUga2V5d29yZC4KCjIwMDUtMDYtMTAgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjcuMCA9PT0KCjIwMDUtMDEtMDcgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjYuMSA9PT0KCjIwMDQtMTItMzEgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9vcGVuKTogSXQncyB3cm9uZyB0byBjYWxsIGdfZmlsZV90ZXN0KCkgd2l0aAoJbW9yZSB0aGFuIG9uZSB0ZXN0IChib3RoIEdfRklMRV9URVNUX0VYSVNUUyBhbmQgX0lTX1JFR1VMQVIpLiAoSXQKCXdvdWxkIHN1Y2NlZWQgZXZlbiBpZiB0aGUgcGF0aG5hbWUgZXhpc3RlZCBhcyBhIG5vbnJlZ3VsYXIgZmlsZS4pCglKdXN0IEdfRklMRV9URVNUX0lTX1JFR1VMQVIgd29ya3MgZmluZS4gKCMxNjI1OTQpCgoyMDA0LTEyLTE2ICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi42LjAgPT09CgkKMjAwNC0xMi0wNiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBNYWtlZmlsZS5hbQoJKiBnbW9kdWxlLmRlZgoJKiBnbW9kdWxlLltoY106IFdpbjMyIERMTCBBQkkgc3RhYmlsaXR5IGNydWZ0IGxpa2UgaW4gLi4vZ2xpYi4KCjIwMDQtMTItMDIgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjUuNyA9PT0KCQoyMDA0LTExLTEyICBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi41LjYgPT09CgkKMjAwNC0xMS0wNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLXdpbjMyLmMgKF9nX21vZHVsZV9vcGVuKTogQXJndW1lbnQgaXMgaW4gVVRGLTguIFVzZSB3aWRlCgljaGFyYWN0ZXIgV2luMzIgQVBJIGlmIHByZXNlbnQuCgoJKiBnbW9kdWxlLmMgKHBhcnNlX2xpYnRvb2xfYXJjaGl2ZSwgZ19tb2R1bGVfb3Blbik6IENvbnZlcnQgZmlsZQoJbmFtZSB0byBVVEYtOCBiZWZvcmUgc3RvcmluZyBpbiB0aGUgZXJyb3IgbWVzc2FnZSBzdHJpbmcuCgoJKiBnbW9kdWxlLmMgKHBhcnNlX2xpYnRvb2xfYXJjaGl2ZSk6IFVzZSBnX29wZW4oKS4KCjIwMDQtMTEtMDIgIE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjUuNSA9PT0KCjIwMDQtMTAtMjcgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNS40ID09PQoKMjAwNC0wOS0xOCBNYXR0aGlhcyBDbGFzZW4gIDxtY2xhc2VuQHJlZGhhdC5jb20+CgoJKiA9PT0gUmVsZWFzZWQgMi41LjMgPT09CgoyMDA0LTA4LTI1IE1hdHRoaWFzIENsYXNlbiAgPG1jbGFzZW5AcmVkaGF0LmNvbT4KCgkqID09PSBSZWxlYXNlZCAyLjUuMiA9PT0KCjIwMDQtMDgtMDEgTWF0dGhpYXMgQ2xhc2VuICA8bWNsYXNlbkByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuNS4xID09PQoKU3VuIEp1bCAxOCAxODowMzowOCAyMDA0ICBTb2VyZW4gU2FuZG1hbm4gIDxzYW5kbWFubkBkYWltaS5hdS5kaz4KCgkqID09PSBSZWxlYXNlZCAyLjUuMCA9PT0KCk1vbiBNYXkgMzEgMDA6MDk6MTAgMjAwNCAgTWF0dGhpYXMgQ2xhc2VuICA8bWFjbGFzQGdteC5kZT4KCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGdtb2R1bGUtYXIuYy4gKCM4NTkzMCwgVG9tYXMg1mdyZW4pCgpUdWUgTWF5IDExIDIzOjIzOjIxIDIwMDQgIE1hdHRoaWFzIENsYXNlbiAgPG1hY2xhc0BnbXguZGU+CgoJKiBnbW9kdWxlLWFyLmMgKF9nX21vZHVsZV9vcGVuKTogTWFrZSBpdCBjb21waWxlIG9uIEFJWC4gIAoJKCMxNDExNTksIE1pY2hhZWwgV2lsc29uKQoKMjAwNC0wMy0zMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLXdpbjMyLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKTogT24gQ3lnd2luLCB1c2UgdGhlICJjeWciCglwcmVmaXgsIGFuZCBhY2NlcHQgYWxzbyB0aGUgbm9ybWFsICJsaWIiLiAoIzEzODQwMywgUm9nZXIgTGVpZ2gpCgpUdWUgRmViIDI0IDE0OjA5OjIxIDIwMDQgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogPT09IFJlbGVhc2VkIDIuMy4zID09PQoKU3VuIEZlYiAyMiAwMjoyODo0MyAyMDA0ICBNYXR0aGlhcyBDbGFzZW4gIDxtYWNsYXNAZ214LmRlPgoKCUJ1ZyAjODU5MzAsIExhdXJlbnQgVml2aWVyOgoJCgkqIGdtb2R1bGUtYXIuYzogSW1wbGVtZW50YXRpb24gb2YgbmF0aXZlIG1vZHVsZSBtYW5hZ2VtZW50IGZvciBBSVguCgkqIGdtb2R1bGVjb25mLmguaW46IAoJKiBnbW9kdWxlLmM6IFN1cHBvcnQgZ21vZHVsZS1hci5jIAoKMjAwMy0wMS0wMSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLXdpbjMyLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKTogVXNlIGdfYXNjaWlfc3RyY2FzZWNtcCgpLgoKVHVlIERlYyAgMyAyMDo1NjoxOSAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfb3Blbik6IFByb3Blcmx5IHJlZmNvdW50IHRoZQoJbWFpbiBtb2R1bGUgaWYgaXQgaXMgYWxyZWFkeSBvcGVuLiAoIzk4NjQ4KQoKU2F0IE1hciAgMiAxNDo0NjoxNyAyMDAyICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIGdtb2R1bGUtYmVvcy5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCkgKiBnbW9kdWxlLWR5bGQuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpIAoJICBnbW9kdWxlLWRsLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKTogVXNlIEdfTU9EVUxFX1NVRkZJWCByYXRoZXIgdGhhbgoJYSBoYXJkY29kZWQgIi5zbyIuICgjNzI4MDMpCgpTdW4gRmViIDE3IDE4OjE1OjIyIDIwMDIgIE93ZW4gVGF5bG9yICA8b3RheWxvckByZWRoYXQuY29tPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9vcGVuKTogRml4IHR5cG8gd2hlbiBjaGVja2luZwoJaWYgZmlsZSArIG1vZHVsZV9zdWZmaXggZXhpc3RzLiAoTWlyb3NsYXcgRG9icnphbnNraS1OZXVtYW5uLAoJIzcxODAxKQoKMjAwMS0xMS0yNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIHJ1bGUgZm9yIHRlc3RnbW9kdWxlLmV4cCwgdG9vLgoKMjAwMS0xMS0yMiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLXdpbjMyLmM6IEN1cnJlbnQgdzMyYXBpIGhlYWRlcnMgZG8gaW5jbHVkZSB0bGhlbHAzMi5oLAoJc28gbm8gbmVlZCB0byBoYXZlIGFuIGV4dHJhY3QgZnJvbSBpdCBoZXJlLgoKTW9uIE5vdiAxOSAxNjoxMjoxMiAyMDAxICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIE1ha2VmaWxlLmFtIG1ha2VmaWxlLm1zYy5pbiBtYWtlZmlsZS5taW5ndy5pbjogUmVtb3ZlCgl0ZXN0Z21vZHVsZSBhbmQgYXNzb2NpYXRlZCBwbHVnaW4gZmlsZXM7IHdlIGRvbid0IG5lZWQgX2JvdGhfIHRoaXMKCWFuZCAuLi90ZXN0cy9tb2R1bGUtdGVzdC5jCgoyMDAxLTExLTE2ICBNaWNoYWVsIE1lZWtzICA8bWljaGFlbEB4aW1pYW4uY29tPgoKCSogZ21vZHVsZS5jIChwYXJzZV9saWJ0b29sX2FyY2hpdmUpOiBmaXggbGVhay4KCjIwMDEtMTAtMzAgIERhbiBXaW5zaGlwICA8ZGFud0B4aW1pYW4uY29tPgoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgZ21vZHVsZS1keWxkLmMKCjIwMDEtMTAtMjMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogTWFrZWZpbGUuYW06IChXaW4zMik6IElmIHdlIGhhdmUgYnVpbHQgdGhlIE1TVkMgaW1wb3J0IGxpYnJhcnksCglpbnN0YWxsIGl0LiBJbnN0YWxsIHRoZSBnY2MgaW1wb3J0IGxpYnJhcnkuIEFsc28gc3VwcG9ydAoJdW5pbnN0YWxsLgoKMjAwMS0xMC0wOSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLXdpbjMyLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKTogTW9yZSBVbml4IGNvbXBhdGliaWxpdHk6CglBZGQgImxpYiIgcHJlZml4IGluIGNhc2UgdGhlIG1vZHVsZSBuYW1lIGRvZXNuJ3QgYWxyZWFkeSBoYXZlIGl0LAoJZXhjZXB0IGlmIGl0IGVuZHMgd2l0aCAiLmRsbCIgKGluIHdoaWNoIGNhc2UgaXQgcHJvYmFibHkgYWxyZWFkeQoJaXMgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgRExMKS4gVGhpcyBpcyBuZWVkZWQgZm9yIGluc3RhbmNlIGZvcgoJdGhlIGdkay1waXhidWYgbG9hZGVycywgd2hpY2ggYXJlIGNhbGxlZCAibGliKi5kbGwiLCBidXQKCWdkay1waXhidWYtaW8gY2FsbHMgZ19tb2R1bGVfYnVpbGRfcGF0aCB3aXRob3V0IHRoZSAibGliIiBwcmVmaXguCgoyMDAxLTEwLTAzICBqYWNvYiBiZXJrbWFuICA8amFjb2JAeGltaWFuLmNvbT4KCgkqIGxpYmdwbHVnaW5fYS5jOiAoZ3BsdWdpbl9hX21vZHVsZV9mdW5jKTogCgkqIGdtb2R1bGUuaDogcy9yZXRyaXZlL3JldHJpZXZlLwoKMjAwMS0wOS0yNSAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBtYWtlZmlsZS5taW5ndy5pbjogRml4IG1pc3NpbmcgZW5kIEAgaW4gQExUX0NVUlJFTlRALgoKCSogbWFrZWZpbGUubXNjLmluOiBVc2Ugc2FtZSBETEwgYW5kIGltcG9ydCBsaWJyYXJ5IG5hbWVzIGFzCglsaWJ0b29sLgoJCjIwMDEtMDktMTkgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS5yYy5pbjogQ29ycmVjdCBJbnRlcm5hbE5hbWUgYW5kIE9yaWdpbmFsRmlsZW5hbWUgdG8KCW1hdGNoIHdoYXQgd2UgYWN0dWFsbHkgcHJvZHVjZS4KCjIwMDEtMDktMTggIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogTWFrZWZpbGUuYW06IE9uIFdpbjMyLCBwYXNzIGEgZHVtbXkgLXJwYXRoIGZsYWcgdG8gbGlidG9vbCB3aGVuCglidWlsZGluZyBsaWJncGx1Z2luX1thYl0ubGEsIG90aGVyd2lzZSBsaWJ0b29sIGRvZXNuJ3QgY3JlYXRlIGEKCURMTCwgYnV0IGEgc3RhdGljIGFyY2hpdmUuCgoyMDAxLTA3LTIwICBIYW5zIEJyZXVlciAgPGhhbnNAYnJldWVyLm9yZz4KCgkqIG1ha2VmaWxlLm1zYy5pbiA6IHJlZmxlY3QgZ2xpYiBtb3ZlCgoyMDAxLTA1LTIxICBNYXJrIE11cm5hbmUgIDxNYXJrLk11cm5hbmVAaXJlbGFuZC5zdW4uY29tPgoKCSogZ21vZHVsZS5jIChnX3N0cl9jaGVja19zdWZmaXgpOiAgTW9kaWZpZWQgdHlwZSBvZiBzdHJpbmdfbGVuCglhbmQgc3VmZml4X2xlbiB0byBiZSBnc2l6ZS4gIFByb3Blcmx5IGFjY29tbW9kYXRlcyByZXR1cm4gZnJvbQoJc3RybGVuKCkuCgoyMDAxLTA1LTI5ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9zZXRfZXJyb3JfdW5kdXBlZCk6IERvIG5vdCBnX3N0cmR1cCwgYXMKCXByb21pc2VkIGluIHRoZSBmdW5jdGlvbiBuYW1lLgoKVHVlIE1heSAyOSAxMjo1Nzo1MSAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX3N5bWJvbCk6IGVyaywgc3RyY29uY2F0IG5lZWRzIE5VTEwgYXMgbGFzdCBhcmcuCgltYWtlIHN1cmUgd2UgcGFzcyBtb2R1bGUgbmFtZSB3aXRoIHN1ZmZpeCBpbnRvIGJhY2tlbmQgb3Blbi4KCk1vbiBNYXkgMjggMjA6MTk6MjUgMjAwMSAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9vcGVuKTogYXMgYSBsYXN0IHJlc29ydCwgaWYgd2UgY2FuJ3QgYWNjZXNzKCkKCXRoZSBtb2R1bGUsIGxlYXZlIGl0IHVwIHRvIHRoZSBwbGF0Zm9ybSBiYWNrZW5kcyB0byBmaW5kIGl0LgoJKGZpeGVzIGltcGxpY2l0IHNlYXJjaCBwYXRjaCBsb2FkaW5nIGkgYnJva2Ugd2l0aCBteSBsYXN0Cgljb21taXQsIHNwb3R0ZWQgYnkgUGFkcmFpZyBPJ0JyaWFpbikuCgpUaHUgTWF5IDI0IDAzOjQzOjEyIDIwMDEgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfb3Blbik6IHJlb3JkZXJlZCBjb2RlIHNvIHdlIGhhdmUgYSBzaW5nbGUKCW1vZHVsZSBsb2FkaW5nIHBvaW50IChmb3IgcmVsaWFibGUgZXJyb3IgbWVzc2FnZXMpLiBkbyBhY2Nlc3MoKQoJdGVzdHMgdG8gZmlndXJlIHBsYXVzaWJsZSBmaWxlIG5hbWVzLgoJbWFrZSBlcnJvciBtZXNzYWdlcyBtb3JlIHZlcmJvc2Ugc28gdXNlcnMgY2FuZmlndXJlIHdoYXQncyBnb2luZyBvbi4KCjIwMDEtMDQtMjAgIERhbiBXaW5zaGlwICA8ZGFud0B4aW1pYW4uY29tPgoKCSogZ21vZHVsZS1keWxkLmM6IGdtb2R1bGUgaW1wbGVtZW50YXRpb24gZm9yIERhcndpbi9NYWMgT1MgWAoKCSogZ21vZHVsZS5jOiAKCSogZ21vZHVsZWNvbmYuaC5pbjogQWRkIGdtb2R1bGUtZHlsZCBzdXBwb3J0CgoJKiB0ZXN0Z21vZHVsZS5jIChtYWluKTogRml4IHNwZWxsaW5nCgoyMDAxLTAzLTEzICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCglGcm9tIEVkd2FyZCBNLiBMZWUgIDx0YWlsYmVydEB5YWhvby5jb20+OgoKCSogZ21vZHVsZS13aW4zMi5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6IHVzZSAoY3lnd2luIGZyaWVuZGx5KSBkaXIKCXNlcGFyYXRvci4KCjIwMDEtMDMtMTIgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogTWFrZWZpbGUuYW0gKGxpYmdwbHVnaW5fYV9sYV9MSUJBREQsIGxpYmdwbHVnaW5fYl9sYV9MSUJBREQpOgoJTGluayB3aXRoIHRoZSBsaWJnbW9kdWxlIGxhIG9ubHkgb24gV2luMzIuCgoyMDAxLTAzLTEwICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIE1ha2VmaWxlLmFtOiBVc2UgdGhlIF9MSUJBREQgZGVwZW5kZW5jeSBvbiBsaWJnbGliIG9ubHkgb24gdGhlCglXaW4zMiBwbGF0Zm9ybSAoaW5jbHVkaW5nIEN5Z3dpbikuCgoyMDAxLTAzLTA3ICBTZWJhc3RpYW4gV2lsaGVsbWkgIDx3aWxoZWxtaUBpcmEudWthLmRlPgoKCSogTWFrZWZpbGUuYW0sIG1ha2VmaWxlLm1pbmd3LmluLCBtYWtlZmlsZS5tc2MuaW46IFNldAoJR19MT0dfRE9NQUlOIHRvIFwiR01vZHVsZVwiIGluc3RlYWQgb2YgZ19sb2dfZG9tYWluX2dtb2R1bGUuCgoJKiBnbW9kdWxlLmRlZiwgZ21vZHVsZS5oLCBnbW9kdWxlLmM6IFJlbW92ZWQgZ19sb2dfZG9tYWluX2dtb2R1bGUuCgoyMDAxLTAyLTIxICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUuaDogVXNlIEdfQkVHSU5fREVDTFMgYW5kIEdfRU5EX0RFQ0xTLiBEZWZpbmUKCUdfTU9EVUxFX0VYUE9SVCBjb3JyZWN0bHkgb24gQ3lnd2luLCB0b28uCgoJKiBnbW9kdWxlLXdpbjMyLmMgKF9nX21vZHVsZV9vcGVuKTogQ29udmVydCBwYXRoIHRvIFdpbmRvd3MgZm9ybWF0CglvbiBDeWd3aW4uCgoJKiBNYWtlZmlsZS5hbSAobGliZ2xpYik6IFVzZSBsaWJnbGliLTEuMy5sYSBmcm9tCgl0b3BfYnVpbGRkaXIuIEludm9rZSBsaWJ0b29sIHdpdGggLW5vLXVuZGVmaW5lZCBmb3IgV2luMzIgYW5kCglDeWd3aW4uCgoyMDAxLTAyLTE3ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKICAgICAgICBBcHBsaWVkIHBhdGNoIGZyb20gU29lcmVuIFNhbmRtYW5uOgoJCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfZXJyb3IpOiBHX0NPTlNUX1JFVFVSTgoJKGdfbW9kdWxlX25hbWUpOiBHX0NPTlNUX1JFVFVSTgoKU2F0IEZlYiAxNyAwNzoyNzoxNSAyMDAxICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmM6IHdvcmsgYXJvdW5kIHBsYXRmb3JtcyB0aGF0IGhhdmUgYnJva2VuIFJUTERfR0xPQkFMLgoKMjAwMS0wMS0yNyAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLmM6IChXaW4zMikgTmVlZCA8aW8uaD4gZm9yIG9wZW4oKSBhbmQgY2xvc2UoKS4KCjIwMDAtMTItMjIgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbW9kdWxlLmM6IE1ha2UgZ19tb2R1bGVfb3BlbiBtb3JlIHRvbGVyYW50IHdydCB0byB0aGUgbW9kdWxlCgluYW1lLiBGaXJzdCBpdCB0cmllcyB0byBvcGVuIHRoZSBtb2R1bGUgYXMgbmFtZWQsIGlmIHRoYXQgZmFpbHMsCglpdCBjaGVja3MsIHdoZXRoZXIgaXQgaXMgYSBsaWJ0b29sIGFyY2hpdmUgYW5kIHBhcnNlcyBpdCwgaWYgdGhhdAoJZmFpbHMgaXQgYXBwZW5kcyB0aGUgc3lzdGVtcyBzaGFyZWQgbGlicmFyeSBzdWZmaXgKCShpLmUuICIuc28iKSAoaWYgbm90IGFscmVhZHkgZm91bmQpIGFuZCB0cmllcyBhZ2FpbiBhbmQgaWYgdGhhdAoJZmFpbHMgaXQgdHJpZXMgdG8gYXBwZW5kIHRoZSAiLmxhIiBsaWJ0b29sIHN1ZmZpeCAoaWYgbm90IGFscmVhZHkKCWZvdW5kKSBhbmQgcGFyc2VzIGl0LgoKCSogZ21vZHVsZS5jOiBMb2NrIHJlY3Vyc2l2ZSBtdXRleCBkdXJpbmcgbW9zdCBtb2R1bGUgZnVuY3Rpb25zIGZvcgoJc2FmZXR5LgoKCSogZ21vZHVsZS1kbC5jOiBSZXR1cm4gYW4gZXJyb3IgZnJvbSBfZ19tb2R1bGVfc3ltYm9sIG9ubHksIGlmCglkbGVycm9yIHNheXMgc28uIEFsbCBvdGhlciBmdW5jdGlvbnMgcmV0dXJuIGFuIGVycm9yIGFzIHdlbGwsIGlmCglkbGVycm9yIHJldHVybnMgTlVMTC4KCgkqIHRlc3RnbW9kdWxlLmM6IFRoYW5rcyB0byB0aGUgYWJvdmUgY2hhbmdlIHRoZSAjaWZkZWZzIGhhdmUKCXZhbmlzaGVkLgoKMjAwMC0xMC0xNSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIE1ha2VmaWxlLmFtIChCVUlMVF9FWFRSQV9ESVNUKTogTmV3IHZhcmlhYmxlLgoJKGRpc3QtaG9vayk6IEhhbmRsZSAkKEJVSUxUX0VYVFJBX0RJU1QpLgoKMjAwMC0wOS0yOCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdtb2R1bGUuaDogTW92ZWQgZGVjbGFyYXRpb24gb2YgZ19sb2dfZG9tYWluX2dtb2R1bGUgdXAgYmVmb3JlCgl0aGUgaW5jbHVzaW9uIG9mIGdsaWIuaCB0byBtYWtlIGl0IGNvbXBpbGUgb24gbm9uLWdjYyBjb21waWxlcnMuCgoyMDAwLTA3LTIyICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIG1ha2VmaWxlLm1pbmd3LmluOiBSZW1vdmUgbGVmdG92ZXIgZ21vZHVsZS13aW4zMnJlcy5vIHN0dWZmLiBUaGUKCWJ1aWxkLWRsbCBzY3JpcHQgYXV0b21hZ2ljYWxseSBoYW5kbGVzIHJlc291cmNlcy4KCjIwMDAtMDctMjAgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBsaWJncGx1Z2luX2EuYywgdGVzdGdtb2R1bGUuYzogVXNlIGdfcGF0aF9nZXRfYmFzZW5hbWUgaW5zdGVhZAoJb2YgdGhlIGRlcHJlY2F0ZWQgZ19iYXNlbmFtZS4KCjIwMDAtMDctMTkgIFNlYmFzdGlhbiBXaWxoZWxtaSAgPHdpbGhlbG1pQGlyYS51a2EuZGU+CgoJKiBnbW9kdWxlLmg6IGluY2x1ZGUgZ2xpYi5oIGJlZm9yZSBkb2luZyBleHRlcm4gIkMiLiBNYWtlcyBzb21lIEMrKwoJY29tcGlsZXIgaGFwcHkuIFJlcG9ydGVkIGJ5IERlbmlzIFZha2F0b3YKCTx2YWthdG92QHBlb255Lm5sbS5uaWguZ292Pi4KCjIwMDAtMDctMTkgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS13aW4zMi5jOiBEb24ndCAjaW5jbHVkZSA8dGxoZWxwMzIuaD4gd2hlbiBjb21waWxpbmcgd2l0aAoJZ2NjLCBhcyBpdCBpc24ndCBwcm92aWRlZC4gRGVjbGFyYXRpb24gb2YgYSBuZWVkZWQgc3RydWN0IChmcm9tCgl3d3cubWljcm9zb2Z0LmNvbSkgaW5zZXJ0ZWQgaW5zdGVhZC4KCjIwMDAtMDUtMTMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogbWFrZWZpbGUubWluZ3cuaW46IE5ldyBmaWxlLCB3aXRoIGdtb2R1bGUgc3R1ZmYKCW1vdmVkIGZyb20gLi4vbWFrZWZpbGUubWluZ3cuaW4uCgoJKiBNYWtlZmlsZS5hbTogQWRkIHRvIEVYVFJBX0RJU1QsIGFuZCBhZGQgcnVsZSB0byBtYWtlIG1ha2VmaWxlLm1pbmd3LgoKMjAwMC0wNS0wMiAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLXdpbjMyLmM6IE5vIG5lZWQgdG8gaW5jbHVkZSA8cHNhcGkuaD4KCjIwMDAtMDMtMjMgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS13aW4zMi5jIChfZ19tb2R1bGVfc3ltYm9sKTogV2hlbiBsb29raW5nIGZvciBzeW1ib2xzIGluCgl0aGUgIm1haW4iIG1vZHVsZSB3ZSBtdXN0IHNlYXJjaCBib3RoIHRoZSBtYWluIHByb2dyYW0gYW5kIGFsbAoJY3VycmVudGx5IGxvYWRlZCBETExzLiBOb3Qgb25seSB0aGUgbWFpbiBwcm9ncmFtLCBvciBldmVuIGp1c3QgdGhlCglETExzIGxvYWRlZCBhcyBnbW9kdWxlcy4gIExpYmdsYWRlIHJlcXVpcmVzIHRoaXMuCgoJVGh1cyB3ZSBuZWVkIHRvIGdldCBhIGxpc3Qgb2YgYWxsIG1vZHVsZXMgaW4gdGhlIGN1cnJlbnQKCXByb2Nlc3MuIFRoZXJlIGFyZSB0d28gYWx0ZXJuYXRpdmUgQVBJcyB0byBkbyB0aGlzOiBQU0FQSSBhbmQKCVRvb2xoZWxwLiBUaGUgZm9ybWVyIGlzIG9ubHkgYXZhaWxhYmxlIG9uIE5UIChpbmNsdWRpbmcgV2luMmspLAoJdGhlIGxhdHRlciBvbiBXaW45eCBhbmQgV2luMmsuIENoZWNrIHdoaWNoIG9uZSB3b3JrcywgYW5kIHVzZQoJdGhhdC4KCglGaXJzdCBjaGVjayBmb3IgdGhlIHN5bWJvbCBpbiB0aGUgbWFpbiBwcm9ncmFtLCBhbmQgaWYgbm90IGZvdW5kCgl0aGVyZSwgaW4gYWxsIHRoZSBtb2R1bGVzLgoKCUNvZGUgZm9yIHVzaW5nIFBTQVBJIGFuZCBUb29saGVscCB3YXMgYm9ycm93ZWQgZnJvbSB0aGUgRHIuIE1pbmd3Cgl0b29sIHdyaXR0ZW4gYnkgSm9z6SBGb25zZWNhIDxlbTk2MTE1QGZlLnVwLnB0Pi4gVGhhbmtzLgoKMjAwMC0wMy0wNCAgVG9yIExpbGxxdmlzdCAgPHRtbEBpa2kuZmk+CgoJKiBnbW9kdWxlLXdpbjMyLmM6IENhbGwgZ193aW4zMl9lcnJvcl9tZXNzYWdlKCkgdG8gZ2V0IHRoZSBlcnJvcgoJbWVzc2FnZSBzdHJpbmdzLgoKCSogbGliZ3BsdWdpbl9hLmMKCSogbGliZ3BsdWdpbl9iLmMKCSogZ21vZHVsZS5jOiBSZW1vdmUgTGliTWFpbiBmdW5jdGlvbnMgdGhhdCB3ZXJlIG5lZWRlZCBieSBMQ0MsCgl3aGljaCBpcyBub3QgYSBzdXBwb3J0ZWQgY29tcGlsZXIuCgoJKiB0ZXN0Z21vZHVsZS5jIChtYWluKTogVGVzdCBmb3IgR19NT0RVTEVfSU1QTCA9PQoJR19NT0RVTEVfSU1QTF9XSU4zMiwgbm90IEdfT1NfV0lOMzIuCgoJKiBnbW9kdWxlY29uZi5oLndpbjMyOiBSZW1vdmUgTENDIHN0dWZmIGZyb20gaGVyZSwgdG9vLiAKCldlZCBNYXIgIDEgMDU6MzQ6NDcgMjAwMCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS1iZW9zLmMgKF9nX21vZHVsZV9zeW1ib2wpOiBkbyBub3QgcmV0dXJuIE5VTEwgc3ltYm9scy4KCgkqIGdtb2R1bGUtb3MyLmM6IHJlbW92ZWQgTmV0QlNEIHNwZWNpZmljIGRlZmluZXMuCgkoX2dfbW9kdWxlX3NlbGYpOiBzZXQgYW4gZXJyb3IgbWVzc2FnZSBmb3IgdW5zdXBwb3J0ZWQgYmVoYXZpb3VyLgoKCSogZ21vZHVsZS1iZW9zLmM6IG1hbnkgY29kaW5nIHN0eWxlIGZpeHVwcy4KCShfZ19tb2R1bGVfb3Blbik6CgkoX2dfbW9kdWxlX3NlbGYpOgoJKF9nX21vZHVsZV9jbG9zZSk6CgkoX2dfbW9kdWxlX3N5bWJvbCk6IGJ1bmNoIG9mIG1lbW9yeSBsZWFrcyBwbHVnZ2VkLgoKCSogZ21vZHVsZS1kbC5jOiBtYWtlIHN1cmUgdGhlIGVycm9yIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBkbGVycm9yKCkKCWlzIGFsd2F5cyAhPSBOVUxMLCBieSB1c2luZyBhIHdyYXBwZXIgZnVuY3Rpb24gZmV0Y2hfZGxlcnJvcigpLiBiYXNlZAoJb24gYSBwYXRjaCB0byBmaXggX2dfbW9kdWxlX3N5bWJvbCgpIGZvciBOZXRCU0QgZnJvbSBTY290dCBQcmVzbmVsbAoJPHNycEB6Z2kuY29tPi4KCgkqIGdtb2R1bGUtZGxkLmM6IG1pbm9yIGluZGVudGF0aW9uLgoKCSogZ21vZHVsZS13aW4zMi5jOiBtaW5vciBjbGVhbnVwcy4KCgkqIG1lcmdlcyBmcm9tIGdsaWItMS0yLgoKU2F0IEZlYiAxOSAxOTo0MzoyOSAyMDAwICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiB0ZXN0Z21vZHVsZS5jIChtYWluKTogYWRkZWQgdGVzdCB0byBjaGVjayB0aGF0IG5vdCB5ZXQgYm91bmQgc3ltYm9scwoJaW4gc2hhcmVkIGxpYnJhcmllcyBvZiB0aGUgbWFpbiBtb2R1bGUgYXJlIHJldHJpZXZhYmxlLCBmcm9tIERhdmlkIEdlcm8uCgoyMDAwLTAxLTEzICBNYXJ0aW4gQmF1bGlnICA8bWFydGluQGhvbWUtb2YtbGludXgub3JnPgoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9vcGVuKTogQ2hlY2sgd2hldGhlciBgY2hlY2tfaW5pdCcgaXMgbm90IE5VTEwKCWJlZm9yZSB3ZSBhdHRlbXB0IHRvIGNhbGwgaXQuCgpTdW4gT2N0ICAzIDE5OjMwOjUyIFBEVCAxOTk5IE1hbmlzaCBTaW5naCA8eW9zaEBnaW1wLm9yZz4KCgkqIGdtb2R1bGUuaAoJKiB0ZXN0Z21vZHVsZS5jOiB1c2UgR19PUyBzdHVmZgoKU2F0IEp1bCAyNCAyMDo0NzoxOCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBtZXJnZWQgY2hhbmdlcyBmcm9tIEdMaWItMS0yIGJyYW5jaC4KCjE5OTktMDUtMDYgIFRvciBMaWxscXZpc3QgIDx0bWxAaWtpLmZpPgoKCSogZ21vZHVsZS5jOiBSZW1vdmUgTGliTWFpbi4KClNhdCBNYXkgIDEgMTA6NTg6NTcgUERUIDE5OTkgTWFuaXNoIFNpbmdoIDx5b3NoQGdpbXAub3JnPgoKCSogTWFrZWZpbGUuYW06IHVzZSAtYXZvaWQtdmVyc2lvbiBhbmQgLW1vZHVsZSBmb3IgdGVzdCBwbHVnaW5zCgpNb24gQXByIDE5IDA4OjQzOjU5IDE5OTkgIGFwZUBscmRwZi5zcGFjZXRlYy5ubyAgKEFzYmpvcm4gUGV0dGVyc2VuKQoKCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgZ21vZHVsZS1vczIuYwoKV2VkIEFwciAgNyAyMDoxMjo1OCAxOTk5ICBhcGVAbHJkcGYuc3BhY2V0ZWMubm8gIChBc2Jqb3JuIFBldHRlcnNlbikKCgkqIGdtb2R1bGUtb3MyLmM6IE9TLzIgc3BlY2lmaWMgZmlsZSBmb3IgZ21vZHVsZS4KCSogZ21vZHVsZS5jIChfZ19tb2R1bGVfb3Blbik6IEFkZCBnbW9kdWxlLW9zMi5jIGlmIEdfTU9EVUxFX0lNUExfT1MyLgoJKiBnbW9kdWxlY29uZi5oLmluOiBBZGQgR19NT0RVTEVfSU1QTF9PUzIuCgpGcmkgQXByIDIzIDA5OjAzOjQ4IDE5OTkgIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfc3ltYm9sKTogcmVtb3ZlZCBpbmxpbmUgdmFyaWFibGUgYXNzaWdubWVudC4KCXMvQ0hFQ0tfRVJST1IvU1VQUE9SVF9PUl9SRVRVUk4vIHRvIG1ha2UgdGhlIGNvZGUgbW9yZSBzZWxmIGRlc2NyaXB0aXZlLgoKV2VkIEZlYiAxMCAxMjowNjozMCAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmMgKENIRUNLX0VSUk9SKTogYmUgbW9yZSBkZXNjcmlwdGl2ZSBvbiB1bnN1cHBvcnRlZCBzeXN0ZW1zLgoKV2VkIEZlYiAxMCAwNzo1NjozMyAxOTk5ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBnbW9kdWxlLmMgKGdfbW9kdWxlX2Vycm9yKTogZml4ZWQgZXJyZXJuZXJvdXMgY29kZSB3cnQgdG8gdGhyZWFkCglzcGVjaWZpYyBlcnJvciBzdHJpbmcgYWxsb2NhdGlvbiBoYW5kbGluZy4KClRodSBKYW4gMjEgMTI6NDA6MTEgRVNUIDE5OTkgIEplZmYgR2FyemlrICA8amdhcnppa0Bwb2JveC5jb20+CgoJKiBnbW9kdWxlLWRsLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKToKCUFkZCBicmFjZXMgdG8gZWxpbWluYXRlIGFuIGFtYmlndW91cyBlbHNlIHdhcm5pbmcuCgoxOTk5LTAxLTE2ICBUb3IgTGlsbHF2aXN0ICA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUtZGwuYyBnbW9kdWxlLWRsZC5jOiBJbgogCV9nX21vZHVsZV9idWlsZF9wYXRoLCBkb24ndCBhZGQgdGhlICJsaWIiIHByZWZpeCBhbmQKIAkiLnNvIiBvciAiLnNsIiBzdWZmaXggaWYgYWxyZWFkeSB0aGVyZS4KCgkqIGdtb2R1bGUtd2luMzIuYzogTGlrZXdpc2UgZm9yIHRoZSAiLmRsbCIgc3VmZml4LgoKMTk5OC0xMi0xMCAgU2ViYXN0aWFuIFdpbGhlbG1pICA8d2lsaGVsbWlAaXJhLnVrYS5kZT4KCgkqIGdtb2R1bGUuYzogTWFkZSBpdCBNVCBzYWZlLCB0aGUgZ19tb2R1bGVfZXJyb3IoKSBpcyBub3cgdGhyZWFkCglzcGVjaWZpYy4KCkZyaSBOb3YgMjAgMTQ6NDM6NDQgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6IGFkZGVkIGVtcHR5IGRlZmF1bHQgaW1sZW1lbnRhdGlvbgoJc28gZ21vZHVsZS5zbyBjb21waWxlcyBvbiBzeXN0ZW1zIHRoYXQgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLCBmaXggZnJvbQoJRXJpayBCYWdmb3JzIDxiYWdmb3JzQGhwYzJuLnVtdS5zZT4uCgoxOTk4LTExLTEzICBOdW5vIEZlcnJlaXJhICA8bm1yZkBybmwuaXN0LnV0bC5wdD4KCgkqIE1ha2VmaWxlLmFtIChJTkNMVURFUyk6IFRoZSBwcmV2aW91cyBjb21taXQgbWVzc2FnZSBpcyB3cm9uZwoJYWJvdXQgdGhlIC1JJCh0b3Bfc3JjZGlyKSBiZWluZyByZWR1bmRhbnQuIEkgcHV0IGl0IGJhY2suCgpXZWQgTm92IDExIDIzOjIzOjIyIEVTVCAxOTk4IEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KCgkqIE1ha2VmaWxlLmFtIDogSU5DTFVERVMgaXMgdGhlIHJpZ2h0IHdheSB0byBhZGQgdG8gQ0ZMQUdTLCBub3QgCglERUZTLiAgQWxzbyB0aGVyZSBhcmUgYnVncyB3aXRoICcrPScgaW4gbWFrZWZpbGVzLgoJR290IHJpZCBvZiBERUZTIGxpbmUgYnkgbW92aW5nIEdfTE9HX0RPTUFJTiBzZXR0aW5nIGludG8gSU5DTFVERVMuCglSZW1vdmVkIHJlZHVuZGFudCAtSSBmcm9tIElOQ0xVREVTLgoKVHVlIE9jdCAyNyAwNDowMDoxMSAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiB0ZXN0Z21vZHVsZS5jIChtYWluKTogY2hhbmdlZCB0aGUgI2lmZGVmIFdJTjMyIHRlc3QgdG8gTkFUSVZFX1dJTjMyLAoJdGhpcyBuZWVkcyB0byBiZSBtb3JlIGNvbnN0aXN0ZW50IHRocm91Z2hvdXQgdGhlIGNvZGUsIGRvIHdlIGdvIGZvcgoJTkFUSVZFX1dJTjMyIG9yIFdJTjMyPwoKCSogZ21vZHVsZS5jIChMaWJNYWluKTogc3BlY2lhbCBjYXNlZCB0aGUgI2lmZGVmIF9fTENDX18gY2FzZSBmb3IKCU5BVElWRV9XSU4zMiwgc2luY2UgbGNjIG1heWJlIHVzZWQgb24gb3RoZXIgcGxhdGZvcm1zIGFzIHdlbGwuCgkqIGxpYmdwbHVnaW5fYS5jIChMaWJNYWluKTogCgkqIGxpYmdwbHVnaW5fYi5jIChMaWJNYWluKTogCglsaWtld2lzZS4gbm90IHN1cmUgaSBsaWtlIHRoaXMgc3BlY2lhbCByZXF1aXJlbWVudCBmb3IgbGNjIGluIGhlcmUuCgoJKiBnbW9kdWxlLWRsLmMgKF9nX21vZHVsZV9idWlsZF9wYXRoKTogCglmZWF0dXJlIGVtcHR5ICIiIGRpcmVjdG9yaWVzIGFuZCBwcmVwZW5kIHRoZSBtb2R1bGUgbmFtZSB3aXRoICJsaWIiLgoKCSogZ21vZHVsZS1kbGQuYyAoX2dfbW9kdWxlX2J1aWxkX3BhdGgpOiAKCSogZ21vZHVsZS13aW4zMi5jIChfZ19tb2R1bGVfYnVpbGRfcGF0aCk6IAoJZmVhdHVyZSBlbXB0eSAiIiBkaXJlY3Rvcmllcy4KCgkqIHdlIG5lZWQgc29tZSBtb3JlIG1hZ2ljIGluIHRoZSBfZ19tb2R1bGVfYnVpbGRfcGF0aCB2YXJpYW50cwoJc28gd2UgZG9uJ3QgYXBwZW5kL3ByZXBlbmQgbGliIGFuZCAuc28sIC5zbCBvciAuZGxsIGZvciB0aG9zZSBuYW1lcwoJdGhhdCBhbHJlYWR5IGNvbnRhaW4gaXQuCgoJKiBhcHBsaWVkIHBhdGNoIGZyb20gVG9yIExpbGxxdmlzdCBmb3IgZ19tb2R1bGVfYnVpbGRfcGF0aCgpIGFuZAoJd2luZG93cyBzdXBwb3J0LgoKMTk5OC0xMC0yMDogVG9yIExpbGxxdmlzdCA8dG1sQGlraS5maT4KCgkqIGdtb2R1bGUvZ21vZHVsZS13aW4zMi5jOgoJTmV3IGZpbGUuCgoJKiBnbW9kdWxlL2dtb2R1bGUuYyBnbW9kdWxlL2dtb2R1bGUuaDoKCUFkZGVkIHRoZSBmdW5jaW9uIGdfbW9kdWxlX2J1aWxkX3BhdGggdGhhdCBidWlsZHMgdGhlIHBhdGggdG8KCWEgbW9kdWxlIGZpbGUsIGRlY29yYXRpbmcgdGhlIG5hbWUgYWNjb3JkaW5nIHRvIHRoZSBzeXN0ZW0ncwoJY29udmVudGlvbnMuICBBZGRlZCB0aGUgV2luZG93cyBpbXBsZW1lbnRhdGlvbi4KCgkqIGdtb2R1bGUvbGliZ3BsdWdpbl9hLmMgZ21vZHVsZS9saWJncGx1Z2luX2IuYzoKCUFkZGVkIExpYk1haW4gZm9yIExDQy1XaW4zMi4KCgkqIGdtb2R1bGUvdGVzdGdtb2R1bGUuYzoKCUhhbmRsZSBXaW5kb3dzIGRsbCBuYW1lcy4KCjE5OTgtMTAtMjUgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBnbW9kdWxlLmg6IFJlbW92ZSBgI3ByYWdtYSB9Jy4KCSogZ21vZHVsZWNvbmYuaC5pbjogTGlrZXdpc2UuCgpXZWQgT2N0IDIxIDE5OjU4OjI3IDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYyAoZ19tb2R1bGVfc3ltYm9sKTogZml4ZWQgYSBzdHJpbmcgcG9pbnRlciBidWcgdGhhdCBjb3VsZAogCWNhdXNlIGdhcmJhZ2UgZXJyb3IgbWVzc2FnZXMgZnJvbSBnX21vZHVsZV9zeW1ib2woKSBmb3Igc3lzdGVtcyB0aGF0CglORUVEX1VTQ09SRS4KCk1vbiBTZXAgMjEgMDE6NTQ6NDggMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogZ21vZHVsZS5oOiAKCSogZ21vZHVsZS5jOiByZW5hbWVkIG9sZCBfZGVfaW5pdCBmdW5jdGlvbmFsaXR5IHRvIF91bmxvYWQuCgltb2R1bGVzIGFyZSBub3cgZXhwZWN0ZWQgdG8gZXhwb3J0OgoJR19NT0RVTEVfRVhQT1JUIGNvbnN0IGdjaGFyKiBnX21vZHVsZV9jaGVja19pbml0IChHTW9kdWxlICptb2R1bGUpOwoJYW5kCglHX01PRFVMRV9FWFBPUlQgdm9pZCBnX21vZHVsZV91bmxvYWQgKEdNb2R1bGUgKm1vZHVsZSk7CglyZXR1cm5pbmcgYSBzdHJpbmcgb3RoZXIgdGhhbiBOVUxMIGZyb20gZ19tb2R1bGVfY2hlY2tfaW5pdCgpIHdpbGwKIAlwcmV2ZW50IHRoZSBtb2R1bGUgZnJvbSBiZWluZyBsb2FkZWQuIGEgY2FsbCB0byBnX21vZHVsZV9tYWtlX3Jlc2lkZW50KCkKCWZyb20gZ19tb2R1bGVfdW5sb2FkKCkgd2lsbCBwcmV2ZW50IHRoZSBtb2R1bGUgZnJvbSBiZWluZyB1bmxvYWRlZCBhbmQKCXN0aWxsIG1ha2UgaXQgcmVzaWRlbnQuCgpUaHUgU2VwIDE3IDA2OjM0OjIyIDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuaDogCgkqIGdtb2R1bGUuYzogaW1wbGVtZW50ZWQgZ19tb2R1bGVfbWFrZV9yZXNpZGVudCgpIHdoaWNoIGNhbiBiZQoJdXNlZCB0byBtYWtlIG1vZHVsZXMgcmVzaWRlbnQuCglmaXhlZCBhIGJ1Z2xldCBhYm91dCB0aGUgb3B0aW9uYWwgImdfbW9kdWxlX2RlX2luaXQiIGZ1bmN0aW9uIGluCgltb2R1bGVzLCB3aGljaCBjb3VsZCBnZXQgaW52b2tlZCB0d2ljZSBvbiB2ZXJ5IG9ic2N1cmUgb2NjYXNpb25zLgoKVHVlIFNlcCAxNSAxNDo1NzozMCAxOTk4ICBPd2VuIFRheWxvciAgPG90YXlsb3JAcmVkaGF0LmNvbT4KCgkqIE1ha2VmaWxlLmFtOiBVcGRhdGUgdG8gbGlidG9vbC0xLjJiLAoJY2hhbmdlIGxpYnJhcnkgdmVyc2lvbmluZyBzY2hlbWUgdG8gZHJvcCBMVF9SRUxFQVNFCglmcm9tIHRoZSAtbCBsaW5lLCB3aGlsZSBrZWVwaW5nIGl0IGluIHRoZSBzb25hbWUuCgpUaHUgQXVnIDIwIDA3OjA4OjE2IDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYzogcHJvdmlkZSBubyBvcGVyYXRpb24gaW1wbGVtZW50YXRpb24gZm9yIHRoZSB1bmRlcmx5aW5nCglfZ19tb2R1bGVfKiBmdW5jdGlvbnMsIHNvIHdlIGF0IGxlYXN0IGNvbXBpbGUgb24gc3lzdGVtcyB0aGF0IGhhdmUKIAluZWl0aGVyIG9mIEdfTU9EVUxFX0lNUExfREwgb3IgR19NT0RVTEVfSU1QTF9ETEQuCgpNb24gQXVnIDE3IDAzOjQxOjUyIDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuaDoKCSogZ21vZHVsZS5jIChnX21vZHVsZV9vcGVuKTogY2hhbmdlZCB0aGUgcmV0dXJuIHR5cGUgZm9yIHRoZQoJR01vZHVsZUNoZWNrSW5pdCBmdW5jdGlvbiB0byBiZSBhIHN0cmluZywgZGVzY3JpYmluZyB0aGUgZXJyb3IKCWNvbmRpdGlvbi4KCShnX21vZHVsZV9zeW1ib2wpOiBzaG93IHRoZSBmYWlsaW5nIHN5bWJvbCBvbiBlcnJvciBtZXNzYWdlcy4KCkZyaSBBdWcgMTQgMDI6MjQ6MzkgMTk5OCAgVGltIEphbmlrICA8dGltakBndGsub3JnPgoKCSogTWFrZWZpbGUuYW06IGZlYXR1cmUgdGhlIEdfTE9HX0RPTUFJTiBtYWNybyB0byBzZXQgdGhlIGxvZyBkb21haW4KCXRvICJHTW9kdWxlIiB1cG9uIGNvbXBpbGF0aW9uLiB3ZSBjdXJyZW50bHkgaGF2ZSB0byBhZGQgdGhpcyBkZWZpbml0aW9uCgl0byB0aGUgREVGUyB2YXJpYWJsZS4KCSogdGVzdGdtb2R1bGUuYzogd2UgbmVlZCBhbiB1Z2x5ICN1bmRlZiBHX0xPR19ET01BSU4gYXQgdGhlIHN0YXJ0CglvZiB0aGlzIGZpbGUgY3VycmVudGx5LCBzaW5jZSBhdXRvbWFrZSBkb2Vzbid0IHN1cHBvcnQgcGVyIHRhcmdldAoJX0NGTEFHUyB5ZXQuCgpNb24gQXVnIDEwIDAzOjM1OjU3IDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIGdtb2R1bGUuYzogbWlub3IgY2hhbmdlcyB0byBpbnRlcm5hbCBpbnRlcmZhY2UuCgkqIGdtb2R1bGUtZGwuYzogCgkqIGdtb2R1bGUtZGxkLmM6IHB1dCBzb21lIGNvbW1lbnRzIGludG8gdGhlIGZpbGVzLCBhbmQgcHJvdmlkZWQKCWJldHRlciBlcnJvciBjaGVja2luZyBmb3Igc2hsX2ZpbmRzeW0oKS4gd2hpc2ggaSBoYWQgYSBzeXN0ZW0gdG8KIAl0ZXN0IHRoaXMgc3R1ZmYgb24uCgpNb24gQXVnIDEwIDAyOjE4OjMxIDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIE1ha2VmaWxlLmFtIChsaWJfTFRMSUJSQVJJRVMpOiBmb3Igbm93LCBza2lwIHRoZSBkZXBlbmRlbmN5IG9uCgktbGdsaWIgZm9yIGxpYmdtb2R1bGUtMS4xLmxhLCBsaWJncGx1Z2luX2EubGEgYW5kIGxpYmdwbHVnaW5fYi5sYQoJc2luY2UgdGhpcyBjbGFzaGVzIHdpdGggaW50ZXItbGlicmFyeS1kZXBlbmRlbmNpZXMgZm9yIG5vdCBpbnN0YWxsZWQKCWxpYnJhcmllcy4gZ2xpYi1jb25maWcgdGFrZXMgY2FyZSBvZiB0aGlzIGZvciB0aGUgdXN1YWxsIGNhc2UsIGJ1dAoJdGhlcmUgbmVlZHMgdG8gYmUgYSBiZXR0ZXIgd2F5Li4uCgpTdW4gQXVnICA5IDE1OjU3OjM4IDE5OTggIFRpbSBKYW5payAgPHRpbWpAZ3RrLm9yZz4KCgkqIHRlc3RnbW9kdWxlLmM6IHRlc3QgcHJvZ3JhbSBmb3IgR01vZHVsZS4KCSogbGliZ3BsdWdpbl9hLmM6IAoJKiBsaWJncGx1Z2luX2IuYzogdGVzdCBwbHVnaW5zIGZvciB0ZXN0Z21vZHVsZS5jLgoKCSogZ21vZHVsZS5oOiAKCSogZ21vZHVsZS5jOiBHTW9kdWxlIGxpYnJhcnkgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIGJhc2ljYWxseQoJYSB3cmFwcGVyIGFib3V0IHN5c3RlbSBzcGVjaWZjIGR5bmFtaWMgbG9hZGluZyBmYWNpbGl0aWVzLgoKU3VuIEF1ZyAgOSAxMDozMTowNSAxOTk4ICBUaW0gSmFuaWsgIDx0aW1qQGd0ay5vcmc+CgoJKiBDaGFuZ2VMb2cgc3RhcnQgZm9yIGdtb2R1bGUuCg==