LyoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKg0KKiogIEZpbGUgICAgICAgIDogU1RNMzJGMTAwWEJfRkxBU0gubGQNCioqDQoqKiAgQWJzdHJhY3QgICAgOiBMaW5rZXIgc2NyaXB0IGZvciBTVE0zMkYxMDB4QiBEZXZpY2Ugd2l0aA0KKiogICAgICAgICAgICAgICAgMTI4S0J5dGUgRkxBU0gsIDhLQnl0ZSBSQU0NCioqDQoqKiAgICAgICAgICAgICAgICBTZXQgaGVhcCBzaXplLCBzdGFjayBzaXplIGFuZCBzdGFjayBsb2NhdGlvbiBhY2NvcmRpbmcNCioqICAgICAgICAgICAgICAgIHRvIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4NCioqDQoqKiAgICAgICAgICAgICAgICBTZXQgbWVtb3J5IGJhbmsgYXJlYSBhbmQgc2l6ZSBpZiBleHRlcm5hbCBtZW1vcnkgaXMgdXNlZC4NCioqDQoqKiAgVGFyZ2V0ICAgICAgOiBTVE1pY3JvZWxlY3Ryb25pY3MgU1RNMzINCioqDQoqKiAgRW52aXJvbm1lbnQgOiBBdG9sbGljIFRydWVTVFVESU8oUikNCioqDQoqKiAgRGlzdHJpYnV0aW9uOiBUaGUgZmlsZSBpcyBkaXN0cmlidXRlZCCTYXMgaXMslCB3aXRob3V0IGFueSB3YXJyYW50eQ0KKiogICAgICAgICAgICAgICAgb2YgYW55IGtpbmQuDQoqKg0KKiogIChjKUNvcHlyaWdodCBBdG9sbGljIEFCLg0KKiogIFlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcy1pcyBvciBtb2RpZnkgaXQgYWNjb3JkaW5nIHRvIHRoZSBuZWVkcyBvZiB5b3VyDQoqKiAgcHJvamVjdC4gVGhpcyBmaWxlIG1heSBvbmx5IGJlIGJ1aWx0IChhc3NlbWJsZWQgb3IgY29tcGlsZWQgYW5kIGxpbmtlZCkNCioqICB1c2luZyB0aGUgQXRvbGxpYyBUcnVlU1RVRElPKFIpIHByb2R1Y3QuIFRoZSB1c2Ugb2YgdGhpcyBmaWxlIHRvZ2V0aGVyDQoqKiAgd2l0aCBvdGhlciB0b29scyB0aGFuIEF0b2xsaWMgVHJ1ZVNUVURJTyhSKSBpcyBub3QgcGVybWl0dGVkLg0KKioNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqLw0KMA0KLyogRW50cnkgUG9pbnQgKi8NCkVOVFJZKFJlc2V0X0hhbmRsZXIpDQowDQovKiBIaWdoZXN0IGFkZHJlc3Mgb2YgdGhlIHVzZXIgbW9kZSBzdGFjayAqLw0KX2VzdGFjayA9IDB4MjAwMDFGRkY7ICAgIC8qIGVuZCBvZiBSQU0gKi8NCjANCi8qIEdlbmVyYXRlIGEgbGluayBlcnJvciBpZiBoZWFwIGFuZCBzdGFjayBkb24ndCBmaXQgaW50byBSQU0gKi8NCl9NaW5fSGVhcF9TaXplID0gMHgyMDA7ICAgICAgLyogcmVxdWlyZWQgYW1vdW50IG9mIGhlYXAgICovDQpfTWluX1N0YWNrX1NpemUgPSAweDQwMDsgLyogcmVxdWlyZWQgYW1vdW50IG9mIHN0YWNrICovDQowDQovKiBTcGVjaWZ5IHRoZSBtZW1vcnkgYXJlYXMgKi8NCk1FTU9SWQ0Kew0KRkxBU0ggKHJ4KSAgICAgIDogT1JJR0lOID0gMHgwODAwMDAwMCwgTEVOR1RIID0gMTI4Sw0KUkFNICh4cncpICAgICAgIDogT1JJR0lOID0gMHgyMDAwMDAwMCwgTEVOR1RIID0gOEsNCn0NCjANCi8qIERlZmluZSBvdXRwdXQgc2VjdGlvbnMgKi8NClNFQ1RJT05TDQp7DQogIC8qIFRoZSBzdGFydHVwIGNvZGUgZ29lcyBmaXJzdCBpbnRvIEZMQVNIICovDQogIC5pc3JfdmVjdG9yIDoNCiAgew0KICAgIC4gPSBBTElHTig0KTsNCiAgICBLRUVQKCooLmlzcl92ZWN0b3IpKSAvKiBTdGFydHVwIGNvZGUgKi8NCiAgICAuID0gQUxJR04oNCk7DQogIH0gPkZMQVNIDQowDQogIC8qIFRoZSBwcm9ncmFtIGNvZGUgYW5kIG90aGVyIGRhdGEgZ29lcyBpbnRvIEZMQVNIICovDQogIC50ZXh0IDoNCiAgew0KICAgIC4gPSBBTElHTig0KTsNCiAgICAqKC50ZXh0KSAgICAgICAgICAgLyogLnRleHQgc2VjdGlvbnMgKGNvZGUpICovDQogICAgKigudGV4dCopICAgICAgICAgIC8qIC50ZXh0KiBzZWN0aW9ucyAoY29kZSkgKi8NCiAgICAqKC5nbHVlXzcpICAgICAgICAgLyogZ2x1ZSBhcm0gdG8gdGh1bWIgY29kZSAqLw0KICAgICooLmdsdWVfN3QpICAgICAgICAvKiBnbHVlIHRodW1iIHRvIGFybSBjb2RlICovDQogICAgKiguZWhfZnJhbWUpDQowDQogICAgS0VFUCAoKiguaW5pdCkpDQogICAgS0VFUCAoKiguZmluaSkpDQowDQogICAgLiA9IEFMSUdOKDQpOw0KICAgIF9ldGV4dCA9IC47ICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9scyBhdCBlbmQgb2YgY29kZSAqLw0KICB9ID5GTEFTSA0KMA0KICAvKiBDb25zdGFudCBkYXRhIGdvZXMgaW50byBGTEFTSCAqLw0KICAucm9kYXRhIDoNCiAgew0KICAgIC4gPSBBTElHTig0KTsNCiAgICAqKC5yb2RhdGEpICAgICAgICAgLyogLnJvZGF0YSBzZWN0aW9ucyAoY29uc3RhbnRzLCBzdHJpbmdzLCBldGMuKSAqLw0KICAgICooLnJvZGF0YSopICAgICAgICAvKiAucm9kYXRhKiBzZWN0aW9ucyAoY29uc3RhbnRzLCBzdHJpbmdzLCBldGMuKSAqLw0KICAgIC4gPSBBTElHTig0KTsNCiAgfSA+RkxBU0gNCjANCiAgLkFSTS5leHRhYiAgIDogeyAqKC5BUk0uZXh0YWIqIC5nbnUubGlua29uY2UuYXJtZXh0YWIuKikgfSA+RkxBU0gNCiAgLkFSTSA6IHsNCiAgICBfX2V4aWR4X3N0YXJ0ID0gLjsNCiAgICAqKC5BUk0uZXhpZHgqKQ0KICAgIF9fZXhpZHhfZW5kID0gLjsNCiAgfSA+RkxBU0gNCjANCiAgLnByZWluaXRfYXJyYXkgICAgIDoNCiAgew0KICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsNCiAgICBLRUVQICgqKC5wcmVpbml0X2FycmF5KikpDQogICAgUFJPVklERV9ISURERU4gKF9fcHJlaW5pdF9hcnJheV9lbmQgPSAuKTsNCiAgfSA+RkxBU0gNCiAgLmluaXRfYXJyYXkgOg0KICB7DQogICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOw0KICAgIEtFRVAgKCooU09SVCguaW5pdF9hcnJheS4qKSkpDQogICAgS0VFUCAoKiguaW5pdF9hcnJheSopKQ0KICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7DQogIH0gPkZMQVNIDQogIC5maW5pX2FycmF5IDoNCiAgew0KICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsNCiAgICBLRUVQICgqKFNPUlQoLmZpbmlfYXJyYXkuKikpKQ0KICAgIEtFRVAgKCooLmZpbmlfYXJyYXkqKSkNCiAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOw0KICB9ID5GTEFTSA0KMA0KICAvKiB1c2VkIGJ5IHRoZSBzdGFydHVwIHRvIGluaXRpYWxpemUgZGF0YSAqLw0KICBfc2lkYXRhID0gTE9BREFERFIoLmRhdGEpOw0KMA0KICAvKiBJbml0aWFsaXplZCBkYXRhIHNlY3Rpb25zIGdvZXMgaW50byBSQU0sIGxvYWQgTE1BIGNvcHkgYWZ0ZXIgY29kZSAqLw0KICAuZGF0YSA6IA0KICB7DQogICAgLiA9IEFMSUdOKDQpOw0KICAgIF9zZGF0YSA9IC47ICAgICAgICAvKiBjcmVhdGUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgc3RhcnQgKi8NCiAgICAqKC5kYXRhKSAgICAgICAgICAgLyogLmRhdGEgc2VjdGlvbnMgKi8NCiAgICAqKC5kYXRhKikgICAgICAgICAgLyogLmRhdGEqIHNlY3Rpb25zICovDQowDQogICAgLiA9IEFMSUdOKDQpOw0KICAgIF9lZGF0YSA9IC47ICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGRhdGEgZW5kICovDQogIH0gPlJBTSBBVD4gRkxBU0gNCjANCiAgDQogIC8qIFVuaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uICovDQogIC4gPSBBTElHTig0KTsNCiAgLmJzcyA6DQogIHsNCiAgICAvKiBUaGlzIGlzIHVzZWQgYnkgdGhlIHN0YXJ0dXAgaW4gb3JkZXIgdG8gaW5pdGlhbGl6ZSB0aGUgLmJzcyBzZWNpb24gKi8NCiAgICBfc2JzcyA9IC47ICAgICAgICAgLyogZGVmaW5lIGEgZ2xvYmFsIHN5bWJvbCBhdCBic3Mgc3RhcnQgKi8NCiAgICBfX2Jzc19zdGFydF9fID0gX3Nic3M7DQogICAgKiguYnNzKQ0KICAgICooLmJzcyopDQogICAgKihDT01NT04pDQowDQogICAgLiA9IEFMSUdOKDQpOw0KICAgIF9lYnNzID0gLjsgICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9sIGF0IGJzcyBlbmQgKi8NCiAgICBfX2Jzc19lbmRfXyA9IF9lYnNzOw0KICB9ID5SQU0NCjANCiAgLyogVXNlcl9oZWFwX3N0YWNrIHNlY3Rpb24sIHVzZWQgdG8gY2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggUkFNIGxlZnQgKi8NCiAgLl91c2VyX2hlYXBfc3RhY2sgOg0KICB7DQogICAgLiA9IEFMSUdOKDQpOw0KICAgIFBST1ZJREUgKCBlbmQgPSAuICk7DQogICAgUFJPVklERSAoIF9lbmQgPSAuICk7DQogICAgLiA9IC4gKyBfTWluX0hlYXBfU2l6ZTsNCiAgICAuID0gLiArIF9NaW5fU3RhY2tfU2l6ZTsNCiAgICAuID0gQUxJR04oNCk7DQogIH0gPlJBTQ0KMA0KICANCjANCiAgLyogUmVtb3ZlIGluZm9ybWF0aW9uIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcmllcyAqLw0KICAvRElTQ0FSRC8gOg0KICB7DQogICAgbGliYy5hICggKiApDQogICAgbGlibS5hICggKiApDQogICAgbGliZ2NjLmEgKCAqICkNCiAgfQ0KMA0KICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgKiguQVJNLmF0dHJpYnV0ZXMpIH0NCn0NCg==