LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIAogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKiAKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKCgojaW5jbHVkZSA8c3Z4L2RpYWxvZ3MuaHJjPgojaW5jbHVkZSAic2MuaHJjIgoKVGFiRGlhbG9nIFJJRF9TQ0RMR19DSEFSCnsKCU91dHB1dFNpemUgPSBUUlVFIDsKCVNWTG9vayA9IFRSVUUgOwoJU2l6ZSA9IE1BUF9BUFBGT05UICggMjg5ICwgMTc2ICkgOwoJVGV4dCBbIGVuLVVTIF0gPSAiQ2hhcmFjdGVyIiA7CglNb3ZlYWJsZSA9IFRSVUUgOwoJQ2xvc2VhYmxlID0gVFJVRSA7CglUYWJDb250cm9sIDEKCXsKCQlPdXRwdXRTaXplID0gVFJVRSA7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAzICwgMyApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAyNjAgLCAxMzUgKSA7CgkJUGFnZUxpc3QgPQoJCXsKCQkJUGFnZUl0ZW0KCQkJewoJCQkJSWRlbnRpZmllciA9IFJJRF9TVlhQQUdFX0NIQVJfTkFNRSA7CgkJCQlUZXh0IFsgZW4tVVMgXSA9ICJGb250IjsKCQkJfTsKCQkJUGFnZUl0ZW0KCQkJewoJCQkJSWRlbnRpZmllciA9IFJJRF9TVlhQQUdFX0NIQVJfRUZGRUNUUyA7CgkJCQlUZXh0IFsgZW4tVVMgXSA9ICJGb250IEVmZmVjdHMiOwoJCQl9OwoJCQlQYWdlSXRlbQoJCQl7CgkJCQlJZGVudGlmaWVyID0gUklEX1NWWFBBR0VfQ0hBUl9QT1NJVElPTiA7CgkJCQlUZXh0IFsgZW4tVVMgXSA9ICJGb250IFBvc2l0aW9uIjsKCQkJfTsKCQl9OwoJfTsKCU9LQnV0dG9uIDEKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDYgLCAxNTEgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCAxNCApIDsKCQlUYWJTdG9wID0gVFJVRSA7Cgl9OwoJQ2FuY2VsQnV0dG9uIDEKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDYwICwgMTUxICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDUwICwgMTQgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJfTsKCUhlbHBCdXR0b24gMQoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTE0ICwgMTUxICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDUwICwgMTQgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJfTsKCVB1c2hCdXR0b24gMQoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTY5ICwgMTUxICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDUwICwgMTQgKSA7CgkJLyogIyMjIEFDSFRVTkc6IE5ldWVyIFRleHQgaW4gUmVzb3VyY2U/IFp1cvxjayA6IFp1crNjayAqLwoJCVRleHQgWyBlbi1VUyBdID0gIkJhY2siIDsKCQlUYWJTdG9wID0gVFJVRSA7Cgl9Owp9OwoKVGFiRGlhbG9nIFJJRF9TQ0RMR19QQVJBR1JBUEgKewoJT3V0cHV0U2l6ZSA9IFRSVUUgOwoJU1ZMb29rID0gVFJVRSA7CglTaXplID0gTUFQX0FQUEZPTlQgKCAyODkgLCAxNzYgKSA7CglUZXh0IFsgZW4tVVMgXSA9ICJQYXJhZ3JhcGgiIDsKCU1vdmVhYmxlID0gVFJVRSA7CglDbG9zZWFibGUgPSBUUlVFIDsKCVRhYkNvbnRyb2wgMQoJewoJCU91dHB1dFNpemUgPSBUUlVFIDsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDMgLCAzICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDI2MCAsIDEzNSApIDsKCQlQYWdlTGlzdCA9CgkJewoJCQlQYWdlSXRlbQoJCQl7CgkJCQlJZGVudGlmaWVyID0gUklEX1NWWFBBR0VfU1REX1BBUkFHUkFQSCA7CgkJCQkvKiAjIyMgQUNIVFVORzogTmV1ZXIgVGV4dCBpbiBSZXNvdXJjZT8gRWluevxnZSB1bmQgQWJzdORuZGUgOiBFaW56s2dlIHVuZCBBYnN09W5kZSAqLwoJCQkJVGV4dCBbIGVuLVVTIF0gPSAiSW5kZW50cyAmIFNwYWNpbmciIDsKCQkJCVBhZ2VSZXNJRCA9IFJJRF9TVlhQQUdFX1NURF9QQVJBR1JBUEggOwoJCQl9OwoJCQkvKgoJCQlQYWdlSXRlbSAgewoJCQkJCUlkZW50aWZpZXIgPSBSSURfU1ZYUEFHRV9FWFRfUEFSQUdSQVBIOwoJCQkJCVRleHQgWyBlbi1VUyBdID0gIlBhcmFncmFwaCAoRXh0ZW5zaW9ucykiOwoJCQkJCVBhZ2VSZXNJRCA9IFJJRF9TVlhQQUdFX0VYVF9QQVJBR1JBUEg7CgkJCQl9OwoqLwoJCQlQYWdlSXRlbQoJCQl7CgkJCQlJZGVudGlmaWVyID0gUklEX1NWWFBBR0VfQUxJR05fUEFSQUdSQVBIIDsKCQkJCVBhZ2VSZXNJRCA9IFJJRF9TVlhQQUdFX0FMSUdOX1BBUkFHUkFQSCA7CgkJCQlUZXh0IFsgZW4tVVMgXSA9ICJBbGlnbm1lbnQiIDsKCQkJfTsKCQkJUGFnZUl0ZW0KCQkJewoJCQkJSWRlbnRpZmllciA9IFJJRF9TVlhQQUdFX1BBUkFfQVNJQU4gOwoJCQkJVGV4dCBbIGVuLVVTIF0gPSAiQXNpYW4gVHlwb2dyYXBoeSI7CgkJCX07CgkJCVBhZ2VJdGVtCgkJCXsKCQkJCUlkZW50aWZpZXIgPSBSSURfU1ZYUEFHRV9UQUJVTEFUT1IgOwoJCQkJVGV4dCBbIGVuLVVTIF0gPSAiVGFiIiA7CgkJCQlQYWdlUmVzSUQgPSBSSURfU1ZYUEFHRV9UQUJVTEFUT1IgOwoJCQl9OwoJCX07Cgl9OwoJT0tCdXR0b24gMQoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggNiAsIDE1MSApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA1MCAsIDE0ICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCX07CglDYW5jZWxCdXR0b24gMQoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggNjAgLCAxNTEgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCAxNCApIDsKCQlUYWJTdG9wID0gVFJVRSA7Cgl9OwoJSGVscEJ1dHRvbiAxCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxMTQgLCAxNTEgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCAxNCApIDsKCQlUYWJTdG9wID0gVFJVRSA7Cgl9OwoJUHVzaEJ1dHRvbiAxCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxNjkgLCAxNTEgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCAxNCApIDsKCQkvKiAjIyMgQUNIVFVORzogTmV1ZXIgVGV4dCBpbiBSZXNvdXJjZT8gWnVy/GNrIDogWnVys2NrICovCgkJVGV4dCBbIGVuLVVTIF0gPSAiQmFjayIgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCX07Cn07CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==