LyoKICogVHVya2lzaCBSZXNvdXJjZXMgZm9yIEhlbHAgVmlld2VyCiAqCiAqIENvcHlyaWdodCAyMDA2IEZhdGloIEH+/WP9IDxmYXNpY2lAbGludXgtc2V2ZW5sZXIub3JnPgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAid2luaGVscF9yZXMuaCIKCkxBTkdVQUdFIExBTkdfVFVSS0lTSCwgU1VCTEFOR19ERUZBVUxUCgovKiBNZW51ICovCgpNQUlOX01FTlUgTUVOVQp7CiBQT1BVUCAiJkRvc3lhIiB7CiAgTUVOVUlURU0gIiZB5yIsIE1OSURfRklMRV9PUEVOCiAgTUVOVUlURU0gU0VQQVJBVE9SCiAgTUVOVUlURU0gIllhJnpk/XIiLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAiJllhev1j/SBheWFybGFy/S4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICBNRU5VSVRFTSAiJsf9a/3+IiwgTU5JRF9GSUxFX0VYSVQKIH0KIFBPUFVQICJE/CZ6ZW4iIHsKICAgTUVOVUlURU0gIksmb3B5YWxhLi4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImQW5ub3RhdGUuLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICJZZXIg3SZtbGVyaSIgewogICBNRU5VSVRFTSAiJlRhbv1tbGEuLi4iLCBNTklEX0JLTUtfREVGSU5FCiB9CiBQT1BVUCAiJk9wdGlvbnMiIHsKICAgUE9QVVAJIkhlbHAgYWx3YXlzIHZpc2libGUiCiAgIEJFR0lOCiAgICAgTUVOVUlURU0gIkRlZmF1bHQiLAlNTklEX09QVFNfSEVMUF9ERUZBVUxUCiAgICAgTUVOVUlURU0gIlZpc2libGUiLAlNTklEX09QVFNfSEVMUF9WSVNJQkxFCiAgICAgTUVOVUlURU0gIk5vbiB2aXNpYmxlIiwJTU5JRF9PUFRTX0hFTFBfTk9OVklTSUJMRQogIEVORAogIE1FTlVJVEVNICJIaXN0b3J5IiwJCU1OSURfT1BUU19ISVNUT1JZCiAgUE9QVVAgICAgIkZvbnRzIgogIEJFR0lOCiAgICBNRU5VSVRFTSAiU21hbGwiLAkJTU5JRF9PUFRTX0ZPTlRTX1NNQUxMCiAgICBNRU5VSVRFTSAiTm9ybWFsIiwgICAgCU1OSURfT1BUU19GT05UU19OT1JNQUwKICAgIE1FTlVJVEVNICJMYXJnZSIsICAgICAJTU5JRF9PUFRTX0ZPTlRTX0xBUkdFCiAgRU5ECiAgTUVOVUlURU0gIlVzZSBzeXN0ZW0gY29sb3JzIiwJTU5JRF9PUFRTX1NZU1RFTV9DT0xPUlMKIH0KIFBPUFVQICImWWFyZP1tIiB7CiAgIE1FTlVJVEVNICImWWFyZP1tIEt1bGxhbv1t/SIsIE1OSURfSEVMUF9IRUxQT04KICAgTUVOVUlURU0gIiZIZXIgWmFtYW4g3HN0dGUiLCBNTklEX0hFTFBfSEVMUFRPUAogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZCaWxnaS4uLiIsIE1OSURfSEVMUF9BQk9VVAogfQp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFCnsKU1RJRF9XSU5FX0hFTFAsIAkiV2luZSBZYXJk/W0iClNUSURfV0hFUlJPUiwgCQkiSEFUQSIKU1RJRF9XQVJOSU5HLCAgCQkiVVlBUkkiClNUSURfSU5GTywgIAkJIkJpbGdpIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgCSJIZW78eiB0YW1hbWxhbm1hZP0iClNUSURfSExQRklMRV9FUlJPUl9zLCAJIiclcycgeWFyZP1tIGRvc3lhc/0gYef9bP1ya2VuIGhhdGEiClNUSURfSU5ERVgsIAkJIibd52luZGVraWxlciIKU1RJRF9DT05URU5UUywJCSJTdW1tYXJ5IgpTVElEX0JBQ0ssIAkJIiZHZXJpIgpTVElEX0FMTF9GSUxFUywgCSJU/G0gZG9zeWFsYXIgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsIAkiWWFyZP1tIGRvc3lhbGFy/SAoKi5obHApIgpTVElEX0ZJTEVfTk9UX0ZPVU5EX3MJIkNhbm5vdCBmaW5kICclcycuIERvIHlvdSB3YW50IHRvIGZpbmQgdGhpcyBmaWxlIHlvdXJzZWxmPyIKU1RJRF9OT19SSUNIRURJVAkiQ2Fubm90IGZpbmQgYSByaWNoZWRpdCBpbXBsZW1lbnRhdGlvbi4uLiBBYm9ydGluZyIKfQo=