LyoKICogV2luZUZpbGUgKFJ1c3NpYW4gcmVzb3VyY2VzKQogKgogKiBDb3B5cmlnaHQgMjAwMyBJZ29yIFN0ZXBpbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCgpMQU5HVUFHRSBMQU5HX1JVU1NJQU4sIFNVQkxBTkdfREVGQVVMVAoKLyogTWVudSAqLwoKSURNX1dJTkVGSUxFIE1FTlUgRklYRUQgSU1QVVJFCnsKCVBPUFVQICIm1ODp6yIgIHsKCQlNRU5VSVRFTSAiJs7y6vD78vxcdEVudGVyIiAsCQkJSURfQUNUSVZBVEUKCQlNRU5VSVRFTSAiJs/l8OXs5fHy6PL8Li4uXHRGNyIgLCAJCQlJRF9GSUxFX01PVkUKCQlNRU5VSVRFTSAiJsru7+jw7uLg8vwuLi5cdEY4IiAsCQkJSURfRklMRV9DT1BZCgkJTUVOVUlURU0gIibCIOHz9OXwIO7h7OXt4C4uLlx0RjkiICwJCTExOAoJCU1FTlVJVEVNICIm0+Tg6+jy/Fx0RGVsIiAsCQkJSURfRklMRV9ERUxFVEUKCQlNRU5VSVRFTSAiz+Xw5ejs5e3u4uDy/C4uLiIgLAkJCTEwOQoJCU1FTlVJVEVNICLR4u7p8fLi4C4uLlx0QWx0K0VudGVyIiAsIElEX0VESVRfUFJPUEVSVElFUwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICLA8PXo4ujw7uLg8vwuLi4iICwJCTExOQoJCU1FTlVJVEVNICLQ4PHv4Oru4uDy/C4uLiIgLAkJMTIwCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIibH4O/z8fLo8vwuLi4iICwJCQlJRF9FWEVDVVRFCgkJTUVOVUlURU0gIibP5ffg8uDy/C4uLiIgLCAJCQkxMDIKCQlNRU5VSVRFTSAiwPHx7vbo6PDu4uDy/C4uLiIgLAkJMTAzCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gItHu5+Tg8vwg5Ojw5ery7vDo/i4uLiIgLAkJCTExMQoJCU1FTlVJVEVNICLP7ujx6i4uLiIgLAkJCTEwNAoJCU1FTlVJVEVNICImwvvk5evo8vwg9ODp6/suLi4iICwJCQkxMTYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICLC+/Xu5Fx0QWx0K1giICwgCQkJSURfRklMRV9FWElUCiNlbHNlCgkJTUVOVUlURU0gIsL79e7kIiwgCQkJCUlEX0ZJTEVfRVhJVAojZW5kaWYKCX0KCglQT1BVUCAiJsTo8eoiICB7CgkJTUVOVUlURU0gIibK7u/o8O7i4PL8IOTo8eouLi4iICwJCQkyMDEKCQlNRU5VSVRFTSAiJszl8urgIPLu7OAuLi4iICwJCQkyMDIKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJtTu8Ozg8ujw7uLg8vwuLi4iICwJCQlJRF9GT1JNQVRfRElTSwojaWZkZWYgX1dJTjk1CgkJTUVOVUlURU0gIibR7ufk4PL8IPHo8fLl7O376SDk6PHqLi4uIiwgLTEJLypAQCAqLwojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiz+7k6uv+Jvfo8vwg8eXy5eLu6SDk6PHqIiAsCQkJSURfQ09OTkVDVF9ORVRXT1JLX0RSSVZFCgkJTUVOVUlURU0gIs7y6ibr/vfo8vwg8eXy5eLu6SDk6PHqIiAsCQlJRF9ESVNDT05ORUNUX05FVFdPUktfRFJJVkUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAi0eTl6+Dy/CDuJuH56Owg6uDqLi4uIiAsCQkJMjU0CgkJTUVOVUlURU0gIibH4Orw+/L8IO7h+ejpIOTu8fLz7y4uLiIgLAkJCTI1NQoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImwvvh8ODy/CDk6PHqLi4uIiAsCQkJMjUxCgl9CgoJUE9QVVAgIibP4O/q6CIgIHsKCQlNRU5VSVRFTSAi0Sbr5eTz/vno6SDz8O7i5e38XHQrIiAsCQkJMzAxCgkJTUVOVUlURU0gIibQ4Ofi5fDt8/L8IOTl8OXi7lx0KiIgLAkJMzAyCgkJTUVOVUlURU0gItDg5+Ll8O3z8vwg4ibx5Vx0U3RyZysqIiAsCQkzMDMKCQlNRU5VSVRFTSAiJtHi5fDt8/L8IOTl8OXi7lx0LSIgLAkJCTMwNAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImzvLs5fLo8vwg4uXy4ugiICwJCQkJNTA1Cgl9CgoJUE9QVVAgIibC6OQiICB7CgkJTUVOVUlURU0gIsTl8OXi7iAm6CDv4O/q4CIgLAkJCTQxMwoJCU1FTlVJVEVNICLS7uv86u4gJuTl8OXi7iIgLAkJCTQxMQoJCU1FTlVJVEVNICLS7uv86u4gJu/g7+rgIiAsCQkJNDEyCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gItDg5ybh6PL8IiAsCQkJSURfVklFV19TUExJVAoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICLIJuz/IiAsCQkJSURfVklFV19OQU1FCgkJTUVOVUlURU0gIsIm8eUg7+7k8O7h7e7x8ugg7iD04Onr5SIgLAkJCQlJRF9WSUVXX0FMTF9BVFRSSUJVVEVTLCBDSEVDS0VECgkJTUVOVUlURU0gIibC++Hu8O737e4g7iD04Onr5S4uLiIgLAkJCUlEX1ZJRVdfU0VMRUNURURfQVRUUklCVVRFUwoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICIm0e7w8ujw7uLg8vwg7+4g6Ozl7egiICwJCUlEX1ZJRVdfU09SVF9OQU1FCgkJTUVOVUlURU0gItHu8PLo8O7i4PL8IO/uICby6O/zIiAsCQlJRF9WSUVXX1NPUlRfVFlQRQoJCU1FTlVJVEVNICLR7vDy6PDu4uDy/CDv7iAm8ODn7OXw8yIgLCAJCUlEX1ZJRVdfU09SVF9TSVpFCgkJTUVOVUlURU0gItHu8PLo8O7i4PL8IO/uIOQm4PLlIiAsIAkJSURfVklFV19TT1JUX0RBVEUKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAi0e7w8ujw7uLg8vwg7+4gJi4uLiIgLAkJCUlEX1ZJRVdfRklMVEVSCgl9CgoJUE9QVVAgIibN4PHy8O7p6ugiICB7CgkJTUVOVUlURU0gIs/u5Cby4uXw5uTl7ej/Li4uIiAsCQk1MDEKCQlNRU5VSVRFTSAiJtjw6PTyLi4uIiAsCQkJSURfU0VMRUNUX0ZPTlQKCQlNRU5VSVRFTSAiJs3g8fLw7ujy/CDv4O3l6/wg6O3x8vDz7OXt8u7iLi4uIiAsIDUxMgoJCU1FTlVJVEVNIFNFUEFSQVRPUgoJCU1FTlVJVEVNICImz+Dt5ev8IOjt8fLw8+zl7fLu4iIgLAkJSURfVklFV19UT09MX0JBUiwgQ0hFQ0tFRAoJCU1FTlVJVEVNICLP4O3l6/wgJuTo8eru4iIgLAkJSURfVklFV19EUklWRV9CQVIsIENIRUNLRUQKCQlNRU5VSVRFTSAiJtHy8O7q4CDx7vHy7v/t6P8iICwJSURfVklFV19TVEFUVVNCQVIsIENIRUNLRUQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICLPJu7r7fvpIP3q8ODtXHRDdHJsK1NoaWZ0K1MiICwgCUlEX1ZJRVdfRlVMTFNDUkVFTgojZW5kaWYKCQlNRU5VSVRFTSBTRVBBUkFUT1IKCQlNRU5VSVRFTSAiJsft4Pfu6iDiIPHv6PHu6iDv8O7j8ODs7CIgLAkJNTA0CgkJTUVOVUlURU0gItHuJvXw4O3/8vwg7eDx8vDu6eroIO/w6CDi+/Xu5OUiICwJCQk1MTEKCX0KCgoJUE9QVVAgIibB5efu7+Dx7e7x8vwiICB7CgkJTUVOVUlURU0gIibE7vHy8+8uLi4iICwJCTYwNQoJCU1FTlVJVEVNICImz/Du8u7q7uv7Li4uIiAsCQkJNjA2CgkJTUVOVUlURU0gIibC6+Dk5evl9i4uLiIgLAkJNjA3Cgl9CgoJUE9QVVAgIibO6u3uIiAgewoJCU1FTlVJVEVNICLN7uLu5SAm7urt7iIgLAkJCUlEX1dJTkRPV19ORVcKCQlNRU5VSVRFTSAizurt4CAm6uDx6uDk7uxcdEN0cmwrRjUiICwJCUlEX1dJTkRPV19DQVNDQURFCgkJTUVOVUlURU0gIs7q7eAg8Sbi5fD18yDi7ejnIiAsCQlJRF9XSU5ET1dfVElMRV9IT1JaCgkJTUVOVUlURU0gIs7q7eAg8Sbr5eLgIO3g7/Dg4u5cdEN0cmwrRjQiICwJCUlEX1dJTkRPV19USUxFX1ZFUlQKI2lmbmRlZiBfTk9fRVhURU5TSU9OUwoJCU1FTlVJVEVNICLQ4PHv7uvu5ujy/CAm4OLy7uzg8uj35fHq6CIgLAkJSURfV0lORE9XX0FVVE9TT1JUCiNlbmRpZgoJCU1FTlVJVEVNICIm0ODx7+7r7ubo8vwiICwJCUlEX1dJTkRPV19BUlJBTkdFCgkJTUVOVUlURU0gIs4m4e3u4ujy/Fx0RjUiICwJCUlEX1JFRlJFU0gKCX0KCglQT1BVUCAiJtHv8ODi6uAiICB7CgkJTUVOVUlURU0gIibR7uTl8Obg7ejlXHRGMSIgLAkJCUlEX0hFTFAKCQlNRU5VSVRFTSAiJs/u6PHqLi4uXHRGMSIgLAkJCUlEX0hFTFAKCQlNRU5VSVRFTSAiJsjx7+7r/Ofu4uDt6OUg8e/w4OLq6Fx0RjEiICwJCQlJRF9IRUxQX1VTSU5HCgkJTUVOVUlURU0gU0VQQVJBVE9SCgkJTUVOVUlURU0gIibOIFdpbmVmaWxlLi4uIiAsCQkJSURfQUJPVVQKCQlNRU5VSVRFTSAiziAmV2luZS4uLiIgLAkJCUlEX0FCT1VUX1dJTkUKCX0KfQoKCklERF9FWEVDVVRFIERJQUxPRyBGSVhFRCBJTVBVUkUgMTUsIDEzLCAyMTAsIDYzClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIsL77+7r7ejy/CIKRk9OVCA4LCAiTVMgU2hlbGwgRGxnIgp7CglDT05UUk9MIAkJIiIsIDEwMSwgIlN0YXRpYyIsIFNTX1NJTVBMRXxTU19OT1BSRUZJWCwgMywgNiwgMTYyLCAxMAoJQ09OVFJPTCAJCSImyu7s4O3k4DoiICwgLTEsICJTdGF0aWMiLCBTU19MRUZUTk9XT1JEV1JBUHxXU19HUk9VUCwgMywgMTgsIDYwLCAxMAoJRURJVFRFWFQJCTIwMSwgMywgMjksIDEzNCwgMTIsIEVTX0FVVE9IU0NST0xMCglDT05UUk9MIAkJIsrg6iAm8ejs4u7rIiAsIDIxNCwgIkJ1dHRvbiIsIEJTX0FVVE9DSEVDS0JPWHxXU19UQUJTVE9QLDMsIDQ1LCA3MSwgMTIKCURFRlBVU0hCVVRUT04JIk9LIiAsIDEsIDE1OCwgNiwgNDcsIDE0CglQVVNIQlVUVE9OCQkizvLs5e3gIiAsIDIsIDE1OCwgMjMsIDQ3LCAxNAoJUFVTSEJVVFRPTgkJIibR7/Dg4urgIiAsIDI1NCwgMTU4LCA0MywgNDcsIDE0Cn0K