LyoqCiAqIEBmaWxlIG1taV9tc2cuaAogKiBAYnJpZWYgzOG5qcHLbW1pz/vPor3Tv9q6zc/7z6K94bm5tqjS5QogKgogKiBDb3B5cmlnaHQgKEMpIDIwMTcgU2FuZWNoaXBzIFRlY2hub2xvZ3kgQ28uLCBMdGQuCiAqIEBhdXRob3IKICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqLwoKI2lmbmRlZiBfX01NSV9NU0dfSF9fCiNkZWZpbmUgX19NTUlfTVNHX0hfXwojaW5jbHVkZSAibWVzc2FnZS5oIgoKCi8qz7XNs9DFz6Ky6dGvKi8KdHlwZWRlZiBzdHJ1Y3QgewoJc2lnbmVkIGxvbmcgICAgIHNydlN0YXR1czsgICAgICAgIC8qz7XNs7f+zvHXtMysICAqLwoJc2lnbmVkIGxvbmcgICAgIHNydkRvbWFpbjsgICAgICAgIC8qz7XNs7f+zvHT8iAgICAqLwoJc2lnbmVkIGxvbmcgICAgIHJvYW1TdGF0dXM7ICAgICAgIC8qwv7Tzte0zKwgICAgICAqLwoJc2lnbmVkIGxvbmcgICAgIHN5c01vZGU7ICAgICAgICAgIC8qz7XNs8Sjyr0gICAgICAqLwoJc2lnbmVkIGxvbmcgICAgIHNpbVN0YXRlOyAgICAgICAgIC8qU0lNv6jXtMysICAgICAqLwoJc2lnbmVkIGxvbmcgICAgIHJlc2VydmU7ICAgICAgICAgIC8qsaPB9Na1ICAgICAgICovCglzaWduZWQgbG9uZyAgICAgc3lzU3VibW9kZTsgICAgICAgLyrPtc2z19PEo8q9ICAgICovCn0gVF96QXRfU3lzaW5mb1JlczsKCgovKiDP+8+iveG5uczlICovCnR5cGVkZWYgc3RydWN0IHsKCXVuc2lnbmVkIGNoYXIgc21zX3VucmVhZF9pbmQ7IC8vMDrO3s60tsG2zNDFo7sgMTrT0M60tsG2zNDFCgl1bnNpZ25lZCBjaGFyIHNtc19tZW1vcnlfZnVsbF9pbmQ7IC8vMDqyu8L6OyAxOiDC+goJdW5zaWduZWQgY2hhciBzbXNfbmV3X2luZDsKCXVuc2lnbmVkIGNoYXIgc21zX2lzX3JlYWRpbmc7Cgl1bnNpZ25lZCBjaGFyIHNtc191bnJlYWRfY291bnQ7Cn0gVF96VWZpX1Ntc1N0YXR1c0luZm9JbmQ7CgovKiC52Lv61tjG9M/7z6LKtbzKstnX99a1ICovCnR5cGVkZWYgZW51bSB7CglFeHRfQ21kX0Jhc2UgPSAwLAoJRXh0X0NtZF9SRUJPT1QsCglFeHRfQ21kX1BPV0VST0ZGLAoJRXh0X0NtZF9QT1dFUk9GRl9DSEFSR0lORywKCUV4dF9DbWRfUE9XRVJPRkZfRkFLRSwKCUV4dF9DbWRfUE9XRVJPRkZfQ0xPQ0ssCglFeHRfQ21kX01BWAp9IFRfelVmaV9FeHRDbWQ7CgpzdHJ1Y3QgZXh0X21zZ19kYXRhIHsKCWludCBjbWQ7Cn07CgovL2F1dG90ZXN0INfUtq+7r7LiytTP+8+iyv2+3Qp0eXBlZGVmIHN0cnVjdCAgewoJU0lOVDMyIGNvZGU7CglTSU5UMzIgdmFsdWU7Cn0gYXV0b3Rlc3Rfa2V5X3JzcG1zZzsKCi8vx+vO4rrsvattbWnE2rK/z/vPosq508O1xM/7z6LC66Os0rLM7bzTtb3V4sDvCmVudW0gbW1pX21zZ19jbWQgewoJTVNHX0NNRF9DSEFOTkVMX05FVFdPUktfTU9ERSA9IE1TR19DTURfTU1JX0JBU0UsCglNU0dfQ01EX01VTFRJX0NPTk5FQ1RfU1RBVFVTLC8vyse38bTm1Nq24MK3UERQvKS77goJTVNHX0NNRF9DSEFOTkVMX0NPTk5FQ1RfU1RBVFVTLAoJTVNHX0NNRF9TTVNfU1RBVFVTX0lORk9fSU5ELAoJTVNHX0NNRF9PVVRfUkVHX0dFVF9TSUdOQUxfTlVNLAoJTVNHX0NNRF9NT0RJRllfU1NJRF9LRVksCglNU0dfQ01EX0dFVF9UUkFGRklDX0lORk9fU1RBUlQsCglNU0dfQ01EX0dFVF9UUkFGRklDX0lORk9fRU5ELAoJTVNHX0NNRF9UUkFGRklDX0lORk9fUkVTRVQsCglNU0dfQ01EX0dFVF9ORVRfUFJPVklERVIsCglNU0dfQ01EX1NFVF9VU0JfTU9ERSwKCU1TR19DTURfVk9JUF9TVEFUVVNfSU5GTywKCU1TR19DTURfU1RBX0NPVU5UX0NIQU5HRSwKCU1TR19DTURfUE9XRVJPRkZfUExVR09VVF9SRVNVTFQsCglNU0dfQ01EX1NPQ0tFVF9TVEFURV9DSEFOR0UsICAgIC8vxNrWw3NvY2tldCBjb25uZWN0IHN0YXRlCglNU0dfQ01EX01DVVNPQ0tFVF9TVEFURV9DSEFOR0UsIC8vzeLWw3NvY2tldCBjb25uZWN0IHN0YXRlCglNU0dfQ01EX01NSUdFVF9XSUZJX1NUQU5VTSwvL8/Cw+bKx01NSSDE2rK/yrnTw7XEz/vPogoJTVNHX0NNRF9NTUlTVEFSVF9CQUNLTElHSFRPRkZfVElNRVIsCglNU0dfQ01EX01NSUNIRUNLX1RJUF9JTkZPLAoJTVNHX0NNRF9NTUlTSE9XX1NTSURfSU5GTywKCU1TR19DTURfTU1JR0VUX1dJRklfREFUQSwKCU1TR19DTURfUkoxMV9TVEFUVVNfSU5GTywgLy/SotS2Y3BlCi8vI2lmZGVmIF9FTkFCTEVfQVVUT1RFU1QKCU1TR19DTURfQVVUT1RFU1RfS0VZX1JFUSwKLy8jZW5kaWYKfTsKCiNlbmRpZgoK