LyoKICogVHVya2lzaCBSZXNvdXJjZXMgZm9yIEhlbHAgVmlld2VyCiAqCiAqIENvcHlyaWdodCAyMDA2IEZhdGloIEH+/WP9IDxmYXNpY2lAbGludXgtc2V2ZW5sZXIub3JnPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1RVUktJU0gsIFNVQkxBTkdfREVGQVVMVAp7CiBQT1BVUCAiJkRvc3lhIiB7CiAgTUVOVUlURU0gIiZB5yIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIllhJnpk/XIiLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAiJllhev1j/SBheWFybGFy/S4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJsf9a/3+IiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICJE/CZ6ZW4iIHsKICAgTUVOVUlURU0gIksmb3B5YWxhLi4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImQW5ub3RhdGUuLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICJZZXIg3SZtbGVyaSIgewogICBNRU5VSVRFTSAiJlRhbv1tbGEuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJk9wdGlvbnMiIHsKICAgUE9QVVAJIkhlbHAgYWx3YXlzIHZpc2libGUiCiAgIEJFR0lOCiAgICAgTUVOVUlURU0gIkRlZmF1bHQiLAlNTklEX09QVFNfSEVMUF9ERUZBVUxUCiAgICAgTUVOVUlURU0gIlZpc2libGUiLAlNTklEX09QVFNfSEVMUF9WSVNJQkxFCiAgICAgTUVOVUlURU0gIk5vbiB2aXNpYmxlIiwJTU5JRF9PUFRTX0hFTFBfTk9OVklTSUJMRQogIEVORAogIE1FTlVJVEVNICJIaXN0b3J5IiwJCU1OSURfT1BUU19ISVNUT1JZCiAgUE9QVVAgICAgIkZvbnRzIgogIEJFR0lOCiAgICBNRU5VSVRFTSAiU21hbGwiLAkJTU5JRF9PUFRTX0ZPTlRTX1NNQUxMCiAgICBNRU5VSVRFTSAiTm9ybWFsIiwgICAgCU1OSURfT1BUU19GT05UU19OT1JNQUwKICAgIE1FTlVJVEVNICJMYXJnZSIsICAgICAJTU5JRF9PUFRTX0ZPTlRTX0xBUkdFCiAgRU5ECiAgTUVOVUlURU0gIlVzZSBzeXN0ZW0gY29sb3JzIiwJTU5JRF9PUFRTX1NZU1RFTV9DT0xPUlMKIH0KIFBPUFVQICImWWFyZP1tIiB7CiAgIE1FTlVJVEVNICImWWFyZP1tIEt1bGxhbv1t/SIsIE1OSURfSEVMUF9IRUxQT04KICAgTUVOVUlURU0gIiZIZXIgWmFtYW4g3HN0dGUiLCBNTklEX0hFTFBfSEVMUFRPUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZCaWxnaS4uLiIsIE1OSURfSEVMUF9BQk9VVAojaWZkZWYgV0lORUxJQgogICBNRU5VSVRFTSAiV0lORSAmSGFra/1uZGEiLCBNTklEX0hFTFBfV0lORQojZW5kaWYKIH0KfQoKLyogU3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1RVUktJU0gsIFNVQkxBTkdfREVGQVVMVAp7ClNUSURfV0lORV9IRUxQLCAJIldJTkUgWWFyZP1tIgpTVElEX1dIRVJST1IsIAkJIkhBVEEiClNUSURfV0FSTklORywgIAkJIlVZQVJJIgpTVElEX0lORk8sICAJCSJCaWxnaSIKU1RJRF9OT1RfSU1QTEVNRU5URUQsIAkiSGVu/HogdGFtYW1sYW5tYWT9IgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSInJXMnIHlhcmT9bSBkb3N5YXP9IGHn/Wz9cmtlbiBoYXRhIgpTVElEX0lOREVYLCAJCSIm3edpbmRla2lsZXIiClNUSURfQ09OVEVOVFMsCQkiU3VtbWFyeSIKU1RJRF9CQUNLLCAJCSImR2VyaSIKU1RJRF9BTExfRklMRVMsIAkiVPxtIGRvc3lhbGFyICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIllhcmT9bSBkb3N5YWxhcv0gKCouaGxwKSIKU1RJRF9GSUxFX05PVF9GT1VORF9zCSJDYW5ub3QgZmluZCAnJXMnLiBEbyB5b3Ugd2FudCB0byBmaW5kIHRoaXMgZmlsZSB5b3Vyc2VsZj8iClNUSURfTk9fUklDSEVESVQJIkNhbm5vdCBmaW5kIGEgcmljaGVkaXQgaW1wbGVtZW50YXRpb24uLi4gQWJvcnRpbmciClNUSURfUFNIX0lOREVYLAkJIkhlbHAgdG9waWNzOiAiCn0K