LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIAogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKiAKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKI2luY2x1ZGUgIm1pc2MuaHJjIgojaW5jbHVkZSAiaW5zZm5vdGUuaHJjIgojaW5jbHVkZSAiaGVscGlkLmgiCiAvLyAjZGVmaW5lIERMR19JTlNfRk9PVE5PVEUgMjU3Ck1vZGFsRGlhbG9nIERMR19JTlNfRk9PVE5PVEUKewogICAgSGVscElEID0gInN3Ok1vZGFsRGlhbG9nOkRMR19JTlNfRk9PVE5PVEUiOwoJT3V0cHV0U2l6ZSA9IFRSVUUgOwoJU1ZMb29rID0gVFJVRSA7CiAgICBTaXplID0gTUFQX0FQUEZPTlQgKCAxNjAgLCAxMDAgKSA7CgkvKiAjIyMgQUNIVFVORzogTmV1ZXIgVGV4dCBpbiBSZXNvdXJjZT8gRnXfbm90ZSBlaW5m/GdlbiA6IEZ1mG5vdGUgZWluZrNnZW4gKi8KCVRleHQgWyBlbi1VUyBdID0gIkluc2VydCBGb290bm90ZS9FbmRub3RlIiA7CglNb3ZlYWJsZSA9IFRSVUUgOwoJRWRpdCBFRF9OVU1CRVJfQ0hBUgoJewoJICAgIEhlbHBJRCA9ICJzdzpFZGl0OkRMR19JTlNfRk9PVE5PVEU6RURfTlVNQkVSX0NIQVIiOwoJCURpc2FibGUgPSBUUlVFIDsKCQlCb3JkZXIgPSBUUlVFIDsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDY5ICwgMjcgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMjMgLCAxMiApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJR3JvdXAgPSBUUlVFIDsKCQlMZWZ0ID0gVFJVRSA7Cgl9OwoJU3RyaW5nIFNUUl9DSEFSCgl7CgkJVGV4dCBbIGVuLVVTIF0gPSAiQ2hhcmFjdGVyIiA7Cgl9OwoJT0tCdXR0b24gQlRfT0sKCXsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDEwNCAsIDYgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCAxNCApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJR3JvdXAgPSBUUlVFIDsKCQlEZWZCdXR0b24gPSBUUlVFIDsKCX07CglDYW5jZWxCdXR0b24gQlRfQ0FOQ0VMCgl7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCAxMDQgLCAyMyApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA1MCAsIDE0ICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlHcm91cCA9IFRSVUUgOwoJfTsKCUhlbHBCdXR0b24gQlRfSEVMUAoJewogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggMTA0ICwgNDMgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCAxNCApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJR3JvdXAgPSBUUlVFIDsKCX07CglJbWFnZUJ1dHRvbiBCVF9QUkVWCgl7CgkgICAgSGVscElEID0gInN3OkltYWdlQnV0dG9uOkRMR19JTlNfRk9PVE5PVEU6QlRfUFJFViI7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCAxMDQgLCA4MiApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAyNCAsIDE0ICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlIaWRlID0gVFJVRSA7CgkJU1lNQk9MID0gSU1BR0VCVVRUT05fUFJFViA7Cgl9OwoJSW1hZ2VCdXR0b24gQlRfTkVYVAoJewoJICAgIEhlbHBJRCA9ICJzdzpJbWFnZUJ1dHRvbjpETEdfSU5TX0ZPT1ROT1RFOkJUX05FWFQiOwogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggMTMwICwgODIgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMjQgLCAxNCApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJSGlkZSA9IFRSVUUgOwoJCVNZTUJPTCA9IElNQUdFQlVUVE9OX05FWFQgOwoJfTsKCVJhZGlvQnV0dG9uIFJCX05VTUJFUl9BVVRPCgl7CgkgICAgSGVscElEID0gInN3OlJhZGlvQnV0dG9uOkRMR19JTlNfRk9PVE5PVEU6UkJfTlVNQkVSX0FVVE8iOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMTIgLCAxNCApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA3OSAsIDEwICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIn5BdXRvbWF0aWMiIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJR3JvdXAgPSBUUlVFIDsKCQlDaGVjayA9IFRSVUUgOwoJfTsKCVJhZGlvQnV0dG9uIFJCX05VTUJFUl9DSEFSCgl7CgkgICAgSGVscElEID0gInN3OlJhZGlvQnV0dG9uOkRMR19JTlNfRk9PVE5PVEU6UkJfTlVNQkVSX0NIQVIiOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMTIgLCAyNyApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA1NCAsIDEwICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIn5DaGFyYWN0ZXIiIDsKCX07CiAgICBGaXhlZExpbmUgRkxfTlVNQkVSCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA2ICwgMyApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA5MiAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiTnVtYmVyaW5nIiA7Cgl9OwoJUHVzaEJ1dHRvbiBCVF9OVU1CRVJfQ0hBUgoJewoJICAgIEhlbHBJRCA9ICJzdzpQdXNoQnV0dG9uOkRMR19JTlNfRk9PVE5PVEU6QlRfTlVNQkVSX0NIQVIiOwogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggNjkgLCA0MiApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAxMiAsIDEyICkgOwoJCVRleHQgPSAiLi4uIiA7Cgl9OwoJUmFkaW9CdXR0b24gUkJfVFlQRV9GVE4KCXsKCSAgICBIZWxwSUQgPSAic3c6UmFkaW9CdXR0b246RExHX0lOU19GT09UTk9URTpSQl9UWVBFX0ZUTiI7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxMiAsIDcwICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDc5ICwgMTAgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJCUdyb3VwID0gVFJVRSA7CgkJQ2hlY2sgPSBUUlVFIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJ+Rm9vdG5vdGUiIDsKCX07CglSYWRpb0J1dHRvbiBSQl9UWVBFX0VORE5PVEUKCXsKCSAgICBIZWxwSUQgPSAic3c6UmFkaW9CdXR0b246RExHX0lOU19GT09UTk9URTpSQl9UWVBFX0VORE5PVEUiOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMTIgLCA4MyApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA3OSAsIDEwICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIn5FbmRub3RlIiA7Cgl9OwogICAgRml4ZWRMaW5lIEZMX1RZUEUKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDYgLCA2MCApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA5MiAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiVHlwZSIgOwoJfTsKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==