I3ByYWdtYSBvbmNlDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogQ29weXJpZ2h0IChDKSAyMDE2IGJ5IFNhdm9pci1mYWlyZSBMaW51eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBBdXRob3I6IErkZ2VyIE5pY29sYXMgPG5pY29sYXMuamFnZXJAc2F2b2lyZmFpcmVsaW51eC5jb20+ICAgICAgICAgICAgICAqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKg0KKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqDQoqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoNCiogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoNCiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKg0KKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqDQoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqDQoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdXNpbmcgbmFtZXNwYWNlIFBsYXRmb3JtOjpDb2xsZWN0aW9uczsNCg0KbmFtZXNwYWNlIFJpbmdDbGllbnRVV1ANCnsNCg0KbmFtZXNwYWNlIFZpZXdNb2RlbCB7DQpwdWJsaWMgcmVmIGNsYXNzIEFjY291bnRzVmlld01vZGVsIHNlYWxlZA0Kew0KaW50ZXJuYWw6DQogICAgLyogc2luZ2xldG9uICovDQogICAgc3RhdGljIHByb3BlcnR5IEFjY291bnRzVmlld01vZGVsXiBpbnN0YW5jZQ0KICAgIHsNCiAgICAgICAgQWNjb3VudHNWaWV3TW9kZWxeIGdldCgpDQogICAgICAgIHsNCiAgICAgICAgICAgIHN0YXRpYyBBY2NvdW50c1ZpZXdNb2RlbF4gaW5zdGFuY2VfID0gcmVmIG5ldyBBY2NvdW50c1ZpZXdNb2RlbCgpOw0KICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlXzsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qIGZ1bmN0aW9ucyAqLw0KDQogICAgLyogcHJvcGVydGllcyAqLw0KICAgIHByb3BlcnR5IFZlY3RvcjxBY2NvdW50Xj5eIGFjY291bnRzTGlzdA0KICAgIHsNCiAgICAgICAgVmVjdG9yPEFjY291bnRePl4gZ2V0KCkNCiAgICAgICAgew0KICAgICAgICAgICAgcmV0dXJuIGFjY291bnRzTGlzdF87DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvKiBldmVudHMgKi8NCg0KcHJpdmF0ZToNCiAgICBBY2NvdW50c1ZpZXdNb2RlbCgpOyAvLyBzaW5nbGV0b24NCiAgICBWZWN0b3I8QWNjb3VudF4+XiBhY2NvdW50c0xpc3RfOw0KfTsNCn0NCn0NCg==