LyoqDQogKiBUaGlzIGZpbGUgaGFzIG5vIGNvcHlyaWdodCBhc3NpZ25lZCBhbmQgaXMgcGxhY2VkIGluIHRoZSBQdWJsaWMgRG9tYWluLg0KICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHc2NCBtaW5ndy1ydW50aW1lIHBhY2thZ2UuDQogKiBObyB3YXJyYW50eSBpcyBnaXZlbjsgcmVmZXIgdG8gdGhlIGZpbGUgRElTQ0xBSU1FUiB3aXRoaW4gdGhpcyBwYWNrYWdlLg0KICovDQoJLmZpbGUJImxvZzJsLlMiDQoJLnRleHQNCgkuYWxpZ24gNA0Kb25lOgkuZG91YmxlIDEuMA0KCS8qIEl0IGlzIG5vdCBpbXBvcnRhbnQgdGhhdCB0aGlzIGNvbnN0YW50IGlzIHByZWNpc2UuICBJdCBpcyBvbmx5DQoJICAgYSB2YWx1ZSB3aGljaCBpcyBrbm93biB0byBiZSBvbiB0aGUgc2FmZSBzaWRlIGZvciB1c2luZyB0aGUNCgkgICBmeWwyeHAxIGluc3RydWN0aW9uLiAgKi8NCmxpbWl0OgkuZG91YmxlIDAuMjkNCg0KCS50ZXh0DQoJLmFsaWduIDQNCi5nbG9ibCBfbG9nMmwNCgkuZGVmCV9sb2cybDsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmDQpfbG9nMmw6DQoJZmxkbAlvbmUNCglmbGR0CSglcmR4KQkJLy8geCA6IDENCglmeGFtDQoJZm5zdHN3DQoJZmxkCSVzdAkJLy8geCA6IHggOiAxDQoJc2FoZg0KCWpjCTNmCQkvLyBpbiBjYXNlIHggaXMgTmFOIG9yILFJbmYNCjQ6CWZzdWIJJXN0KDIpLCAlc3QJLy8geC0xIDogeCA6IDENCglmbGQJJXN0CQkvLyB4LTEgOiB4LTEgOiB4IDogMQ0KCWZhYnMJCQkvLyB8eC0xfCA6IHgtMSA6IHggOiAxDQoJZmNvbXBsCWxpbWl0CQkvLyB4LTEgOiB4IDogMQ0KCWZuc3RzdwkJCS8vIHgtMSA6IHggOiAxDQoJYW5kYgkkMHg0NSwgJWFoDQoJanoJMmYNCglmc3RwCSVzdCgxKQkJLy8geC0xIDogMQ0KCWZ5bDJ4cDEJCQkvLyBsb2coeCkNCgltb3ZxCSVyY3gsJXJheA0KCWZzdHB0CSglcmN4KQ0KCXJldA0KDQoyOglmc3RwCSVzdCgwKQkJLy8geCA6IDENCglmeWwyeAkJCS8vIGxvZyh4KQ0KCW1vdnEJJXJjeCwlcmF4DQoJZnN0cHQJKCVyY3gpDQoJcmV0DQoNCjM6CWpwCTRiCQkvLyBpbiBjYXNlIHggaXMgsUluZg0KCWZzdHAJJXN0KDEpDQoJZnN0cAklc3QoMSkNCgltb3ZxCSVyY3gsJXJheA0KCWZzdHB0CSglcmN4KQ0KCXJldA0K