LyoNCiAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uDQogKiBBZGFwdGVkIGZvciB1c2UgYXMgbG9nMiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPi4NCiAqIFB1YmxpYyBkb21haW4uDQogKg0KICogQ2hhbmdlZCB0byB1c2UgZnlsMnhwMSBmb3IgdmFsdWVzIG5lYXIgMSwgPGRyZXBwZXJAY3lnbnVzLmNvbT4uDQogKi8NCg0KCS5maWxlCSJsb2cybC5TIg0KCS50ZXh0DQoJLmFsaWduIDQNCm9uZToJLmRvdWJsZSAxLjANCgkvKiBJdCBpcyBub3QgaW1wb3J0YW50IHRoYXQgdGhpcyBjb25zdGFudCBpcyBwcmVjaXNlLiAgSXQgaXMgb25seQ0KCSAgIGEgdmFsdWUgd2hpY2ggaXMga25vd24gdG8gYmUgb24gdGhlIHNhZmUgc2lkZSBmb3IgdXNpbmcgdGhlDQoJICAgZnlsMnhwMSBpbnN0cnVjdGlvbi4gICovDQpsaW1pdDoJLmRvdWJsZSAwLjI5DQoNCgkudGV4dA0KCS5hbGlnbiA0DQouZ2xvYmwgX2xvZzJsDQoJLmRlZglfbG9nMmw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZg0KX2xvZzJsOg0KCWZsZGwJb25lDQoJZmxkdAk0KCVlc3ApCQkvLyB4IDogMQ0KCWZ4YW0NCglmbnN0c3cNCglmbGQJJXN0CQkvLyB4IDogeCA6IDENCglzYWhmDQoJamMJM2YJCS8vIGluIGNhc2UgeCBpcyBOYU4gb3IgsUluZg0KNDoJZnN1Ygklc3QoMiksICVzdAkvLyB4LTEgOiB4IDogMQ0KCWZsZAklc3QJCS8vIHgtMSA6IHgtMSA6IHggOiAxDQoJZmFicwkJCS8vIHx4LTF8IDogeC0xIDogeCA6IDENCglmY29tcGwJbGltaXQJCS8vIHgtMSA6IHggOiAxDQoJZm5zdHN3CQkJLy8geC0xIDogeCA6IDENCglhbmRiCSQweDQ1LCAlYWgNCglqegkyZg0KCWZzdHAJJXN0KDEpCQkvLyB4LTEgOiAxDQoJZnlsMnhwMQkJCS8vIGxvZyh4KQ0KCXJldA0KDQoyOglmc3RwCSVzdCgwKQkJLy8geCA6IDENCglmeWwyeAkJCS8vIGxvZyh4KQ0KCXJldA0KDQozOglqcAk0YgkJLy8gaW4gY2FzZSB4IGlzILFJbmYNCglmc3RwCSVzdCgxKQ0KCWZzdHAJJXN0KDEpDQoJcmV0DQo=