LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRyYWNlIFJlY29yZGVyIExpYnJhcnkgZm9yIFRyYWNlYWx5emVyIHYzLjAuMg0KICogUGVyY2VwaW8gQUIsIHd3dy5wZXJjZXBpby5jb20NCiAqDQogKiB0cmNQYWdlZEV2ZW50QnVmZmVyLmgNCiAqDQogKiBJbXBsZW1lbnRzIGEgcGFnZWQgYnVmZmVyIHRoYXQgY2FuIGJlIHVzZWQgYnkgVENQL0lQIG9yIGN1c3RvbSB0cmFuc2Zlcg0KICogbWV0aG9kcy4NCiAqDQogKiBUZXJtcyBvZiBVc2UNCiAqIFRoaXMgc29mdHdhcmUgKHRoZSAiVHJhY2VhbHl6ZXIgUmVjb3JkZXIgTGlicmFyeSIpIGlzIHRoZSBpbnRlbGxlY3R1YWwNCiAqIHByb3BlcnR5IG9mIFBlcmNlcGlvIEFCIGFuZCBtYXkgbm90IGJlIHNvbGQgb3IgaW4gb3RoZXIgd2F5cyBjb21tZXJjaWFsbHkNCiAqIHJlZGlzdHJpYnV0ZWQgd2l0aG91dCBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24gYnkgUGVyY2VwaW8gQUIuDQogKg0KICogU2VwYXJhdGUgY29uZGl0aW9ucyBhcHBsaWVzIGZvciB0aGUgU0VHR0VSIGJyYW5kZWQgc291cmNlIGNvZGUgaW5jbHVkZWQuDQogKg0KICogVGhlIHJlY29yZGVyIGxpYnJhcnkgaXMgZnJlZSBmb3IgdXNlIHRvZ2V0aGVyIHdpdGggUGVyY2VwaW8gcHJvZHVjdHMuDQogKiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHJlY29yZGVyIGxpYnJhcnkgaW4gaXRzIG9yaWdpbmFsIGZvcm0sIGJ1dCBwdWJsaWMNCiAqIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyByZXF1aXJlIGFwcHJvdmFsIGJ5IFBlcmNlcGlvIEFCLg0KICoNCiAqIERpc2NsYWltZXINCiAqIFRoZSB0cmFjZSB0b29sIGFuZCByZWNvcmRlciBsaWJyYXJ5IGlzIGJlaW5nIGRlbGl2ZXJlZCB0byB5b3UgQVMgSVMgYW5kDQogKiBQZXJjZXBpbyBBQiBtYWtlcyBubyB3YXJyYW50eSBhcyB0byBpdHMgdXNlIG9yIHBlcmZvcm1hbmNlLiBQZXJjZXBpbyBBQiBkb2VzDQogKiBub3QgYW5kIGNhbm5vdCB3YXJyYW50IHRoZSBwZXJmb3JtYW5jZSBvciByZXN1bHRzIHlvdSBtYXkgb2J0YWluIGJ5IHVzaW5nIHRoZQ0KICogc29mdHdhcmUgb3IgZG9jdW1lbnRhdGlvbi4gUGVyY2VwaW8gQUIgbWFrZSBubyB3YXJyYW50aWVzLCBleHByZXNzIG9yDQogKiBpbXBsaWVkLCBhcyB0byBub25pbmZyaW5nZW1lbnQgb2YgdGhpcmQgcGFydHkgcmlnaHRzLCBtZXJjaGFudGFiaWxpdHksIG9yDQogKiBmaXRuZXNzIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLiBJbiBubyBldmVudCB3aWxsIFBlcmNlcGlvIEFCLCBpdHMNCiAqIHRlY2hub2xvZ3kgcGFydG5lcnMsIG9yIGRpc3RyaWJ1dG9ycyBiZSBsaWFibGUgdG8geW91IGZvciBhbnkgY29uc2VxdWVudGlhbCwNCiAqIGluY2lkZW50YWwgb3Igc3BlY2lhbCBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGxvc3QgcHJvZml0cyBvciBsb3N0IHNhdmluZ3MsDQogKiBldmVuIGlmIGEgcmVwcmVzZW50YXRpdmUgb2YgUGVyY2VwaW8gQUIgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkNCiAqIG9mIHN1Y2ggZGFtYWdlcywgb3IgZm9yIGFueSBjbGFpbSBieSBhbnkgdGhpcmQgcGFydHkuIFNvbWUganVyaXNkaWN0aW9ucyBkbw0KICogbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsIG9yIHNwZWNpYWwNCiAqIGRhbWFnZXMsIG9yIHRoZSBleGNsdXNpb24gb2YgaW1wbGllZCB3YXJyYW50aWVzIG9yIGxpbWl0YXRpb25zIG9uIGhvdyBsb25nIGFuDQogKiBpbXBsaWVkIHdhcnJhbnR5IG1heSBsYXN0LCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbnMgbWF5IG5vdCBhcHBseSB0byB5b3UuDQogKg0KICogVGFicyBhcmUgdXNlZCBmb3IgaW5kZW50IGluIHRoaXMgZmlsZSAoMSB0YWIgPSA0IHNwYWNlcykNCiAqDQogKiBDb3B5cmlnaHQgUGVyY2VwaW8gQUIsIDIwMTUuDQogKiB3d3cucGVyY2VwaW8uY29tDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQojaWZuZGVmIFRSQ19QQUdFRF9FVkVOVF9CVUZGRVJfSA0KI2RlZmluZSBUUkNfUEFHRURfRVZFTlRfQlVGRkVSX0gNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gk0OUIHsNCiNlbmRpZg0KDQp2b2lkIHZQYWdlZEV2ZW50QnVmZmVySW5pdChjaGFyKiBidWZmZXIpOw0KDQp2b2lkKiB2UGFnZWRFdmVudEJ1ZmZlckdldFdyaXRlUG9pbnRlcihpbnQgc2l6ZU9mRXZlbnQpOw0KDQppbnQzMl90IHZQYWdlZEV2ZW50QnVmZmVyVHJhbnNmZXIoaW50MzJfdCAoKndyaXRlRnVuYykodm9pZCogZGF0YSwgdWludDMyX3Qgc2l6ZSwgaW50MzJfdCogcHRyQnl0ZXNXcml0dGVuKSwgaW50MzJfdCogbm9mQnl0ZXMpOw0KDQp2b2lkIHZQYWdlZEV2ZW50QnVmZmVyUmVzZXQodm9pZCk7DQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCiNlbmRpZiAvKlRSQ19QQUdFRF9FVkVOVF9CVUZGRVJfSCov