VGhpcyBmaWxlIGlzIG1lYW50IHRvIHRlc3QgdGhlIHdpa2kgY29udmVydGVycyBmb3IgWFdpa2kgc3ludGF4LiANCg0KRWFjaCBzZXQgb2Ygc3ludGF4IGlzIHNob3duIGFuZCBpdCdzIHByb3BlciBjb252ZXJzaW9uIHRvIENvbmZsdWVuY2Ugc3ludGF4IGlzIHNob3duIGFmdGVyd2FyZHMgc3Vycm91bmRlZCBieSB7Y29kZX0gdGFncy4NCg0KDQpIZWFkaW5ncw0KDQpUeXBlOglUbyBnZXQ6DQoxIEhlYWRpbmcgMQkNCg0Ke2NvZGV9DQp3aGVuIGNvbnZlcnRlZCB0byBDb25mbHVlbmNlIHNob3VsZCBiZSB0aGlzOg0KaDEuIEhlYWRpbmcgMQ0Ke2NvZGV9DQoNCjEuMSBIZWFkaW5nIDIJDQp7Y29kZX0NCndoZW4gY29udmVydGVkIHRvIENvbmZsdWVuY2Ugc2hvdWxkIGJlIHRoaXM6DQpoMi4gSGVhZGluZyAyDQp7Y29kZX0NCg0KMS4xLjEgSGVhZGluZyAzCQ0Ke2NvZGV9DQp3aGVuIGNvbnZlcnRlZCB0byBDb25mbHVlbmNlIHNob3VsZCBiZSB0aGlzOg0KaDMuIEhlYWRpbmcgMw0Ke2NvZGV9DQoNCjEuMS4xLjEgSGVhZGluZyA0CQ0Ke2NvZGV9DQp3aGVuIGNvbnZlcnRlZCB0byBDb25mbHVlbmNlIHNob3VsZCBiZSB0aGlzOg0KaDQuIEhlYWRpbmcgNA0Ke2NvZGV9DQoNCjEuMS4xLjEuMS4xIEhlYWRpbmcgNQkNCntjb2RlfQ0Kd2hlbiBjb252ZXJ0ZWQgdG8gQ29uZmx1ZW5jZSBzaG91bGQgYmUgdGhpczoNCmg1LiBIZWFkaW5nIDUNCntjb2RlfQ0KDQoxLjEuMS4xLjEuMS4xIEhlYWRpbmcgNgkNCntjb2RlfQ0Kd2hlbiBjb252ZXJ0ZWQgdG8gQ29uZmx1ZW5jZSBzaG91bGQgYmUgdGhpczoNCmg2LiBIZWFkaW5nIDYNCntjb2RlfQ0KDQpQYXJhZ3JhcGhzDQoNCkhlcmUgaXMgdGhlIGZpcnN0IHBhcmFncmFwaC4NClRoaXMgdGV4dCBjb250aW51ZXMgdGhlIHNhbWUgcGFyYWdyYXBoLg0Ke2NvZGV9DQp3aGVuIGNvbnZlcnRlZCB0byBDb25mbHVlbmNlIHNob3VsZCBiZSB0aGlzOg0KaDYuIEhlYWRpbmcgNg0Ke2NvZGV9DQoNCg0KVGhpcyBwYXJhZ3JhcGggaXMgYSBuZXcgb25lLg0KDQpCb2xkLCBJdGFsaWNzLCBTdHJpa2VkDQoNCmEgKmJvbGQqIHdvcmQNCntjb2RlfQ0Kd2hlbiBjb252ZXJ0ZWQgdG8gQ29uZmx1ZW5jZSBzaG91bGQgYmUgdGhpczoNCmEgKmJvbGQqIHdvcmQNCntjb2RlfQ0KDQphbiBfX3VuZGVybGluZWRfXyB3b3JkDQp7Y29kZX0NCndoZW4gY29udmVydGVkIHRvIENvbmZsdWVuY2Ugc2hvdWxkIGJlIHRoaXM6DQphbiArdW5kZXJsaW5lZCsgd29yZA0Ke2NvZGV9DQoNCn5+dGV4dCBpbiBpdGFsaWNzfn4NCntjb2RlfQ0Kd2hlbiBjb252ZXJ0ZWQgdG8gQ29uZmx1ZW5jZSBzaG91bGQgYmUgdGhpczoNCl90ZXh0IGluIGl0YWxpY3NfDQp7Y29kZX0NCg0KLS1zdHJpa2VkIHRleHQtLQ0Ke2NvZGV9DQp3aGVuIGNvbnZlcnRlZCB0byBDb25mbHVlbmNlIHNob3VsZCBiZSB0aGlzOg0KLXN0cmlrZWQgdGV4dC0NCntjb2RlfQ0KDQpMaXN0cw0KDQoqIExldmVsIDENCioqIExldmVsIDINCioqKiBMZXZlbCAzDQoqKiBMZXZlbCAyDQp7Y29kZX0NCndoZW4gY29udmVydGVkIHRvIENvbmZsdWVuY2Ugc2hvdWxkIGJlIHRoaXM6DQpubyBjaGFuZ2UNCntjb2RlfQkNCg0KMS4gSXRlbQ0KMTEuU3ViaXRlbQ0KMS4gSXRlbQ0KMSouIFN1Yml0ZW0gCQ0Ke2NvZGV9DQp3aGVuIGNvbnZlcnRlZCB0byBDb25mbHVlbmNlIHNob3VsZCBiZSB0aGlzOg0KIyBJdGVtDQojIyBTdWJpdGVtDQojIEl0ZW0NCiMqIFN1Yml0ZW0gCQ0Ke2NvZGV9DQoNClRhYmxlcw0KDQpUeXBlOglUbyBnZXQ6DQp7dGFibGV9DQpDYXRlZ29yeSB8IFNhbGVzIChLgCkNCkNhdGVnb3J5IDEgfCAxMDANCkNhdGVnb3J5IDIgfCA1MA0KQ2F0ZWdvcnkgMyB8IDUwDQpUb3RhbCB8ID1zdW0oQjI6QjQpDQp7dGFibGV9DQoNCntjb2RlfQ0Kd2hlbiBjb252ZXJ0ZWQgdG8gQ29uZmx1ZW5jZSBzaG91bGQgYmUgdGhpczoNCnx8Q2F0ZWdvcnkgfHwgU2FsZXMgKEuAKXx8DQp8Q2F0ZWdvcnkgMSB8IDEwMHwNCnxDYXRlZ29yeSAyIHwgNTB8DQp8Q2F0ZWdvcnkgMyB8IDUwfA0KfFRvdGFsIHwgPXN1bShCMjpCNCl8DQp7Y29kZX0NCg0KTGlua3MNCg0KW1dlYkhvbWVdDQpbaG9tZT5XZWJIb21lXQ0KW01haW4uV2ViSG9tZV0NCltob21lfE1haW4uV2ViSG9tZV0NCmh0dHA6Ly93d3cueHdpa2kub3JnDQpbaHR0cDovL3d3dy54d2lraS5vcmddDQpbWFdpa2k+aHR0cDovL3d3dy54d2lraS5vcmddDQoNCntjb2RlfQ0Kd2hlbiBjb252ZXJ0ZWQgdG8gQ29uZmx1ZW5jZSBzaG91bGQgYmUgdGhpczoNCltXZWJIb21lXQ0KW2hvbWV8V2ViSG9tZV0NCltNYWluOldlYkhvbWVdDQpbaG9tZXxNYWluOldlYkhvbWVdDQpodHRwOi8vd3d3Lnh3aWtpLm9yZw0KW2h0dHA6Ly93d3cueHdpa2kub3JnXQ0KW1hXaWtpfGh0dHA6Ly93d3cueHdpa2kub3JnXQ0Ke2NvZGV9DQoNCkltYWdlcw0KDQp7aW1hZ2U6aW1nLnBuZ30NCntpbWFnZTppbWcucG5nfDMwfQ0Ke2ltYWdlOmltZy5wbmd8IHwyMH0NCntpbWFnZTppbWcucG5nfDMwfDIwfQ0KDQp7Y29kZX0NCndoZW4gY29udmVydGVkIHRvIENvbmZsdWVuY2Ugc2hvdWxkIGJlIHRoaXM6DQohaW1nLnBuZyENCiFpbWcucG5nfHdpZHRoPTMwIQ0KIWltZy5wbmd8ICxsZW5ndGg9MjAhDQohaW1nLnBuZ3x3aWR0aD0zMCxsZW5ndGg9MjAhDQp7Y29kZX0NCg0KQXR0YWNobWVudHM6DQoNCnthdHRhY2g6QSBzaW1wbGUgdGV4dCBmaWxlfGZpbGU9c2ltcGxlLnR4dHx0aXRsZT1Eb3dubG9hZCBTaW1wbGUgVHh0fQ0Ke2F0dGFjaDp0ZXN0LnR4dH0NCg0Ke2NvZGV9DQp3aGVuIGNvbnZlcnRlZCB0byBDb25mbHVlbmNlIHNob3VsZCBiZSB0aGlzOg0KW0Egc2ltcGxlIHRleHQgZmlsZXxec2ltcGxlLnR4dHx0aXRsZT1Eb3dubG9hZCBTaW1wbGUgVHh0XQ0KW150ZXN0LnR4dF0NCntjb2RlfQ0KDQpPdGhlciBtYWNyb3MgKHRoaXMgaXMgYWN0dWFsbHkgdGhlIHNhbWUgYXMgQ29uZmx1ZW5jZSk6DQoNCntjb2RlfQ0Kc29tZSBjb2RlIGhlcmUNCntjb2RlfQ0KDQojdG9jKCIiICIiICIiKQ0Ke2NvZGV9DQp7dG9jfQ0Ke2NvZGV9DQo=