LyoKICogV2luZUZpbGUgKFJ1c3NpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBJZ29yIFN0ZXBpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVAoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKCVBPUFVQICIm1ODp6yIgIHsKCQlNRU5VSVRFTSAiJs7y6vD78vxcdEVudGVyIiAsCQkJSURfQUNUSVZBVEUKCQlNRU5VSVRFTSAiJs/l8OXs5fHy6PL8Li4uXHRGNyIgLCAJCQlJRF9GSUxFX01PVkUKCQlNRU5VSVRFTSAiJsru7+jw7uLg8vwuLi5cdEY4IiAsCQkJMTA3CgkJTUVOVUlURU0gIibCIOHz9OXwIO7h7OXt4C4uLlx0RjkiICwJCTExOAoJCU1FTlVJVEVNICIm0+Tg6+jy/Fx0RGVsIiAsCQkJMTA4CgkJTUVOVUlURU0gIs/l8OXo7OXt7uLg8vwuLi4iICwJCQkxMDkKCQlNRU5VSVRFTSAi0eLu6fHy4uAuLi5cdEFsdCtFbnRlciIgLCBJRF9FRElUX1BST1BFUlRJRVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiwPD16OLo8O7i4PL8Li4uIiAsCQkxMTkKCQlNRU5VSVRFTSAi0ODx7+Dq7uLg8vwuLi4iICwJCTEyMAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImx+Dv8/Hy6PL8Li4uIiAsCQkJSURfRVhFQ1VURQoJCU1FTlVJVEVNICImz+X34PLg8vwuLi4iICwgCQkJMTAyCgkJTUVOVUlURU0gIsDx8e726Ojw7uLg8vwuLi4iICwJCTEwMwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICLR7ufk4PL8IOTo8OXq8u7w6P4uLi4iICwJCQkxMTEKCQlNRU5VSVRFTSAiz+7o8eouLi4iICwJCQkxMDQKCQlNRU5VSVRFTSAiJsL75OXr6PL8IPTg6ev7Li4uIiAsCQkJMTE2CgkJTUVOVUlURU0gU0VQQVJBVE9SCiNpZm5kZWYgX05PX0VYVEVOU0lPTlMKCQlNRU5VSVRFTSAiwvv17uRcdEFsdCtYIiAsIAkJCUlEX0ZJTEVfRVhJVAojZWxzZQoJCU1FTlVJVEVNICLC+/Xu5CIsIAkJCQlJRF9GSUxFX0VYSVQKI2VuZGlmCgl9CgoJUE9QVVAgIibE6PHqIiAgewoJCU1FTlVJVEVNICImyu7v6PDu4uDy/CDk6PHqLi4uIiAsCQkJMjAxCgkJTUVOVUlURU0gIibM5fLq4CDy7uzgLi4uIiAsCQkJMjAyCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIibU7vDs4PLo8O7i4PL8Li4uIiAsCQkJSURfRk9STUFUX0RJU0sKI2lmZGVmIF9XSU45NQoJCU1FTlVJVEVNICIm0e7n5ODy/CDx6PHy5ezt++kg5Ojx6i4uLiIsIC0xCS8qQEAgKi8KI2VuZGlmCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIs/u5Orr/ib36PL8IPHl8uXi7ukg5Ojx6iIgLAkJCUlEX0NPTk5FQ1RfTkVUV09SS19EUklWRQoJCU1FTlVJVEVNICLO8uom6/736PL8IPHl8uXi7ukg5Ojx6iIgLAkJSURfRElTQ09OTkVDVF9ORVRXT1JLX0RSSVZFCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gItHk5evg8vwg7ibh+ejsIOrg6i4uLiIgLAkJCTI1NAoJCU1FTlVJVEVNICImx+Dq8Pvy/CDu4fno6SDk7vHy8+8uLi4iICwJCQkyNTUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJsL74fDg8vwg5Ojx6i4uLiIgLAkJCTI1MQoJfQoKCVBPUFVQICImz+Dv6ugiICB7CgkJTUVOVUlURU0gItEm6+Xk8/756Okg8/Du4uXt/Fx0KyIgLAkJCTMwMQoJCU1FTlVJVEVNICIm0ODn4uXw7fPy/CDk5fDl4u5cdCoiICwJCTMwMgoJCU1FTlVJVEVNICLQ4Ofi5fDt8/L8IOIm8eVcdFN0cmcrKiIgLAkJMzAzCgkJTUVOVUlURU0gIibR4uXw7fPy/CDk5fDl4u5cdC0iICwJCQkzMDQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJs7y7OXy6PL8IOLl8uLoIiAsCQkJCTUwNQoJfQoKCVBPUFVQICImwujkIiAgewoJCU1FTlVJVEVNICLE5fDl4u4gJugg7+Dv6uAiICwJCQk0MTMKCQlNRU5VSVRFTSAi0u7r/OruICbk5fDl4u4iICwJCQk0MTEKCQlNRU5VSVRFTSAi0u7r/OruICbv4O/q4CIgLAkJCTQxMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICLQ4Ocm4ejy/CIgLAkJCUlEX1ZJRVdfU1BMSVQKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiyCbs/yIgLAkJCUlEX1ZJRVdfTkFNRQoJCU1FTlVJVEVNICLCJvHlIO/u5PDu4e3u8fLoIO4g9ODp6+UiICwJCQkJSURfVklFV19BTExfQVRUUklCVVRFUywgQ0hFQ0tFRAoJCU1FTlVJVEVNICImwvvh7vDu9+3uIO4g9ODp6+UuLi4iICwJCQlJRF9WSUVXX1NFTEVDVEVEX0FUVFJJQlVURVMKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJtHu8PLo8O7i4PL8IO/uIOjs5e3oIiAsCQlJRF9WSUVXX1NPUlRfTkFNRQoJCU1FTlVJVEVNICLR7vDy6PDu4uDy/CDv7iAm8ujv8yIgLAkJSURfVklFV19TT1JUX1RZUEUKCQlNRU5VSVRFTSAi0e7w8ujw7uLg8vwg7+4gJvDg5+zl8PMiICwgCQlJRF9WSUVXX1NPUlRfU0laRQoJCU1FTlVJVEVNICLR7vDy6PDu4uDy/CDv7iDkJuDy5SIgLCAJCUlEX1ZJRVdfU09SVF9EQVRFCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gItHu8PLo8O7i4PL8IO/uICYuLi4iICwJCQk0MDkKCX0KCglQT1BVUCAiJs3g8fLw7unq6CIgIHsKCQlNRU5VSVRFTSAiz+7kJvLi5fDm5OXt6P8uLi4iICwJCS0xCgkJTUVOVUlURU0gIibY8Oj08i4uLiIgLAkJCS0xCgkJTUVOVUlURU0gIibN4PHy8O7o8vwg7+Dt5ev8IOjt8fLw8+zl7fLu4i4uLiIgLCAtMQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImz+Dt5ev8IOjt8fLw8+zl7fLu4iIgLAkJSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICLP4O3l6/wgJuTo8eru4iIgLAkJSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiJtHy8O7q4CDx7vHy7v/t6P8iICwJSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICLPJu7r7fvpIP3q8ODtXHRDdHJsK1NoaWZ0K1MiICwgCUlEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJsft4Pfu6iDiIPHv6PHu6iDv8O7j8ODs7CIgLAkJLTEKCQlNRU5VSVRFTSAi0e4m9fDg7f/y/CDt4PHy8O7p6ugg7/DoIOL79e7k5SIgLAkJCTUxMQoJfQoKCglQT1BVUCAiJsHl5+7v4PHt7vHy/CIgIHsKCQlNRU5VSVRFTSAiJsTu8fLz7y4uLiIgLAkJNjA1CgkJTUVOVUlURU0gIibP8O7y7uru6/suLi4iICwJCQk2MDYKCQlNRU5VSVRFTSAiJsLr4OTl6+X2Li4uIiAsCQk2MDcKCX0KCglQT1BVUCAiJs7q7e4iICB7CgkJTUVOVUlURU0gIs3u4u7lICbu6u3uIiAsCQkJSURfV0lORE9XX05FVwoJCU1FTlVJVEVNICLO6u3gICbq4PHq4OTu7Fx0Q3RybCtGNSIgLAkJSURfV0lORE9XX0NBU0NBREUKCQlNRU5VSVRFTSAizurt4CDxJuLl8PXzIOLt6OciICwJCUlEX1dJTkRPV19USUxFX0hPUloKCQlNRU5VSVRFTSAizurt4CDxJuvl4uAg7eDv8ODi7lx0Q3RybCtGNCIgLAkJSURfV0lORE9XX1RJTEVfVkVSVAojaWZuZGVmIF9OT19FWFRFTlNJT05TCgkJTUVOVUlURU0gItDg8e/u6+7m6PL8ICbg4vLu7ODy6Pfl8eroIiAsCQlJRF9XSU5ET1dfQVVUT1NPUlQKI2VuZGlmCgkJTUVOVUlURU0gIibQ4PHv7uvu5ujy/CIgLAkJSURfV0lORE9XX0FSUkFOR0UKCQlNRU5VSVRFTSAizibh7e7i6PL8XHRGNSIgLAkJSURfUkVGUkVTSAoJfQoKCVBPUFVQICIm0e/w4OLq4CIgIHsKCQlNRU5VSVRFTSAiJtHu5OXw5uDt6OVcdEYxIiAsCQkJSURfSEVMUAoJCU1FTlVJVEVNICImz+7o8eouLi5cdEYxIiAsCQkJSURfSEVMUAoJCU1FTlVJVEVNICImyPHv7uv85+7i4O3o5SDx7/Dg4uroXHRGMSIgLAkJCUlEX0hFTFBfVVNJTkcKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlQT1BVUCAiJtHi5eTl7ej/Li4uIiAgewoJCSAgTUVOVUlURU0gIibOIFdpbmUuLi4iICwJCQlJRF9BQk9VVF9XSU5FCSAgCi8qCiAqCQkgIE1FTlVJVEVNICImy+j25e3n6P8uLi4iCQlJRF9MSUNFTlNFCiAqCQkgIE1FTlVJVEVNICImwcXHIMPA0MDN0sjJIgkJSURfTk9fV0FSUkFOVFkKICovCgkJfQoJfQp9CgoKSUREX0VYRUNVVEUgRElBTE9HIEZJWEVEIElNUFVSRSAxNSwgMTMsIDIxMCwgNjMKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAiwvvv7uvt6PL8IgpGT05UIDgsICJNUyBTaGVsbCBEbGciCnsKCUNPTlRST0wgCQkiIiwgMTAxLCAiU3RhdGljIiwgU1NfU0lNUExFfFNTX05PUFJFRklYLCAzLCA2LCAxNjIsIDEwCglDT05UUk9MIAkJIibK7uzg7eTgOiIgLCAtMSwgIlN0YXRpYyIsIFNTX0xFRlROT1dPUkRXUkFQfFdTX0dST1VQLCAzLCAxOCwgNjAsIDEwCglFRElUVEVYVAkJMjAxLCAzLCAyOSwgMTM0LCAxMiwgRVNfQVVUT0hTQ1JPTEwKCUNPTlRST0wgCQkiyuDqICbx6Ozi7usiICwgMjE0LCAiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YfFdTX1RBQlNUT1AsMywgNDUsIDcxLCAxMgoJREVGUFVTSEJVVFRPTgkiT0siICwgMSwgMTU4LCA2LCA0NywgMTQKCVBVU0hCVVRUT04JCSLO8uzl7eAiICwgMiwgMTU4LCAyMywgNDcsIDE0CglQVVNIQlVUVE9OCQkiJtHv8ODi6uAiICwgMjU0LCAxNTgsIDQzLCA0NywgMTQKfQo=