LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIENvcHlyaWdodCAoQykgMjAxNiBieSBTYXZvaXItZmFpcmUgTGludXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogQXV0aG9yOiBK5GdlciBOaWNvbGFzIDxuaWNvbGFzLmphZ2VyQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAgICoNCiogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgKg0KKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAqDQoqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgICAqDQoqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAgICoNCiogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgKg0KKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgKg0KKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICAqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNpbmNsdWRlICJwY2guaCINCg0KI2luY2x1ZGUgIldlbGNvbWVQYWdlLnhhbWwuaCINCg0KdXNpbmcgbmFtZXNwYWNlIFJpbmdDbGllbnRVV1A7DQp1c2luZyBuYW1lc3BhY2UgUmluZ0NsaWVudFVXUDo6Vmlld3M7DQoNCldlbGNvbWVQYWdlOjpXZWxjb21lUGFnZSgpDQp7DQogICAgSW5pdGlhbGl6ZUNvbXBvbmVudCgpOw0KICAgIFdpbmRvdzo6Q3VycmVudC0+U2l6ZUNoYW5nZWQgKz0gcmVmIG5ldyBXaW5kb3dTaXplQ2hhbmdlZEV2ZW50SGFuZGxlcih0aGlzLCAmV2VsY29tZVBhZ2U6Ok9uUmVzaXplKTsNCiAgICBPblJlc2l6ZShudWxscHRyLCBudWxscHRyKTsNCn07DQoNCnZvaWQNCldlbGNvbWVQYWdlOjpQb3NpdGlvbkltYWdlKCkNCnsNCiAgICBSZWN0IGltYWdlQm91bmRzOw0KICAgIGltYWdlQm91bmRzLldpZHRoID0gX3dlbGNvbWVQYWdlXy0+QWN0dWFsV2lkdGg7DQogICAgaW1hZ2VCb3VuZHMuSGVpZ2h0ID0gX3dlbGNvbWVQYWdlXy0+QWN0dWFsV2lkdGg7DQoNCiAgICBfd2VsY29tZUltYWdlXy0+U2V0VmFsdWUoQ2FudmFzOjpMZWZ0UHJvcGVydHksIGltYWdlQm91bmRzLldpZHRoICogMC41IC0gX3dlbGNvbWVJbWFnZV8tPldpZHRoICogMC41KTsNCiAgICBfd2VsY29tZUltYWdlXy0+U2V0VmFsdWUoQ2FudmFzOjpUb3BQcm9wZXJ0eSwgaW1hZ2VCb3VuZHMuSGVpZ2h0ICogMC41IC0gX3dlbGNvbWVJbWFnZV8tPkhlaWdodCAqIDAuNSk7DQp9DQoNCnZvaWQNCldlbGNvbWVQYWdlOjpPblJlc2l6ZShQbGF0Zm9ybTo6T2JqZWN0XiBzZW5kZXIsIFdpbmRvd3M6OlVJOjpDb3JlOjpXaW5kb3dTaXplQ2hhbmdlZEV2ZW50QXJnc14gZSkNCnsNCiAgICBQb3NpdGlvbkltYWdlKCk7DQp9