|
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi8vICAgICAgDQovLyAgICAgIGV4cCBmb3IgTWljcm9z b2Z0IFNRTCBTZXJ2ZXIgRG9TKE1TMDMtMDMxKQ0KLy8NCi8vICAgICAgQnkJCSAgOiByZWZkb20N Ci8vCQlFbWFpbAkgIDogcmVmZG9tQHhmb2N1cy5vcmcNCi8vCQlIb21lIFBhZ2UgOiBodHRwOi8v d3d3Lnhmb2N1cy5vcmcNCi8vICAgaHR0cDovL3d3dy54Zm9jdXMub3JnL2V4cGxvaXRzLzIwMDMw Ny9leHBNUzAzMzEuY3BwDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQojaW5jbHVkZSA8c3Rk aW8uaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDx3aW5kb3dzLmg+DQoNCg0Kdm9p ZCBVc2FnZSgpDQp7DQoJcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKipcbiIpOw0KCXByaW50ZigiZXhwIGZvciBNaWNyb3NvZnQgU1FMIFNlcnZlciBEb1Mo TVMwMy0wMzEpXG5cbiIpOw0KCXByaW50ZigiXHQgV3JpdHRlbiBieSBSZWZkb21cbiIpOw0KCXBy aW50ZigiXHQgRW1haWw6IHJlZmRvbUB4Zm9jdXMub3JnXG4iKTsNCglwcmludGYoIlx0IEhvbWVw YWdlOiB3d3cueGZvY3VzLm9yZ1xuXG4iKTsNCglwcmludGYoIlVzYWdlOiBET1NNU1NRTC5leGUg c2VydmVyIGJ1ZmZlcnNpemVcbiIpOw0KCXByaW50ZigiZWc6IERPU01TU1FMLmV4ZTE5Mi4xNjgu MC4xIDkwMDBcblxuIik7DQoJcHJpbnRmKCJUaGUgYnVmZmVyc2l6ZSBkZXBlbmRzIG9uIHNlcnZp Y2UgcGFjayBsZXZlbC5cbiIpOw0KCXByaW50ZigiSSB0ZXN0IGl0IG9uIG15IHNlcnZlcjogd2lu ZG93cyAyMDAwLCBtc3NxbHNlcnZlciBubyBzcC5cbiIpOw0KCXByaW50Zigid2hlbiBidWZmZXJz aXplIGlzIDkwMDAsIHRoZSBzZXJ2ZXIgY2FuIGJlIGNyYXNoZWQuXG4iKTsNCglwcmludGYoIlxu Iik7DQoJcHJpbnRmKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq XG5cbiIpOw0KfQ0KDQoNCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pDQp7DQoJY2hh ciBscFBpcGVOYW1lWzUwXTsNCgljaGFyICpscEJ1ZmZlciA9IE5VTEw7DQoJdW5zaWduZWQgbG9u ZyB1bFNpemUgPSAwOw0KDQoJQk9PTCBiUmVzdWx0Ow0KCURXT1JEIGR3V3JpdHRlbiA9IDAsIGR3 TW9kZTsNCglIQU5ETEUgaFBpcGU7DQoNCglVc2FnZSgpOw0KDQoJcHJpbnRmKCJTdGFydGluZy4u LlxuIik7DQoNCglpZiAoYXJnYyAhPSAzKQ0KCQlnb3RvIEV4aXQwOw0KCQ0KCWlmIChzdHJsZW4o YXJndlsxXSkgPCAyMCkNCgl7DQoJCXNwcmludGYobHBQaXBlTmFtZSwgIlxcXFwlc1xcXFwuXFxw aXBlXFxzcWxcXHF1ZXJ5IiwgYXJndlsxXSk7DQoJfQ0KCWVsc2UNCgl7DQoJCXByaW50ZigiRXJy b3Ihc2VydmVyXG4iKTsNCgkJZ290byBFeGl0MDsNCgl9DQoNCgl1bFNpemU9IGF0b2woYXJndlsy XSk7DQoNCglscEJ1ZmZlciA9IChjaGFyKiltYWxsb2ModWxTaXplICsgMik7DQoJaWYgKE5VTEwg PT0gbHBCdWZmZXIpDQoJew0KCQlwcmludGYoIm1hbGxvYyBlcnJvciFcbiIpOw0KCQlnb3RvIEV4 aXQwOw0KCX0NCg0KCW1lbXNldChscEJ1ZmZlciwgMCwgdWxTaXplICsgMik7DQoJbWVtc2V0KGxw QnVmZmVyLCAnQScsIHVsU2l6ZSk7DQoJKmxwQnVmZmVyID0gJ1x4MTInOw0KCSoobHBCdWZmZXIg KyAxKSA9ICdceDAxJzsNCgkqKGxwQnVmZmVyICsgMikgPSAnXHgwMCc7DQoJDQoJcHJpbnRmKCJD b25uZWN0aW5nIFNlcnZlci4uLlxuIik7DQoNCgloUGlwZSA9IENyZWF0ZUZpbGUobHBQaXBlTmFt ZSwgDQoJCQkJCUdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsDQoJCQkJCTAsDQoJCQkJCU5V TEwsDQoJCQkJCU9QRU5fRVhJU1RJTkcsDQoJCQkJCTAsDQoJCQkJCU5VTEwpOw0KCWlmIChJTlZB TElEX0hBTkRMRV9WQUxVRSA9PSBoUGlwZSkNCgl7DQoJCXByaW50ZigiRXJyb3IhQ29ubmVjdCBz ZXJ2ZXIhJWRcbiIsIEdldExhc3RFcnJvcigpKTsNCgkJZ290byBFeGl0MDsNCgl9DQoNCiAgIGR3 TW9kZSA9IFBJUEVfUkVBRE1PREVfTUVTU0FHRTsgDQogICBiUmVzdWx0ID0gU2V0TmFtZWRQaXBl SGFuZGxlU3RhdGUoIA0KICAgICAgaFBpcGUsICAgIC8vIHBpcGUgaGFuZGxlIA0KICAgICAgJmR3 TW9kZSwgIC8vIG5ldyBwaXBlIG1vZGUgDQogICAgICBOVUxMLCAgICAgLy8gZG9uJ3Qgc2V0IG1h eGltdW0gYnl0ZXMgDQogICAgICBOVUxMKTsgICAgLy8gZG9uJ3Qgc2V0IG1heGltdW0gdGltZSAN CiAgIGlmICghYlJlc3VsdCkNCiAgIHsNCgkJcHJpbnRmKCJFcnJvciFTZXROYW1lZFBpcGVIYW5k bGVTdGF0ZS4lZFxuIiwgR2V0TGFzdEVycm9yKCkpOw0KCQlnb3RvIEV4aXQwOw0KICAgfQ0KDQoJ YlJlc3VsdCA9IFdyaXRlRmlsZShoUGlwZSwgbHBCdWZmZXIsIHVsU2l6ZSArIDEsICZkd1dyaXR0 ZW4sIE5VTEwpOw0KDQoJaWYgKCFiUmVzdWx0KQ0KCXsNCgkJcHJpbnRmKCJcblx0RXJyb3IhV3Jp dGVGaWxlLiVkXG5cbiIsIEdldExhc3RFcnJvcigpKTsNCgkJcHJpbnRmKCJXaGVuIHNlZSB0aGUg ZXJyb3IgbWVzc2FnZSwgdGhlIHRhcmdldCBtYXkgYmUgY3Jhc2hlZCEhXG5cbiIpOw0KCQlnb3Rv IEV4aXQwOw0KCX0NCg0KRXhpdDA6DQoJDQoJcmV0dXJuIDA7DQp9DQo=