LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIAogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKiAKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKI2lmbmRlZiBfVFRCQVNJQ19IWFgKI2RlZmluZSBfVFRCQVNJQ19IWFgKCiNpbmNsdWRlIDxiYXNpYy9zYnN0YXIuaHh4PgojaW5jbHVkZSA8YmFzaWMvbXliYXNpYy5oeHg+CgpjbGFzcyBFcnJvckVudHJ5OwoKI2RlZmluZSBTQlhJRF9UVEJBU0lDCTB4NTQ1NAkJLy8gVFRCYXNpYzogVFQKCiNkZWZpbmUgU0JYQ1JfVEVTVDIgICAweDU0NTM0NTU0TCAgIC8vIFRFU1QKCmNsYXNzIFRUQmFzaWMgOiBwdWJsaWMgTXlCYXNpYwp7CnB1YmxpYzoKCVNCWF9ERUNMX1BFUlNJU1RfTk9EQVRBKFNCWENSX1RFU1QyLFNCWElEX1RUQkFTSUMsMSk7CglUWVBFSU5GTygpOwoJVFRCYXNpYygpOwogICB+VFRCYXNpYygpOwoJc2FsX0Jvb2wgQ29tcGlsZSggU2JNb2R1bGUqICk7CglzdGF0aWMgTXlCYXNpYyogQ3JlYXRlTXlCYXNpYygpOwoKCS8vIG5pY2h0IG1pdCAjaWZkZWZzIGtsYW1tZXJuLCBkYSBkaWVzZSBIZWFkZXJkYXRlaSBm/HIgdGVzdHRvb2wgdW5kIGJhc2ljCgkvLyBnbGVpY2hlcm1h32VuIHZlcndlbmRldCB3aXJkLgoJREVDTF9MSU5LKCBDRXJyb3JJbXBsLCBFcnJvckVudHJ5KiApOwovLwlTYnhPYmplY3QgKnBUZXN0T2JqZWN0OwkJCS8vIGb8ciBkYXMgVGVzdHRvb2w7IGFuc29uc3RlbiBOVUxMCgoJdm9pZCBMb2FkSW5pRmlsZSgpOwoJU2JUZXh0VHlwZSBHZXRTeW1ib2xUeXBlKCBjb25zdCBTdHJpbmcgJlN5bWJvbCwgc2FsX0Jvb2wgYldhc1RUQ29udHJvbCApOwkvLyBCZXNpbW10IGRlbiBlcndlaXRlcnRlbiBTeW1ib2x0eXAgZvxyIGRhcyBTeW50YXhoaWdobGlnaHRpbmcKCXZpcnR1YWwgY29uc3QgU3RyaW5nIEdldFNwZWNoaWFsRXJyb3JUZXh0KCk7Cgl2aXJ0dWFsIHZvaWQgUmVwb3J0UnVudGltZUVycm9yKCBBcHBCYXNFZCAqcEVkaXRXaW4gKTsKCXZpcnR1YWwgdm9pZCBEZWJ1Z0ZpbmROb0Vycm9ycyggc2FsX0Jvb2wgYkRlYnVnRmluZE5vRXJyb3JzICk7Cn07CgpTVl9ERUNMX0lNUExfUkVGKFRUQmFzaWMpCgojZW5kaWYK