ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggZTY2MzVkMS4uN2QyOWM0ZiAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTI0MSw3ICsyNDEsNyBAQAogI2RlZmluZSBEQUNfQ0hJUENPTk5FQ1RfRU5BQkxFICAgICAgICBEQUNfQ0hJUENPTk5FQ1RfSU5URVJOQUwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyRjQpCisjaWYgZGVmaW5lZChTVE0zMkwxKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkc0KQogI2RlZmluZSBIQUxfREFDX01TUF9JTklUX0NCX0lEICAgICAgIEhBTF9EQUNfTVNQSU5JVF9DQl9JRAogI2RlZmluZSBIQUxfREFDX01TUF9ERUlOSVRfQ0JfSUQgICAgIEhBTF9EQUNfTVNQREVJTklUX0NCX0lECiAjZW5kaWYKQEAgLTMxMyw4ICszMTMsOCBAQAogI2VuZGlmIC8qIFNUTTMyTDQgKi8KIAogI2lmIGRlZmluZWQoU1RNMzJHMCkKLSNkZWZpbmUgRE1BX1JFUVVFU1RfREFDMV9DSEFOTkVMMQkJCQkJCQkJIERNQV9SRVFVRVNUX0RBQzFfQ0gxCi0jZGVmaW5lIERNQV9SRVFVRVNUX0RBQzFfQ0hBTk5FTDIJCQkJCQkJCSBETUFfUkVRVUVTVF9EQUMxX0NIMgorI2RlZmluZSBETUFfUkVRVUVTVF9EQUMxX0NIQU5ORUwxICAgICAgICAgICAgICAgIERNQV9SRVFVRVNUX0RBQzFfQ0gxCisjZGVmaW5lIERNQV9SRVFVRVNUX0RBQzFfQ0hBTk5FTDIgICAgICAgICAgICAgICAgRE1BX1JFUVVFU1RfREFDMV9DSDIKICNlbmRpZgogCiAjaWYgZGVmaW5lZChTVE0zMkg3KQpAQCAtNTc5LDggKzU3OSw3IEBACiAjZGVmaW5lIEdQSU9fQUYxMF9TRElPMiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQSU9fQUYxMF9TRE1NQzIKICNkZWZpbmUgR1BJT19BRjExX1NESU8yICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BJT19BRjExX1NETU1DMgogCi0jaWYgZGVmaW5lZCAoU1RNMzJINzQzeHgpIHx8IGRlZmluZWQgKFNUTTMySDc1M3h4KSAgfHwgZGVmaW5lZCAoU1RNMzJINzUweHgpIHx8IGRlZmluZWQgKFNUTTMySDc0Mnh4KSBcCi0gICAgfHwgZGVmaW5lZCAoU1RNMzJINzQ1eHgpIHx8IGRlZmluZWQgKFNUTTMySDc1NXh4KSAgfHwgZGVmaW5lZCAoU1RNMzJINzQ3eHgpIHx8IGRlZmluZWQgKFNUTTMySDc1N3h4KQorI2lmIGRlZmluZWQgKFNUTTMySDc0M3h4KSB8fCBkZWZpbmVkIChTVE0zMkg3NTN4eCkgIHx8IGRlZmluZWQgKFNUTTMySDc1MHh4KSB8fCBkZWZpbmVkIChTVE0zMkg3NDJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJINzQ1eHgpIHx8IGRlZmluZWQgKFNUTTMySDc1NXh4KSAgfHwgZGVmaW5lZCAoU1RNMzJINzQ3eHgpIHx8IGRlZmluZWQgKFNUTTMySDc1N3h4KQogI2RlZmluZSBHUElPX0FGMTBfT1RHMl9IUyAgR1BJT19BRjEwX09URzJfRlMKICNkZWZpbmUgR1BJT19BRjEwX09URzFfRlMgIEdQSU9fQUYxMF9PVEcxX0hTCiAjZGVmaW5lIEdQSU9fQUYxMl9PVEcyX0ZTICBHUElPX0FGMTJfT1RHMV9GUwpAQCAtOTU1LDcgKzk1NCw3IEBACiAjZGVmaW5lIE9QQU1QX1BHQUNPTk5FQ1RfVk0wICAgICAgICAgICAgICAgICAgT1BBTVBfUEdBX0NPTk5FQ1RfSU5WRVJUSU5HSU5QVVRfSU8wCiAjZGVmaW5lIE9QQU1QX1BHQUNPTk5FQ1RfVk0xICAgICAgICAgICAgICAgICAgT1BBTVBfUEdBX0NPTk5FQ1RfSU5WRVJUSU5HSU5QVVRfSU8xCiAKLSNpZiBkZWZpbmVkKFNUTTMyTDEpIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkg3KQorI2lmIGRlZmluZWQoU1RNMzJMMSkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMkc0KQogI2RlZmluZSBIQUxfT1BBTVBfTVNQX0lOSVRfQ0JfSUQgICAgICAgSEFMX09QQU1QX01TUElOSVRfQ0JfSUQKICNkZWZpbmUgSEFMX09QQU1QX01TUF9ERUlOSVRfQ0JfSUQgICAgIEhBTF9PUEFNUF9NU1BERUlOSVRfQ0JfSUQKICNlbmRpZgpAQCAtMTAxNCw3ICsxMDEzLDcgQEAKIC8qKgogICAqIEB9CiAgICovCi0KKyAgCiAvKiogQGRlZmdyb3VwIEhBTF9SVENfQWxpYXNlZF9EZWZpbmVzIEhBTCBSVEMgQWxpYXNlZCBEZWZpbmVzIG1haW50YWluZWQgZm9yIGxlZ2FjeSBwdXJwb3NlCiAgICogQHsKICAgKi8KQEAgLTE0NDksNiArMTQ0OCwzMCBAQAogCiAjZGVmaW5lIEhBU0hfSE1BQ0tleVR5cGVfU2hvcnRLZXkgIEhBU0hfSE1BQ19LRVlUWVBFX1NIT1JUS0VZCiAjZGVmaW5lIEhBU0hfSE1BQ0tleVR5cGVfTG9uZ0tleSAgIEhBU0hfSE1BQ19LRVlUWVBFX0xPTkdLRVkKKworI2lmIGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkg3KQorCisjZGVmaW5lIEhBTF9IQVNIX01ENV9BY2N1bXVsYXRlICAgICAgICAgICAgICAgIEhBTF9IQVNIX01ENV9BY2NtbHQKKyNkZWZpbmUgSEFMX0hBU0hfTUQ1X0FjY3VtdWxhdGVfRW5kICAgICAgICAgICAgSEFMX0hBU0hfTUQ1X0FjY21sdF9FbmQKKyNkZWZpbmUgSEFMX0hBU0hfTUQ1X0FjY3VtdWxhdGVfSVQgICAgICAgICAgICAgSEFMX0hBU0hfTUQ1X0FjY21sdF9JVAorI2RlZmluZSBIQUxfSEFTSF9NRDVfQWNjdW11bGF0ZV9FbmRfSVQgICAgICAgICBIQUxfSEFTSF9NRDVfQWNjbWx0X0VuZF9JVAorCisjZGVmaW5lIEhBTF9IQVNIX1NIQTFfQWNjdW11bGF0ZSAgICAgICAgICAgICAgIEhBTF9IQVNIX1NIQTFfQWNjbWx0CisjZGVmaW5lIEhBTF9IQVNIX1NIQTFfQWNjdW11bGF0ZV9FbmQgICAgICAgICAgIEhBTF9IQVNIX1NIQTFfQWNjbWx0X0VuZAorI2RlZmluZSBIQUxfSEFTSF9TSEExX0FjY3VtdWxhdGVfSVQgICAgICAgICAgICBIQUxfSEFTSF9TSEExX0FjY21sdF9JVAorI2RlZmluZSBIQUxfSEFTSF9TSEExX0FjY3VtdWxhdGVfRW5kX0lUICAgICAgICBIQUxfSEFTSF9TSEExX0FjY21sdF9FbmRfSVQKKworI2RlZmluZSBIQUxfSEFTSEV4X1NIQTIyNF9BY2N1bXVsYXRlICAgICAgICAgICBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHQKKyNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyMjRfQWNjdW11bGF0ZV9FbmQgICAgICAgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZAorI2RlZmluZSBIQUxfSEFTSEV4X1NIQTIyNF9BY2N1bXVsYXRlX0lUICAgICAgICBIQUxfSEFTSEV4X1NIQTIyNF9BY2NtbHRfSVQKKyNkZWZpbmUgSEFMX0hBU0hFeF9TSEEyMjRfQWNjdW11bGF0ZV9FbmRfSVQgICAgSEFMX0hBU0hFeF9TSEEyMjRfQWNjbWx0X0VuZF9JVAorCisjZGVmaW5lIEhBTF9IQVNIRXhfU0hBMjU2X0FjY3VtdWxhdGUgICAgICAgICAgIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdAorI2RlZmluZSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2N1bXVsYXRlX0VuZCAgICAgICBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfRW5kCisjZGVmaW5lIEhBTF9IQVNIRXhfU0hBMjU2X0FjY3VtdWxhdGVfSVQgICAgICAgIEhBTF9IQVNIRXhfU0hBMjU2X0FjY21sdF9JVAorI2RlZmluZSBIQUxfSEFTSEV4X1NIQTI1Nl9BY2N1bXVsYXRlX0VuZF9JVCAgICBIQUxfSEFTSEV4X1NIQTI1Nl9BY2NtbHRfRW5kX0lUCisKKyNlbmRpZiAgLyogU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkg3ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTUwNywxMyArMTUzMCwxMyBAQAogCiAjZGVmaW5lIEhBTF9JMkNGYXN0TW9kZVBsdXNDb25maWcoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cywgY21kKSAoKChjbWQpPT1FTkFCTEUpPyBIQUxfSTJDRXhfRW5hYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpOiBIQUxfSTJDRXhfRGlzYWJsZUZhc3RNb2RlUGx1cyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzKSkKIAotI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRzQpCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkYwKSB8fCBkZWZpbmVkKFNUTTMyRjEpIHx8IGRlZmluZWQoU1RNMzJGMikgfHwgZGVmaW5lZChTVE0zMkYzKSB8fCBkZWZpbmVkKFNUTTMyRjQpIHx8IGRlZmluZWQoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkwwKSB8fCBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMkc0KQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9SZWNlaXZlX0lUICAgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICAgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfSVQKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1JlY2VpdmVfSVQgICAgSEFMX0kyQ19TbGF2ZV9TZXFfUmVjZWl2ZV9JVAogI2VuZGlmIC8qIFNUTTMySDcgfHwgU1RNMzJXQiAgfHwgU1RNMzJHMCB8fCBTVE0zMkYwIHx8IFNUTTMyRjEgfHwgU1RNMzJGMiB8fCBTVE0zMkYzIHx8IFNUTTMyRjQgfHwgU1RNMzJGNyB8fCBTVE0zMkwwIHx8IFNUTTMyTDQgfHwgU1RNMzJMNSB8fCBTVE0zMkc0ICovCi0jaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyRzQpCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCkKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9ETUEgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1JlY2VpdmVfRE1BICBIQUxfSTJDX01hc3Rlcl9TZXFfUmVjZWl2ZV9ETUEKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1RyYW5zbWl0X0RNQSAgSEFMX0kyQ19TbGF2ZV9TZXFfVHJhbnNtaXRfRE1BCkBAIC0xNTM5LDEwICsxNTYyLDEwIEBACiAgICovCiAKICNpZiBkZWZpbmVkKFNUTTMyRzApCi0jZGVmaW5lIEhBTF9QV1JfQ29uZmlnUFZECQkJCQkJCQkJCQkJCQkJSEFMX1BXUkV4X0NvbmZpZ1BWRAotI2RlZmluZSBIQUxfUFdSX0VuYWJsZVBWRAkJCQkJCQkJCQkJCQkJCUhBTF9QV1JFeF9FbmFibGVQVkQKLSNkZWZpbmUgSEFMX1BXUl9EaXNhYmxlUFZECQkJCQkJCQkJCQkJCSAgSEFMX1BXUkV4X0Rpc2FibGVQVkQKLSNkZWZpbmUgSEFMX1BXUl9QVkRfSVJRSGFuZGxlcgkJCQkJCQkJCQkJICBIQUxfUFdSRXhfUFZEX0lSUUhhbmRsZXIKKyNkZWZpbmUgSEFMX1BXUl9Db25maWdQVkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9Db25maWdQVkQKKyNkZWZpbmUgSEFMX1BXUl9FbmFibGVQVkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9FbmFibGVQVkQKKyNkZWZpbmUgSEFMX1BXUl9EaXNhYmxlUFZEICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlUFZECisjZGVmaW5lIEhBTF9QV1JfUFZEX0lSUUhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICBIQUxfUFdSRXhfUFZEX0lSUUhhbmRsZXIKICNlbmRpZgogI2RlZmluZSBIQUxfUFdSX1BWRENvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX1BXUl9Db25maWdQVkQKICNkZWZpbmUgSEFMX1BXUl9EaXNhYmxlQmtVcFJlZyAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9QV1JFeF9EaXNhYmxlQmtVcFJlZwpAQCAtMzIxOSw5ICszMjQyLDggQEAKICNkZWZpbmUgUkNDX01DT1NPVVJDRV9QTExDTEtfTk9ESVYgIFJDQ19NQ08xU09VUkNFX1BMTENMSwogI2RlZmluZSBSQ0NfTUNPU09VUkNFX1BMTENMS19ESVYyICAgUkNDX01DTzFTT1VSQ0VfUExMQ0xLX0RJVjIKIAotI2lmIGRlZmluZWQoU1RNMzJMNCkKKyNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMldMKQogI2RlZmluZSBSQ0NfUlRDQ0xLU09VUkNFX05PX0NMSyAgICAgUkNDX1JUQ0NMS1NPVVJDRV9OT05FCi0jZWxpZiBkZWZpbmVkKFNUTTMyV0IpIHx8IGRlZmluZWQoU1RNMzJHMCkgfHwgZGVmaW5lZChTVE0zMkc0KQogI2Vsc2UKICNkZWZpbmUgUkNDX1JUQ0NMS1NPVVJDRV9OT05FICAgICAgIFJDQ19SVENDTEtTT1VSQ0VfTk9fQ0xLCiAjZW5kaWYKQEAgLTMzNDksNyArMzM3MSw3IEBACiAvKiogQGRlZmdyb3VwIEhBTF9SVENfQWxpYXNlZF9NYWNyb3MgSEFMIFJUQyBBbGlhc2VkIE1hY3JvcyBtYWludGFpbmVkIGZvciBsZWdhY3kgcHVycG9zZQogICAqIEB7CiAgICovCi0jaWYgZGVmaW5lZCAoU1RNMzJHMCkgfHwgZGVmaW5lZCAoU1RNMzJMNDEyeHgpIHx8IGRlZmluZWQgKFNUTTMyTDQyMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0UDV4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFE1eHgpIHx8IGRlZmluZWQgU1RNMzJHNAorI2lmIGRlZmluZWQgKFNUTTMyRzApIHx8IGRlZmluZWQgKFNUTTMyTDUpIHx8IGRlZmluZWQgKFNUTTMyTDQxMnh4KSB8fCBkZWZpbmVkIChTVE0zMkw0MjJ4eCkgfHwgZGVmaW5lZCAoU1RNMzJMNFA1eHgpIHx8IGRlZmluZWQgKFNUTTMyTDRRNXh4KSB8fCBkZWZpbmVkIChTVE0zMkc0KSB8fCBkZWZpbmVkIFNUTTMyV0wKICNlbHNlCiAjZGVmaW5lIF9fSEFMX1JUQ19DTEVBUl9GTEFHICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX1JUQ19FWFRJX0NMRUFSX0ZMQUcKICNlbmRpZgpAQCAtMzQ1Nyw5ICszNDc5LDkgQEAKICNkZWZpbmUgIF9fSEFMX1NEX1NESU9fQ0xFQVJfRkxBRyAgIF9fSEFMX1NEX1NETU1DX0NMRUFSX0ZMQUcKICNkZWZpbmUgIF9fSEFMX1NEX1NESU9fR0VUX0lUICAgICAgIF9fSEFMX1NEX1NETU1DX0dFVF9JVAogI2RlZmluZSAgX19IQUxfU0RfU0RJT19DTEVBUl9JVCAgICAgX19IQUxfU0RfU0RNTUNfQ0xFQVJfSVQKLSNkZWZpbmUgIFNESU9fU1RBVElDX0ZMQUdTCSAgICAgICAgU0RNTUNfU1RBVElDX0ZMQUdTCi0jZGVmaW5lICBTRElPX0NNRDBUSU1FT1VUCSAgICAgICAgICBTRE1NQ19DTUQwVElNRU9VVAotI2RlZmluZSAgU0RfU0RJT19TRU5EX0lGX0NPTkQJICAgICAgU0RfU0RNTUNfU0VORF9JRl9DT05ECisjZGVmaW5lICBTRElPX1NUQVRJQ19GTEFHUyAgICAgICAgICBTRE1NQ19TVEFUSUNfRkxBR1MKKyNkZWZpbmUgIFNESU9fQ01EMFRJTUVPVVQgICAgICAgICAgIFNETU1DX0NNRDBUSU1FT1VUCisjZGVmaW5lICBTRF9TRElPX1NFTkRfSUZfQ09ORCAgICAgICBTRF9TRE1NQ19TRU5EX0lGX0NPTkQKIC8qIGFsaWFzIENNU0lTIGZvciBjb21wYXRpYmlsaXRpZXMgKi8KICNkZWZpbmUgIFNESU9fSVJRbiAgICAgICAgICAgICAgICAgIFNETU1DMV9JUlFuCiAjZGVmaW5lICBTRElPX0lSUUhhbmRsZXIgICAgICAgICAgICBTRE1NQzFfSVJRSGFuZGxlcgpAQCAtMzQ3Miw3ICszNDk0LDcgQEAKICNkZWZpbmUgIEhBTF9TRF9DYXJkU3RhdGVUeXBlZGVmICAgICBIQUxfU0RfQ2FyZFN0YXRlVHlwZURlZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFNUTTMySDcpCisjaWYgZGVmaW5lZChTVE0zMkg3KSB8fCBkZWZpbmVkKFNUTTMyTDUpCiAjZGVmaW5lIEhBTF9NTUNFeF9SZWFkX0RNQURvdWJsZUJ1ZmZlcjBDcGx0Q2FsbGJhY2sgICBIQUxfTU1DRXhfUmVhZF9ETUFEb3VibGVCdWYwQ3BsdENhbGxiYWNrCiAjZGVmaW5lIEhBTF9NTUNFeF9SZWFkX0RNQURvdWJsZUJ1ZmZlcjFDcGx0Q2FsbGJhY2sgICBIQUxfTU1DRXhfUmVhZF9ETUFEb3VibGVCdWYxQ3BsdENhbGxiYWNrCiAjZGVmaW5lIEhBTF9NTUNFeF9Xcml0ZV9ETUFEb3VibGVCdWZmZXIwQ3BsdENhbGxiYWNrICBIQUxfTU1DRXhfV3JpdGVfRE1BRG91YmxlQnVmMENwbHRDYWxsYmFjawpAQCAtMzcyNyw5ICszNzQ5LDkgQEAKIC8qKiBAZGVmZ3JvdXAgSEFMX1FTUElfQWxpYXNlZF9NYWNyb3MgSEFMIFFTUEkgQWxpYXNlZCBNYWNyb3MgbWFpbnRhaW5lZCBmb3IgbGVnYWN5IHB1cnBvc2UKICAgKiBAewogICAqLwotI2lmIGRlZmluZWQgKFNUTTMyTDQpCisjaWYgZGVmaW5lZCAoU1RNMzJMNCkgfHwgZGVmaW5lZCAoU1RNMzJGNCkgfHwgZGVmaW5lZCAoU1RNMzJGNykgfHwgZGVmaW5lZChTVE0zMkg3KQogI2RlZmluZSBIQUxfUVBTSV9USU1FT1VUX0RFRkFVTFRfVkFMVUUgSEFMX1FTUElfVElNRU9VVF9ERUZBVUxUX1ZBTFVFCi0jZW5kaWYKKyNlbmRpZiAvKiBTVE0zMkw0IHx8IFNUTTMyRjQgfHwgU1RNMzJGNyAqLwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfaGFsLmggYi9JbmMvc3RtMzJ3Ynh4X2hhbC5oCmluZGV4IGI2OTU0NGYuLjRlMTMwZDQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfaGFsLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9oYWwuaApAQCAtMzgsMjMgKzM4LDI2IEBACiAgICogQHsKICAgKi8KICAgCi0vKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBIQUxfRXhwb3J0ZWRfQ29uc3RhbnRzIEhBTCBFeHBvcnRlZCBDb25zdGFudHMKLSAgKiBAewotICAqLwotICAKIC8qKiBAZGVmZ3JvdXAgSEFMX1RJQ0tfRlJFUSBUaWNrIEZyZXF1ZW5jeQogICAqIEB7CiAgICovCi0jZGVmaW5lICBIQUxfVElDS19GUkVRXzEwSFogICAgICAgICAxMDBVCi0jZGVmaW5lICBIQUxfVElDS19GUkVRXzEwMEhaICAgICAgICAxMFUKLSNkZWZpbmUgIEhBTF9USUNLX0ZSRVFfMUtIWiAgICAgICAgIDFVCi0jZGVmaW5lICBIQUxfVElDS19GUkVRX0RFRkFVTFQgICAgICBIQUxfVElDS19GUkVRXzFLSFoKK3R5cGVkZWYgZW51bQoreworICBIQUxfVElDS19GUkVRXzEwSFogICAgICAgICA9IDEwMFUsCisgIEhBTF9USUNLX0ZSRVFfMTAwSFogICAgICAgID0gMTBVLAorICBIQUxfVElDS19GUkVRXzFLSFogICAgICAgICA9IDFVLAorICBIQUxfVElDS19GUkVRX0RFRkFVTFQgICAgICA9IEhBTF9USUNLX0ZSRVFfMUtIWgorfSBIQUxfVGlja0ZyZXFUeXBlRGVmOwogCiAvKioKICAgKiBAfQogICAqLwogICAKKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIEhBTF9FeHBvcnRlZF9Db25zdGFudHMgSEFMIEV4cG9ydGVkIENvbnN0YW50cworICAqIEB7CisgICovCisKIC8qKiBAZGVmZ3JvdXAgU1lTQ0ZHX0V4cG9ydGVkX0NvbnN0YW50cyBTWVNDRkcgRXhwb3J0ZWQgQ29uc3RhbnRzCiAgICogQHsKICAgKi8KQEAgLTU5NCw4ICs1OTcsOCBAQAogdm9pZCBIQUxfRGVsYXkodWludDMyX3QgRGVsYXkpOwogdWludDMyX3QgSEFMX0dldFRpY2sodm9pZCk7CiB1aW50MzJfdCBIQUxfR2V0VGlja1ByaW8odm9pZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfU2V0VGlja0ZyZXEodWludDMyX3QgRnJlcSk7Ci11aW50MzJfdCBIQUxfR2V0VGlja0ZyZXEodm9pZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfU2V0VGlja0ZyZXEoSEFMX1RpY2tGcmVxVHlwZURlZiBGcmVxKTsKK0hBTF9UaWNrRnJlcVR5cGVEZWYgSEFMX0dldFRpY2tGcmVxKHZvaWQpOwogdm9pZCBIQUxfU3VzcGVuZFRpY2sodm9pZCk7CiB2b2lkIEhBTF9SZXN1bWVUaWNrKHZvaWQpOwogdWludDMyX3QgSEFMX0dldEhhbFZlcnNpb24odm9pZCk7CkBAIC02MzAsNyArNjMzLDcgQEAKICAgKi8KIGV4dGVybiBfX0lPIHVpbnQzMl90IHV3VGljazsKIGV4dGVybiB1aW50MzJfdCB1d1RpY2tQcmlvOwotZXh0ZXJuIHVpbnQzMl90IHV3VGlja0ZyZXE7CitleHRlcm4gSEFMX1RpY2tGcmVxVHlwZURlZiB1d1RpY2tGcmVxOwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfaGFsX2FkYy5oIGIvSW5jL3N0bTMyd2J4eF9oYWxfYWRjLmgKaW5kZXggNTE3OTBmYy4uMDk2OGJhOSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyd2J4eF9oYWxfYWRjLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9oYWxfYWRjLmgKQEAgLTEyNSw4ICsxMjUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGF1dG9tYXRpY2FsbHkgYWRhcHRzIHRoZSBmcmVxdWVuY3kgb2YgQURDIGNvbnZlcnNpb25zIHRyaWdnZXJzIHRvIHRoZSBzcGVlZCBvZiB0aGUgc3lzdGVtIHRoYXQgcmVhZHMgdGhlIGRhdGEuIE1vcmVvdmVyLCB0aGlzIGF2b2lkcyByaXNrIG9mIG92ZXJydW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBsb3cgZnJlcXVlbmN5IGFwcGxpY2F0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gRU5BQkxFIG9yIERJU0FCTEUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiBEbyBub3QgdXNlIHdpdGggaW50ZXJydXB0aW9uIG9yIERNQSAoSEFMX0FEQ19TdGFydF9JVCgpLCBIQUxfQURDX1N0YXJ0X0RNQSgpKSBzaW5jZSB0aGV5IGNsZWFyIGltbWVkaWF0ZWx5IHRoZSBFT0MgZmxhZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZnJlZSB0aGUgSVJRIHZlY3RvciBzZXF1ZW5jZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHdpdGggaW50ZXJydXB0aW9uIG9yIERNQSAoSEFMX0FEQ19TdGFydF9JVCgpLCBIQUxfQURDX1N0YXJ0X0RNQSgpKSBzaW5jZSB0aGVzZSBtb2RlcyBoYXZlIHRvIGNsZWFyIGltbWVkaWF0ZWx5IHRoZSBFT0MgZmxhZyAoYnkgQ1BVIHRvIGZyZWUgdGhlIElSUSBwZW5kaW5nIGV2ZW50IG9yIGJ5IERNQSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvIHdhaXQgd2lsbCB3b3JrIGJ1dCBmb3J0IGEgdmVyeSBzaG9ydCB0aW1lLCBkaXNjYXJkaW5nIGl0cyBpbnRlbmRlZCBiZW5lZml0IChleGNlcHQgc3BlY2lmaWMgY2FzZSBvZiBoaWdoIGxvYWQgb2YgQ1BVIG9yIERNQSB0cmFuc2ZlcnMgd2hpY2ggY2FuIGp1c3RpZnkgdXNhZ2Ugb2YgYXV0byB3YWl0KS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIHVzZSB3aXRoIHBvbGxpbmc6IDEuIFN0YXJ0IGNvbnZlcnNpb24gd2l0aCBIQUxfQURDX1N0YXJ0KCksIDIuIExhdGVyIG9uLCB3aGVuIEFEQyBjb252ZXJzaW9uIGRhdGEgaXMgbmVlZGVkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlIEhBTF9BRENfUG9sbEZvckNvbnZlcnNpb24oKSB0byBlbnN1cmUgdGhhdCBjb252ZXJzaW9uIGlzIGNvbXBsZXRlZCBhbmQgSEFMX0FEQ19HZXRWYWx1ZSgpIHRvIHJldHJpZXZlIGNvbnZlcnNpb24gcmVzdWx0IGFuZCB0cmlnIGFub3RoZXIgY29udmVyc2lvbiBzdGFydC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbiBjYXNlIG9mIHVzYWdlIG9mIEFEQyBncm91cCBpbmplY3RlZCwgdXNlIHRoZSBlcXVpdmFsZW50IGZ1bmN0aW9ucyBIQUxfQURDRXhJbmplY3RlZF9TdGFydCgpLCBIQUxfQURDRXhfSW5qZWN0ZWRHZXRWYWx1ZSgpLCAuLi4pLiAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyd2J4eF9oYWxfZXh0aS5oIGIvSW5jL3N0bTMyd2J4eF9oYWxfZXh0aS5oCmluZGV4IGUxNjk3OTYuLmExMjIzNjkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfaGFsX2V4dGkuaAorKysgYi9JbmMvc3RtMzJ3Ynh4X2hhbF9leHRpLmgKQEAgLTEwNSwxOCArMTA1LDM5IEBACiAjZGVmaW5lIEVYVElfTElORV8xNyAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0NPTkZJRyAgIHwgRVhUSV9FVkVOVCB8IEVYVElfUkVHMSB8IDB4MTF1KQogI2RlZmluZSBFWFRJX0xJTkVfMTggICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9DT05GSUcgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzEgfCAweDEydSkKICNkZWZpbmUgRVhUSV9MSU5FXzE5ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfQ09ORklHICAgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUcxIHwgMHgxM3UpCisjaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KSB8fCBkZWZpbmVkIChTVE0zMldCMzV4eCkKICNkZWZpbmUgRVhUSV9MSU5FXzIwICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfQ09ORklHICAgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUcxIHwgMHgxNHUpCiAjZGVmaW5lIEVYVElfTElORV8yMSAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0NPTkZJRyAgIHwgRVhUSV9FVkVOVCB8IEVYVElfUkVHMSB8IDB4MTV1KQorI2Vsc2UKKyNkZWZpbmUgRVhUSV9MSU5FXzIwICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfUkVTRVJWRUQgfCAgICAgICAgICAgICAgRVhUSV9SRUcxIHwgMHgxNHUpCisjZGVmaW5lIEVYVElfTElORV8yMSAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX1JFU0VSVkVEIHwgICAgICAgICAgICAgIEVYVElfUkVHMSB8IDB4MTV1KQorI2VuZGlmCiAjZGVmaW5lIEVYVElfTElORV8yMiAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0RJUkVDVCAgIHwgICAgICAgICAgICAgIEVYVElfUkVHMSB8IDB4MTZ1KQorI2lmIGRlZmluZWQgKFNUTTMyV0I1NXh4KSB8fCBkZWZpbmVkIChTVE0zMldCNU14eCkgfHwgZGVmaW5lZCAoU1RNMzJXQjM1eHgpCiAjZGVmaW5lIEVYVElfTElORV8yMyAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0RJUkVDVCAgIHwgICAgICAgICAgICAgIEVYVElfUkVHMSB8IDB4MTd1KQorI2Vsc2UKKyNkZWZpbmUgRVhUSV9MSU5FXzIzICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfUkVTRVJWRUQgfCAgICAgICAgICAgICAgRVhUSV9SRUcxIHwgMHgxN3UpCisjZW5kaWYKICNkZWZpbmUgRVhUSV9MSU5FXzI0ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfRElSRUNUICAgfCAgICAgICAgICAgICAgRVhUSV9SRUcxIHwgMHgxOHUpCisjaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KSB8fCBkZWZpbmVkIChTVE0zMldCMzV4eCkKICNkZWZpbmUgRVhUSV9MSU5FXzI1ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfRElSRUNUICAgfCAgICAgICAgICAgICAgRVhUSV9SRUcxIHwgMHgxOXUpCisjZWxzZQorI2RlZmluZSBFWFRJX0xJTkVfMjUgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCB8ICAgICAgICAgICAgICBFWFRJX1JFRzEgfCAweDE5dSkKKyNlbmRpZgogI2RlZmluZSBFWFRJX0xJTkVfMjYgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCB8ICAgICAgICAgICAgICBFWFRJX1JFRzEgfCAweDFBdSkKICNkZWZpbmUgRVhUSV9MSU5FXzI3ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfUkVTRVJWRUQgfCAgICAgICAgICAgICAgRVhUSV9SRUcxIHwgMHgxQnUpCisjaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KSB8fCBkZWZpbmVkIChTVE0zMldCMzV4eCkKICNkZWZpbmUgRVhUSV9MSU5FXzI4ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfRElSRUNUICAgfCAgICAgICAgICAgICAgRVhUSV9SRUcxIHwgMHgxQ3UpCisjZWxzZQorI2RlZmluZSBFWFRJX0xJTkVfMjggICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCB8ICAgICAgICAgICAgICBFWFRJX1JFRzEgfCAweDFDdSkKKyNlbmRpZgogI2RlZmluZSBFWFRJX0xJTkVfMjkgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8ICAgICAgICAgICAgICBFWFRJX1JFRzEgfCAweDFEdSkKICNkZWZpbmUgRVhUSV9MSU5FXzMwICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfRElSRUNUICAgfCAgICAgICAgICAgICAgRVhUSV9SRUcxIHwgMHgxRXUpCisjaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KSB8fCBkZWZpbmVkIChTVE0zMldCMzV4eCkKICNkZWZpbmUgRVhUSV9MSU5FXzMxICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfQ09ORklHICAgfCAgICAgICAgICAgICAgRVhUSV9SRUcxIHwgMHgxRnUpCisjZWxzZQorI2RlZmluZSBFWFRJX0xJTkVfMzEgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCB8ICAgICAgICAgICAgICBFWFRJX1JFRzEgfCAweDFGdSkKKyNlbmRpZgogI2RlZmluZSBFWFRJX0xJTkVfMzIgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCB8ICAgICAgICAgICAgICBFWFRJX1JFRzIgfCAweDAwdSkKICNkZWZpbmUgRVhUSV9MSU5FXzMzICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfQ09ORklHICAgfCAgICAgICAgICAgICAgRVhUSV9SRUcyIHwgMHgwMXUpCiAjZGVmaW5lIEVYVElfTElORV8zNCAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX1JFU0VSVkVEIHwgICAgICAgICAgICAgIEVYVElfUkVHMiB8IDB4MDJ1KQpAQCAtMTI4LDcgKzE0OSw3IEBACiAjZGVmaW5lIEVYVElfTElORV80MCAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0NPTkZJRyAgIHwgRVhUSV9FVkVOVCB8IEVYVElfUkVHMiB8IDB4MDh1KQogI2RlZmluZSBFWFRJX0xJTkVfNDEgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9DT05GSUcgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCAweDA5dSkKICNkZWZpbmUgRVhUSV9MSU5FXzQyICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfRElSRUNUICAgfCAgICAgICAgICAgICAgRVhUSV9SRUcyIHwgMHgwQXUpCi0jaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpCisjaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KQogI2RlZmluZSBFWFRJX0xJTkVfNDMgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8ICAgICAgICAgICAgICBFWFRJX1JFRzIgfCAweDBCdSkKICNlbHNlCiAjZGVmaW5lIEVYVElfTElORV80MyAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX1JFU0VSVkVEIHwgICAgICAgICAgICAgIEVYVElfUkVHMiB8IDB4MEJ1KQpAQCAtMTcwLDcgKzE5MSw3IEBACiAjZGVmaW5lIEVYVElfR1BJT0EgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDB1CiAjZGVmaW5lIEVYVElfR1BJT0IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDF1CiAjZGVmaW5lIEVYVElfR1BJT0MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJ1Ci0jaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpCisjaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KQogI2RlZmluZSBFWFRJX0dQSU9EICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzdQogI2VuZGlmCiAjZGVmaW5lIEVYVElfR1BJT0UgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDR1CkBAIC0yNjEsNyArMjgyLDcgQEAKIAogI2RlZmluZSBJU19FWFRJX0NPTkZJR19MSU5FKF9fTElORV9fKSAgICgoKF9fTElORV9fKSAmIEVYVElfQ09ORklHKSAhPSAweDAwdSkKIAotI2lmIGRlZmluZWQgKFNUTTMyV0I1NXh4KQorI2lmIGRlZmluZWQgKFNUTTMyV0I1NXh4KSB8fCBkZWZpbmVkIChTVE0zMldCNU14eCkKICNkZWZpbmUgSVNfRVhUSV9HUElPX1BPUlQoX19QT1JUX18pICAgICAoKChfX1BPUlRfXykgPT0gRVhUSV9HUElPQSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9CKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0MpIHx8IFwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfaGFsX2ZsYXNoLmggYi9JbmMvc3RtMzJ3Ynh4X2hhbF9mbGFzaC5oCmluZGV4IDU0ODUxOGYuLjY4M2UwZjIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfaGFsX2ZsYXNoLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9oYWxfZmxhc2guaApAQCAtNDYsNyArNDYsNyBAQAogICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLSAgdWludDMyX3QgVHlwZUVyYXNlOyAgIC8qITwgTWFzcyBlcmFzZSBvciBwYWdlIGVyYXNlLgorICB1aW50MzJfdCBUeXBlRXJhc2U7ICAgLyohPCBQYWdlIGVyYXNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZMQVNIX1RZUEVfRVJBU0UgKi8KICAgdWludDMyX3QgUGFnZTsgICAgICAgIC8qITwgSW5pdGlhbCBGbGFzaCBwYWdlIHRvIGVyYXNlIHdoZW4gcGFnZSBlcmFzZSBpcyBlbmFibGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIChGTEFTSF9QQUdFX05CIC0gMSkgKi8KQEAgLTIyMiw3ICsyMjIsNiBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIEZMQVNIX1RZUEVFUkFTRV9QQUdFUyAgICAgICAgICAgRkxBU0hfQ1JfUEVSICAvKiE8IFBhZ2VzIGVyYXNlIG9ubHkqLwotI2RlZmluZSBGTEFTSF9UWVBFRVJBU0VfTUFTU0VSQVNFICAgICAgIEZMQVNIX0NSX01FUiAgLyohPCBGbGFzaCBtYXNzIGVyYXNlIGFjdGl2YXRpb24qLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTg1Myw4ICs4NTIsNyBAQAogCiAjZGVmaW5lIElTX0FERFJfQUxJR05FRF82NEJJVFMoX19WQUxVRV9fKSAgICAgICAgICAgKCgoX19WQUxVRV9fKSAmIDB4N1UpID09ICgweDAwVUwpKQogCi0jZGVmaW5lIElTX0ZMQVNIX1RZUEVFUkFTRShfX1ZBTFVFX18pICAgICAgICAgICAgICAgKCgoX19WQUxVRV9fKSA9PSBGTEFTSF9UWVBFRVJBU0VfUEFHRVMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IEZMQVNIX1RZUEVFUkFTRV9NQVNTRVJBU0UpKQorI2RlZmluZSBJU19GTEFTSF9UWVBFRVJBU0UoX19WQUxVRV9fKSAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBGTEFTSF9UWVBFRVJBU0VfUEFHRVMpCiAKICNkZWZpbmUgSVNfRkxBU0hfVFlQRVBST0dSQU0oX19WQUxVRV9fKSAgICAgICAgICAgICAoKChfX1ZBTFVFX18pID09IEZMQVNIX1RZUEVQUk9HUkFNX0RPVUJMRVdPUkQpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IEZMQVNIX1RZUEVQUk9HUkFNX0ZBU1QpKQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyd2J4eF9oYWxfZ3Bpb19leC5oIGIvSW5jL3N0bTMyd2J4eF9oYWxfZ3Bpb19leC5oCmluZGV4IGZjMTBmOGUuLjMwMDBjNmQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfaGFsX2dwaW9fZXguaAorKysgYi9JbmMvc3RtMzJ3Ynh4X2hhbF9ncGlvX2V4LmgKQEAgLTUzLDcgKzUzLDcgQEAKICAgKgogICAqLwogCi0jaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1MHh4KQorI2lmIGRlZmluZWQgKFNUTTMyV0I1NXh4KSB8fCBkZWZpbmVkIChTVE0zMldCNU14eCkgfHwgZGVmaW5lZCAoU1RNMzJXQjUweHgpCiAKICAgLyogICAgIHwgICBBRjAgICAgfCAgIEFGMSAgICB8ICAgQUYyICAgIHwgICBBRjMgICAgfCAgIEFGNCAgICB8ICAgQUY1ICAgIHwgICBBRjYgICAgfCAgIEFGNyAgICB8CiAgICpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQEAgLTM1NSw3ICszNTUsNiBAQAogLyoqCiAqIEBicmllZiAgIEFGIDE1IHNlbGVjdGlvbgogKi8KLQogI2RlZmluZSBHUElPX0FGMTVfRVZFTlRPVVQgICAgICAgICAgKCh1aW50OF90KTB4MGYpICAvKiE8IEVWRU5UT1VUIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgKi8KIAogI2RlZmluZSBJU19HUElPX0FGKEFGKSAgICAgICAgICAgICAgKChBRikgPD0gKHVpbnQ4X3QpMHgwZikKQEAgLTM2Myw2ICszNjIsMjQxIEBACiAjZW5kaWYKIAogCisjaWYgZGVmaW5lZCAoU1RNMzJXQjM1eHgpCisvKioKKyAgKiBAYnJpZWYgICBBRiAwIHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGMF9NQ08gICAgICAgICAgICgodWludDhfdCkweDAwKSAgLyohPCBNQ08gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQUYwX0xTQ08gICAgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IExTQ08gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjBfSlRNU19TV0RJTyAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgSlRNUy1TV0RJTyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAqLworI2RlZmluZSBHUElPX0FGMF9KVENLX1NXQ0xLICAgICgodWludDhfdCkweDAwKSAgLyohPCBKVENLLVNXQ0xLIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQUYwX0pUREkgICAgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IEpUREkgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjBfUlRDX09VVCAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgUkNUX09VVCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0FGMF9KVERfVFJBQ0UgICAgICgodWludDhfdCkweDAwKSAgLyohPCBKVERPLVRSQUNFU1dPIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICovCisjZGVmaW5lIEdQSU9fQUYwX05KVFJTVCAgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IE5KVFJTVCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjBfVFJBQ0VEMCAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgVFJBQ0VEMCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0FGMF9UUkFDRUQxICAgICAgICgodWludDhfdCkweDAwKSAgLyohPCBUUkFDRUQxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQUYwX1RSQUNFRDIgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IFRSQUNFRDIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjBfVFJBQ0VEMyAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgVFJBQ0VEMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiAxIHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGMV9USU0xICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgIC8qITwgVElNMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworI2RlZmluZSBHUElPX0FGMV9USU0yICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgIC8qITwgVElNMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworI2RlZmluZSBHUElPX0FGMV9MUFRJTTEgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgIC8qITwgTFBUSU0xIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiAyIHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGMl9USU0xICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgIC8qITwgVElNMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworI2RlZmluZSBHUElPX0FGMl9USU0yICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgIC8qITwgVElNMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiAzIHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGM19TUEkxICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykgIC8qITwgU1BJMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworI2RlZmluZSBHUElPX0FGM19TUEkyICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykgIC8qITwgU1BJMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworI2RlZmluZSBHUElPX0FGM19USU0xICAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykgIC8qITwgVElNMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiA0IHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGNF9JMkMxICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgIC8qITwgSTJDMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworI2RlZmluZSBHUElPX0FGNF9JMkMzICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgIC8qITwgSTJDMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworI2RlZmluZSBHUElPX0FGNF9TUEkxICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgIC8qITwgU1BJMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiA1IHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGNV9TUEkxICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNSkgIC8qITwgU1BJMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworI2RlZmluZSBHUElPX0FGNV9TUEkyICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNSkgIC8qITwgU1BJMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiA2IHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGNl9NQ08gICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgTUNPIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIwICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIyICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIzICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEI0ICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCNCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEI1ICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCNSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEI2ICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCNiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEI3ICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCNyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEI4ICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCOCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEI5ICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCOSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxMCAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMTAgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxMSAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxMiAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMTIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxMyAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMTMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxNCAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMTQgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxNSAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMTUgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxNiAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMTYgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxNyAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMTcgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9EVEIxOCAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfRFRCMTggQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9NSVNPICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfTUlTTyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9NT1NJICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfTU9TSSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9TQ0sgICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfU0NLIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAqLworI2RlZmluZSBHUElPX0FGNl9SRl9OU1MgICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qITwgUkZfTlNTIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiA3IHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGN19VU0FSVDEgICAgICAgICAoKHVpbnQ4X3QpMHgwNykgIC8qITwgVVNBUlQxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiA4IHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGOF9JUiAgICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOCkgIC8qITwgSVIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAqLworI2RlZmluZSBHUElPX0FGOF9MUFVBUlQxICAgICAgICAoKHVpbnQ4X3QpMHgwOCkgIC8qITwgTFBVQVJUMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiA5IHNlbGVjdGlvbgorICAqLworICNkZWZpbmUgR1BJT19BRjlfVFNDICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkgIC8qITwgVFNDIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiAxMCBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjEwX1FVQURTUEkgICAgICAgKCh1aW50OF90KTB4MEEpICAvKiE8IFFVQURTUEkgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjEwX1VTQiAgICAgICAgICAgKCh1aW50OF90KTB4MEEpICAvKiE8IFVTQiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgMTIgc2VsZWN0aW9uCisgICovCisjZGVmaW5lIEdQSU9fQUYxMl9DT01QMSAgICAgICAgICgodWludDhfdCkweDBDKSAgLyohPCBDT01QMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICovCisjZGVmaW5lIEdQSU9fQUYxMl9DT01QMiAgICAgICAgICgodWludDhfdCkweDBDKSAgLyohPCBDT01QMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICovCisjZGVmaW5lIEdQSU9fQUYxMl9USU0xICAgICAgICAgICgodWludDhfdCkweDBDKSAgLyohPCBUSU0xIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICovCisKKy8qKgorICAqIEBicmllZiAgIEFGIDE0IHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGMTRfTFBUSU0yICAgICAgICAoKHVpbnQ4X3QpMHgwRSkgIC8qITwgTFBUSU0yIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAqLworI2RlZmluZSBHUElPX0FGMTRfVElNMiAgICAgICAgICAoKHVpbnQ4X3QpMHgwRSkgIC8qITwgVElNMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAqLworI2RlZmluZSBHUElPX0FGMTRfVElNMTYgICAgICAgICAoKHVpbnQ4X3QpMHgwRSkgIC8qITwgVElNMTYgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAqLworI2RlZmluZSBHUElPX0FGMTRfVElNMTcgICAgICAgICAoKHVpbnQ4X3QpMHgwRSkgIC8qITwgVElNMTcgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiAxNSBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjE1X0VWRU5UT1VUICAgICAgKCh1aW50OF90KTB4MEYpICAvKiE8IEVWRU5UT1VUIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKworI2RlZmluZSBJU19HUElPX0FGKEFGKSAgICAgICAgICAoKChBRikgPD0gKHVpbnQ4X3QpMHgwRikgJiYgKChBRikgIT0gKHVpbnQ4X3QpMHgwQikgJiYgKChBRikgIT0gKHVpbnQ4X3QpMHgwRCkpCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU1RNMzJXQjMweHgpCisvKioKKyAgKiBAYnJpZWYgICBBRiAwIHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGMF9NQ08gICAgICAgICAgICgodWludDhfdCkweDAwKSAgLyohPCBNQ08gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQUYwX0xTQ08gICAgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IExTQ08gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjBfSlRNU19TV0RJTyAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgSlRNUy1TV0RJTyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAqLworI2RlZmluZSBHUElPX0FGMF9KVENLX1NXQ0xLICAgICgodWludDhfdCkweDAwKSAgLyohPCBKVENLLVNXQ0xLIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQUYwX0pUREkgICAgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IEpUREkgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjBfUlRDX09VVCAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgUkNUX09VVCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0FGMF9KVERfVFJBQ0UgICAgICgodWludDhfdCkweDAwKSAgLyohPCBKVERPLVRSQUNFU1dPIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICovCisjZGVmaW5lIEdQSU9fQUYwX05KVFJTVCAgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IE5KVFJTVCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjBfVFJBQ0VEMCAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgVFJBQ0VEMCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAqLworI2RlZmluZSBHUElPX0FGMF9UUkFDRUQxICAgICAgICgodWludDhfdCkweDAwKSAgLyohPCBUUkFDRUQxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAgICAgICovCisjZGVmaW5lIEdQSU9fQUYwX1RSQUNFRDIgICAgICAgKCh1aW50OF90KTB4MDApICAvKiE8IFRSQUNFRDIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjBfVFJBQ0VEMyAgICAgICAoKHVpbnQ4X3QpMHgwMCkgIC8qITwgVFJBQ0VEMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAqLworCisgLyoqCisgICogQGJyaWVmICAgQUYgMSBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjFfVElNMSAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAvKiE8IFRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjFfVElNMiAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAvKiE8IFRJTTIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjFfTFBUSU0xICAgICAgICAgKCh1aW50OF90KTB4MDEpICAvKiE8IExQVElNMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgMiBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjJfVElNMSAgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiE8IFRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjJfVElNMiAgICAgICAgICAgKCh1aW50OF90KTB4MDIpICAvKiE8IFRJTTIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgMyBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjNfVElNMSAgICAgICAgICAgKCh1aW50OF90KTB4MDMpICAvKiE8IFRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgNCBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjRfSTJDMSAgICAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiE8IEkyQzEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjRfU1BJMSAgICAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiE8IFNQSTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgNSBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjVfU1BJMSAgICAgICAgICAgKCh1aW50OF90KTB4MDUpICAvKiE8IFNQSTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgNiBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjZfTUNPICAgICAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IE1DTyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMCAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjAgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMSAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMiAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMyAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCNCAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjQgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCNSAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjUgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCNiAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjYgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCNyAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjcgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCOCAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjggQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCOSAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjkgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMTAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjEwIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMTEgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjExIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMTIgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjEyIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMTMgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjEzIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMTQgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjE0IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMTUgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjE1IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMTYgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjE2IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMTcgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjE3IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfRFRCMTggICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX0RUQjE4IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfTUlTTyAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX01JU08gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfTU9TSSAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX01PU0kgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfU0NLICAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX1NDSyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjZfUkZfTlNTICAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiE8IFJGX05TUyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgNyBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjdfVVNBUlQxICAgICAgICAgKCh1aW50OF90KTB4MDcpICAvKiE8IFVTQVJUMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgOCBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjhfSVIgICAgICAgICAgICAgKCh1aW50OF90KTB4MDgpICAvKiE8IElSIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgOSBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjlfVFNDICAgICAgICAgICAoKHVpbnQ4X3QpMHgwOSkgIC8qITwgVFNDIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAqLworCisvKioKKyAgKiBAYnJpZWYgICBBRiAxMiBzZWxlY3Rpb24KKyAgKi8KKyNkZWZpbmUgR1BJT19BRjEyX1RJTTEgICAgICAgICAgKCh1aW50OF90KTB4MEMpICAvKiE8IFRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgKi8KKworLyoqCisgICogQGJyaWVmICAgQUYgMTQgc2VsZWN0aW9uCisgICovCisjZGVmaW5lIEdQSU9fQUYxNF9MUFRJTTIgICAgICAgICgodWludDhfdCkweDBFKSAgLyohPCBMUFRJTTIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICovCisjZGVmaW5lIEdQSU9fQUYxNF9USU0yICAgICAgICAgICgodWludDhfdCkweDBFKSAgLyohPCBUSU0yIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICovCisjZGVmaW5lIEdQSU9fQUYxNF9USU0xNiAgICAgICAgICgodWludDhfdCkweDBFKSAgLyohPCBUSU0xNiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICovCisjZGVmaW5lIEdQSU9fQUYxNF9USU0xNyAgICAgICAgICgodWludDhfdCkweDBFKSAgLyohPCBUSU0xNyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICovCisKKy8qKgorICAqIEBicmllZiAgIEFGIDE1IHNlbGVjdGlvbgorICAqLworI2RlZmluZSBHUElPX0FGMTVfRVZFTlRPVVQgICAgICAoKHVpbnQ4X3QpMHgwRikgIC8qITwgRVZFTlRPVVQgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworCisjZGVmaW5lIElTX0dQSU9fQUYoQUYpICAgICAgICAgICgoKEFGKSA8PSAodWludDhfdCkweDBGKSAmJiAoKEFGKSAhPSAodWludDhfdCkweDBBKSAmJiAoKEFGKSAhPSAodWludDhfdCkweDBCKSAmJiAoKEFGKSAhPSAodWludDhfdCkweDBEKSkKKworI2VuZGlmCisKIAogLyoqCiAgICogQH0KQEAgLTM4MCw3ICs2MTQsNyBAQAogLyoqIEBkZWZncm91cCBHUElPRXhfR2V0X1BvcnRfSW5kZXggR1BJT0V4IEdldCBQb3J0IEluZGV4CiAqIEB7CiAgICovCi0jaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpCisjaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KQogI2RlZmluZSBHUElPX0dFVF9JTkRFWChfX0dQSU94X18pICAgICgoKF9fR1BJT3hfXykgPT0gKEdQSU9BKSk/IDB1TCA6XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fR1BJT3hfXykgPT0gKEdQSU9CKSk/IDF1TCA6XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fR1BJT3hfXykgPT0gKEdQSU9DKSk/IDJ1TCA6XApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyd2J4eF9oYWxfaTJzLmggYi9JbmMvc3RtMzJ3Ynh4X2hhbF9pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWZjYjBhCi0tLSAvZGV2L251bGwKKysrIGIvSW5jL3N0bTMyd2J4eF9oYWxfaTJzLmgKQEAgLTAsMCArMSw1NDYgQEAKKy8qKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAZmlsZSAgICBzdG0zMndieHhfaGFsX2kycy5oCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBIZWFkZXIgZmlsZSBvZiBJMlMgSEFMIG1vZHVsZS4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxOSBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCisgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqLworCisvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmbmRlZiBTVE0zMldCeHhfSEFMX0kyU19ICisjZGVmaW5lIFNUTTMyV0J4eF9IQUxfSTJTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgInN0bTMyd2J4eF9oYWxfZGVmLmgiCisKKyNpZiBkZWZpbmVkKFNQSV9JMlNfU1VQUE9SVCkKKy8qKiBAYWRkdG9ncm91cCBTVE0zMldCeHhfSEFMX0RyaXZlcgorICAqIEB7CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBJMlMKKyAgKiBAeworICAqLworCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBJMlNfRXhwb3J0ZWRfVHlwZXMgSTJTIEV4cG9ydGVkIFR5cGVzCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmIEkyUyBJbml0IHN0cnVjdHVyZSBkZWZpbml0aW9uCisgICovCit0eXBlZGVmIHN0cnVjdAoreworICB1aW50MzJfdCBNb2RlOyAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgSTJTIG9wZXJhdGluZyBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX01vZGUgKi8KKworICB1aW50MzJfdCBTdGFuZGFyZDsgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgc3RhbmRhcmQgdXNlZCBmb3IgdGhlIEkyUyBjb21tdW5pY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX1N0YW5kYXJkICovCisKKyAgdWludDMyX3QgRGF0YUZvcm1hdDsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGRhdGEgZm9ybWF0IGZvciB0aGUgSTJTIGNvbW11bmljYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMlNfRGF0YV9Gb3JtYXQgKi8KKworICB1aW50MzJfdCBNQ0xLT3V0cHV0OyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBJMlMgTUNMSyBvdXRwdXQgaXMgZW5hYmxlZCBvciBub3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMlNfTUNMS19PdXRwdXQgKi8KKworICB1aW50MzJfdCBBdWRpb0ZyZXE7ICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgZnJlcXVlbmN5IHNlbGVjdGVkIGZvciB0aGUgSTJTIGNvbW11bmljYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMlNfQXVkaW9fRnJlcXVlbmN5ICovCisKKyAgdWludDMyX3QgQ1BPTDsgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGlkbGUgc3RhdGUgb2YgdGhlIEkyUyBjbG9jay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyU19DbG9ja19Qb2xhcml0eSAqLworfSBJMlNfSW5pdFR5cGVEZWY7CisKKy8qKgorICAqIEBicmllZiAgSEFMIFN0YXRlIHN0cnVjdHVyZXMgZGVmaW5pdGlvbgorICAqLwordHlwZWRlZiBlbnVtCit7CisgIEhBTF9JMlNfU1RBVEVfUkVTRVQgICAgICA9IDB4MDBVLCAgLyohPCBJMlMgbm90IHlldCBpbml0aWFsaXplZCBvciBkaXNhYmxlZCAgICAgICAgICAgICAgICAqLworICBIQUxfSTJTX1NUQVRFX1JFQURZICAgICAgPSAweDAxVSwgIC8qITwgSTJTIGluaXRpYWxpemVkIGFuZCByZWFkeSBmb3IgdXNlICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX0kyU19TVEFURV9CVVNZICAgICAgID0gMHgwMlUsICAvKiE8IEkyUyBpbnRlcm5hbCBwcm9jZXNzIGlzIG9uZ29pbmcgICAgICAgICAgICAgICAgICAgICovCisgIEhBTF9JMlNfU1RBVEVfQlVTWV9UWCAgICA9IDB4MDNVLCAgLyohPCBEYXRhIFRyYW5zbWlzc2lvbiBwcm9jZXNzIGlzIG9uZ29pbmcgICAgICAgICAgICAgICAqLworICBIQUxfSTJTX1NUQVRFX0JVU1lfUlggICAgPSAweDA0VSwgIC8qITwgRGF0YSBSZWNlcHRpb24gcHJvY2VzcyBpcyBvbmdvaW5nICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX0kyU19TVEFURV9USU1FT1VUICAgID0gMHgwNlUsICAvKiE8IEkyUyB0aW1lb3V0IHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEhBTF9JMlNfU1RBVEVfRVJST1IgICAgICA9IDB4MDdVICAgLyohPCBJMlMgZXJyb3Igc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfSBIQUxfSTJTX1N0YXRlVHlwZURlZjsKKworLyoqCisgICogQGJyaWVmIEkyUyBoYW5kbGUgU3RydWN0dXJlIGRlZmluaXRpb24KKyAgKi8KKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCit0eXBlZGVmIHN0cnVjdCBfX0kyU19IYW5kbGVUeXBlRGVmCisjZWxzZQordHlwZWRlZiBzdHJ1Y3QKKyNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KK3sKKyAgU1BJX1R5cGVEZWYgICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAvKiE8IEkyUyByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICovCisKKyAgSTJTX0luaXRUeXBlRGVmICAgICAgICAgICAgSW5pdDsgICAgICAgICAvKiE8IEkyUyBjb21tdW5pY2F0aW9uIHBhcmFtZXRlcnMgKi8KKworICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAqcFR4QnVmZlB0cjsgIC8qITwgUG9pbnRlciB0byBJMlMgVHggdHJhbnNmZXIgYnVmZmVyICovCisKKyAgX19JTyB1aW50MTZfdCAgICAgICAgICAgICAgVHhYZmVyU2l6ZTsgICAvKiE8IEkyUyBUeCB0cmFuc2ZlciBzaXplICovCisKKyAgX19JTyB1aW50MTZfdCAgICAgICAgICAgICAgVHhYZmVyQ291bnQ7ICAvKiE8IEkyUyBUeCB0cmFuc2ZlciBDb3VudGVyICovCisKKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgKnBSeEJ1ZmZQdHI7ICAvKiE8IFBvaW50ZXIgdG8gSTJTIFJ4IHRyYW5zZmVyIGJ1ZmZlciAqLworCisgIF9fSU8gdWludDE2X3QgICAgICAgICAgICAgIFJ4WGZlclNpemU7ICAgLyohPCBJMlMgUnggdHJhbnNmZXIgc2l6ZSAqLworCisgIF9fSU8gdWludDE2X3QgICAgICAgICAgICAgIFJ4WGZlckNvdW50OyAgLyohPCBJMlMgUnggdHJhbnNmZXIgY291bnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUaGlzIGZpZWxkIGlzIGluaXRpYWxpemVkIGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lIHZhbHVlIGFzIHRyYW5zZmVyIHNpemUgYXQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNmZXIgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudGVkIHdoZW4gYSBzYW1wbGUgaXMgcmVjZWl2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmJTYW1wbGVzUmVjZWl2ZWQgPSBSeEJ1ZmZlclNpemUtUnhCdWZmZXJDb3VudCkgKi8KKyAgRE1BX0hhbmRsZVR5cGVEZWYgICAgICAgICAgKmhkbWF0eDsgICAgICAvKiE8IEkyUyBUeCBETUEgaGFuZGxlIHBhcmFtZXRlcnMgKi8KKworICBETUFfSGFuZGxlVHlwZURlZiAgICAgICAgICAqaGRtYXJ4OyAgICAgIC8qITwgSTJTIFJ4IERNQSBoYW5kbGUgcGFyYW1ldGVycyAqLworCisgIF9fSU8gSEFMX0xvY2tUeXBlRGVmICAgICAgIExvY2s7ICAgICAgICAgLyohPCBJMlMgbG9ja2luZyBvYmplY3QgKi8KKworICBfX0lPIEhBTF9JMlNfU3RhdGVUeXBlRGVmICBTdGF0ZTsgICAgICAgIC8qITwgSTJTIGNvbW11bmljYXRpb24gc3RhdGUgKi8KKworICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICBFcnJvckNvZGU7ICAgIC8qITwgSTJTIEVycm9yIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX0Vycm9yICovCisKKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICB2b2lkICgqIFR4Q3BsdENhbGxiYWNrKShzdHJ1Y3QgX19JMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7ICAgICAgICAgICAgIC8qITwgSTJTIFR4IENvbXBsZXRlZCBjYWxsYmFjayAgICAgICAgICAqLworICB2b2lkICgqIFJ4Q3BsdENhbGxiYWNrKShzdHJ1Y3QgX19JMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7ICAgICAgICAgICAgIC8qITwgSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjayAgICAgICAgICAqLworICB2b2lkICgqIFR4SGFsZkNwbHRDYWxsYmFjaykoc3RydWN0IF9fSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOyAgICAgICAgIC8qITwgSTJTIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrICAgICAqLworICB2b2lkICgqIFJ4SGFsZkNwbHRDYWxsYmFjaykoc3RydWN0IF9fSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOyAgICAgICAgIC8qITwgSTJTIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrICAgICAqLworICB2b2lkICgqIEVycm9yQ2FsbGJhY2spKHN0cnVjdCBfX0kyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsgICAgICAgICAgICAgIC8qITwgSTJTIEVycm9yIGNhbGxiYWNrICAgICAgICAgICAgICAgICAqLworICB2b2lkICgqIE1zcEluaXRDYWxsYmFjaykoc3RydWN0IF9fSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOyAgICAgICAgICAgIC8qITwgSTJTIE1zcCBJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAqLworICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19JMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7ICAgICAgICAgIC8qITwgSTJTIE1zcCBEZUluaXQgY2FsbGJhY2sgICAgICAgICAgICAqLworCisjZW5kaWYgIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworfSBJMlNfSGFuZGxlVHlwZURlZjsKKworI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisvKioKKyAgKiBAYnJpZWYgIEhBTCBJMlMgQ2FsbGJhY2sgSUQgZW51bWVyYXRpb24gZGVmaW5pdGlvbgorICAqLwordHlwZWRlZiBlbnVtCit7CisgIEhBTF9JMlNfVFhfQ09NUExFVEVfQ0JfSUQgICAgICAgICAgICAgPSAweDAwVSwgICAgLyohPCBJMlMgVHggQ29tcGxldGVkIGNhbGxiYWNrIElEICAgICAgICAgKi8KKyAgSEFMX0kyU19SWF9DT01QTEVURV9DQl9JRCAgICAgICAgICAgICA9IDB4MDFVLCAgICAvKiE8IEkyUyBSeCBDb21wbGV0ZWQgY2FsbGJhY2sgSUQgICAgICAgICAqLworICBIQUxfSTJTX1RYX0hBTEZfQ09NUExFVEVfQ0JfSUQgICAgICAgID0gMHgwM1UsICAgIC8qITwgSTJTIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrIElEICAgICovCisgIEhBTF9JMlNfUlhfSEFMRl9DT01QTEVURV9DQl9JRCAgICAgICAgPSAweDA0VSwgICAgLyohPCBJMlMgUnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sgSUQgICAgKi8KKyAgSEFMX0kyU19FUlJPUl9DQl9JRCAgICAgICAgICAgICAgICAgICA9IDB4MDZVLCAgICAvKiE8IEkyUyBFcnJvciBjYWxsYmFjayBJRCAgICAgICAgICAgICAgICAqLworICBIQUxfSTJTX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgICAgID0gMHgwN1UsICAgIC8qITwgSTJTIE1zcCBJbml0IGNhbGxiYWNrIElEICAgICAgICAgICAgICovCisgIEhBTF9JMlNfTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgICAgPSAweDA4VSAgICAgLyohPCBJMlMgTXNwIERlSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAgKi8KKworfSBIQUxfSTJTX0NhbGxiYWNrSURUeXBlRGVmOworCisvKioKKyAgKiBAYnJpZWYgIEhBTCBJMlMgQ2FsbGJhY2sgcG9pbnRlciBkZWZpbml0aW9uCisgICovCit0eXBlZGVmICB2b2lkICgqcEkyU19DYWxsYmFja1R5cGVEZWYpKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsgLyohPCBwb2ludGVyIHRvIGFuIEkyUyBjYWxsYmFjayBmdW5jdGlvbiAqLworCisjZW5kaWYgLyogVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisvKioKKyAgKiBAfQorICAqLworCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBJMlNfRXhwb3J0ZWRfQ29uc3RhbnRzIEkyUyBFeHBvcnRlZCBDb25zdGFudHMKKyAgKiBAeworICAqLworLyoqIEBkZWZncm91cCBJMlNfRXJyb3IgSTJTIEVycm9yCisgICogQHsKKyAgKi8KKyNkZWZpbmUgSEFMX0kyU19FUlJPUl9OT05FICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKSAgLyohPCBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX0kyU19FUlJPUl9USU1FT1VUICAgICAgICAgICAgKDB4MDAwMDAwMDFVKSAgLyohPCBUaW1lb3V0IGVycm9yICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX0kyU19FUlJPUl9PVlIgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDJVKSAgLyohPCBPVlIgZXJyb3IgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX0kyU19FUlJPUl9VRFIgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDRVKSAgLyohPCBVRFIgZXJyb3IgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX0kyU19FUlJPUl9ETUEgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDhVKSAgLyohPCBETUEgdHJhbnNmZXIgZXJyb3IgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX0kyU19FUlJPUl9QUkVTQ0FMRVIgICAgICAgICAgKDB4MDAwMDAwMTBVKSAgLyohPCBQcmVzY2FsZXIgQ2FsY3VsYXRpb24gZXJyb3IgKi8KKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorI2RlZmluZSBIQUxfSTJTX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0sgICAoMHgwMDAwMDAyMFUpICAvKiE8IEludmFsaWQgQ2FsbGJhY2sgZXJyb3IgICAgICAqLworI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfTW9kZSBJMlMgTW9kZQorICAqIEB7CisgICovCisjZGVmaW5lIEkyU19NT0RFX1NMQVZFX1RYICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgSTJTX01PREVfU0xBVkVfUlggICAgICAgICAgICAgICAgKFNQSV9JMlNDRkdSX0kyU0NGR18wKQorI2RlZmluZSBJMlNfTU9ERV9NQVNURVJfVFggICAgICAgICAgICAgICAoU1BJX0kyU0NGR1JfSTJTQ0ZHXzEpCisjZGVmaW5lIEkyU19NT0RFX01BU1RFUl9SWCAgICAgICAgICAgICAgICgoU1BJX0kyU0NGR1JfSTJTQ0ZHXzAgfCBTUElfSTJTQ0ZHUl9JMlNDRkdfMSkpCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEkyU19TdGFuZGFyZCBJMlMgU3RhbmRhcmQKKyAgKiBAeworICAqLworI2RlZmluZSBJMlNfU1RBTkRBUkRfUEhJTElQUyAgICAgICAgICAgICAoMHgwMDAwMDAwMFUpCisjZGVmaW5lIEkyU19TVEFOREFSRF9NU0IgICAgICAgICAgICAgICAgIChTUElfSTJTQ0ZHUl9JMlNTVERfMCkKKyNkZWZpbmUgSTJTX1NUQU5EQVJEX0xTQiAgICAgICAgICAgICAgICAgKFNQSV9JMlNDRkdSX0kyU1NURF8xKQorI2RlZmluZSBJMlNfU1RBTkRBUkRfUENNX1NIT1JUICAgICAgICAgICAoKFNQSV9JMlNDRkdSX0kyU1NURF8wIHwgU1BJX0kyU0NGR1JfSTJTU1REXzEpKQorI2RlZmluZSBJMlNfU1RBTkRBUkRfUENNX0xPTkcgICAgICAgICAgICAoKFNQSV9JMlNDRkdSX0kyU1NURF8wIHwgU1BJX0kyU0NGR1JfSTJTU1REXzEgfCBTUElfSTJTQ0ZHUl9QQ01TWU5DKSkKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSTJTX0RhdGFfRm9ybWF0IEkyUyBEYXRhIEZvcm1hdAorICAqIEB7CisgICovCisjZGVmaW5lIEkyU19EQVRBRk9STUFUXzE2QiAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgSTJTX0RBVEFGT1JNQVRfMTZCX0VYVEVOREVEICAgICAgKFNQSV9JMlNDRkdSX0NITEVOKQorI2RlZmluZSBJMlNfREFUQUZPUk1BVF8yNEIgICAgICAgICAgICAgICAoKFNQSV9JMlNDRkdSX0NITEVOIHwgU1BJX0kyU0NGR1JfREFUTEVOXzApKQorI2RlZmluZSBJMlNfREFUQUZPUk1BVF8zMkIgICAgICAgICAgICAgICAoKFNQSV9JMlNDRkdSX0NITEVOIHwgU1BJX0kyU0NGR1JfREFUTEVOXzEpKQorLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfTUNMS19PdXRwdXQgSTJTIE1DTEsgT3V0cHV0CisgICogQHsKKyAgKi8KKyNkZWZpbmUgSTJTX01DTEtPVVRQVVRfRU5BQkxFICAgICAgICAgICAgKFNQSV9JMlNQUl9NQ0tPRSkKKyNkZWZpbmUgSTJTX01DTEtPVVRQVVRfRElTQUJMRSAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfQXVkaW9fRnJlcXVlbmN5IEkyUyBBdWRpbyBGcmVxdWVuY3kKKyAgKiBAeworICAqLworI2RlZmluZSBJMlNfQVVESU9GUkVRXzE5MksgICAgICAgICAgICAgICAoMTkyMDAwVSkKKyNkZWZpbmUgSTJTX0FVRElPRlJFUV85NksgICAgICAgICAgICAgICAgKDk2MDAwVSkKKyNkZWZpbmUgSTJTX0FVRElPRlJFUV80OEsgICAgICAgICAgICAgICAgKDQ4MDAwVSkKKyNkZWZpbmUgSTJTX0FVRElPRlJFUV80NEsgICAgICAgICAgICAgICAgKDQ0MTAwVSkKKyNkZWZpbmUgSTJTX0FVRElPRlJFUV8zMksgICAgICAgICAgICAgICAgKDMyMDAwVSkKKyNkZWZpbmUgSTJTX0FVRElPRlJFUV8yMksgICAgICAgICAgICAgICAgKDIyMDUwVSkKKyNkZWZpbmUgSTJTX0FVRElPRlJFUV8xNksgICAgICAgICAgICAgICAgKDE2MDAwVSkKKyNkZWZpbmUgSTJTX0FVRElPRlJFUV8xMUsgICAgICAgICAgICAgICAgKDExMDI1VSkKKyNkZWZpbmUgSTJTX0FVRElPRlJFUV84SyAgICAgICAgICAgICAgICAgKDgwMDBVKQorI2RlZmluZSBJMlNfQVVESU9GUkVRX0RFRkFVTFQgICAgICAgICAgICAoMlUpCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEkyU19DbG9ja19Qb2xhcml0eSBJMlMgQ2xvY2sgUG9sYXJpdHkKKyAgKiBAeworICAqLworI2RlZmluZSBJMlNfQ1BPTF9MT1cgICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMFUpCisjZGVmaW5lIEkyU19DUE9MX0hJR0ggICAgICAgICAgICAgICAgICAgIChTUElfSTJTQ0ZHUl9DS1BPTCkKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSTJTX0ludGVycnVwdHNfRGVmaW5pdGlvbiBJMlMgSW50ZXJydXB0cyBEZWZpbml0aW9uCisgICogQHsKKyAgKi8KKyNkZWZpbmUgSTJTX0lUX1RYRSAgICAgICAgICAgICAgICAgICAgICAgU1BJX0NSMl9UWEVJRQorI2RlZmluZSBJMlNfSVRfUlhORSAgICAgICAgICAgICAgICAgICAgICBTUElfQ1IyX1JYTkVJRQorI2RlZmluZSBJMlNfSVRfRVJSICAgICAgICAgICAgICAgICAgICAgICBTUElfQ1IyX0VSUklFCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEkyU19GbGFnc19EZWZpbml0aW9uIEkyUyBGbGFncyBEZWZpbml0aW9uCisgICogQHsKKyAgKi8KKyNkZWZpbmUgSTJTX0ZMQUdfVFhFICAgICAgICAgICAgICAgICAgICAgU1BJX1NSX1RYRQorI2RlZmluZSBJMlNfRkxBR19SWE5FICAgICAgICAgICAgICAgICAgICBTUElfU1JfUlhORQorCisjZGVmaW5lIEkyU19GTEFHX1VEUiAgICAgICAgICAgICAgICAgICAgIFNQSV9TUl9VRFIKKyNkZWZpbmUgSTJTX0ZMQUdfT1ZSICAgICAgICAgICAgICAgICAgICAgU1BJX1NSX09WUgorI2RlZmluZSBJMlNfRkxBR19GUkUgICAgICAgICAgICAgICAgICAgICBTUElfU1JfRlJFCisKKyNkZWZpbmUgSTJTX0ZMQUdfQ0hTSURFICAgICAgICAgICAgICAgICAgU1BJX1NSX0NIU0lERQorI2RlZmluZSBJMlNfRkxBR19CU1kgICAgICAgICAgICAgICAgICAgICBTUElfU1JfQlNZCisKKyNkZWZpbmUgSTJTX0ZMQUdfTUFTSyAgICAgICAgICAgICAgICAgICAoU1BJX1NSX1JYTkVcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU1BJX1NSX1RYRSB8IFNQSV9TUl9VRFIgfCBTUElfU1JfT1ZSIHwgU1BJX1NSX0ZSRSB8IFNQSV9TUl9DSFNJREUgfCBTUElfU1JfQlNZKQorLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyogRXhwb3J0ZWQgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgSTJTX0V4cG9ydGVkX21hY3JvcyBJMlMgRXhwb3J0ZWQgTWFjcm9zCisgICogQHsKKyAgKi8KKworLyoqIEBicmllZiAgUmVzZXQgSTJTIGhhbmRsZSBzdGF0ZQorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIEkyUyBIYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCisjaWYgKFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyNkZWZpbmUgX19IQUxfSTJTX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVTRVQ7ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIF9fSEFMX0kyU19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFU0VUKQorI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisvKiogQGJyaWVmICBFbmFibGUgdGhlIHNwZWNpZmllZCBTUEkgcGVyaXBoZXJhbCAoaW4gSTJTIG1vZGUpLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIEkyUyBIYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIF9fSEFMX0kyU19FTkFCTEUoX19IQU5ETEVfXykgICAgKFNFVF9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+STJTQ0ZHUiwgU1BJX0kyU0NGR1JfSTJTRSkpCisKKy8qKiBAYnJpZWYgIERpc2FibGUgdGhlIHNwZWNpZmllZCBTUEkgcGVyaXBoZXJhbCAoaW4gSTJTIG1vZGUpLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIEkyUyBIYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIF9fSEFMX0kyU19ESVNBQkxFKF9fSEFORExFX18pIChDTEVBUl9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+STJTQ0ZHUiwgU1BJX0kyU0NGR1JfSTJTRSkpCisKKy8qKiBAYnJpZWYgIEVuYWJsZSB0aGUgc3BlY2lmaWVkIEkyUyBpbnRlcnJ1cHRzLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBzcGVjaWZpZXMgdGhlIEkyUyBIYW5kbGUuCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgaW50ZXJydXB0IHNvdXJjZSB0byBlbmFibGUgb3IgZGlzYWJsZS4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEkyU19JVF9UWEU6IFR4IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgZW5hYmxlCisgICogICAgICAgICAgICBAYXJnIEkyU19JVF9SWE5FOiBSWCBidWZmZXIgbm90IGVtcHR5IGludGVycnVwdCBlbmFibGUKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0lUX0VSUjogRXJyb3IgaW50ZXJydXB0IGVuYWJsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9JMlNfRU5BQkxFX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgIChTRVRfQklUKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSMiwoX19JTlRFUlJVUFRfXykpKQorCisvKiogQGJyaWVmICBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgSTJTIGludGVycnVwdHMuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgSTJTIEhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBpbnRlcnJ1cHQgc291cmNlIHRvIGVuYWJsZSBvciBkaXNhYmxlLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0lUX1RYRTogVHggYnVmZmVyIGVtcHR5IGludGVycnVwdCBlbmFibGUKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0lUX1JYTkU6IFJYIGJ1ZmZlciBub3QgZW1wdHkgaW50ZXJydXB0IGVuYWJsZQorICAqICAgICAgICAgICAgQGFyZyBJMlNfSVRfRVJSOiBFcnJvciBpbnRlcnJ1cHQgZW5hYmxlCisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIF9fSEFMX0kyU19ESVNBQkxFX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pIChDTEVBUl9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IyLChfX0lOVEVSUlVQVF9fKSkpCisKKy8qKiBAYnJpZWYgIENoZWNrcyBpZiB0aGUgc3BlY2lmaWVkIEkyUyBpbnRlcnJ1cHQgc291cmNlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgSTJTIEhhbmRsZS4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBJMlMgd2hlcmUgeDogMSwgMiwgb3IgMyB0byBzZWxlY3QgdGhlIEkyUyBwZXJpcGhlcmFsLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIEkyUyBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLgorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEkyU19JVF9UWEU6IFR4IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgZW5hYmxlCisgICogICAgICAgICAgICBAYXJnIEkyU19JVF9SWE5FOiBSWCBidWZmZXIgbm90IGVtcHR5IGludGVycnVwdCBlbmFibGUKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0lUX0VSUjogRXJyb3IgaW50ZXJydXB0IGVuYWJsZQorICAqIEByZXR2YWwgVGhlIG5ldyBzdGF0ZSBvZiBfX0lUX18gKFRSVUUgb3IgRkFMU0UpLgorICAqLworI2RlZmluZSBfX0hBTF9JMlNfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DUjJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKF9fSU5URVJSVVBUX18pKSA9PSAoX19JTlRFUlJVUFRfXykpID8gU0VUIDogUkVTRVQpCisKKy8qKiBAYnJpZWYgIENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSTJTIGZsYWcgaXMgc2V0IG9yIG5vdC4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBJMlMgSGFuZGxlLgorICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfUlhORTogUmVjZWl2ZSBidWZmZXIgbm90IGVtcHR5IGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfVFhFOiBUcmFuc21pdCBidWZmZXIgZW1wdHkgZmxhZworICAqICAgICAgICAgICAgQGFyZyBJMlNfRkxBR19VRFI6IFVuZGVycnVuIGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfT1ZSOiBPdmVycnVuIGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfRlJFOiBGcmFtZSBlcnJvciBmbGFnCisgICogICAgICAgICAgICBAYXJnIEkyU19GTEFHX0NIU0lERTogQ2hhbm5lbCBTaWRlIGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfQlNZOiBCdXN5IGZsYWcKKyAgKiBAcmV0dmFsIFRoZSBuZXcgc3RhdGUgb2YgX19GTEFHX18gKFRSVUUgb3IgRkFMU0UpLgorICAqLworI2RlZmluZSBfX0hBTF9JMlNfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlNSKSAmIChfX0ZMQUdfXykpID09IChfX0ZMQUdfXykpCisKKy8qKiBAYnJpZWYgQ2xlYXJzIHRoZSBJMlMgT1ZSIHBlbmRpbmcgZmxhZy4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gc3BlY2lmaWVzIHRoZSBJMlMgSGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9JMlNfQ0xFQVJfT1ZSRkxBRyhfX0hBTkRMRV9fKSBkb3sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWdfb3ZyID0gMHgwMFU7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZ19vdnIgPSAoX19IQU5ETEVfXyktPkluc3RhbmNlLT5EUjsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnX292ciA9IChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlNSOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnX292cik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMFUpCisvKiogQGJyaWVmIENsZWFycyB0aGUgSTJTIFVEUiBwZW5kaW5nIGZsYWcuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIHNwZWNpZmllcyB0aGUgSTJTIEhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgX19IQUxfSTJTX0NMRUFSX1VEUkZMQUcoX19IQU5ETEVfXykgZG97XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWdfdWRyID0gMHgwMFU7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnX3VkciA9ICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5TUik7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZ191ZHIpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfXdoaWxlKDBVKQorLyoqCisgICogQH0KKyAgKi8KKworLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAYWRkdG9ncm91cCBJMlNfRXhwb3J0ZWRfRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKworLyoqIEBhZGR0b2dyb3VwIEkyU19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxCisgICogQHsKKyAgKi8KKy8qIEluaXRpYWxpemF0aW9uL2RlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX0luaXQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19EZUluaXQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOwordm9pZCBIQUxfSTJTX01zcEluaXQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOwordm9pZCBIQUxfSTJTX01zcERlSW5pdChJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CisKKy8qIENhbGxiYWNrcyBSZWdpc3Rlci9VblJlZ2lzdGVyIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgKFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfUmVnaXN0ZXJDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgSEFMX0kyU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJMlNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX1VuUmVnaXN0ZXJDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgSEFMX0kyU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBJMlNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMgorICAqIEB7CisgICovCisvKiBJL08gb3BlcmF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQmxvY2tpbmcgbW9kZTogUG9sbGluZyAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19UcmFuc21pdChJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfUmVjZWl2ZShJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplLCB1aW50MzJfdCBUaW1lb3V0KTsKKworLyogTm9uLUJsb2NraW5nIG1vZGU6IEludGVycnVwdCAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19UcmFuc21pdF9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfUmVjZWl2ZV9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKK3ZvaWQgSEFMX0kyU19JUlFIYW5kbGVyKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKKworLyogTm9uLUJsb2NraW5nIG1vZGU6IERNQSAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19UcmFuc21pdF9ETUEoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIHVpbnQxNl90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX1JlY2VpdmVfRE1BKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOworCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX0RNQVBhdXNlKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfRE1BUmVzdW1lKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfRE1BU3RvcChJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CisKKy8qIENhbGxiYWNrcyB1c2VkIGluIG5vbiBibG9ja2luZyBtb2RlcyAoSW50ZXJydXB0IGFuZCBETUEpICoqKioqKioqKioqKioqKioqKiovCit2b2lkIEhBTF9JMlNfVHhIYWxmQ3BsdENhbGxiYWNrKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKK3ZvaWQgSEFMX0kyU19UeENwbHRDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7Cit2b2lkIEhBTF9JMlNfUnhIYWxmQ3BsdENhbGxiYWNrKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKK3ZvaWQgSEFMX0kyU19SeENwbHRDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7Cit2b2lkIEhBTF9JMlNfRXJyb3JDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CisvKioKKyAgKiBAfQorICAqLworCisvKiogQGFkZHRvZ3JvdXAgSTJTX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMKKyAgKiBAeworICAqLworLyogUGVyaXBoZXJhbCBDb250cm9sIGFuZCBTdGF0ZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9JMlNfU3RhdGVUeXBlRGVmIEhBTF9JMlNfR2V0U3RhdGUoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOwordWludDMyX3QgSEFMX0kyU19HZXRFcnJvcihJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBJMlNfUHJpdmF0ZV9NYWNyb3MgSTJTIFByaXZhdGUgTWFjcm9zCisgICogQHsKKyAgKi8KKworLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFNQSSBmbGFnIGlzIHNldCBvciBub3QuCisgICogQHBhcmFtICBfX1NSX18gIGNvcHkgb2YgSTJTIFNSIHJlZ3NpdGVyLgorICAqIEBwYXJhbSAgX19GTEFHX18gc3BlY2lmaWVzIHRoZSBmbGFnIHRvIGNoZWNrLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfUlhORTogUmVjZWl2ZSBidWZmZXIgbm90IGVtcHR5IGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfVFhFOiBUcmFuc21pdCBidWZmZXIgZW1wdHkgZmxhZworICAqICAgICAgICAgICAgQGFyZyBJMlNfRkxBR19VRFI6IFVuZGVycnVuIGVycm9yIGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfT1ZSOiBPdmVycnVuIGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0ZMQUdfQ0hTSURFOiBDaGFubmVsIHNpZGUgZmxhZworICAqICAgICAgICAgICAgQGFyZyBJMlNfRkxBR19CU1k6IEJ1c3kgZmxhZworICAqIEByZXR2YWwgU0VUIG9yIFJFU0VULgorICAqLworI2RlZmluZSBJMlNfQ0hFQ0tfRkxBRyhfX1NSX18sIF9fRkxBR19fKSAgICAgICAgICgoKChfX1NSX18pXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgKChfX0ZMQUdfXykgJiBJMlNfRkxBR19NQVNLKSkgPT0gKChfX0ZMQUdfXykgJiBJMlNfRkxBR19NQVNLKSkgPyBTRVQgOiBSRVNFVCkKKworLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIFNQSSBJbnRlcnJ1cHQgaXMgc2V0IG9yIG5vdC4KKyAgKiBAcGFyYW0gIF9fQ1IyX18gIGNvcHkgb2YgSTJTIENSMiByZWdzaXRlci4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBTUEkgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEkyU19JVF9UWEU6IFR4IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgZW5hYmxlCisgICogICAgICAgICAgICBAYXJnIEkyU19JVF9SWE5FOiBSWCBidWZmZXIgbm90IGVtcHR5IGludGVycnVwdCBlbmFibGUKKyAgKiAgICAgICAgICAgIEBhcmcgSTJTX0lUX0VSUjogRXJyb3IgaW50ZXJydXB0IGVuYWJsZQorICAqIEByZXR2YWwgU0VUIG9yIFJFU0VULgorICAqLworI2RlZmluZSBJMlNfQ0hFQ0tfSVRfU09VUkNFKF9fQ1IyX18sIF9fSU5URVJSVVBUX18pICAgICAgKCgoKF9fQ1IyX18pXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoX19JTlRFUlJVUFRfXykpID09IChfX0lOVEVSUlVQVF9fKSkgPyBTRVQgOiBSRVNFVCkKKworLyoqIEBicmllZiAgQ2hlY2tzIGlmIEkyUyBNb2RlIHBhcmFtZXRlciBpcyBpbiBhbGxvd2VkIHJhbmdlLgorICAqIEBwYXJhbSAgX19NT0RFX18gc3BlY2lmaWVzIHRoZSBJMlMgTW9kZS4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX01vZGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgSVNfSTJTX01PREUoX19NT0RFX18pICgoKF9fTU9ERV9fKSA9PSBJMlNfTU9ERV9TTEFWRV9UWCkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBJMlNfTU9ERV9TTEFWRV9SWCkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBJMlNfTU9ERV9NQVNURVJfVFgpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBJMlNfTU9ERV9NQVNURVJfUlgpKQorCisjZGVmaW5lIElTX0kyU19TVEFOREFSRChfX1NUQU5EQVJEX18pICgoKF9fU1RBTkRBUkRfXykgPT0gSTJTX1NUQU5EQVJEX1BISUxJUFMpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NUQU5EQVJEX18pID09IEkyU19TVEFOREFSRF9NU0IpICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TVEFOREFSRF9fKSA9PSBJMlNfU1RBTkRBUkRfTFNCKSAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU1RBTkRBUkRfXykgPT0gSTJTX1NUQU5EQVJEX1BDTV9TSE9SVCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NUQU5EQVJEX18pID09IEkyU19TVEFOREFSRF9QQ01fTE9ORykpCisKKyNkZWZpbmUgSVNfSTJTX0RBVEFfRk9STUFUKF9fRk9STUFUX18pICgoKF9fRk9STUFUX18pID09IEkyU19EQVRBRk9STUFUXzE2QikgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GT1JNQVRfXykgPT0gSTJTX0RBVEFGT1JNQVRfMTZCX0VYVEVOREVEKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZPUk1BVF9fKSA9PSBJMlNfREFUQUZPUk1BVF8yNEIpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRk9STUFUX18pID09IEkyU19EQVRBRk9STUFUXzMyQikpCisKKyNkZWZpbmUgSVNfSTJTX01DTEtfT1VUUFVUKF9fT1VUUFVUX18pICgoKF9fT1VUUFVUX18pID09IEkyU19NQ0xLT1VUUFVUX0VOQUJMRSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19PVVRQVVRfXykgPT0gSTJTX01DTEtPVVRQVVRfRElTQUJMRSkpCisKKyNkZWZpbmUgSVNfSTJTX0FVRElPX0ZSRVEoX19GUkVRX18pICgoKChfX0ZSRVFfXykgPj0gSTJTX0FVRElPRlJFUV84SykgICAgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlJFUV9fKSA8PSBJMlNfQVVESU9GUkVRXzE5MkspKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZSRVFfXykgPT0gSTJTX0FVRElPRlJFUV9ERUZBVUxUKSkKKworLyoqIEBicmllZiAgQ2hlY2tzIGlmIEkyUyBTZXJpYWwgY2xvY2sgc3RlYWR5IHN0YXRlIHBhcmFtZXRlciBpcyBpbiBhbGxvd2VkIHJhbmdlLgorICAqIEBwYXJhbSAgX19DUE9MX18gc3BlY2lmaWVzIHRoZSBJMlMgc2VyaWFsIGNsb2NrIHN0ZWFkeSBzdGF0ZS4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX0Nsb2NrX1BvbGFyaXR5CisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIElTX0kyU19DUE9MKF9fQ1BPTF9fKSAoKChfX0NQT0xfXykgPT0gSTJTX0NQT0xfTE9XKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NQT0xfXykgPT0gSTJTX0NQT0xfSElHSCkpCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisjZW5kaWYgLyogU1BJX0kyU19TVVBQT1JUICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTVE0zMldCeHhfSEFMX0kyU19IICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2hhbF9wd3IuaCBiL0luYy9zdG0zMndieHhfaGFsX3B3ci5oCmluZGV4IDU4ZjBiYzMuLmRmMDdmZDIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfaGFsX3B3ci5oCisrKyBiL0luYy9zdG0zMndieHhfaGFsX3B3ci5oCkBAIC0yMzUsMTIgKzIzNSwyMiBAQAogICAqCiAgICogQHJldHZhbCBUaGUgbmV3IHN0YXRlIG9mIF9fRkxBR19fIChUUlVFIG9yIEZBTFNFKS4KICAgKi8gIAotI2RlZmluZSBfX0hBTF9QV1JfR0VUX0ZMQUcoX19GTEFHX18pICAoICgoKCh1aW50OF90KShfX0ZMQUdfXykpID4+IDVVKSA9PSAxVSkgID9cCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQV1ItPlNSMSAmICgxVSA8PCAoKF9fRkxBR19fKSAmIDMxVSkpKSA6XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgoKCh1aW50OF90KShfX0ZMQUdfXykpID4+IDVVKSA9PSAyVSkpID9cCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQV1ItPlNSMiAmICgxVSA8PCAoKF9fRkxBR19fKSAmIDMxVSkpKSA6XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFdSLT5FWFRTQ1IgJiAoMVUgPDwgKChfX0ZMQUdfXykgJiAzMVUpKSkgKSApCi0KKyNkZWZpbmUgX19IQUxfUFdSX0dFVF9GTEFHKF9fRkxBR19fKSAgKCgoKF9fRkxBR19fKSAmIFBXUl9GTEFHX1JFR19NQVNLKSA9PSBQV1JfRkxBR19SRUdfU1IxKSA/ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdSLT5TUjEgJiAoMVVMIDw8ICgoX19GTEFHX18pICYgMzFVTCkpICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX0ZMQUdfXykgJiBQV1JfRkxBR19SRUdfTUFTSykgPT0gUFdSX0ZMQUdfUkVHX1NSMikgPyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV1ItPlNSMiAmICgxVUwgPDwgKChfX0ZMQUdfXykgJiAzMVVMKSkgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdSLT5FWFRTQ1IgJiAoMVVMIDw8ICgoX19GTEFHX18pICYgMzFVTCkpICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIAogLyoqIEBicmllZiAgQ2xlYXIgYSBzcGVjaWZpYyBQV1IgZmxhZy4KICAgKiBAbm90ZSAgIENsZWFyaW5nIG9mIGZsYWdzIHtQV1JfRkxBR19TVE9QLCBQV1JfRkxBR19TQn0KQEAgLTI4MCwxMyArMjkwLDE4IEBACiAgICoKICAgKiBAcmV0dmFsIE5vbmUgICAKICAgKi8KLSNkZWZpbmUgX19IQUxfUFdSX0NMRUFSX0ZMQUcoX19GTEFHX18pICAgKCAoKCgodWludDhfdCkoX19GTEFHX18pKSA+PiA1VSkgPT0gMVUpID9cCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICggKCgodWludDhfdCkoX19GTEFHX18pKSA9PSBQV1JfRkxBR19XVSkgP1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXUi0+U0NSICA9IChfX0ZMQUdfXykpIDogKFBXUi0+U0NSID0gKDFVIDw8ICgoX19GTEFHX18pICYgMzFVKSkpICkgOlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAoKCh1aW50OF90KShfX0ZMQUdfXykpID09IFBXUl9GTEFHX0NSSVRJQ0FMX1JGX1BIQVNFKSA/XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUIChQV1ItPkVYVFNDUiwgUFdSX0VYVFNDUl9DQ1JQRikgOiAoICgoKCh1aW50OF90KSgoX19GTEFHX18pKSAmIDMxVSkgPD0gUFdSX0VYVFNDUl9DMVNUT1BGX1BvcykgP1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVCAoUFdSLT5FWFRTQ1IsIFBXUl9FWFRTQ1JfQzFDU1NGKTogU0VUX0JJVCAoUFdSLT5FWFRTQ1IsIFBXUl9FWFRTQ1JfQzJDU1NGKSkgKSApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIF9fSEFMX1BXUl9DTEVBUl9GTEFHKF9fRkxBR19fKSAgICgoKChfX0ZMQUdfXykgJiBQV1JfRkxBR19SRUdfTUFTSykgPT0gUFdSX0ZMQUdfUkVHX0VYVFNDUikgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdSLT5FWFRTQ1IgPSAoMVVMIDw8ICgoKF9fRkxBR19fKSAmIFBXUl9GTEFHX0VYVFNDUl9DTFJfTUFTSykgPj4gUFdSX0ZMQUdfRVhUU0NSX0NMUl9QT1MpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19GTEFHX18pKSA9PSBQV1JfRkxBR19XVSkgPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXUi0+U0NSID0gUFdSX1NDUl9DV1VGKSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBXUi0+U0NSID0gKDFVTCA8PCAoKF9fRkxBR19fKSAmIDMxVUwpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKwogLyoqCiAgICogQGJyaWVmIEVuYWJsZSB0aGUgUFZEIEV4dGVuZGVkIEludGVycnVwdCBDMSBMaW5lLgogICAqIEByZXR2YWwgTm9uZQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyd2J4eF9oYWxfcHdyX2V4LmggYi9JbmMvc3RtMzJ3Ynh4X2hhbF9wd3JfZXguaAppbmRleCBiNzM2N2Y0Li42MTJjZmEyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2hhbF9wd3JfZXguaAorKysgYi9JbmMvc3RtMzJ3Ynh4X2hhbF9wd3JfZXguaApAQCAtMzIzLDYyICszMjMsNjIgQEAKICAgKiAgICAgICAgICAgLSBYWCAgOiBTdGF0dXMgcmVnaXN0ZXIgKDIgYml0cykKICAgKiAgICAgICAgICAgICAgICAgLSAwMTogU1IxIHJlZ2lzdGVyCiAgICogICAgICAgICAgICAgICAgIC0gMTA6IFNSMiByZWdpc3RlcgotICAqICAgICAgICAgICAgICAgICAtIDExOiBDMl9TQ1IgcmVnaXN0ZXIKKyAgKiAgICAgICAgICAgICAgICAgLSAxMTogRVhUU0NSIHJlZ2lzdGVyCiAgICogICAgICAgIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBQV1JfRkxBR19XVUYsIGVuY29tcGFzc2luZyBhbGwKICAgKiAgICAgICAgd2FrZS11cCBmbGFncyBhbmQgc2V0IHRvIFBXUl9TUjFfV1VGLiAgICAKICAgKiBAewogICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVNSMS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBQV1JfRkxBR19XVUYxICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDIwVSkgICAvKiE8IFdha2V1cCBldmVudCBvbiB3YWtldXAgcGluIDEgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfV1VGMSAgICAgICAgICAgICAgICAgICAgICAgKFBXUl9GTEFHX1JFR19TUjEgfCBQV1JfU1IxX1dVRjFfUG9zKSAgICAvKiE8IFdha2V1cCBldmVudCBvbiB3YWtldXAgcGluIDEgKi8KICNpZiBkZWZpbmVkKFBXUl9DUjNfRVdVUDIpCi0jZGVmaW5lIFBXUl9GTEFHX1dVRjIgICAgICAgICAgICAgICAgICAgICAgICgweDAwMjFVKSAgIC8qITwgV2FrZXVwIGV2ZW50IG9uIHdha2V1cCBwaW4gMiAqLworI2RlZmluZSBQV1JfRkxBR19XVUYyICAgICAgICAgICAgICAgICAgICAgICAoUFdSX0ZMQUdfUkVHX1NSMSB8IFBXUl9TUjFfV1VGMl9Qb3MpICAgIC8qITwgV2FrZXVwIGV2ZW50IG9uIHdha2V1cCBwaW4gMiAqLwogI2VuZGlmCiAjaWYgZGVmaW5lZChQV1JfQ1IzX0VXVVAzKQotI2RlZmluZSBQV1JfRkxBR19XVUYzICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDIyVSkgICAvKiE8IFdha2V1cCBldmVudCBvbiB3YWtldXAgcGluIDMgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfV1VGMyAgICAgICAgICAgICAgICAgICAgICAgKFBXUl9GTEFHX1JFR19TUjEgfCBQV1JfU1IxX1dVRjNfUG9zKSAgICAvKiE8IFdha2V1cCBldmVudCBvbiB3YWtldXAgcGluIDMgKi8KICNlbmRpZgotI2RlZmluZSBQV1JfRkxBR19XVUY0ICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDIzVSkgICAvKiE8IFdha2V1cCBldmVudCBvbiB3YWtldXAgcGluIDQgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfV1VGNCAgICAgICAgICAgICAgICAgICAgICAgKFBXUl9GTEFHX1JFR19TUjEgfCBQV1JfU1IxX1dVRjRfUG9zKSAgICAvKiE8IFdha2V1cCBldmVudCBvbiB3YWtldXAgcGluIDQgKi8KICNpZiBkZWZpbmVkKFBXUl9DUjNfRVdVUDUpCi0jZGVmaW5lIFBXUl9GTEFHX1dVRjUgICAgICAgICAgICAgICAgICAgICAgICgweDAwMjRVKSAgIC8qITwgV2FrZXVwIGV2ZW50IG9uIHdha2V1cCBwaW4gNSAqLworI2RlZmluZSBQV1JfRkxBR19XVUY1ICAgICAgICAgICAgICAgICAgICAgICAoUFdSX0ZMQUdfUkVHX1NSMSB8IFBXUl9TUjFfV1VGNV9Qb3MpICAgIC8qITwgV2FrZXVwIGV2ZW50IG9uIHdha2V1cCBwaW4gNSAqLwogI2VuZGlmCi0jZGVmaW5lIFBXUl9GTEFHX1dVICAgICAgICAgICAgICAgICAgICAgICAgIFBXUl9TUjFfV1VGICAgICAgICAgIC8qITwgRW5jb21wYXNzIHdha2V1cCBldmVudCBvbiBhbGwgd2FrZXVwIHBpbnMgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfV1UgICAgICAgICAgICAgICAgICAgICAgICAgKFBXUl9GTEFHX1JFR19TUjEgfCBQV1JfU1IxX1dVRikgICAgICAgICAvKiE8IEVuY29tcGFzcyB3YWtldXAgZXZlbnQgb24gYWxsIHdha2V1cCBwaW5zICovCiAKICNpZiBkZWZpbmVkKFBXUl9DUjVfU01QU0VOKQotI2RlZmluZSBQV1JfRkxBR19GUkNCWVBJICAgICAgICAgICAgICAgICAgICAoMHgwMDI3VSkgICAvKiE8IFNNUFMgRm9yY2VkIGluIEJ5cGFzcyBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSBQV1JfRkxBR19GUkNCWVBJICAgICAgICAgICAgICAgICAgICAoUFdSX0ZMQUdfUkVHX1NSMSB8IFBXUl9TUjFfU01QU0ZCRl9Qb3MpIC8qITwgU01QUyBGb3JjZWQgaW4gQnlwYXNzIEludGVycnVwdCBGbGFnICovCiAjZW5kaWYKLSNkZWZpbmUgUFdSX0ZMQUdfQkhXRiAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAyOVUpICAgLyohPCBCTEVfSG9zdCBXYWtlVXAgRmxhZyAqLwotI2RlZmluZSBQV1JfRkxBR19SRlBIQVNFSSAgICAgICAgICAgICAgICAgICAoMHgwMDJCVSkgICAvKiE8IFJhZGlvIFBoYXNlIEludGVycnVwdCBGbGFnICovCi0jZGVmaW5lIFBXUl9GTEFHX0JMRUFDVEkgICAgICAgICAgICAgICAgICAgICgweDAwMkNVKSAgIC8qITwgQkxFIEFjdGl2aXR5IEludGVycnVwdCBGbGFnICovCi0jZGVmaW5lIFBXUl9GTEFHXzgwMkFDVEkgICAgICAgICAgICAgICAgICAgICgweDAwMkRVKSAgIC8qITwgODAyLjE1LjQgQWN0aXZpdHkgSW50ZXJydXB0IEZsYWcgKi8KLSNkZWZpbmUgUFdSX0ZMQUdfSE9MREMySSAgICAgICAgICAgICAgICAgICAgKDB4MDAyRVUpICAgLyohPCBDUFUyIG9uLUhvbGQgSW50ZXJydXB0IEZsYWcgKi8KLSNkZWZpbmUgUFdSX0ZMQUdfV1VGSSAgICAgICAgICAgICAgICAgICAgICAgKDB4MDAyRlUpICAgLyohPCBXYWtldXAgb24gaW50ZXJuYWwgd2FrZXVwIGxpbmUgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfQkhXRiAgICAgICAgICAgICAgICAgICAgICAgKFBXUl9GTEFHX1JFR19TUjEgfCBQV1JfU1IxX0JMRVdVRl9Qb3MpICAvKiE8IEJMRV9Ib3N0IFdha2VVcCBGbGFnICovCisjZGVmaW5lIFBXUl9GTEFHX1JGUEhBU0VJICAgICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfU1IxIHwgUFdSX1NSMV9DUlBFRl9Qb3MpICAgLyohPCBSYWRpbyBQaGFzZSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSBQV1JfRkxBR19CTEVBQ1RJICAgICAgICAgICAgICAgICAgICAoUFdSX0ZMQUdfUkVHX1NSMSB8IFBXUl9TUjFfQkxFQUZfUG9zKSAgIC8qITwgQkxFIEFjdGl2aXR5IEludGVycnVwdCBGbGFnICovCisjZGVmaW5lIFBXUl9GTEFHXzgwMkFDVEkgICAgICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfU1IxIHwgUFdSX1NSMV84MDJBRl9Qb3MpICAgLyohPCA4MDIuMTUuNCBBY3Rpdml0eSBJbnRlcnJ1cHQgRmxhZyAqLworI2RlZmluZSBQV1JfRkxBR19IT0xEQzJJICAgICAgICAgICAgICAgICAgICAoUFdSX0ZMQUdfUkVHX1NSMSB8IFBXUl9TUjFfQzJIRl9Qb3MpICAgIC8qITwgQ1BVMiBvbi1Ib2xkIEludGVycnVwdCBGbGFnICovCisjZGVmaW5lIFBXUl9GTEFHX1dVRkkgICAgICAgICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfU1IxIHwgUFdSX1NSMV9XVUZJX1BvcykgICAgLyohPCBXYWtldXAgb24gaW50ZXJuYWwgd2FrZXVwIGxpbmUgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVNSMi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmIGRlZmluZWQoUFdSX0NSNV9TTVBTRU4pCi0jZGVmaW5lIFBXUl9GTEFHX1NNUFNSRFlGICAgICAgICAgICAgICAgICAgICgweDAwNDBVKSAgIC8qITwgU01QUyBSZWFkeSBGbGFnICovCi0jZGVmaW5lIFBXUl9GTEFHX1NNUFNCWVBGICAgICAgICAgICAgICAgICAgICgweDAwNDFVKSAgIC8qITwgU01QUyBCeXBhc3MgRmxhZyAqLworI2RlZmluZSBQV1JfRkxBR19TTVBTUkRZRiAgICAgICAgICAgICAgICAgICAoUFdSX0ZMQUdfUkVHX1NSMiB8IFBXUl9TUjJfU01QU0JGX1BvcykgIC8qITwgU01QUyBSZWFkeSBGbGFnICovCisjZGVmaW5lIFBXUl9GTEFHX1NNUFNCWVBGICAgICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfU1IyIHwgUFdSX1NSMl9TTVBTRl9Qb3MpICAgLyohPCBTTVBTIEJ5cGFzcyBGbGFnICovCiAjZW5kaWYKIAotI2RlZmluZSBQV1JfRkxBR19SRUdMUFMgICAgICAgICAgICAgICAgICAgICAoMHgwMDQ4VSkgICAvKiE8IExvdy1wb3dlciByZWd1bGF0b3Igc3RhcnQgZmxhZyAqLwotI2RlZmluZSBQV1JfRkxBR19SRUdMUEYgICAgICAgICAgICAgICAgICAgICAoMHgwMDQ5VSkgICAvKiE8IExvdy1wb3dlciByZWd1bGF0b3IgZmxhZyAqLworI2RlZmluZSBQV1JfRkxBR19SRUdMUFMgICAgICAgICAgICAgICAgICAgICAoUFdSX0ZMQUdfUkVHX1NSMiB8IFBXUl9TUjJfUkVHTFBTX1BvcykgIC8qITwgTG93LXBvd2VyIHJlZ3VsYXRvciBzdGFydCBmbGFnICovCisjZGVmaW5lIFBXUl9GTEFHX1JFR0xQRiAgICAgICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfU1IyIHwgUFdSX1NSMl9SRUdMUEZfUG9zKSAgLyohPCBMb3ctcG93ZXIgcmVndWxhdG9yIGZsYWcgKi8KIAogI2lmIGRlZmluZWQoUFdSX0NSMV9WT1MpCi0jZGVmaW5lIFBXUl9GTEFHX1ZPU0YgICAgICAgICAgICAgICAgICAgICAgICgweDAwNEFVKSAgIC8qITwgVm9sdGFnZSBzY2FsaW5nIGZsYWcgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfVk9TRiAgICAgICAgICAgICAgICAgICAgICAgKFBXUl9GTEFHX1JFR19TUjIgfCBQV1JfU1IyX1ZPU0ZfUG9zKSAgICAvKiE8IFZvbHRhZ2Ugc2NhbGluZyBmbGFnICovCiAjZW5kaWYKLSNkZWZpbmUgUFdSX0ZMQUdfUFZETyAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0QlUpICAgLyohPCBQb3dlciBWb2x0YWdlIERldGVjdG9yIG91dHB1dCBmbGFnICovCisjZGVmaW5lIFBXUl9GTEFHX1BWRE8gICAgICAgICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfU1IyIHwgUFdSX1NSMl9QVkRPX1BvcykgICAgLyohPCBQb3dlciBWb2x0YWdlIERldGVjdG9yIG91dHB1dCBmbGFnICovCiAKLSNkZWZpbmUgUFdSX0ZMQUdfUFZNTzEgICAgICAgICAgICAgICAgICAgICAgKDB4MDA0Q1UpICAgLyohPCBQb3dlciBWb2x0YWdlIE1vbml0b3JpbmcgMSBvdXRwdXQgZmxhZyAqLwotI2RlZmluZSBQV1JfRkxBR19QVk1PMyAgICAgICAgICAgICAgICAgICAgICAoMHgwMDRFVSkgICAvKiE8IFBvd2VyIFZvbHRhZ2UgTW9uaXRvcmluZyAzIG91dHB1dCBmbGFnICovCisjZGVmaW5lIFBXUl9GTEFHX1BWTU8xICAgICAgICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfU1IyIHwgUFdSX1NSMl9QVk1PMV9Qb3MpICAgLyohPCBQb3dlciBWb2x0YWdlIE1vbml0b3JpbmcgMSBvdXRwdXQgZmxhZyAqLworI2RlZmluZSBQV1JfRkxBR19QVk1PMyAgICAgICAgICAgICAgICAgICAgICAoUFdSX0ZMQUdfUkVHX1NSMiB8IFBXUl9TUjJfUFZNTzNfUG9zKSAgIC8qITwgUG93ZXIgVm9sdGFnZSBNb25pdG9yaW5nIDMgb3V0cHV0IGZsYWcgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FWFRTQ1ItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBQV1JfRkxBR19TQiAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwMDY4VSkgICAvKiE8IFN5c3RlbSBTdGFuZGJ5IGZsYWcgZm9yIENQVTEgKi8KLSNkZWZpbmUgUFdSX0ZMQUdfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgKDB4MDA2OVUpICAgLyohPCBTeXN0ZW0gU3RvcCBmbGFnIGZvciBDUFUxICovCisjZGVmaW5lIFBXUl9GTEFHX1NCICAgICAgICAgICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfRVhUU0NSIHwgUFdSX0VYVFNDUl9DMVNCRl9Qb3MgICB8IChQV1JfRVhUU0NSX0MxQ1NTRl9Qb3MgPDwgUFdSX0ZMQUdfRVhUU0NSX0NMUl9QT1MpKSAvKiE8IFN5c3RlbSBTdGFuZGJ5IGZsYWcgZm9yIENQVTEgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgKFBXUl9GTEFHX1JFR19FWFRTQ1IgfCBQV1JfRVhUU0NSX0MxU1RPUEZfUG9zIHwgKFBXUl9FWFRTQ1JfQzFDU1NGX1BvcyA8PCBQV1JfRkxBR19FWFRTQ1JfQ0xSX1BPUykpIC8qITwgU3lzdGVtIFN0b3AgZmxhZyBmb3IgQ1BVMSAqLwogCi0jZGVmaW5lIFBXUl9GTEFHX0MyU0IgICAgICAgICAgICAgICAgICAgICAgICgweDAwNkFVKSAgIC8qITwgU3lzdGVtIFN0YW5kYnkgZmxhZyBmb3IgQ1BVMiAqLwotI2RlZmluZSBQV1JfRkxBR19DMlNUT1AgICAgICAgICAgICAgICAgICAgICAoMHgwMDZCVSkgICAvKiE8IFN5c3RlbSBTdG9wIGZsYWcgZm9yIENQVTIgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfQzJTQiAgICAgICAgICAgICAgICAgICAgICAgKFBXUl9GTEFHX1JFR19FWFRTQ1IgfCBQV1JfRVhUU0NSX0MyU0JGX1BvcyAgIHwgKFBXUl9FWFRTQ1JfQzJDU1NGX1BvcyA8PCBQV1JfRkxBR19FWFRTQ1JfQ0xSX1BPUykpIC8qITwgU3lzdGVtIFN0YW5kYnkgZmxhZyBmb3IgQ1BVMiAqLworI2RlZmluZSBQV1JfRkxBR19DMlNUT1AgICAgICAgICAgICAgICAgICAgICAoUFdSX0ZMQUdfUkVHX0VYVFNDUiB8IFBXUl9FWFRTQ1JfQzJTVE9QRl9Qb3MgfCAoUFdSX0VYVFNDUl9DMkNTU0ZfUG9zIDw8IFBXUl9GTEFHX0VYVFNDUl9DTFJfUE9TKSkgLyohPCBTeXN0ZW0gU3RvcCBmbGFnIGZvciBDUFUyICovCiAKLSNkZWZpbmUgUFdSX0ZMQUdfQ1JJVElDQUxfUkZfUEhBU0UgICAgICAgICAgKDB4MDA2RFUpICAgLyohPCBDcml0aWNhbCByYWRpbyBzeXN0ZW0gcGhhc2UgZmxhZyAqLwotI2RlZmluZSBQV1JfRkxBR19DMURFRVBTTEVFUCAgICAgICAgICAgICAgICAoMHgwMDZFVSkgICAvKiE8IENQVTEgRGVlcFNsZWVwIEZsYWcgKi8KLSNkZWZpbmUgUFdSX0ZMQUdfQzJERUVQU0xFRVAgICAgICAgICAgICAgICAgKDB4MDA2RlUpICAgLyohPCBDUFUyIERlZXBTbGVlcCBGbGFnICovCisjZGVmaW5lIFBXUl9GTEFHX0NSSVRJQ0FMX1JGX1BIQVNFICAgICAgICAgIChQV1JfRkxBR19SRUdfRVhUU0NSIHwgUFdSX0VYVFNDUl9DUlBGX1BvcyB8IChQV1JfRVhUU0NSX0NDUlBGX1BvcyA8PCBQV1JfRkxBR19FWFRTQ1JfQ0xSX1BPUykpICAgICAvKiE8IENyaXRpY2FsIHJhZGlvIHN5c3RlbSBwaGFzZSBmbGFnICovCisjZGVmaW5lIFBXUl9GTEFHX0MxREVFUFNMRUVQICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfRVhUU0NSIHwgUFdSX0VYVFNDUl9DMURTX1BvcykgICAgLyohPCBDUFUxIERlZXBTbGVlcCBGbGFnICovCisjZGVmaW5lIFBXUl9GTEFHX0MyREVFUFNMRUVQICAgICAgICAgICAgICAgIChQV1JfRkxBR19SRUdfRVhUU0NSIHwgUFdSX0VYVFNDUl9DMkRTX1BvcykgICAgLyohPCBDUFUyIERlZXBTbGVlcCBGbGFnICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDM2LDYgKzQzNiwxOSBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgUFdSX0ZMQUdfUkVHIFBXUiBmbGFnIHJlZ2lzdGVyCisgICogQHsKKyAgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfUkVHX1NSMSAgICAgICAgICgweDIwVUwpICAgLyogQml0ZmllbGQgdG8gaW5kaWNhdGUgUFdSIGZsYWcgbG9jYXRlZCBpbiByZWdpc3RlciBQV1JfU1IxICovCisjZGVmaW5lIFBXUl9GTEFHX1JFR19TUjIgICAgICAgICAoMHg0MFVMKSAgIC8qIEJpdGZpZWxkIHRvIGluZGljYXRlIFBXUiBmbGFnIGxvY2F0ZWQgaW4gcmVnaXN0ZXIgUFdSX1NSMiAqLworI2RlZmluZSBQV1JfRkxBR19SRUdfRVhUU0NSICAgICAgKDB4NjBVTCkgICAvKiBCaXRmaWVsZCB0byBpbmRpY2F0ZSBQV1IgZmxhZyBsb2NhdGVkIGluIHJlZ2lzdGVyIFBXUl9FWFRTQ1IgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfUkVHX01BU0sgICAgICAgIChQV1JfRkxBR19SRUdfU1IxIHwgUFdSX0ZMQUdfUkVHX1NSMiB8IFBXUl9GTEFHX1JFR19FWFRTQ1IpICAgLyogQml0ZmllbGQgbWFzayB0byBpbmRpY2F0ZSBQV1IgZmxhZyBsb2NhdGlvbiBpbiBQV1IgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUFdSX0ZMQUdfRVhUU0NSX0NMUl9QT1MgICgxNlVMKSAgICAgLyogQml0ZmllbGQgZm9yIHJlZ2lzdGVyIFBXUl9FWFRTQ1IgY2xlYXJhYmxlIGJpdHMgcG9zaXRpb25zOiBwb3NpdGlvbiBvZiBiaXRmaWVsZCBpbiBmbGFnIGxpdGVyYWxzICovCisjZGVmaW5lIFBXUl9GTEFHX0VYVFNDUl9DTFJfTUFTSyAoKFBXUl9FWFRTQ1JfQzFDU1NGX1BvcyB8IFBXUl9FWFRTQ1JfQzJDU1NGX1BvcyB8IFBXUl9FWFRTQ1JfQ0NSUEZfUG9zKSA8PCBQV1JfRkxBR19FWFRTQ1JfQ0xSX1BPUykgIC8qIEJpdGZpZWxkIGZvciByZWdpc3RlciBQV1JfRVhUU0NSIGNsZWFyYWJsZSBiaXRzIHBvc2l0aW9uczogbWFzayBvZiBiaXRmaWVsZCBpbiBmbGFnIGxpdGVyYWxzICovCisvKioKKyAgKiBAfQorICAqLworCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyd2J4eF9oYWxfcmNjLmggYi9JbmMvc3RtMzJ3Ynh4X2hhbF9yY2MuaAppbmRleCAzNmM2NDdiLi4xNjQzZDJmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2hhbF9yY2MuaAorKysgYi9JbmMvc3RtMzJ3Ynh4X2hhbF9yY2MuaApAQCAtMTIwLDkgKzEyMCw5IEBACiAKICNpZiBkZWZpbmVkKFNBSTEpCiAjZGVmaW5lIElTX1JDQ19QTExTQUkxQ0xPQ0tPVVRfVkFMVUUoX19WQUxVRV9fKSAoKCgoKF9fVkFMVUVfXykgJiBSQ0NfUExMU0FJMV9BRENDTEspID09IFJDQ19QTExTQUkxX0FEQ0NMSykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19WQUxVRV9fKSAmIFJDQ19QTExTQUkxX1NBSTFDTEspID09IFJDQ19QTExTQUkxX1NBSTFDTEspICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX1ZBTFVFX18pICYgUkNDX1BMTFNBSTFfVVNCQ0xLKSA9PSBSQ0NfUExMU0FJMV9VU0JDTEspKSAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChfX1ZBTFVFX18pICYgfihSQ0NfUExMU0FJMV9BRENDTEt8UkNDX1BMTFNBSTFfU0FJMUNMS3xSQ0NfUExMU0FJMV9VU0JDTEspKSA9PSAwVSkpCisgICAgKCgoX19WQUxVRV9fKSAmIFJDQ19QTExTQUkxX1NBSTFDTEspID09IFJDQ19QTExTQUkxX1NBSTFDTEspIHx8IFwKKyAgICAoKChfX1ZBTFVFX18pICYgUkNDX1BMTFNBSTFfVVNCQ0xLKSAgPT0gUkNDX1BMTFNBSTFfVVNCQ0xLKSkgJiYgXAorICAgICgoKF9fVkFMVUVfXykgJiB+KFJDQ19QTExTQUkxX0FEQ0NMSyB8IFJDQ19QTExTQUkxX1NBSTFDTEsgfCBSQ0NfUExMU0FJMV9VU0JDTEspKSA9PSAwVSkpCiAjZW5kaWYKICNkZWZpbmUgSVNfUkNDX01TSV9DTE9DS19SQU5HRShfX1JBTkdFX18pICgoKF9fUkFOR0VfXykgPT0gUkNDX01TSVJBTkdFXzApICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JBTkdFX18pID09IFJDQ19NU0lSQU5HRV8xKSAgfHwgXApAQCAtMTY0LDcgKzE2NCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19SVENDTEtTT1VSQ0VfTFNJKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1JUQ0NMS1NPVVJDRV9IU0VfRElWMzIpKQogCi0jZGVmaW5lIElTX1JDQ19NQ08oX19NQ09YX18pICggKChfX01DT1hfXykgPT0gUkNDX01DTzEpIHx8ICgoX19NQ09YX18pID09IFJDQ19NQ08yKSB8fCAoKF9fTUNPWF9fKSA9PSBSQ0NfTUNPMykgKQorI2lmIGRlZmluZWQoUkNDX01DTzNfU1VQUE9SVCkKKyNkZWZpbmUgSVNfUkNDX01DTyhfX01DT1hfXykgKCgoX19NQ09YX18pID09IFJDQ19NQ08xKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTUNPWF9fKSA9PSBSQ0NfTUNPMikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01DT1hfXykgPT0gUkNDX01DTzMpKQorI2Vsc2UKKyNkZWZpbmUgSVNfUkNDX01DTyhfX01DT1hfXykgKCgoX19NQ09YX18pID09IFJDQ19NQ08xKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTUNPWF9fKSA9PSBSQ0NfTUNPMikpCisjZW5kaWYKIAogI2RlZmluZSBJU19SQ0NfTUNPMVNPVVJDRShfX1NPVVJDRV9fKSAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfTUNPMVNPVVJDRV9OT0NMT0NLKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19NQ08xU09VUkNFX1NZU0NMSykgfHwgXApAQCAtNTEwLDYgKzUxNyw5IEBACiAjZGVmaW5lIFJDQ19QTExfU0FJMUNMSyAgICAgICAgICAgICAgICBSQ0NfUExMQ0ZHUl9QTExQRU4gICAgICAvKiE8IFBMTFNBSTFDTEsgc2VsZWN0aW9uIGZyb20gbWFpbiBQTEwgKi8KICNlbmRpZgogI2RlZmluZSBSQ0NfUExMX0FEQ0NMSyAgICAgICAgICAgICAgICAgUkNDX1BMTENGR1JfUExMUEVOICAgICAgLyohPCBQTExBRENDTEsgc2VsZWN0aW9uIGZyb20gbWFpbiBQTEwgKi8KKyNpZiBkZWZpbmVkKFNQSV9JMlNfU1VQUE9SVCkKKyNkZWZpbmUgUkNDX1BMTF9JMlNDTEsgICAgICAgICAgICAgICAgIFJDQ19QTExDRkdSX1BMTFBFTiAgICAgIC8qITwgUExMSTJTQ0xLIHNlbGVjdGlvbiBmcm9tIG1haW4gUExMICovCisjZW5kaWYKIC8qKgogICAqIEB9CiAgICovCkBAIC02MjksNyArNjM5LDkgQEAKICAgKi8KICNkZWZpbmUgUkNDX01DTzEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgIC8qITwgTUNPMSBpbmRleCAqLwogI2RlZmluZSBSQ0NfTUNPMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMVUgICAgICAgICAgLyohPCBNQ08yIGluZGV4ICovCisjaWYgZGVmaW5lZChSQ0NfTUNPM19TVVBQT1JUKQogI2RlZmluZSBSQ0NfTUNPMyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlUgICAgICAgICAgLyohPCBNQ08zIGluZGV4ICovCisjZW5kaWYKIAogI2RlZmluZSBSQ0NfTUNPICAgICAgICAgICAgICAgICAgICAgICAgUkNDX01DTzEgICAgICAgICAgICAgLyohPCBNQ08xIHRvIGJlIGNvbXBsaWFudCB3aXRoIG90aGVyIGZhbWlsaWVzIHdpdGggMSBNQ08qLwogLyoqCkBAIC03MjksNyArNzQxLDkgQEAKICNkZWZpbmUgUkNDX0ZMQUdfSFNJUkRZICAgICAgICAgICAgICAgICgoQ1JfUkVHX0lOREVYIDw8IDVVKSB8IFJDQ19DUl9IU0lSRFlfUG9zKSAgICAgIC8qITwgSFNJIFJlYWR5IGZsYWcgKi8KICNkZWZpbmUgUkNDX0ZMQUdfSFNFUkRZICAgICAgICAgICAgICAgICgoQ1JfUkVHX0lOREVYIDw8IDVVKSB8IFJDQ19DUl9IU0VSRFlfUG9zKSAgICAgIC8qITwgSFNFIFJlYWR5IGZsYWcgKi8KICNkZWZpbmUgUkNDX0ZMQUdfUExMUkRZICAgICAgICAgICAgICAgICgoQ1JfUkVHX0lOREVYIDw8IDVVKSB8IFJDQ19DUl9QTExSRFlfUG9zKSAgICAgIC8qITwgUExMIFJlYWR5IGZsYWcgKi8KKyNpZiBkZWZpbmVkKFNBSTEpCiAjZGVmaW5lIFJDQ19GTEFHX1BMTFNBSTFSRFkgICAgICAgICAgICAoKENSX1JFR19JTkRFWCA8PCA1VSkgfCBSQ0NfQ1JfUExMU0FJMVJEWV9Qb3MpICAvKiE8IFBMTFNBSTEgUmVhZHkgZmxhZyAqLworI2VuZGlmCiAKIC8qIEZsYWdzIGluIHRoZSBCRENSIHJlZ2lzdGVyICovCiAjZGVmaW5lIFJDQ19GTEFHX0xTRVJEWSAgICAgICAgICAgICAgICAoKEJEQ1JfUkVHX0lOREVYIDw8IDVVKSB8IFJDQ19CRENSX0xTRVJEWV9Qb3MpICAvKiE8IExTRSBSZWFkeSBmbGFnICovCkBAIC0xMjE2LDcgKzEyMzAsNyBAQAogI2RlZmluZSBfX0hBTF9SQ0NfQzJHUElPRV9DTEtfRU5BQkxFKCkgICAgICAgICAgIExMX0MyX0FIQjJfR1JQMV9FbmFibGVDbG9jayhMTF9DMl9BSEIyX0dSUDFfUEVSSVBIX0dQSU9FKQogI2RlZmluZSBfX0hBTF9SQ0NfQzJHUElPSF9DTEtfRU5BQkxFKCkgICAgICAgICAgIExMX0MyX0FIQjJfR1JQMV9FbmFibGVDbG9jayhMTF9DMl9BSEIyX0dSUDFfUEVSSVBIX0dQSU9IKQogI2RlZmluZSBfX0hBTF9SQ0NfQzJBRENfQ0xLX0VOQUJMRSgpICAgICAgICAgICAgIExMX0MyX0FIQjJfR1JQMV9FbmFibGVDbG9jayhMTF9DMl9BSEIyX0dSUDFfUEVSSVBIX0FEQykKLSNpZiBkZWZpbmVkKEdQSU9EKQorI2lmIGRlZmluZWQoQUVTMSkKICNkZWZpbmUgX19IQUxfUkNDX0MyQUVTMV9DTEtfRU5BQkxFKCkgICAgICAgICAgICBMTF9DMl9BSEIyX0dSUDFfRW5hYmxlQ2xvY2soTExfQzJfQUhCMl9HUlAxX1BFUklQSF9BRVMxKQogI2VuZGlmCiAKQEAgLTI5MjEsNiArMjkzNSw3IEBACiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1BMTF9VU0JDTEsgIFRoaXMgQ2xvY2sgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY2xvY2sgZm9yIHRoZSBVU0IgRlMgKDQ4IE1IeikKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfUExMX1JOR0NMSyAgVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjbG9jayBmb3IgUk5HCiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1BMTF9TWVNDTEsgIFRoaXMgQ2xvY2sgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaGlnaCBzcGVlZCBzeXN0ZW0gY2xvY2sgKHVwIHRvIDY0TUh6KQorICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19QTExfSTJTQ0xLICBUaGlzIENsb2NrIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGNsb2NrIGZvciB0aGUgSTJTCiAgICogQHJldHZhbCBOb25lCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19QTExDTEtPVVRfRU5BQkxFKF9fUExMQ0xPQ0tPVVRfXykgICBTRVRfQklUKFJDQy0+UExMQ0ZHUiwgKF9fUExMQ0xPQ0tPVVRfXykpCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2hhbF9yY2NfZXguaCBiL0luYy9zdG0zMndieHhfaGFsX3JjY19leC5oCmluZGV4IDIzMDkyOWUuLjc4OWEyODggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfaGFsX3JjY19leC5oCisrKyBiL0luYy9zdG0zMndieHhfaGFsX3JjY19leC5oCkBAIC01OSw3ICs1OSwxNCBAQAogLyoqIEBhZGR0b2dyb3VwIFJDQ0V4X1ByaXZhdGVfTWFjcm9zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgSVNfUkNDX0xTQ08oX19MU0NPWF9fKSAoICgoX19MU0NPWF9fKSA9PSBSQ0NfTFNDTzEpIHx8ICgoX19MU0NPWF9fKSA9PSBSQ0NfTFNDTzIpIHx8ICgoX19MU0NPWF9fKSA9PSBSQ0NfTFNDTzMpICkKKyNpZiBkZWZpbmVkKFJDQ19MU0NPM19TVVBQT1JUKQorI2RlZmluZSBJU19SQ0NfTFNDTyhfX0xTQ09YX18pICgoKF9fTFNDT1hfXykgPT0gUkNDX0xTQ08xKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MU0NPWF9fKSA9PSBSQ0NfTFNDTzIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xTQ09YX18pID09IFJDQ19MU0NPMykpCisjZWxzZQorI2RlZmluZSBJU19SQ0NfTFNDTyhfX0xTQ09YX18pICgoKF9fTFNDT1hfXykgPT0gUkNDX0xTQ08xKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MU0NPWF9fKSA9PSBSQ0NfTFNDTzIpKQorI2VuZGlmCiAKICNkZWZpbmUgSVNfUkNDX0xTQ09TT1VSQ0UoX19TT1VSQ0VfXykgKCgoX19TT1VSQ0VfXykgPT0gUkNDX0xTQ09TT1VSQ0VfTFNJKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19MU0NPU09VUkNFX0xTRSkpCkBAIC02Nyw4ICs3NCw4IEBACiAjaWYgZGVmaW5lZChMUFVBUlQxKSAmJiBkZWZpbmVkKEkyQzMpICYmIGRlZmluZWQoU0FJMSkgJiYgZGVmaW5lZChVU0IpICYmIGRlZmluZWQoUkNDX1NNUFNfU1VQUE9SVCkKICNkZWZpbmUgSVNfUkNDX1BFUklQSENMT0NLKF9fU0VMRUNUSU9OX18pICBcCiAgICAgICAgICAgICAgICAoKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1VTQVJUMSkgICA9PSBSQ0NfUEVSSVBIQ0xLX1VTQVJUMSkgIHx8IFwKLSAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfTFBVQVJUMSkgPT0gUkNDX1BFUklQSENMS19MUFVBUlQxKSAgfHwgXAotICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19JMkMxKSAgICAgID09IFJDQ19QRVJJUEhDTEtfSTJDMSkgICB8fCBcCisgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0xQVUFSVDEpICA9PSBSQ0NfUEVSSVBIQ0xLX0xQVUFSVDEpIHx8IFwKKyAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfSTJDMSkgICAgID09IFJDQ19QRVJJUEhDTEtfSTJDMSkgICAgfHwgXAogICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19JMkMzKSAgICAgPT0gUkNDX1BFUklQSENMS19JMkMzKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0xQVElNMSkgICA9PSBSQ0NfUEVSSVBIQ0xLX0xQVElNMSkgIHx8IFwKICAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfTFBUSU0yKSAgID09IFJDQ19QRVJJUEhDTEtfTFBUSU0yKSAgfHwgXApAQCAtNzksMTAgKzg2LDI1IEBACiAgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1JUQykgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1JUQykgICAgIHx8IFwKICAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfUkZXQUtFVVApID09IFJDQ19QRVJJUEhDTEtfUkZXQUtFVVApfHwgXAogICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19TTVBTKSAgICAgPT0gUkNDX1BFUklQSENMS19TTVBTKSkKKyNlbGlmIGRlZmluZWQoTFBVQVJUMSkgJiYgZGVmaW5lZChVU0IpICYmIGRlZmluZWQoUkNDX1NNUFNfU1VQUE9SVCkgJiYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisjZGVmaW5lIElTX1JDQ19QRVJJUEhDTE9DSyhfX1NFTEVDVElPTl9fKSAgXAorICAgICAgICAgICAgICAgKCgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19VU0FSVDEpICAgPT0gUkNDX1BFUklQSENMS19VU0FSVDEpICB8fCBcCisgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0xQVUFSVDEpICA9PSBSQ0NfUEVSSVBIQ0xLX0xQVUFSVDEpIHx8IFwKKyAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfSTJDMSkgICAgID09IFJDQ19QRVJJUEhDTEtfSTJDMSkgICAgfHwgXAorICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19JMkMzKSAgICAgPT0gUkNDX1BFUklQSENMS19JMkMzKSAgICB8fCBcCisgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0xQVElNMSkgICA9PSBSQ0NfUEVSSVBIQ0xLX0xQVElNMSkgIHx8IFwKKyAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfTFBUSU0yKSAgID09IFJDQ19QRVJJUEhDTEtfTFBUSU0yKSAgfHwgXAorICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19VU0IpICAgICAgPT0gUkNDX1BFUklQSENMS19VU0IpICAgICB8fCBcCisgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1JORykgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1JORykgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfQURDKSAgICAgID09IFJDQ19QRVJJUEhDTEtfQURDKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19SVEMpICAgICAgPT0gUkNDX1BFUklQSENMS19SVEMpICAgICB8fCBcCisgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1JGV0FLRVVQKSA9PSBSQ0NfUEVSSVBIQ0xLX1JGV0FLRVVQKXx8IFwKKyAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfU01QUykgICAgID09IFJDQ19QRVJJUEhDTEtfU01QUykgICAgfHwgXAorICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19JMlMpICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0kyUykpCiAjZWxzZQogI2RlZmluZSBJU19SQ0NfUEVSSVBIQ0xPQ0soX19TRUxFQ1RJT05fXykgIFwKICAgICAgICAgICAgICAgICgoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfVVNBUlQxKSAgID09IFJDQ19QRVJJUEhDTEtfVVNBUlQxKSAgfHwgXAotICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19JMkMxKSAgICAgID09IFJDQ19QRVJJUEhDTEtfSTJDMSkgICB8fCBcCisgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX0kyQzEpICAgICA9PSBSQ0NfUEVSSVBIQ0xLX0kyQzEpICAgIHx8IFwKICAgICAgICAgICAgICAgICAoKChfX1NFTEVDVElPTl9fKSAmIFJDQ19QRVJJUEhDTEtfTFBUSU0xKSAgID09IFJDQ19QRVJJUEhDTEtfTFBUSU0xKSAgfHwgXAogICAgICAgICAgICAgICAgICgoKF9fU0VMRUNUSU9OX18pICYgUkNDX1BFUklQSENMS19MUFRJTTIpICAgPT0gUkNDX1BFUklQSENMS19MUFRJTTIpICB8fCBcCiAgICAgICAgICAgICAgICAgKCgoX19TRUxFQ1RJT05fXykgJiBSQ0NfUEVSSVBIQ0xLX1JORykgICAgICA9PSBSQ0NfUEVSSVBIQ0xLX1JORykgICAgIHx8IFwKQEAgLTExOCw5ICsxNDAsOSBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFNBSTEpCi0jZGVmaW5lIElTX1JDQ19TQUkxQ0xLKF9fU09VUkNFX18pICAgXAorI2RlZmluZSBJU19SQ0NfU0FJMUNMSyhfX1NPVVJDRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgKCgoX19TT1VSQ0VfXykgPT0gUkNDX1NBSTFDTEtTT1VSQ0VfUExMU0FJMSkgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1NBSTFDTEtTT1VSQ0VfUExMKSB8fCBcCisgICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfU0FJMUNMS1NPVVJDRV9QTEwpICAgICB8fCBcCiAgICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfU0FJMUNMS1NPVVJDRV9IU0kpICAgICB8fCBcCiAgICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfU0FJMUNMS1NPVVJDRV9QSU4pKQogI2VuZGlmCkBAIC0xNDUsNiArMTY3LDcgQEAKICAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19STkdDTEtTT1VSQ0VfTFNJKSAgICAgfHwgXAogICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX1JOR0NMS1NPVVJDRV9MU0UpKQogCisjaWYgZGVmaW5lZChVU0IpCiAjaWYgZGVmaW5lZChTQUkxKQogI2RlZmluZSBJU19SQ0NfVVNCQ0xLU09VUkNFKF9fU09VUkNFX18pICBcCiAgICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNCQ0xLU09VUkNFX0hTSTQ4KSAgIHx8IFwKQEAgLTE1NywxNyArMTgwLDI0IEBACiAgICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfVVNCQ0xLU09VUkNFX1BMTCkgICAgIHx8IFwKICAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19VU0JDTEtTT1VSQ0VfTVNJKSkKICNlbmRpZgorI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFNBSTEpCisjaWYgZGVmaW5lZChTVE0zMldCNTV4eCkgfHwgZGVmaW5lZCAoU1RNMzJXQjVNeHgpCisjZGVmaW5lIElTX1JDQ19BRENDTEtTT1VSQ0UoX19TT1VSQ0VfXykgIFwKKyAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19BRENDTEtTT1VSQ0VfTk9ORSkgICAgfHwgXAorICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0FEQ0NMS1NPVVJDRV9QTEwpICAgICB8fCBcCisgICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfQURDQ0xLU09VUkNFX1BMTFNBSTEpIHx8IFwKKyAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19BRENDTEtTT1VSQ0VfU1lTQ0xLKSkKKyNlbGlmIGRlZmluZWQoU1RNMzJXQjM1eHgpCiAjZGVmaW5lIElTX1JDQ19BRENDTEtTT1VSQ0UoX19TT1VSQ0VfXykgIFwKICAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19BRENDTEtTT1VSQ0VfTk9ORSkgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0FEQ0NMS1NPVVJDRV9QTEwpIHx8IFwKLSAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19BRENDTEtTT1VSQ0VfUExMU0FJMSkgfHwgXAorICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0FEQ0NMS1NPVVJDRV9QTEwpICB8fCBcCisgICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfQURDQ0xLU09VUkNFX0hTSSkgIHx8IFwKICAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19BRENDTEtTT1VSQ0VfU1lTQ0xLKSkKICNlbHNlCiAjZGVmaW5lIElTX1JDQ19BRENDTEtTT1VSQ0UoX19TT1VSQ0VfXykgIFwKICAgICAgICAgICAgICAgICgoKF9fU09VUkNFX18pID09IFJDQ19BRENDTEtTT1VSQ0VfTk9ORSkgfHwgXAotICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0FEQ0NMS1NPVVJDRV9QTEwpIHx8IFwKKyAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19BRENDTEtTT1VSQ0VfUExMKSAgfHwgXAogICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0FEQ0NMS1NPVVJDRV9TWVNDTEspKQogI2VuZGlmCiAKQEAgLTE5MCw2ICsyMjAsMTQgQEAKICAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19TTVBTQ0xLU09VUkNFX0hTRSkpCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoU1BJX0kyU19TVVBQT1JUKQorI2RlZmluZSBJU19SQ0NfSTJTQ0xLU09VUkNFKF9fU09VUkNFX18pICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAoKChfX1NPVVJDRV9fKSA9PSBSQ0NfSTJTQ0xLU09VUkNFX05PTkUpIHx8IFwKKyAgICAgICAgICAgICAgICAoKF9fU09VUkNFX18pID09IFJDQ19JMlNDTEtTT1VSQ0VfSFNJKSAgfHwgXAorICAgICAgICAgICAgICAgICgoX19TT1VSQ0VfXykgPT0gUkNDX0kyU0NMS1NPVVJDRV9QTEwpICB8fCBcCisgICAgICAgICAgICAgICAgKChfX1NPVVJDRV9fKSA9PSBSQ0NfSTJTQ0xLU09VUkNFX1BJTikpCisjZW5kaWYKKwogI2lmIGRlZmluZWQoU0FJMSkKICNkZWZpbmUgSVNfUkNDX1BMTFNBSTFOX1ZBTFVFKF9fVkFMVUVfXykgICAoKDZVIDw9IChfX1ZBTFVFX18pKSAmJiAoKF9fVkFMVUVfXykgPD0gMTI3VSkpCiAKQEAgLTI5OSw4ICszMzcsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJDQ0V4X1NBSTFfQ2xvY2tfU291cmNlICovCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoVVNCKQogICB1aW50MzJfdCBVc2JDbG9ja1NlbGVjdGlvbjsgICAgICAvKiE8IFNwZWNpZmllcyBVU0IgY2xvY2sgc291cmNlICh3YXJuaW5nOiBzYW1lIHNvdXJjZSBmb3IgUk5HKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJDQ0V4X1VTQl9DbG9ja19Tb3VyY2UgKi8KKyNlbmRpZgogCiAgIHVpbnQzMl90IFJuZ0Nsb2NrU2VsZWN0aW9uOyAgICAgIC8qITwgU3BlY2lmaWVzIFJORyBjbG9jayBzb3VyY2UgKHdhcm5pbmc6IHNhbWUgc291cmNlIGZvciBVU0IpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUkNDRXhfUk5HX0Nsb2NrX1NvdXJjZSAqLwpAQCAtMzIyLDYgKzM2MiwxMSBAQAogICB1aW50MzJfdCBTbXBzRGl2U2VsZWN0aW9uOyAgICAgICAvKiE8IFNwZWNpZmllcyBTTVBTIGNsb2NrIGRpdmlzaW9uIGZhY3Rvci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJDQ0V4X1NNUFNfQ2xvY2tfRGl2aWRlciAqLwogI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNQSV9JMlNfU1VQUE9SVCkKKyAgdWludDMyX3QgSTJzQ2xvY2tTZWxlY3Rpb247ICAgICAgLyohPCBTcGVjaWZpZXMgSTJzIGNsb2NrIHNvdXJjZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJDQ0V4X0kyc19DbG9ja19Tb3VyY2UgKi8KKyNlbmRpZgogfSBSQ0NfUGVyaXBoQ0xLSW5pdFR5cGVEZWY7CiAKIApAQCAtMzg5LDcgKzQzNCw5IEBACiAgICovCiAjZGVmaW5lIFJDQ19MU0NPMSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgLyohPCBMU0NPMSBpbmRleCAqLwogI2RlZmluZSBSQ0NfTFNDTzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVICAgICAgICAgIC8qITwgTFNDTzIgaW5kZXggKi8KKyNpZiBkZWZpbmVkKFJDQ19MU0NPM19TVVBQT1JUKQogI2RlZmluZSBSQ0NfTFNDTzMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDJVICAgICAgICAgIC8qITwgTFNDTzMgaW5kZXggKi8KKyNlbmRpZgogLyoqCiAgICogQH0KICAgKi8KQEAgLTQyMSw3ICs0NjgsOSBAQAogI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX1NBSTEgICAgICAgICAgICAgMHgwMDAwMDA0MFUgICAgICAgICAgICAgICAgICAgIC8qITwgU0FJMSBQZXJpcGhlcmFsIENsb2NrIFNlbGVjdGlvbiAgICAgICAgKi8KICNlbmRpZgogI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX0NMSzQ4U0VMICAgICAgICAgMHgwMDAwMDEwMFUgICAgICAgICAgICAgICAgICAgIC8qITwgNDggTUh6IGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKFVTQikKICNkZWZpbmUgUkNDX1BFUklQSENMS19VU0IgICAgICAgICAgICAgIFJDQ19QRVJJUEhDTEtfQ0xLNDhTRUwgICAgICAgICAvKiE8IFVTQiBQZXJpcGhlcmFsIENsb2NrIFNlbGVjdGlvbiAgICAgICAgICovCisjZW5kaWYKICNkZWZpbmUgUkNDX1BFUklQSENMS19STkcgICAgICAgICAgICAgIDB4MDAwMDAyMDBVICAgICAgICAgICAgICAgICAgICAvKiE8IFJORyBQZXJpcGhlcmFsIENsb2NrIFNlbGVjdGlvbiAgICAgICAgICovCiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfQURDICAgICAgICAgICAgICAweDAwMDAwNDAwVSAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgUGVyaXBoZXJhbCBDbG9jayBTZWxlY3Rpb24gICAgICAgICAqLwogI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX1JUQyAgICAgICAgICAgICAgMHgwMDAwMDgwMFUgICAgICAgICAgICAgICAgICAgIC8qITwgUlRDIFBlcmlwaGVyYWwgQ2xvY2sgU2VsZWN0aW9uICAgICAgICAgKi8KQEAgLTQyOSw2ICs0NzgsOSBAQAogI2lmIGRlZmluZWQoUkNDX1NNUFNfU1VQUE9SVCkKICNkZWZpbmUgUkNDX1BFUklQSENMS19TTVBTICAgICAgICAgICAgIDB4MDAwMDIwMDBVICAgICAgICAgICAgICAgICAgICAvKiE8IFNNUFMgUGVyaXBoZXJhbCBDbG9jayBTZWxlY3Rpb24gICAgICAgICAqLwogI2VuZGlmCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisjZGVmaW5lIFJDQ19QRVJJUEhDTEtfSTJTICAgICAgICAgICAgICAweDAwMDA0MDAwVSAgICAgICAgICAgICAgICAgICAgLyohPCBJMlMgUGVyaXBoZXJhbCBDbG9jayBTZWxlY3Rpb24gICAgICAgICovCisjZW5kaWYKIC8qKgogICAqIEB9CiAgICovCkBAIC01MjcsMjQgKzU3OSwzMCBAQAogICAqIEB9CiAgICovCiAKKyNpZiBkZWZpbmVkKFVTQikKIC8qKiBAZGVmZ3JvdXAgUkNDRXhfVVNCX0Nsb2NrX1NvdXJjZSBVU0IgQ2xvY2sgU291cmNlCiAgICogQHsKICAgKi8KICNkZWZpbmUgUkNDX1VTQkNMS1NPVVJDRV9IU0k0OCAgICAgICAgIExMX1JDQ19VU0JfQ0xLU09VUkNFX0hTSTQ4ICAgICAvKiE8IEhTSTQ4IGNsb2NrIHNlbGVjdGVkIGFzIFVTQiBjbG9jayAgICAgICAqLworI2lmIGRlZmluZWQoU0FJMSkKICNkZWZpbmUgUkNDX1VTQkNMS1NPVVJDRV9QTExTQUkxICAgICAgIExMX1JDQ19VU0JfQ0xLU09VUkNFX1BMTFNBSTEgICAvKiE8IFBMTFNBSTEgIlEiIGNsb2NrIHNlbGVjdGVkIGFzIFVTQiBjbG9jayAqLworI2VuZGlmCiAjZGVmaW5lIFJDQ19VU0JDTEtTT1VSQ0VfUExMICAgICAgICAgICBMTF9SQ0NfVVNCX0NMS1NPVVJDRV9QTEwgICAgICAgLyohPCBQTEwgIlEiIGNsb2NrIHNlbGVjdGVkIGFzIFVTQiBjbG9jayAgICAgKi8KICNkZWZpbmUgUkNDX1VTQkNMS1NPVVJDRV9NU0kgICAgICAgICAgIExMX1JDQ19VU0JfQ0xLU09VUkNFX01TSSAgICAgICAvKiE8IE1TSSBjbG9jayBzZWxlY3RlZCBhcyBVU0IgY2xvY2sgICAgICAgICAqLwogLyoqCiAgICogQH0KICAgKi8KKyNlbmRpZgogCiAvKiogQGRlZmdyb3VwIFJDQ0V4X0FEQ19DbG9ja19Tb3VyY2UgQURDIENsb2NrIFNvdXJjZQogICAqIEB7CiAgICovCiAKICNkZWZpbmUgUkNDX0FEQ0NMS1NPVVJDRV9OT05FICAgICAgICAgIExMX1JDQ19BRENfQ0xLU09VUkNFX05PTkUgICAgICAvKiE8IE5vbmUgY2xvY2sgc2VsZWN0ZWQgYXMgQURDIGNsb2NrICAgICAgICAqLwotI2lmIGRlZmluZWQoU0FJMSkKKyNpZiBkZWZpbmVkKFNUTTMyV0I1NXh4KSB8fCBkZWZpbmVkIChTVE0zMldCNU14eCkKICNkZWZpbmUgUkNDX0FEQ0NMS1NPVVJDRV9QTExTQUkxICAgICAgIExMX1JDQ19BRENfQ0xLU09VUkNFX1BMTFNBSTEgICAvKiE8IFBMTFNBSTEgIlIiIGNsb2NrIHNlbGVjdGVkIGFzIEFEQyBjbG9jayAqLworI2VsaWYgZGVmaW5lZChTVE0zMldCMzV4eCkKKyNkZWZpbmUgUkNDX0FEQ0NMS1NPVVJDRV9IU0kgICAgICAgICAgIExMX1JDQ19BRENfQ0xLU09VUkNFX0hTSSAgICAgICAvKiE8IEhTSSBjbG9jayBzZWxlY3RlZCBhcyBBREMgY2xvY2sgKi8KICNlbmRpZgogI2RlZmluZSBSQ0NfQURDQ0xLU09VUkNFX1BMTCAgICAgICAgICAgTExfUkNDX0FEQ19DTEtTT1VSQ0VfUExMICAgICAgIC8qITwgUExMICJQIiBjbG9jayBzZWxlY3RlZCBhcyBBREMgY2xvY2sgICAgICovCiAjZGVmaW5lIFJDQ19BRENDTEtTT1VSQ0VfU1lTQ0xLICAgICAgICBMTF9SQ0NfQURDX0NMS1NPVVJDRV9TWVNDTEsgICAgLyohPCBTWVNDTEsgY2xvY2sgc2VsZWN0ZWQgYXMgQURDIGNsb2NrICAgICAgKi8KQEAgLTYxMSw2ICs2NjksMTkgQEAKICAgKi8KICNlbmRpZgogCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisvKiogQGRlZmdyb3VwIFJDQ0V4X0kyU19DbG9ja19Tb3VyY2UgSTJTIENsb2NrIFNvdXJjZQorICAqIEB7CisgICovCisjZGVmaW5lIFJDQ19JMlNDTEtTT1VSQ0VfTk9ORSAgICAgICBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9OT05FICAgICAgLyohPCBObyBjbG9jayBzZWxlY3RlZCBhcyBJMlMgY2xvY2sgICAgICAgICovCisjZGVmaW5lIFJDQ19JMlNDTEtTT1VSQ0VfUExMICAgICAgICBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9QTEwgICAgICAgLyohPCBQTEwgIlEiIGNsb2NrIHNlbGVjdGVkIGFzIEkyUyBjbG9jayBzb3VyY2UgKi8KKyNkZWZpbmUgUkNDX0kyU0NMS1NPVVJDRV9IU0kgICAgICAgIExMX1JDQ19JMlNfQ0xLU09VUkNFX0hTSSAgICAgICAvKiE8IEhTSSBjbG9jayBzZWxlY3RlZCBhcyBJMlMgY2xvY2sgKi8KKyNkZWZpbmUgUkNDX0kyU0NMS1NPVVJDRV9QSU4gICAgICAgIExMX1JDQ19JMlNfQ0xLU09VUkNFX1BJTiAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHNlbGVjdGVkIGFzIEkyUyBjbG9jayAqLworLyoqCisgICogQH0KKyAgKi8KKyNlbmRpZgorCiAvKiogQGRlZmdyb3VwIFJDQ0V4X0VYVElfTElORV9MU0VDU1MgIFJDQyBMU0UgQ1NTIGV4dGVybmFsIGludGVycnVwdCBsaW5lCiAgICogQHsKICAgKi8KQEAgLTEwNjgsMjAgKzExMzksMjAgQEAKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfUk5HQ0xLU09VUkNFX0xTRSAgICAgICAgICAgTFNFIGNsb2NrIHNlbGVjdGVkIGFzIFJORyBjbG9jawogICAqIEByZXR2YWwgTm9uZQogICAqLwotI2RlZmluZSBfX0hBTF9SQ0NfUk5HX0NPTkZJRyhfX1JOR19DTEtTT1VSQ0VfXykgICAgICAgICAgICAgXAotICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoKF9fUk5HX0NMS1NPVVJDRV9fKSA9PSBSQ0NfUk5HQ0xLU09VUkNFX0xTSSkgICAgICAgXAorI2RlZmluZSBfX0hBTF9SQ0NfUk5HX0NPTkZJRyhfX1JOR19DTEtTT1VSQ0VfXykgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoKF9fUk5HX0NMS1NPVVJDRV9fKSA9PSBSQ0NfUk5HQ0xLU09VUkNFX0xTSSkgICAgXAogICAgICB8fCAoKF9fUk5HX0NMS1NPVVJDRV9fKSA9PSBSQ0NfUk5HQ0xLU09VUkNFX0xTRSkgICAgICAgXAogICAgICB8fCAoKF9fUk5HX0NMS1NPVVJDRV9fKSA9PSBSQ0NfUk5HQ0xLU09VUkNFX0NMSzQ4KSkgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICBMTF9SQ0NfU2V0Uk5HQ2xvY2tTb3VyY2UoKF9fUk5HX0NMS1NPVVJDRV9fKSk7ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgdWludDMyX3QgdG1wID0gKF9fUk5HX0NMS1NPVVJDRV9fKSAmKH5DTEs0OF9NQVNLKTsgICBcCi0gICAgICBMTF9SQ0NfU2V0Uk5HQ2xvY2tTb3VyY2UoUkNDX1JOR0NMS1NPVVJDRV9DTEs0OCk7ICAgICBcCisgICAgICBMTF9SQ0NfU2V0Uk5HQ2xvY2tTb3VyY2UoUkNDX1JOR0NMS1NPVVJDRV9DTEs0OCk7ICBcCiAgICAgICBMTF9SQ0NfU2V0Q0xLNDhDbG9ja1NvdXJjZSh0bXApOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIH0gd2hpbGUoMFUpCiAKIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGdldCB0aGUgZGlyZWN0IFJORyBjbG9jay4KQEAgLTEwOTQsNiArMTE2NSw3IEBACiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19HRVRfUk5HX1NPVVJDRSgpIExMX1JDQ19HZXRSTkdDbG9ja1NvdXJjZShMTF9SQ0NfUk5HX0NMS1NPVVJDRSkKIAorI2lmIGRlZmluZWQoVVNCKQogLyoqIEBicmllZiAgTWFjcm8gdG8gY29uZmlndXJlIHRoZSBVU0IgY2xvY2sgKFVTQkNMSykuCiAgICoKICAgKiBAbm90ZSAgVVNCIGFuZCBSTkcgcGVyaXBoZXJhbHMgc2hhcmUgdGhlIHNhbWUgNDhNSHogY2xvY2sgc291cmNlLgpAQCAtMTExNiwxNCArMTE4OCwxNyBAQAogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19VU0JDTEtTT1VSQ0VfUExMICAgICAgUExMICJRIiBjbG9jayAoUExMNDhNMUNMSykgc2VsZWN0ZWQgYXMgVVNCIGNsb2NrCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19HRVRfVVNCX1NPVVJDRSgpICBMTF9SQ0NfR2V0VVNCQ2xvY2tTb3VyY2UoTExfUkNDX1VTQl9DTEtTT1VSQ0UpCisjZW5kaWYKIAogLyoqIEBicmllZiAgTWFjcm8gdG8gY29uZmlndXJlIHRoZSBBREMgaW50ZXJmYWNlIGNsb2NrLgogICAqIEBwYXJhbSAgX19BRENfQ0xLU09VUkNFX18gc3BlY2lmaWVzIHRoZSBBREMgZGlnaXRhbCBpbnRlcmZhY2UgY2xvY2sgc291cmNlLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfQURDQ0xLU09VUkNFX05PTkUgICAgTm8gY2xvY2sgc2VsZWN0ZWQgYXMgQURDIGNsb2NrCi0gICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0FEQ0NMS1NPVVJDRV9QTExTQUkxICBQTExTQUkxIENsb2NrIHNlbGVjdGVkIGFzIEFEQyBjbG9jaworICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19BRENDTEtTT1VSQ0VfUExMU0FJMSAgUExMU0FJMSBDbG9jayBzZWxlY3RlZCBhcyBBREMgY2xvY2sgKCopCiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0FEQ0NMS1NPVVJDRV9QTEwgIFBMTCBDbG9jayBzZWxlY3RlZCBhcyBBREMgY2xvY2sKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfQURDQ0xLU09VUkNFX1NZU0NMSyAgU3lzdGVtIENsb2NrIHNlbGVjdGVkIGFzIEFEQyBjbG9jaworICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19BRENDTEtTT1VSQ0VfSFNJICBIU0kgQ2xvY2sgc2VsZWN0ZWQgYXMgQURDIGNsb2NrICgqKQorICAqIEBub3RlICAgICAgKCopIFZhbHVlIG5vdCBkZWZpbmVkIGZvciBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9SQ0NfQURDX0NPTkZJRyhfX0FEQ19DTEtTT1VSQ0VfXykgIExMX1JDQ19TZXRBRENDbG9ja1NvdXJjZShfX0FEQ19DTEtTT1VSQ0VfXykKQEAgLTExMzEsOSArMTIwNiwxMSBAQAogLyoqIEBicmllZiAgTWFjcm8gdG8gZ2V0IHRoZSBBREMgY2xvY2sgc291cmNlLgogICAqIEByZXR2YWwgVGhlIGNsb2NrIHNvdXJjZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19BRENDTEtTT1VSQ0VfTk9ORSAgICBObyBjbG9jayBzZWxlY3RlZCBhcyBBREMgY2xvY2sKLSAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfQURDQ0xLU09VUkNFX1BMTFNBSTEgIFBMTFNBSTEgQ2xvY2sgc2VsZWN0ZWQgYXMgQURDIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0FEQ0NMS1NPVVJDRV9QTExTQUkxICBQTExTQUkxIENsb2NrIHNlbGVjdGVkIGFzIEFEQyBjbG9jayAoKikKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfQURDQ0xLU09VUkNFX1BMTCAgUExMIENsb2NrIHNlbGVjdGVkIGFzIEFEQyBjbG9jawogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19BRENDTEtTT1VSQ0VfU1lTQ0xLICBTeXN0ZW0gQ2xvY2sgc2VsZWN0ZWQgYXMgQURDIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0FEQ0NMS1NPVVJDRV9IU0kgIEhTSSBDbG9jayBzZWxlY3RlZCBhcyBBREMgY2xvY2sgKCopCisgICogQG5vdGUgICAgICAoKikgVmFsdWUgbm90IGRlZmluZWQgZm9yIGFsbCBkZXZpY2VzCiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19HRVRfQURDX1NPVVJDRSgpIExMX1JDQ19HZXRBRENDbG9ja1NvdXJjZShMTF9SQ0NfQURDX0NMS1NPVVJDRSkKIApAQCAtMTIxNyw2ICsxMjk0LDI4IEBACiAgICogQHsKICAgKi8KIAorI2lmIGRlZmluZWQoU1BJX0kyU19TVVBQT1JUKQorLyoqIEBicmllZiAgTWFjcm8gdG8gY29uZmlndXJlIHRoZSBJMlMgY2xvY2sgKEkyU0NMSykuCisgICogQHBhcmFtICBfX0kyU19DTEtTT1VSQ0VfXyBzcGVjaWZpZXMgdGhlIEkyUyBjbG9jayBzb3VyY2UuCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfSTJTQ0xLU09VUkNFX05PTkUgICAgICAgICAgTm8gY2xvY2sgc2VsZWN0ZWQgYXMgSTJTIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0kyU0NMS1NPVVJDRV9QTEwgICAgICAgICAgIFBMTCAiUSIgc2VsZWN0ZWQgYXMgSTJTIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0kyU0NMS1NPVVJDRV9IU0kgICAgICAgICAgIEhTSSBzZWxlY3RlZCBhcyBJMlMgY2xvY2sKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfSTJTQ0xLU09VUkNFX1BJTiAgICAgICAgICAgRXh0ZXJuYWwgY2xvY2sgc2VsZWN0ZWQgYXMgSTJTIGNsb2NrCisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIF9fSEFMX1JDQ19JMlNfQ09ORklHKF9fSTJTX0NMS1NPVVJDRV9fKSAgTExfUkNDX1NldEkyU0Nsb2NrU291cmNlKF9fSTJTX0NMS1NPVVJDRV9fKQorCisvKiogQGJyaWVmICBNYWNybyB0byBnZXQgdGhlIEkyUyBjbG9jayBzb3VyY2UuCisgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0kyU0NMS1NPVVJDRV9OT05FICAgICAgTm8gY2xvY2sgc2VsZWN0ZWQgYXMgSTJTIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0kyU0NMS1NPVVJDRV9QTEwgICAgICAgUExMICJRIiBzZWxlY3RlZCBhcyBJMlMgY2xvY2sKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfSTJTQ0xLU09VUkNFX0hTSSAgICAgICBIU0kgc2VsZWN0ZWQgYXMgSTJTIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0kyU0NMS1NPVVJDRV9QSU4gICAgICAgRXh0ZXJuYWwgY2xvY2sgc2VsZWN0ZWQgYXMgSTJTIGNsb2NrCisgICovCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfSTJTX1NPVVJDRSgpICBMTF9SQ0NfR2V0STJTQ2xvY2tTb3VyY2UoTExfUkNDX0kyU19DTEtTT1VSQ0UpCisjZW5kaWYKKwogI2lmIGRlZmluZWQoU0FJMSkKIC8qKiBAYnJpZWYgRW5hYmxlIFBMTFNBSTFSRFkgaW50ZXJydXB0LgogICAqIEByZXR2YWwgTm9uZQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyd2J4eF9oYWxfdGltLmggYi9JbmMvc3RtMzJ3Ynh4X2hhbF90aW0uaAppbmRleCBjZTRiMDllLi5iZjA1ZTNiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2hhbF90aW0uaAorKysgYi9JbmMvc3RtMzJ3Ynh4X2hhbF90aW0uaApAQCAtNTIzLDYgKzUyMywxNSBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgVElNX1VwZGF0ZV9JbnRlcnJ1cHRfRmxhZ19SZW1hcCBUSU0gVXBkYXRlIEludGVycnVwdCBGbGFnIFJlbWFwCisgICogQHsKKyAgKi8KKyNkZWZpbmUgVElNX1VJRlJFTUFQX0RJU0FCTEUgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVcGRhdGUgaW50ZXJydXB0IGZsYWcgcmVtYXAgZGlzYWJsZWQgKi8KKyNkZWZpbmUgVElNX1VJRlJFTUFQX0VOQUJMRSAgICAgICAgICAgICAgICBUSU1fQ1IxX1VJRlJFTUFQICAgICAgICAgICAgICAgICAgICAgLyohPCBVcGRhdGUgaW50ZXJydXB0IGZsYWcgcmVtYXAgZW5hYmxlZCAqLworLyoqCisgICogQH0KKyAgKi8KKwogLyoqIEBkZWZncm91cCBUSU1fQ2xvY2tEaXZpc2lvbiBUSU0gQ2xvY2sgRGl2aXNpb24KICAgKiBAewogICAqLwpAQCAtMTMxMyw2ICsxMzIyLDMxIEBACiAjZGVmaW5lIF9fSEFMX1RJTV9DTEVBUl9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5TUiA9IH4oX19JTlRFUlJVUFRfXykpCiAKIC8qKgorICAqIEBicmllZiAgRm9yY2UgYSBjb250aW51b3VzIGNvcHkgb2YgdGhlIHVwZGF0ZSBpbnRlcnJ1cHQgZmxhZyAoVUlGKSBpbnRvIHRoZSB0aW1lciBjb3VudGVyIHJlZ2lzdGVyIChiaXQgMzEpLgorICAqIEBub3RlIFRoaXMgYWxsb3dzIGJvdGggdGhlIGNvdW50ZXIgdmFsdWUgYW5kIGEgcG90ZW50aWFsIHJvbGwtb3ZlciBjb25kaXRpb24gc2lnbmFsbGVkIGJ5IHRoZSBVSUZDUFkgZmxhZyB0byBiZSByZWFkIGluIGFuIGF0b21pYyB3YXkuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIFRJTSBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCittb2RlLgorICAqLworI2RlZmluZSBfX0hBTF9USU1fVUlGUkVNQVBfRU5BQkxFKF9fSEFORExFX18pICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxIHw9IFRJTV9DUjFfVUlGUkVNQVApKQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgdXBkYXRlIGludGVycnVwdCBmbGFnIChVSUYpIHJlbWFwcGluZy4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gVElNIGhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKK21vZGUuCisgICovCisjZGVmaW5lIF9fSEFMX1RJTV9VSUZSRU1BUF9ESVNBQkxFKF9fSEFORExFX18pICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IxICY9IH5USU1fQ1IxX1VJRlJFTUFQKSkKKworLyoqCisgICogQGJyaWVmICBHZXQgdXBkYXRlIGludGVycnVwdCBmbGFnIChVSUYpIGNvcHkgc3RhdHVzLgorICAqIEBwYXJhbSAgX19DT1VOVEVSX18gQ291bnRlciB2YWx1ZS4KKyAgKiBAcmV0dmFsIFRoZSBzdGF0ZSBvZiBVSUZDUFkgKFRSVUUgb3IgRkFMU0UpLgorbW9kZS4KKyAgKi8KKyNkZWZpbmUgX19IQUxfVElNX0dFVF9VSUZDUFkoX19DT1VOVEVSX18pICAgICgoKF9fQ09VTlRFUl9fKSAmIChUSU1fQ05UX1VJRkNQWSkpID09IChUSU1fQ05UX1VJRkNQWSkpCisKKy8qKgogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBUSU0gQ291bnRlciBpcyB1c2VkIGFzIGRvd25jb3VudGVyLgogICAqIEBwYXJhbSAgX19IQU5ETEVfXyBUSU0gaGFuZGxlLgogICAqIEByZXR2YWwgRmFsc2UgKENvdW50ZXIgdXNlZCBhcyB1cGNvdW50ZXIpIG9yIFRydWUgKENvdW50ZXIgdXNlZCBhcyBkb3duY291bnRlcikKQEAgLTEzMzEsNiArMTM2NSw4IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBUSU0gQ291bnRlciBSZWdpc3RlciB2YWx1ZSBvbiBydW50aW1lLgorICAqIE5vdGUgUGxlYXNlIGNoZWNrIGlmIHRoZSBiaXQgMzEgb2YgQ05UIHJlZ2lzdGVyIGlzIHVzZWQgYXMgVUlGIGNvcHkgb3Igbm90LCB0aGlzIG1heSBhZmZlY3QgdGhlIGNvdW50ZXIgcmFuZ2UgaW4gY2FzZSBvZiAzMiBiaXRzIGNvdW50ZXIgVElNIGluc3RhbmNlLgorICAqICAgICAgQml0IDMxIG9mIENOVCBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCB1c2luZyBfX0hBTF9USU1fVUlGUkVNQVBfRU5BQkxFKCkvX19IQUxfVElNX1VJRlJFTUFQX0RJU0FCTEUoKSBtYWNyb3MuCiAgICogQHBhcmFtICBfX0hBTkRMRV9fIFRJTSBoYW5kbGUuCiAgICogQHBhcmFtICBfX0NPVU5URVJfXyBzcGVjaWZpZXMgdGhlIENvdW50ZXIgcmVnaXN0ZXIgbmV3IHZhbHVlLgogICAqIEByZXR2YWwgTm9uZQpAQCAtMTY0MCwyOSArMTY3NiwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gVElNX0NMRUFSSU5QVVRTT1VSQ0VfQ09NUDIpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IFRJTV9DTEVBUklOUFVUU09VUkNFX05PTkUpKQogCi0jZGVmaW5lIElTX1RJTV9ETUFfQkFTRShfX0JBU0VfXykgKCgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NSMSkgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NSMikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX1NNQ1IpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0RJRVIpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX1NSKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0VHUikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDTVIxKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDTVIyKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDRVIpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NOVCkgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX1BTQykgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0FSUikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX1JDUikgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDUjEpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDUjIpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDUjMpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDUjQpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0JEVFIpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX09SKSAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDTVIzKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDUjUpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDUjYpICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0FGMSkgICB8fCBcCisjZGVmaW5lIElTX1RJTV9ETUFfQkFTRShfX0JBU0VfXykgKCgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NSMSkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFTRV9fKSA9PSBUSU1fRE1BQkFTRV9DUjIpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBU0VfXykgPT0gVElNX0RNQUJBU0VfU01DUikgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0RJRVIpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFTRV9fKSA9PSBUSU1fRE1BQkFTRV9TUikgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBU0VfXykgPT0gVElNX0RNQUJBU0VfRUdSKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDTVIxKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFTRV9fKSA9PSBUSU1fRE1BQkFTRV9DQ01SMikgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBU0VfXykgPT0gVElNX0RNQUJBU0VfQ0NFUikgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NOVCkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFTRV9fKSA9PSBUSU1fRE1BQkFTRV9QU0MpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBU0VfXykgPT0gVElNX0RNQUJBU0VfQVJSKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX1JDUikgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFTRV9fKSA9PSBUSU1fRE1BQkFTRV9DQ1IxKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBU0VfXykgPT0gVElNX0RNQUJBU0VfQ0NSMikgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDUjMpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFTRV9fKSA9PSBUSU1fRE1BQkFTRV9DQ1I0KSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBU0VfXykgPT0gVElNX0RNQUJBU0VfQkRUUikgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX09SKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFTRV9fKSA9PSBUSU1fRE1BQkFTRV9DQ01SMykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBU0VfXykgPT0gVElNX0RNQUJBU0VfQ0NSNSkgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19CQVNFX18pID09IFRJTV9ETUFCQVNFX0NDUjYpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fQkFTRV9fKSA9PSBUSU1fRE1BQkFTRV9BRjEpICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JBU0VfXykgPT0gVElNX0RNQUJBU0VfQUYyKSkKIAogI2RlZmluZSBJU19USU1fRVZFTlRfU09VUkNFKF9fU09VUkNFX18pICgoKChfX1NPVVJDRV9fKSAmIDB4RkZGRkZFMDBVKSA9PSAweDAwMDAwMDAwVSkgJiYgKChfX1NPVVJDRV9fKSAhPSAweDAwMDAwMDAwVSkpCkBAIC0xNjczLDYgKzE3MDksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBUSU1fQ09VTlRFUk1PREVfQ0VOVEVSQUxJR05FRDIpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IFRJTV9DT1VOVEVSTU9ERV9DRU5URVJBTElHTkVEMykpCiAKKyNkZWZpbmUgSVNfVElNX1VJRlJFTUFQX01PREUoX19NT0RFX18pICAgICAoKChfX01PREVfXykgPT0gVElNX1VJRlJFTUFQX0RJU0FCTEUpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gVElNX1VJRlJFTUFQX0VOQUxFKSkKKwogI2RlZmluZSBJU19USU1fQ0xPQ0tESVZJU0lPTl9ESVYoX19ESVZfXykgICgoKF9fRElWX18pID09IFRJTV9DTE9DS0RJVklTSU9OX0RJVjEpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0RJVl9fKSA9PSBUSU1fQ0xPQ0tESVZJU0lPTl9ESVYyKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19ESVZfXykgPT0gVElNX0NMT0NLRElWSVNJT05fRElWNCkpCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2xsX2FkYy5oIGIvSW5jL3N0bTMyd2J4eF9sbF9hZGMuaAppbmRleCBlMTFkMzVjLi40ZmJiMWZkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2xsX2FkYy5oCisrKyBiL0luYy9zdG0zMndieHhfbGxfYWRjLmgKQEAgLTEyNzIsNyArMTI3Miw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMTYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF8xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzE4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfVlJFRklOVCAgICAgICgxKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQgICAgICAoNCkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF9URU1QU0VOU09SICAgKDQpCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfVkJBVCAgICAgICAgICg0KQogICAqCkBAIC0xNDY2LDcgKzE0NjYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzE2CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF8xOAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQgICAgICAoMSkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF9WUkVGSU5UICAgICAgKDQpCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfVEVNUFNFTlNPUiAgICg0KQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMX1ZCQVQgICAgICAgICAoNCkKICAgKgpAQCAtMjM0MCw5ICsyMzQwLDEyIEBACiAgICogICAgICAgICAgIE1vcmVvdmVyLCB0aGlzIGF2b2lkcyByaXNrIG9mIG92ZXJydW4gZm9yIGxvdyBmcmVxdWVuY3kKICAgKiAgICAgICAgICAgYXBwbGljYXRpb25zLgogICAqICAgICAgICAgICBIb3cgdG8gdXNlIHRoaXMgbG93IHBvd2VyIG1vZGU6Ci0gICogICAgICAgICAgIC0gRG8gbm90IHVzZSB3aXRoIGludGVycnVwdGlvbiBvciBETUEgc2luY2UgdGhlc2UgbW9kZXMKLSAgKiAgICAgICAgICAgICBoYXZlIHRvIGNsZWFyIGltbWVkaWF0ZWx5IHRoZSBFT0MgZmxhZyB0byBmcmVlIHRoZQotICAqICAgICAgICAgICAgIElSUSB2ZWN0b3Igc2VxdWVuY2VyLgorICAqICAgICAgICAgICAtIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2Ugd2l0aCBpbnRlcnJ1cHRpb24gb3IgRE1BCisgICogICAgICAgICAgICAgc2luY2UgdGhlc2UgbW9kZXMgaGF2ZSB0byBjbGVhciBpbW1lZGlhdGVseSB0aGUgRU9DIGZsYWcKKyAgKiAgICAgICAgICAgICAoYnkgQ1BVIHRvIGZyZWUgdGhlIElSUSBwZW5kaW5nIGV2ZW50IG9yIGJ5IERNQSkuCisgICogICAgICAgICAgICAgQXV0byB3YWl0IHdpbGwgd29yayBidXQgZm9ydCBhIHZlcnkgc2hvcnQgdGltZSwgZGlzY2FyZGluZworICAqICAgICAgICAgICAgIGl0cyBpbnRlbmRlZCBiZW5lZml0IChleGNlcHQgc3BlY2lmaWMgY2FzZSBvZiBoaWdoIGxvYWQgb2YgQ1BVCisgICogICAgICAgICAgICAgb3IgRE1BIHRyYW5zZmVycyB3aGljaCBjYW4ganVzdGlmeSB1c2FnZSBvZiBhdXRvIHdhaXQpLgogICAqICAgICAgICAgICAtIERvIHVzZSB3aXRoIHBvbGxpbmc6IDEuIFN0YXJ0IGNvbnZlcnNpb24sCiAgICogICAgICAgICAgICAgMi4gTGF0ZXIgb24sIHdoZW4gY29udmVyc2lvbiBkYXRhIGlzIG5lZWRlZDogcG9sbCBmb3IgZW5kIG9mCiAgICogICAgICAgICAgICAgY29udmVyc2lvbiAgdG8gZW5zdXJlIHRoYXQgY29udmVyc2lvbiBpcyBjb21wbGV0ZWQgYW5kCkBAIC0yMzkzLDkgKzIzOTYsMTIgQEAKICAgKiAgICAgICAgICAgTW9yZW92ZXIsIHRoaXMgYXZvaWRzIHJpc2sgb2Ygb3ZlcnJ1biBmb3IgbG93IGZyZXF1ZW5jeQogICAqICAgICAgICAgICBhcHBsaWNhdGlvbnMuCiAgICogICAgICAgICAgIEhvdyB0byB1c2UgdGhpcyBsb3cgcG93ZXIgbW9kZToKLSAgKiAgICAgICAgICAgLSBEbyBub3QgdXNlIHdpdGggaW50ZXJydXB0aW9uIG9yIERNQSBzaW5jZSB0aGVzZSBtb2RlcwotICAqICAgICAgICAgICAgIGhhdmUgdG8gY2xlYXIgaW1tZWRpYXRlbHkgdGhlIEVPQyBmbGFnIHRvIGZyZWUgdGhlCi0gICogICAgICAgICAgICAgSVJRIHZlY3RvciBzZXF1ZW5jZXIuCisgICogICAgICAgICAgIC0gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB3aXRoIGludGVycnVwdGlvbiBvciBETUEKKyAgKiAgICAgICAgICAgICBzaW5jZSB0aGVzZSBtb2RlcyBoYXZlIHRvIGNsZWFyIGltbWVkaWF0ZWx5IHRoZSBFT0MgZmxhZworICAqICAgICAgICAgICAgIChieSBDUFUgdG8gZnJlZSB0aGUgSVJRIHBlbmRpbmcgZXZlbnQgb3IgYnkgRE1BKS4KKyAgKiAgICAgICAgICAgICBBdXRvIHdhaXQgd2lsbCB3b3JrIGJ1dCBmb3J0IGEgdmVyeSBzaG9ydCB0aW1lLCBkaXNjYXJkaW5nCisgICogICAgICAgICAgICAgaXRzIGludGVuZGVkIGJlbmVmaXQgKGV4Y2VwdCBzcGVjaWZpYyBjYXNlIG9mIGhpZ2ggbG9hZCBvZiBDUFUKKyAgKiAgICAgICAgICAgICBvciBETUEgdHJhbnNmZXJzIHdoaWNoIGNhbiBqdXN0aWZ5IHVzYWdlIG9mIGF1dG8gd2FpdCkuCiAgICogICAgICAgICAgIC0gRG8gdXNlIHdpdGggcG9sbGluZzogMS4gU3RhcnQgY29udmVyc2lvbiwKICAgKiAgICAgICAgICAgICAyLiBMYXRlciBvbiwgd2hlbiBjb252ZXJzaW9uIGRhdGEgaXMgbmVlZGVkOiBwb2xsIGZvciBlbmQgb2YKICAgKiAgICAgICAgICAgICBjb252ZXJzaW9uICB0byBlbnN1cmUgdGhhdCBjb252ZXJzaW9uIGlzIGNvbXBsZXRlZCBhbmQKQEAgLTI1NDksNyArMjU1NSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMTYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF8xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzE4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfVlJFRklOVCAgICAgICgxKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQgICAgICAoNCkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF9URU1QU0VOU09SICAgKDQpCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfVkJBVCAgICAgICAgICg0KQogICAqCkBAIC0zMTI2LDcgKzMxMzIsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzE2CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF8xOAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQgICAgICAoMSkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF9WUkVGSU5UICAgICAgKDQpCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfVEVNUFNFTlNPUiAgICg0KQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMX1ZCQVQgICAgICAgICAoNCkKICAgKgpAQCAtMzYyMSw3ICszNjI3LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF8xNgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMTgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF9WUkVGSU5UICAgICAgKDEpCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfVlJFRklOVCAgICAgICg0KQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMX1RFTVBTRU5TT1IgICAoNCkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF9WQkFUICAgICAgICAgKDQpCiAgICoKZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfbGxfY29tcC5oIGIvSW5jL3N0bTMyd2J4eF9sbF9jb21wLmgKaW5kZXggNDlkNzIwZS4uNDM0OGU4YyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyd2J4eF9sbF9jb21wLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9sbF9jb21wLmgKQEAgLTI5Myw3ICsyOTMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB3aW5kb3cgbW9kZSBvZiBhIHBhaXIgb2YgY29tcGFyYXRvcnMgaW5zdGFuY2VzCi0gICogICAgICAgICAoMiBjb25zZWN1dGl2ZSBDT01QIGluc3RhbmNlcyBvZGQgYW5kIGV2ZW4gQ09NUDx4PiBhbmQgQ09NUDx4KzE+KS4KKyAgKiAgICAgICAgICgyIGNvbnNlY3V0aXZlIENPTVAgaW5zdGFuY2VzIENPTVA8eD4gYW5kIENPTVA8eCsxPikuCiAgICogQHJtdG9sbCBDU1IgICAgICBXSU5NT0RFICAgICAgICBMTF9DT01QX1NldENvbW1vbldpbmRvd01vZGUKICAgKiBAcGFyYW0gIENPTVB4eV9DT01NT04gQ29tcGFyYXRvciBjb21tb24gaW5zdGFuY2UKICAgKiAgICAgICAgIChjYW4gYmUgc2V0IGRpcmVjdGx5IGZyb20gQ01TSVMgZGVmaW5pdGlvbiBvciBieSB1c2luZyBoZWxwZXIgbWFjcm8gQHJlZiBfX0xMX0NPTVBfQ09NTU9OX0lOU1RBTkNFKCkgKQpAQCAtMzExLDcgKzMxMSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHdpbmRvdyBtb2RlIG9mIGEgcGFpciBvZiBjb21wYXJhdG9ycyBpbnN0YW5jZXMKLSAgKiAgICAgICAgICgyIGNvbnNlY3V0aXZlIENPTVAgaW5zdGFuY2VzIG9kZCBhbmQgZXZlbiBDT01QPHg+IGFuZCBDT01QPHgrMT4pLgorICAqICAgICAgICAgKDIgY29uc2VjdXRpdmUgQ09NUCBpbnN0YW5jZXMgQ09NUDx4PiBhbmQgQ09NUDx4KzE+KS4KICAgKiBAcm10b2xsIENTUiAgICAgIFdJTk1PREUgICAgICAgIExMX0NPTVBfR2V0Q29tbW9uV2luZG93TW9kZQogICAqIEBwYXJhbSAgQ09NUHh5X0NPTU1PTiBDb21wYXJhdG9yIGNvbW1vbiBpbnN0YW5jZQogICAqICAgICAgICAgKGNhbiBiZSBzZXQgZGlyZWN0bHkgZnJvbSBDTVNJUyBkZWZpbml0aW9uIG9yIGJ5IHVzaW5nIGhlbHBlciBtYWNybyBAcmVmIF9fTExfQ09NUF9DT01NT05fSU5TVEFOQ0UoKSApCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2xsX2V4dGkuaCBiL0luYy9zdG0zMndieHhfbGxfZXh0aS5oCmluZGV4IGQyZWY4MDQuLjdmOWY1OTYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfbGxfZXh0aS5oCisrKyBiL0luYy9zdG0zMndieHhfbGxfZXh0aS5oCkBAIC0xMDcsMTYgKzEwNywyNiBAQAogI2RlZmluZSBMTF9FWFRJX0xJTkVfMTcgICAgICAgICAgICAgICAgRVhUSV9JTVIxX0lNMTcgICAgICAgICAgLyohPCBFeHRlbmRlZCBsaW5lIDE3ICovCiAjZGVmaW5lIExMX0VYVElfTElORV8xOCAgICAgICAgICAgICAgICBFWFRJX0lNUjFfSU0xOCAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgMTggKi8KICNkZWZpbmUgTExfRVhUSV9MSU5FXzE5ICAgICAgICAgICAgICAgIEVYVElfSU1SMV9JTTE5ICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSAxOSAqLworI2lmIGRlZmluZWQgKFNUTTMyV0I1NXh4KSB8fCBkZWZpbmVkIChTVE0zMldCNU14eCkgfHwgZGVmaW5lZCAoU1RNMzJXQjM1eHgpCiAjZGVmaW5lIExMX0VYVElfTElORV8yMCAgICAgICAgICAgICAgICBFWFRJX0lNUjFfSU0yMCAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgMjAgKi8KICNkZWZpbmUgTExfRVhUSV9MSU5FXzIxICAgICAgICAgICAgICAgIEVYVElfSU1SMV9JTTIxICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSAyMSAqLworI2VuZGlmCiAjZGVmaW5lIExMX0VYVElfTElORV8yMiAgICAgICAgICAgICAgICBFWFRJX0lNUjFfSU0yMiAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgMjIgKi8KKyNpZiBkZWZpbmVkIChTVE0zMldCNTV4eCkgfHwgZGVmaW5lZCAoU1RNMzJXQjVNeHgpIHx8IGRlZmluZWQgKFNUTTMyV0IzNXh4KQogI2RlZmluZSBMTF9FWFRJX0xJTkVfMjMgICAgICAgICAgICAgICAgRVhUSV9JTVIxX0lNMjMgICAgICAgICAgLyohPCBFeHRlbmRlZCBsaW5lIDIzICovCisjZW5kaWYKICNkZWZpbmUgTExfRVhUSV9MSU5FXzI0ICAgICAgICAgICAgICAgIEVYVElfSU1SMV9JTTI0ICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSAyNCAqLworI2lmIGRlZmluZWQgKFNUTTMyV0I1NXh4KSB8fCBkZWZpbmVkIChTVE0zMldCNU14eCkgfHwgZGVmaW5lZCAoU1RNMzJXQjM1eHgpCiAjZGVmaW5lIExMX0VYVElfTElORV8yNSAgICAgICAgICAgICAgICBFWFRJX0lNUjFfSU0yNSAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgMjUgKi8KICNkZWZpbmUgTExfRVhUSV9MSU5FXzI4ICAgICAgICAgICAgICAgIEVYVElfSU1SMV9JTTI4ICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSAyOCAqLworI2VuZGlmCiAjZGVmaW5lIExMX0VYVElfTElORV8yOSAgICAgICAgICAgICAgICBFWFRJX0lNUjFfSU0yOSAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgMjkgKi8KICNkZWZpbmUgTExfRVhUSV9MSU5FXzMwICAgICAgICAgICAgICAgIEVYVElfSU1SMV9JTTMwICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSAzMCAqLworI2lmIGRlZmluZWQgKFNUTTMyV0I1NXh4KSB8fCBkZWZpbmVkIChTVE0zMldCNU14eCkgfHwgZGVmaW5lZCAoU1RNMzJXQjM1eHgpCiAjZGVmaW5lIExMX0VYVElfTElORV8zMSAgICAgICAgICAgICAgICBFWFRJX0lNUjFfSU0zMSAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgMzEgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KSB8fCBkZWZpbmVkIChTVE0zMldCMzV4eCkKICNkZWZpbmUgTExfRVhUSV9MSU5FX0FMTF8wXzMxICAgICAgICAgIChMTF9FWFRJX0xJTkVfMCB8IExMX0VYVElfTElORV8xIHwgTExfRVhUSV9MSU5FXzIgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExfRVhUSV9MSU5FXzMgfCBMTF9FWFRJX0xJTkVfNCB8IExMX0VYVElfTElORV81IHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX0VYVElfTElORV82IHwgTExfRVhUSV9MSU5FXzcgfCBMTF9FWFRJX0xJTkVfOCB8IFwKQEAgLTEyNyw2ICsxMzcsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9FWFRJX0xJTkVfMjEgfCBMTF9FWFRJX0xJTkVfMjIgfCBMTF9FWFRJX0xJTkVfMjMgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExfRVhUSV9MSU5FXzI0IHwgTExfRVhUSV9MSU5FXzI1IHwgTExfRVhUSV9MSU5FXzI4IHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX0VYVElfTElORV8yOSB8IExMX0VYVElfTElORV8zMCB8IExMX0VYVElfTElORV8zMSkgLyohPCBBbGwgRXh0ZW5kZWQgbGluZSBub3QgcmVzZXJ2ZWQqLworI2Vsc2UKKyNkZWZpbmUgTExfRVhUSV9MSU5FX0FMTF8wXzMxICAgICAgICAgIChMTF9FWFRJX0xJTkVfMCB8IExMX0VYVElfTElORV8xIHwgTExfRVhUSV9MSU5FXzIgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExfRVhUSV9MSU5FXzMgfCBMTF9FWFRJX0xJTkVfNCB8IExMX0VYVElfTElORV81IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX0VYVElfTElORV82IHwgTExfRVhUSV9MSU5FXzcgfCBMTF9FWFRJX0xJTkVfOCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9FWFRJX0xJTkVfOSB8IExMX0VYVElfTElORV8xMCB8IExMX0VYVElfTElORV8xMSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9FWFRJX0xJTkVfMTIgfCBMTF9FWFRJX0xJTkVfMTMgfCBMTF9FWFRJX0xJTkVfMTQgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExfRVhUSV9MSU5FXzE1IHwgTExfRVhUSV9MSU5FXzE2IHwgTExfRVhUSV9MSU5FXzE3IHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX0VYVElfTElORV8xOCB8IExMX0VYVElfTElORV8xOSB8IExMX0VYVElfTElORV8yMiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9FWFRJX0xJTkVfMjQgfCBMTF9FWFRJX0xJTkVfMjkgfCBMTF9FWFRJX0xJTkVfMzApIC8qITwgQWxsIEV4dGVuZGVkIGxpbmUgbm90IHJlc2VydmVkKi8KKyNlbmRpZgogCiAjZGVmaW5lIExMX0VYVElfTElORV8zMyAgICAgICAgICAgICAgICBFWFRJX0lNUjJfSU0zMyAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgMzMgKi8KICNkZWZpbmUgTExfRVhUSV9MSU5FXzM2ICAgICAgICAgICAgICAgIEVYVElfSU1SMl9JTTM2ICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSAzNiAqLwpAQCAtMTM2LDE0ICsxNTYsMTQgQEAKICNkZWZpbmUgTExfRVhUSV9MSU5FXzQwICAgICAgICAgICAgICAgIEVYVElfSU1SMl9JTTQwICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSA0MCAqLwogI2RlZmluZSBMTF9FWFRJX0xJTkVfNDEgICAgICAgICAgICAgICAgRVhUSV9JTVIyX0lNNDEgICAgICAgICAgLyohPCBFeHRlbmRlZCBsaW5lIDQxICovCiAjZGVmaW5lIExMX0VYVElfTElORV80MiAgICAgICAgICAgICAgICBFWFRJX0lNUjJfSU00MiAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgNDIgKi8KLSNpZiBkZWZpbmVkIChTVE0zMldCNTV4eCkKKyNpZiBkZWZpbmVkIChTVE0zMldCNTV4eCkgfHwgZGVmaW5lZCAoU1RNMzJXQjVNeHgpCiAjZGVmaW5lIExMX0VYVElfTElORV80MyAgICAgICAgICAgICAgICBFWFRJX0lNUjJfSU00MyAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgNDMgKi8KICNlbmRpZgogI2RlZmluZSBMTF9FWFRJX0xJTkVfNDQgICAgICAgICAgICAgICAgRVhUSV9JTVIyX0lNNDQgICAgICAgICAgLyohPCBFeHRlbmRlZCBsaW5lIDQ0ICovCiAjZGVmaW5lIExMX0VYVElfTElORV80NSAgICAgICAgICAgICAgICBFWFRJX0lNUjJfSU00NSAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgNDUgKi8KICNkZWZpbmUgTExfRVhUSV9MSU5FXzQ2ICAgICAgICAgICAgICAgIEVYVElfSU1SMl9JTTQ2ICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSA0NiAqLwogI2RlZmluZSBMTF9FWFRJX0xJTkVfNDggICAgICAgICAgICAgICAgRVhUSV9JTVIyX0lNNDggICAgICAgICAgLyohPCBFeHRlbmRlZCBsaW5lIDQ4ICovCi0jaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpCisjaWYgZGVmaW5lZCAoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KQogI2RlZmluZSBMTF9FWFRJX0xJTkVfQUxMXzMyXzYzICAgICAgICAgKExMX0VYVElfTElORV8zMyB8IExMX0VYVElfTElORV8zNiB8IExMX0VYVElfTElORV8zNyB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9FWFRJX0xJTkVfMzggfCBMTF9FWFRJX0xJTkVfMzkgfCBMTF9FWFRJX0xJTkVfNDAgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExfRVhUSV9MSU5FXzQxIHwgTExfRVhUSV9MSU5FXzQyIHwgTExfRVhUSV9MSU5FXzQzIHwgXApAQCAtMjQzLDcgKzI2Myw3IEBACiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBFeHRpTGluZSBJbnRlcnJ1cHQgcmVxdWVzdCBmb3IgTGluZXMgaW4gcmFuZ2UgMCB0byAzMQogICAqIEBybXRvbGwgSU1SMSAgICAgICAgIElNeCAgICAgICAgICAgTExfRVhUSV9FbmFibGVJVF8wXzMxCi0gICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yCkBAIC0yNjQsMTcgKzI4NCwxOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yNAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yNQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yOAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yNSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjggKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzI5CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMF8zMQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0VuYWJsZUlUXzBfMzEodWludDMyX3QgRXh0aUxpbmUpCkBAIC0yODUsNyArMzA2LDcgQEAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIEV4dGlMaW5lIEludGVycnVwdCByZXF1ZXN0IGZvciBMaW5lcyBpbiByYW5nZSAwIHRvIDMxIGZvciBjcHUyCiAgICogQHJtdG9sbCBDMklNUjEgICAgICAgICBJTXggICAgICAgICAgIExMX0MyX0VYVElfRW5hYmxlSVRfMF8zMQotICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8wCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMgpAQCAtMzA2LDE3ICszMjcsMTggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzI4ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yOQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzBfMzEKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfRVhUSV9FbmFibGVJVF8wXzMxKHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMzI3LDcgKzM0OSw3IEBACiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBFeHRpTGluZSBJbnRlcnJ1cHQgcmVxdWVzdCBmb3IgTGluZXMgaW4gcmFuZ2UgMzIgdG8gNjMKICAgKiBAcm10b2xsIElNUjIgICAgICAgICBJTXggICAgICAgICAgIExMX0VYVElfRW5hYmxlSVRfMzJfNjMKLSAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzcKQEAgLTM1Myw3ICszNzUsNyBAQAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgRXh0aUxpbmUgSW50ZXJydXB0IHJlcXVlc3QgZm9yIExpbmVzIGluIHJhbmdlIDMyIHRvIDYzIGZvciBjcHUyCiAgICogQHJtdG9sbCBDMklNUjIgICAgICAgICBJTXggICAgICAgICAgIExMX0MyX0VYVElfRW5hYmxlSVRfMzJfNjMKLSAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzcKQEAgLTM3OSw3ICs0MDEsNyBAQAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIEV4dGlMaW5lIEludGVycnVwdCByZXF1ZXN0IGZvciBMaW5lcyBpbiByYW5nZSAwIHRvIDMxCiAgICogQHJtdG9sbCBJTVIxICAgICAgICAgSU14ICAgICAgICAgICBMTF9FWFRJX0Rpc2FibGVJVF8wXzMxCi0gICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yCkBAIC00MDAsMTcgKzQyMiwxOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIzCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yNAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yNQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yOAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yNSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjggKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzI5CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMF8zMQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0Rpc2FibGVJVF8wXzMxKHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtNDIxLDcgKzQ0NCw3IEBACiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgRXh0aUxpbmUgSW50ZXJydXB0IHJlcXVlc3QgZm9yIExpbmVzIGluIHJhbmdlIDAgdG8gMzEgZm9yIGNwdTIKICAgKiBAcm10b2xsIEMySU1SMSAgICAgICAgIElNeCAgICAgICAgICAgTExfQzJfRVhUSV9EaXNhYmxlSVRfMF8zMQotICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8wCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMgpAQCAtNDQyLDE3ICs0NjUsMTggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzI4ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yOQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzBfMzEKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfRVhUSV9EaXNhYmxlSVRfMF8zMSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTQ2Myw3ICs0ODcsNyBAQAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIEV4dGlMaW5lIEludGVycnVwdCByZXF1ZXN0IGZvciBMaW5lcyBpbiByYW5nZSAzMiB0byA2MwogICAqIEBybXRvbGwgSU1SMiAgICAgICAgIElNeCAgICAgICAgICAgTExfRVhUSV9EaXNhYmxlSVRfMzJfNjMKLSAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzcKQEAgLTQ4OSw3ICs1MTMsNyBAQAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIEV4dGlMaW5lIEludGVycnVwdCByZXF1ZXN0IGZvciBMaW5lcyBpbiByYW5nZSAzMiB0byA2MyBmb3IgY3B1MgogICAqIEBybXRvbGwgQzJJTVIyICAgICAgICAgSU14ICAgICAgICAgICBMTF9DMl9FWFRJX0Rpc2FibGVJVF8zMl82MwotICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zNgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zNwpAQCAtNTE1LDcgKzUzOSw3IEBACiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIGlmIEV4dGlMaW5lIEludGVycnVwdCByZXF1ZXN0IGlzIGVuYWJsZWQgZm9yIExpbmVzIGluIHJhbmdlIDAgdG8gMzEKICAgKiBAcm10b2xsIElNUjEgICAgICAgICBJTXggICAgICAgICAgIExMX0VYVElfSXNFbmFibGVkSVRfMF8zMQotICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8wCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMgpAQCAtNTM2LDE3ICs1NjAsMTggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzI4ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yOQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzBfMzEKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0VYVElfSXNFbmFibGVkSVRfMF8zMSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTU1Nyw3ICs1ODIsNyBAQAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSBpZiBFeHRpTGluZSBJbnRlcnJ1cHQgcmVxdWVzdCBpcyBlbmFibGVkIGZvciBMaW5lcyBpbiByYW5nZSAwIHRvIDMxIGZvciBjcHUyCiAgICogQHJtdG9sbCBDMklNUjEgICAgICAgICBJTXggICAgICAgICAgIExMX0MyX0VYVElfSXNFbmFibGVkSVRfMF8zMQotICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8wCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMgpAQCAtNTc4LDE3ICs2MDMsMTggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzI4ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yOQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzBfMzEKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0MyX0VYVElfSXNFbmFibGVkSVRfMF8zMSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTU5OSw3ICs2MjUsNyBAQAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSBpZiBFeHRpTGluZSBJbnRlcnJ1cHQgcmVxdWVzdCBpcyBlbmFibGVkIGZvciBMaW5lcyBpbiByYW5nZSAzMiB0byA2MwogICAqIEBybXRvbGwgSU1SMiAgICAgICAgIElNeCAgICAgICAgICAgTExfRVhUSV9Jc0VuYWJsZWRJVF8zMl82MwotICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zNgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zNwpAQCAtNjI1LDcgKzY1MSw3IEBACiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIGlmIEV4dGlMaW5lIEludGVycnVwdCByZXF1ZXN0IGlzIGVuYWJsZWQgZm9yIExpbmVzIGluIHJhbmdlIDMyIHRvIDYzIGZvciBjcHUyCiAgICogQHJtdG9sbCBDMklNUjIgICAgICAgICBJTXggICAgICAgICAgIExMX0MyX0VYVElfSXNFbmFibGVkSVRfMzJfNjMKLSAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzcKQEAgLTY1OSw3ICs2ODUsNyBAQAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgRXh0aUxpbmUgRXZlbnQgcmVxdWVzdCBmb3IgTGluZXMgaW4gcmFuZ2UgMCB0byAzMQogICAqIEBybXRvbGwgRU1SMSAgICAgICAgIEVNeCAgICAgICAgICAgTExfRVhUSV9FbmFibGVFdmVudF8wXzMxCi0gICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yCkBAIC02NzksOSArNzA1LDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzBfMzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0VuYWJsZUV2ZW50XzBfMzEodWludDMyX3QgRXh0aUxpbmUpCkBAIC02OTIsNyArNzE4LDcgQEAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIEV4dGlMaW5lIEV2ZW50IHJlcXVlc3QgZm9yIExpbmVzIGluIHJhbmdlIDAgdG8gMzEgZm9yIGNwdTIKICAgKiBAcm10b2xsIEMyRU1SMSAgICAgICAgIEVNeCAgICAgICAgICAgTExfQzJfRVhUSV9FbmFibGVFdmVudF8wXzMxCi0gICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yCkBAIC03MTIsOSArNzM4LDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzBfMzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9FWFRJX0VuYWJsZUV2ZW50XzBfMzEodWludDMyX3QgRXh0aUxpbmUpCkBAIC03MjgsNyArNzU0LDYgQEAKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMzJfNjMKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0VYVElfRW5hYmxlRXZlbnRfMzJfNjModWludDMyX3QgRXh0aUxpbmUpCkBAIC03NDIsNyArNzY3LDYgQEAKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMzJfNjMKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0MyX0VYVElfRW5hYmxlRXZlbnRfMzJfNjModWludDMyX3QgRXh0aUxpbmUpCkBAIC03NTMsNyArNzc3LDcgQEAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBFeHRpTGluZSBFdmVudCByZXF1ZXN0IGZvciBMaW5lcyBpbiByYW5nZSAwIHRvIDMxCiAgICogQHJtdG9sbCBFTVIxICAgICAgICAgRU14ICAgICAgICAgICBMTF9FWFRJX0Rpc2FibGVFdmVudF8wXzMxCi0gICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yCkBAIC03NzMsOSArNzk3LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzBfMzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9EaXNhYmxlRXZlbnRfMF8zMSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTc4Niw3ICs4MDksNyBAQAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIEV4dGlMaW5lIEV2ZW50IHJlcXVlc3QgZm9yIExpbmVzIGluIHJhbmdlIDAgdG8gMzEgZm9yIGNwdTIKICAgKiBAcm10b2xsIEMyRU1SMSAgICAgICAgIEVNeCAgICAgICAgICAgTExfQzJfRVhUSV9EaXNhYmxlRXZlbnRfMF8zMQotICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8wCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMgpAQCAtODA2LDkgKzgyOSw5IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE4CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FX0FMTF8wXzMxCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMSAoKikKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfRVhUSV9EaXNhYmxlRXZlbnRfMF8zMSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTgyMiw3ICs4NDUsNyBAQAogICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FX0FMTF8zMl82MworICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0Rpc2FibGVFdmVudF8zMl82Myh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTgzNiw3ICs4NTksNiBAQAogICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FX0FMTF8zMl82MwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfRVhUSV9EaXNhYmxlRXZlbnRfMzJfNjModWludDMyX3QgRXh0aUxpbmUpCkBAIC04NDcsNyArODY5LDcgQEAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgaWYgRXh0aUxpbmUgRXZlbnQgcmVxdWVzdCBpcyBlbmFibGVkIGZvciBMaW5lcyBpbiByYW5nZSAwIHRvIDMxCiAgICogQHJtdG9sbCBFTVIxICAgICAgICAgRU14ICAgICAgICAgICBMTF9FWFRJX0lzRW5hYmxlZEV2ZW50XzBfMzEKLSAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIKQEAgLTg2Nyw5ICs4ODksOSBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMF8zMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEgKCopCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAbm90ZSAgIFBsZWFzZSBjaGVjayBlYWNoIGRldmljZSBsaW5lIG1hcHBpbmcgZm9yIEVYVEkgTGluZSBhdmFpbGFiaWxpdHkKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KQEAgLTg4MSw3ICs5MDMsNyBAQAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSBpZiBFeHRpTGluZSBFdmVudCByZXF1ZXN0IGlzIGVuYWJsZWQgZm9yIExpbmVzIGluIHJhbmdlIDAgdG8gMzEgZm9yIGNwdTIKICAgKiBAcm10b2xsIEMyRU1SMSAgICAgICAgIEVNeCAgICAgICAgICAgTExfQzJfRVhUSV9Jc0VuYWJsZWRFdmVudF8wXzMxCi0gICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yCkBAIC05MDEsOSArOTIzLDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzBfMzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQG5vdGUgICBQbGVhc2UgY2hlY2sgZWFjaCBkZXZpY2UgbGluZSBtYXBwaW5nIGZvciBFWFRJIExpbmUgYXZhaWxhYmlsaXR5CiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCkBAIC05MTgsNyArOTQwLDYgQEAKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMzJfNjMKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9FWFRJX0lzRW5hYmxlZEV2ZW50XzMyXzYzKHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtOTMyLDcgKzk1Myw2IEBACiAgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzMyXzYzCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQzJfRVhUSV9Jc0VuYWJsZWRFdmVudF8zMl82Myh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTk3OSw5ICs5OTksMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMSAoKikKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9FbmFibGVSaXNpbmdUcmlnXzBfMzEodWludDMyX3QgRXh0aUxpbmUpCkBAIC0xMDAwLDkgKzEwMjEsMTAgQEAKICAgKiAgICAgICBjb25kaXRpb24uCiAgICogQHJtdG9sbCBSVFNSMiAgICAgICAgUlR4ICAgICAgICAgICBMTF9FWFRJX0VuYWJsZVJpc2luZ1RyaWdfMzJfNjMKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDEKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9FbmFibGVSaXNpbmdUcmlnXzMyXzYzKHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMTA0MSw5ICsxMDYzLDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE4CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzEgKCopCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0VYVElfRGlzYWJsZVJpc2luZ1RyaWdfMF8zMSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTEwNjMsOSArMTA4NiwxMCBAQAogICAqICAgICAgIGNvbmRpdGlvbi4KICAgKiBAcm10b2xsIFJUU1IyICAgICAgICBSVHggICAgICAgICAgIExMX0VYVElfRGlzYWJsZVJpc2luZ1RyaWdfMzJfNjMKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDEKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9EaXNhYmxlUmlzaW5nVHJpZ18zMl82Myh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTEwOTcsOSArMTEyMSwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxICgqKQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRVhUSV9Jc0VuYWJsZWRSaXNpbmdUcmlnXzBfMzEodWludDMyX3QgRXh0aUxpbmUpCkBAIC0xMTExLDkgKzExMzYsMTAgQEAKICAgKiBAYnJpZWYgIENoZWNrIGlmIHJpc2luZyBlZGdlIHRyaWdnZXIgaXMgZW5hYmxlZCBmb3IgTGluZXMgaW4gcmFuZ2UgMzIgdG8gNjMKICAgKiBAcm10b2xsIFJUU1IyICAgICAgICBSVHggICAgICAgICAgIExMX0VYVElfSXNFbmFibGVkUmlzaW5nVHJpZ18zMl82MwogICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMzCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRVhUSV9Jc0VuYWJsZWRSaXNpbmdUcmlnXzMyXzYzKHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMTE2MCw5ICsxMTg2LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE4CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzEgKCopCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAbm90ZSAgIFBsZWFzZSBjaGVjayBlYWNoIGRldmljZSBsaW5lIG1hcHBpbmcgZm9yIEVYVEkgTGluZSBhdmFpbGFiaWxpdHkKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTExODIsOSArMTIwOSwxMCBAQAogICAqICAgICAgIGNvbmRpdGlvbi4KICAgKiBAcm10b2xsIEZUU1IyICAgICAgICBGVHggICAgICAgICAgIExMX0VYVElfRW5hYmxlRmFsbGluZ1RyaWdfMzJfNjMKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDEKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9FbmFibGVGYWxsaW5nVHJpZ18zMl82Myh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTEyMjIsOSArMTI1MCwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8xOQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxICgqKQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQG5vdGUgICBQbGVhc2UgY2hlY2sgZWFjaCBkZXZpY2UgbGluZSBtYXBwaW5nIGZvciBFWFRJIExpbmUgYXZhaWxhYmlsaXR5CiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC0xMjQzLDkgKzEyNzIsMTAgQEAKICAgKiAgICAgICBJbiB0aGlzIGNhc2UsIGJvdGggZ2VuZXJhdGUgYSB0cmlnZ2VyIGNvbmRpdGlvbi4KICAgKiBAcm10b2xsIEZUU1IyICAgICAgICBGVHggICAgICAgICAgIExMX0VYVElfRGlzYWJsZUZhbGxpbmdUcmlnXzMyXzYzCiAgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQxCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0VYVElfRGlzYWJsZUZhbGxpbmdUcmlnXzMyXzYzKHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMTI3Nyw5ICsxMzA3LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE4CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzEgKCopCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAbm90ZSAgIFBsZWFzZSBjaGVjayBlYWNoIGRldmljZSBsaW5lIG1hcHBpbmcgZm9yIEVYVEkgTGluZSBhdmFpbGFiaWxpdHkKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KQEAgLTEyOTIsNyArMTMyMyw3IEBACiAgICogQGJyaWVmICBDaGVjayBpZiBmYWxsaW5nIGVkZ2UgdHJpZ2dlciBpcyBlbmFibGVkIGZvciBMaW5lcyBpbiByYW5nZSAzMiB0byA2MwogICAqIEBybXRvbGwgRlRTUjIgICAgICAgIEZUeCAgICAgICAgICAgTExfRVhUSV9Jc0VuYWJsZWRGYWxsaW5nVHJpZ18zMl82MwogICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMzCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MQogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgpAQCAtMTMzOSw5ICsxMzcwLDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE4CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzEgKCopCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAbm90ZSAgIFBsZWFzZSBjaGVjayBlYWNoIGRldmljZSBsaW5lIG1hcHBpbmcgZm9yIEVYVEkgTGluZSBhdmFpbGFiaWxpdHkKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTEzNTksOSArMTM5MSwxMCBAQAogICAqICAgICAgIHJlZ2lzdGVyIChieSB3cml0aW5nIGEgMSBpbnRvIHRoZSBiaXQpCiAgICogQHJtdG9sbCBTV0lFUjIgICAgICAgU1dJeCAgICAgICAgICBMTF9FWFRJX0dlbmVyYXRlU1dJXzMyXzYzCiAgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQxCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0VYVElfR2VuZXJhdGVTV0lfMzJfNjModWludDMyX3QgRXh0aUxpbmUpCkBAIC0xNDAzLDkgKzE0MzYsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMSAoKikKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0VYVElfSXNBY3RpdmVGbGFnXzBfMzEodWludDMyX3QgRXh0aUxpbmUpCkBAIC0xNDE5LDkgKzE0NTMsMTAgQEAKICAgKiAgICAgICBsaW5lLiBUaGlzIGJpdCBpcyBjbGVhcmVkIGJ5IHdyaXRpbmcgYSAxIHRvIHRoZSBiaXQuCiAgICogQHJtdG9sbCBQUjIgICAgICAgICAgUElGeCAgICAgICAgICAgTExfRVhUSV9Jc0FjdGl2ZUZsYWdfMzJfNjMKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDEKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0VYVElfSXNBY3RpdmVGbGFnXzMyXzYzKHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMTQ1NSw5ICsxNDkwLDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE4CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzE5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMxCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIwICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8yMSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzEgKCopCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIEBub3RlIFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBzZWxlY3RlZCBlZGdlIGV2ZW50IGFycml2ZXMgb24gdGhlIGludGVycnVwdAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0VYVElfUmVhZEZsYWdfMF8zMSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTE0NzEsOSArMTUwNywxMCBAQAogICAqICAgICAgIGxpbmUuIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEgdG8gdGhlIGJpdC4KICAgKiBAcm10b2xsIFBSMiAgICAgICAgICBQSUZ4ICAgICAgICAgICBMTF9FWFRJX1JlYWRGbGFnXzMyXzYzCiAgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQxCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIEBub3RlIFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSBzZWxlY3RlZCBlZGdlIGV2ZW50IGFycml2ZXMgb24gdGhlIGludGVycnVwdAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0VYVElfUmVhZEZsYWdfMzJfNjModWludDMyX3QgRXh0aUxpbmUpCkBAIC0xNTA3LDkgKzE1NDQsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMTkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfMjAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzIxICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV8zMSAoKikKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9DbGVhckZsYWdfMF8zMSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTE1MjMsOSArMTU2MSwxMCBAQAogICAqICAgICAgIGxpbmUuIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEgdG8gdGhlIGJpdC4KICAgKiBAcm10b2xsIFBSMiAgICAgICAgICBQSUZ4ICAgICAgICAgICBMTF9FWFRJX0NsZWFyRmxhZ18zMl82MwogICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMzCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzMzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0NsZWFyRmxhZ18zMl82Myh1aW50MzJfdCBFeHRpTGluZSkKZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfbGxfbHB0aW0uaCBiL0luYy9zdG0zMndieHhfbGxfbHB0aW0uaAppbmRleCA1YTBlNzIzLi5mZGM4MjBiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2xsX2xwdGltLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9sbF9scHRpbS5oCkBAIC0zNzAsNyArMzcwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWQoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DUiwgTFBUSU1fQ1JfRU5BQkxFKSA9PSBMUFRJTV9DUl9FTkFCTEUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q1IsIExQVElNX0NSX0VOQUJMRSkgPT0gTFBUSU1fQ1JfRU5BQkxFKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTQyMyw3ICs0MjMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZFJlc2V0QWZ0ZXJSZWFkKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+Q1IsIExQVElNX0NSX1JTVEFSRSkgPT0gTFBUSU1fQ1JfUlNUQVJFKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNSLCBMUFRJTV9DUl9SU1RBUkUpID09IExQVElNX0NSX1JTVEFSRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC02OTAsOCArNjkwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZXQgTFBUSU0gaW5wdXQgMSBzb3VyY2UgKGRlZmF1bHQgR1BJTykuCi0gICogQHJtdG9sbCBPUiAgICAgICAgIE9SXzAgICAgICAgICBMTF9MUFRJTV9TZXRJbnB1dDFTcmMKLSAgKiBAcm10b2xsIE9SICAgICAgICAgT1JfMSAgICAgICAgIExMX0xQVElNX1NldElucHV0MVNyYworICAqIEBybXRvbGwgT1IgICAgICBPUiAgICAgICBMTF9MUFRJTV9TZXRJbnB1dDFTcmMKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKICAgKiBAcGFyYW0gIFNyYyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0xQVElNX0lOUFVUMV9TUkNfR1BJTwpAQCAtNzAyLDEyICs3MDEsMTIgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0xQVElNX1NldElucHV0MVNyYyhMUFRJTV9UeXBlRGVmICpMUFRJTXgsIHVpbnQzMl90IFNyYykKIHsKLSAgV1JJVEVfUkVHKExQVElNeC0+T1IsIFNyYyk7CisgIE1PRElGWV9SRUcoTFBUSU14LT5PUiwgTFBUSU1fT1JfT1IsIFNyYyk7CiB9CiAKIC8qKgogICAqIEBicmllZiAgU2V0IExQVElNIGlucHV0IDIgc291cmNlIChkZWZhdWx0IEdQSU8pLgotICAqIEBybXRvbGwgT1IgICAgICAgICBPUl8wICAgICAgICAgTExfTFBUSU1fU2V0SW5wdXQyU3JjCisgICogQHJtdG9sbCBPUiAgICAgIE9SICAgICAgIExMX0xQVElNX1NldElucHV0MlNyYwogICAqIEBwYXJhbSAgTFBUSU14IExvdy1Qb3dlciBUaW1lciBpbnN0YW5jZQogICAqIEBwYXJhbSAgU3JjIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfTFBUSU1fSU5QVVQyX1NSQ19HUElPCkBAIC03MTYsNyArNzE1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0xQVElNX1NldElucHV0MlNyYyhMUFRJTV9UeXBlRGVmICpMUFRJTXgsIHVpbnQzMl90IFNyYykKIHsKLSAgV1JJVEVfUkVHKExQVElNeC0+T1IsIFNyYyk7CisgIE1PRElGWV9SRUcoTFBUSU14LT5PUiwgTFBUSU1fT1JfT1IsIFNyYyk7CiB9CiAKIC8qKgpAQCAtNzY2LDcgKzc2NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkVGltZW91dChMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfVElNT1VUKSA9PSBMUFRJTV9DRkdSX1RJTU9VVCk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX1RJTU9VVCkgPT0gTFBUSU1fQ0ZHUl9USU1PVVQpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTAzNSw3ICsxMDM0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRFbmNvZGVyTW9kZShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPkNGR1IsIExQVElNX0NGR1JfRU5DKSA9PSBMUFRJTV9DRkdSX0VOQyk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5DRkdSLCBMUFRJTV9DRkdSX0VOQykgPT0gTFBUSU1fQ0ZHUl9FTkMpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTA2NSw3ICsxMDY0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QTShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0NNUE0pID09IExQVElNX0lTUl9DTVBNKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0NNUE0pID09IExQVElNX0lTUl9DTVBNKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTEwODcsNyArMTA4Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNBY3RpdmVGbGFnX0FSUk0oTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9BUlJNKSA9PSBMUFRJTV9JU1JfQVJSTSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9BUlJNKSA9PSBMUFRJTV9JU1JfQVJSTSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMTA5LDcgKzExMDgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzQWN0aXZlRmxhZ19FWFRUUklHKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfRVhUVFJJRykgPT0gTFBUSU1fSVNSX0VYVFRSSUcpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SVNSLCBMUFRJTV9JU1JfRVhUVFJJRykgPT0gTFBUSU1fSVNSX0VYVFRSSUcpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTEzMSw3ICsxMTMwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9DTVBPSykgPT0gTFBUSU1fSVNSX0NNUE9LKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0NNUE9LKSA9PSBMUFRJTV9JU1JfQ01QT0spID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTE1Myw3ICsxMTUyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQVJST0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9BUlJPSykgPT0gTFBUSU1fSVNSX0FSUk9LKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0FSUk9LKSA9PSBMUFRJTV9JU1JfQVJST0spID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTE3NSw3ICsxMTc0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfVVAoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JU1IsIExQVElNX0lTUl9VUCkgPT0gTFBUSU1fSVNSX1VQKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX1VQKSA9PSBMUFRJTV9JU1JfVVApID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTE5Nyw3ICsxMTk2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfRE9XTihMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0RPV04pID09IExQVElNX0lTUl9ET1dOKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklTUiwgTFBUSU1fSVNSX0RPV04pID09IExQVElNX0lTUl9ET1dOKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTEyMzgsNyArMTIzNyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkSVRfQ01QTShMUFRJTV9UeXBlRGVmICpMUFRJTXgpCiB7Ci0gIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0NNUE1JRSkgPT0gTFBUSU1fSUVSX0NNUE1JRSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBNSUUpID09IExQVElNX0lFUl9DTVBNSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTI3MSw3ICsxMjcwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFRJTV9Jc0VuYWJsZWRJVF9BUlJNKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJSTUlFKSA9PSBMUFRJTV9JRVJfQVJSTUlFKT8gMVVMIDogMFVMKSk7CisgIHJldHVybiAoKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0FSUk1JRSkgPT0gTFBUSU1fSUVSX0FSUk1JRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMzA0LDcgKzEzMDMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0VYVFRSSUcoTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9FWFRUUklHSUUpID09IExQVElNX0lFUl9FWFRUUklHSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfRVhUVFJJR0lFKSA9PSBMUFRJTV9JRVJfRVhUVFJJR0lFKSA/IDFVTCA6IDBVTCkpOwogfQogCiAvKioKQEAgLTEzMzcsNyArMTMzNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTFBUSU1fSXNFbmFibGVkSVRfQ01QT0soTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBPS0lFKSA9PSBMUFRJTV9JRVJfQ01QT0tJRSk/IDFVTCA6IDBVTCkpOworICByZXR1cm4gKCgoUkVBRF9CSVQoTFBUSU14LT5JRVIsIExQVElNX0lFUl9DTVBPS0lFKSA9PSBMUFRJTV9JRVJfQ01QT0tJRSkgPyAxVUwgOiAwVUwpKTsKIH0KIAogLyoqCkBAIC0xMzY2LDExICsxMzY1LDExIEBACiAgICogQGJyaWVmICBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYXV0b3JlbG9hZCByZWdpc3RlciB3cml0ZSBjb21wbGV0ZWQgaW50ZXJydXB0IChBUlJPS0lFKSBpcyBlbmFibGVkLgogICAqIEBybXRvbGwgSUVSICAgICAgICAgIEFSUk9LSUUgICAgICAgTExfTFBUSU1fSXNFbmFibGVkSVRfQVJST0sKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0FSUk9LKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJST0tJRSkgPT0gTFBUSU1fSUVSX0FSUk9LSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfQVJST0tJRSkgPT0gTFBUSU1fSUVSX0FSUk9LSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTM5OSwxMSArMTM5OCwxMSBAQAogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRpcmVjdGlvbiBjaGFuZ2UgdG8gdXAgaW50ZXJydXB0IChVUElFKSBpcyBlbmFibGVkLgogICAqIEBybXRvbGwgSUVSICAgICAgICAgIFVQSUUgICAgICAgICAgTExfTFBUSU1fSXNFbmFibGVkSVRfVVAKICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX1VQKExQVElNX1R5cGVEZWYgKkxQVElNeCkKIHsKLSAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfVVBJRSkgPT0gTFBUSU1fSUVSX1VQSUUpPyAxVUwgOiAwVUwpKTsKKyAgcmV0dXJuICgoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfVVBJRSkgPT0gTFBUSU1fSUVSX1VQSUUpID8gMVVMIDogMFVMKSk7CiB9CiAKIC8qKgpAQCAtMTQzMiwxMSArMTQzMSwxMSBAQAogICAqIEBicmllZiAgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRpcmVjdGlvbiBjaGFuZ2UgdG8gZG93biBpbnRlcnJ1cHQgKERPV05JRSkgaXMgZW5hYmxlZC4KICAgKiBAcm10b2xsIElFUiAgICAgICAgICBET1dOSUUgICAgICAgIExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04KICAgKiBAcGFyYW0gIExQVElNeCBMb3ctUG93ZXIgVGltZXIgaW5zdGFuY2UKLSAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVElNX0lzRW5hYmxlZElUX0RPV04oTFBUSU1fVHlwZURlZiAqTFBUSU14KQogewotICByZXR1cm4gKChSRUFEX0JJVChMUFRJTXgtPklFUiwgTFBUSU1fSUVSX0RPV05JRSkgPT0gTFBUSU1fSUVSX0RPV05JRSk/IDFVTCA6IDBVTCk7CisgIHJldHVybiAoKFJFQURfQklUKExQVElNeC0+SUVSLCBMUFRJTV9JRVJfRE9XTklFKSA9PSBMUFRJTV9JRVJfRE9XTklFKSA/IDFVTCA6IDBVTCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyd2J4eF9sbF9yY2MuaCBiL0luYy9zdG0zMndieHhfbGxfcmNjLmgKaW5kZXggMzdjZjI0Ny4uZTQ0ODgyNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyd2J4eF9sbF9yY2MuaAorKysgYi9JbmMvc3RtMzJ3Ynh4X2xsX3JjYy5oCkBAIC0xMjQsNiArMTI0LDEyIEBACiAjaWYgIWRlZmluZWQgIChIU0k0OF9WQUxVRSkKICNkZWZpbmUgSFNJNDhfVkFMVUUgIDQ4MDAwMDAwVSAgLyohPCBWYWx1ZSBvZiB0aGUgSFNJNDggb3NjaWxsYXRvciBpbiBIeiAqLwogI2VuZGlmIC8qIEhTSTQ4X1ZBTFVFICovCisKKyNpZiBkZWZpbmVkKFNQSV9JMlNfU1VQUE9SVCkKKyNpZiAhZGVmaW5lZCAgKEVYVEVSTkFMX0NMT0NLX1ZBTFVFKQorI2RlZmluZSBFWFRFUk5BTF9DTE9DS19WQUxVRSAgICA0ODAwMFUgLyohPCBWYWx1ZSBvZiB0aGUgSTJTX0NLSU4gZXh0ZXJuYWwgb3NjaWxsYXRvciBpbiBIeiAqLworI2VuZGlmIC8qIEVYVEVSTkFMX0NMT0NLX1ZBTFVFICovCisjZW5kaWYKIC8qKgogICAqIEB9CiAgICovCkBAIC0yOTIsNyArMjk4LDYgQEAKICAgKiBAfQogICAqLwogCi0KIC8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1NZU0NMS19ESVYgIEFIQiBwcmVzY2FsZXIKICAgKiBAewogICAqLwpAQCAtMzc3LDEzICszODIsMTMgQEAKICAgKiBAfQogICAqLwogCisjaWYgZGVmaW5lZChSQ0NfU01QU19TVVBQT1JUKQogLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfU01QU19DTEtTT1VSQ0UgIFNNUFMgY2xvY2sgc3dpdGNoCiAgICogQHsKICAgKi8KICNkZWZpbmUgTExfUkNDX1NNUFNfQ0xLU09VUkNFX0hTSSAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgLyohPCBIU0kgc2VsZWN0aW9uIGFzIFNNUFMgY2xvY2sgKi8KICNkZWZpbmUgTExfUkNDX1NNUFNfQ0xLU09VUkNFX01TSSAgICAgICAgICAgUkNDX1NNUFNDUl9TTVBTU0VMXzAgICAgLyohPCBNU0kgc2VsZWN0aW9uIGFzIFNNUFMgY2xvY2sgKi8KICNkZWZpbmUgTExfUkNDX1NNUFNfQ0xLU09VUkNFX0hTRSAgICAgICAgICAgUkNDX1NNUFNDUl9TTVBTU0VMXzEgICAgLyohPCBIU0Ugc2VsZWN0aW9uIGFzIFNNUFMgY2xvY2sgKi8KLQogLyoqCiAgICogQH0KICAgKi8KQEAgLTM5NSw3ICs0MDAsNiBAQAogI2RlZmluZSBMTF9SQ0NfU01QU19DTEtTT1VSQ0VfU1RBVFVTX01TSSAgICAgICBSQ0NfU01QU0NSX1NNUFNTV1NfMCAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNU0kgdXNlZCBhcyBTTVBTIGNsb2NrICovCiAjZGVmaW5lIExMX1JDQ19TTVBTX0NMS1NPVVJDRV9TVEFUVVNfSFNFICAgICAgIFJDQ19TTVBTQ1JfU01QU1NXU18xICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEhTRSB1c2VkIGFzIFNNUFMgY2xvY2sgKi8KICNkZWZpbmUgTExfUkNDX1NNUFNfQ0xLU09VUkNFX1NUQVRVU19OT19DTE9DSyAgKFJDQ19TTVBTQ1JfU01QU1NXU18wfFJDQ19TTVBTQ1JfU01QU1NXU18xKSAgIC8qITwgTm8gQ2xvY2sgdXNlZCBhcyBTTVBTIGNsb2NrICovCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC00MDcsMTMgKzQxMSwxMCBAQAogI2RlZmluZSBMTF9SQ0NfU01QU19ESVZfMSAgICAgICAgICAgICAgICAgIFJDQ19TTVBTQ1JfU01QU0RJVl8wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTTVBTIGNsb2NrIGRpdmlzaW9uIDEgKi8KICNkZWZpbmUgTExfUkNDX1NNUFNfRElWXzIgICAgICAgICAgICAgICAgICBSQ0NfU01QU0NSX1NNUFNESVZfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU01QUyBjbG9jayBkaXZpc2lvbiAyICovCiAjZGVmaW5lIExMX1JDQ19TTVBTX0RJVl8zICAgICAgICAgICAgICAgICAgKFJDQ19TTVBTQ1JfU01QU0RJVl8wfFJDQ19TTVBTQ1JfU01QU0RJVl8xKSAgICAgICAvKiE8IFNNUFMgY2xvY2sgZGl2aXNpb24gMyAqLwotCiAvKioKICAgICAqIEB9CiAgICAgKi8KLQotCi0KKyNlbmRpZgogCiAjaWYgZGVmaW5lZChVU0VfRlVMTF9MTF9EUklWRVIpCiAvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19QRVJJUEhfRlJFUVVFTkNZIFBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5CkBAIC00MzcsNiArNDM4LDcgQEAKICAgKiBAfQogICAqLwogCisjaWYgZGVmaW5lZChMUFVBUlQxKQogLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfTFBVQVJUMV9DTEtTT1VSQ0UgTFBVQVJUMSBDTEtTT1VSQ0UKICAgKiBAewogICAqLwpAQCAtNDQ3LDYgKzQ0OSw3IEBACiAvKioKICAgKiBAfQogICAqLworI2VuZGlmCiAKIC8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX0kyQ3hfQ0xLU09VUkNFIEkyQ3ggQ0xLU09VUkNFCiAgICogQHsKQEAgLTQ3OCw2ICs0ODEsNyBAQAogICAqIEB9CiAgICovCiAKKyNpZiBkZWZpbmVkKFNBSTEpCiAvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19TQUkxX0NMS1NPVVJDRSBTQUkxIENMS1NPVVJDRQogICAqIEB7CiAgICovCkBAIC00ODgsNiArNDkyLDcgQEAKIC8qKgogICAqIEB9CiAgICovCisjZW5kaWYKIAogLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfQ0xLNDhfQ0xLU09VUkNFIENMSzQ4IENMS1NPVVJDRQogICAqIEB7CkBAIC01MTksOCArNTI0LDEwIEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgTExfUkNDX0FEQ19DTEtTT1VSQ0VfTk9ORSAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgLyohPCBubyBDbG9jayB1c2VkIGFzIEFEQyBjbG9jayovCi0jaWYgZGVmaW5lZChTQUkxKQorI2lmIGRlZmluZWQoU1RNMzJXQjU1eHgpIHx8IGRlZmluZWQgKFNUTTMyV0I1TXh4KQogI2RlZmluZSBMTF9SQ0NfQURDX0NMS1NPVVJDRV9QTExTQUkxICAgICAgICAgIFJDQ19DQ0lQUl9BRENTRUxfMCAvKiE8IFBMTFNBSTEgc2VsZWN0ZWQgYXMgQURDIGNsb2NrKi8KKyNlbGlmIGRlZmluZWQoU1RNMzJXQjM1eHgpCisjZGVmaW5lIExMX1JDQ19BRENfQ0xLU09VUkNFX0hTSSAgICAgICAgICAgICAgUkNDX0NDSVBSX0FEQ1NFTF8wIC8qITwgSFNJIHNlbGVjdGVkIGFzIEFEQyBjbG9jayovCiAjZW5kaWYKICNkZWZpbmUgTExfUkNDX0FEQ19DTEtTT1VSQ0VfUExMICAgICAgICAgICAgICBSQ0NfQ0NJUFJfQURDU0VMXzEgLyohPCBQTEwgc2VsZWN0ZWQgYXMgQURDIGNsb2NrKi8KICNkZWZpbmUgTExfUkNDX0FEQ19DTEtTT1VSQ0VfU1lTQ0xLICAgICAgICAgICBSQ0NfQ0NJUFJfQURDU0VMICAgLyohPCBTWVNDTEsgc2VsZWN0ZWQgYXMgQURDIGNsb2NrKi8KQEAgLTUzOCw2ICs1NDUsMTkgQEAKICAgKiBAfQogICAqLwogCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19JMlNDTEtTT1VSQ0UgUGVyaXBoZXJhbCBJMlMgY2xvY2sgc291cmNlIHNlbGVjdGlvbgorICAqIEB7CisgICovCisjZGVmaW5lIExMX1JDQ19JMlNfQ0xLU09VUkNFX05PTkUgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAvKiE8IG5vIENsb2NrIHVzZWQgYXMgSTJTIGNsb2NrKi8KKyNkZWZpbmUgTExfUkNDX0kyU19DTEtTT1VSQ0VfSFNJICAgICAgICAgUkNDX0NDSVBSX0kyU1NFTF8wICAgICAgICAgIC8qITwgSFNJIGNsb2NrIHVzZWQgYXMgSTJTIGNsb2NrIHNvdXJjZSAqLworI2RlZmluZSBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9QTEwgICAgICAgICBSQ0NfQ0NJUFJfSTJTU0VMXzEgICAgICAgICAgLyohPCBQTEwgY2xvY2sgdXNlZCBhcyBJMlMgY2xvY2sgc291cmNlICovCisjZGVmaW5lIExMX1JDQ19JMlNfQ0xLU09VUkNFX1BJTiAgICAgICAgIFJDQ19DQ0lQUl9JMlNTRUwgICAgICAgICAgICAvKiE8IEV4dGVybmFsIGNsb2NrIHVzZWQgYXMgSTJTIGNsb2NrIHNvdXJjZSAqLworLyoqCisgICogQH0KKyAgKi8KKyNlbmRpZgorCiAvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19VU0FSVDEgVVNBUlQxCiAgICogQHsKICAgKi8KQEAgLTU4Nyw3ICs2MDcsNyBAQAogLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfQ0xLNDggQ0xLNDgKICAgKiBAewogICAqLwotI2RlZmluZSBMTF9SQ0NfQ0xLNDhfQ0xLU09VUkNFICAgICAgICAgICAgIFJDQ19DQ0lQUl9DTEs0OFNFTCAgLyohPCBVU0IgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBiaXRzICovCisjZGVmaW5lIExMX1JDQ19DTEs0OF9DTEtTT1VSQ0UgICAgICAgICAgICAgUkNDX0NDSVBSX0NMSzQ4U0VMICAvKiE8IENMSzQ4IGNsb2NrIHNvdXJjZSBzZWxlY3Rpb24gYml0cyAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTYxNiw2ICs2MzYsMTYgQEAKICAgKiBAfQogICAqLwogCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19JMlMgSTJTCisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfUkNDX0kyU19DTEtTT1VSQ0UgICAgICAgICAgICAgICBSQ0NfQ0NJUFJfSTJTU0VMICAgLyohPCBJMlMgY2xvY2sgc291cmNlIHNlbGVjdGlvbiBiaXRzICovCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmCisKIC8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1JUQ19DTEtTT1VSQ0UgIFJUQyBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uCiAgICogQHsKICAgKi8KQEAgLTczNCw2ICs3NjQsNyBAQAogICAqLwogCiAKKyNpZiBkZWZpbmVkKFNBSTEpCiAvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19QTExTQUkxUSAgUExMU0FJMSBkaXZpc2lvbiBmYWN0b3IgKFBMTFEpCiAgICogQHsKICAgKi8KQEAgLTc5OSw2ICs4MzAsNyBAQAogLyoqCiAgICogQH0KICAgKi8KKyNlbmRpZgogCiAvKioKICAgKiBAfQpAQCAtOTY4LDYgKzEwMDAsNjAgQEAKICNkZWZpbmUgX19MTF9SQ0NfQ0FMQ19QTExDTEtfQURDX0ZSRVEoX19JTlBVVEZSRVFfXywgX19QTExNX18sIF9fUExMTl9fLCBfX1BMTFBfXykgKChfX0lOUFVURlJFUV9fKSAqIChfX1BMTE5fXykgLyAoKCgoX19QTExNX18pPj4gUkNDX1BMTENGR1JfUExMTV9Qb3MpICsgMVUpKSAvIFwKICAgICAgICAgICAgICAgICAgICAoKChfX1BMTFBfXykgPj4gUkNDX1BMTENGR1JfUExMUF9Qb3MpICsgMVUpKQogCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisvKioKKyAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjYWxjdWxhdGUgdGhlIFBMTFBDTEsgZnJlcXVlbmN5IHVzZWQgb24gSTJTIGRvbWFpbgorICAqIEBub3RlIGV4OiBAcmVmIF9fTExfUkNDX0NBTENfUExMQ0xLX0kyU19GUkVRIChIU0VfVkFMVUUsQHJlZiBMTF9SQ0NfUExMX0dldERpdmlkZXIgKCksCisgICogICAgICAgICAgICAgQHJlZiBMTF9SQ0NfUExMX0dldE4gKCksIEByZWYgTExfUkNDX1BMTF9HZXRQICgpKTsKKyAgKiBAcGFyYW0gIF9fSU5QVVRGUkVRX18gUExMIElucHV0IGZyZXF1ZW5jeSAoYmFzZWQgb24gSFNFL0hTSSkKKyAgKiBAcGFyYW0gIF9fUExMTV9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl8zCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExNX0RJVl82CisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTE1fRElWXzcKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMTV9ESVZfOAorICAqIEBwYXJhbSAgX19QTExOX18gQmV0d2VlbiBNaW5fRGF0YSA9IDggYW5kIE1heF9EYXRhID0gODYKKyAgKiBAcGFyYW0gIF9fUExMUF9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFBfRElWXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUF9ESVZfMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl80CisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFBfRElWXzUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUF9ESVZfNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl83CisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1BMTFBfRElWXzgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUExMUF9ESVZfOQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xNworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xOAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8xOQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yNworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yOAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8yOQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8zMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8zMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19QTExQX0RJVl8zMgorICAqIEByZXR2YWwgUExMIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCisgICovCisjZGVmaW5lIF9fTExfUkNDX0NBTENfUExMQ0xLX0kyU19GUkVRKF9fSU5QVVRGUkVRX18sIF9fUExMTV9fLCBfX1BMTE5fXywgX19QTExQX18pICgoX19JTlBVVEZSRVFfXykgICogKF9fUExMTl9fKSAvICgoKChfX1BMTE1fXyk+PiBSQ0NfUExMQ0ZHUl9QTExNX1BvcykgKyAxVSkpIC8gXAorICAgICAgICAgICAgICAgICAgICgoKF9fUExMUF9fKSA+PiBSQ0NfUExMQ0ZHUl9QTExQX1BvcykgKyAxVSkpCisjZW5kaWYKKwogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSBQTExRQ0xLIGZyZXF1ZW5jeSB1c2VkIG9uIDQ4TSBkb21haW4KICAgKiBAbm90ZSBleDogQHJlZiBfX0xMX1JDQ19DQUxDX1BMTENMS180OE1fRlJFUSAoSFNFX1ZBTFVFLEByZWYgTExfUkNDX1BMTF9HZXREaXZpZGVyICgpLApAQCAtMjU4MCw5ICsyNjY2LDEwIEBACiAgICogQHJtdG9sbCBDQ0lQUiAgICAgICAgQ0xLNDhTRUwgICAgICBMTF9SQ0NfU2V0Q0xLNDhDbG9ja1NvdXJjZQogICAqIEBwYXJhbSAgQ0xLNDh4U291cmNlIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0NMSzQ4X0NMS1NPVVJDRV9IU0k0OAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19DTEs0OF9DTEtTT1VSQ0VfUExMU0FJMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19DTEs0OF9DTEtTT1VSQ0VfUExMU0FJMSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQ0xLNDhfQ0xLU09VUkNFX1BMTAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19DTEs0OF9DTEtTT1VSQ0VfTVNJCisgICogQG5vdGUgICAoKikgVmFsdWUgbm90IGRlZmluZWQgZm9yIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SQ0NfU2V0Q0xLNDhDbG9ja1NvdXJjZSh1aW50MzJfdCBDTEs0OHhTb3VyY2UpCkBAIC0yNTkwLDYgKzI2NzcsNyBAQAogICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIsIFJDQ19DQ0lQUl9DTEs0OFNFTCwgQ0xLNDh4U291cmNlKTsKIH0KIAorI2lmIGRlZmluZWQoVVNCKQogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgVVNCIGNsb2NrIHNvdXJjZQogICAqIEBybXRvbGwgQ0NJUFIgICAgICAgIENMSzQ4U0VMICAgICAgTExfUkNDX1NldFVTQkNsb2NrU291cmNlCkBAIC0yNjA0LDYgKzI2OTIsNyBAQAogewogICBMTF9SQ0NfU2V0Q0xLNDhDbG9ja1NvdXJjZShVU0J4U291cmNlKTsKIH0KKyNlbmRpZgogCiAvKioKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSBSTkcgY2xvY2sgc291cmNlCkBAIC0yNjE3LDEwICsyNzA2LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1JOR19DTEtTT1VSQ0VfTFNFCiAgICogQHBhcmFtICBDTEs0OHhTb3VyY2UgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQ0xLNDhfQ0xLU09VUkNFX0hTSTQ4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0NMSzQ4X0NMS1NPVVJDRV9QTExTQUkxCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0NMSzQ4X0NMS1NPVVJDRV9QTExTQUkxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19DTEs0OF9DTEtTT1VSQ0VfUExMCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0NMSzQ4X0NMS1NPVVJDRV9NU0kKLQorICAqIEBub3RlICAgKCopIFZhbHVlIG5vdCBkZWZpbmVkIGZvciBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUkNDX0NvbmZpZ1JOR0Nsb2NrU291cmNlKHVpbnQzMl90IFJOR3hTb3VyY2UsIHVpbnQzMl90IENMSzQ4eFNvdXJjZSkKQEAgLTI2MzgsOSArMjcyNywxMSBAQAogICAqIEBybXRvbGwgQ0NJUFIgICAgICAgIEFEQ1NFTCAgICAgICAgTExfUkNDX1NldEFEQ0Nsb2NrU291cmNlCiAgICogQHBhcmFtICBBREN4U291cmNlIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0FEQ19DTEtTT1VSQ0VfTk9ORQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19BRENfQ0xLU09VUkNFX1BMTFNBSTEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQURDX0NMS1NPVVJDRV9QTExTQUkxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19BRENfQ0xLU09VUkNFX1BMTAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19BRENfQ0xLU09VUkNFX1NZU0NMSworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19BRENfQ0xLU09VUkNFX0hTSSAoKikKKyAgKiBAbm90ZSAgICgqKSBWYWx1ZSBub3QgZGVmaW5lZCBmb3IgYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JDQ19TZXRBRENDbG9ja1NvdXJjZSh1aW50MzJfdCBBREN4U291cmNlKQpAQCAtMjY0OCw2ICsyNzM5LDIzIEBACiAgIE1PRElGWV9SRUcoUkNDLT5DQ0lQUiwgUkNDX0NDSVBSX0FEQ1NFTCwgQURDeFNvdXJjZSk7CiB9CiAKKyNpZiBkZWZpbmVkKFNQSV9JMlNfU1VQUE9SVCkKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIEkyU3ggY2xvY2sgc291cmNlCisgICogQHJtdG9sbCBDQ0lQUiAgICAgICAgSTJTU0VMICAgICAgIExMX1JDQ19TZXRJMlNDbG9ja1NvdXJjZQorICAqIEBwYXJhbSAgSTJTeFNvdXJjZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19JMlNfQ0xLU09VUkNFX05PTkUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9QTEwKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9IU0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9QSU4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX1JDQ19TZXRJMlNDbG9ja1NvdXJjZSh1aW50MzJfdCBJMlN4U291cmNlKQoreworICBNT0RJRllfUkVHKFJDQy0+Q0NJUFIsIFJDQ19DQ0lQUl9JMlNTRUwsIEkyU3hTb3VyY2UpOworfQorI2VuZGlmCisKIC8qKgogICAqIEBicmllZiAgR2V0IFVTQVJUeCBjbG9jayBzb3VyY2UKICAgKiBAcm10b2xsIENDSVBSICAgICAgICBVU0FSVDFTRUwgICAgIExMX1JDQ19HZXRVU0FSVENsb2NrU291cmNlCkBAIC0yNzYxLDE2ICsyODY5LDE4IEBACiAgICogQHBhcmFtICBDTEs0OHggVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQ0xLNDhfQ0xLU09VUkNFCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19VU0JfQ0xLU09VUkNFX0hTSTQ4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1VTQl9DTEtTT1VSQ0VfUExMU0FJMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19VU0JfQ0xLU09VUkNFX1BMTAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19VU0JfQ0xLU09VUkNFX01TSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19DTEs0OF9DTEtTT1VSQ0VfSFNJNDgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQ0xLNDhfQ0xLU09VUkNFX1BMTFNBSTEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0NMSzQ4X0NMS1NPVVJDRV9QTEwKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQ0xLNDhfQ0xLU09VUkNFX01TSQorICAqIEBub3RlICAgKCopIFZhbHVlIG5vdCBkZWZpbmVkIGZvciBhbGwgZGV2aWNlcwogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JDQ19HZXRDTEs0OENsb2NrU291cmNlKHVpbnQzMl90IENMSzQ4eCkKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoUkNDLT5DQ0lQUiwgQ0xLNDh4KSk7CiB9CiAKKyNpZiBkZWZpbmVkKFVTQikKIC8qKgogICAqIEBicmllZiAgR2V0IFVTQnggY2xvY2sgc291cmNlCiAgICogQHJtdG9sbCBDQ0lQUiAgICAgICAgQ0xLNDhTRUwgICAgICBMTF9SQ0NfR2V0VVNCQ2xvY2tTb3VyY2UKQEAgLTI3ODYsNiArMjg5Niw3IEBACiB7CiAgIHJldHVybiBMTF9SQ0NfR2V0Q0xLNDhDbG9ja1NvdXJjZShVU0J4KTsKIH0KKyNlbmRpZgogCiAvKioKICAgKiBAYnJpZWYgIEdldCBBREN4IGNsb2NrIHNvdXJjZQpAQCAtMjc5NCwxNSArMjkwNSwzNCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19BRENfQ0xLU09VUkNFCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19BRENfQ0xLU09VUkNFX05PTkUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQURDX0NMS1NPVVJDRV9QTExTQUkxCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0FEQ19DTEtTT1VSQ0VfUExMU0FJMSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQURDX0NMS1NPVVJDRV9QTEwKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQURDX0NMS1NPVVJDRV9TWVNDTEsKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQURDX0NMS1NPVVJDRV9IU0kgKCopCisgICogQG5vdGUgICAoKikgVmFsdWUgbm90IGRlZmluZWQgZm9yIGFsbCBkZXZpY2VzCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUkNDX0dldEFEQ0Nsb2NrU291cmNlKHVpbnQzMl90IEFEQ3gpCiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFJDQy0+Q0NJUFIsIEFEQ3gpKTsKIH0KIAorI2lmIGRlZmluZWQoU1BJX0kyU19TVVBQT1JUKQorLyoqCisgICogQGJyaWVmICBHZXQgSTJTeCBjbG9jayBzb3VyY2UKKyAgKiBAcm10b2xsIENDSVBSICAgICAgICBJMlNTRUwgICAgICAgIExMX1JDQ19HZXRJMlNDbG9ja1NvdXJjZQorICAqIEBwYXJhbSAgSTJTeCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19JMlNfQ0xLU09VUkNFCisgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19JMlNfQ0xLU09VUkNFX05PTkUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9QTEwKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9IU0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9QSU4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SQ0NfR2V0STJTQ2xvY2tTb3VyY2UodWludDMyX3QgSTJTeCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoUkNDLT5DQ0lQUiwgSTJTeCkpOworfQorI2VuZGlmCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDQwMyw3ICs0NTMzLDkgQEAKICAgKiBAewogICAqLwogdm9pZCAgICAgICAgTExfUkNDX0dldFN5c3RlbUNsb2Nrc0ZyZXEoTExfUkNDX0Nsb2Nrc1R5cGVEZWYgKlJDQ19DbG9ja3MpOworI2lmIGRlZmluZWQoUkNDX1NNUFNfU1VQUE9SVCkKIHVpbnQzMl90ICAgIExMX1JDQ19HZXRTTVBTQ2xvY2tGcmVxKHZvaWQpOworI2VuZGlmCiB1aW50MzJfdCAgICBMTF9SQ0NfR2V0VVNBUlRDbG9ja0ZyZXEodWludDMyX3QgVVNBUlR4U291cmNlKTsKIHVpbnQzMl90ICAgIExMX1JDQ19HZXRJMkNDbG9ja0ZyZXEodWludDMyX3QgSTJDeFNvdXJjZSk7CiAjaWYgZGVmaW5lZChMUFVBUlQxKQpAQCAtNDQxNSwxMCArNDU0NywxNSBAQAogI2VuZGlmCiB1aW50MzJfdCAgICBMTF9SQ0NfR2V0Q0xLNDhDbG9ja0ZyZXEodWludDMyX3QgQ0xLNDh4U291cmNlKTsKIHVpbnQzMl90ICAgIExMX1JDQ19HZXRSTkdDbG9ja0ZyZXEodWludDMyX3QgUk5HeFNvdXJjZSk7CisjaWYgZGVmaW5lZChVU0IpCiB1aW50MzJfdCAgICBMTF9SQ0NfR2V0VVNCQ2xvY2tGcmVxKHVpbnQzMl90IFVTQnhTb3VyY2UpOworI2VuZGlmCiB1aW50MzJfdCAgICBMTF9SQ0NfR2V0QURDQ2xvY2tGcmVxKHVpbnQzMl90IEFEQ3hTb3VyY2UpOwogdWludDMyX3QgICAgTExfUkNDX0dldFJUQ0Nsb2NrRnJlcSh2b2lkKTsKIHVpbnQzMl90ICAgIExMX1JDQ19HZXRSRldLUENsb2NrRnJlcSh2b2lkKTsKKyNpZiBkZWZpbmVkKFNQSV9JMlNfU1VQUE9SVCkKK3VpbnQzMl90ICAgIExMX1JDQ19HZXRJMlNDbG9ja0ZyZXEodWludDMyX3QgSTJTeFNvdXJjZSk7CisjZW5kaWYKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJ3Ynh4X2xsX3NwaS5oIGIvSW5jL3N0bTMyd2J4eF9sbF9zcGkuaAppbmRleCA2NWRkYjBmLi45MjMwZmY3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJ3Ynh4X2xsX3NwaS5oCisrKyBiL0luYy9zdG0zMndieHhfbGxfc3BpLmgKQEAgLTE0MDUsNiArMTQwNSw4NzIgQEAKICAgKiBAfQogICAqLwogCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisvKiogQGRlZmdyb3VwIEkyU19MTCBJMlMKKyAgKiBAeworICAqLworCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChVU0VfRlVMTF9MTF9EUklWRVIpCisvKiogQGRlZmdyb3VwIEkyU19MTF9FU19JTklUIEkyUyBFeHBvcnRlZCBJbml0IHN0cnVjdHVyZQorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgSTJTIEluaXQgc3RydWN0dXJlIGRlZmluaXRpb24KKyAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdWludDMyX3QgTW9kZTsgICAgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBJMlMgb3BlcmF0aW5nIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX0xMX0VDX01PREUKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0kyU19TZXRUcmFuc2Zlck1vZGUoKS4qLworCisgIHVpbnQzMl90IFN0YW5kYXJkOyAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgc3RhbmRhcmQgdXNlZCBmb3IgdGhlIEkyUyBjb21tdW5pY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyU19MTF9FQ19TVEFOREFSRAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfSTJTX1NldFN0YW5kYXJkKCkuKi8KKworCisgIHVpbnQzMl90IERhdGFGb3JtYXQ7ICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgZGF0YSBmb3JtYXQgZm9yIHRoZSBJMlMgY29tbXVuaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMlNfTExfRUNfREFUQV9GT1JNQVQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0kyU19TZXREYXRhRm9ybWF0KCkuKi8KKworCisgIHVpbnQzMl90IE1DTEtPdXRwdXQ7ICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBJMlMgTUNMSyBvdXRwdXQgaXMgZW5hYmxlZCBvciBub3QuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX0xMX0VDX01DTEtfT1VUUFVUCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb25zIEByZWYgTExfSTJTX0VuYWJsZU1hc3RlckNsb2NrKCkgb3IgQHJlZiBMTF9JMlNfRGlzYWJsZU1hc3RlckNsb2NrLiovCisKKworICB1aW50MzJfdCBBdWRpb0ZyZXE7ICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZyZXF1ZW5jeSBzZWxlY3RlZCBmb3IgdGhlIEkyUyBjb21tdW5pY2F0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyU19MTF9FQ19BVURJT19GUkVRCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW8gRnJlcXVlbmN5IGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIFJlZmVyZW5jZSBtYW51YWwgZm9ybXVsYXMgdG8gY2FsY3VsYXRlIFByZXNjYWxlciBMaW5lYXIsIFBhcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdW5pdGFyeSBmdW5jdGlvbnMgQHJlZiBMTF9JMlNfU2V0UHJlc2NhbGVyTGluZWFyKCkgYW5kIEByZWYgTExfSTJTX1NldFByZXNjYWxlclBhcml0eSgpIHRvIHNldCBpdC4qLworCisKKyAgdWludDMyX3QgQ2xvY2tQb2xhcml0eTsgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBpZGxlIHN0YXRlIG9mIHRoZSBJMlMgY2xvY2suCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX0xMX0VDX1BPTEFSSVRZCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9JMlNfU2V0Q2xvY2tQb2xhcml0eSgpLiovCisKK30gTExfSTJTX0luaXRUeXBlRGVmOworCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qVVNFX0ZVTExfTExfRFJJVkVSKi8KKworLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgSTJTX0xMX0V4cG9ydGVkX0NvbnN0YW50cyBJMlMgRXhwb3J0ZWQgQ29uc3RhbnRzCisgICogQHsKKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfTExfRUNfR0VUX0ZMQUcgR2V0IEZsYWdzIERlZmluZXMKKyAgKiBAYnJpZWYgICAgRmxhZ3MgZGVmaW5lcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIExMX0kyU19SZWFkUmVnIGZ1bmN0aW9uCisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfSTJTX1NSX1JYTkUgICAgICAgICAgICAgICAgICAgICBMTF9TUElfU1JfUlhORSAgICAgICAgICAgIC8qITwgUnggYnVmZmVyIG5vdCBlbXB0eSBmbGFnICAgICAgICAgKi8KKyNkZWZpbmUgTExfSTJTX1NSX1RYRSAgICAgICAgICAgICAgICAgICAgICBMTF9TUElfU1JfVFhFICAgICAgICAgICAgIC8qITwgVHggYnVmZmVyIGVtcHR5IGZsYWcgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfSTJTX1NSX0JTWSAgICAgICAgICAgICAgICAgICAgICBMTF9TUElfU1JfQlNZICAgICAgICAgICAgIC8qITwgQnVzeSBmbGFnICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfSTJTX1NSX1VEUiAgICAgICAgICAgICAgICAgICAgICBTUElfU1JfVURSICAgICAgICAgICAgICAgIC8qITwgVW5kZXJydW4gZmxhZyAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfSTJTX1NSX09WUiAgICAgICAgICAgICAgICAgICAgICBMTF9TUElfU1JfT1ZSICAgICAgICAgICAgIC8qITwgT3ZlcnJ1biBmbGFnICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgTExfSTJTX1NSX0ZSRSAgICAgICAgICAgICAgICAgICAgICBMTF9TUElfU1JfRlJFICAgICAgICAgICAgIC8qITwgVEkgbW9kZSBmcmFtZSBmb3JtYXQgZXJyb3IgZmxhZyAgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgU1BJX0xMX0VDX0lUIElUIERlZmluZXMKKyAgKiBAYnJpZWYgICAgSVQgZGVmaW5lcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIExMX1NQSV9SZWFkUmVnIGFuZCAgTExfU1BJX1dyaXRlUmVnIGZ1bmN0aW9ucworICAqIEB7CisgICovCisjZGVmaW5lIExMX0kyU19DUjJfUlhORUlFICAgICAgICAgICAgICAgICAgTExfU1BJX0NSMl9SWE5FSUUgICAgICAgICAvKiE8IFJ4IGJ1ZmZlciBub3QgZW1wdHkgaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBMTF9JMlNfQ1IyX1RYRUlFICAgICAgICAgICAgICAgICAgIExMX1NQSV9DUjJfVFhFSUUgICAgICAgICAgLyohPCBUeCBidWZmZXIgZW1wdHkgaW50ZXJydXB0IGVuYWJsZSAgICAgKi8KKyNkZWZpbmUgTExfSTJTX0NSMl9FUlJJRSAgICAgICAgICAgICAgICAgICBMTF9TUElfQ1IyX0VSUklFICAgICAgICAgIC8qITwgRXJyb3IgaW50ZXJydXB0IGVuYWJsZSAgICAgICAgICAgICAgICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEkyU19MTF9FQ19EQVRBX0ZPUk1BVCBEYXRhIGZvcm1hdAorICAqIEB7CisgICovCisjZGVmaW5lIExMX0kyU19EQVRBRk9STUFUXzE2QiAgICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRGF0YSBsZW5ndGggMTYgYml0cywgQ2hhbm5lbCBsZW5naHQgMTZiaXQgKi8KKyNkZWZpbmUgTExfSTJTX0RBVEFGT1JNQVRfMTZCX0VYVEVOREVEICAgICAoU1BJX0kyU0NGR1JfQ0hMRU4pICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEYXRhIGxlbmd0aCAxNiBiaXRzLCBDaGFubmVsIGxlbmdodCAzMmJpdCAqLworI2RlZmluZSBMTF9JMlNfREFUQUZPUk1BVF8yNEIgICAgICAgICAgICAgIChTUElfSTJTQ0ZHUl9DSExFTiB8IFNQSV9JMlNDRkdSX0RBVExFTl8wKSAgICAvKiE8IERhdGEgbGVuZ3RoIDI0IGJpdHMsIENoYW5uZWwgbGVuZ2h0IDMyYml0ICovCisjZGVmaW5lIExMX0kyU19EQVRBRk9STUFUXzMyQiAgICAgICAgICAgICAgKFNQSV9JMlNDRkdSX0NITEVOIHwgU1BJX0kyU0NGR1JfREFUTEVOXzEpICAgIC8qITwgRGF0YSBsZW5ndGggMTYgYml0cywgQ2hhbm5lbCBsZW5naHQgMzJiaXQgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSTJTX0xMX0VDX1BPTEFSSVRZIENsb2NrIFBvbGFyaXR5CisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfSTJTX1BPTEFSSVRZX0xPVyAgICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgIC8qITwgQ2xvY2sgc3RlYWR5IHN0YXRlIGlzIGxvdyBsZXZlbCAgKi8KKyNkZWZpbmUgTExfSTJTX1BPTEFSSVRZX0hJR0ggICAgICAgICAgICAgICAoU1BJX0kyU0NGR1JfQ0tQT0wpICAgICAgIC8qITwgQ2xvY2sgc3RlYWR5IHN0YXRlIGlzIGhpZ2ggbGV2ZWwgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSTJTX0xMX0VDX1NUQU5EQVJEIEkycyBTdGFuZGFyZAorICAqIEB7CisgICovCisjZGVmaW5lIExMX0kyU19TVEFOREFSRF9QSElMSVBTICAgICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEkyUyBzdGFuZGFyZCBwaGlsaXBzICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIExMX0kyU19TVEFOREFSRF9NU0IgICAgICAgICAgICAgICAgKFNQSV9JMlNDRkdSX0kyU1NURF8wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1TQiBqdXN0aWZpZWQgc3RhbmRhcmQgKGxlZnQganVzdGlmaWVkKSAgICovCisjZGVmaW5lIExMX0kyU19TVEFOREFSRF9MU0IgICAgICAgICAgICAgICAgKFNQSV9JMlNDRkdSX0kyU1NURF8xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IExTQiBqdXN0aWZpZWQgc3RhbmRhcmQgKHJpZ2h0IGp1c3RpZmllZCkgICovCisjZGVmaW5lIExMX0kyU19TVEFOREFSRF9QQ01fU0hPUlQgICAgICAgICAgKFNQSV9JMlNDRkdSX0kyU1NURF8wIHwgU1BJX0kyU0NGR1JfSTJTU1REXzEpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFBDTSBzdGFuZGFyZCwgc2hvcnQgZnJhbWUgc3luY2hyb25pemF0aW9uICovCisjZGVmaW5lIExMX0kyU19TVEFOREFSRF9QQ01fTE9ORyAgICAgICAgICAgKFNQSV9JMlNDRkdSX0kyU1NURF8wIHwgU1BJX0kyU0NGR1JfSTJTU1REXzEgfCBTUElfSTJTQ0ZHUl9QQ01TWU5DKSAvKiE8IFBDTSBzdGFuZGFyZCwgbG9uZyBmcmFtZSBzeW5jaHJvbml6YXRpb24gICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEkyU19MTF9FQ19NT0RFIE9wZXJhdGlvbiBNb2RlCisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfSTJTX01PREVfU0xBVkVfVFggICAgICAgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTbGF2ZSBUeCBjb25maWd1cmF0aW9uICAqLworI2RlZmluZSBMTF9JMlNfTU9ERV9TTEFWRV9SWCAgICAgICAgICAgICAgIChTUElfSTJTQ0ZHUl9JMlNDRkdfMCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNsYXZlIFJ4IGNvbmZpZ3VyYXRpb24gICovCisjZGVmaW5lIExMX0kyU19NT0RFX01BU1RFUl9UWCAgICAgICAgICAgICAgKFNQSV9JMlNDRkdSX0kyU0NGR18xKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTWFzdGVyIFR4IGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgTExfSTJTX01PREVfTUFTVEVSX1JYICAgICAgICAgICAgICAoU1BJX0kyU0NGR1JfSTJTQ0ZHXzAgfCBTUElfSTJTQ0ZHUl9JMlNDRkdfMSkgLyohPCBNYXN0ZXIgUnggY29uZmlndXJhdGlvbiAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfTExfRUNfUFJFU0NBTEVSX0ZBQ1RPUiBQcmVzY2FsZXIgRmFjdG9yCisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfSTJTX1BSRVNDQUxFUl9QQVJJVFlfRVZFTiAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgIC8qITwgT2RkIGZhY3RvcjogUmVhbCBkaXZpZGVyIHZhbHVlIGlzID0gIEkyU0RJViAqIDIgICAgKi8KKyNkZWZpbmUgTExfSTJTX1BSRVNDQUxFUl9QQVJJVFlfT0REICAgICAgICAoU1BJX0kyU1BSX09ERCA+PiA4VSkgICAgIC8qITwgT2RkIGZhY3RvcjogUmVhbCBkaXZpZGVyIHZhbHVlIGlzID0gKEkyU0RJViAqIDIpKzEgKi8KKy8qKgorICAqIEB9CisgICovCisKKyNpZiBkZWZpbmVkKFVTRV9GVUxMX0xMX0RSSVZFUikKKworLyoqIEBkZWZncm91cCBJMlNfTExfRUNfTUNMS19PVVRQVVQgTUNMSyBPdXRwdXQKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9JMlNfTUNMS19PVVRQVVRfRElTQUJMRSAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgLyohPCBNYXN0ZXIgY2xvY2sgb3V0cHV0IGlzIGRpc2FibGVkICovCisjZGVmaW5lIExMX0kyU19NQ0xLX09VVFBVVF9FTkFCTEUgICAgICAgICAgKFNQSV9JMlNQUl9NQ0tPRSkgICAgICAgICAvKiE8IE1hc3RlciBjbG9jayBvdXRwdXQgaXMgZW5hYmxlZCAgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSTJTX0xMX0VDX0FVRElPX0ZSRVEgQXVkaW8gRnJlcXVlbmN5CisgICogQHsKKyAgKi8KKworI2RlZmluZSBMTF9JMlNfQVVESU9GUkVRXzE5MksgICAgICAgICAgICAgIDE5MjAwMFUgICAgICAgLyohPCBBdWRpbyBGcmVxdWVuY3kgY29uZmlndXJhdGlvbiAxOTIwMDAgSHogICAgICAgKi8KKyNkZWZpbmUgTExfSTJTX0FVRElPRlJFUV85NksgICAgICAgICAgICAgICA5NjAwMFUgICAgICAgIC8qITwgQXVkaW8gRnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24gIDk2MDAwIEh6ICAgICAgICovCisjZGVmaW5lIExMX0kyU19BVURJT0ZSRVFfNDhLICAgICAgICAgICAgICAgNDgwMDBVICAgICAgICAvKiE8IEF1ZGlvIEZyZXF1ZW5jeSBjb25maWd1cmF0aW9uICA0ODAwMCBIeiAgICAgICAqLworI2RlZmluZSBMTF9JMlNfQVVESU9GUkVRXzQ0SyAgICAgICAgICAgICAgIDQ0MTAwVSAgICAgICAgLyohPCBBdWRpbyBGcmVxdWVuY3kgY29uZmlndXJhdGlvbiAgNDQxMDAgSHogICAgICAgKi8KKyNkZWZpbmUgTExfSTJTX0FVRElPRlJFUV8zMksgICAgICAgICAgICAgICAzMjAwMFUgICAgICAgIC8qITwgQXVkaW8gRnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24gIDMyMDAwIEh6ICAgICAgICovCisjZGVmaW5lIExMX0kyU19BVURJT0ZSRVFfMjJLICAgICAgICAgICAgICAgMjIwNTBVICAgICAgICAvKiE8IEF1ZGlvIEZyZXF1ZW5jeSBjb25maWd1cmF0aW9uICAyMjA1MCBIeiAgICAgICAqLworI2RlZmluZSBMTF9JMlNfQVVESU9GUkVRXzE2SyAgICAgICAgICAgICAgIDE2MDAwVSAgICAgICAgLyohPCBBdWRpbyBGcmVxdWVuY3kgY29uZmlndXJhdGlvbiAgMTYwMDAgSHogICAgICAgKi8KKyNkZWZpbmUgTExfSTJTX0FVRElPRlJFUV8xMUsgICAgICAgICAgICAgICAxMTAyNVUgICAgICAgIC8qITwgQXVkaW8gRnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24gIDExMDI1IEh6ICAgICAgICovCisjZGVmaW5lIExMX0kyU19BVURJT0ZSRVFfOEsgICAgICAgICAgICAgICAgODAwMFUgICAgICAgICAvKiE8IEF1ZGlvIEZyZXF1ZW5jeSBjb25maWd1cmF0aW9uICAgODAwMCBIeiAgICAgICAqLworI2RlZmluZSBMTF9JMlNfQVVESU9GUkVRX0RFRkFVTFQgICAgICAgICAgIDJVICAgICAgICAgICAgLyohPCBBdWRpbyBGcmVxIG5vdCBzcGVjaWZpZWQuIFJlZ2lzdGVyIEkyU0RJViA9IDIgKi8KKy8qKgorICAqIEB9CisgICovCisjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIEkyU19MTF9FeHBvcnRlZF9NYWNyb3MgSTJTIEV4cG9ydGVkIE1hY3JvcworICAqIEB7CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSTJTX0xMX0VNX1dSSVRFX1JFQUQgQ29tbW9uIFdyaXRlIGFuZCByZWFkIHJlZ2lzdGVycyBNYWNyb3MKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIFdyaXRlIGEgdmFsdWUgaW4gSTJTIHJlZ2lzdGVyCisgICogQHBhcmFtICBfX0lOU1RBTkNFX18gSTJTIEluc3RhbmNlCisgICogQHBhcmFtICBfX1JFR19fIFJlZ2lzdGVyIHRvIGJlIHdyaXR0ZW4KKyAgKiBAcGFyYW0gIF9fVkFMVUVfXyBWYWx1ZSB0byBiZSB3cml0dGVuIGluIHRoZSByZWdpc3RlcgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBMTF9JMlNfV3JpdGVSZWcoX19JTlNUQU5DRV9fLCBfX1JFR19fLCBfX1ZBTFVFX18pIFdSSVRFX1JFRyhfX0lOU1RBTkNFX18tPl9fUkVHX18sIChfX1ZBTFVFX18pKQorCisvKioKKyAgKiBAYnJpZWYgIFJlYWQgYSB2YWx1ZSBpbiBJMlMgcmVnaXN0ZXIKKyAgKiBAcGFyYW0gIF9fSU5TVEFOQ0VfXyBJMlMgSW5zdGFuY2UKKyAgKiBAcGFyYW0gIF9fUkVHX18gUmVnaXN0ZXIgdG8gYmUgcmVhZAorICAqIEByZXR2YWwgUmVnaXN0ZXIgdmFsdWUKKyAgKi8KKyNkZWZpbmUgTExfSTJTX1JlYWRSZWcoX19JTlNUQU5DRV9fLCBfX1JFR19fKSBSRUFEX1JFRyhfX0lOU1RBTkNFX18tPl9fUkVHX18pCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisKKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBAZGVmZ3JvdXAgSTJTX0xMX0V4cG9ydGVkX0Z1bmN0aW9ucyBJMlMgRXhwb3J0ZWQgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfTExfRUZfQ29uZmlndXJhdGlvbiBDb25maWd1cmF0aW9uCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBTZWxlY3QgSTJTIG1vZGUgYW5kIEVuYWJsZSBJMlMgcGVyaXBoZXJhbAorICAqIEBybXRvbGwgSTJTQ0ZHUiAgICAgIEkyU01PRCAgICAgICAgTExfSTJTX0VuYWJsZVxuCisgICogICAgICAgICBJMlNDRkdSICAgICAgSTJTRSAgICAgICAgICBMTF9JMlNfRW5hYmxlCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSTJTX0VuYWJsZShTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgU0VUX0JJVChTUEl4LT5JMlNDRkdSLCBTUElfSTJTQ0ZHUl9JMlNNT0QgfCBTUElfSTJTQ0ZHUl9JMlNFKTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIEkyUyBwZXJpcGhlcmFsCisgICogQHJtdG9sbCBJMlNDRkdSICAgICAgSTJTRSAgICAgICAgICBMTF9JMlNfRGlzYWJsZQorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19EaXNhYmxlKFNQSV9UeXBlRGVmICpTUEl4KQoreworICBDTEVBUl9CSVQoU1BJeC0+STJTQ0ZHUiwgU1BJX0kyU0NGR1JfSTJTTU9EIHwgU1BJX0kyU0NGR1JfSTJTRSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgaWYgSTJTIHBlcmlwaGVyYWwgaXMgZW5hYmxlZAorICAqIEBybXRvbGwgSTJTQ0ZHUiAgICAgIEkyU0UgICAgICAgICAgTExfSTJTX0lzRW5hYmxlZAorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMlNfSXNFbmFibGVkKFNQSV9UeXBlRGVmICpTUEl4KQoreworICByZXR1cm4gKChSRUFEX0JJVChTUEl4LT5JMlNDRkdSLCBTUElfSTJTQ0ZHUl9JMlNFKSA9PSAoU1BJX0kyU0NGR1JfSTJTRSkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgSTJTIGRhdGEgZnJhbWUgbGVuZ3RoCisgICogQHJtdG9sbCBJMlNDRkdSICAgICAgREFUTEVOICAgICAgICBMTF9JMlNfU2V0RGF0YUZvcm1hdFxuCisgICogICAgICAgICBJMlNDRkdSICAgICAgQ0hMRU4gICAgICAgICBMTF9JMlNfU2V0RGF0YUZvcm1hdAorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcGFyYW0gIERhdGFGb3JtYXQgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfREFUQUZPUk1BVF8xNkIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfREFUQUZPUk1BVF8xNkJfRVhURU5ERUQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfREFUQUZPUk1BVF8yNEIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfREFUQUZPUk1BVF8zMkIKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19TZXREYXRhRm9ybWF0KFNQSV9UeXBlRGVmICpTUEl4LCB1aW50MzJfdCBEYXRhRm9ybWF0KQoreworICBNT0RJRllfUkVHKFNQSXgtPkkyU0NGR1IsIFNQSV9JMlNDRkdSX0RBVExFTiB8IFNQSV9JMlNDRkdSX0NITEVOLCBEYXRhRm9ybWF0KTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgSTJTIGRhdGEgZnJhbWUgbGVuZ3RoCisgICogQHJtdG9sbCBJMlNDRkdSICAgICAgREFUTEVOICAgICAgICBMTF9JMlNfR2V0RGF0YUZvcm1hdFxuCisgICogICAgICAgICBJMlNDRkdSICAgICAgQ0hMRU4gICAgICAgICBMTF9JMlNfR2V0RGF0YUZvcm1hdAorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX0RBVEFGT1JNQVRfMTZCCisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX0RBVEFGT1JNQVRfMTZCX0VYVEVOREVECisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX0RBVEFGT1JNQVRfMjRCCisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX0RBVEFGT1JNQVRfMzJCCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0dldERhdGFGb3JtYXQoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFNQSXgtPkkyU0NGR1IsIFNQSV9JMlNDRkdSX0RBVExFTiB8IFNQSV9JMlNDRkdSX0NITEVOKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0IEkyUyBjbG9jayBwb2xhcml0eQorICAqIEBybXRvbGwgSTJTQ0ZHUiAgICAgIENLUE9MICAgICAgICAgTExfSTJTX1NldENsb2NrUG9sYXJpdHkKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHBhcmFtICBDbG9ja1BvbGFyaXR5IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX1BPTEFSSVRZX0xPVworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyU19QT0xBUklUWV9ISUdICisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JMlNfU2V0Q2xvY2tQb2xhcml0eShTUElfVHlwZURlZiAqU1BJeCwgdWludDMyX3QgQ2xvY2tQb2xhcml0eSkKK3sKKyAgU0VUX0JJVChTUEl4LT5JMlNDRkdSLCBDbG9ja1BvbGFyaXR5KTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgSTJTIGNsb2NrIHBvbGFyaXR5CisgICogQHJtdG9sbCBJMlNDRkdSICAgICAgQ0tQT0wgICAgICAgICBMTF9JMlNfR2V0Q2xvY2tQb2xhcml0eQorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX1BPTEFSSVRZX0xPVworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyU19QT0xBUklUWV9ISUdICisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0dldENsb2NrUG9sYXJpdHkoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFNQSXgtPkkyU0NGR1IsIFNQSV9JMlNDRkdSX0NLUE9MKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0IEkyUyBzdGFuZGFyZCBwcm90b2NvbAorICAqIEBybXRvbGwgSTJTQ0ZHUiAgICAgIEkyU1NURCAgICAgICAgTExfSTJTX1NldFN0YW5kYXJkXG4KKyAgKiAgICAgICAgIEkyU0NGR1IgICAgICBQQ01TWU5DICAgICAgIExMX0kyU19TZXRTdGFuZGFyZAorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcGFyYW0gIFN0YW5kYXJkIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX1NUQU5EQVJEX1BISUxJUFMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfU1RBTkRBUkRfTVNCCisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX1NUQU5EQVJEX0xTQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyU19TVEFOREFSRF9QQ01fU0hPUlQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfU1RBTkRBUkRfUENNX0xPTkcKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19TZXRTdGFuZGFyZChTUElfVHlwZURlZiAqU1BJeCwgdWludDMyX3QgU3RhbmRhcmQpCit7CisgIE1PRElGWV9SRUcoU1BJeC0+STJTQ0ZHUiwgU1BJX0kyU0NGR1JfSTJTU1REIHwgU1BJX0kyU0NGR1JfUENNU1lOQywgU3RhbmRhcmQpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBJMlMgc3RhbmRhcmQgcHJvdG9jb2wKKyAgKiBAcm10b2xsIEkyU0NGR1IgICAgICBJMlNTVEQgICAgICAgIExMX0kyU19HZXRTdGFuZGFyZFxuCisgICogICAgICAgICBJMlNDRkdSICAgICAgUENNU1lOQyAgICAgICBMTF9JMlNfR2V0U3RhbmRhcmQKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyU19TVEFOREFSRF9QSElMSVBTCisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX1NUQU5EQVJEX01TQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyU19TVEFOREFSRF9MU0IKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfU1RBTkRBUkRfUENNX1NIT1JUCisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX1NUQU5EQVJEX1BDTV9MT05HCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0dldFN0YW5kYXJkKFNQSV9UeXBlRGVmICpTUEl4KQoreworICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChTUEl4LT5JMlNDRkdSLCBTUElfSTJTQ0ZHUl9JMlNTVEQgfCBTUElfSTJTQ0ZHUl9QQ01TWU5DKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU2V0IEkyUyB0cmFuc2ZlciBtb2RlCisgICogQHJtdG9sbCBJMlNDRkdSICAgICAgSTJTQ0ZHICAgICAgICBMTF9JMlNfU2V0VHJhbnNmZXJNb2RlCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEBwYXJhbSAgTW9kZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyU19NT0RFX1NMQVZFX1RYCisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX01PREVfU0xBVkVfUlgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfTU9ERV9NQVNURVJfVFgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfTU9ERV9NQVNURVJfUlgKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19TZXRUcmFuc2Zlck1vZGUoU1BJX1R5cGVEZWYgKlNQSXgsIHVpbnQzMl90IE1vZGUpCit7CisgIE1PRElGWV9SRUcoU1BJeC0+STJTQ0ZHUiwgU1BJX0kyU0NGR1JfSTJTQ0ZHLCBNb2RlKTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgSTJTIHRyYW5zZmVyIG1vZGUKKyAgKiBAcm10b2xsIEkyU0NGR1IgICAgICBJMlNDRkcgICAgICAgIExMX0kyU19HZXRUcmFuc2Zlck1vZGUKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyU19NT0RFX1NMQVZFX1RYCisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX01PREVfU0xBVkVfUlgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfTU9ERV9NQVNURVJfVFgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfTU9ERV9NQVNURVJfUlgKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMlNfR2V0VHJhbnNmZXJNb2RlKFNQSV9UeXBlRGVmICpTUEl4KQoreworICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChTUEl4LT5JMlNDRkdSLCBTUElfSTJTQ0ZHUl9JMlNDRkcpKTsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgSTJTIGxpbmVhciBwcmVzY2FsZXIKKyAgKiBAcm10b2xsIEkyU1BSICAgICAgICBJMlNESVYgICAgICAgIExMX0kyU19TZXRQcmVzY2FsZXJMaW5lYXIKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHBhcmFtICBQcmVzY2FsZXJMaW5lYXIgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAyIGFuZCBNYXhfRGF0YT0weEZGCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JMlNfU2V0UHJlc2NhbGVyTGluZWFyKFNQSV9UeXBlRGVmICpTUEl4LCB1aW50OF90IFByZXNjYWxlckxpbmVhcikKK3sKKyAgTU9ESUZZX1JFRyhTUEl4LT5JMlNQUiwgU1BJX0kyU1BSX0kyU0RJViwgUHJlc2NhbGVyTGluZWFyKTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgSTJTIGxpbmVhciBwcmVzY2FsZXIKKyAgKiBAcm10b2xsIEkyU1BSICAgICAgICBJMlNESVYgICAgICAgIExMX0kyU19HZXRQcmVzY2FsZXJMaW5lYXIKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBQcmVzY2FsZXJMaW5lYXIgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAyIGFuZCBNYXhfRGF0YT0weEZGCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0dldFByZXNjYWxlckxpbmVhcihTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoU1BJeC0+STJTUFIsIFNQSV9JMlNQUl9JMlNESVYpKTsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgSTJTIHBhcml0eSBwcmVzY2FsZXIKKyAgKiBAcm10b2xsIEkyU1BSICAgICAgICBPREQgICAgICAgICAgIExMX0kyU19TZXRQcmVzY2FsZXJQYXJpdHkKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHBhcmFtICBQcmVzY2FsZXJQYXJpdHkgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfUFJFU0NBTEVSX1BBUklUWV9FVkVOCisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX1BSRVNDQUxFUl9QQVJJVFlfT0RECisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JMlNfU2V0UHJlc2NhbGVyUGFyaXR5KFNQSV9UeXBlRGVmICpTUEl4LCB1aW50MzJfdCBQcmVzY2FsZXJQYXJpdHkpCit7CisgIE1PRElGWV9SRUcoU1BJeC0+STJTUFIsIFNQSV9JMlNQUl9PREQsIFByZXNjYWxlclBhcml0eSA8PCA4VSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IEkyUyBwYXJpdHkgcHJlc2NhbGVyCisgICogQHJtdG9sbCBJMlNQUiAgICAgICAgT0REICAgICAgICAgICBMTF9JMlNfR2V0UHJlc2NhbGVyUGFyaXR5CisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9JMlNfUFJFU0NBTEVSX1BBUklUWV9FVkVOCisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX1BSRVNDQUxFUl9QQVJJVFlfT0RECisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0dldFByZXNjYWxlclBhcml0eShTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoU1BJeC0+STJTUFIsIFNQSV9JMlNQUl9PREQpID4+IDhVKTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgdGhlIG1hc3RlciBjbG9jayBvdXB1dCAoUGluIE1DSykKKyAgKiBAcm10b2xsIEkyU1BSICAgICAgICBNQ0tPRSAgICAgICAgIExMX0kyU19FbmFibGVNYXN0ZXJDbG9jaworICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19FbmFibGVNYXN0ZXJDbG9jayhTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgU0VUX0JJVChTUEl4LT5JMlNQUiwgU1BJX0kyU1BSX01DS09FKTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIHRoZSBtYXN0ZXIgY2xvY2sgb3VwdXQgKFBpbiBNQ0spCisgICogQHJtdG9sbCBJMlNQUiAgICAgICAgTUNLT0UgICAgICAgICBMTF9JMlNfRGlzYWJsZU1hc3RlckNsb2NrCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSTJTX0Rpc2FibGVNYXN0ZXJDbG9jayhTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgQ0xFQVJfQklUKFNQSXgtPkkyU1BSLCBTUElfSTJTUFJfTUNLT0UpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBtYXN0ZXIgY2xvY2sgb3VwdXQgKFBpbiBNQ0spIGlzIGVuYWJsZWQKKyAgKiBAcm10b2xsIEkyU1BSICAgICAgICBNQ0tPRSAgICAgICAgIExMX0kyU19Jc0VuYWJsZWRNYXN0ZXJDbG9jaworICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMlNfSXNFbmFibGVkTWFzdGVyQ2xvY2soU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiAoKFJFQURfQklUKFNQSXgtPkkyU1BSLCBTUElfSTJTUFJfTUNLT0UpID09IChTUElfSTJTUFJfTUNLT0UpKSA/IDFVTCA6IDBVTCk7Cit9CisKKyNpZiBkZWZpbmVkKFNQSV9JMlNDRkdSX0FTVFJURU4pCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBhc3luY2hyb25vdXMgc3RhcnQKKyAgKiBAcm10b2xsIEkyU0NGR1IgICAgICBBU1RSVEVOICAgICAgIExMX0kyU19FbmFibGVBc3luY1N0YXJ0CisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSTJTX0VuYWJsZUFzeW5jU3RhcnQoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIFNFVF9CSVQoU1BJeC0+STJTQ0ZHUiwgU1BJX0kyU0NGR1JfQVNUUlRFTik7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSAgYXN5bmNocm9ub3VzIHN0YXJ0CisgICogQHJtdG9sbCBJMlNDRkdSICAgICAgQVNUUlRFTiAgICAgICBMTF9JMlNfRGlzYWJsZUFzeW5jU3RhcnQKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JMlNfRGlzYWJsZUFzeW5jU3RhcnQoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIENMRUFSX0JJVChTUEl4LT5JMlNDRkdSLCBTUElfSTJTQ0ZHUl9BU1RSVEVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBpZiBhc3luY2hyb25vdXMgc3RhcnQgaXMgZW5hYmxlZAorICAqIEBybXRvbGwgSTJTQ0ZHUiAgICAgIEFTVFJURU4gICAgICAgTExfSTJTX0lzRW5hYmxlZEFzeW5jU3RhcnQKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0lzRW5hYmxlZEFzeW5jU3RhcnQoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiAoKFJFQURfQklUKFNQSXgtPkkyU0NGR1IsIFNQSV9JMlNDRkdSX0FTVFJURU4pID09IChTUElfSTJTQ0ZHUl9BU1RSVEVOKSkgPyAxVUwgOiAwVUwpOworfQorI2VuZGlmIC8qIFNQSV9JMlNDRkdSX0FTVFJURU4gKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfTExfRUZfRkxBRyBGTEFHIE1hbmFnZW1lbnQKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIGlmIFJ4IGJ1ZmZlciBpcyBub3QgZW1wdHkKKyAgKiBAcm10b2xsIFNSICAgICAgICAgICBSWE5FICAgICAgICAgIExMX0kyU19Jc0FjdGl2ZUZsYWdfUlhORQorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMlNfSXNBY3RpdmVGbGFnX1JYTkUoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiBMTF9TUElfSXNBY3RpdmVGbGFnX1JYTkUoU1BJeCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgaWYgVHggYnVmZmVyIGlzIGVtcHR5CisgICogQHJtdG9sbCBTUiAgICAgICAgICAgVFhFICAgICAgICAgICBMTF9JMlNfSXNBY3RpdmVGbGFnX1RYRQorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMlNfSXNBY3RpdmVGbGFnX1RYRShTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgcmV0dXJuIExMX1NQSV9Jc0FjdGl2ZUZsYWdfVFhFKFNQSXgpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBidXN5IGZsYWcKKyAgKiBAcm10b2xsIFNSICAgICAgICAgICBCU1kgICAgICAgICAgIExMX0kyU19Jc0FjdGl2ZUZsYWdfQlNZCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyU19Jc0FjdGl2ZUZsYWdfQlNZKFNQSV9UeXBlRGVmICpTUEl4KQoreworICByZXR1cm4gTExfU1BJX0lzQWN0aXZlRmxhZ19CU1koU1BJeCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IG92ZXJydW4gZXJyb3IgZmxhZworICAqIEBybXRvbGwgU1IgICAgICAgICAgIE9WUiAgICAgICAgICAgTExfSTJTX0lzQWN0aXZlRmxhZ19PVlIKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0lzQWN0aXZlRmxhZ19PVlIoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiBMTF9TUElfSXNBY3RpdmVGbGFnX09WUihTUEl4KTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgdW5kZXJydW4gZXJyb3IgZmxhZworICAqIEBybXRvbGwgU1IgICAgICAgICAgIFVEUiAgICAgICAgICAgTExfSTJTX0lzQWN0aXZlRmxhZ19VRFIKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0lzQWN0aXZlRmxhZ19VRFIoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiAoKFJFQURfQklUKFNQSXgtPlNSLCBTUElfU1JfVURSKSA9PSAoU1BJX1NSX1VEUikpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBHZXQgZnJhbWUgZm9ybWF0IGVycm9yIGZsYWcKKyAgKiBAcm10b2xsIFNSICAgICAgICAgICBGUkUgICAgICAgICAgIExMX0kyU19Jc0FjdGl2ZUZsYWdfRlJFCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyU19Jc0FjdGl2ZUZsYWdfRlJFKFNQSV9UeXBlRGVmICpTUEl4KQoreworICByZXR1cm4gTExfU1BJX0lzQWN0aXZlRmxhZ19GUkUoU1BJeCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IGNoYW5uZWwgc2lkZSBmbGFnLgorICAqIEBub3RlICAgMDogQ2hhbm5lbCBMZWZ0IGhhcyB0byBiZSB0cmFuc21pdHRlZCBvciBoYXMgYmVlbiByZWNlaXZlZFxuCisgICogICAgICAgICAxOiBDaGFubmVsIFJpZ2h0IGhhcyB0byBiZSB0cmFuc21pdHRlZCBvciBoYXMgYmVlbiByZWNlaXZlZFxuCisgICogICAgICAgICBJdCBoYXMgbm8gc2lnbmlmaWNhbmNlIGluIFBDTSBtb2RlLgorICAqIEBybXRvbGwgU1IgICAgICAgICAgIENIU0lERSAgICAgICAgTExfSTJTX0lzQWN0aXZlRmxhZ19DSFNJREUKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0lzQWN0aXZlRmxhZ19DSFNJREUoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiAoKFJFQURfQklUKFNQSXgtPlNSLCBTUElfU1JfQ0hTSURFKSA9PSAoU1BJX1NSX0NIU0lERSkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBDbGVhciBvdmVycnVuIGVycm9yIGZsYWcKKyAgKiBAcm10b2xsIFNSICAgICAgICAgICBPVlIgICAgICAgICAgIExMX0kyU19DbGVhckZsYWdfT1ZSCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSTJTX0NsZWFyRmxhZ19PVlIoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIExMX1NQSV9DbGVhckZsYWdfT1ZSKFNQSXgpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIHVuZGVycnVuIGVycm9yIGZsYWcKKyAgKiBAcm10b2xsIFNSICAgICAgICAgICBVRFIgICAgICAgICAgIExMX0kyU19DbGVhckZsYWdfVURSCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSTJTX0NsZWFyRmxhZ19VRFIoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIF9fSU8gdWludDMyX3QgdG1wcmVnOworICB0bXByZWcgPSBTUEl4LT5TUjsKKyAgKHZvaWQpdG1wcmVnOworfQorCisvKioKKyAgKiBAYnJpZWYgIENsZWFyIGZyYW1lIGZvcm1hdCBlcnJvciBmbGFnCisgICogQHJtdG9sbCBTUiAgICAgICAgICAgRlJFICAgICAgICAgICBMTF9JMlNfQ2xlYXJGbGFnX0ZSRQorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19DbGVhckZsYWdfRlJFKFNQSV9UeXBlRGVmICpTUEl4KQoreworICBMTF9TUElfQ2xlYXJGbGFnX0ZSRShTUEl4KTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfTExfRUZfSVQgSW50ZXJydXB0IE1hbmFnZW1lbnQKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBlcnJvciBJVAorICAqIEBub3RlICAgVGhpcyBiaXQgY29udHJvbHMgdGhlIGdlbmVyYXRpb24gb2YgYW4gaW50ZXJydXB0IHdoZW4gYW4gZXJyb3IgY29uZGl0aW9uIG9jY3VycyAoT1ZSLCBVRFIgYW5kIEZSRSBpbiBJMlMgbW9kZSkuCisgICogQHJtdG9sbCBDUjIgICAgICAgICAgRVJSSUUgICAgICAgICBMTF9JMlNfRW5hYmxlSVRfRVJSCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSTJTX0VuYWJsZUlUX0VSUihTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgTExfU1BJX0VuYWJsZUlUX0VSUihTUEl4KTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgUnggYnVmZmVyIG5vdCBlbXB0eSBJVAorICAqIEBybXRvbGwgQ1IyICAgICAgICAgIFJYTkVJRSAgICAgICAgTExfSTJTX0VuYWJsZUlUX1JYTkUKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JMlNfRW5hYmxlSVRfUlhORShTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgTExfU1BJX0VuYWJsZUlUX1JYTkUoU1BJeCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIFR4IGJ1ZmZlciBlbXB0eSBJVAorICAqIEBybXRvbGwgQ1IyICAgICAgICAgIFRYRUlFICAgICAgICAgTExfSTJTX0VuYWJsZUlUX1RYRQorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19FbmFibGVJVF9UWEUoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIExMX1NQSV9FbmFibGVJVF9UWEUoU1BJeCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBlcnJvciBJVAorICAqIEBub3RlICAgVGhpcyBiaXQgY29udHJvbHMgdGhlIGdlbmVyYXRpb24gb2YgYW4gaW50ZXJydXB0IHdoZW4gYW4gZXJyb3IgY29uZGl0aW9uIG9jY3VycyAoT1ZSLCBVRFIgYW5kIEZSRSBpbiBJMlMgbW9kZSkuCisgICogQHJtdG9sbCBDUjIgICAgICAgICAgRVJSSUUgICAgICAgICBMTF9JMlNfRGlzYWJsZUlUX0VSUgorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19EaXNhYmxlSVRfRVJSKFNQSV9UeXBlRGVmICpTUEl4KQoreworICBMTF9TUElfRGlzYWJsZUlUX0VSUihTUEl4KTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIFJ4IGJ1ZmZlciBub3QgZW1wdHkgSVQKKyAgKiBAcm10b2xsIENSMiAgICAgICAgICBSWE5FSUUgICAgICAgIExMX0kyU19EaXNhYmxlSVRfUlhORQorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19EaXNhYmxlSVRfUlhORShTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgTExfU1BJX0Rpc2FibGVJVF9SWE5FKFNQSXgpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgVHggYnVmZmVyIGVtcHR5IElUCisgICogQHJtdG9sbCBDUjIgICAgICAgICAgVFhFSUUgICAgICAgICBMTF9JMlNfRGlzYWJsZUlUX1RYRQorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19EaXNhYmxlSVRfVFhFKFNQSV9UeXBlRGVmICpTUEl4KQoreworICBMTF9TUElfRGlzYWJsZUlUX1RYRShTUEl4KTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBpZiBFUlIgSVQgaXMgZW5hYmxlZAorICAqIEBybXRvbGwgQ1IyICAgICAgICAgIEVSUklFICAgICAgICAgTExfSTJTX0lzRW5hYmxlZElUX0VSUgorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMlNfSXNFbmFibGVkSVRfRVJSKFNQSV9UeXBlRGVmICpTUEl4KQoreworICByZXR1cm4gTExfU1BJX0lzRW5hYmxlZElUX0VSUihTUEl4KTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBpZiBSWE5FIElUIGlzIGVuYWJsZWQKKyAgKiBAcm10b2xsIENSMiAgICAgICAgICBSWE5FSUUgICAgICAgIExMX0kyU19Jc0VuYWJsZWRJVF9SWE5FCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyU19Jc0VuYWJsZWRJVF9SWE5FKFNQSV9UeXBlRGVmICpTUEl4KQoreworICByZXR1cm4gTExfU1BJX0lzRW5hYmxlZElUX1JYTkUoU1BJeCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgaWYgVFhFIElUIGlzIGVuYWJsZWQKKyAgKiBAcm10b2xsIENSMiAgICAgICAgICBUWEVJRSAgICAgICAgIExMX0kyU19Jc0VuYWJsZWRJVF9UWEUKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJTX0lzRW5hYmxlZElUX1RYRShTUElfVHlwZURlZiAqU1BJeCkKK3sKKyAgcmV0dXJuIExMX1NQSV9Jc0VuYWJsZWRJVF9UWEUoU1BJeCk7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgSTJTX0xMX0VGX0RNQSBETUEgTWFuYWdlbWVudAorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIERNQSBSeAorICAqIEBybXRvbGwgQ1IyICAgICAgICAgIFJYRE1BRU4gICAgICAgTExfSTJTX0VuYWJsZURNQVJlcV9SWAorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19FbmFibGVETUFSZXFfUlgoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIExMX1NQSV9FbmFibGVETUFSZXFfUlgoU1BJeCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBETUEgUngKKyAgKiBAcm10b2xsIENSMiAgICAgICAgICBSWERNQUVOICAgICAgIExMX0kyU19EaXNhYmxlRE1BUmVxX1JYCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSTJTX0Rpc2FibGVETUFSZXFfUlgoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIExMX1NQSV9EaXNhYmxlRE1BUmVxX1JYKFNQSXgpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIGlmIERNQSBSeCBpcyBlbmFibGVkCisgICogQHJtdG9sbCBDUjIgICAgICAgICAgUlhETUFFTiAgICAgICBMTF9JMlNfSXNFbmFibGVkRE1BUmVxX1JYCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0kyU19Jc0VuYWJsZWRETUFSZXFfUlgoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiBMTF9TUElfSXNFbmFibGVkRE1BUmVxX1JYKFNQSXgpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBETUEgVHgKKyAgKiBAcm10b2xsIENSMiAgICAgICAgICBUWERNQUVOICAgICAgIExMX0kyU19FbmFibGVETUFSZXFfVFgKKyAgKiBAcGFyYW0gIFNQSXggU1BJIEluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JMlNfRW5hYmxlRE1BUmVxX1RYKFNQSV9UeXBlRGVmICpTUEl4KQoreworICBMTF9TUElfRW5hYmxlRE1BUmVxX1RYKFNQSXgpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgRE1BIFR4CisgICogQHJtdG9sbCBDUjIgICAgICAgICAgVFhETUFFTiAgICAgICBMTF9JMlNfRGlzYWJsZURNQVJlcV9UWAorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0kyU19EaXNhYmxlRE1BUmVxX1RYKFNQSV9UeXBlRGVmICpTUEl4KQoreworICBMTF9TUElfRGlzYWJsZURNQVJlcV9UWChTUEl4KTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBpZiBETUEgVHggaXMgZW5hYmxlZAorICAqIEBybXRvbGwgQ1IyICAgICAgICAgIFRYRE1BRU4gICAgICAgTExfSTJTX0lzRW5hYmxlZERNQVJlcV9UWAorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9JMlNfSXNFbmFibGVkRE1BUmVxX1RYKFNQSV9UeXBlRGVmICpTUEl4KQoreworICByZXR1cm4gTExfU1BJX0lzRW5hYmxlZERNQVJlcV9UWChTUEl4KTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfTExfRUZfREFUQSBEQVRBIE1hbmFnZW1lbnQKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIFJlYWQgMTYtQml0cyBpbiBkYXRhIHJlZ2lzdGVyCisgICogQHJtdG9sbCBEUiAgICAgICAgICAgRFIgICAgICAgICAgICBMTF9JMlNfUmVjZWl2ZURhdGExNgorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFJ4RGF0YSBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwMCBhbmQgTWF4X0RhdGE9MHhGRkZGCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgTExfSTJTX1JlY2VpdmVEYXRhMTYoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiBMTF9TUElfUmVjZWl2ZURhdGExNihTUEl4KTsKK30KKworLyoqCisgICogQGJyaWVmICBXcml0ZSAxNi1CaXRzIGluIGRhdGEgcmVnaXN0ZXIKKyAgKiBAcm10b2xsIERSICAgICAgICAgICBEUiAgICAgICAgICAgIExMX0kyU19UcmFuc21pdERhdGExNgorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcGFyYW0gIFR4RGF0YSBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwMCBhbmQgTWF4X0RhdGE9MHhGRkZGCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9JMlNfVHJhbnNtaXREYXRhMTYoU1BJX1R5cGVEZWYgKlNQSXgsIHVpbnQxNl90IFR4RGF0YSkKK3sKKyAgTExfU1BJX1RyYW5zbWl0RGF0YTE2KFNQSXgsIFR4RGF0YSk7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKyNpZiBkZWZpbmVkKFVTRV9GVUxMX0xMX0RSSVZFUikKKy8qKiBAZGVmZ3JvdXAgSTJTX0xMX0VGX0luaXQgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICAqIEB7CisgICovCisKK0Vycm9yU3RhdHVzIExMX0kyU19EZUluaXQoU1BJX1R5cGVEZWYgKlNQSXgpOworRXJyb3JTdGF0dXMgTExfSTJTX0luaXQoU1BJX1R5cGVEZWYgKlNQSXgsIExMX0kyU19Jbml0VHlwZURlZiAqSTJTX0luaXRTdHJ1Y3QpOwordm9pZCAgICAgICAgTExfSTJTX1N0cnVjdEluaXQoTExfSTJTX0luaXRUeXBlRGVmICpJMlNfSW5pdFN0cnVjdCk7Cit2b2lkICAgICAgICBMTF9JMlNfQ29uZmlnUHJlc2NhbGVyKFNQSV9UeXBlRGVmICpTUEl4LCB1aW50MzJfdCBQcmVzY2FsZXJMaW5lYXIsIHVpbnQzMl90IFByZXNjYWxlclBhcml0eSk7CisKKy8qKgorICAqIEB9CisgICovCisjZW5kaWYgLyogVVNFX0ZVTExfTExfRFJJVkVSICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisjZW5kaWYgLyogU1BJX0kyU19TVVBQT1JUICovCisKICNlbmRpZiAvKiBkZWZpbmVkIChTUEkxKSB8fCBkZWZpbmVkIChTUEkyKSAqLwogCiAvKioKZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfbGxfc3lzdGVtLmggYi9JbmMvc3RtMzJ3Ynh4X2xsX3N5c3RlbS5oCmluZGV4IDg5YmFjZDAuLmZhMzQ5YmMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfbGxfc3lzdGVtLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9sbF9zeXN0ZW0uaApAQCAtNTgsNiArNTgsMTYgQEAKIC8qKiBAZGVmZ3JvdXAgU1lTVEVNX0xMX1ByaXZhdGVfQ29uc3RhbnRzIFNZU1RFTSBQcml2YXRlIENvbnN0YW50cwogICAqIEB7CiAgICovCisvKioKKyAqIEBicmllZiBWUkVGQlVGIFZSRUZfU0MwICYgVlJFRl9TQzEgY2FsaWJyYXRpb24gdmFsdWVzIAorICovCisjZGVmaW5lIFZSRUZCVUZfU0MwX0NBTF9BRERSICAgKCh1aW50OF90KikgKDB4MUZGRjc1RjBVTCkpIC8qITwgIEFkZHJlc3Mgb2YgVlJFRkJVRiB0cmltbWluZyB2YWx1ZSBmb3IgVlJTPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZSRUZfU0MwIGluIFNUTTMyV0IgZGF0YXNoZWV0ICovCisjZGVmaW5lIFZSRUZCVUZfU0MxX0NBTF9BRERSICAgKCh1aW50OF90KikgKDB4MUZGRjc1MzBVTCkpIC8qITwgIEFkZHJlc3Mgb2YgVlJFRkJVRiB0cmltbWluZyB2YWx1ZSBmb3IgVlJTPTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZSRUZfU0MxIGluIFNUTTMyV0IgZGF0YXNoZWV0ICovCisvKioKKyAgKiBAfQorICAqLwogCiAvKioKICAgKiBAfQpAQCAtMTg3Nyw2ICsxODg3LDI0IEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgR2V0IHRoZSBWUkVGQlVGIHRyaW1taW5nIHZhbHVlIGZvciBWUlM9MCAoVlJFRl9TQzApCisgICogQHJldHZhbCBCZXR3ZWVuIDAgYW5kIDB4M0YKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9WUkVGQlVGX1NDMF9HZXRDYWxpYnJhdGlvbih2b2lkKQoreworICByZXR1cm4gKHVpbnQzMl90KSgqVlJFRkJVRl9TQzBfQ0FMX0FERFIpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgVlJFRkJVRiB0cmltbWluZyB2YWx1ZSBmb3IgVlJTPTEgKFZSRUZfU0MxKQorICAqIEByZXR2YWwgQmV0d2VlbiAwIGFuZCAweDNGCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVlJFRkJVRl9TQzFfR2V0Q2FsaWJyYXRpb24odm9pZCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoKlZSRUZCVUZfU0MxX0NBTF9BRERSKTsKK30KKworLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiBWb2x0YWdlIHJlZmVyZW5jZSBidWZmZXIgaXMgcmVhZHkKICAgKiBAcm10b2xsIFZSRUZCVUZfQ1NSICBWUlIgICAgICAgICAgIExMX1ZSRUZCVUZfSXNWUkVGUmVhZHkKICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KQEAgLTE4OTgsNiArMTkyNiwxMSBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCB0aGUgdHJpbW1pbmcgY29kZSBmb3IgVlJFRkJVRiBjYWxpYnJhdGlvbiAoVHVuZSB0aGUgaW50ZXJuYWwgcmVmZXJlbmNlIGJ1ZmZlciB2b2x0YWdlKQorICAqIEBub3RlICAgRWFjaCBWcmVmQnVmIHZvbHRhZ2Ugc2NhbGUgaXMgY2FsaWJyYXRlZCBpbiBwcm9kdWN0aW9uIGZvciBlYWNoIGRldmljZSwKKyAgKiAgICAgICAgIGRhdGEgc3RvcmVkIGluIGZsYXNoIG1lbW9yeS4KKyAgKiAgICAgICAgIEZ1bmN0aW9ucyBAcmVmIExMX1ZSRUZCVUZfU0MwX0dldENhbGlicmF0aW9uIGFuZCAKKyAgKiAgICAgICAgIEByZWYgTExfVlJFRkJVRl9TQzBfR2V0Q2FsaWJyYXRpb24gY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUKKyAgKiAgICAgICAgIHRoZXNlIGNhbGlicmF0aW9uIGRhdGEuCiAgICogQHJtdG9sbCBWUkVGQlVGX0NDUiAgVFJJTSAgICAgICAgICBMTF9WUkVGQlVGX1NldFRyaW1taW5nCiAgICogQHBhcmFtICBWYWx1ZSBCZXR3ZWVuIDAgYW5kIDB4M0YKICAgKiBAcmV0dmFsIE5vbmUKZGlmZiAtLWdpdCBhL0luYy9zdG0zMndieHhfbGxfdGltLmggYi9JbmMvc3RtMzJ3Ynh4X2xsX3RpbS5oCmluZGV4IGY3ZDJmYzUuLjA1MjU2ZDkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMndieHhfbGxfdGltLmgKKysrIGIvSW5jL3N0bTMyd2J4eF9sbF90aW0uaApAQCAtMTIwLDMwICsxMjAsOSBAQAogI2RlZmluZSBUSU1fUE9TSVRJT05fQlJLX1NPVVJDRSAgICAgICAgICAgIChQT1NJVElPTl9WQUwoU291cmNlKSAmIDB4MUZVTCkKIAogLyogR2VuZXJpYyBiaXQgZGVmaW5pdGlvbnMgZm9yIFRJTXhfQUYxIHJlZ2lzdGVyICovCi0jZGVmaW5lIFRJTXhfQUYxX0JLSU5FICAgICBUSU0xX0FGMV9CS0lORSAgICAgLyohPCBCUksgQktJTiBpbnB1dCBlbmFibGUgKi8KLSNpZiBkZWZpbmVkKENPTVAxKSAmJiBkZWZpbmVkKENPTVAyKQotI2RlZmluZSBUSU14X0FGMV9CS0NPTVAxRSAgVElNMV9BRjFfQktDTVAxRSAgIC8qITwgQlJLIENPTVAxIGVuYWJsZSAqLwotI2RlZmluZSBUSU14X0FGMV9CS0NPTVAyRSAgVElNMV9BRjFfQktDTVAyRSAgIC8qITwgQlJLIENPTVAyIGVuYWJsZSAqLwotI2VuZGlmIC8qIENPTVAxICYmIENPTVAyICovCiAjZGVmaW5lIFRJTXhfQUYxX0JLSU5QICAgICBUSU0xX0FGMV9CS0lOUCAgICAgLyohPCBCUksgQktJTiBpbnB1dCBwb2xhcml0eSAqLwotI2lmIGRlZmluZWQoQ09NUDEpICYmIGRlZmluZWQoQ09NUDIpCi0jZGVmaW5lIFRJTXhfQUYxX0JLQ09NUDFQICBUSU0xX0FGMV9CS0NNUDFQICAgLyohPCBCUksgQ09NUDEgaW5wdXQgcG9sYXJpdHkgKi8KLSNkZWZpbmUgVElNeF9BRjFfQktDT01QMlAgIFRJTTFfQUYxX0JLQ01QMlAgICAvKiE8IEJSSyBDT01QMiBpbnB1dCBwb2xhcml0eSAqLwotI2VuZGlmIC8qIENPTVAxICYmIENPTVAyICovCiAjZGVmaW5lIFRJTXhfQUYxX0VUUlNFTCAgICBUSU0xX0FGMV9FVFJTRUwgICAgLyohPCBUSU14IEVUUiBzb3VyY2Ugc2VsZWN0aW9uICovCiAKLS8qIEdlbmVyaWMgYml0IGRlZmluaXRpb25zIGZvciBUSU14X0FGMiByZWdpc3RlciAqLwotI2RlZmluZSBUSU14X0FGMl9CSzJJTkUgICAgVElNMV9BRjJfQksySU5FICAgICAgLyohPCBCUksyIEJLSU4yIGlucHV0IGVuYWJsZSAqLwotI2lmIGRlZmluZWQoQ09NUDEpICYmIGRlZmluZWQoQ09NUDIpCi0jZGVmaW5lIFRJTXhfQUYyX0JLMkNPTVAxRSBUSU0xX0FGMl9CSzJDTVAxRSAgICAvKiE8IEJSSzIgQ09NUDEgZW5hYmxlICovCi0jZGVmaW5lIFRJTXhfQUYyX0JLMkNPTVAyRSBUSU0xX0FGMl9CSzJDTVAyRSAgICAvKiE8IEJSSzIgQ09NUDIgZW5hYmxlICovCi0jZW5kaWYgLyogQ09NUDEgJiYgQ09NUDIgKi8KLSNkZWZpbmUgVElNeF9BRjJfQksySU5QICAgIFRJTTFfQUYyX0JLMklOUCAgICAgIC8qITwgQlJLMiBCS0lOMiBpbnB1dCBwb2xhcml0eSAqLwotI2lmIGRlZmluZWQoQ09NUDEpICYmIGRlZmluZWQoQ09NUDIpCi0jZGVmaW5lIFRJTXhfQUYyX0JLMkNPTVAxUCBUSU0xX0FGMl9CSzJDTVAxUCAgICAvKiE8IEJSSzIgQ09NUDEgaW5wdXQgcG9sYXJpdHkgKi8KLSNkZWZpbmUgVElNeF9BRjJfQksyQ09NUDJQIFRJTTFfQUYyX0JLMkNNUDJQICAgIC8qITwgQlJLMiBDT01QMiBpbnB1dCBwb2xhcml0eSAqLwotI2VuZGlmIC8qIENPTVAxICYmIENPTVAyICovCi0KIC8qIFJlbWFwIG1hc2sgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgVElNeF9PUl9STVBfU0hJRlQgMTZVCiAjZGVmaW5lIFRJTXhfT1JfUk1QX01BU0sgIDB4MDAwMEZGRkZVCkBAIC0yNTIsMTMgKzIzMSwxNCBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfVElNX1NldENsb2NrRGl2aXNpb24oKS4qLwogCi0gIHVpbnQ4X3QgUmVwZXRpdGlvbkNvdW50ZXI7ICAvKiE8IFNwZWNpZmllcyB0aGUgcmVwZXRpdGlvbiBjb3VudGVyIHZhbHVlLiBFYWNoIHRpbWUgdGhlIFJDUiBkb3duY291bnRlcgorICB1aW50MzJfdCBSZXBldGl0aW9uQ291bnRlcjsgIC8qITwgU3BlY2lmaWVzIHRoZSByZXBldGl0aW9uIGNvdW50ZXIgdmFsdWUuIEVhY2ggdGltZSB0aGUgUkNSIGRvd25jb3VudGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWNoZXMgemVybywgYW4gdXBkYXRlIGV2ZW50IGlzIGdlbmVyYXRlZCBhbmQgY291bnRpbmcgcmVzdGFydHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgUkNSIHZhbHVlIChOKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtZWFucyBpbiBQV00gbW9kZSB0aGF0IChOKzEpIGNvcnJlc3BvbmRzIHRvOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHRoZSBudW1iZXIgb2YgUFdNIHBlcmlvZHMgaW4gZWRnZS1hbGlnbmVkIG1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB0aGUgbnVtYmVyIG9mIGhhbGYgUFdNIHBlcmlvZCBpbiBjZW50ZXItYWxpZ25lZCBtb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAweDAwIGFuZCAweEZGLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUCB0aW1lcnM6IHRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHhGRi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWR2YW5jZWQgdGltZXJzOiB0aGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwMDAgYW5kIE1heF9EYXRhID0gMHhGRkZGLgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfVElNX1NldFJlcGV0aXRpb25Db3VudGVyKCkuKi8KIH0gTExfVElNX0luaXRUeXBlRGVmOwpAQCAtMTE0MSw3ICsxMTIxLDcgQEAKIC8qKiBAZGVmZ3JvdXAgVElNX0xMX0VDX1RJTTJfRVRSX1JNUCAgVElNMiBFeHRlcm5hbCBUcmlnZ2VyIFJlbWFwCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfVElNX1RJTTJfRVRSX1JNUF9HUElPICBUSU0yX09SX1JNUF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUSU0yX0VUUiBpcyBjb25uZWN0ZWQgdG8gR1BJTyAqLworI2RlZmluZSBMTF9USU1fVElNMl9FVFJfUk1QX0dQSU8gIFRJTTJfT1JfUk1QX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVElNMl9FVFIgaXMgY29ubmVjdGVkIHRvIEdQSU8gKi8KICNkZWZpbmUgTExfVElNX1RJTTJfRVRSX1JNUF9MU0UgIChUSU0yX09SX0VUUl9STVAgfCBUSU0yX09SX1JNUF9NQVNLKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRJTTJfRVRSIGlzIGNvbm5lY3RlZCB0byBMU0UgICovCiAvKioKICAgKiBAfQpAQCAtMTY4MSw3ICsxNjYxLDcgQEAKICAgKiAgICAgICB3aGV0aGVyIG9yIG5vdCBhIHRpbWVyIGluc3RhbmNlIHN1cHBvcnRzIGEgcmVwZXRpdGlvbiBjb3VudGVyLgogICAqIEBybXRvbGwgUkNSICAgICAgICAgIFJFUCAgICAgICAgICAgTExfVElNX1NldFJlcGV0aXRpb25Db3VudGVyCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCi0gICogQHBhcmFtICBSZXBldGl0aW9uQ291bnRlciBiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTI1NQorICAqIEBwYXJhbSAgUmVwZXRpdGlvbkNvdW50ZXIgYmV0d2VlbiBNaW5fRGF0YT0wIGFuZCBNYXhfRGF0YT0yNTUgb3IgNjU1MzUgZm9yIGFkdmFuY2VkIHRpbWVyLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX1NldFJlcGV0aXRpb25Db3VudGVyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBSZXBldGl0aW9uQ291bnRlcikKQEAgLTE3MjYsNiArMTcwNiwxNiBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIEluZGljYXRlIHdoZXRoZXIgdXBkYXRlIGludGVycnVwdCBmbGFnIChVSUYpIGNvcHkgaXMgc2V0LgorICAqIEBwYXJhbSAgQ291bnRlciBDb3VudGVyIHZhbHVlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lzQWN0aXZlVUlGQ1BZKHVpbnQzMl90IENvdW50ZXIpCit7CisgIHJldHVybiAoKChDb3VudGVyICYgVElNX0NOVF9VSUZDUFkpID09IChUSU1fQ05UX1VJRkNQWSkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCiAgICogQH0KICAgKi8KIApAQCAtMzI5NSw4ICszMjg1LDggQEAKICAgKiBAYnJpZWYgIFNlbGVjdCB0aGUgZXh0ZXJuYWwgdHJpZ2dlciAoRVRSKSBpbnB1dCBzb3VyY2UuCiAgICogQG5vdGUgTWFjcm8gSVNfVElNX0VUUlNFTF9JTlNUQU5DRShUSU14KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yCiAgICogICAgICAgbm90IGEgdGltZXIgaW5zdGFuY2Ugc3VwcG9ydHMgRVRSIHNvdXJjZSBzZWxlY3Rpb24uCi0gICogQG5vdGUgV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIExMX1RJTV9FVFJTT1VSQ0VfR1BJTywgCi0gICogICAgICAgTExfVElNX0VUUlNPVVJDRV9BREMxX0FXRDEsIExMX1RJTV9FVFJTT1VSQ0VfQURDMV9BV0QyIG9yIAorICAqIEBub3RlIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBMTF9USU1fRVRSU09VUkNFX0dQSU8sCisgICogICAgICAgTExfVElNX0VUUlNPVVJDRV9BREMxX0FXRDEsIExMX1RJTV9FVFJTT1VSQ0VfQURDMV9BV0QyIG9yCiAgICogICAgICAgTExfVElNX0VUUlNPVVJDRV9BREMxX0FXRDMsIEVUUiBzb3VyY2UgcmVsaWVzIG9uIFRJTXggRVRSIHJlbWFwcGluZwogICAqICAgICAgIGNhcGFiaWxpdHkgY29uZmlndXJlZCB0aHJvdWdoIHRoZSBmdW5jdGlvbiBAcmVmIExMX1RJTV9TZXRSZW1hcCgpLgogICAqIEBybXRvbGwgQUYxICAgICAgICAgIEVUUlNFTCAgICAgICAgTExfVElNX1NldEVUUlNvdXJjZQpAQCAtMzcxNSw3ICszNzA1LDcgQEAKICAgKiAgICAgICAgIFRJTTJfT1IgICAgVEk0X1JNUCAgICAgICAgICAgTExfVElNX1NldFJlbWFwXG4KICAgKiAgICAgICAgIFRJTTJfT1IgICAgVEkxX1JNUCAgICAgICAgICAgTExfVElNX1NldFJlbWFwXG4KICAgKiAgICAgICAgIFRJTTE2X09SICAgVEkxX1JNUCAgICAgICAgICAgTExfVElNX1NldFJlbWFwXG4KLSAgKiAgICAgICAgIFRJTTE3X09SICAgVEkxX1JNUCAgICAgICAgICAgTExfVElNX1NldFJlbWFwXG4KKyAgKiAgICAgICAgIFRJTTE3X09SICAgVEkxX1JNUCAgICAgICAgICAgTExfVElNX1NldFJlbWFwCiAgICogQHBhcmFtICBUSU14IFRpbWVyIGluc3RhbmNlCiAgICogQHBhcmFtICBSZW1hcCBSZW1hcCBwYXJhbSBkZXBlbmRzIG9uIHRoZSBUSU14LiBEZXNjcmlwdGlvbiBhdmFpbGFibGUgb25seQogICAqICAgICAgICAgaW4gQ0hNIHZlcnNpb24gb2YgdGhlIFVzZXIgTWFudWFsIChub3QgaW4gLnBkZikuCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggYTg0MzdjMS4uZDEyYzBhMyAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMzQsMTAgKzM0LDEzIEBACiAKIEhBTCBEcml2ZXIgV0IgfCBDTVNJUyBEZXZpY2UgV0IgfCBDTVNJUyBDb3JlIHwgV2FzIGRlbGl2ZXJlZCBpbiB0aGUgZnVsbCBNQ1UgcGFja2FnZQogLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UYWcgdjEuMS4wIHwgVGFnIHYxLjEuMCB8IFRhZyB2NC41X2NtNCB8IFRhZyB2MS4xLjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IG5ldyB0YWcpCi1UYWcgdjEuMi4wIHwgVGFnIHYxLjIuMCB8IFRhZyB2NS40LjBfY200IHwgVGFnIHYxLjIuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgbmV3IHRhZykKLVRhZyB2MS4zLjAgfCBUYWcgdjEuMy4wIHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuMy4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBuZXcgdGFnKQotVGFnIHYxLjQuMCB8IFRhZyB2MS40LjAgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS40LjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IG5ldyB0YWcpCitUYWcgdjEuMS4wIHwgVGFnIHYxLjEuMCB8IFRhZyB2NC41X2NtNCB8IFRhZyB2MS4xLjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IHRhZykKK1RhZyB2MS4yLjAgfCBUYWcgdjEuMi4wIHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuMi4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCB0YWcpCitUYWcgdjEuMy4wIHwgVGFnIHYxLjMuMCB8IFRhZyB2NS40LjBfY200IHwgVGFnIHYxLjMuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgdGFnKQorVGFnIHYxLjQuMCB8IFRhZyB2MS4zLjAgfCBUYWcgdjUuNC4wX2NtNCB8IFRhZyB2MS40LjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IHRhZykKK1RhZyB2MS41LjAgfCBUYWcgdjEuNC4wIHwgVGFnIHY1LjQuMF9jbTQgfCBUYWcgdjEuNS4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCB0YWcpCisKK0RldGFpbHMgYWJvdXQgdGhlIGNvbnRlbnQgb2YgdGhpcyByZWxlYXNlIGFyZSBhdmFpbGFibGUgaW4gdGhlIHJlbGVhc2Ugbm90ZSBbaGVyZV0oaHR0cHM6Ly9odG1scHJldmlldy5naXRodWIuaW8vP2h0dHBzOi8vZ2l0aHViLmNvbS9TVE1pY3JvZWxlY3Ryb25pY3Mvc3RtMzJ3Ynh4X2hhbF9kcml2ZXIvYmxvYi9tYXN0ZXIvUmVsZWFzZV9Ob3Rlcy5odG1sKS4KIAogVGhlIGZ1bGwgKipTVE0zMkN1YmVXQioqIE1DVSBwYWNrYWdlIGlzIGF2YWlsYWJsZSBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1NUTWljcm9lbGVjdHJvbmljcy9TVE0zMkN1YmVXQikuCiAKZGlmZiAtLWdpdCBhL1JlbGVhc2VfTm90ZXMuaHRtbCBiL1JlbGVhc2VfTm90ZXMuaHRtbAppbmRleCBiMWZiZDlmLi43M2ViMTM5IDEwMDY0NAotLS0gYS9SZWxlYXNlX05vdGVzLmh0bWwKKysrIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCkBAIC00Niw5ICs0Niw2NSBAQAogPGRpdiBjbGFzcz0iY29sLXNtLTEyIGNvbC1sZy04Ij4KIDxoMSBpZD0idXBkYXRlLWhpc3RvcnkiPlVwZGF0ZSBIaXN0b3J5PC9oMT4KIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KLTxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb241IiBjaGVja2VkIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjUiIGFyaWEtaGlkZGVuPSJ0cnVlIj52MS40LjAgLyAxNS1Ob3ZlbWJlci0yMDE5PC9sYWJlbD4KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb242IiBjaGVja2VkIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjYiIGFyaWEtaGlkZGVuPSJ0cnVlIj52MS41LjAgLyAxMi1GZWJydWFyeS0yMDIwPC9sYWJlbD4KIDxkaXY+CiA8aDIgaWQ9Im1haW4tY2hhbmdlcyI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMyBpZD0iaW50cm9kdWN0aW9uLW9mLXN0bTMyd2I1bS1zdG0zMndiMzV4eC1hbmQtc3RtMzJ3YjMweHgtcHJvZHVjdCI+SW50cm9kdWN0aW9uIG9mIFNUTTMyV0I1TSwgU1RNMzJXQjM1eHggYW5kIFNUTTMyV0IzMHh4IHByb2R1Y3Q8L2gzPgorPHA+VGhpcyByZWxlYXNlIGludHJvZHVjZSB0aGUgc3VwcG9ydCBvZiBTVE0zMldCNU14eCwgU1RNMzJXQjM1eHggcHJvZHVjdCBhbmQgaXRzIHZhbHVlIGxpbmUgU1RNMzJXQjMweHguPC9wPgorPHA+QWRkZWQgZmVhdHVyZXM6PC9wPgorPHVsPgorPGxpPkludHJvZHVjdGlvbiBvZiBJMlMgcGVyaXBoZXJhbCBzdXBwb3J0LiBUaGlzIG9ubHkgYXBwbHkgdG8gU1RNMzJXQjM1eHguPC9saT4KKzwvdWw+Cis8dGFibGU+Cis8dGhlYWQ+Cis8dHIgY2xhc3M9ImhlYWRlciI+Cis8dGg+UGVyaXBoZXJhbDwvdGg+Cis8dGggc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5IZWFkbGluZTwvdGg+Cis8L3RyPgorPC90aGVhZD4KKzx0Ym9keT4KKzx0ciBjbGFzcz0ib2RkIj4KKzx0ZD5IQUwvTEw8L3RkPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+VlJFRkJVRiB0cmltbWluZyBjYWxpYnJhdGlvbiBtdXN0IGJlIHdyaXR0ZW4gYnkgc29mdHdhcmU8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iZXZlbiI+Cis8dGQ+SEFMPC90ZD4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkhBTF9TZXRUaWNrRnJlcSgpIHNob3VsZCB1cGRhdGUgZnJlcXVlbmN5IG9uIFN5c3RpY2tfTE9BRCByZWdpc3RlciBhbmQgdXdUaWNrRnJlcSBjb3JyZWN0bHk8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0ib2RkIj4KKzx0ZD5HUElPPC90ZD4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkxMX0dQSU9fSW5pdCgpIGdlbmVyYXRlIHVuZGVzaXJlZCBwdWxzZTwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJldmVuIj4KKzx0ZD5JMkM8L3RkPgorPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyI+SGFyZEZhdWx0IGluIEkyQ19ETUFYZmVyQ3BsdDwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJvZGQiPgorPHRkPkkyQzwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5JbmNvcnJlY3RseSBlbmFibGUgaW50ZXJydXB0cyBpbiBJMkNfRW5hYmxlX0lSUSByb3V0aW5lIHdoZW4gSW50ZXJydXB0UmVxdWVzdCA9IEkyQ19YRkVSX0NQTFRfSVQ8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iZXZlbiI+Cis8dGQ+UkNDPC90ZD4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkNhbm5vdCBlbmFibGUgUExMIGlmIFBMTCBPRkYgd2l0aCBpZGVudGljYWwgUExMIGNvbmZpZzwvdGQ+Cis8L3RyPgorPHRyIGNsYXNzPSJvZGQiPgorPHRkPlJDQzwvdGQ+Cis8dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQ7Ij5DbG9jayByZWNvbmZpZ3VyYXRpb24gaXNzdWVzIG9uY2UgUExMU0FJIHVzZWQ8L3RkPgorPC90cj4KKzx0ciBjbGFzcz0iZXZlbiI+Cis8dGQ+STJTPC90ZD4KKzx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsiPkFkZCBwZXJpcGhlcmFsIGZvciBTVE0zMldCMzV4eDwvdGQ+Cis8L3RyPgorPC90Ym9keT4KKzwvdGFibGU+Cis8aDIgaWQ9ImJhY2t3YXJkLWNvbXBhdGliaWxpdHkiPkJhY2t3YXJkIENvbXBhdGliaWxpdHk8L2gyPgorPHA+VGhpcyByZWxlYXNlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJldmlvdXMgdmVyc2lvbnMuPC9wPgorPC9kaXY+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb241IiAgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uNSIgYXJpYS1oaWRkZW49InRydWUiPnYxLjQuMCAvIDE1LURlY2VtYmVyLTIwMTk8L2xhYmVsPgorPGRpdj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTEiPk1haW4gQ2hhbmdlczwvaDI+CiA8aDMgaWQ9Im1haXRlbmFuY2UtcmVsZWFzZSI+TWFpdGVuYW5jZSByZWxlYXNlPC9oMz4KIDx0YWJsZT4KIDx0aGVhZD4KQEAgLTkyLDcgKzE0OCw3IEBACiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+Ci08aDIgaWQ9ImJhY2t3YXJkLWNvbXBhdGliaWxpdHkiPkJhY2t3YXJkIENvbXBhdGliaWxpdHk8L2gyPgorPGgyIGlkPSJiYWNrd2FyZC1jb21wYXRpYmlsaXR5LTEiPkJhY2t3YXJkIENvbXBhdGliaWxpdHk8L2gyPgogPHA+VGhpcyByZWxlYXNlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJldmlvdXMgdmVyc2lvbnMuPC9wPgogPGgyIGlkPSJkZXBlbmRlbmNpZXMiPkRlcGVuZGVuY2llczwvaDI+CiA8cD5UaGlzIHNvZnR3YXJlIHJlbGVhc2UgaXMgY29tcGF0aWJsZSB3aXRoOjwvcD4KQEAgLTEwMiw3ICsxNTgsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjQiIGFyaWEtaGlkZGVuPSJ0cnVlIj52MS4zLjAgLyAxMS1TZXB0ZW1iZXItMjAxOTwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIiPk1haW4gQ2hhbmdlczwvaDI+CiA8aDMgaWQ9Im1haXRlbmFuY2UtcmVsZWFzZS0xIj5NYWl0ZW5hbmNlIHJlbGVhc2U8L2gzPgogPHRhYmxlPgogPHRoZWFkPgpAQCAtMTc0LDcgKzIzMCw3IEBACiA8L3RyPgogPC90Ym9keT4KIDwvdGFibGU+Ci08aDIgaWQ9ImJhY2t3YXJkLWNvbXBhdGliaWxpdHktMSI+QmFja3dhcmQgQ29tcGF0aWJpbGl0eTwvaDI+Cis8aDIgaWQ9ImJhY2t3YXJkLWNvbXBhdGliaWxpdHktMiI+QmFja3dhcmQgQ29tcGF0aWJpbGl0eTwvaDI+CiA8cD5UaGlzIHJlbGVhc2UgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cyB2ZXJzaW9ucy48L3A+CiA8aDIgaWQ9ImRlcGVuZGVuY2llcy0xIj5EZXBlbmRlbmNpZXM8L2gyPgogPHA+VGhpcyBzb2Z0d2FyZSByZWxlYXNlIGlzIGNvbXBhdGlibGUgd2l0aDo8L3A+CkBAIC0xODQsNyArMjQwLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24zIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24zIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMi4wIC8gMjYtSnVuZS0yMDE5PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0yIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMyI+TWFpbiBDaGFuZ2VzPC9oMj4KIDxoMyBpZD0ic3RtMzJ3YjUweHgtaW50cm9kdWN0aW9uLWFuZC1tYWludGVuYW5jZS1yZWxlYXNlIj5TVE0zMldCNTB4eCBpbnRyb2R1Y3Rpb24gYW5kIG1haW50ZW5hbmNlIHJlbGVhc2U8L2gzPgogPHA+Rmlyc3QgcmVsZWFzZSBmb3IgU1RNMzJXQnh4IEhBTCBkcml2ZXJzIGludHJvZHVjaW5nIDxzdHJvbmc+c3RtMzJ3YjUweHg8L3N0cm9uZz4gZGV2aWNlcy48L3A+CiA8dGFibGU+CkBAIC0yNTMsNyArMzA5LDcgQEAKIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT4KLTxoMiBpZD0iYmFja3dhcmQtY29tcGF0aWJpbGl0eS0yIj5CYWNrd2FyZCBDb21wYXRpYmlsaXR5PC9oMj4KKzxoMiBpZD0iYmFja3dhcmQtY29tcGF0aWJpbGl0eS0zIj5CYWNrd2FyZCBDb21wYXRpYmlsaXR5PC9oMj4KIDxwPlRoaXMgcmVsZWFzZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb25zLjwvcD4KIDxoMiBpZD0iZGVwZW5kZW5jaWVzLTIiPkRlcGVuZGVuY2llczwvaDI+CiA8cD5UaGlzIHNvZnR3YXJlIHJlbGVhc2UgaXMgY29tcGF0aWJsZSB3aXRoOjwvcD4KQEAgLTI2Myw3ICszMTksNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjIiIGFyaWEtaGlkZGVuPSJ0cnVlIj5WMS4xLjAgLyAwNS1BcHJpbC0yMDE5PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy0zIj5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNCI+TWFpbiBDaGFuZ2VzPC9oMj4KIDxoMyBpZD0ibWFpbnRlbmFuY2UtcmVsZWFzZSI+TWFpbnRlbmFuY2UgcmVsZWFzZTwvaDM+CiA8cD5NYWludGVuYW5jZSByZWxlYXNlIG9mIEhBTCBhbmQgTG93IGxheWVycyBkcml2ZXJzIHN1cHBvcnRpbmcgU1RNMzJXQjU1eHggZGV2aWNlcy48L3A+CiA8dGFibGU+CkBAIC0zMTcsNyArMzczLDcgQEAKIDwvdHI+CiA8L3Rib2R5PgogPC90YWJsZT4KLTxoMiBpZD0iYmFja3dhcmQtY29tcGF0aWJpbGl0eS0zIj5CYWNrd2FyZCBDb21wYXRpYmlsaXR5PC9oMj4KKzxoMiBpZD0iYmFja3dhcmQtY29tcGF0aWJpbGl0eS00Ij5CYWNrd2FyZCBDb21wYXRpYmlsaXR5PC9oMj4KIDxwPlRoaXMgcmVsZWFzZSBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHZlcnNpb25zLjwvcD4KIDxoMiBpZD0iZGVwZW5kZW5jaWVzLTMiPkRlcGVuZGVuY2llczwvaDI+CiA8cD5UaGlzIHNvZnR3YXJlIHJlbGVhc2UgaXMgY29tcGF0aWJsZSB3aXRoOjwvcD4KQEAgLTMyNyw3ICszODMsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjEiICBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+VjEuMC4wIC8gMDYtRmVicnVhcnktMjAxOTwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtNCI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTUiPk1haW4gQ2hhbmdlczwvaDI+CiA8aDMgaWQ9ImZpcnN0LXJlbGVhc2UiPkZpcnN0IHJlbGVhc2U8L2gzPgogPHA+Rmlyc3Qgb2ZmaWNpYWwgcmVsZWFzZSBvZiBIQUwgKEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyKSBhbmQgTEwgKExvdyBsYXllcnMpIGRyaXZlcnMgdG8gc3VwcG9ydCBTVE0zMldCNTV4eC48L3A+CiA8L2Rpdj4KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfaGFsLmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbC5jCmluZGV4IDQ0MzJmMGIuLmE3NzhiZmYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfaGFsLmMKKysrIGIvU3JjL3N0bTMyd2J4eF9oYWwuYwpAQCAtNTYsNyArNTYsNyBAQAogICogQGJyaWVmIFNUTTMyV0J4eCBIQUwgRHJpdmVyIHZlcnNpb24gbnVtYmVyCiAgICAqLwogI2RlZmluZSBfX1NUTTMyV0J4eF9IQUxfVkVSU0lPTl9NQUlOICAgKDB4MDFVKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovCi0jZGVmaW5lIF9fU1RNMzJXQnh4X0hBTF9WRVJTSU9OX1NVQjEgICAoMHgwNFUpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8KKyNkZWZpbmUgX19TVE0zMldCeHhfSEFMX1ZFUlNJT05fU1VCMSAgICgweDA1VSkgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLwogI2RlZmluZSBfX1NUTTMyV0J4eF9IQUxfVkVSU0lPTl9TVUIyICAgKDB4MDBVKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCiAjZGVmaW5lIF9fU1RNMzJXQnh4X0hBTF9WRVJTSU9OX1JDICAgICAoMHgwMFUpIC8qITwgWzc6MF0gIHJlbGVhc2UgY2FuZGlkYXRlICovCiAjZGVmaW5lIF9fU1RNMzJXQnh4X0hBTF9WRVJTSU9OICAgICAgICAgKChfX1NUTTMyV0J4eF9IQUxfVkVSU0lPTl9NQUlOIDw8IDI0VSlcCkBAIC03OSw3ICs3OSw3IEBACiAgICovCiBfX0lPIHVpbnQzMl90IHV3VGljazsKIHVpbnQzMl90IHV3VGlja1ByaW8gPSAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpOyAvKiBJbnZhbGlkIFBSSU8gKi8KLXVpbnQzMl90IHV3VGlja0ZyZXEgPSBIQUxfVElDS19GUkVRX0RFRkFVTFQ7ICAvKiAxS0h6ICovCitIQUxfVGlja0ZyZXFUeXBlRGVmIHV3VGlja0ZyZXEgPSBIQUxfVElDS19GUkVRX0RFRkFVTFQ7ICAvKiAxS0h6ICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzQ2LDE3ICszNDYsMjkgQEAKICAgKiBAYnJpZWYgU2V0IG5ldyB0aWNrIEZyZXEuCiAgICogQHJldHZhbCBTdGF0dXMKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TZXRUaWNrRnJlcSh1aW50MzJfdCBGcmVxKQorSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NldFRpY2tGcmVxKEhBTF9UaWNrRnJlcVR5cGVEZWYgRnJlcSkKIHsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzICA9IEhBTF9PSzsKKyAgSEFMX1RpY2tGcmVxVHlwZURlZiBwcmV2VGlja0ZyZXE7CisKICAgYXNzZXJ0X3BhcmFtKElTX1RJQ0tGUkVRKEZyZXEpKTsKIAogICBpZiAodXdUaWNrRnJlcSAhPSBGcmVxKQogICB7CisgICAgLyogQmFjayB1cCB1d1RpY2tGcmVxIGZyZXF1ZW5jeSAqLworICAgIHByZXZUaWNrRnJlcSA9IHV3VGlja0ZyZXE7CisKKyAgICAvKiBVcGRhdGUgdXdUaWNrRnJlcSBnbG9iYWwgdmFyaWFibGUgdXNlZCBieSBIQUxfSW5pdFRpY2soKSAqLwogICAgIHV3VGlja0ZyZXEgPSBGcmVxOwogCiAgICAgLyogQXBwbHkgdGhlIG5ldyB0aWNrIEZyZXEgICovCiAgICAgc3RhdHVzID0gSEFMX0luaXRUaWNrKHV3VGlja1ByaW8pOworCisgICAgaWYgKHN0YXR1cyAhPSBIQUxfT0spCisgICAgeworICAgICAgLyogUmVzdG9yZSBwcmV2aW91cyB0aWNrIGZyZXF1ZW5jeSAqLworICAgICAgdXdUaWNrRnJlcSA9IHByZXZUaWNrRnJlcTsKKyAgICB9CiAgIH0KIAogICByZXR1cm4gc3RhdHVzOwpAQCAtMzY2LDcgKzM3OCw3IEBACiAgICogQGJyaWVmIFJldHVybiB0aWNrIGZyZXF1ZW5jeS4KICAgKiBAcmV0dmFsIHRpY2sgcGVyaW9kIGluIEh6CiAgICovCi11aW50MzJfdCBIQUxfR2V0VGlja0ZyZXEodm9pZCkKK0hBTF9UaWNrRnJlcVR5cGVEZWYgSEFMX0dldFRpY2tGcmVxKHZvaWQpCiB7CiAgIHJldHVybiB1d1RpY2tGcmVxOwogfQpAQCAtNjI2LDE0ICs2MzgsMzEgQEAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcmVxdWlyZXMgVkREQSBlcXVhbCB0byBvciBoaWdoZXIgdGhhbiAyLjQgVi4KICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBTWVNDRkdfVlJFRkJVRl9WT0xUQUdFX1NDQUxFMSA6IFZSRUZfT1VUMSBhcm91bmQgMi41IFYuIAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyByZXF1aXJlcyBWRERBIGVxdWFsIHRvIG9yIGhpZ2hlciB0aGFuIDIuOCBWLgorICAqIEBub3RlICAgUmV0cmlldmUgdGhlIFRyaW1taW5nVmFsdWUgZnJvbSBmYWN0b3J5IGxvY2F0ZWQgYXQKKyAgKiAgICAgICAgIFZSRUZCVUZfU0MwX0NBTF9BRERSIG9yIFZSRUZCVUZfU0MxX0NBTF9BRERSIGFkZHJlc3Nlcy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHZvaWQgSEFMX1NZU0NGR19WUkVGQlVGX1ZvbHRhZ2VTY2FsaW5nQ29uZmlnKHVpbnQzMl90IFZvbHRhZ2VTY2FsaW5nKQogeworICB1aW50MzJfdCBUcmltbWluZ1ZhbHVlOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TWVNDRkdfVlJFRkJVRl9WT0xUQUdFX1NDQUxFKFZvbHRhZ2VTY2FsaW5nKSk7CiAgIAogICBMTF9WUkVGQlVGX1NldFZvbHRhZ2VTY2FsaW5nKFZvbHRhZ2VTY2FsaW5nKTsKKyAgCisgIC8qIFJlc3RyaWV2ZSBDYWxpYnJhdGlvbiBkYXRhIGFuZCBzdG9yZSB0aGVtIGludG8gdHJpbW1pbmcgZmllbGQgKi8KKyAgaWYgKFZvbHRhZ2VTY2FsaW5nID09IFNZU0NGR19WUkVGQlVGX1ZPTFRBR0VfU0NBTEUwKQorICB7CisgICAgVHJpbW1pbmdWYWx1ZSA9ICgodWludDMyX3QpICpWUkVGQlVGX1NDMF9DQUxfQUREUikgJiAweDNGVTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBUcmltbWluZ1ZhbHVlID0gKCh1aW50MzJfdCkgKlZSRUZCVUZfU0MxX0NBTF9BRERSKSAmIDB4M0ZVOworICB9CisgIGFzc2VydF9wYXJhbShJU19TWVNDRkdfVlJFRkJVRl9UUklNTUlORyhUcmltbWluZ1ZhbHVlKSk7CisKKyAgSEFMX1NZU0NGR19WUkVGQlVGX1RyaW1taW5nQ29uZmlnKFRyaW1taW5nVmFsdWUpOwogfQogCiAvKioKQEAgLTY1NSw2ICs2ODQsMTIgQEAKIAogLyoqCiAgICogQGJyaWVmIFR1bmUgdGhlIEludGVybmFsIFZvbHRhZ2UgUmVmZXJlbmNlIGJ1ZmZlciAoVlJFRkJVRikuCisgICogQG5vdGUgIEVhY2ggVnJlZkJ1ZiB2b2x0YWdlIHNjYWxlIGlzIGNhbGlicmF0ZWQgaW4gcHJvZHVjdGlvbiBmb3IgZWFjaCBkZXZpY2UsCisgICogICAgICAgIGRhdGEgc3RvcmVkIGluIGZsYXNoIG1lbW9yeS4KKyAgKiAgICAgICAgRnVuY3Rpb24gQHJlZiBIQUxfU1lTQ0ZHX1ZSRUZCVUZfVm9sdGFnZVNjYWxpbmdDb25maWcgcmV0cmlldmVzIGFuZCAKKyAgKiAgICAgICAgYXBwbGllcyB0aGlzIGNhbGlicmF0aW9uIGRhdGEgYXMgdHJpbW1pbmcgdmFsdWUgYXQgZWFjaCBzY2FsZSBjaGFuZ2UuCisgICogICAgICAgIFRoZXJlZm9yZSwgb3B0aW9uYWxseSwgZnVuY3Rpb24gQHJlZiBIQUxfU1lTQ0ZHX1ZSRUZCVUZfVHJpbW1pbmdDb25maWcKKyAgKiAgICAgICAgY2FuIGJlIHVzZWQgaW4gYSBzZWNvbmQgdGltZSB0byBmaW5lIHR1bmUgdGhlIHRyaW1taW5nLgogICAqIEBwYXJhbSBUcmltbWluZ1ZhbHVlIHNwZWNpZmllcyB0cmltbWluZyBjb2RlIGZvciBWUkVGQlVGIGNhbGlicmF0aW9uCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4M0YKICAgKiBAcmV0dmFsIE5vbmUKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfaGFsX2ZsYXNoLmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9mbGFzaC5jCmluZGV4IGFiM2RlOTYuLjU3ZGIzN2QgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfaGFsX2ZsYXNoLmMKKysrIGIvU3JjL3N0bTMyd2J4eF9oYWxfZmxhc2guYwpAQCAtMzE1LDkgKzMxNSw5IEBACiAgICAgLyogcmV0dXJuIGFkcmVzcyBiZWluZyBwcm9ncmFtbWVkICovCiAgICAgcGFyYW0gPSBwRmxhc2guQWRkcmVzczsKICAgfQotICBlbHNlIGlmICgocEZsYXNoLlByb2NlZHVyZU9uR29pbmcgJiAoRkxBU0hfVFlQRUVSQVNFX01BU1NFUkFTRSB8IEZMQVNIX1RZUEVFUkFTRV9QQUdFUykpICE9IDBVKQorICBlbHNlIGlmICgocEZsYXNoLlByb2NlZHVyZU9uR29pbmcgJiAoRkxBU0hfVFlQRUVSQVNFX1BBR0VTKSkgIT0gMFUpCiAgIHsKLSAgICAvKiByZXR1cm4gcGFnZSBudW1iZXIgYmVpbmcgZXJhc2VkICgwIGZvciBtYXNzIGVyYXNlKSAqLworICAgIC8qIHJldHVybiBwYWdlIG51bWJlciBiZWluZyBlcmFzZWQgKi8KICAgICBwYXJhbSA9IHBGbGFzaC5QYWdlOwogICB9CiAgIGVsc2UKQEAgLTM4OSw3ICszODksNiBAQAogLyoqCiAgICogQGJyaWVmICBGTEFTSCBlbmQgb2Ygb3BlcmF0aW9uIGludGVycnVwdCBjYWxsYmFjay4KICAgKiBAcGFyYW0gIFJldHVyblZhbHVlIFRoZSB2YWx1ZSBzYXZlZCBpbiB0aGlzIHBhcmFtZXRlciBkZXBlbmRzIG9uIHRoZSBvbmdvaW5nIHByb2NlZHVyZQotICAqICAgICAgICAgICAgICAgICAgTWFzcyBFcmFzZTogMAogICAqICAgICAgICAgICAgICAgICAgUGFnZSBFcmFzZTogUGFnZSB3aGljaCBoYXMgYmVlbiBlcmFzZWQKICAgKiAgICAgICAgICAgICAgICAgIFByb2dyYW06IEFkZHJlc3Mgd2hpY2ggd2FzIHNlbGVjdGVkIGZvciBkYXRhIHByb2dyYW0KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTQwNyw3ICs0MDYsNiBAQAogLyoqCiAgICogQGJyaWVmICBGTEFTSCBvcGVyYXRpb24gZXJyb3IgaW50ZXJydXB0IGNhbGxiYWNrLgogICAqIEBwYXJhbSAgUmV0dXJuVmFsdWUgVGhlIHZhbHVlIHNhdmVkIGluIHRoaXMgcGFyYW1ldGVyIGRlcGVuZHMgb24gdGhlIG9uZ29pbmcgcHJvY2VkdXJlCi0gICogICAgICAgICAgICAgICAgIE1hc3MgRXJhc2U6IDAKICAgKiAgICAgICAgICAgICAgICAgUGFnZSBFcmFzZTogUGFnZSBudW1iZXIgd2hpY2ggcmV0dXJuZWQgYW4gZXJyb3IKICAgKiAgICAgICAgICAgICAgICAgUHJvZ3JhbTogQWRkcmVzcyB3aGljaCB3YXMgc2VsZWN0ZWQgZm9yIGRhdGEgcHJvZ3JhbQogICAqIEByZXR2YWwgTm9uZQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9oYWxfZmxhc2hfZXguYyBiL1NyYy9zdG0zMndieHhfaGFsX2ZsYXNoX2V4LmMKaW5kZXggMTQ5NzZiYi4uY2U5Mzg4MiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9oYWxfZmxhc2hfZXguYworKysgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9mbGFzaF9leC5jCkBAIC05OCw3ICs5OCw2IEBACiAvKiogQGRlZmdyb3VwIEZMQVNIRXhfUHJpdmF0ZV9GdW5jdGlvbnMgRkxBU0hFeCBQcml2YXRlIEZ1bmN0aW9ucwogICogQHsKICAqLwotc3RhdGljIHZvaWQgICAgICAgICAgICAgIEZMQVNIX01hc3NFcmFzZSh2b2lkKTsKIHN0YXRpYyB2b2lkICAgICAgICAgICAgICBGTEFTSF9BY2tub3dsZWRnZVBhZ2VFcmFzZSh2b2lkKTsKIHN0YXRpYyB2b2lkICAgICAgICAgICAgICBGTEFTSF9GbHVzaENhY2hlcyh2b2lkKTsKIHN0YXRpYyB2b2lkICAgICAgICAgICAgICBGTEFTSF9PQl9XUlBDb25maWcodWludDMyX3QgV1JQQXJlYSwgdWludDMyX3QgV1JQU3RhcnRPZmZzZXQsIHVpbnQzMl90IFdSRFBFbmRPZmZzZXQpOwpAQCAtMTM5LDcgKzEzOCw3IEBACiAgICogQHsKICAgKi8KIC8qKgotICAqIEBicmllZiAgUGVyZm9ybSBhIG1hc3MgZXJhc2Ugb3IgZXJhc2UgdGhlIHNwZWNpZmllZCBGTEFTSCBtZW1vcnkgcGFnZXMuCisgICogQGJyaWVmICBQZXJmb3JtIGFuIGVyYXNlIG9mIHRoZSBzcGVjaWZpZWQgRkxBU0ggbWVtb3J5IHBhZ2VzLgogICAqIEBub3RlICAgQmVmb3JlIGFueSBvcGVyYXRpb24sIGl0IGlzIHBvc3NpYmxlIHRvIGNoZWNrIHRoZXJlIGlzIG5vIG9wZXJhdGlvbiBzdXNwZW5kZWQKICAgKiAgICAgICAgIGJ5IGNhbGwgSEFMX0ZMQVNIRXhfSXNPcGVyYXRpb25TdXNwZW5kZWQoKQogICAqIEBwYXJhbVtpbl0gIHBFcmFzZUluaXQgUG9pbnRlciB0byBhbiBAcmVmIEZMQVNIX0VyYXNlSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQKQEAgLTE2OCwxNyArMTY3LDcgQEAKIAogICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIGlmIChwRXJhc2VJbml0LT5UeXBlRXJhc2UgPT0gRkxBU0hfVFlQRUVSQVNFX01BU1NFUkFTRSkKLSAgICB7Ci0gICAgICAvKiBNYXNzIGVyYXNlIHRvIGJlIGRvbmUgKi8KLSAgICAgIEZMQVNIX01hc3NFcmFzZSgpOwotCi0gICAgICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8KLSAgICAgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKEZMQVNIX1RJTUVPVVRfVkFMVUUpOwotCi0gICAgICAvKiBJZiBvcGVyYXRpb24gaXMgY29tcGxldGVkIG9yIGludGVycnVwdGVkLCBubyBuZWVkIHRvIGNsZWFyIHRoZSBNYXNzIEVyYXNlIEJpdCAqLwotICAgIH0KLSAgICBlbHNlCisgICAgaWYgKHBFcmFzZUluaXQtPlR5cGVFcmFzZSA9PSBGTEFTSF9UWVBFRVJBU0VfUEFHRVMpCiAgICAgewogICAgICAgLypJbml0aWFsaXphdGlvbiBvZiBQYWdlRXJyb3IgdmFyaWFibGUqLwogICAgICAgKlBhZ2VFcnJvciA9IDB4RkZGRkZGRkZVOwpAQCAtMjE0LDcgKzIwMyw3IEBACiB9CiAKIC8qKgotICAqIEBicmllZiAgUGVyZm9ybSBhIG1hc3MgZXJhc2Ugb3IgZXJhc2UgdGhlIHNwZWNpZmllZCBGTEFTSCBtZW1vcnkgcGFnZXMgd2l0aCBpbnRlcnJ1cHQgZW5hYmxlZC4KKyAgKiBAYnJpZWYgIFBlcmZvcm0gYW4gZXJhc2Ugb2YgdGhlIHNwZWNpZmllZCBGTEFTSCBtZW1vcnkgcGFnZXMgd2l0aCBpbnRlcnJ1cHQgZW5hYmxlZC4KICAgKiBAbm90ZSAgIEJlZm9yZSBhbnkgb3BlcmF0aW9uLCBpdCBpcyBwb3NzaWJsZSB0byBjaGVjayB0aGVyZSBpcyBubyBvcGVyYXRpb24gc3VzcGVuZGVkCiAgICogICAgICAgICBieSBjYWxsIEhBTF9GTEFTSEV4X0lzT3BlcmF0aW9uU3VzcGVuZGVkKCkKICAgKiBAcGFyYW0gIHBFcmFzZUluaXQgUG9pbnRlciB0byBhbiBAcmVmIEZMQVNIX0VyYXNlSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQKQEAgLTI1MCwxNSArMjM5LDcgQEAKICAgICAvKiBFbmFibGUgRW5kIG9mIE9wZXJhdGlvbiBhbmQgRXJyb3IgaW50ZXJydXB0cyAqLwogICAgIF9fSEFMX0ZMQVNIX0VOQUJMRV9JVChGTEFTSF9JVF9FT1AgfCBGTEFTSF9JVF9PUEVSUik7CiAKLSAgICBpZiAocEVyYXNlSW5pdC0+VHlwZUVyYXNlID09IEZMQVNIX1RZUEVFUkFTRV9NQVNTRVJBU0UpCi0gICAgewotICAgICAgLyogU2V0IFBhZ2UgdG8gMCBmb3IgSW50ZXJydXB0IGNhbGxiYWNrIG1hbmFnbWVudCAqLwotICAgICAgcEZsYXNoLlBhZ2UgPSAwOwotCi0gICAgICAvKiBQcm9jZWVkIHRvIE1hc3MgRXJhc2UgKi8KLSAgICAgIEZMQVNIX01hc3NFcmFzZSgpOwotICAgIH0KLSAgICBlbHNlCisgICAgaWYgKHBFcmFzZUluaXQtPlR5cGVFcmFzZSA9PSBGTEFTSF9UWVBFRVJBU0VfUEFHRVMpCiAgICAgewogICAgICAgLyogRXJhc2UgYnkgcGFnZSB0byBiZSBkb25lICovCiAgICAgICBwRmxhc2guTmJQYWdlc1RvRXJhc2UgPSBwRXJhc2VJbml0LT5OYlBhZ2VzOwpAQCAtNTE0LDE2ICs0OTUsNiBAQAogICAqLwogCiAvKioKLSAgKiBAYnJpZWYgIE1hc3MgZXJhc2Ugb2YgRkxBU0ggbWVtb3J5LgotICAqIEByZXR2YWwgTm9uZQotICAqLwotc3RhdGljIHZvaWQgRkxBU0hfTWFzc0VyYXNlKHZvaWQpCi17Ci0gIC8qIFNldCB0aGUgTWFzcyBFcmFzZSBCaXQgYW5kIHN0YXJ0IGJpdCAqLwotICBTRVRfQklUKEZMQVNILT5DUiwgKEZMQVNIX0NSX01FUiB8IEZMQVNIX0NSX1NUUlQpKTsKLX0KLQotLyoqCiAgICogQGJyaWVmICBFcmFzZSB0aGUgc3BlY2lmaWVkIEZMQVNIIG1lbW9yeSBwYWdlLgogICAqIEBwYXJhbSAgUGFnZSBGTEFTSCBwYWdlIHRvIGVyYXNlCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAobWF4IG51bWJlciBvZiBwYWdlcyBpbiBGbGFzaCAtIDEpCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2hhbF9ncGlvLmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9ncGlvLmMKaW5kZXggMDc4ODA5ZS4uODUyZTAxOCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9oYWxfZ3Bpby5jCisrKyBiL1NyYy9zdG0zMndieHhfaGFsX2dwaW8uYwpAQCAtMTg4LDI2ICsxODgsNiBAQAogICAgIGlmIChpb2N1cnJlbnQgIT0gMHgwMHUpCiAgICAgewogICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gR1BJTyBNb2RlIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgICAgIC8qIEluIGNhc2Ugb2YgQWx0ZXJuYXRlIGZ1bmN0aW9uIG1vZGUgc2VsZWN0aW9uICovCi0gICAgICBpZigoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9BRl9QUCkgfHwgKEdQSU9fSW5pdC0+TW9kZSA9PSBHUElPX01PREVfQUZfT0QpKQotICAgICAgewotICAgICAgICAvKiBDaGVjayB0aGUgQWx0ZXJuYXRlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgKi8KLSAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUZfSU5TVEFOQ0UoR1BJT3gpKTsKLSAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0dQSU9fQUYoR1BJT19Jbml0LT5BbHRlcm5hdGUpKTsKLQotICAgICAgICAvKiBDb25maWd1cmUgQWx0ZXJuYXRlIGZ1bmN0aW9uIG1hcHBlZCB3aXRoIHRoZSBjdXJyZW50IElPICovCi0gICAgICAgIHRlbXAgPSBHUElPeC0+QUZSW3Bvc2l0aW9uID4+IDN1XTsKLSAgICAgICAgdGVtcCAmPSB+KDB4RnUgPDwgKChwb3NpdGlvbiAmIDB4MDd1KSAqIDR1KSk7Ci0gICAgICAgIHRlbXAgfD0gKChHUElPX0luaXQtPkFsdGVybmF0ZSkgPDwgKChwb3NpdGlvbiAmIDB4MDd1KSAqIDR1KSk7Ci0gICAgICAgIEdQSU94LT5BRlJbcG9zaXRpb24gPj4gM3VdID0gdGVtcDsKLSAgICAgIH0KLQotICAgICAgLyogQ29uZmlndXJlIElPIERpcmVjdGlvbiBtb2RlIChJbnB1dCwgT3V0cHV0LCBBbHRlcm5hdGUgb3IgQW5hbG9nKSAqLwotICAgICAgdGVtcCA9IEdQSU94LT5NT0RFUjsKLSAgICAgIHRlbXAgJj0gfihHUElPX01PREVSX01PREUwIDw8IChwb3NpdGlvbiAqIDJ1KSk7Ci0gICAgICB0ZW1wIHw9ICgoR1BJT19Jbml0LT5Nb2RlICYgR1BJT19NT0RFKSA8PCAocG9zaXRpb24gKiAydSkpOwotICAgICAgR1BJT3gtPk1PREVSID0gdGVtcDsKLQogICAgICAgLyogSW4gY2FzZSBvZiBPdXRwdXQgb3IgQWx0ZXJuYXRlIGZ1bmN0aW9uIG1vZGUgc2VsZWN0aW9uICovCiAgICAgICBpZigoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9PVVRQVVRfUFApIHx8IChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX0FGX1BQKSB8fAogICAgICAgICAgKEdQSU9fSW5pdC0+TW9kZSA9PSBHUElPX01PREVfT1VUUFVUX09EKSB8fCAoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9BRl9PRCkpCkBAIC0yMzMsNiArMjEzLDI2IEBACiAgICAgICB0ZW1wIHw9ICgoR1BJT19Jbml0LT5QdWxsKSA8PCAocG9zaXRpb24gKiAydSkpOwogICAgICAgR1BJT3gtPlBVUERSID0gdGVtcDsKIAorICAgICAgLyogSW4gY2FzZSBvZiBBbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSBzZWxlY3Rpb24gKi8KKyAgICAgIGlmKChHUElPX0luaXQtPk1vZGUgPT0gR1BJT19NT0RFX0FGX1BQKSB8fCAoR1BJT19Jbml0LT5Nb2RlID09IEdQSU9fTU9ERV9BRl9PRCkpCisgICAgICB7CisgICAgICAgIC8qIENoZWNrIHRoZSBBbHRlcm5hdGUgZnVuY3Rpb24gcGFyYW1ldGVycyAqLworICAgICAgICBhc3NlcnRfcGFyYW0oSVNfR1BJT19BRl9JTlNUQU5DRShHUElPeCkpOworICAgICAgICBhc3NlcnRfcGFyYW0oSVNfR1BJT19BRihHUElPX0luaXQtPkFsdGVybmF0ZSkpOworCisgICAgICAgIC8qIENvbmZpZ3VyZSBBbHRlcm5hdGUgZnVuY3Rpb24gbWFwcGVkIHdpdGggdGhlIGN1cnJlbnQgSU8gKi8KKyAgICAgICAgdGVtcCA9IEdQSU94LT5BRlJbcG9zaXRpb24gPj4gM3VdOworICAgICAgICB0ZW1wICY9IH4oMHhGdSA8PCAoKHBvc2l0aW9uICYgMHgwN3UpICogNHUpKTsKKyAgICAgICAgdGVtcCB8PSAoKEdQSU9fSW5pdC0+QWx0ZXJuYXRlKSA8PCAoKHBvc2l0aW9uICYgMHgwN3UpICogNHUpKTsKKyAgICAgICAgR1BJT3gtPkFGUltwb3NpdGlvbiA+PiAzdV0gPSB0ZW1wOworICAgICAgfQorCisgICAgICAvKiBDb25maWd1cmUgSU8gRGlyZWN0aW9uIG1vZGUgKElucHV0LCBPdXRwdXQsIEFsdGVybmF0ZSBvciBBbmFsb2cpICovCisgICAgICB0ZW1wID0gR1BJT3gtPk1PREVSOworICAgICAgdGVtcCAmPSB+KEdQSU9fTU9ERVJfTU9ERTAgPDwgKHBvc2l0aW9uICogMnUpKTsKKyAgICAgIHRlbXAgfD0gKChHUElPX0luaXQtPk1vZGUgJiBHUElPX01PREUpIDw8IChwb3NpdGlvbiAqIDJ1KSk7CisgICAgICBHUElPeC0+TU9ERVIgPSB0ZW1wOworCiAgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFWFRJIE1vZGUgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICAgICAgLyogQ29uZmlndXJlIHRoZSBFeHRlcm5hbCBJbnRlcnJ1cHQgb3IgZXZlbnQgZm9yIHRoZSBjdXJyZW50IElPICovCiAgICAgICBpZigoR1BJT19Jbml0LT5Nb2RlICYgRVhUSV9NT0RFKSA9PSBFWFRJX01PREUpCkBAIC0zMTQsOSArMzE0LDYgQEAKICAgICAgIHRtcCAmPSAoMHgwRlVMIDw8ICg0dSAqIChwb3NpdGlvbiAmIDB4MDN1KSkpOwogICAgICAgaWYgKHRtcCA9PSAoR1BJT19HRVRfSU5ERVgoR1BJT3gpIDw8ICg0dSAqIChwb3NpdGlvbiAmIDB4MDN1KSkpKQogICAgICAgewotICAgICAgICB0bXAgPSAweDBGdUwgPDwgKDR1ICogKHBvc2l0aW9uICYgMHgwM3UpKTsKLSAgICAgICAgU1lTQ0ZHLT5FWFRJQ1JbcG9zaXRpb24gPj4gMnVdICY9IH50bXA7Ci0KICAgICAgICAgLyogQ2xlYXIgRVhUSSBsaW5lIGNvbmZpZ3VyYXRpb24gKi8KICAgICAgICAgRVhUSS0+SU1SMSAmPSB+KGlvY3VycmVudCk7CiAgICAgICAgIEVYVEktPkVNUjEgJj0gfihpb2N1cnJlbnQpOwpAQCAtMzI0LDYgKzMyMSw5IEBACiAgICAgICAgIC8qIENsZWFyIFJpc2luZyBGYWxsaW5nIGVkZ2UgY29uZmlndXJhdGlvbiAqLwogICAgICAgICBFWFRJLT5SVFNSMSAmPSB+KGlvY3VycmVudCk7CiAgICAgICAgIEVYVEktPkZUU1IxICY9IH4oaW9jdXJyZW50KTsKKworICAgICAgICB0bXAgPSAweDBGdUwgPDwgKDR1ICogKHBvc2l0aW9uICYgMHgwM3UpKTsKKyAgICAgICAgU1lTQ0ZHLT5FWFRJQ1JbcG9zaXRpb24gPj4gMnVdICY9IH50bXA7CiAgICAgICB9CiAKICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHUElPIE1vZGUgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMzMsMTQgKzMzMywxNCBAQAogICAgICAgLyogQ29uZmlndXJlIHRoZSBkZWZhdWx0IEFsdGVybmF0ZSBGdW5jdGlvbiBpbiBjdXJyZW50IElPICovCiAgICAgICBHUElPeC0+QUZSW3Bvc2l0aW9uID4+IDN1XSAmPSB+KDB4RnUgPDwgKChwb3NpdGlvbiAmIDB4MDd1KSAqIDR1KSkgOwogCi0gICAgICAvKiBDb25maWd1cmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIElPIFNwZWVkICovCi0gICAgICBHUElPeC0+T1NQRUVEUiAmPSB+KEdQSU9fT1NQRUVEUl9PU1BFRUQwIDw8IChwb3NpdGlvbiAqIDJ1KSk7CisgICAgICAvKiBEZWFjdGl2YXRlIHRoZSBQdWxsLXVwIGFuZCBQdWxsLWRvd24gcmVzaXN0b3IgZm9yIHRoZSBjdXJyZW50IElPICovCisgICAgICBHUElPeC0+UFVQRFIgJj0gfihHUElPX1BVUERSX1BVUEQwIDw8IChwb3NpdGlvbiAqIDJ1KSk7CiAKICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCB2YWx1ZSBJTyBPdXRwdXQgVHlwZSAqLwogICAgICAgR1BJT3gtPk9UWVBFUiAgJj0gfihHUElPX09UWVBFUl9PVDAgPDwgcG9zaXRpb24pIDsKIAotICAgICAgLyogRGVhY3RpdmF0ZSB0aGUgUHVsbC11cCBhbmQgUHVsbC1kb3duIHJlc2lzdG9yIGZvciB0aGUgY3VycmVudCBJTyAqLwotICAgICAgR1BJT3gtPlBVUERSICY9IH4oR1BJT19QVVBEUl9QVVBEMCA8PCAocG9zaXRpb24gKiAydSkpOworICAgICAgLyogQ29uZmlndXJlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBJTyBTcGVlZCAqLworICAgICAgR1BJT3gtPk9TUEVFRFIgJj0gfihHUElPX09TUEVFRFJfT1NQRUVEMCA8PCAocG9zaXRpb24gKiAydSkpOwogICAgIH0KICAgICAKICAgICBwb3NpdGlvbisrOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9oYWxfaTJjLmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9pMmMuYwppbmRleCA1OGEwMWYwLi5jMDQ3Y2QwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJ3Ynh4X2hhbF9pMmMuYworKysgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9pMmMuYwpAQCAtMzUxLDEzICszNTEsMTMgQEAKIAogCiAvKiBQcml2YXRlIGRlZmluZSB0byBjZW50cmFsaXplIHRoZSBlbmFibGUvZGlzYWJsZSBvZiBJbnRlcnJ1cHRzICovCi0jZGVmaW5lIEkyQ19YRkVSX1RYX0lUICAgICAgICAgICgweDAwMDAwMDAxVSkKLSNkZWZpbmUgSTJDX1hGRVJfUlhfSVQgICAgICAgICAgKDB4MDAwMDAwMDJVKQotI2RlZmluZSBJMkNfWEZFUl9MSVNURU5fSVQgICAgICAoMHgwMDAwMDAwNFUpCisjZGVmaW5lIEkyQ19YRkVSX1RYX0lUICAgICAgICAgICh1aW50MTZfdCkoMHgwMDAxVSkgICAvKiBCaXQgZmllbGQgY2FuIGJlIGNvbWJpbmF0ZWQgd2l0aCBAcmVmIEkyQ19YRkVSX0xJU1RFTl9JVCAqLworI2RlZmluZSBJMkNfWEZFUl9SWF9JVCAgICAgICAgICAodWludDE2X3QpKDB4MDAwMlUpICAgLyogQml0IGZpZWxkIGNhbiBiZSBjb21iaW5hdGVkIHdpdGggQHJlZiBJMkNfWEZFUl9MSVNURU5fSVQgKi8KKyNkZWZpbmUgSTJDX1hGRVJfTElTVEVOX0lUICAgICAgKHVpbnQxNl90KSgweDgwMDBVKSAgIC8qIEJpdCBmaWVsZCBjYW4gYmUgY29tYmluYXRlZCB3aXRoIEByZWYgSTJDX1hGRVJfVFhfSVQgYW5kIEByZWYgSTJDX1hGRVJfUlhfSVQgKi8KIAotI2RlZmluZSBJMkNfWEZFUl9FUlJPUl9JVCAgICAgICAoMHgwMDAwMDAxMVUpCi0jZGVmaW5lIEkyQ19YRkVSX0NQTFRfSVQgICAgICAgICgweDAwMDAwMDEyVSkKLSNkZWZpbmUgSTJDX1hGRVJfUkVMT0FEX0lUICAgICAgKDB4MDAwMDAwMTJVKQorI2RlZmluZSBJMkNfWEZFUl9FUlJPUl9JVCAgICAgICAodWludDE2X3QpKDB4MDAxMFUpICAgLyogQml0IGRlZmluaXRpb24gdG8gbWFuYWdlIGFkZGl0aW9uIG9mIGdsb2JhbCBFcnJvciBhbmQgTkFDSyB0cmVhdG1lbnQgKi8KKyNkZWZpbmUgSTJDX1hGRVJfQ1BMVF9JVCAgICAgICAgKHVpbnQxNl90KSgweDAwMjBVKSAgIC8qIEJpdCBkZWZpbml0aW9uIHRvIG1hbmFnZSBvbmx5IFNUT1AgZXZlbmVtZW50ICovCisjZGVmaW5lIEkyQ19YRkVSX1JFTE9BRF9JVCAgICAgICh1aW50MTZfdCkoMHgwMDQwVSkgICAvKiBCaXQgZGVmaW5pdGlvbiB0byBtYW5hZ2Ugb25seSBSZWxvYWQgb2YgTkJZVEUgKi8KIAogLyogUHJpdmF0ZSBkZWZpbmUgU2VxdWVudGlhbCBUcmFuc2ZlciBPcHRpb25zIGRlZmF1bHQvcmVzZXQgdmFsdWUgKi8KICNkZWZpbmUgSTJDX05PX09QVElPTl9GUkFNRSAgICAgKDB4RkZGRjAwMDBVKQpAQCAtNDEwLDYgKzQxMCw5IEBACiBzdGF0aWMgdm9pZCBJMkNfRW5hYmxlX0lSUShJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDE2X3QgSW50ZXJydXB0UmVxdWVzdCk7CiBzdGF0aWMgdm9pZCBJMkNfRGlzYWJsZV9JUlEoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMsIHVpbnQxNl90IEludGVycnVwdFJlcXVlc3QpOwogCisvKiBQcml2YXRlIGZ1bmN0aW9uIHRvIHRyZWF0IGRpZmZlcmVudCBlcnJvciBjYWxsYmFjayAqLworc3RhdGljIHZvaWQgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhJMkNfSGFuZGxlVHlwZURlZiAqaGkyYyk7CisKIC8qIFByaXZhdGUgZnVuY3Rpb24gdG8gZmx1c2ggVFhEUiByZWdpc3RlciAqLwogc3RhdGljIHZvaWQgSTJDX0ZsdXNoX1RYRFIoSTJDX0hhbmRsZVR5cGVEZWYgKmhpMmMpOwogCkBAIC00MjUxLDkgKzQyNTQsMjEgQEAKICAgICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICAgIF9fSEFMX0xPQ0soaGkyYyk7CiAKLSAgICAvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KLSAgICBJMkNfRGlzYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfUlhfSVQpOwotICAgIEkyQ19EaXNhYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9UWF9JVCk7CisgICAgLyogRGlzYWJsZSBJbnRlcnJ1cHRzIGFuZCBTdG9yZSBQcmV2aW91cyBzdGF0ZSAqLworICAgIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFgpCisgICAgeworICAgICAgSTJDX0Rpc2FibGVfSVJRKGhpMmMsIEkyQ19YRkVSX1RYX0lUKTsKKyAgICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfVFg7CisgICAgfQorICAgIGVsc2UgaWYgKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9SWCkKKyAgICB7CisgICAgICBJMkNfRGlzYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfUlhfSVQpOworICAgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9NQVNURVJfQlVTWV9SWDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIERvIG5vdGhpbmcgKi8KKyAgICB9CiAKICAgICAvKiBTZXQgU3RhdGUgYXQgSEFMX0kyQ19TVEFURV9BQk9SVCAqLwogICAgIGhpMmMtPlN0YXRlID0gSEFMX0kyQ19TVEFURV9BQk9SVDsKQEAgLTUwMDEsNiArNTAxNiw3IEBACiB7CiAgIHVpbnQzMl90IHRtcG9wdGlvbnMgPSBoaTJjLT5YZmVyT3B0aW9uczsKICAgdWludDMyX3QgdHJlYXRkbWFuYWNrID0gMFU7CisgIEhBTF9JMkNfU3RhdGVUeXBlRGVmIHRtcHN0YXRlOwogCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaGkyYyk7CkBAIC01MDc5LDggKzUwOTUsMjQgQEAKICAgICAgICAgLyogU2V0IEVycm9yQ29kZSBjb3JyZXNwb25kaW5nIHRvIGEgTm9uLUFja25vd2xlZGdlICovCiAgICAgICAgIGhpMmMtPkVycm9yQ29kZSB8PSBIQUxfSTJDX0VSUk9SX0FGOwogCisgICAgICAgIC8qIFN0b3JlIGN1cnJlbnQgaGkyYy0+U3RhdGUsIHNvbHZlIE1JU1JBMjAxMi1SdWxlLTEzLjUgKi8KKyAgICAgICAgdG1wc3RhdGUgPSBoaTJjLT5TdGF0ZTsKKwogICAgICAgICBpZiAoKHRtcG9wdGlvbnMgPT0gSTJDX0ZJUlNUX0ZSQU1FKSB8fCAodG1wb3B0aW9ucyA9PSBJMkNfTkVYVF9GUkFNRSkpCiAgICAgICAgIHsKKyAgICAgICAgICBpZiAoKHRtcHN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9UWCkgfHwgKHRtcHN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9UWF9MSVNURU4pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfU0xBVkVfQlVTWV9UWDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoKHRtcHN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9SWCkgfHwgKHRtcHN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9SWF9MSVNURU4pKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfU0xBVkVfQlVTWV9SWDsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgKi8KKyAgICAgICAgICB9CisKICAgICAgICAgICAvKiBDYWxsIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIHRvIGluZm9ybSB1cHBlciBsYXllciBvZiBFbmQgb2YgVHJhbnNmZXIgKi8KICAgICAgICAgICBJMkNfSVRFcnJvcihoaTJjLCBoaTJjLT5FcnJvckNvZGUpOwogICAgICAgICB9CkBAIC01MzY5LDkgKzU0MDEsMjcgQEAKICAgKi8KIHN0YXRpYyB2b2lkIEkyQ19JVFNsYXZlU2VxQ3BsdChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYykKIHsKKyAgdWludDMyX3QgdG1wY3IxdmFsdWUgPSBSRUFEX1JFRyhoaTJjLT5JbnN0YW5jZS0+Q1IxKTsKKwogICAvKiBSZXNldCBJMkMgaGFuZGxlIG1vZGUgKi8KICAgaGkyYy0+TW9kZSA9IEhBTF9JMkNfTU9ERV9OT05FOwogCisgIC8qIElmIGEgRE1BIGlzIG9uZ29pbmcsIFVwZGF0ZSBoYW5kbGUgc2l6ZSBjb250ZXh0ICovCisgIGlmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBJMkNfQ1IxX1RYRE1BRU4pICE9IFJFU0VUKQorICB7CisgICAgLyogRGlzYWJsZSBETUEgUmVxdWVzdCAqLworICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgJj0gfkkyQ19DUjFfVFhETUFFTjsKKyAgfQorICBlbHNlIGlmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBJMkNfQ1IxX1JYRE1BRU4pICE9IFJFU0VUKQorICB7CisgICAgLyogRGlzYWJsZSBETUEgUmVxdWVzdCAqLworICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgJj0gfkkyQ19DUjFfUlhETUFFTjsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBEbyBub3RoaW5nICovCisgIH0KKwogICBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9CVVNZX1RYX0xJU1RFTikKICAgewogICAgIC8qIFJlbW92ZSBIQUxfSTJDX1NUQVRFX1NMQVZFX0JVU1lfVFgsIGtlZXAgb25seSBIQUxfSTJDX1NUQVRFX0xJU1RFTiAqLwpAQCAtNTQyNiwxOSArNTQ3NiwzNiBAQAogc3RhdGljIHZvaWQgSTJDX0lUTWFzdGVyQ3BsdChJMkNfSGFuZGxlVHlwZURlZiAqaGkyYywgdWludDMyX3QgSVRGbGFncykKIHsKICAgdWludDMyX3QgdG1wZXJyb3I7CisgIHVpbnQzMl90IHRtcElURmxhZ3MgPSBJVEZsYWdzOworICBfX0lPIHVpbnQzMl90IHRtcHJlZzsKIAogICAvKiBDbGVhciBTVE9QIEZsYWcgKi8KICAgX19IQUxfSTJDX0NMRUFSX0ZMQUcoaGkyYywgSTJDX0ZMQUdfU1RPUEYpOwogCisgIC8qIERpc2FibGUgSW50ZXJydXB0cyBhbmQgU3RvcmUgUHJldmlvdXMgc3RhdGUgKi8KKyAgaWYgKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfQlVTWV9UWCkKKyAgeworICAgIEkyQ19EaXNhYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9UWF9JVCk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9NQVNURVJfQlVTWV9UWDsKKyAgfQorICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCisgIHsKKyAgICBJMkNfRGlzYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfUlhfSVQpOworICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfUlg7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogRG8gbm90aGluZyAqLworICB9CisKICAgLyogQ2xlYXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCiAgIEkyQ19SRVNFVF9DUjIoaGkyYyk7CiAKICAgLyogUmVzZXQgaGFuZGxlIHBhcmFtZXRlcnMgKi8KLSAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9OT05FOwogICBoaTJjLT5YZmVySVNSICAgICAgID0gTlVMTDsKICAgaGkyYy0+WGZlck9wdGlvbnMgICA9IEkyQ19OT19PUFRJT05fRlJBTUU7CiAKLSAgaWYgKEkyQ19DSEVDS19GTEFHKElURmxhZ3MsIEkyQ19GTEFHX0FGKSAhPSBSRVNFVCkKKyAgaWYgKEkyQ19DSEVDS19GTEFHKHRtcElURmxhZ3MsIEkyQ19GTEFHX0FGKSAhPSBSRVNFVCkKICAgewogICAgIC8qIENsZWFyIE5BQ0sgRmxhZyAqLwogICAgIF9fSEFMX0kyQ19DTEVBUl9GTEFHKGhpMmMsIEkyQ19GTEFHX0FGKTsKQEAgLTU0NDcsMTIgKzU1MTQsMTcgQEAKICAgICBoaTJjLT5FcnJvckNvZGUgfD0gSEFMX0kyQ19FUlJPUl9BRjsKICAgfQogCisgIC8qIEZldGNoIExhc3QgcmVjZWl2ZSBkYXRhIGlmIGFueSAqLworICBpZiAoKGhpMmMtPlN0YXRlID09IEhBTF9JMkNfU1RBVEVfQUJPUlQpICYmIChJMkNfQ0hFQ0tfRkxBRyh0bXBJVEZsYWdzLCBJMkNfRkxBR19SWE5FKSAhPSBSRVNFVCkpCisgIHsKKyAgICAvKiBSZWFkIGRhdGEgZnJvbSBSWERSICovCisgICAgdG1wcmVnID0gKHVpbnQ4X3QpaGkyYy0+SW5zdGFuY2UtPlJYRFI7CisgICAgVU5VU0VEKHRtcHJlZyk7CisgIH0KKwogICAvKiBGbHVzaCBUWCByZWdpc3RlciAqLwogICBJMkNfRmx1c2hfVFhEUihoaTJjKTsKIAotICAvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KLSAgSTJDX0Rpc2FibGVfSVJRKGhpMmMsIEkyQ19YRkVSX1RYX0lUIHwgSTJDX1hGRVJfUlhfSVQpOwotCiAgIC8qIFN0b3JlIGN1cnJlbnQgdm9sYXRpbGUgaGkyYy0+RXJyb3JDb2RlLCBtaXNyYSBydWxlICovCiAgIHRtcGVycm9yID0gaGkyYy0+RXJyb3JDb2RlOwogCkBAIC01NDY2LDYgKzU1MzgsNyBAQAogICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFgpCiAgIHsKICAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9OT05FOwogCiAgICAgaWYgKGhpMmMtPk1vZGUgPT0gSEFMX0kyQ19NT0RFX01FTSkKICAgICB7CkBAIC01NTAwLDYgKzU1NzMsNyBAQAogICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCiAgIHsKICAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9OT05FOwogCiAgICAgaWYgKGhpMmMtPk1vZGUgPT0gSEFMX0kyQ19NT0RFX01FTSkKICAgICB7CkBAIC01NTQ2LDEyICs1NjIwLDI2IEBACiB7CiAgIHVpbnQzMl90IHRtcGNyMXZhbHVlID0gUkVBRF9SRUcoaGkyYy0+SW5zdGFuY2UtPkNSMSk7CiAgIHVpbnQzMl90IHRtcElURmxhZ3MgPSBJVEZsYWdzOworICBIQUxfSTJDX1N0YXRlVHlwZURlZiB0bXBzdGF0ZSA9IGhpMmMtPlN0YXRlOwogCiAgIC8qIENsZWFyIFNUT1AgRmxhZyAqLwogICBfX0hBTF9JMkNfQ0xFQVJfRkxBRyhoaTJjLCBJMkNfRkxBR19TVE9QRik7CiAKLSAgLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLwotICBJMkNfRGlzYWJsZV9JUlEoaGkyYywgSTJDX1hGRVJfTElTVEVOX0lUIHwgSTJDX1hGRVJfVFhfSVQgfCBJMkNfWEZFUl9SWF9JVCk7CisgIC8qIERpc2FibGUgSW50ZXJydXB0cyBhbmQgU3RvcmUgUHJldmlvdXMgc3RhdGUgKi8KKyAgaWYgKCh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFgpIHx8ICh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfVFhfTElTVEVOKSkKKyAgeworICAgIEkyQ19EaXNhYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9MSVNURU5fSVQgfCBJMkNfWEZFUl9UWF9JVCk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9TTEFWRV9CVVNZX1RYOworICB9CisgIGVsc2UgaWYgKCh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpIHx8ICh0bXBzdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlhfTElTVEVOKSkKKyAgeworICAgIEkyQ19EaXNhYmxlX0lSUShoaTJjLCBJMkNfWEZFUl9MSVNURU5fSVQgfCBJMkNfWEZFUl9SWF9JVCk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9TTEFWRV9CVVNZX1JYOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIERvIG5vdGhpbmcgKi8KKyAgfQogCiAgIC8qIERpc2FibGUgQWRkcmVzcyBBY2tub3dsZWRnZSAqLwogICBoaTJjLT5JbnN0YW5jZS0+Q1IyIHw9IEkyQ19DUjJfTkFDSzsKQEAgLTU1NjUsNiArNTY1Myw5IEBACiAgIC8qIElmIGEgRE1BIGlzIG9uZ29pbmcsIFVwZGF0ZSBoYW5kbGUgc2l6ZSBjb250ZXh0ICovCiAgIGlmIChJMkNfQ0hFQ0tfSVRfU09VUkNFKHRtcGNyMXZhbHVlLCBJMkNfQ1IxX1RYRE1BRU4pICE9IFJFU0VUKQogICB7CisgICAgLyogRGlzYWJsZSBETUEgUmVxdWVzdCAqLworICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgJj0gfkkyQ19DUjFfVFhETUFFTjsKKwogICAgIGlmIChoaTJjLT5oZG1hdHggIT0gTlVMTCkKICAgICB7CiAgICAgICBoaTJjLT5YZmVyQ291bnQgPSAodWludDE2X3QpX19IQUxfRE1BX0dFVF9DT1VOVEVSKGhpMmMtPmhkbWF0eCk7CkBAIC01NTcyLDYgKzU2NjMsOSBAQAogICB9CiAgIGVsc2UgaWYgKEkyQ19DSEVDS19JVF9TT1VSQ0UodG1wY3IxdmFsdWUsIEkyQ19DUjFfUlhETUFFTikgIT0gUkVTRVQpCiAgIHsKKyAgICAvKiBEaXNhYmxlIERNQSBSZXF1ZXN0ICovCisgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSAmPSB+STJDX0NSMV9SWERNQUVOOworCiAgICAgaWYgKGhpMmMtPmhkbWFyeCAhPSBOVUxMKQogICAgIHsKICAgICAgIGhpMmMtPlhmZXJDb3VudCA9ICh1aW50MTZfdClfX0hBTF9ETUFfR0VUX0NPVU5URVIoaGkyYy0+aGRtYXJ4KTsKQEAgLTU2MDgsNyArNTcwMiw2IEBACiAgICAgaGkyYy0+RXJyb3JDb2RlIHw9IEhBTF9JMkNfRVJST1JfQUY7CiAgIH0KIAotICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX05PTkU7CiAgIGhpMmMtPk1vZGUgPSBIQUxfSTJDX01PREVfTk9ORTsKICAgaGkyYy0+WGZlcklTUiA9IE5VTEw7CiAKQEAgLTU2MzEsNiArNTcyNCw3IEBACiAKICAgICBoaTJjLT5YZmVyT3B0aW9ucyA9IEkyQ19OT19PUFRJT05fRlJBTUU7CiAgICAgaGkyYy0+U3RhdGUgPSBIQUxfSTJDX1NUQVRFX1JFQURZOworICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTk9ORTsKIAogICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgICBfX0hBTF9VTkxPQ0soaGkyYyk7CkBAIC01NjQ2LDYgKzU3NDAsNyBAQAogICBlbHNlIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0JVU1lfUlgpCiAgIHsKICAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CisgICAgaGkyYy0+UHJldmlvdXNTdGF0ZSA9IEkyQ19TVEFURV9OT05FOwogCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoaTJjKTsKQEAgLTU2NjAsNiArNTc1NSw3IEBACiAgIGVsc2UKICAgewogICAgIGhpMmMtPlN0YXRlID0gSEFMX0kyQ19TVEFURV9SRUFEWTsKKyAgICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX05PTkU7CiAKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwpAQCAtNTczMyw2ICs1ODI5LDcgQEAKIHN0YXRpYyB2b2lkIEkyQ19JVEVycm9yKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjLCB1aW50MzJfdCBFcnJvckNvZGUpCiB7CiAgIEhBTF9JMkNfU3RhdGVUeXBlRGVmIHRtcHN0YXRlID0gaGkyYy0+U3RhdGU7CisgIHVpbnQzMl90IHRtcHByZXZpb3Vzc3RhdGU7CiAKICAgLyogUmVzZXQgaGFuZGxlIHBhcmFtZXRlcnMgKi8KICAgaGkyYy0+TW9kZSAgICAgICAgICA9IEhBTF9JMkNfTU9ERV9OT05FOwpAQCAtNTc1Miw3ICs1ODQ5LDYgQEAKIAogICAgIC8qIGtlZXAgSEFMX0kyQ19TVEFURV9MSVNURU4gaWYgc2V0ICovCiAgICAgaGkyYy0+U3RhdGUgICAgICAgICA9IEhBTF9JMkNfU1RBVEVfTElTVEVOOwotICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTk9ORTsKICAgICBoaTJjLT5YZmVySVNSICAgICAgID0gSTJDX1NsYXZlX0lTUl9JVDsKICAgfQogICBlbHNlCkBAIC01NzY3LDE2ICs1ODYzLDE5IEBACiAgICAgICAvKiBTZXQgSEFMX0kyQ19TVEFURV9SRUFEWSAqLwogICAgICAgaGkyYy0+U3RhdGUgICAgICAgICA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7CiAgICAgfQotICAgIGhpMmMtPlByZXZpb3VzU3RhdGUgPSBJMkNfU1RBVEVfTk9ORTsKICAgICBoaTJjLT5YZmVySVNSICAgICAgID0gTlVMTDsKICAgfQogCiAgIC8qIEFib3J0IERNQSBUWCB0cmFuc2ZlciBpZiBhbnkgKi8KLSAgaWYgKChoaTJjLT5JbnN0YW5jZS0+Q1IxICYgSTJDX0NSMV9UWERNQUVOKSA9PSBJMkNfQ1IxX1RYRE1BRU4pCisgIHRtcHByZXZpb3Vzc3RhdGUgPSBoaTJjLT5QcmV2aW91c1N0YXRlOworICBpZiAoKGhpMmMtPmhkbWF0eCAhPSBOVUxMKSAmJiAoKHRtcHByZXZpb3Vzc3RhdGUgPT0gSTJDX1NUQVRFX01BU1RFUl9CVVNZX1RYKSB8fCAodG1wcHJldmlvdXNzdGF0ZSA9PSBJMkNfU1RBVEVfU0xBVkVfQlVTWV9UWCkpKQogICB7Ci0gICAgaGkyYy0+SW5zdGFuY2UtPkNSMSAmPSB+STJDX0NSMV9UWERNQUVOOworICAgIGlmICgoaGkyYy0+SW5zdGFuY2UtPkNSMSAmIEkyQ19DUjFfVFhETUFFTikgPT0gSTJDX0NSMV9UWERNQUVOKQorICAgIHsKKyAgICAgIGhpMmMtPkluc3RhbmNlLT5DUjEgJj0gfkkyQ19DUjFfVFhETUFFTjsKKyAgICB9CiAKLSAgICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCisgICAgaWYgKEhBTF9ETUFfR2V0U3RhdGUoaGkyYy0+aGRtYXR4KSAhPSBIQUxfRE1BX1NUQVRFX1JFQURZKQogICAgIHsKICAgICAgIC8qIFNldCB0aGUgSTJDIERNQSBBYm9ydCBjYWxsYmFjayA6CiAgICAgICAgd2lsbCBsZWFkIHRvIGNhbGwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgYXQgZW5kIG9mIERNQSBhYm9ydCBwcm9jZWR1cmUgKi8KQEAgLTU3OTIsMTMgKzU4OTEsMjAgQEAKICAgICAgICAgaGkyYy0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayhoaTJjLT5oZG1hdHgpOwogICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhoaTJjKTsKKyAgICB9CiAgIH0KICAgLyogQWJvcnQgRE1BIFJYIHRyYW5zZmVyIGlmIGFueSAqLwotICBlbHNlIGlmICgoaGkyYy0+SW5zdGFuY2UtPkNSMSAmIEkyQ19DUjFfUlhETUFFTikgPT0gSTJDX0NSMV9SWERNQUVOKQorICBlbHNlIGlmICgoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpICYmICgodG1wcHJldmlvdXNzdGF0ZSA9PSBJMkNfU1RBVEVfTUFTVEVSX0JVU1lfUlgpIHx8ICh0bXBwcmV2aW91c3N0YXRlID09IEkyQ19TVEFURV9TTEFWRV9CVVNZX1JYKSkpCiAgIHsKLSAgICBoaTJjLT5JbnN0YW5jZS0+Q1IxICY9IH5JMkNfQ1IxX1JYRE1BRU47CisgICAgaWYgKChoaTJjLT5JbnN0YW5jZS0+Q1IxICYgSTJDX0NSMV9SWERNQUVOKSA9PSBJMkNfQ1IxX1JYRE1BRU4pCisgICAgeworICAgICAgaGkyYy0+SW5zdGFuY2UtPkNSMSAmPSB+STJDX0NSMV9SWERNQUVOOworICAgIH0KIAotICAgIGlmIChoaTJjLT5oZG1hcnggIT0gTlVMTCkKKyAgICBpZiAoSEFMX0RNQV9HZXRTdGF0ZShoaTJjLT5oZG1hcngpICE9IEhBTF9ETUFfU1RBVEVfUkVBRFkpCiAgICAgewogICAgICAgLyogU2V0IHRoZSBJMkMgRE1BIEFib3J0IGNhbGxiYWNrIDoKICAgICAgICAgd2lsbCBsZWFkIHRvIGNhbGwgSEFMX0kyQ19FcnJvckNhbGxiYWNrKCkgYXQgZW5kIG9mIERNQSBhYm9ydCBwcm9jZWR1cmUgKi8KQEAgLTU4MTQsMTAgKzU5MjAsMjggQEAKICAgICAgICAgaGkyYy0+aGRtYXJ4LT5YZmVyQWJvcnRDYWxsYmFjayhoaTJjLT5oZG1hcngpOwogICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhoaTJjKTsKKyAgICB9CiAgIH0KLSAgZWxzZSBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9BQk9SVCkKKyAgZWxzZQorICB7CisgICAgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhoaTJjKTsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEkyQyBFcnJvciBjYWxsYmFjayB0cmVhdG1lbnQuCisgICogQHBhcmFtICBoaTJjIEkyQyBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBJMkNfVHJlYXRFcnJvckNhbGxiYWNrKEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjKQoreworICBpZiAoaGkyYy0+U3RhdGUgPT0gSEFMX0kyQ19TVEFURV9BQk9SVCkKICAgewogICAgIGhpMmMtPlN0YXRlID0gSEFMX0kyQ19TVEFURV9SRUFEWTsKKyAgICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX05PTkU7CiAKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwpAQCAtNTgzMSw2ICs1OTU1LDggQEAKICAgfQogICBlbHNlCiAgIHsKKyAgICBoaTJjLT5QcmV2aW91c1N0YXRlID0gSTJDX1NUQVRFX05PTkU7CisKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhpMmMpOwogCkBAIC02MDQxLDMwICs2MTY3LDE2IEBACiAgIEkyQ19IYW5kbGVUeXBlRGVmICpoaTJjID0gKEkyQ19IYW5kbGVUeXBlRGVmICopKCgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50KTsgLyogRGVyb2dhdGlvbiBNSVNSQUMyMDEyLVJ1bGUtMTEuNSAqLwogCiAgIC8qIFJlc2V0IEFib3J0Q3BsdENhbGxiYWNrICovCi0gIGhpMmMtPmhkbWF0eC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwotICBoaTJjLT5oZG1hcngtPlhmZXJBYm9ydENhbGxiYWNrID0gTlVMTDsKLQotICAvKiBDaGVjayBpZiBjb21lIGZyb20gYWJvcnQgZnJvbSB1c2VyICovCi0gIGlmIChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0FCT1JUKQorICBpZiAoaGkyYy0+aGRtYXR4ICE9IE5VTEwpCiAgIHsKLSAgICBoaTJjLT5TdGF0ZSA9IEhBTF9JMkNfU1RBVEVfUkVBRFk7Ci0KLSAgICAvKiBDYWxsIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIHRvIGluZm9ybSB1cHBlciBsYXllciBvZiBFbmQgb2YgVHJhbnNmZXIgKi8KLSNpZiAoVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgaGkyYy0+QWJvcnRDcGx0Q2FsbGJhY2soaGkyYyk7Ci0jZWxzZQotICAgIEhBTF9JMkNfQWJvcnRDcGx0Q2FsbGJhY2soaGkyYyk7Ci0jZW5kaWYgLyogVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgaGkyYy0+aGRtYXR4LT5YZmVyQWJvcnRDYWxsYmFjayA9IE5VTEw7CiAgIH0KLSAgZWxzZQorICBpZiAoaGkyYy0+aGRtYXJ4ICE9IE5VTEwpCiAgIHsKLSAgICAvKiBDYWxsIHRoZSBjb3JyZXNwb25kaW5nIGNhbGxiYWNrIHRvIGluZm9ybSB1cHBlciBsYXllciBvZiBFbmQgb2YgVHJhbnNmZXIgKi8KLSNpZiAoVVNFX0hBTF9JMkNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCi0gICAgaGkyYy0+RXJyb3JDYWxsYmFjayhoaTJjKTsKLSNlbHNlCi0gICAgSEFMX0kyQ19FcnJvckNhbGxiYWNrKGhpMmMpOwotI2VuZGlmIC8qIFVTRV9IQUxfSTJDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgIGhpMmMtPmhkbWFyeC0+WGZlckFib3J0Q2FsbGJhY2sgPSBOVUxMOwogICB9CisKKyAgSTJDX1RyZWF0RXJyb3JDYWxsYmFjayhoaTJjKTsKIH0KIAogLyoqCkBAIC02MzQxLDE5ICs2NDUzLDE5IEBACiAgICAgICB0bXBpc3IgfD0gSTJDX0lUX0FERFJJIHwgSTJDX0lUX1NUT1BJIHwgSTJDX0lUX05BQ0tJIHwgSTJDX0lUX0VSUkk7CiAgICAgfQogCi0gICAgaWYgKChJbnRlcnJ1cHRSZXF1ZXN0ICYgSTJDX1hGRVJfRVJST1JfSVQpID09IEkyQ19YRkVSX0VSUk9SX0lUKQorICAgIGlmIChJbnRlcnJ1cHRSZXF1ZXN0ID09IEkyQ19YRkVSX0VSUk9SX0lUKQogICAgIHsKICAgICAgIC8qIEVuYWJsZSBFUlIgYW5kIE5BQ0sgaW50ZXJydXB0cyAqLwogICAgICAgdG1waXNyIHw9IEkyQ19JVF9FUlJJIHwgSTJDX0lUX05BQ0tJOwogICAgIH0KIAotICAgIGlmICgoSW50ZXJydXB0UmVxdWVzdCAmIEkyQ19YRkVSX0NQTFRfSVQpID09IEkyQ19YRkVSX0NQTFRfSVQpCisgICAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfQ1BMVF9JVCkKICAgICB7CiAgICAgICAvKiBFbmFibGUgU1RPUCBpbnRlcnJ1cHRzICovCi0gICAgICB0bXBpc3IgfD0gSTJDX0lUX1NUT1BJOworICAgICAgdG1waXNyIHw9IChJMkNfSVRfU1RPUEkgfCBJMkNfSVRfVENJKTsKICAgICB9CiAKLSAgICBpZiAoKEludGVycnVwdFJlcXVlc3QgJiBJMkNfWEZFUl9SRUxPQURfSVQpID09IEkyQ19YRkVSX1JFTE9BRF9JVCkKKyAgICBpZiAoSW50ZXJydXB0UmVxdWVzdCA9PSBJMkNfWEZFUl9SRUxPQURfSVQpCiAgICAgewogICAgICAgLyogRW5hYmxlIFRDIGludGVycnVwdHMgKi8KICAgICAgIHRtcGlzciB8PSBJMkNfSVRfVENJOwpAQCAtNjM3OSw3ICs2NDkxLDcgQEAKICAgICAgIHRtcGlzciB8PSBJMkNfSVRfRVJSSSB8IEkyQ19JVF9UQ0kgfCBJMkNfSVRfU1RPUEkgfCBJMkNfSVRfTkFDS0kgfCBJMkNfSVRfUlhJOwogICAgIH0KIAotICAgIGlmICgoSW50ZXJydXB0UmVxdWVzdCAmIEkyQ19YRkVSX0NQTFRfSVQpID09IEkyQ19YRkVSX0NQTFRfSVQpCisgICAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfQ1BMVF9JVCkKICAgICB7CiAgICAgICAvKiBFbmFibGUgU1RPUCBpbnRlcnJ1cHRzICovCiAgICAgICB0bXBpc3IgfD0gSTJDX0lUX1NUT1BJOwpAQCAtNjQzMywxOSArNjU0NSwxOSBAQAogICAgIHRtcGlzciB8PSBJMkNfSVRfQUREUkkgfCBJMkNfSVRfU1RPUEkgfCBJMkNfSVRfTkFDS0kgfCBJMkNfSVRfRVJSSTsKICAgfQogCi0gIGlmICgoSW50ZXJydXB0UmVxdWVzdCAmIEkyQ19YRkVSX0VSUk9SX0lUKSA9PSBJMkNfWEZFUl9FUlJPUl9JVCkKKyAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfRVJST1JfSVQpCiAgIHsKICAgICAvKiBFbmFibGUgRVJSIGFuZCBOQUNLIGludGVycnVwdHMgKi8KICAgICB0bXBpc3IgfD0gSTJDX0lUX0VSUkkgfCBJMkNfSVRfTkFDS0k7CiAgIH0KIAotICBpZiAoKEludGVycnVwdFJlcXVlc3QgJiBJMkNfWEZFUl9DUExUX0lUKSA9PSBJMkNfWEZFUl9DUExUX0lUKQorICBpZiAoSW50ZXJydXB0UmVxdWVzdCA9PSBJMkNfWEZFUl9DUExUX0lUKQogICB7CiAgICAgLyogRW5hYmxlIFNUT1AgaW50ZXJydXB0cyAqLwogICAgIHRtcGlzciB8PSBJMkNfSVRfU1RPUEk7CiAgIH0KIAotICBpZiAoKEludGVycnVwdFJlcXVlc3QgJiBJMkNfWEZFUl9SRUxPQURfSVQpID09IEkyQ19YRkVSX1JFTE9BRF9JVCkKKyAgaWYgKEludGVycnVwdFJlcXVlc3QgPT0gSTJDX1hGRVJfUkVMT0FEX0lUKQogICB7CiAgICAgLyogRW5hYmxlIFRDIGludGVycnVwdHMgKi8KICAgICB0bXBpc3IgfD0gSTJDX0lUX1RDSTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfaGFsX2kycy5jIGIvU3JjL3N0bTMyd2J4eF9oYWxfaTJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhMDc4MgotLS0gL2Rldi9udWxsCisrKyBiL1NyYy9zdG0zMndieHhfaGFsX2kycy5jCkBAIC0wLDAgKzEsMTgwMiBAQAorLyoqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBmaWxlICAgIHN0bTMyd2J4eF9oYWxfaTJzLmMKKyAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQorICAqIEBicmllZiAgIEkyUyBIQUwgbW9kdWxlIGRyaXZlci4KKyAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCisgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBJbnRlZ3JhdGVkIEludGVyY2hpcCBTb3VuZCAoSTJTKSBwZXJpcGhlcmFsOgorICAqICAgICAgICAgICArIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKKyAgKiAgICAgICAgICAgKyBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCisgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBhbmQgRXJyb3JzIGZ1bmN0aW9ucworICBAdmVyYmF0aW0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIFsuLl0KKyAgICBUaGUgSTJTIEhBTCBkcml2ZXIgY2FuIGJlIHVzZWQgYXMgZm9sbG93OgorCisgICAgKCMpIERlY2xhcmUgYSBJMlNfSGFuZGxlVHlwZURlZiBoYW5kbGUgc3RydWN0dXJlLgorICAgICgjKSBJbml0aWFsaXplIHRoZSBJMlMgbG93IGxldmVsIHJlc291cmNlcyBieSBpbXBsZW1lbnQgdGhlIEhBTF9JMlNfTXNwSW5pdCgpIEFQSToKKyAgICAgICAgKCMjKSBFbmFibGUgdGhlIFNQSXggaW50ZXJmYWNlIGNsb2NrLgorICAgICAgICAoIyMpIEkyUyBwaW5zIGNvbmZpZ3VyYXRpb246CisgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIGNsb2NrIGZvciB0aGUgSTJTIEdQSU9zLgorICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZXNlIEkyUyBwaW5zIGFzIGFsdGVybmF0ZSBmdW5jdGlvbiBwdWxsLXVwLgorICAgICAgICAoIyMpIE5WSUMgY29uZmlndXJhdGlvbiBpZiB5b3UgbmVlZCB0byB1c2UgaW50ZXJydXB0IHByb2Nlc3MgKEhBTF9JMlNfVHJhbnNtaXRfSVQoKQorICAgICAgICAgICAgIGFuZCBIQUxfSTJTX1JlY2VpdmVfSVQoKSBBUElzKS4KKyAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgSTJTeCBpbnRlcnJ1cHQgcHJpb3JpdHkuCisgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIE5WSUMgSTJTIElSUSBoYW5kbGUuCisgICAgICAgICgjIykgRE1BIENvbmZpZ3VyYXRpb24gaWYgeW91IG5lZWQgdG8gdXNlIERNQSBwcm9jZXNzIChIQUxfSTJTX1RyYW5zbWl0X0RNQSgpCisgICAgICAgICAgICAgYW5kIEhBTF9JMlNfUmVjZWl2ZV9ETUEoKSBBUElzOgorICAgICAgICAgICAgKCsrKykgRGVjbGFyZSBhIERNQSBoYW5kbGUgc3RydWN0dXJlIGZvciB0aGUgVHgvUnggU3RyZWFtL0NoYW5uZWwuCisgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIERNQXggaW50ZXJmYWNlIGNsb2NrLgorICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBkZWNsYXJlZCBETUEgaGFuZGxlIHN0cnVjdHVyZSB3aXRoIHRoZSByZXF1aXJlZCBUeC9SeCBwYXJhbWV0ZXJzLgorICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBETUEgVHgvUnggU3RyZWFtL0NoYW5uZWwuCisgICAgICAgICAgICAoKysrKSBBc3NvY2lhdGUgdGhlIGluaXRpYWxpemVkIERNQSBoYW5kbGUgdG8gdGhlIEkyUyBETUEgVHgvUnggaGFuZGxlLgorICAgICAgICAgICAgKCsrKykgQ29uZmlndXJlIHRoZSBwcmlvcml0eSBhbmQgZW5hYmxlIHRoZSBOVklDIGZvciB0aGUgdHJhbnNmZXIgY29tcGxldGUgaW50ZXJydXB0IG9uIHRoZQorICAgICAgICAgICAgICAgICAgRE1BIFR4L1J4IFN0cmVhbS9DaGFubmVsLgorCisgICAoIykgUHJvZ3JhbSB0aGUgTW9kZSwgU3RhbmRhcmQsIERhdGEgRm9ybWF0LCBNQ0xLIE91dHB1dCwgQXVkaW8gZnJlcXVlbmN5IGFuZCBQb2xhcml0eQorICAgICAgIHVzaW5nIEhBTF9JMlNfSW5pdCgpIGZ1bmN0aW9uLgorCisgICAtQC0gVGhlIHNwZWNpZmljIEkyUyBpbnRlcnJ1cHRzIChUcmFuc21pc3Npb24gY29tcGxldGUgaW50ZXJydXB0LAorICAgICAgIFJYTkUgaW50ZXJydXB0IGFuZCBFcnJvciBJbnRlcnJ1cHRzKSB3aWxsIGJlIG1hbmFnZWQgdXNpbmcgdGhlIG1hY3JvcworICAgICAgIF9fSEFMX0kyU19FTkFCTEVfSVQoKSBhbmQgX19IQUxfSTJTX0RJU0FCTEVfSVQoKSBpbnNpZGUgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHByb2Nlc3MuCisgICAtQC0gTWFrZSBzdXJlIHRoYXQgZWl0aGVyOgorICAgICAgICAoK0ApIFBMTFBDTEsgb3V0cHV0IGlzIGNvbmZpZ3VyZWQgb3IKKyAgICAgICAgKCtAKSBIU0kgaXMgZW5hYmxlZCBvcgorICAgICAgICAoK0ApIEV4dGVybmFsIGNsb2NrIHNvdXJjZSBpcyBjb25maWd1cmVkIGFmdGVyIHNldHRpbmcgY29ycmVjdGx5CisgICAgICAgICAgICAgdGhlIGRlZmluZSBjb25zdGFudCBFWFRFUk5BTF9DTE9DS19WQUxVRSBpbiB0aGUgc3RtMzJ3Ynh4X2hhbF9jb25mLmggZmlsZS4KKworICAgICgjKSBUaHJlZSBtb2RlIG9mIG9wZXJhdGlvbnMgYXJlIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBkcml2ZXIgOgorCisgICAqKiogUG9sbGluZyBtb2RlIElPIG9wZXJhdGlvbiAqKioKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgWy4uXQorICAgICAoKykgU2VuZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMlNfVHJhbnNtaXQoKQorICAgICAoKykgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMlNfUmVjZWl2ZSgpCisKKyAgICoqKiBJbnRlcnJ1cHQgbW9kZSBJTyBvcGVyYXRpb24gKioqCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgWy4uXQorICAgICAoKykgU2VuZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24gYmxvY2tpbmcgbW9kZSB1c2luZyBIQUxfSTJTX1RyYW5zbWl0X0lUKCkKKyAgICAgKCspIEF0IHRyYW5zbWlzc2lvbiBlbmQgb2YgaGFsZiB0cmFuc2ZlciBIQUxfSTJTX1R4SGFsZkNwbHRDYWxsYmFjayBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMlNfVHhIYWxmQ3BsdENhbGxiYWNrCisgICAgICgrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIHRyYW5zZmVyIEhBTF9JMlNfVHhDcGx0Q2FsbGJhY2sgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJTX1R4Q3BsdENhbGxiYWNrCisgICAgICgrKSBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbiBibG9ja2luZyBtb2RlIHVzaW5nIEhBTF9JMlNfUmVjZWl2ZV9JVCgpCisgICAgICgrKSBBdCByZWNlcHRpb24gZW5kIG9mIGhhbGYgdHJhbnNmZXIgSEFMX0kyU19SeEhhbGZDcGx0Q2FsbGJhY2sgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJTX1J4SGFsZkNwbHRDYWxsYmFjaworICAgICAoKykgQXQgcmVjZXB0aW9uIGVuZCBvZiB0cmFuc2ZlciBIQUxfSTJTX1J4Q3BsdENhbGxiYWNrIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyU19SeENwbHRDYWxsYmFjaworICAgICAoKykgSW4gY2FzZSBvZiB0cmFuc2ZlciBFcnJvciwgSEFMX0kyU19FcnJvckNhbGxiYWNrKCkgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJTX0Vycm9yQ2FsbGJhY2sKKworICAgKioqIERNQSBtb2RlIElPIG9wZXJhdGlvbiAqKioKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgWy4uXQorICAgICAoKykgU2VuZCBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24gYmxvY2tpbmcgbW9kZSAoRE1BKSB1c2luZyBIQUxfSTJTX1RyYW5zbWl0X0RNQSgpCisgICAgICgrKSBBdCB0cmFuc21pc3Npb24gZW5kIG9mIGhhbGYgdHJhbnNmZXIgSEFMX0kyU19UeEhhbGZDcGx0Q2FsbGJhY2sgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJTX1R4SGFsZkNwbHRDYWxsYmFjaworICAgICAoKykgQXQgdHJhbnNtaXNzaW9uIGVuZCBvZiB0cmFuc2ZlciBIQUxfSTJTX1R4Q3BsdENhbGxiYWNrIGlzIGV4ZWN1dGVkIGFuZCB1c2VyIGNhbgorICAgICAgICAgYWRkIGhpcyBvd24gY29kZSBieSBjdXN0b21pemF0aW9uIG9mIGZ1bmN0aW9uIHBvaW50ZXIgSEFMX0kyU19UeENwbHRDYWxsYmFjaworICAgICAoKykgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24gYmxvY2tpbmcgbW9kZSAoRE1BKSB1c2luZyBIQUxfSTJTX1JlY2VpdmVfRE1BKCkKKyAgICAgKCspIEF0IHJlY2VwdGlvbiBlbmQgb2YgaGFsZiB0cmFuc2ZlciBIQUxfSTJTX1J4SGFsZkNwbHRDYWxsYmFjayBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMlNfUnhIYWxmQ3BsdENhbGxiYWNrCisgICAgICgrKSBBdCByZWNlcHRpb24gZW5kIG9mIHRyYW5zZmVyIEhBTF9JMlNfUnhDcGx0Q2FsbGJhY2sgaXMgZXhlY3V0ZWQgYW5kIHVzZXIgY2FuCisgICAgICAgICBhZGQgaGlzIG93biBjb2RlIGJ5IGN1c3RvbWl6YXRpb24gb2YgZnVuY3Rpb24gcG9pbnRlciBIQUxfSTJTX1J4Q3BsdENhbGxiYWNrCisgICAgICgrKSBJbiBjYXNlIG9mIHRyYW5zZmVyIEVycm9yLCBIQUxfSTJTX0Vycm9yQ2FsbGJhY2soKSBmdW5jdGlvbiBpcyBleGVjdXRlZCBhbmQgdXNlciBjYW4KKyAgICAgICAgIGFkZCBoaXMgb3duIGNvZGUgYnkgY3VzdG9taXphdGlvbiBvZiBmdW5jdGlvbiBwb2ludGVyIEhBTF9JMlNfRXJyb3JDYWxsYmFjaworICAgICAoKykgUGF1c2UgdGhlIERNQSBUcmFuc2ZlciB1c2luZyBIQUxfSTJTX0RNQVBhdXNlKCkKKyAgICAgKCspIFJlc3VtZSB0aGUgRE1BIFRyYW5zZmVyIHVzaW5nIEhBTF9JMlNfRE1BUmVzdW1lKCkKKyAgICAgKCspIFN0b3AgdGhlIERNQSBUcmFuc2ZlciB1c2luZyBIQUxfSTJTX0RNQVN0b3AoKQorCisgICAqKiogSTJTIEhBTCBkcml2ZXIgbWFjcm9zIGxpc3QgKioqCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgWy4uXQorICAgICBCZWxvdyB0aGUgbGlzdCBvZiBtb3N0IHVzZWQgbWFjcm9zIGluIEkyUyBIQUwgZHJpdmVyLgorCisgICAgICAoKykgX19IQUxfSTJTX0VOQUJMRTogRW5hYmxlIHRoZSBzcGVjaWZpZWQgU1BJIHBlcmlwaGVyYWwgKGluIEkyUyBtb2RlKQorICAgICAgKCspIF9fSEFMX0kyU19ESVNBQkxFOiBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgU1BJIHBlcmlwaGVyYWwgKGluIEkyUyBtb2RlKQorICAgICAgKCspIF9fSEFMX0kyU19FTkFCTEVfSVQgOiBFbmFibGUgdGhlIHNwZWNpZmllZCBJMlMgaW50ZXJydXB0cworICAgICAgKCspIF9fSEFMX0kyU19ESVNBQkxFX0lUIDogRGlzYWJsZSB0aGUgc3BlY2lmaWVkIEkyUyBpbnRlcnJ1cHRzCisgICAgICAoKykgX19IQUxfSTJTX0dFVF9GTEFHOiBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgSTJTIGZsYWcgaXMgc2V0IG9yIG5vdAorCisgICAgWy4uXQorICAgICAgKEApIFlvdSBjYW4gcmVmZXIgdG8gdGhlIEkyUyBIQUwgZHJpdmVyIGhlYWRlciBmaWxlIGZvciBtb3JlIHVzZWZ1bCBtYWNyb3MKKworICAgKioqIEkyUyBIQUwgZHJpdmVyIG1hY3JvcyBsaXN0ICoqKgorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIFsuLl0KKyAgICAgICBDYWxsYmFjayByZWdpc3RyYXRpb246CisKKyAgICAgICgjKSBUaGUgY29tcGlsYXRpb24gZmxhZyBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMVUKKyAgICAgICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgorICAgICAgICAgIFVzZSBGdW5jdGlvbnMgSEFMX0kyU19SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYW4gaW50ZXJydXB0IGNhbGxiYWNrLgorCisgICAgICAgICAgRnVuY3Rpb24gSEFMX0kyU19SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgICAgICAgICAoKyspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IEkyUyBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBJMlMgVHggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IEkyUyBFcnJvciBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgOiBJMlMgTXNwIEluaXQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgIDogSTJTIE1zcCBEZUluaXQgY2FsbGJhY2sKKyAgICAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECisgICAgICAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KKworCisgICAgICAoIykgVXNlIGZ1bmN0aW9uIEhBTF9JMlNfVW5SZWdpc3RlckNhbGxiYWNrIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgICAgICB3ZWFrIGZ1bmN0aW9uLgorICAgICAgICAgIEhBTF9JMlNfVW5SZWdpc3RlckNhbGxiYWNrIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgICAgICAgICBhbmQgdGhlIENhbGxiYWNrIElELgorICAgICAgICAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRvIHJlc2V0IGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgICAgICAgICAoKyspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IEkyUyBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgIDogSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgOiBJMlMgVHggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgUnhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKyspIEVycm9yQ2FsbGJhY2sgICAgICAgICA6IEkyUyBFcnJvciBjYWxsYmFjaworICAgICAgICAgICAgKCsrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgOiBJMlMgTXNwIEluaXQgY2FsbGJhY2sKKyAgICAgICAgICAgICgrKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgIDogSTJTIE1zcCBEZUluaXQgY2FsbGJhY2sKKworICAgICAgIFsuLl0KKyAgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX0kyU19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9JMlNfU1RBVEVfUkVTRVQKKyAgICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6CisgICAgICAgZXhhbXBsZXMgSEFMX0kyU19NYXN0ZXJUeENwbHRDYWxsYmFjaygpLCBIQUxfSTJTX01hc3RlclJ4Q3BsdENhbGxiYWNrKCkuCisgICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUKKyAgICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgZnVuY3Rpb25zIGluIHRoZSBIQUxfSTJTX0luaXQoKS8gSEFMX0kyU19EZUluaXQoKSBvbmx5IHdoZW4KKyAgICAgICB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgICAgIElmIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9JMlNfSW5pdCgpLyBIQUxfSTJTX0RlSW5pdCgpCisgICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKSB3aGF0ZXZlciB0aGUgc3RhdGUuCisKKyAgICAgICBbLi5dCisgICAgICAgQ2FsbGJhY2tzIGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZCBpbiBIQUxfSTJTX1NUQVRFX1JFQURZIHN0YXRlIG9ubHkuCisgICAgICAgRXhjZXB0aW9uIGRvbmUgTXNwSW5pdC9Nc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCisgICAgICAgaW4gSEFMX0kyU19TVEFURV9SRUFEWSBvciBIQUxfSTJTX1NUQVRFX1JFU0VUIHN0YXRlLAorICAgICAgIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCisgICAgICAgVGhlbiwgdGhlIHVzZXIgZmlyc3QgcmVnaXN0ZXJzIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcworICAgICAgIHVzaW5nIEhBTF9JMlNfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEhBTF9JMlNfRGVJbml0KCkKKyAgICAgICBvciBIQUxfSTJTX0luaXQoKSBmdW5jdGlvbi4KKworICAgICAgIFsuLl0KKyAgICAgICBXaGVuIHRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCisgICAgICAgbm90IGRlZmluZWQsIHRoZSBjYWxsYmFjayByZWdpc3RlcmluZyBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUKKyAgICAgICBhbmQgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2tzIGFyZSB1c2VkLgorCisgIEBlbmR2ZXJiYXRpbQorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKKyAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovCisKKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaW5jbHVkZSAic3RtMzJ3Ynh4X2hhbC5oIgorCisjaWZkZWYgSEFMX0kyU19NT0RVTEVfRU5BQkxFRAorCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJXQnh4X0hBTF9Ecml2ZXIKKyAgKiBAeworICAqLworCisvKiogQGRlZmdyb3VwIEkyUyBJMlMKKyAgKiBAYnJpZWYgSTJTIEhBTCBtb2R1bGUgZHJpdmVyCisgICogQHsKKyAgKi8KKworLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIEkyU19Qcml2YXRlX0Z1bmN0aW9ucyBJMlMgUHJpdmF0ZSBGdW5jdGlvbnMKKyAgKiBAeworICAqLworc3RhdGljIHZvaWQgICAgICAgICAgICAgICBJMlNfRE1BVHhDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgICAgSTJTX0RNQVR4SGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgICAgICAgICAgICAgICBJMlNfRE1BUnhDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkICAgICAgICAgICAgICAgSTJTX0RNQVJ4SGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgICAgICAgICAgICAgICBJMlNfRE1BRXJyb3IoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgICAgICAgICAgICAgICBJMlNfVHJhbnNtaXRfSVQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOworc3RhdGljIHZvaWQgICAgICAgICAgICAgICBJMlNfUmVjZWl2ZV9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgIEkyU19XYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBUaW1lb3V0KTsKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiogQGRlZmdyb3VwIEkyU19FeHBvcnRlZF9GdW5jdGlvbnMgSTJTIEV4cG9ydGVkIEZ1bmN0aW9ucworICAqIEB7CisgICovCisKKy8qKiBAZGVmZ3JvdXAgIEkyU19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKKyAgKiAgQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCitAdmVyYmF0aW0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICMjIyMjIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgIyMjIyMKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXSAgVGhpcyBzdWJzZWN0aW9uIHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBpbml0aWFsaXplIGFuZAorICAgICAgICAgIGRlLWluaXRpYWxpemUgdGhlIEkyU3ggcGVyaXBoZXJhbCBpbiBzaW1wbGV4IG1vZGU6CisKKyAgICAgICgrKSBVc2VyIG11c3QgSW1wbGVtZW50IEhBTF9JMlNfTXNwSW5pdCgpIGZ1bmN0aW9uIGluIHdoaWNoIGhlIGNvbmZpZ3VyZXMKKyAgICAgICAgICBhbGwgcmVsYXRlZCBwZXJpcGhlcmFscyByZXNvdXJjZXMgKENMT0NLLCBHUElPLCBETUEsIElUIGFuZCBOVklDICkuCisKKyAgICAgICgrKSBDYWxsIHRoZSBmdW5jdGlvbiBIQUxfSTJTX0luaXQoKSB0byBjb25maWd1cmUgdGhlIHNlbGVjdGVkIGRldmljZSB3aXRoCisgICAgICAgICAgdGhlIHNlbGVjdGVkIGNvbmZpZ3VyYXRpb246CisgICAgICAgICgrKykgTW9kZQorICAgICAgICAoKyspIFN0YW5kYXJkCisgICAgICAgICgrKykgRGF0YSBGb3JtYXQKKyAgICAgICAgKCsrKSBNQ0xLIE91dHB1dAorICAgICAgICAoKyspIEF1ZGlvIGZyZXF1ZW5jeQorICAgICAgICAoKyspIFBvbGFyaXR5CisKKyAgICAgKCspIENhbGwgdGhlIGZ1bmN0aW9uIEhBTF9JMlNfRGVJbml0KCkgdG8gcmVzdG9yZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCisgICAgICAgICAgb2YgdGhlIHNlbGVjdGVkIEkyU3ggcGVyaXBoZXJhbC4KKyAgQGVuZHZlcmJhdGltCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgSTJTIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMKKyAgKiAgICAgICAgIGluIHRoZSBJMlNfSW5pdFR5cGVEZWYgYW5kIGNyZWF0ZSB0aGUgYXNzb2NpYXRlZCBoYW5kbGUuCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfSW5pdChJMlNfSGFuZGxlVHlwZURlZiAqaGkycykKK3sKKyAgdWludDMyX3QgaTJzZGl2OworICB1aW50MzJfdCBpMnNvZGQ7CisgIHVpbnQzMl90IHBhY2tldGxlbmd0aDsKKyAgdWludDMyX3QgdG1wOworICB1aW50MzJfdCBpMnNjbGsgPSAwVTsKKworICAvKiBDaGVjayB0aGUgSTJTIGhhbmRsZSBhbGxvY2F0aW9uICovCisgIGlmIChoaTJzID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgdGhlIEkyUyBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19JMlNfQUxMX0lOU1RBTkNFKGhpMnMtPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19JMlNfTU9ERShoaTJzLT5Jbml0Lk1vZGUpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0kyU19TVEFOREFSRChoaTJzLT5Jbml0LlN0YW5kYXJkKSk7CisgIGFzc2VydF9wYXJhbShJU19JMlNfREFUQV9GT1JNQVQoaGkycy0+SW5pdC5EYXRhRm9ybWF0KSk7CisgIGFzc2VydF9wYXJhbShJU19JMlNfTUNMS19PVVRQVVQoaGkycy0+SW5pdC5NQ0xLT3V0cHV0KSk7CisgIGFzc2VydF9wYXJhbShJU19JMlNfQVVESU9fRlJFUShoaTJzLT5Jbml0LkF1ZGlvRnJlcSkpOworICBhc3NlcnRfcGFyYW0oSVNfSTJTX0NQT0woaGkycy0+SW5pdC5DUE9MKSk7CisKKyAgaWYgKGhpMnMtPlN0YXRlID09IEhBTF9JMlNfU1RBVEVfUkVTRVQpCisgIHsKKyAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCisgICAgaGkycy0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKKworI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgICAgLyogSW5pdCB0aGUgSTJTIENhbGxiYWNrIHNldHRpbmdzICovCisgICAgaGkycy0+VHhDcGx0Q2FsbGJhY2sgICAgICAgPSBIQUxfSTJTX1R4Q3BsdENhbGxiYWNrOyAgICAgICAgICAvKiBMZWdhY3kgd2VhayBUeENwbHRDYWxsYmFjayAgICAgICAqLworICAgIGhpMnMtPlJ4Q3BsdENhbGxiYWNrICAgICAgID0gSEFMX0kyU19SeENwbHRDYWxsYmFjazsgICAgICAgICAgLyogTGVnYWN5IHdlYWsgUnhDcGx0Q2FsbGJhY2sgICAgICAgKi8KKyAgICBoaTJzLT5UeEhhbGZDcGx0Q2FsbGJhY2sgICA9IEhBTF9JMlNfVHhIYWxmQ3BsdENhbGxiYWNrOyAgICAgIC8qIExlZ2FjeSB3ZWFrIFR4SGFsZkNwbHRDYWxsYmFjayAgICovCisgICAgaGkycy0+UnhIYWxmQ3BsdENhbGxiYWNrICAgPSBIQUxfSTJTX1J4SGFsZkNwbHRDYWxsYmFjazsgICAgICAvKiBMZWdhY3kgd2VhayBSeEhhbGZDcGx0Q2FsbGJhY2sgICAqLworICAgIGhpMnMtPkVycm9yQ2FsbGJhY2sgICAgICAgID0gSEFMX0kyU19FcnJvckNhbGxiYWNrOyAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgRXJyb3JDYWxsYmFjayAgICAgICAgKi8KKworICAgIGlmIChoaTJzLT5Nc3BJbml0Q2FsbGJhY2sgPT0gTlVMTCkKKyAgICB7CisgICAgICBoaTJzLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfSTJTX01zcEluaXQ7IC8qIExlZ2FjeSB3ZWFrIE1zcEluaXQgICovCisgICAgfQorCisgICAgLyogSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlIDogR1BJTywgQ0xPQ0ssIE5WSUMuLi4gKi8KKyAgICBoaTJzLT5Nc3BJbml0Q2FsbGJhY2soaGkycyk7CisjZWxzZQorICAgIC8qIEluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSA6IEdQSU8sIENMT0NLLCBDT1JURVguLi5ldGMgKi8KKyAgICBIQUxfSTJTX01zcEluaXQoaGkycyk7CisjZW5kaWYgLyogVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgIH0KKworICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfQlVTWTsKKworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNQSXggSTJTQ0ZHUiAmIEkyU1BSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLSovCisgIC8qIENsZWFyIEkyU01PRCwgSTJTRSwgSTJTQ0ZHLCBQQ01TWU5DLCBJMlNTVEQsIENLUE9MLCBEQVRMRU4gYW5kIENITEVOIGJpdHMgKi8KKyAgQ0xFQVJfQklUKGhpMnMtPkluc3RhbmNlLT5JMlNDRkdSLCAoU1BJX0kyU0NGR1JfQ0hMRU4gfCBTUElfSTJTQ0ZHUl9EQVRMRU4gfCBTUElfSTJTQ0ZHUl9DS1BPTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0kyU0NGR1JfSTJTU1REIHwgU1BJX0kyU0NGR1JfUENNU1lOQyB8IFNQSV9JMlNDRkdSX0kyU0NGRyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0kyU0NGR1JfSTJTRSB8IFNQSV9JMlNDRkdSX0kyU01PRCkpOworICBoaTJzLT5JbnN0YW5jZS0+STJTUFIgPSAweDAwMDJVOworCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSTJTUFI6IEkyU0RJViBhbmQgT0REIENhbGN1bGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgLyogSWYgdGhlIHJlcXVlc3RlZCBhdWRpbyBmcmVxdWVuY3kgaXMgbm90IHRoZSBkZWZhdWx0LCBjb21wdXRlIHRoZSBwcmVzY2FsZXIgKi8KKyAgaWYgKGhpMnMtPkluaXQuQXVkaW9GcmVxICE9IEkyU19BVURJT0ZSRVFfREVGQVVMVCkKKyAgeworICAgIC8qIENoZWNrIHRoZSBmcmFtZSBsZW5ndGggKEZvciB0aGUgUHJlc2NhbGVyIGNvbXB1dGluZykgKioqKioqKioqKioqKioqKioqKiovCisgICAgaWYgKGhpMnMtPkluaXQuRGF0YUZvcm1hdCA9PSBJMlNfREFUQUZPUk1BVF8xNkIpCisgICAgeworICAgICAgLyogUGFja2V0IGxlbmd0aCBpcyAxNiBiaXRzICovCisgICAgICBwYWNrZXRsZW5ndGggPSAxNlU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBQYWNrZXQgbGVuZ3RoIGlzIDMyIGJpdHMgKi8KKyAgICAgIHBhY2tldGxlbmd0aCA9IDMyVTsKKyAgICB9CisKKyAgICAvKiBJMlMgc3RhbmRhcmQgKi8KKyAgICBpZiAoaGkycy0+SW5pdC5TdGFuZGFyZCA8PSBJMlNfU1RBTkRBUkRfTFNCKQorICAgIHsKKyAgICAgIC8qIEluIEkyUyBzdGFuZGFyZCBwYWNrZXQgbGVuZ2h0IGlzIG11bHRpcGxpZWQgYnkgMiAqLworICAgICAgcGFja2V0bGVuZ3RoID0gcGFja2V0bGVuZ3RoICogMlU7CisgICAgfQorCisgICAgLyogR2V0IHRoZSBzb3VyY2UgY2xvY2sgdmFsdWU6IGJhc2VkIG9uIFN5c3RlbSBDbG9jayB2YWx1ZSAqLworICAgIGkyc2NsayA9IEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKFJDQ19QRVJJUEhDTEtfSTJTKTsKKworICAgIC8qIENvbXB1dGUgdGhlIFJlYWwgZGl2aWRlciBkZXBlbmRpbmcgb24gdGhlIE1DTEsgb3V0cHV0IHN0YXRlLCB3aXRoIGEgZmxvYXRpbmcgcG9pbnQgKi8KKyAgICBpZiAoaGkycy0+SW5pdC5NQ0xLT3V0cHV0ID09IEkyU19NQ0xLT1VUUFVUX0VOQUJMRSkKKyAgICB7CisgICAgICAvKiBNQ0xLIG91dHB1dCBpcyBlbmFibGVkICovCisgICAgICBpZiAoaGkycy0+SW5pdC5EYXRhRm9ybWF0ICE9IEkyU19EQVRBRk9STUFUXzE2QikKKyAgICAgIHsKKyAgICAgICAgdG1wID0gKHVpbnQzMl90KSgoKCgoaTJzY2xrIC8gKHBhY2tldGxlbmd0aCAqIDRVKSkgKiAxMFUpIC8gaGkycy0+SW5pdC5BdWRpb0ZyZXEpKSArIDVVKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgdG1wID0gKHVpbnQzMl90KSgoKCgoaTJzY2xrIC8gKHBhY2tldGxlbmd0aCAqIDhVKSkgKiAxMFUpIC8gaGkycy0+SW5pdC5BdWRpb0ZyZXEpKSArIDVVKTsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIE1DTEsgb3V0cHV0IGlzIGRpc2FibGVkICovCisgICAgICB0bXAgPSAodWludDMyX3QpKCgoKChpMnNjbGsgLyBwYWNrZXRsZW5ndGgpICogMTBVKSAvIGhpMnMtPkluaXQuQXVkaW9GcmVxKSkgKyA1VSk7CisgICAgfQorCisgICAgLyogUmVtb3ZlIHRoZSBmbGF0dGluZyBwb2ludCAqLworICAgIHRtcCA9IHRtcCAvIDEwVTsKKworICAgIC8qIENoZWNrIHRoZSBwYXJpdHkgb2YgdGhlIGRpdmlkZXIgKi8KKyAgICBpMnNvZGQgPSAodWludDMyX3QpKHRtcCAmICh1aW50MzJfdCkxVSk7CisKKyAgICAvKiBDb21wdXRlIHRoZSBpMnNkaXYgcHJlc2NhbGVyICovCisgICAgaTJzZGl2ID0gKHVpbnQzMl90KSgodG1wIC0gaTJzb2RkKSAvIDJVKTsKKworICAgIC8qIEdldCB0aGUgTWFzayBmb3IgdGhlIE9kZCBiaXQgKFNQSV9JMlNQUls4XSkgcmVnaXN0ZXIgKi8KKyAgICBpMnNvZGQgPSAodWludDMyX3QpKGkyc29kZCA8PCA4VSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyAqLworICAgIGkyc2RpdiA9IDJVOworICAgIGkyc29kZCA9IDBVOworICB9CisKKyAgLyogVGVzdCBpZiB0aGUgZGl2aWRlciBpcyAxIG9yIDAgb3IgZ3JlYXRlciB0aGFuIDB4RkYgKi8KKyAgaWYgKChpMnNkaXYgPCAyVSkgfHwgKGkyc2RpdiA+IDB4RkZVKSkKKyAgeworICAgIC8qIFNldCB0aGUgZXJyb3IgY29kZSBhbmQgZXhlY3V0ZSBlcnJvciBjYWxsYmFjayovCisgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfUFJFU0NBTEVSKTsKKyAgICByZXR1cm4gIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1BJeCBJMlNDRkdSICYgSTJTUFIgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tKi8KKworICAvKiBXcml0ZSB0byBTUEl4IEkyU1BSIHJlZ2lzdGVyIHRoZSBjb21wdXRlZCB2YWx1ZSAqLworICBoaTJzLT5JbnN0YW5jZS0+STJTUFIgPSAodWludDMyX3QpKCh1aW50MzJfdClpMnNkaXYgfCAodWludDMyX3QpKGkyc29kZCB8ICh1aW50MzJfdCloaTJzLT5Jbml0Lk1DTEtPdXRwdXQpKTsKKworICAvKiBDbGVhciBJMlNNT0QsIEkyU0UsIEkyU0NGRywgUENNU1lOQywgSTJTU1RELCBDS1BPTCwgREFUTEVOIGFuZCBDSExFTiBiaXRzICovCisgIC8qIEFuZCBjb25maWd1cmUgdGhlIEkyUyB3aXRoIHRoZSBJMlNfSW5pdFN0cnVjdCB2YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgTU9ESUZZX1JFRyhoaTJzLT5JbnN0YW5jZS0+STJTQ0ZHUiwgKFNQSV9JMlNDRkdSX0NITEVOIHwgU1BJX0kyU0NGR1JfREFUTEVOIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0kyU0NGR1JfQ0tQT0wgfCBTUElfSTJTQ0ZHUl9JMlNTVEQgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUElfSTJTQ0ZHUl9QQ01TWU5DIHwgU1BJX0kyU0NGR1JfSTJTQ0ZHIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0kyU0NGR1JfSTJTRSAgfCBTUElfSTJTQ0ZHUl9JMlNNT0QpLCBcCisgICAgICAgICAgICAgKFNQSV9JMlNDRkdSX0kyU01PRCB8IGhpMnMtPkluaXQuTW9kZSB8IFwKKyAgICAgICAgICAgICAgaGkycy0+SW5pdC5TdGFuZGFyZCB8IGhpMnMtPkluaXQuRGF0YUZvcm1hdCB8IFwKKyAgICAgICAgICAgICAgaGkycy0+SW5pdC5DUE9MKSk7CisKKyNpZiBkZWZpbmVkKFNQSV9JMlNDRkdSX0FTVFJURU4pCisgIGlmICgoaGkycy0+SW5pdC5TdGFuZGFyZCA9PSBJMlNfU1RBTkRBUkRfUENNX1NIT1JUKSB8fCAoKGhpMnMtPkluaXQuU3RhbmRhcmQgPT0gSTJTX1NUQU5EQVJEX1BDTV9MT05HKSkpCisgIHsKKyAgICAvKiBXcml0ZSB0byBTUEl4IEkyU0NGR1IgKi8KKyAgICBTRVRfQklUKGhpMnMtPkluc3RhbmNlLT5JMlNDRkdSLCBTUElfSTJTQ0ZHUl9BU1RSVEVOKTsKKyAgfQorI2VuZGlmIC8qIFNQSV9JMlNDRkdSX0FTVFJURU4gKi8KKworICBoaTJzLT5FcnJvckNvZGUgPSBIQUxfSTJTX0VSUk9SX05PTkU7CisgIGhpMnMtPlN0YXRlICAgICA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisKKyAgcmV0dXJuIEhBTF9PSzsKK30KKworLyoqCisgICogQGJyaWVmIERlSW5pdGlhbGl6ZXMgdGhlIEkyUyBwZXJpcGhlcmFsCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfRGVJbml0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKQoreworICAvKiBDaGVjayB0aGUgSTJTIGhhbmRsZSBhbGxvY2F0aW9uICovCisgIGlmIChoaTJzID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0kyU19BTExfSU5TVEFOQ0UoaGkycy0+SW5zdGFuY2UpKTsKKworICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfQlVTWTsKKworICAvKiBEaXNhYmxlIHRoZSBJMlMgUGVyaXBoZXJhbCBDbG9jayAqLworICBfX0hBTF9JMlNfRElTQUJMRShoaTJzKTsKKworI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgIGlmIChoaTJzLT5Nc3BEZUluaXRDYWxsYmFjayA9PSBOVUxMKQorICB7CisgICAgaGkycy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfSTJTX01zcERlSW5pdDsgLyogTGVnYWN5IHdlYWsgTXNwRGVJbml0ICAqLworICB9CisKKyAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmU6IEdQSU8sIENMT0NLLCBOVklDLi4uICovCisgIGhpMnMtPk1zcERlSW5pdENhbGxiYWNrKGhpMnMpOworI2Vsc2UKKyAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmU6IEdQSU8sIENMT0NLLCBOVklDLi4uICovCisgIEhBTF9JMlNfTXNwRGVJbml0KGhpMnMpOworI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisgIGhpMnMtPkVycm9yQ29kZSA9IEhBTF9JMlNfRVJST1JfTk9ORTsKKyAgaGkycy0+U3RhdGUgICAgID0gSEFMX0kyU19TVEFURV9SRVNFVDsKKworICAvKiBSZWxlYXNlIExvY2sgKi8KKyAgX19IQUxfVU5MT0NLKGhpMnMpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiBJMlMgTVNQIEluaXQKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0kyU19Nc3BJbml0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChoaTJzKTsKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBTaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0kyU19Nc3BJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKyAgICovCit9CisKKy8qKgorICAqIEBicmllZiBJMlMgTVNQIERlSW5pdAorICAqIEBwYXJhbSAgaGkycyBwb2ludGVyIHRvIGEgSTJTX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBJMlMgbW9kdWxlCisgICogQHJldHZhbCBOb25lCisgICovCitfX3dlYWsgdm9pZCBIQUxfSTJTX01zcERlSW5pdChJMlNfSGFuZGxlVHlwZURlZiAqaGkycykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaGkycyk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9JMlNfTXNwRGVJbml0IGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKyAgICovCit9CisKKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorLyoqCisgICogQGJyaWVmICBSZWdpc3RlciBhIFVzZXIgSTJTIENhbGxiYWNrCisgICogICAgICAgICBUbyBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjaworICAqIEBwYXJhbSAgaGkycyBQb2ludGVyIHRvIGEgSTJTX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJMlMuCisgICogQHBhcmFtICBDYWxsYmFja0lEIElEIG9mIHRoZSBjYWxsYmFjayB0byBiZSByZWdpc3RlcmVkCisgICogQHBhcmFtICBwQ2FsbGJhY2sgcG9pbnRlciB0byB0aGUgQ2FsbGJhY2sgZnVuY3Rpb24KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfUmVnaXN0ZXJDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgSEFMX0kyU19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJMlNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK3sKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCisgIGlmIChwQ2FsbGJhY2sgPT0gTlVMTCkKKyAgeworICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgIGhpMnMtPkVycm9yQ29kZSB8PSBIQUxfSTJTX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIC8qIFByb2Nlc3MgbG9ja2VkICovCisgIF9fSEFMX0xPQ0soaGkycyk7CisKKyAgaWYgKEhBTF9JMlNfU1RBVEVfUkVBRFkgPT0gaGkycy0+U3RhdGUpCisgIHsKKyAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCisgICAgeworICAgICAgY2FzZSBIQUxfSTJTX1RYX0NPTVBMRVRFX0NCX0lEIDoKKyAgICAgICAgaGkycy0+VHhDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9JMlNfUlhfQ09NUExFVEVfQ0JfSUQgOgorICAgICAgICBoaTJzLT5SeENwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0kyU19UWF9IQUxGX0NPTVBMRVRFX0NCX0lEIDoKKyAgICAgICAgaGkycy0+VHhIYWxmQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfSTJTX1JYX0hBTEZfQ09NUExFVEVfQ0JfSUQgOgorICAgICAgICBoaTJzLT5SeEhhbGZDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9JMlNfRVJST1JfQ0JfSUQgOgorICAgICAgICBoaTJzLT5FcnJvckNhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfSTJTX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoaTJzLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9JMlNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGkycy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0spOworCisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgaWYgKEhBTF9JMlNfU1RBVEVfUkVTRVQgPT0gaGkycy0+U3RhdGUpCisgIHsKKyAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCisgICAgeworICAgICAgY2FzZSBIQUxfSTJTX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoaTJzLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9JMlNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGkycy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0spOworCisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0spOworCisgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgIH0KKworICAvKiBSZWxlYXNlIExvY2sgKi8KKyAgX19IQUxfVU5MT0NLKGhpMnMpOworICByZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAgKiBAYnJpZWYgIFVucmVnaXN0ZXIgYW4gSTJTIENhbGxiYWNrCisgICogICAgICAgICBJMlMgY2FsbGJhY2sgaXMgcmVkaXJlY3RlZCB0byB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrCisgICogQHBhcmFtICBoaTJzIFBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIEkyUy4KKyAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19VblJlZ2lzdGVyQ2FsbGJhY2soSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIEhBTF9JMlNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCkKK3sKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCisgIC8qIFByb2Nlc3MgbG9ja2VkICovCisgIF9fSEFMX0xPQ0soaGkycyk7CisKKyAgaWYgKEhBTF9JMlNfU1RBVEVfUkVBRFkgPT0gaGkycy0+U3RhdGUpCisgIHsKKyAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCisgICAgeworICAgICAgY2FzZSBIQUxfSTJTX1RYX0NPTVBMRVRFX0NCX0lEIDoKKyAgICAgICAgaGkycy0+VHhDcGx0Q2FsbGJhY2sgPSBIQUxfSTJTX1R4Q3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBUeENwbHRDYWxsYmFjayAgICAgICAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfSTJTX1JYX0NPTVBMRVRFX0NCX0lEIDoKKyAgICAgICAgaGkycy0+UnhDcGx0Q2FsbGJhY2sgPSBIQUxfSTJTX1J4Q3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBSeENwbHRDYWxsYmFjayAgICAgICAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfSTJTX1RYX0hBTEZfQ09NUExFVEVfQ0JfSUQgOgorICAgICAgICBoaTJzLT5UeEhhbGZDcGx0Q2FsbGJhY2sgPSBIQUxfSTJTX1R4SGFsZkNwbHRDYWxsYmFjazsgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFR4SGFsZkNwbHRDYWxsYmFjayAgICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9JMlNfUlhfSEFMRl9DT01QTEVURV9DQl9JRCA6CisgICAgICAgIGhpMnMtPlJ4SGFsZkNwbHRDYWxsYmFjayA9IEhBTF9JMlNfUnhIYWxmQ3BsdENhbGxiYWNrOyAgICAgICAgLyogTGVnYWN5IHdlYWsgUnhIYWxmQ3BsdENhbGxiYWNrICAgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0kyU19FUlJPUl9DQl9JRCA6CisgICAgICAgIGhpMnMtPkVycm9yQ2FsbGJhY2sgPSBIQUxfSTJTX0Vycm9yQ2FsbGJhY2s7ICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgRXJyb3JDYWxsYmFjayAgICAgICAgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0kyU19NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGkycy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0kyU19Nc3BJbml0OyAgICAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBNc3BJbml0ICAgICAgICAgICAgICAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfSTJTX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhpMnMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0kyU19Nc3BEZUluaXQ7ICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgTXNwRGVJbml0ICAgICAgICAgICAgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSyk7CisKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoSEFMX0kyU19TVEFURV9SRVNFVCA9PSBoaTJzLT5TdGF0ZSkKKyAgeworICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKKyAgICB7CisgICAgICBjYXNlIEhBTF9JMlNfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhpMnMtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9JMlNfTXNwSW5pdDsgICAgICAgICAgICAgICAgICAgICAgLyogTGVnYWN5IHdlYWsgTXNwSW5pdCAgICAgICAgICAgICAgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0kyU19NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBoaTJzLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9JMlNfTXNwRGVJbml0OyAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIE1zcERlSW5pdCAgICAgICAgICAgICovCisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0spOworCisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0spOworCisgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgIH0KKworICAvKiBSZWxlYXNlIExvY2sgKi8KKyAgX19IQUxfVU5MT0NLKGhpMnMpOworICByZXR1cm4gc3RhdHVzOworfQorI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBJMlNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBJTyBvcGVyYXRpb24gZnVuY3Rpb25zCisgICogIEBicmllZiBEYXRhIHRyYW5zZmVycyBmdW5jdGlvbnMKKyAgKgorQHZlcmJhdGltCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICMjIyMjIElPIG9wZXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgIFRoaXMgc3Vic2VjdGlvbiBwcm92aWRlcyBhIHNldCBvZiBmdW5jdGlvbnMgYWxsb3dpbmcgdG8gbWFuYWdlIHRoZSBJMlMgZGF0YQorICAgIHRyYW5zZmVycy4KKworICAgICgjKSBUaGVyZSBhcmUgdHdvIG1vZGVzIG9mIHRyYW5zZmVyOgorICAgICAgICgrKykgQmxvY2tpbmcgbW9kZSA6IFRoZSBjb21tdW5pY2F0aW9uIGlzIHBlcmZvcm1lZCBpbiB0aGUgcG9sbGluZyBtb2RlLgorICAgICAgICAgICAgVGhlIHN0YXR1cyBvZiBhbGwgZGF0YSBwcm9jZXNzaW5nIGlzIHJldHVybmVkIGJ5IHRoZSBzYW1lIGZ1bmN0aW9uCisgICAgICAgICAgICBhZnRlciBmaW5pc2hpbmcgdHJhbnNmZXIuCisgICAgICAgKCsrKSBOby1CbG9ja2luZyBtb2RlIDogVGhlIGNvbW11bmljYXRpb24gaXMgcGVyZm9ybWVkIHVzaW5nIEludGVycnVwdHMKKyAgICAgICAgICAgIG9yIERNQS4gVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSB0cmFuc2ZlciBzdGFydHVwLgorICAgICAgICAgICAgVGhlIGVuZCBvZiB0aGUgZGF0YSBwcm9jZXNzaW5nIHdpbGwgYmUgaW5kaWNhdGVkIHRocm91Z2ggdGhlCisgICAgICAgICAgICBkZWRpY2F0ZWQgSTJTIElSUSB3aGVuIHVzaW5nIEludGVycnVwdCBtb2RlIG9yIHRoZSBETUEgSVJRIHdoZW4KKyAgICAgICAgICAgIHVzaW5nIERNQSBtb2RlLgorCisgICAgKCMpIEJsb2NraW5nIG1vZGUgZnVuY3Rpb25zIGFyZSA6CisgICAgICAgICgrKykgSEFMX0kyU19UcmFuc21pdCgpCisgICAgICAgICgrKykgSEFMX0kyU19SZWNlaXZlKCkKKworICAgICgjKSBOby1CbG9ja2luZyBtb2RlIGZ1bmN0aW9ucyB3aXRoIEludGVycnVwdCBhcmUgOgorICAgICAgICAoKyspIEhBTF9JMlNfVHJhbnNtaXRfSVQoKQorICAgICAgICAoKyspIEhBTF9JMlNfUmVjZWl2ZV9JVCgpCisKKyAgICAoIykgTm8tQmxvY2tpbmcgbW9kZSBmdW5jdGlvbnMgd2l0aCBETUEgYXJlIDoKKyAgICAgICAgKCsrKSBIQUxfSTJTX1RyYW5zbWl0X0RNQSgpCisgICAgICAgICgrKykgSEFMX0kyU19SZWNlaXZlX0RNQSgpCisKKyAgICAoIykgQSBzZXQgb2YgVHJhbnNmZXIgQ29tcGxldGUgQ2FsbGJhY2tzIGFyZSBwcm92aWRlZCBpbiBub24gQmxvY2tpbmcgbW9kZToKKyAgICAgICAgKCsrKSBIQUxfSTJTX1R4Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgKCsrKSBIQUxfSTJTX1J4Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgKCsrKSBIQUxfSTJTX0Vycm9yQ2FsbGJhY2soKQorCitAZW5kdmVyYmF0aW0KKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIFRyYW5zbWl0IGFuIGFtb3VudCBvZiBkYXRhIGluIGJsb2NraW5nIG1vZGUKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEBwYXJhbSAgcERhdGEgYSAxNi1iaXQgcG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KKyAgKiBAcGFyYW0gIFNpemUgbnVtYmVyIG9mIGRhdGEgc2FtcGxlIHRvIGJlIHNlbnQ6CisgICogQG5vdGUgICBXaGVuIGEgMTYtYml0IGRhdGEgZnJhbWUgb3IgYSAxNi1iaXQgZGF0YSBmcmFtZSBleHRlbmRlZCBpcyBzZWxlY3RlZCBkdXJpbmcgdGhlIEkyUworICAqICAgICAgICAgY29uZmlndXJhdGlvbiBwaGFzZSwgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoCisgICogICAgICAgICBpbiB0aGUgdHJhbnNhY3Rpb24gYW5kIHdoZW4gYSAyNC1iaXQgZGF0YSBmcmFtZSBvciBhIDMyLWJpdCBkYXRhIGZyYW1lIGlzIHNlbGVjdGVkCisgICogICAgICAgICB0aGUgU2l6ZSBwYXJhbWV0ZXIgbWVhbnMgdGhlIG51bWJlciBvZiAxNi1iaXQgZGF0YSBsZW5ndGguCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KKyAgKiBAbm90ZSAgIFRoZSBJMlMgaXMga2VwdCBlbmFibGVkIGF0IHRoZSBlbmQgb2YgdHJhbnNhY3Rpb24gdG8gYXZvaWQgdGhlIGNsb2NrIGRlLXN5bmNocm9uaXphdGlvbgorICAqICAgICAgICAgYmV0d2VlbiBNYXN0ZXIgYW5kIFNsYXZlKGV4YW1wbGU6IGF1ZGlvIHN0cmVhbWluZykuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX1RyYW5zbWl0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCit7CisgIHVpbnQzMl90IHRtcHJlZ19jZmdyOworCisgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpKQorICB7CisgICAgcmV0dXJuICBIQUxfRVJST1I7CisgIH0KKworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhpMnMpOworCisgIGlmIChoaTJzLT5TdGF0ZSAhPSBIQUxfSTJTX1NUQVRFX1JFQURZKQorICB7CisgICAgX19IQUxfVU5MT0NLKGhpMnMpOworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorCisgIC8qIFNldCBzdGF0ZSBhbmQgcmVzZXQgZXJyb3IgY29kZSAqLworICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfQlVTWV9UWDsKKyAgaGkycy0+RXJyb3JDb2RlID0gSEFMX0kyU19FUlJPUl9OT05FOworICBoaTJzLT5wVHhCdWZmUHRyID0gcERhdGE7CisKKyAgdG1wcmVnX2NmZ3IgPSBoaTJzLT5JbnN0YW5jZS0+STJTQ0ZHUiAmIChTUElfSTJTQ0ZHUl9EQVRMRU4gfCBTUElfSTJTQ0ZHUl9DSExFTik7CisKKyAgaWYgKCh0bXByZWdfY2ZnciA9PSBJMlNfREFUQUZPUk1BVF8yNEIpIHx8ICh0bXByZWdfY2ZnciA9PSBJMlNfREFUQUZPUk1BVF8zMkIpKQorICB7CisgICAgaGkycy0+VHhYZmVyU2l6ZSA9IChTaXplIDw8IDFVKTsKKyAgICBoaTJzLT5UeFhmZXJDb3VudCA9IChTaXplIDw8IDFVKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBoaTJzLT5UeFhmZXJTaXplID0gU2l6ZTsKKyAgICBoaTJzLT5UeFhmZXJDb3VudCA9IFNpemU7CisgIH0KKworICB0bXByZWdfY2ZnciA9IGhpMnMtPkluc3RhbmNlLT5JMlNDRkdSOworCisgIC8qIENoZWNrIGlmIHRoZSBJMlMgaXMgYWxyZWFkeSBlbmFibGVkICovCisgIGlmICgoaGkycy0+SW5zdGFuY2UtPkkyU0NGR1IgJiBTUElfSTJTQ0ZHUl9JMlNFKSAhPSBTUElfSTJTQ0ZHUl9JMlNFKQorICB7CisgICAgLyogRW5hYmxlIEkyUyBwZXJpcGhlcmFsICovCisgICAgX19IQUxfSTJTX0VOQUJMRShoaTJzKTsKKyAgfQorCisgIC8qIFdhaXQgdW50aWwgVFhFIGZsYWcgaXMgc2V0ICovCisgIGlmIChJMlNfV2FpdEZsYWdTdGF0ZVVudGlsVGltZW91dChoaTJzLCBJMlNfRkxBR19UWEUsIFNFVCwgVGltZW91dCkgIT0gSEFMX09LKQorICB7CisgICAgLyogU2V0IHRoZSBlcnJvciBjb2RlICovCisgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfVElNRU9VVCk7CisgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworICAgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgd2hpbGUgKGhpMnMtPlR4WGZlckNvdW50ID4gMFUpCisgIHsKKyAgICBoaTJzLT5JbnN0YW5jZS0+RFIgPSAoKmhpMnMtPnBUeEJ1ZmZQdHIpOworICAgIGhpMnMtPnBUeEJ1ZmZQdHIrKzsKKyAgICBoaTJzLT5UeFhmZXJDb3VudC0tOworCisgICAgLyogV2FpdCB1bnRpbCBUWEUgZmxhZyBpcyBzZXQgKi8KKyAgICBpZiAoSTJTX1dhaXRGbGFnU3RhdGVVbnRpbFRpbWVvdXQoaGkycywgSTJTX0ZMQUdfVFhFLCBTRVQsIFRpbWVvdXQpICE9IEhBTF9PSykKKyAgICB7CisgICAgICAvKiBTZXQgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX1RJTUVPVVQpOworICAgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworICAgICAgX19IQUxfVU5MT0NLKGhpMnMpOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisKKyAgICAvKiBDaGVjayBpZiBhbiB1bmRlcnJ1biBvY2N1cnMgKi8KKyAgICBpZiAoX19IQUxfSTJTX0dFVF9GTEFHKGhpMnMsIEkyU19GTEFHX1VEUikgPT0gU0VUKQorICAgIHsKKyAgICAgIC8qIENsZWFyIHVuZGVycnVuIGZsYWcgKi8KKyAgICAgIF9fSEFMX0kyU19DTEVBUl9VRFJGTEFHKGhpMnMpOworCisgICAgICAvKiBTZXQgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX1VEUik7CisgICAgfQorICB9CisKKyAgLyogQ2hlY2sgaWYgU2xhdmUgbW9kZSBpcyBzZWxlY3RlZCAqLworICBpZiAoKCh0bXByZWdfY2ZnciAmIFNQSV9JMlNDRkdSX0kyU0NGRykgPT0gSTJTX01PREVfU0xBVkVfVFgpCisgICAgICB8fCAoKHRtcHJlZ19jZmdyICYgU1BJX0kyU0NGR1JfSTJTQ0ZHKSA9PSBJMlNfTU9ERV9TTEFWRV9SWCkpCisgIHsKKyAgICAvKiBXYWl0IHVudGlsIEJ1c3kgZmxhZyBpcyByZXNldCAqLworICAgIGlmIChJMlNfV2FpdEZsYWdTdGF0ZVVudGlsVGltZW91dChoaTJzLCBJMlNfRkxBR19CU1ksIFJFU0VULCBUaW1lb3V0KSAhPSBIQUxfT0spCisgICAgeworICAgICAgLyogU2V0IHRoZSBlcnJvciBjb2RlICovCisgICAgICBTRVRfQklUKGhpMnMtPkVycm9yQ29kZSwgSEFMX0kyU19FUlJPUl9USU1FT1VUKTsKKyAgICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKKyAgICAgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9CisKKyAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworICBfX0hBTF9VTkxPQ0soaGkycyk7CisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmVjZWl2ZSBhbiBhbW91bnQgb2YgZGF0YSBpbiBibG9ja2luZyBtb2RlCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcGFyYW0gIHBEYXRhIGEgMTYtYml0IHBvaW50ZXIgdG8gZGF0YSBidWZmZXIuCisgICogQHBhcmFtICBTaXplIG51bWJlciBvZiBkYXRhIHNhbXBsZSB0byBiZSBzZW50OgorICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKKyAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAorICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCisgICogQG5vdGUgICBUaGUgSTJTIGlzIGtlcHQgZW5hYmxlZCBhdCB0aGUgZW5kIG9mIHRyYW5zYWN0aW9uIHRvIGF2b2lkIHRoZSBjbG9jayBkZS1zeW5jaHJvbml6YXRpb24KKyAgKiAgICAgICAgIGJldHdlZW4gTWFzdGVyIGFuZCBTbGF2ZShleGFtcGxlOiBhdWRpbyBzdHJlYW1pbmcpLgorICAqIEBub3RlICAgSW4gSTJTIE1hc3RlciBSZWNlaXZlciBtb2RlLCBqdXN0IGFmdGVyIGVuYWJsaW5nIHRoZSBwZXJpcGhlcmFsIHRoZSBjbG9jayB3aWxsIGJlIGdlbmVyYXRlCisgICogICAgICAgICBpbiBjb250aW51b3VzIHdheSBhbmQgYXMgdGhlIEkyUyBpcyBub3QgZGlzYWJsZWQgYXQgdGhlIGVuZCBvZiB0aGUgSTJTIHRyYW5zYWN0aW9uLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19SZWNlaXZlKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcERhdGEsIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCit7CisgIHVpbnQzMl90IHRtcHJlZ19jZmdyOworCisgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpKQorICB7CisgICAgcmV0dXJuICBIQUxfRVJST1I7CisgIH0KKworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhpMnMpOworCisgIGlmIChoaTJzLT5TdGF0ZSAhPSBIQUxfSTJTX1NUQVRFX1JFQURZKQorICB7CisgICAgX19IQUxfVU5MT0NLKGhpMnMpOworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorCisgIC8qIFNldCBzdGF0ZSBhbmQgcmVzZXQgZXJyb3IgY29kZSAqLworICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfQlVTWV9SWDsKKyAgaGkycy0+RXJyb3JDb2RlID0gSEFMX0kyU19FUlJPUl9OT05FOworICBoaTJzLT5wUnhCdWZmUHRyID0gcERhdGE7CisKKyAgdG1wcmVnX2NmZ3IgPSBoaTJzLT5JbnN0YW5jZS0+STJTQ0ZHUiAmIChTUElfSTJTQ0ZHUl9EQVRMRU4gfCBTUElfSTJTQ0ZHUl9DSExFTik7CisKKyAgaWYgKCh0bXByZWdfY2ZnciA9PSBJMlNfREFUQUZPUk1BVF8yNEIpIHx8ICh0bXByZWdfY2ZnciA9PSBJMlNfREFUQUZPUk1BVF8zMkIpKQorICB7CisgICAgaGkycy0+UnhYZmVyU2l6ZSA9IChTaXplIDw8IDFVKTsKKyAgICBoaTJzLT5SeFhmZXJDb3VudCA9IChTaXplIDw8IDFVKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBoaTJzLT5SeFhmZXJTaXplID0gU2l6ZTsKKyAgICBoaTJzLT5SeFhmZXJDb3VudCA9IFNpemU7CisgIH0KKworICAvKiBDaGVjayBpZiB0aGUgSTJTIGlzIGFscmVhZHkgZW5hYmxlZCAqLworICBpZiAoKGhpMnMtPkluc3RhbmNlLT5JMlNDRkdSICYgU1BJX0kyU0NGR1JfSTJTRSkgIT0gU1BJX0kyU0NGR1JfSTJTRSkKKyAgeworICAgIC8qIEVuYWJsZSBJMlMgcGVyaXBoZXJhbCAqLworICAgIF9fSEFMX0kyU19FTkFCTEUoaGkycyk7CisgIH0KKworICAvKiBDaGVjayBpZiBNYXN0ZXIgUmVjZWl2ZXIgbW9kZSBpcyBzZWxlY3RlZCAqLworICBpZiAoKGhpMnMtPkluc3RhbmNlLT5JMlNDRkdSICYgU1BJX0kyU0NGR1JfSTJTQ0ZHKSA9PSBJMlNfTU9ERV9NQVNURVJfUlgpCisgIHsKKyAgICAvKiBDbGVhciB0aGUgT3ZlcnJ1biBGbGFnIGJ5IGEgcmVhZCBvcGVyYXRpb24gb24gdGhlIFNQSV9EUiByZWdpc3RlciBmb2xsb3dlZCBieSBhIHJlYWQKKyAgICBhY2Nlc3MgdG8gdGhlIFNQSV9TUiByZWdpc3Rlci4gKi8KKyAgICBfX0hBTF9JMlNfQ0xFQVJfT1ZSRkxBRyhoaTJzKTsKKyAgfQorCisgIC8qIFJlY2VpdmUgZGF0YSAqLworICB3aGlsZSAoaGkycy0+UnhYZmVyQ291bnQgPiAwVSkKKyAgeworICAgIC8qIFdhaXQgdW50aWwgUlhORSBmbGFnIGlzIHNldCAqLworICAgIGlmIChJMlNfV2FpdEZsYWdTdGF0ZVVudGlsVGltZW91dChoaTJzLCBJMlNfRkxBR19SWE5FLCBTRVQsIFRpbWVvdXQpICE9IEhBTF9PSykKKyAgICB7CisgICAgICAvKiBTZXQgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX1RJTUVPVVQpOworICAgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworICAgICAgX19IQUxfVU5MT0NLKGhpMnMpOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisKKyAgICAoKmhpMnMtPnBSeEJ1ZmZQdHIpID0gKHVpbnQxNl90KWhpMnMtPkluc3RhbmNlLT5EUjsKKyAgICBoaTJzLT5wUnhCdWZmUHRyKys7CisgICAgaGkycy0+UnhYZmVyQ291bnQtLTsKKworICAgIC8qIENoZWNrIGlmIGFuIG92ZXJydW4gb2NjdXJzICovCisgICAgaWYgKF9fSEFMX0kyU19HRVRfRkxBRyhoaTJzLCBJMlNfRkxBR19PVlIpID09IFNFVCkKKyAgICB7CisgICAgICAvKiBDbGVhciBvdmVycnVuIGZsYWcgKi8KKyAgICAgIF9fSEFMX0kyU19DTEVBUl9PVlJGTEFHKGhpMnMpOworCisgICAgICAvKiBTZXQgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX09WUik7CisgICAgfQorICB9CisKKyAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworICBfX0hBTF9VTkxPQ0soaGkycyk7CisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgVHJhbnNtaXQgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aCBJbnRlcnJ1cHQKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEBwYXJhbSAgcERhdGEgYSAxNi1iaXQgcG9pbnRlciB0byBkYXRhIGJ1ZmZlci4KKyAgKiBAcGFyYW0gIFNpemUgbnVtYmVyIG9mIGRhdGEgc2FtcGxlIHRvIGJlIHNlbnQ6CisgICogQG5vdGUgICBXaGVuIGEgMTYtYml0IGRhdGEgZnJhbWUgb3IgYSAxNi1iaXQgZGF0YSBmcmFtZSBleHRlbmRlZCBpcyBzZWxlY3RlZCBkdXJpbmcgdGhlIEkyUworICAqICAgICAgICAgY29uZmlndXJhdGlvbiBwaGFzZSwgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoCisgICogICAgICAgICBpbiB0aGUgdHJhbnNhY3Rpb24gYW5kIHdoZW4gYSAyNC1iaXQgZGF0YSBmcmFtZSBvciBhIDMyLWJpdCBkYXRhIGZyYW1lIGlzIHNlbGVjdGVkCisgICogICAgICAgICB0aGUgU2l6ZSBwYXJhbWV0ZXIgbWVhbnMgdGhlIG51bWJlciBvZiAxNi1iaXQgZGF0YSBsZW5ndGguCisgICogQG5vdGUgICBUaGUgSTJTIGlzIGtlcHQgZW5hYmxlZCBhdCB0aGUgZW5kIG9mIHRyYW5zYWN0aW9uIHRvIGF2b2lkIHRoZSBjbG9jayBkZS1zeW5jaHJvbml6YXRpb24KKyAgKiAgICAgICAgIGJldHdlZW4gTWFzdGVyIGFuZCBTbGF2ZShleGFtcGxlOiBhdWRpbyBzdHJlYW1pbmcpLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19UcmFuc21pdF9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQoreworICB1aW50MzJfdCB0bXByZWdfY2ZncjsKKworICBpZiAoKHBEYXRhID09IE5VTEwpIHx8IChTaXplID09IDBVKSkKKyAgeworICAgIHJldHVybiAgSEFMX0VSUk9SOworICB9CisKKyAgLyogUHJvY2VzcyBMb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhoaTJzKTsKKworICBpZiAoaGkycy0+U3RhdGUgIT0gSEFMX0kyU19TVEFURV9SRUFEWSkKKyAgeworICAgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KKworICAvKiBTZXQgc3RhdGUgYW5kIHJlc2V0IGVycm9yIGNvZGUgKi8KKyAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX0JVU1lfVFg7CisgIGhpMnMtPkVycm9yQ29kZSA9IEhBTF9JMlNfRVJST1JfTk9ORTsKKyAgaGkycy0+cFR4QnVmZlB0ciA9IHBEYXRhOworCisgIHRtcHJlZ19jZmdyID0gaGkycy0+SW5zdGFuY2UtPkkyU0NGR1IgJiAoU1BJX0kyU0NGR1JfREFUTEVOIHwgU1BJX0kyU0NGR1JfQ0hMRU4pOworCisgIGlmICgodG1wcmVnX2NmZ3IgPT0gSTJTX0RBVEFGT1JNQVRfMjRCKSB8fCAodG1wcmVnX2NmZ3IgPT0gSTJTX0RBVEFGT1JNQVRfMzJCKSkKKyAgeworICAgIGhpMnMtPlR4WGZlclNpemUgPSAoU2l6ZSA8PCAxVSk7CisgICAgaGkycy0+VHhYZmVyQ291bnQgPSAoU2l6ZSA8PCAxVSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgaGkycy0+VHhYZmVyU2l6ZSA9IFNpemU7CisgICAgaGkycy0+VHhYZmVyQ291bnQgPSBTaXplOworICB9CisKKyAgLyogRW5hYmxlIFRYRSBhbmQgRVJSIGludGVycnVwdCAqLworICBfX0hBTF9JMlNfRU5BQkxFX0lUKGhpMnMsIChJMlNfSVRfVFhFIHwgSTJTX0lUX0VSUikpOworCisgIC8qIENoZWNrIGlmIHRoZSBJMlMgaXMgYWxyZWFkeSBlbmFibGVkICovCisgIGlmICgoaGkycy0+SW5zdGFuY2UtPkkyU0NGR1IgJiBTUElfSTJTQ0ZHUl9JMlNFKSAhPSBTUElfSTJTQ0ZHUl9JMlNFKQorICB7CisgICAgLyogRW5hYmxlIEkyUyBwZXJpcGhlcmFsICovCisgICAgX19IQUxfSTJTX0VOQUJMRShoaTJzKTsKKyAgfQorCisgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgcmV0dXJuIEhBTF9PSzsKK30KKworLyoqCisgICogQGJyaWVmICBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHdpdGggSW50ZXJydXB0CisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcGFyYW0gIHBEYXRhIGEgMTYtYml0IHBvaW50ZXIgdG8gdGhlIFJlY2VpdmUgZGF0YSBidWZmZXIuCisgICogQHBhcmFtICBTaXplIG51bWJlciBvZiBkYXRhIHNhbXBsZSB0byBiZSBzZW50OgorICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKKyAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAorICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqIEBub3RlICAgVGhlIEkyUyBpcyBrZXB0IGVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0cmFuc2FjdGlvbiB0byBhdm9pZCB0aGUgY2xvY2sgZGUtc3luY2hyb25pemF0aW9uCisgICogICAgICAgICBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUoZXhhbXBsZTogYXVkaW8gc3RyZWFtaW5nKS4KKyAgKiBAbm90ZSAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBETUEgZm9yIHRoZSBJMlMgcmVjZWl2ZXIgdG8gYXZvaWQgZGUtc3luY2hyb25pemF0aW9uCisgICogYmV0d2VlbiBNYXN0ZXIgYW5kIFNsYXZlIG90aGVyd2lzZSB0aGUgSTJTIGludGVycnVwdCBzaG91bGQgYmUgb3B0aW1pemVkLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19SZWNlaXZlX0lUKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCit7CisgIHVpbnQzMl90IHRtcHJlZ19jZmdyOworCisgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpKQorICB7CisgICAgcmV0dXJuICBIQUxfRVJST1I7CisgIH0KKworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhpMnMpOworCisgIGlmIChoaTJzLT5TdGF0ZSAhPSBIQUxfSTJTX1NUQVRFX1JFQURZKQorICB7CisgICAgX19IQUxfVU5MT0NLKGhpMnMpOworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorCisgIC8qIFNldCBzdGF0ZSBhbmQgcmVzZXQgZXJyb3IgY29kZSAqLworICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfQlVTWV9SWDsKKyAgaGkycy0+RXJyb3JDb2RlID0gSEFMX0kyU19FUlJPUl9OT05FOworICBoaTJzLT5wUnhCdWZmUHRyID0gcERhdGE7CisKKyAgdG1wcmVnX2NmZ3IgPSBoaTJzLT5JbnN0YW5jZS0+STJTQ0ZHUiAmIChTUElfSTJTQ0ZHUl9EQVRMRU4gfCBTUElfSTJTQ0ZHUl9DSExFTik7CisKKyAgaWYgKCh0bXByZWdfY2ZnciA9PSBJMlNfREFUQUZPUk1BVF8yNEIpIHx8ICh0bXByZWdfY2ZnciA9PSBJMlNfREFUQUZPUk1BVF8zMkIpKQorICB7CisgICAgaGkycy0+UnhYZmVyU2l6ZSA9IChTaXplIDw8IDFVKTsKKyAgICBoaTJzLT5SeFhmZXJDb3VudCA9IChTaXplIDw8IDFVKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBoaTJzLT5SeFhmZXJTaXplID0gU2l6ZTsKKyAgICBoaTJzLT5SeFhmZXJDb3VudCA9IFNpemU7CisgIH0KKworICAvKiBFbmFibGUgUlhORSBhbmQgRVJSIGludGVycnVwdCAqLworICBfX0hBTF9JMlNfRU5BQkxFX0lUKGhpMnMsIChJMlNfSVRfUlhORSB8IEkyU19JVF9FUlIpKTsKKworICAvKiBDaGVjayBpZiB0aGUgSTJTIGlzIGFscmVhZHkgZW5hYmxlZCAqLworICBpZiAoKGhpMnMtPkluc3RhbmNlLT5JMlNDRkdSICYgU1BJX0kyU0NGR1JfSTJTRSkgIT0gU1BJX0kyU0NGR1JfSTJTRSkKKyAgeworICAgIC8qIEVuYWJsZSBJMlMgcGVyaXBoZXJhbCAqLworICAgIF9fSEFMX0kyU19FTkFCTEUoaGkycyk7CisgIH0KKworICBfX0hBTF9VTkxPQ0soaGkycyk7CisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgVHJhbnNtaXQgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aCBETUEKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEBwYXJhbSAgcERhdGEgYSAxNi1iaXQgcG9pbnRlciB0byB0aGUgVHJhbnNtaXQgZGF0YSBidWZmZXIuCisgICogQHBhcmFtICBTaXplIG51bWJlciBvZiBkYXRhIHNhbXBsZSB0byBiZSBzZW50OgorICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKKyAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAorICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqIEBub3RlICAgVGhlIEkyUyBpcyBrZXB0IGVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0cmFuc2FjdGlvbiB0byBhdm9pZCB0aGUgY2xvY2sgZGUtc3luY2hyb25pemF0aW9uCisgICogICAgICAgICBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUoZXhhbXBsZTogYXVkaW8gc3RyZWFtaW5nKS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfVHJhbnNtaXRfRE1BKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCit7CisgIHVpbnQzMl90IHRtcHJlZ19jZmdyOworCisgIGlmICgocERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpKQorICB7CisgICAgcmV0dXJuICBIQUxfRVJST1I7CisgIH0KKworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhpMnMpOworCisgIGlmIChoaTJzLT5TdGF0ZSAhPSBIQUxfSTJTX1NUQVRFX1JFQURZKQorICB7CisgICAgX19IQUxfVU5MT0NLKGhpMnMpOworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorCisgIC8qIFNldCBzdGF0ZSBhbmQgcmVzZXQgZXJyb3IgY29kZSAqLworICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfQlVTWV9UWDsKKyAgaGkycy0+RXJyb3JDb2RlID0gSEFMX0kyU19FUlJPUl9OT05FOworICBoaTJzLT5wVHhCdWZmUHRyID0gcERhdGE7CisKKyAgdG1wcmVnX2NmZ3IgPSBoaTJzLT5JbnN0YW5jZS0+STJTQ0ZHUiAmIChTUElfSTJTQ0ZHUl9EQVRMRU4gfCBTUElfSTJTQ0ZHUl9DSExFTik7CisKKyAgaWYgKCh0bXByZWdfY2ZnciA9PSBJMlNfREFUQUZPUk1BVF8yNEIpIHx8ICh0bXByZWdfY2ZnciA9PSBJMlNfREFUQUZPUk1BVF8zMkIpKQorICB7CisgICAgaGkycy0+VHhYZmVyU2l6ZSA9IChTaXplIDw8IDFVKTsKKyAgICBoaTJzLT5UeFhmZXJDb3VudCA9IChTaXplIDw8IDFVKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBoaTJzLT5UeFhmZXJTaXplID0gU2l6ZTsKKyAgICBoaTJzLT5UeFhmZXJDb3VudCA9IFNpemU7CisgIH0KKworICAvKiBTZXQgdGhlIEkyUyBUeCBETUEgSGFsZiB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICBoaTJzLT5oZG1hdHgtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gSTJTX0RNQVR4SGFsZkNwbHQ7CisKKyAgLyogU2V0IHRoZSBJMlMgVHggRE1BIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisgIGhpMnMtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayA9IEkyU19ETUFUeENwbHQ7CisKKyAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgaGkycy0+aGRtYXR4LT5YZmVyRXJyb3JDYWxsYmFjayA9IEkyU19ETUFFcnJvcjsKKworICAvKiBFbmFibGUgdGhlIFR4IERNQSBTdHJlYW0vQ2hhbm5lbCAqLworICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaGkycy0+aGRtYXR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KWhpMnMtPnBUeEJ1ZmZQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QpJmhpMnMtPkluc3RhbmNlLT5EUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpMnMtPlR4WGZlclNpemUpKQorICB7CisgICAgLyogVXBkYXRlIFNQSSBlcnJvciBjb2RlICovCisgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfRE1BKTsKKyAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisKKyAgICBfX0hBTF9VTkxPQ0soaGkycyk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIGlmIHRoZSBJMlMgaXMgYWxyZWFkeSBlbmFibGVkICovCisgIGlmIChIQUxfSVNfQklUX0NMUihoaTJzLT5JbnN0YW5jZS0+STJTQ0ZHUiwgU1BJX0kyU0NGR1JfSTJTRSkpCisgIHsKKyAgICAvKiBFbmFibGUgSTJTIHBlcmlwaGVyYWwgKi8KKyAgICBfX0hBTF9JMlNfRU5BQkxFKGhpMnMpOworICB9CisKKyAgLyogQ2hlY2sgaWYgdGhlIEkyUyBUeCByZXF1ZXN0IGlzIGFscmVhZHkgZW5hYmxlZCAqLworICBpZiAoSEFMX0lTX0JJVF9DTFIoaGkycy0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9UWERNQUVOKSkKKyAgeworICAgIC8qIEVuYWJsZSBUeCBETUEgUmVxdWVzdCAqLworICAgIFNFVF9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9UWERNQUVOKTsKKyAgfQorCisgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgcmV0dXJuIEhBTF9PSzsKK30KKworLyoqCisgICogQGJyaWVmICBSZWNlaXZlIGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHdpdGggRE1BCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcGFyYW0gIHBEYXRhIGEgMTYtYml0IHBvaW50ZXIgdG8gdGhlIFJlY2VpdmUgZGF0YSBidWZmZXIuCisgICogQHBhcmFtICBTaXplIG51bWJlciBvZiBkYXRhIHNhbXBsZSB0byBiZSBzZW50OgorICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKKyAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAorICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqIEBub3RlICAgVGhlIEkyUyBpcyBrZXB0IGVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0cmFuc2FjdGlvbiB0byBhdm9pZCB0aGUgY2xvY2sgZGUtc3luY2hyb25pemF0aW9uCisgICogICAgICAgICBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUoZXhhbXBsZTogYXVkaW8gc3RyZWFtaW5nKS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfUmVjZWl2ZV9ETUEoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIHVpbnQxNl90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKK3sKKyAgdWludDMyX3QgdG1wcmVnX2NmZ3I7CisKKyAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVSkpCisgIHsKKyAgICByZXR1cm4gIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFByb2Nlc3MgTG9ja2VkICovCisgIF9fSEFMX0xPQ0soaGkycyk7CisKKyAgaWYgKGhpMnMtPlN0YXRlICE9IEhBTF9JMlNfU1RBVEVfUkVBRFkpCisgIHsKKyAgICBfX0hBTF9VTkxPQ0soaGkycyk7CisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9CisKKyAgLyogU2V0IHN0YXRlIGFuZCByZXNldCBlcnJvciBjb2RlICovCisgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9CVVNZX1JYOworICBoaTJzLT5FcnJvckNvZGUgPSBIQUxfSTJTX0VSUk9SX05PTkU7CisgIGhpMnMtPnBSeEJ1ZmZQdHIgPSBwRGF0YTsKKworICB0bXByZWdfY2ZnciA9IGhpMnMtPkluc3RhbmNlLT5JMlNDRkdSICYgKFNQSV9JMlNDRkdSX0RBVExFTiB8IFNQSV9JMlNDRkdSX0NITEVOKTsKKworICBpZiAoKHRtcHJlZ19jZmdyID09IEkyU19EQVRBRk9STUFUXzI0QikgfHwgKHRtcHJlZ19jZmdyID09IEkyU19EQVRBRk9STUFUXzMyQikpCisgIHsKKyAgICBoaTJzLT5SeFhmZXJTaXplID0gKFNpemUgPDwgMVUpOworICAgIGhpMnMtPlJ4WGZlckNvdW50ID0gKFNpemUgPDwgMVUpOworICB9CisgIGVsc2UKKyAgeworICAgIGhpMnMtPlJ4WGZlclNpemUgPSBTaXplOworICAgIGhpMnMtPlJ4WGZlckNvdW50ID0gU2l6ZTsKKyAgfQorCisgIC8qIFNldCB0aGUgSTJTIFJ4IERNQSBIYWxmIHRyYW5zZmVyIGNvbXBsZXRlIGNhbGxiYWNrICovCisgIGhpMnMtPmhkbWFyeC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBJMlNfRE1BUnhIYWxmQ3BsdDsKKworICAvKiBTZXQgdGhlIEkyUyBSeCBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgaGkycy0+aGRtYXJ4LT5YZmVyQ3BsdENhbGxiYWNrID0gSTJTX0RNQVJ4Q3BsdDsKKworICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLworICBoaTJzLT5oZG1hcngtPlhmZXJFcnJvckNhbGxiYWNrID0gSTJTX0RNQUVycm9yOworCisgIC8qIENoZWNrIGlmIE1hc3RlciBSZWNlaXZlciBtb2RlIGlzIHNlbGVjdGVkICovCisgIGlmICgoaGkycy0+SW5zdGFuY2UtPkkyU0NGR1IgJiBTUElfSTJTQ0ZHUl9JMlNDRkcpID09IEkyU19NT0RFX01BU1RFUl9SWCkKKyAgeworICAgIC8qIENsZWFyIHRoZSBPdmVycnVuIEZsYWcgYnkgYSByZWFkIG9wZXJhdGlvbiB0byB0aGUgU1BJX0RSIHJlZ2lzdGVyIGZvbGxvd2VkIGJ5IGEgcmVhZAorICAgIGFjY2VzcyB0byB0aGUgU1BJX1NSIHJlZ2lzdGVyLiAqLworICAgIF9fSEFMX0kyU19DTEVBUl9PVlJGTEFHKGhpMnMpOworICB9CisKKyAgLyogRW5hYmxlIHRoZSBSeCBETUEgU3RyZWFtL0NoYW5uZWwgKi8KKyAgaWYgKEhBTF9PSyAhPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMnMtPmhkbWFyeCwgKHVpbnQzMl90KSZoaTJzLT5JbnN0YW5jZS0+RFIsICh1aW50MzJfdCloaTJzLT5wUnhCdWZmUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGkycy0+UnhYZmVyU2l6ZSkpCisgIHsKKyAgICAvKiBVcGRhdGUgU1BJIGVycm9yIGNvZGUgKi8KKyAgICBTRVRfQklUKGhpMnMtPkVycm9yQ29kZSwgSEFMX0kyU19FUlJPUl9ETUEpOworICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKKworICAgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgaWYgdGhlIEkyUyBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKyAgaWYgKEhBTF9JU19CSVRfQ0xSKGhpMnMtPkluc3RhbmNlLT5JMlNDRkdSLCBTUElfSTJTQ0ZHUl9JMlNFKSkKKyAgeworICAgIC8qIEVuYWJsZSBJMlMgcGVyaXBoZXJhbCAqLworICAgIF9fSEFMX0kyU19FTkFCTEUoaGkycyk7CisgIH0KKworICAvKiBDaGVjayBpZiB0aGUgSTJTIFJ4IHJlcXVlc3QgaXMgYWxyZWFkeSBlbmFibGVkICovCisgIGlmIChIQUxfSVNfQklUX0NMUihoaTJzLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1JYRE1BRU4pKQorICB7CisgICAgLyogRW5hYmxlIFJ4IERNQSBSZXF1ZXN0ICovCisgICAgU0VUX0JJVChoaTJzLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1JYRE1BRU4pOworICB9CisKKyAgX19IQUxfVU5MT0NLKGhpMnMpOworICByZXR1cm4gSEFMX09LOworfQorCisvKioKKyAgKiBAYnJpZWYgIFBhdXNlcyB0aGUgYXVkaW8gRE1BIFN0cmVhbS9DaGFubmVsIHBsYXlpbmcgZnJvbSB0aGUgTWVkaWEuCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfRE1BUGF1c2UoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpCit7CisgIC8qIFByb2Nlc3MgTG9ja2VkICovCisgIF9fSEFMX0xPQ0soaGkycyk7CisKKyAgaWYgKGhpMnMtPlN0YXRlID09IEhBTF9JMlNfU1RBVEVfQlVTWV9UWCkKKyAgeworICAgIC8qIERpc2FibGUgdGhlIEkyUyBETUEgVHggcmVxdWVzdCAqLworICAgIENMRUFSX0JJVChoaTJzLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1RYRE1BRU4pOworICB9CisgIGVsc2UgaWYgKGhpMnMtPlN0YXRlID09IEhBTF9JMlNfU1RBVEVfQlVTWV9SWCkKKyAgeworICAgIC8qIERpc2FibGUgdGhlIEkyUyBETUEgUnggcmVxdWVzdCAqLworICAgIENMRUFSX0JJVChoaTJzLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1JYRE1BRU4pOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgfQorCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGhpMnMpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmVzdW1lcyB0aGUgYXVkaW8gRE1BIFN0cmVhbS9DaGFubmVsIHBsYXlpbmcgZnJvbSB0aGUgTWVkaWEuCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfRE1BUmVzdW1lKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKQoreworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhpMnMpOworCisgIGlmIChoaTJzLT5TdGF0ZSA9PSBIQUxfSTJTX1NUQVRFX0JVU1lfVFgpCisgIHsKKyAgICAvKiBFbmFibGUgdGhlIEkyUyBETUEgVHggcmVxdWVzdCAqLworICAgIFNFVF9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9UWERNQUVOKTsKKyAgfQorICBlbHNlIGlmIChoaTJzLT5TdGF0ZSA9PSBIQUxfSTJTX1NUQVRFX0JVU1lfUlgpCisgIHsKKyAgICAvKiBFbmFibGUgdGhlIEkyUyBETUEgUnggcmVxdWVzdCAqLworICAgIFNFVF9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9SWERNQUVOKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBub3RoaW5nIHRvIGRvICovCisgIH0KKworICAvKiBJZiB0aGUgSTJTIHBlcmlwaGVyYWwgaXMgc3RpbGwgbm90IGVuYWJsZWQsIGVuYWJsZSBpdCAqLworICBpZiAoSEFMX0lTX0JJVF9DTFIoaGkycy0+SW5zdGFuY2UtPkkyU0NGR1IsIFNQSV9JMlNDRkdSX0kyU0UpKQorICB7CisgICAgLyogRW5hYmxlIEkyUyBwZXJpcGhlcmFsICovCisgICAgX19IQUxfSTJTX0VOQUJMRShoaTJzKTsKKyAgfQorCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGhpMnMpOworCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgU3RvcHMgdGhlIGF1ZGlvIERNQSBTdHJlYW0vQ2hhbm5lbCBwbGF5aW5nIGZyb20gdGhlIE1lZGlhLgorICAqIEBwYXJhbSAgaGkycyBwb2ludGVyIHRvIGEgSTJTX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBJMlMgbW9kdWxlCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX0RNQVN0b3AoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpCit7CisgIEhBTF9TdGF0dXNUeXBlRGVmIGVycm9yY29kZSA9IEhBTF9PSzsKKyAgLyogVGhlIExvY2sgaXMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgQVBJIHRvIGFsbG93IHRoZSB1c2VyIGFwcGxpY2F0aW9uCisgICAgIHRvIGNhbGwgdGhlIEhBTCBTUEkgQVBJIHVuZGVyIGNhbGxiYWNrcyBIQUxfSTJTX1R4Q3BsdENhbGxiYWNrKCkgb3IgSEFMX0kyU19SeENwbHRDYWxsYmFjaygpCisgICAgIHdoZW4gY2FsbGluZyBIQUxfRE1BX0Fib3J0KCkgQVBJIHRoZSBETUEgVFggb3IgUlggVHJhbnNmZXIgY29tcGxldGUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZAorICAgICBhbmQgdGhlIGNvcnJlc3BvbmQgY2FsbCBiYWNrIGlzIGV4ZWN1dGVkIEhBTF9JMlNfVHhDcGx0Q2FsbGJhY2soKSBvciBIQUxfSTJTX1J4Q3BsdENhbGxiYWNrKCkKKyAgICAgKi8KKworICAvKiBEaXNhYmxlIHRoZSBJMlMgVHgvUnggRE1BIHJlcXVlc3RzICovCisgIENMRUFSX0JJVChoaTJzLT5JbnN0YW5jZS0+Q1IyLCBTUElfQ1IyX1RYRE1BRU4pOworICBDTEVBUl9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9SWERNQUVOKTsKKworICAvKiBBYm9ydCB0aGUgSTJTIERNQSB0eCBTdHJlYW0vQ2hhbm5lbCAqLworICBpZiAoaGkycy0+aGRtYXR4ICE9IE5VTEwpCisgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSBJMlMgRE1BIHR4IFN0cmVhbS9DaGFubmVsICovCisgICAgaWYgKEhBTF9PSyAhPSBIQUxfRE1BX0Fib3J0KGhpMnMtPmhkbWF0eCkpCisgICAgeworICAgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfRE1BKTsKKyAgICAgIGVycm9yY29kZSA9IEhBTF9FUlJPUjsKKyAgICB9CisgIH0KKworICAvKiBBYm9ydCB0aGUgSTJTIERNQSByeCBTdHJlYW0vQ2hhbm5lbCAqLworICBpZiAoaGkycy0+aGRtYXJ4ICE9IE5VTEwpCisgIHsKKyAgICAvKiBEaXNhYmxlIHRoZSBJMlMgRE1BIHJ4IFN0cmVhbS9DaGFubmVsICovCisgICAgaWYgKEhBTF9PSyAhPSBIQUxfRE1BX0Fib3J0KGhpMnMtPmhkbWFyeCkpCisgICAgeworICAgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfRE1BKTsKKyAgICAgIGVycm9yY29kZSA9IEhBTF9FUlJPUjsKKyAgICB9CisgIH0KKworICAvKiBEaXNhYmxlIEkyUyBwZXJpcGhlcmFsICovCisgIF9fSEFMX0kyU19ESVNBQkxFKGhpMnMpOworCisgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKKworICByZXR1cm4gZXJyb3Jjb2RlOworfQorCisvKioKKyAgKiBAYnJpZWYgIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBJMlMgaW50ZXJydXB0IHJlcXVlc3QuCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3ZvaWQgSEFMX0kyU19JUlFIYW5kbGVyKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKQoreworICB1aW50MzJfdCBpdHNvdXJjZSA9IGhpMnMtPkluc3RhbmNlLT5DUjI7CisgIHVpbnQzMl90IGl0ZmxhZyAgID0gaGkycy0+SW5zdGFuY2UtPlNSOworCisgIC8qIEkyUyBpbiBtb2RlIFJlY2VpdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgIGlmICgoSTJTX0NIRUNLX0ZMQUcoaXRmbGFnLCBJMlNfRkxBR19PVlIpID09IFJFU0VUKSAmJgorICAgICAgKEkyU19DSEVDS19GTEFHKGl0ZmxhZywgSTJTX0ZMQUdfUlhORSkgIT0gUkVTRVQpICYmIChJMlNfQ0hFQ0tfSVRfU09VUkNFKGl0c291cmNlLCBJMlNfSVRfUlhORSkgIT0gUkVTRVQpKQorICB7CisgICAgSTJTX1JlY2VpdmVfSVQoaGkycyk7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogSTJTIGluIG1vZGUgVHJhbWl0dGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgaWYgKChJMlNfQ0hFQ0tfRkxBRyhpdGZsYWcsIEkyU19GTEFHX1RYRSkgIT0gUkVTRVQpICYmIChJMlNfQ0hFQ0tfSVRfU09VUkNFKGl0c291cmNlLCBJMlNfSVRfVFhFKSAhPSBSRVNFVCkpCisgIHsKKyAgICBJMlNfVHJhbnNtaXRfSVQoaGkycyk7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogSTJTIGludGVycnVwdCBlcnJvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgaWYgKEkyU19DSEVDS19JVF9TT1VSQ0UoaXRzb3VyY2UsIEkyU19JVF9FUlIpICE9IFJFU0VUKQorICB7CisgICAgLyogSTJTIE92ZXJydW4gZXJyb3IgaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgaWYgKEkyU19DSEVDS19GTEFHKGl0ZmxhZywgSTJTX0ZMQUdfT1ZSKSAhPSBSRVNFVCkKKyAgICB7CisgICAgICAvKiBEaXNhYmxlIFJYTkUgYW5kIEVSUiBpbnRlcnJ1cHQgKi8KKyAgICAgIF9fSEFMX0kyU19ESVNBQkxFX0lUKGhpMnMsIChJMlNfSVRfUlhORSB8IEkyU19JVF9FUlIpKTsKKworICAgICAgLyogU2V0IHRoZSBlcnJvciBjb2RlIGFuZCBleGVjdXRlIGVycm9yIGNhbGxiYWNrKi8KKyAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX09WUik7CisgICAgfQorCisgICAgLyogSTJTIFVuZGVycnVuIGVycm9yIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgaWYgKEkyU19DSEVDS19GTEFHKGl0ZmxhZywgSTJTX0ZMQUdfVURSKSAhPSBSRVNFVCkKKyAgICB7CisgICAgICAvKiBEaXNhYmxlIFRYRSBhbmQgRVJSIGludGVycnVwdCAqLworICAgICAgX19IQUxfSTJTX0RJU0FCTEVfSVQoaGkycywgKEkyU19JVF9UWEUgfCBJMlNfSVRfRVJSKSk7CisKKyAgICAgIC8qIFNldCB0aGUgZXJyb3IgY29kZSBhbmQgZXhlY3V0ZSBlcnJvciBjYWxsYmFjayovCisgICAgICBTRVRfQklUKGhpMnMtPkVycm9yQ29kZSwgSEFMX0kyU19FUlJPUl9VRFIpOworICAgIH0KKworICAgIC8qIFNldCB0aGUgSTJTIFN0YXRlIHJlYWR5ICovCisgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworCisgICAgLyogQ2FsbCB1c2VyIGVycm9yIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICBoaTJzLT5FcnJvckNhbGxiYWNrKGhpMnMpOworI2Vsc2UKKyAgICBIQUxfSTJTX0Vycm9yQ2FsbGJhY2soaGkycyk7CisjZW5kaWYgLyogVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBUeCBUcmFuc2ZlciBIYWxmIGNvbXBsZXRlZCBjYWxsYmFja3MKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0kyU19UeEhhbGZDcGx0Q2FsbGJhY2soSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpCit7CisgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgVU5VU0VEKGhpMnMpOworCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfSTJTX1R4SGFsZkNwbHRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgICAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIFR4IFRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFja3MKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0kyU19UeENwbHRDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaGkycyk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9JMlNfVHhDcGx0Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAgKi8KK30KKworLyoqCisgICogQGJyaWVmICBSeCBUcmFuc2ZlciBoYWxmIGNvbXBsZXRlZCBjYWxsYmFja3MKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0kyU19SeEhhbGZDcGx0Q2FsbGJhY2soSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpCit7CisgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgVU5VU0VEKGhpMnMpOworCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIFNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfSTJTX1J4SGFsZkNwbHRDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgICAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIFJ4IFRyYW5zZmVyIGNvbXBsZXRlZCBjYWxsYmFja3MKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0kyU19SeENwbHRDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaGkycyk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9JMlNfUnhDcGx0Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAgKi8KK30KKworLyoqCisgICogQGJyaWVmICBJMlMgZXJyb3IgY2FsbGJhY2tzCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fd2VhayB2b2lkIEhBTF9JMlNfRXJyb3JDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaGkycyk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9JMlNfRXJyb3JDYWxsYmFjayBjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgICAqLworfQorCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEkyU19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMKKyAgKiAgQGJyaWVmICAgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKKyAgKgorQHZlcmJhdGltCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICMjIyMjIFBlcmlwaGVyYWwgU3RhdGUgYW5kIEVycm9ycyBmdW5jdGlvbnMgIyMjIyMKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgIFRoaXMgc3Vic2VjdGlvbiBwZXJtaXRzIHRvIGdldCBpbiBydW4tdGltZSB0aGUgc3RhdHVzIG9mIHRoZSBwZXJpcGhlcmFsCisgICAgYW5kIHRoZSBkYXRhIGZsb3cuCisKK0BlbmR2ZXJiYXRpbQorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIHRoZSBJMlMgc3RhdGUKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEByZXR2YWwgSEFMIHN0YXRlCisgICovCitIQUxfSTJTX1N0YXRlVHlwZURlZiBIQUxfSTJTX0dldFN0YXRlKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKQoreworICByZXR1cm4gaGkycy0+U3RhdGU7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIHRoZSBJMlMgZXJyb3IgY29kZQorICAqIEBwYXJhbSAgaGkycyBwb2ludGVyIHRvIGEgSTJTX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBJMlMgbW9kdWxlCisgICogQHJldHZhbCBJMlMgRXJyb3IgQ29kZQorICAqLwordWludDMyX3QgSEFMX0kyU19HZXRFcnJvcihJMlNfSGFuZGxlVHlwZURlZiAqaGkycykKK3sKKyAgcmV0dXJuIGhpMnMtPkVycm9yQ29kZTsKK30KKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBJMlNfUHJpdmF0ZV9GdW5jdGlvbnMgSTJTIFByaXZhdGUgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKy8qKgorICAqIEBicmllZiAgRE1BIEkyUyB0cmFuc21pdCBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrCisgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gYSBETUFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERNQSBtb2R1bGUuCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBJMlNfRE1BVHhDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBJMlNfSGFuZGxlVHlwZURlZiAqaGkycyA9IChJMlNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OyAvKiBEZXJvZ2F0aW9uIE1JU1JBQzIwMTItUnVsZS0xMS41ICovCisKKyAgLyogaWYgRE1BIGlzIGNvbmZpZ3VyZWQgaW4gRE1BX05PUk1BTCBNb2RlICovCisgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgeworICAgIC8qIERpc2FibGUgVHggRE1BIFJlcXVlc3QgKi8KKyAgICBDTEVBUl9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9UWERNQUVOKTsKKworICAgIGhpMnMtPlR4WGZlckNvdW50ID0gMFU7CisgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworICB9CisgIC8qIENhbGwgdXNlciBUeCBjb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgIGhpMnMtPlR4Q3BsdENhbGxiYWNrKGhpMnMpOworI2Vsc2UKKyAgSEFMX0kyU19UeENwbHRDYWxsYmFjayhoaTJzKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KK30KKworLyoqCisgICogQGJyaWVmICBETUEgSTJTIHRyYW5zbWl0IHByb2Nlc3MgaGFsZiBjb21wbGV0ZSBjYWxsYmFjaworICAqIEBwYXJhbSAgaGRtYSBwb2ludGVyIHRvIGEgRE1BX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgbW9kdWxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgSTJTX0RNQVR4SGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCit7CisgIEkyU19IYW5kbGVUeXBlRGVmICpoaTJzID0gKEkyU19IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7IC8qIERlcm9nYXRpb24gTUlTUkFDMjAxMi1SdWxlLTExLjUgKi8KKworICAvKiBDYWxsIHVzZXIgVHggaGFsZiBjb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgIGhpMnMtPlR4SGFsZkNwbHRDYWxsYmFjayhoaTJzKTsKKyNlbHNlCisgIEhBTF9JMlNfVHhIYWxmQ3BsdENhbGxiYWNrKGhpMnMpOworI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIERNQSBJMlMgcmVjZWl2ZSBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrCisgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gYSBETUFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIERNQSBtb2R1bGUuCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBJMlNfRE1BUnhDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBJMlNfSGFuZGxlVHlwZURlZiAqaGkycyA9IChJMlNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OyAvKiBEZXJvZ2F0aW9uIE1JU1JBQzIwMTItUnVsZS0xMS41ICovCisKKyAgLyogaWYgRE1BIGlzIGNvbmZpZ3VyZWQgaW4gRE1BX05PUk1BTCBNb2RlICovCisgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgeworICAgIC8qIERpc2FibGUgUnggRE1BIFJlcXVlc3QgKi8KKyAgICBDTEVBUl9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMiwgU1BJX0NSMl9SWERNQUVOKTsKKyAgICBoaTJzLT5SeFhmZXJDb3VudCA9IDBVOworICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKKyAgfQorICAvKiBDYWxsIHVzZXIgUnggY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICBoaTJzLT5SeENwbHRDYWxsYmFjayhoaTJzKTsKKyNlbHNlCisgIEhBTF9JMlNfUnhDcGx0Q2FsbGJhY2soaGkycyk7CisjZW5kaWYgLyogVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCit9CisKKy8qKgorICAqIEBicmllZiAgRE1BIEkyUyByZWNlaXZlIHByb2Nlc3MgaGFsZiBjb21wbGV0ZSBjYWxsYmFjaworICAqIEBwYXJhbSAgaGRtYSBwb2ludGVyIHRvIGEgRE1BX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgbW9kdWxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgSTJTX0RNQVJ4SGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCit7CisgIEkyU19IYW5kbGVUeXBlRGVmICpoaTJzID0gKEkyU19IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7IC8qIERlcm9nYXRpb24gTUlTUkFDMjAxMi1SdWxlLTExLjUgKi8KKworICAvKiBDYWxsIHVzZXIgUnggaGFsZiBjb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCisgIGhpMnMtPlJ4SGFsZkNwbHRDYWxsYmFjayhoaTJzKTsKKyNlbHNlCisgIEhBTF9JMlNfUnhIYWxmQ3BsdENhbGxiYWNrKGhpMnMpOworI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIERNQSBJMlMgY29tbXVuaWNhdGlvbiBlcnJvciBjYWxsYmFjaworICAqIEBwYXJhbSAgaGRtYSBwb2ludGVyIHRvIGEgRE1BX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgbW9kdWxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgSTJTX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBJMlNfSGFuZGxlVHlwZURlZiAqaGkycyA9IChJMlNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OyAvKiBEZXJvZ2F0aW9uIE1JU1JBQzIwMTItUnVsZS0xMS41ICovCisKKyAgLyogRGlzYWJsZSBSeCBhbmQgVHggRE1BIFJlcXVlc3QgKi8KKyAgQ0xFQVJfQklUKGhpMnMtPkluc3RhbmNlLT5DUjIsIChTUElfQ1IyX1JYRE1BRU4gfCBTUElfQ1IyX1RYRE1BRU4pKTsKKyAgaGkycy0+VHhYZmVyQ291bnQgPSAwVTsKKyAgaGkycy0+UnhYZmVyQ291bnQgPSAwVTsKKworICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisKKyAgLyogU2V0IHRoZSBlcnJvciBjb2RlIGFuZCBleGVjdXRlIGVycm9yIGNhbGxiYWNrKi8KKyAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfRE1BKTsKKyAgLyogQ2FsbCB1c2VyIGVycm9yIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgaGkycy0+RXJyb3JDYWxsYmFjayhoaTJzKTsKKyNlbHNlCisgIEhBTF9JMlNfRXJyb3JDYWxsYmFjayhoaTJzKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KK30KKworLyoqCisgICogQGJyaWVmICBUcmFuc21pdCBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB3aXRoIEludGVycnVwdAorICAqIEBwYXJhbSAgaGkycyBwb2ludGVyIHRvIGEgSTJTX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBJMlMgbW9kdWxlCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBJMlNfVHJhbnNtaXRfSVQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpCit7CisgIC8qIFRyYW5zbWl0IGRhdGEgKi8KKyAgaGkycy0+SW5zdGFuY2UtPkRSID0gKCpoaTJzLT5wVHhCdWZmUHRyKTsKKyAgaGkycy0+cFR4QnVmZlB0cisrOworICBoaTJzLT5UeFhmZXJDb3VudC0tOworCisgIGlmIChoaTJzLT5UeFhmZXJDb3VudCA9PSAwVSkKKyAgeworICAgIC8qIERpc2FibGUgVFhFIGFuZCBFUlIgaW50ZXJydXB0ICovCisgICAgX19IQUxfSTJTX0RJU0FCTEVfSVQoaGkycywgKEkyU19JVF9UWEUgfCBJMlNfSVRfRVJSKSk7CisKKyAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisgICAgLyogQ2FsbCB1c2VyIFR4IGNvbXBsZXRlIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgICBoaTJzLT5UeENwbHRDYWxsYmFjayhoaTJzKTsKKyNlbHNlCisgICAgSEFMX0kyU19UeENwbHRDYWxsYmFjayhoaTJzKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIFJlY2VpdmUgYW4gYW1vdW50IG9mIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgd2l0aCBJbnRlcnJ1cHQKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgSTJTX1JlY2VpdmVfSVQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpCit7CisgIC8qIFJlY2VpdmUgZGF0YSAqLworICAoKmhpMnMtPnBSeEJ1ZmZQdHIpID0gKHVpbnQxNl90KWhpMnMtPkluc3RhbmNlLT5EUjsKKyAgaGkycy0+cFJ4QnVmZlB0cisrOworICBoaTJzLT5SeFhmZXJDb3VudC0tOworCisgIGlmIChoaTJzLT5SeFhmZXJDb3VudCA9PSAwVSkKKyAgeworICAgIC8qIERpc2FibGUgUlhORSBhbmQgRVJSIGludGVycnVwdCAqLworICAgIF9fSEFMX0kyU19ESVNBQkxFX0lUKGhpMnMsIChJMlNfSVRfUlhORSB8IEkyU19JVF9FUlIpKTsKKworICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKKyAgICAvKiBDYWxsIHVzZXIgUnggY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICAgIGhpMnMtPlJ4Q3BsdENhbGxiYWNrKGhpMnMpOworI2Vsc2UKKyAgICBIQUxfSTJTX1J4Q3BsdENhbGxiYWNrKGhpMnMpOworI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIEkyUyBDb21tdW5pY2F0aW9uIFRpbWVvdXQuCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcGFyYW0gIEZsYWcgRmxhZyBjaGVja2VkCisgICogQHBhcmFtICBTdGF0ZSBWYWx1ZSBvZiB0aGUgZmxhZyBleHBlY3RlZAorICAqIEBwYXJhbSAgVGltZW91dCBEdXJhdGlvbiBvZiB0aGUgdGltZW91dAorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEkyU19XYWl0RmxhZ1N0YXRlVW50aWxUaW1lb3V0KEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MzJfdCBGbGFnLCBGbGFnU3RhdHVzIFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRpbWVvdXQpCit7CisgIHVpbnQzMl90IHRpY2tzdGFydDsKKworICAvKiBHZXQgdGljayAqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIC8qIFdhaXQgdW50aWwgZmxhZyBpcyBzZXQgdG8gc3RhdHVzKi8KKyAgd2hpbGUgKCgoX19IQUxfSTJTX0dFVF9GTEFHKGhpMnMsIEZsYWcpKSA/IFNFVCA6IFJFU0VUKSAhPSBTdGF0ZSkKKyAgeworICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCisgICAgeworICAgICAgaWYgKCgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPj0gVGltZW91dCkgfHwgKFRpbWVvdXQgPT0gMFUpKQorICAgICAgeworICAgICAgICAvKiBTZXQgdGhlIEkyUyBTdGF0ZSByZWFkeSAqLworICAgICAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisKKyAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICBfX0hBTF9VTkxPQ0soaGkycyk7CisKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gSEFMX09LOworfQorCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qIFNQSV9JMlNfU1VQUE9SVCAqLworCisjZW5kaWYgLyogSEFMX0kyU19NT0RVTEVfRU5BQkxFRCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9oYWxfaXJkYS5jIGIvU3JjL3N0bTMyd2J4eF9oYWxfaXJkYS5jCmluZGV4IDY3NjhkY2YuLjU4YWVlNGQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfaGFsX2lyZGEuYworKysgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9pcmRhLmMKQEAgLTExMyw4ICsxMTMsOCBAQAogICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAKICAgICBbLi5dCi0gICAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX0lSREFfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KLSAgICBGdW5jdGlvbiBAcmVmIEhBTF9JUkRBX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICBVc2UgRnVuY3Rpb24gSEFMX0lSREFfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KKyAgICBGdW5jdGlvbiBIQUxfSVJEQV9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIFR4SGFsZkNwbHRDYWxsYmFjayAgICAgICAgOiBUeCBIYWxmIENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgICAgIDogVHggQ29tcGxldGUgQ2FsbGJhY2suCiAgICAgKCspIFJ4SGFsZkNwbHRDYWxsYmFjayAgICAgICAgOiBSeCBIYWxmIENvbXBsZXRlIENhbGxiYWNrLgpAQCAtMTI5LDkgKzEyOSw5IEBACiAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAogICAgIFsuLl0KLSAgICBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfSVJEQV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgVXNlIGZ1bmN0aW9uIEhBTF9JUkRBX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbi4KLSAgICBAcmVmIEhBTF9JUkRBX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwKKyAgICBIQUxfSVJEQV9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeEhhbGZDcGx0Q2FsbGJhY2sgICAgICAgIDogVHggSGFsZiBDb21wbGV0ZSBDYWxsYmFjay4KQEAgLTE0NiwxMyArMTQ2LDEzIEBACiAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgOiBJUkRBIE1zcERlSW5pdC4KIAogICAgIFsuLl0KLSAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfSVJEQV9Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9JUkRBX1NUQVRFX1JFU0VUCisgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9JUkRBX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX0lSREFfU1RBVEVfUkVTRVQKICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zOgotICAgIGV4YW1wbGVzIEByZWYgSEFMX0lSREFfVHhDcGx0Q2FsbGJhY2soKSwgQHJlZiBIQUxfSVJEQV9SeEhhbGZDcGx0Q2FsbGJhY2soKS4KKyAgICBleGFtcGxlcyBIQUxfSVJEQV9UeENwbHRDYWxsYmFjaygpLCBIQUxfSVJEQV9SeEhhbGZDcGx0Q2FsbGJhY2soKS4KICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNwZWN0aXZlbHkKLSAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfSVJEQV9Jbml0KCkKLSAgICBhbmQgQHJlZiBIQUxfSVJEQV9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX0lSREFfSW5pdCgpIGFuZCBAcmVmIEhBTF9JUkRBX0RlSW5pdCgpCisgICAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnMgaW4gdGhlIEhBTF9JUkRBX0luaXQoKQorICAgIGFuZCBIQUxfSVJEQV9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9JUkRBX0luaXQoKSBhbmQgSEFMX0lSREFfRGVJbml0KCkKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgogCiAgICAgWy4uXQpAQCAtMTYxLDggKzE2MSw4IEBACiAgICAgaW4gSEFMX0lSREFfU1RBVEVfUkVBRFkgb3IgSEFMX0lSREFfU1RBVEVfUkVTRVQgc3RhdGUsIHRodXMgcmVnaXN0ZXJlZCAodXNlcikKICAgICBNc3BJbml0L0RlSW5pdCBjYWxsYmFja3MgY2FuIGJlIHVzZWQgZHVyaW5nIHRoZSBJbml0L0RlSW5pdC4KICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCi0gICAgdXNpbmcgQHJlZiBIQUxfSVJEQV9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfSVJEQV9EZUluaXQoKQotICAgIG9yIEByZWYgSEFMX0lSREFfSW5pdCgpIGZ1bmN0aW9uLgorICAgIHVzaW5nIEhBTF9JUkRBX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfSVJEQV9EZUluaXQoKQorICAgIG9yIEhBTF9JUkRBX0luaXQoKSBmdW5jdGlvbi4KIAogICAgIFsuLl0KICAgICBXaGVuIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgVVNFX0hBTF9JUkRBX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgpAQCAtNzUzLDI4ICs3NTMsMjggQEAKICAgICAgICAgKCsrKSBIQUxfSVJEQV9FcnJvckNhbGxiYWNrKCkKIAogICAgICgjKSBOb24tQmxvY2tpbmcgbW9kZSB0cmFuc2ZlcnMgY291bGQgYmUgYWJvcnRlZCB1c2luZyBBYm9ydCBBUEkncyA6Ci0gICAgICAgICgrKSBIQUxfSVJEQV9BYm9ydCgpCi0gICAgICAgICgrKSBIQUxfSVJEQV9BYm9ydFRyYW5zbWl0KCkKLSAgICAgICAgKCspIEhBTF9JUkRBX0Fib3J0UmVjZWl2ZSgpCi0gICAgICAgICgrKSBIQUxfSVJEQV9BYm9ydF9JVCgpCi0gICAgICAgICgrKSBIQUxfSVJEQV9BYm9ydFRyYW5zbWl0X0lUKCkKLSAgICAgICAgKCspIEhBTF9JUkRBX0Fib3J0UmVjZWl2ZV9JVCgpCisgICAgICAgICgrKykgSEFMX0lSREFfQWJvcnQoKQorICAgICAgICAoKyspIEhBTF9JUkRBX0Fib3J0VHJhbnNtaXQoKQorICAgICAgICAoKyspIEhBTF9JUkRBX0Fib3J0UmVjZWl2ZSgpCisgICAgICAgICgrKykgSEFMX0lSREFfQWJvcnRfSVQoKQorICAgICAgICAoKyspIEhBTF9JUkRBX0Fib3J0VHJhbnNtaXRfSVQoKQorICAgICAgICAoKyspIEhBTF9JUkRBX0Fib3J0UmVjZWl2ZV9JVCgpCiAKICAgICAoIykgRm9yIEFib3J0IHNlcnZpY2VzIGJhc2VkIG9uIGludGVycnVwdHMgKEhBTF9JUkRBX0Fib3J0eHh4X0lUKSwgYSBzZXQgb2YgQWJvcnQgQ29tcGxldGUgQ2FsbGJhY2tzIGFyZSBwcm92aWRlZDoKLSAgICAgICAgKCspIEhBTF9JUkRBX0Fib3J0Q3BsdENhbGxiYWNrKCkKLSAgICAgICAgKCspIEhBTF9JUkRBX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKQotICAgICAgICAoKykgSEFMX0lSREFfQWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrKCkKKyAgICAgICAgKCsrKSBIQUxfSVJEQV9BYm9ydENwbHRDYWxsYmFjaygpCisgICAgICAgICgrKykgSEFMX0lSREFfQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjaygpCisgICAgICAgICgrKykgSEFMX0lSREFfQWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrKCkKIAogICAgICgjKSBJbiBOb24tQmxvY2tpbmcgbW9kZSB0cmFuc2ZlcnMsIHBvc3NpYmxlIGVycm9ycyBhcmUgc3BsaXQgaW50byAyIGNhdGVnb3JpZXMuCiAgICAgICAgIEVycm9ycyBhcmUgaGFuZGxlZCBhcyBmb2xsb3dzIDoKLSAgICAgICAoKykgRXJyb3IgaXMgY29uc2lkZXJlZCBhcyBSZWNvdmVyYWJsZSBhbmQgbm9uIGJsb2NraW5nIDogVHJhbnNmZXIgY291bGQgZ28gdGlsbCBlbmQsIGJ1dCBlcnJvciBzZXZlcml0eSBpcwotICAgICAgICAgICB0byBiZSBldmFsdWF0ZWQgYnkgdXNlciA6IHRoaXMgY29uY2VybnMgRnJhbWUgRXJyb3IsIFBhcml0eSBFcnJvciBvciBOb2lzZSBFcnJvciBpbiBJbnRlcnJ1cHQgbW9kZSByZWNlcHRpb24gLgotICAgICAgICAgICBSZWNlaXZlZCBjaGFyYWN0ZXIgaXMgdGhlbiByZXRyaWV2ZWQgYW5kIHN0b3JlZCBpbiBSeCBidWZmZXIsIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwKLSAgICAgICAgICAgYW5kIEhBTF9JUkRBX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLiBUcmFuc2ZlciBpcyBrZXB0IG9uZ29pbmcgb24gSVJEQSBzaWRlLgotICAgICAgICAgICBJZiB1c2VyIHdhbnRzIHRvIGFib3J0IGl0LCBBYm9ydCBzZXJ2aWNlcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHVzZXIuCi0gICAgICAgKCspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgQmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIHByb3Blcmx5IGFuZCBpcyBhYm9ydGVkLgotICAgICAgICAgICBUaGlzIGNvbmNlcm5zIE92ZXJydW4gRXJyb3IgSW4gSW50ZXJydXB0IG1vZGUgcmVjZXB0aW9uIGFuZCBhbGwgZXJyb3JzIGluIERNQSBtb2RlLgotICAgICAgICAgICBFcnJvciBjb2RlIGlzIHNldCB0byBhbGxvdyB1c2VyIHRvIGlkZW50aWZ5IGVycm9yIHR5cGUsIGFuZCBIQUxfSVJEQV9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4KKyAgICAgICAoKyspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgUmVjb3ZlcmFibGUgYW5kIG5vbiBibG9ja2luZyA6IFRyYW5zZmVyIGNvdWxkIGdvIHRpbGwgZW5kLCBidXQgZXJyb3Igc2V2ZXJpdHkgaXMKKyAgICAgICAgICAgIHRvIGJlIGV2YWx1YXRlZCBieSB1c2VyIDogdGhpcyBjb25jZXJucyBGcmFtZSBFcnJvciwgUGFyaXR5IEVycm9yIG9yIE5vaXNlIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiAuCisgICAgICAgICAgICBSZWNlaXZlZCBjaGFyYWN0ZXIgaXMgdGhlbiByZXRyaWV2ZWQgYW5kIHN0b3JlZCBpbiBSeCBidWZmZXIsIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwKKyAgICAgICAgICAgIGFuZCBIQUxfSVJEQV9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4gVHJhbnNmZXIgaXMga2VwdCBvbmdvaW5nIG9uIElSREEgc2lkZS4KKyAgICAgICAgICAgIElmIHVzZXIgd2FudHMgdG8gYWJvcnQgaXQsIEFib3J0IHNlcnZpY2VzIHNob3VsZCBiZSBjYWxsZWQgYnkgdXNlci4KKyAgICAgICAoKyspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgQmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIHByb3Blcmx5IGFuZCBpcyBhYm9ydGVkLgorICAgICAgICAgICAgVGhpcyBjb25jZXJucyBPdmVycnVuIEVycm9yIEluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiBhbmQgYWxsIGVycm9ycyBpbiBETUEgbW9kZS4KKyAgICAgICAgICAgIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwgYW5kIEhBTF9JUkRBX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLgogCiBAZW5kdmVyYmF0aW0KICAgKiBAewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9oYWxfbHB0aW0uYyBiL1NyYy9zdG0zMndieHhfaGFsX2xwdGltLmMKaW5kZXggODczZjk2My4uZGYzYzhiZiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9oYWxfbHB0aW0uYworKysgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9scHRpbS5jCkBAIC0xNzQsNyArMTc0LDYgQEAKIAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIExQVElNX1ByaXZhdGVfQ29uc3RhbnRzCiAgICogQHsKICAgKi8KQEAgLTE4Myw2ICsxODIsMjUgQEAKICAgKiBAfQogICAqLwogCisvKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBhZGR0b2dyb3VwIExQVElNX1ByaXZhdGVfTWFjcm9zCisgICogQHsKKyAgKi8KKyNpZiBkZWZpbmVkKExQVElNMikKKyNkZWZpbmUgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9FTkFCTEVfSVQoX19JTlNUQU5DRV9fKSBcCisgICAgICgoKF9fSU5TVEFOQ0VfXykgPT0gTFBUSU0xKSA/IF9fSEFMX0xQVElNX0xQVElNMV9FWFRJX0VOQUJMRV9JVCgpIDogX19IQUxfTFBUSU1fTFBUSU0yX0VYVElfRU5BQkxFX0lUKCkpCisKKyNkZWZpbmUgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0lUKF9fSU5TVEFOQ0VfXykgXAorICAgICAoKChfX0lOU1RBTkNFX18pID09IExQVElNMSkgPyBfX0hBTF9MUFRJTV9MUFRJTTFfRVhUSV9ESVNBQkxFX0lUKCkgOiBfX0hBTF9MUFRJTV9MUFRJTTJfRVhUSV9ESVNBQkxFX0lUKCkpCisjZWxzZQorI2RlZmluZSBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9JVChfX0lOU1RBTkNFX18pIF9fSEFMX0xQVElNX0xQVElNMV9FWFRJX0VOQUJMRV9JVCgpCisKKyNkZWZpbmUgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0lUKF9fSU5TVEFOQ0VfXykgX19IQUxfTFBUSU1fTFBUSU0xX0VYVElfRElTQUJMRV9JVCgpCisjZW5kaWYgLyogTFBUSU0yICovCisvKioKKyAgKiBAfQorICAqLworCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpZiAoVVNFX0hBTF9MUFRJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKQEAgLTIzNSwxNiArMjUzLDE5IEBACiAKICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1NPVVJDRShobHB0aW0tPkluaXQuQ2xvY2suU291cmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9DTE9DS19QUkVTQ0FMRVIoaGxwdGltLT5Jbml0LkNsb2NrLlByZXNjYWxlcikpOwotICBpZiAoKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UpID09IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkKKyAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQogICB7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0NMT0NLX1BPTEFSSVRZKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suUG9sYXJpdHkpKTsKLSAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fQ0xPQ0tfU0FNUExFX1RJTUUoaGxwdGltLT5Jbml0LlVsdHJhTG93UG93ZXJDbG9jay5TYW1wbGVUaW1lKSk7CiAgIH0KICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX1RSR19TT1VSQ0UoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlKSk7Ci0gIGlmICgoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlKSAhPSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKQorICBpZiAoaGxwdGltLT5Jbml0LlRyaWdnZXIuU291cmNlICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCisgIHsKKyAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fRVhUX1RSR19QT0xBUklUWShobHB0aW0tPkluaXQuVHJpZ2dlci5BY3RpdmVFZGdlKSk7CisgIH0KKyAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfQVBCQ0xPQ0tfTFBPU0MpCiAgIHsKICAgICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fVFJJR19TQU1QTEVfVElNRShobHB0aW0tPkluaXQuVHJpZ2dlci5TYW1wbGVUaW1lKSk7Ci0gICAgYXNzZXJ0X3BhcmFtKElTX0xQVElNX0VYVF9UUkdfUE9MQVJJVFkoaGxwdGltLT5Jbml0LlRyaWdnZXIuQWN0aXZlRWRnZSkpOworICAgIGFzc2VydF9wYXJhbShJU19MUFRJTV9DTE9DS19TQU1QTEVfVElNRShobHB0aW0tPkluaXQuVWx0cmFMb3dQb3dlckNsb2NrLlNhbXBsZVRpbWUpKTsKICAgfQogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fT1VUUFVUX1BPTEFSSVRZKGhscHRpbS0+SW5pdC5PdXRwdXRQb2xhcml0eSkpOwogICBhc3NlcnRfcGFyYW0oSVNfTFBUSU1fVVBEQVRFX01PREUoaGxwdGltLT5Jbml0LlVwZGF0ZU1vZGUpKTsKQEAgLTI3OCwxMyArMjk5LDE3IEBACiAgIC8qIEdldCB0aGUgTFBUSU14IENGR1IgdmFsdWUgKi8KICAgdG1wY2ZnciA9IGhscHRpbS0+SW5zdGFuY2UtPkNGR1I7CiAKLSAgaWYgKCgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSkgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKSB8fCAoKGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlKSA9PSBMUFRJTV9DT1VOVEVSU09VUkNFX0VYVEVSTkFMKSkKKyAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfVUxQVElNKQogICB7Ci0gICAgdG1wY2ZnciAmPSAodWludDMyX3QpKH4oTFBUSU1fQ0ZHUl9DS1BPTCB8IExQVElNX0NGR1JfQ0tGTFQpKTsKKyAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX0NLUE9MKSk7CiAgIH0KLSAgaWYgKChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UpICE9IExQVElNX1RSSUdTT1VSQ0VfU09GVFdBUkUpCisgIGlmIChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgIT0gTFBUSU1fVFJJR1NPVVJDRV9TT0ZUV0FSRSkKICAgewotICAgIHRtcGNmZ3IgJj0gKHVpbnQzMl90KSh+KExQVElNX0NGR1JfVFJHRkxUIHwgTFBUSU1fQ0ZHUl9UUklHU0VMKSk7CisgICAgdG1wY2ZnciAmPSAodWludDMyX3QpKH4oTFBUSU1fQ0ZHUl9UUklHU0VMKSk7CisgIH0KKyAgaWYgKGhscHRpbS0+SW5pdC5DbG9jay5Tb3VyY2UgPT0gTFBUSU1fQ0xPQ0tTT1VSQ0VfQVBCQ0xPQ0tfTFBPU0MpCisgIHsKKyAgICB0bXBjZmdyICY9ICh1aW50MzJfdCkofihMUFRJTV9DRkdSX1RSR0ZMVCB8IExQVElNX0NGR1JfQ0tGTFQpKTsKICAgfQogCiAgIC8qIENsZWFyIENLU0VMLCBDS1BPTCwgUFJFU0MsIFRSSUdFTiwgVFJHRkxULCBXQVZQT0wsIFBSRUxPQUQgJiBDT1VOVE1PREUgYml0cyAqLwpAQCAtMjk4LDE4ICszMjMsMjggQEAKICAgICAgICAgICAgICAgaGxwdGltLT5Jbml0LlVwZGF0ZU1vZGUgICAgICB8CiAgICAgICAgICAgICAgIGhscHRpbS0+SW5pdC5Db3VudGVyU291cmNlKTsKIAotICBpZiAoKChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlKSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pIHx8ICgoaGxwdGltLT5Jbml0LkNvdW50ZXJTb3VyY2UpID09IExQVElNX0NPVU5URVJTT1VSQ0VfRVhURVJOQUwpKQorICAvKiBHbGl0Y2ggZmlsdGVycyBmb3IgaW50ZXJuYWwgdHJpZ2dlcnMgYW5kICBleHRlcm5hbCBpbnB1dHMgYXJlIGNvbmZpZ3VyZWQKKyAgICogb25seSBpZiBhbiBpbnRlcm5hbCBjbG9jayBzb3VyY2UgaXMgcHJvdmlkZWQgdG8gdGhlIExQVElNCisgICAqLworICBpZiAoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSA9PSBMUFRJTV9DTE9DS1NPVVJDRV9BUEJDTE9DS19MUE9TQykKICAgewotICAgIHRtcGNmZ3IgfD0gKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suUG9sYXJpdHkgfAorICAgIHRtcGNmZ3IgfD0gKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNhbXBsZVRpbWUgfAogICAgICAgICAgICAgICAgIGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suU2FtcGxlVGltZSk7CiAgIH0KIAotICBpZiAoKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSkgIT0gTFBUSU1fVFJJR1NPVVJDRV9TT0ZUV0FSRSkKKyAgLyogQ29uZmlndXJlIHRoZSBhY3RpdmUgZWRnZSBvciBlZGdlcyB1c2VkIGJ5IHRoZSBjb3VudGVyIG9ubHkgaWYgTFBUSU0gaXMKKyAgICogY2xvY2tlZCBieSBhbiBleHRlcm5hbCBjbG9jayBzb3VyY2UKKyAgICovCisgIGlmIChobHB0aW0tPkluaXQuQ2xvY2suU291cmNlID09IExQVElNX0NMT0NLU09VUkNFX1VMUFRJTSkKKyAgeworICAgIHRtcGNmZ3IgfD0gKGhscHRpbS0+SW5pdC5VbHRyYUxvd1Bvd2VyQ2xvY2suUG9sYXJpdHkpOworICB9CisKKyAgaWYgKGhscHRpbS0+SW5pdC5UcmlnZ2VyLlNvdXJjZSAhPSBMUFRJTV9UUklHU09VUkNFX1NPRlRXQVJFKQogICB7CiAgICAgLyogRW5hYmxlIEV4dGVybmFsIHRyaWdnZXIgYW5kIHNldCB0aGUgdHJpZ2dlciBzb3VyY2UgKi8KLSAgICB0bXBjZmdyIHw9IChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgICAgIHwKLSAgICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVHJpZ2dlci5BY3RpdmVFZGdlIHwKLSAgICAgICAgICAgICAgICBobHB0aW0tPkluaXQuVHJpZ2dlci5TYW1wbGVUaW1lKTsKKyAgICB0bXBjZmdyIHw9IChobHB0aW0tPkluaXQuVHJpZ2dlci5Tb3VyY2UgfAorICAgICAgICAgICAgICAgIGhscHRpbS0+SW5pdC5UcmlnZ2VyLkFjdGl2ZUVkZ2UpOwogICB9CiAKICAgLyogV3JpdGUgdG8gTFBUSU14IENGR1IgKi8KQEAgLTE0MzgsNiArMTQ3Myw5IEBACiAgIC8qIFNldCB0aGUgTFBUSU0gc3RhdGUgKi8KICAgaGxwdGltLT5TdGF0ZSA9IEhBTF9MUFRJTV9TVEFURV9CVVNZOwogCisgIC8qIEVuYWJsZSBFWFRJIExpbmUgaW50ZXJydXB0IG9uIHRoZSBMUFRJTSBXYWtlLXVwIFRpbWVyICovCisgIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRU5BQkxFX0lUKGhscHRpbS0+SW5zdGFuY2UpOworCiAgIC8qIFNldCBUSU1PVVQgYml0IHRvIGVuYWJsZSB0aGUgdGltZW91dCBmdW5jdGlvbiAqLwogICBobHB0aW0tPkluc3RhbmNlLT5DRkdSIHw9IExQVElNX0NGR1JfVElNT1VUOwogCkBAIC0xNTA1LDYgKzE1NDMsOSBAQAogICAvKiBTZXQgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfQlVTWTsKIAorICAvKiBEaXNhYmxlIEVYVEkgTGluZSBpbnRlcnJ1cHQgb24gdGhlIExQVElNIFdha2UtdXAgVGltZXIgKi8KKyAgX19IQUxfTFBUSU1fV0FLRVVQVElNRVJfRVhUSV9ESVNBQkxFX0lUKGhscHRpbS0+SW5zdGFuY2UpOworCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfTFBUSU1fRElTQUJMRShobHB0aW0pOwogCkBAIC0xNjIwLDYgKzE2NjEsOSBAQAogICAvKiBTZXQgdGhlIExQVElNIHN0YXRlICovCiAgIGhscHRpbS0+U3RhdGUgPSBIQUxfTFBUSU1fU1RBVEVfQlVTWTsKIAorICAvKiBFbmFibGUgRVhUSSBMaW5lIGludGVycnVwdCBvbiB0aGUgTFBUSU0gV2FrZS11cCBUaW1lciAqLworICBfX0hBTF9MUFRJTV9XQUtFVVBUSU1FUl9FWFRJX0VOQUJMRV9JVChobHB0aW0tPkluc3RhbmNlKTsKKwogICAvKiBJZiBjbG9jayBzb3VyY2UgaXMgbm90IFVMUFRJTSBjbG9jayBhbmQgY291bnRlciBzb3VyY2UgaXMgZXh0ZXJuYWwsIHRoZW4gaXQgbXVzdCBub3QgYmUgcHJlc2NhbGVkICovCiAgIGlmICgoaGxwdGltLT5Jbml0LkNsb2NrLlNvdXJjZSAhPSBMUFRJTV9DTE9DS1NPVVJDRV9VTFBUSU0pICYmIChobHB0aW0tPkluaXQuQ291bnRlclNvdXJjZSA9PSBMUFRJTV9DT1VOVEVSU09VUkNFX0VYVEVSTkFMKSkKICAgewpAQCAtMTY4NCw2ICsxNzI4LDkgQEAKICAgLyogU2V0IHRoZSBMUFRJTSBzdGF0ZSAqLwogICBobHB0aW0tPlN0YXRlID0gSEFMX0xQVElNX1NUQVRFX0JVU1k7CiAKKyAgLyogRGlzYWJsZSBFWFRJIExpbmUgaW50ZXJydXB0IG9uIHRoZSBMUFRJTSBXYWtlLXVwIFRpbWVyICovCisgIF9fSEFMX0xQVElNX1dBS0VVUFRJTUVSX0VYVElfRElTQUJMRV9JVChobHB0aW0tPkluc3RhbmNlKTsKKwogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX0xQVElNX0RJU0FCTEUoaGxwdGltKTsKIApAQCAtMjMwNCwxNyArMjM1MSwxNyBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiByZXN1bHQgPSBIQUxfT0s7CiAgIHVpbnQzMl90IGNvdW50ID0gVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAyMFVMIC8gMTAwMFVMKTsKLSAgICBkbworICBkbworICB7CisgICAgY291bnQtLTsKKyAgICBpZiAoY291bnQgPT0gMFVMKQogICAgIHsKLSAgICAgIGNvdW50LS07Ci0gICAgICBpZiAoY291bnQgPT0gMFVMKQotICAgICAgewotICAgICAgICByZXN1bHQgPSBIQUxfVElNRU9VVDsKLSAgICAgIH0KKyAgICAgIHJlc3VsdCA9IEhBTF9USU1FT1VUOwogICAgIH0KLSAgICB3aGlsZSgoIShfX0hBTF9MUFRJTV9HRVRfRkxBRygoaGxwdGltKSwgKGZsYWcpKSkpICYmIChjb3VudCAhPSAwVUwpKTsKKyAgfQorICB3aGlsZSAoKCEoX19IQUxfTFBUSU1fR0VUX0ZMQUcoKGhscHRpbSksIChmbGFnKSkpKSAmJiAoY291bnQgIT0gMFVMKSk7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICByZXR1cm4gcmVzdWx0OwogfQogCiAvKioKQEAgLTIzNDEsMTYgKzIzODgsMTYgQEAKICAgLyogU2F2ZSBMUFRJTSBzb3VyY2UgY2xvY2sgKi8KICAgc3dpdGNoICgodWludDMyX3QpaGxwdGltLT5JbnN0YW5jZSkKICAgewotICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgIHRtcGNsa3NvdXJjZSA9IF9fSEFMX1JDQ19HRVRfTFBUSU0xX1NPVVJDRSgpOwotICAgICAgIGJyZWFrOworICAgIGNhc2UgTFBUSU0xX0JBU0U6CisgICAgICB0bXBjbGtzb3VyY2UgPSBfX0hBTF9SQ0NfR0VUX0xQVElNMV9TT1VSQ0UoKTsKKyAgICAgIGJyZWFrOwogI2lmIGRlZmluZWQoTFBUSU0yKQotICAgICBjYXNlIExQVElNMl9CQVNFOgotICAgICAgIHRtcGNsa3NvdXJjZSA9IF9fSEFMX1JDQ19HRVRfTFBUSU0yX1NPVVJDRSgpOwotICAgICAgIGJyZWFrOworICAgIGNhc2UgTFBUSU0yX0JBU0U6CisgICAgICB0bXBjbGtzb3VyY2UgPSBfX0hBTF9SQ0NfR0VUX0xQVElNMl9TT1VSQ0UoKTsKKyAgICAgIGJyZWFrOwogI2VuZGlmIC8qIExQVElNMiAqLwotICAgICBkZWZhdWx0OgotICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKICAgfQogCiAgIC8qIFNhdmUgTFBUSU0gY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KQEAgLTIzNjMsMTggKzI0MTAsMTggQEAKICAgLyoqKioqKioqKioqIFJlc2V0IExQVElNICoqKioqKioqKioqLwogICBzd2l0Y2ggKCh1aW50MzJfdClobHB0aW0tPkluc3RhbmNlKQogICB7Ci0gICAgIGNhc2UgTFBUSU0xX0JBU0U6Ci0gICAgICAgX19IQUxfUkNDX0xQVElNMV9GT1JDRV9SRVNFVCgpOwotICAgICAgIF9fSEFMX1JDQ19MUFRJTTFfUkVMRUFTRV9SRVNFVCgpOwotICAgICAgIGJyZWFrOworICAgIGNhc2UgTFBUSU0xX0JBU0U6CisgICAgICBfX0hBTF9SQ0NfTFBUSU0xX0ZPUkNFX1JFU0VUKCk7CisgICAgICBfX0hBTF9SQ0NfTFBUSU0xX1JFTEVBU0VfUkVTRVQoKTsKKyAgICAgIGJyZWFrOwogI2lmIGRlZmluZWQoTFBUSU0yKQotICAgICBjYXNlIExQVElNMl9CQVNFOgotICAgICAgIF9fSEFMX1JDQ19MUFRJTTJfRk9SQ0VfUkVTRVQoKTsKLSAgICAgICBfX0hBTF9SQ0NfTFBUSU0yX1JFTEVBU0VfUkVTRVQoKTsKLSAgICAgICBicmVhazsKKyAgICBjYXNlIExQVElNMl9CQVNFOgorICAgICAgX19IQUxfUkNDX0xQVElNMl9GT1JDRV9SRVNFVCgpOworICAgICAgX19IQUxfUkNDX0xQVElNMl9SRUxFQVNFX1JFU0VUKCk7CisgICAgICBicmVhazsKICNlbmRpZiAvKiBMUFRJTTIgKi8KLSAgICAgZGVmYXVsdDoKLSAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CiAgIH0KIAogICAvKioqKioqKioqKiogUmVzdG9yZSBMUFRJTSBDb25maWcgKioqKioqKioqKiovCkBAIC0yMzgzLDE2ICsyNDMwLDE2IEBACiAgICAgLyogRm9yY2UgTFBUSU0gc291cmNlIGtlcm5lbCBjbG9jayBmcm9tIEFQQiAqLwogICAgIHN3aXRjaCAoKHVpbnQzMl90KWhscHRpbS0+SW5zdGFuY2UpCiAgICAgewotICAgICAgIGNhc2UgTFBUSU0xX0JBU0U6Ci0gICAgICAgICBfX0hBTF9SQ0NfTFBUSU0xX0NPTkZJRyhSQ0NfTFBUSU0xQ0xLU09VUkNFX1BDTEsxKTsKLSAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMUFRJTTFfQkFTRToKKyAgICAgICAgX19IQUxfUkNDX0xQVElNMV9DT05GSUcoUkNDX0xQVElNMUNMS1NPVVJDRV9QQ0xLMSk7CisgICAgICAgIGJyZWFrOwogI2lmIGRlZmluZWQoTFBUSU0yKQotICAgICAgIGNhc2UgTFBUSU0yX0JBU0U6Ci0gICAgICAgICBfX0hBTF9SQ0NfTFBUSU0yX0NPTkZJRyhSQ0NfTFBUSU0yQ0xLU09VUkNFX1BDTEsxKTsKLSAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMUFRJTTJfQkFTRToKKyAgICAgICAgX19IQUxfUkNDX0xQVElNMl9DT05GSUcoUkNDX0xQVElNMkNMS1NPVVJDRV9QQ0xLMSk7CisgICAgICAgIGJyZWFrOwogI2VuZGlmIC8qIExQVElNMiAqLwotICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGlmICh0bXBDTVAgIT0gMFVMKQpAQCAtMjQyNywxNiArMjQ3NCwxNiBAQAogICAgIC8qIFJlc3RvcmUgTFBUSU0gc291cmNlIGtlcm5lbCBjbG9jayAqLwogICAgIHN3aXRjaCAoKHVpbnQzMl90KWhscHRpbS0+SW5zdGFuY2UpCiAgICAgewotICAgICAgIGNhc2UgTFBUSU0xX0JBU0U6Ci0gICAgICAgICBfX0hBTF9SQ0NfTFBUSU0xX0NPTkZJRyh0bXBjbGtzb3VyY2UpOwotICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIExQVElNMV9CQVNFOgorICAgICAgICBfX0hBTF9SQ0NfTFBUSU0xX0NPTkZJRyh0bXBjbGtzb3VyY2UpOworICAgICAgICBicmVhazsKICNpZiBkZWZpbmVkKExQVElNMikKLSAgICAgICBjYXNlIExQVElNMl9CQVNFOgotICAgICAgICAgX19IQUxfUkNDX0xQVElNMl9DT05GSUcodG1wY2xrc291cmNlKTsKLSAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMUFRJTTJfQkFTRToKKyAgICAgICAgX19IQUxfUkNDX0xQVElNMl9DT05GSUcodG1wY2xrc291cmNlKTsKKyAgICAgICAgYnJlYWs7CiAjZW5kaWYgLyogTFBUSU0yICovCi0gICAgICAgZGVmYXVsdDoKLSAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfaGFsX3BrYS5jIGIvU3JjL3N0bTMyd2J4eF9oYWxfcGthLmMKaW5kZXggY2Y5M2U3Yy4uZjRlZjIwNyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9oYWxfcGthLmMKKysrIGIvU3JjL3N0bTMyd2J4eF9oYWxfcGthLmMKQEAgLTE3NzAsNDYgKzE3NzAsNyBAQAogewogICB1aW50MzJfdCBwb3NpdGlvbjsKIAotI2lmIGRlZmluZWQoQ09SRV9DTTBQTFVTKQotICBpZiAobXNiID4gMHg3RlUpCi0gIHsKLSAgICBwb3NpdGlvbiA9IDhVTDsKLSAgfQotICBlbHNlIGlmIChtc2IgPiAweDNGVSkKLSAgewotICAgIHBvc2l0aW9uID0gN1VMOwotICB9Ci0gIGVsc2UgaWYgKG1zYiA+IDB4MUZVKQotICB7Ci0gICAgcG9zaXRpb24gPSA2VUw7Ci0gIH0KLSAgZWxzZSBpZiAobXNiID4gMHgwRlUpCi0gIHsKLSAgICBwb3NpdGlvbiA9IDVVTDsKLSAgfQotICBlbHNlIGlmIChtc2IgPiAweDA3VSkKLSAgewotICAgIHBvc2l0aW9uID0gNFVMOwotICB9Ci0gIGVsc2UgaWYgKG1zYiA+IDB4MDNVKQotICB7Ci0gICAgcG9zaXRpb24gPSAzVUw7Ci0gIH0KLSAgZWxzZSBpZiAobXNiID4gMHgwMVUpCi0gIHsKLSAgICBwb3NpdGlvbiA9IDJVTDsKLSAgfQotICBlbHNlIGlmIChtc2IgPiAweDAwVSkKLSAgewotICAgIHBvc2l0aW9uID0gMVVMOwotICB9Ci0gIGVsc2UKLSAgewotICAgIHBvc2l0aW9uID0gMFVMOwotICB9Ci0jZWxzZQogICBwb3NpdGlvbiA9IDMyVUwgLSBfX0NMWihtc2IpOwotI2VuZGlmCiAKICAgcmV0dXJuICgoKGJ5dGVOdW1iZXIgLSAxVUwpICogOFVMKSArIHBvc2l0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfaGFsX3JjYy5jIGIvU3JjL3N0bTMyd2J4eF9oYWxfcmNjLmMKaW5kZXggYzZmMmMwMi4uNzlhNGQ0MSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9oYWxfcmNjLmMKKysrIGIvU3JjL3N0bTMyd2J4eF9oYWxfcmNjLmMKQEAgLTc2LDcgKzc2LDkgQEAKICNkZWZpbmUgTFNJMl9USU1FT1VUX1ZBTFVFICAgICAgICAgKDNVKSAgICAvKiB0byBiZSBhZGp1c3RlZCB3aXRoIERTICAgICovCiAjZGVmaW5lIEhTSTQ4X1RJTUVPVVRfVkFMVUUgICAgICAgICgyVSkgICAgLyogMiBtcyAobWluaW11bSBUaWNrICsgMSkgICAqLwogI2RlZmluZSBQTExfVElNRU9VVF9WQUxVRSAgICAgICAgICAoMlUpICAgIC8qIDIgbXMgKG1pbmltdW0gVGljayArIDEpICAgKi8KKyNpZiBkZWZpbmVkKFNBSTEpCiAjZGVmaW5lIFBMTFNBSTFfVElNRU9VVF9WQUxVRSAgICAgICgyVSkgICAgLyogMiBtcyAobWluaW11bSBUaWNrICsgMSkgICAqLworI2VuZGlmCiAjZGVmaW5lIFBSRVNDQUxFUl9USU1FT1VUX1ZBTFVFICAgICgyVSkgICAgLyogMiBtcyAobWluaW11bSBUaWNrICsgMSkgICAqLwogI2RlZmluZSBMQVRFTkNZX1RJTUVPVVRfVkFMVUUgICAgICAoMlUpICAgIC8qIDIgbXMgKG1pbmltdW0gVGljayArIDEpICAgKi8KICNkZWZpbmUgQ0xPQ0tTV0lUQ0hfVElNRU9VVF9WQUxVRSAgKDUwMDBVKSAvKiA1IHMgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNzIsNiArMjc0LDkgQEAKICAgLyogR2V0IFN0YXJ0IFRpY2sqLwogICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCisgIC8qIE1TSSBQTEwgT0ZGICovCisgIExMX1JDQ19NU0lfRGlzYWJsZVBMTE1vZGUoKTsKKyAgCiAgIC8qIFNldCBNU0lPTiBiaXQgKi8KICAgTExfUkNDX01TSV9FbmFibGUoKTsKIApAQCAtMzc4LDYgKzM4Myw3IEBACiAgICogQHBhcmFtICBSQ0NfT3NjSW5pdFN0cnVjdCAgcG9pbnRlciB0byBhIEByZWYgUkNDX09zY0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0CiAgICogICAgICAgICBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIFJDQyBPc2NpbGxhdG9ycy4KICAgKiBAbm90ZSAgIFRoZSBQTEwgaXMgbm90IGRpc2FibGVkIHdoZW4gdXNlZCBhcyBzeXN0ZW0gY2xvY2suCisgICogQG5vdGUgICBUaGUgUExMIHNvdXJjZSBpcyBub3QgdXBkYXRlZCB3aGVuIHVzZWQgYXMgUExMU0FJMSBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUkNDX09zY0NvbmZpZyhSQ0NfT3NjSW5pdFR5cGVEZWYgICpSQ0NfT3NjSW5pdFN0cnVjdCkKQEAgLTg2MCw2NiArODY2LDEyNiBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfUkNDX1BMTChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFN0YXRlKSk7CiAKLSAgaWYgKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU3RhdGUgIT0gUkNDX1BMTF9OT05FKQorICBpZihSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFN0YXRlICE9IFJDQ19QTExfTk9ORSkKICAgewotICAgIC8qIENoZWNrIGlmIHRoZSBQTEwgaXMgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgb3Igbm90ICovCi0gICAgaWYgKF9fSEFMX1JDQ19HRVRfU1lTQ0xLX1NPVVJDRSgpICE9IFJDQ19TWVNDTEtTT1VSQ0VfU1RBVFVTX1BMTENMSykKKyAgICBjb25zdCB1aW50MzJfdCB0ZW1wX3N5c2Nsa3NyYyA9IF9fSEFMX1JDQ19HRVRfU1lTQ0xLX1NPVVJDRSgpOworICAgIGNvbnN0IHVpbnQzMl90IHRlbXBfcGxsY29uZmlnID0gUkNDLT5QTExDRkdSOworICAgIAorICAgIC8qIFBMTCBPbiA/ICovCisgICAgaWYoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExTdGF0ZSA9PSBSQ0NfUExMX09OKQogICAgIHsKLSAgICAgIGlmIChSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFN0YXRlID09IFJDQ19QTExfT04pCisgICAgICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICAgICAgYXNzZXJ0X3BhcmFtKElTX1JDQ19QTExTT1VSQ0UoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExTb3VyY2UpKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMTV9WQUxVRShSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE0pKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMTl9WQUxVRShSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE4pKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMUF9WQUxVRShSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFApKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMUV9WQUxVRShSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFEpKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMUl9WQUxVRShSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFIpKTsKKyAgICAgIAorICAgICAgLyogRG8gbm90aGluZyBpZiBQTEwgY29uZmlndXJhdGlvbiBpcyB1bmNoYW5nZWQgKi8KKyAgICAgIGlmICgoUkVBRF9CSVQodGVtcF9wbGxjb25maWcsIFJDQ19QTExDRkdSX1BMTFNSQykgIT0gUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExTb3VyY2UpIHx8CisgICAgICAgICAgKFJFQURfQklUKHRlbXBfcGxsY29uZmlnLCBSQ0NfUExMQ0ZHUl9QTExNKSAhPSBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE0pIHx8CisgICAgICAgICAgKChSRUFEX0JJVCh0ZW1wX3BsbGNvbmZpZywgUkNDX1BMTENGR1JfUExMTikgPj4gUkNDX1BMTENGR1JfUExMTl9Qb3MpICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMTikgfHwKKyAgICAgICAgICAoUkVBRF9CSVQodGVtcF9wbGxjb25maWcsIFJDQ19QTExDRkdSX1BMTFApICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUCkgfHwKKyAgICAgICAgICAoUkVBRF9CSVQodGVtcF9wbGxjb25maWcsIFJDQ19QTExDRkdSX1BMTFEpICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUSkgfHwKKyAgICAgICAgICAoUkVBRF9CSVQodGVtcF9wbGxjb25maWcsIFJDQ19QTExDRkdSX1BMTFIpICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUikpCiAgICAgICB7Ci0gICAgICAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gICAgICAgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMU09VUkNFKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU291cmNlKSk7Ci0gICAgICAgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMTV9WQUxVRShSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE0pKTsKLSAgICAgICAgYXNzZXJ0X3BhcmFtKElTX1JDQ19QTExOX1ZBTFVFKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMTikpOwotICAgICAgICBhc3NlcnRfcGFyYW0oSVNfUkNDX1BMTFBfVkFMVUUoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExQKSk7Ci0gICAgICAgIGFzc2VydF9wYXJhbShJU19SQ0NfUExMUV9WQUxVRShSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFEpKTsKLSAgICAgICAgYXNzZXJ0X3BhcmFtKElTX1JDQ19QTExSX1ZBTFVFKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUikpOwotCi0gICAgICAgIC8qIERpc2FibGUgdGhlIG1haW4gUExMLiAqLwotICAgICAgICBfX0hBTF9SQ0NfUExMX0RJU0FCTEUoKTsKLQotICAgICAgICAvKiBHZXQgU3RhcnQgVGljayovCi0gICAgICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0KLSAgICAgICAgLyogV2FpdCB0aWxsIFBMTCBpcyByZWFkeSAqLwotICAgICAgICB3aGlsZSAoTExfUkNDX1BMTF9Jc1JlYWR5KCkgIT0gMFUpCisgICAgICAgIC8qIENoZWNrIGlmIHRoZSBQTEwgaXMgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgb3Igbm90ICovCisgICAgICAgIGlmICh0ZW1wX3N5c2Nsa3NyYyAhPSBSQ0NfU1lTQ0xLU09VUkNFX1NUQVRVU19QTExDTEspCiAgICAgICAgIHsKLSAgICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUExMX1RJTUVPVVRfVkFMVUUpCisjaWYgZGVmaW5lZChTQUkxKQorICAgICAgICAgIC8qIENoZWNrIGlmIG1haW4gUExMIGNhbiBiZSB1cGRhdGVkICovCisgICAgICAgICAgLyogTm90IHBvc3NpYmxlIGlmIHRoZSBzb3VyY2UgaXMgc2hhcmVkIGJ5IG90aGVyIGVuYWJsZWQgUExMU0FJeCAqLworICAgICAgICAgIGlmIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfUExMU0FJMU9OKSAhPSAwVSkKKwogICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIERpc2FibGUgdGhlIG1haW4gUExMLiAqLworICAgICAgICAgICAgX19IQUxfUkNDX1BMTF9ESVNBQkxFKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIEdldCBTdGFydCBUaWNrKi8KKyAgICAgICAgICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIFdhaXQgdGlsbCBQTEwgaXMgcmVhZHkgKi8KKyAgICAgICAgICAgIHdoaWxlIChSRUFEX0JJVChSQ0MtPkNSLCBSQ0NfQ1JfUExMUkRZKSAhPSAwVSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFBMTF9USU1FT1VUX1ZBTFVFKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgbWFpbiBQTEwgY2xvY2sgc291cmNlLCBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24gZmFjdG9ycy4gKi8KKyAgICAgICAgICAgIF9fSEFMX1JDQ19QTExfQ09ORklHKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExRLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyogRW5hYmxlIHRoZSBtYWluIFBMTC4gKi8KKyAgICAgICAgICAgIF9fSEFMX1JDQ19QTExfRU5BQkxFKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIEVuYWJsZSBQTEwgU3lzdGVtIENsb2NrIG91dHB1dC4gKi8KKyAgICAgICAgICAgIF9fSEFMX1JDQ19QTExDTEtPVVRfRU5BQkxFKFJDQ19QTExfU1lTQ0xLKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyogR2V0IFN0YXJ0IFRpY2sqLworICAgICAgICAgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyogV2FpdCB0aWxsIFBMTCBpcyByZWFkeSAqLworICAgICAgICAgICAgd2hpbGUgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExSRFkpID09IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUExMX1RJTUVPVVRfVkFMVUUpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICAvKiBDb25maWd1cmUgdGhlIG1haW4gUExMIGNsb2NrIHNvdXJjZSwgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIGZhY3RvcnMuICovCi0gICAgICAgIF9fSEFMX1JDQ19QTExfQ09ORklHKFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTE0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExQLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUik7Ci0KLSAgICAgICAgLyogRW5hYmxlIHRoZSBtYWluIFBMTC4gKi8KLSAgICAgICAgX19IQUxfUkNDX1BMTF9FTkFCTEUoKTsKLQotICAgICAgICAvKiBFbmFibGUgUExMIFN5c3RlbSBDbG9jayBvdXRwdXQuICovCi0gICAgICAgIF9fSEFMX1JDQ19QTExDTEtPVVRfRU5BQkxFKFJDQ19QTExfU1lTQ0xLKTsKLQotICAgICAgICAvKiBHZXQgU3RhcnQgVGljayovCi0gICAgICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7Ci0KLSAgICAgICAgLyogV2FpdCB0aWxsIFBMTCBpcyByZWFkeSAqLwotICAgICAgICB3aGlsZSAoTExfUkNDX1BMTF9Jc1JlYWR5KCkgPT0gMFUpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBQTExfVElNRU9VVF9WQUxVRSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgICAgICAgfQorICAgICAgICAgIC8qIFBMTCBpcyBhbHJlYWR5IHVzZWQgYXMgU3lzdGVtIGNvcmUgY2xvY2sgKi8KKyAgICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CisgICAgICAgIC8qIFBMTCBjb25maWd1cmF0aW9uIGlzIHVuY2hhbmdlZCAqLworICAgICAgICAvKiBSZS1lbmFibGUgUExMIGlmIGl0IHdhcyBkaXNhYmxlZCAoaWUuIGxvdyBwb3dlciBtb2RlKSAqLworICAgICAgICBpZiAoUkVBRF9CSVQoUkNDLT5DUiwgUkNDX0NSX1BMTFJEWSkgPT0gMFUpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBFbmFibGUgdGhlIG1haW4gUExMLiAqLworICAgICAgICAgIF9fSEFMX1JDQ19QTExfRU5BQkxFKCk7CisKKyAgICAgICAgICAvKiBFbmFibGUgUExMIFN5c3RlbSBDbG9jayBvdXRwdXQuICovCisgICAgICAgICAgX19IQUxfUkNDX1BMTENMS09VVF9FTkFCTEUoUkNDX1BMTF9TWVNDTEspOworCisgICAgICAgICAgLyogR2V0IFN0YXJ0IFRpY2sqLworICAgICAgICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisKKyAgICAgICAgICAvKiBXYWl0IHRpbGwgUExMIGlzIHJlYWR5ICovCisgICAgICAgICAgd2hpbGUgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExSRFkpID09IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFBMTF9USU1FT1VUX1ZBTFVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBDaGVjayB0aGF0IFBMTCBpcyBub3QgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgb3Igbm90ICovCisgICAgICBpZiAodGVtcF9zeXNjbGtzcmMgIT0gUkNDX1NZU0NMS1NPVVJDRV9TVEFUVVNfUExMQ0xLKQorICAgICAgewogICAgICAgICAvKiBEaXNhYmxlIHRoZSBtYWluIFBMTC4gKi8KICAgICAgICAgX19IQUxfUkNDX1BMTF9ESVNBQkxFKCk7CisgICAgICAgIAogCiAgICAgICAgIC8qIERpc2FibGUgYWxsIFBMTCBvdXRwdXRzIHRvIHNhdmUgcG93ZXIgKi8KICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPlBMTENGR1IsIFJDQ19QTExDRkdSX1BMTFNSQywgUExMU09VUkNFX05PTkUpOwpAQCAtOTMyLDkgKzk5OCw5IEBACiAKICAgICAgICAgLyogR2V0IFN0YXJ0IFRpY2sqLwogICAgICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotCisgICAgICAgIAogICAgICAgICAvKiBXYWl0IHRpbGwgUExMIGlzIGRpc2FibGVkICovCi0gICAgICAgIHdoaWxlIChMTF9SQ0NfUExMX0lzUmVhZHkoKSAhPSAwVSkKKyAgICAgICAgd2hpbGUgKFJFQURfQklUKFJDQy0+Q1IsIFJDQ19DUl9QTExSRFkpICE9IDBVKQogICAgICAgICB7CiAgICAgICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFBMTF9USU1FT1VUX1ZBTFVFKQogICAgICAgICAgIHsKQEAgLTk0MiwyOCArMTAwOCwxMCBAQAogICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYSByZXF1ZXN0IHRvIGRpc2FibGUgdGhlIFBMTCB1c2VkIGFzIFN5c3RlbSBjbG9jayBzb3VyY2UgKi8KLSAgICAgIGlmICgoUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExTdGF0ZSkgPT0gUkNDX1BMTF9PRkYpCi0gICAgICB7Ci0gICAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIC8qIERvIG5vdCByZXR1cm4gSEFMX0VSUk9SIGlmIHJlcXVlc3QgcmVwZWF0cyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uICovCi0gICAgICAgIHVpbnQzMl90IHBsbGNmZ3IgPSBSQ0MtPlBMTENGR1I7Ci0KLSAgICAgICAgaWYgKChSRUFEX0JJVChwbGxjZmdyLCBSQ0NfUExMQ0ZHUl9QTExTUkMpICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMU291cmNlKSB8fAotICAgICAgICAgICAgKFJFQURfQklUKHBsbGNmZ3IsIFJDQ19QTExDRkdSX1BMTE0pICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMTSkgfHwKLSAgICAgICAgICAgICgoUkVBRF9CSVQocGxsY2ZnciwgUkNDX1BMTENGR1JfUExMTikgPj4gUkNDX1BMTENGR1JfUExMTl9Qb3MpICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMTikgfHwKLSAgICAgICAgICAgIChSRUFEX0JJVChwbGxjZmdyLCBSQ0NfUExMQ0ZHUl9QTExQKSAhPSBSQ0NfT3NjSW5pdFN0cnVjdC0+UExMLlBMTFApIHx8Ci0gICAgICAgICAgICAoUkVBRF9CSVQocGxsY2ZnciwgUkNDX1BMTENGR1JfUExMUSkgIT0gUkNDX09zY0luaXRTdHJ1Y3QtPlBMTC5QTExRKSB8fAotICAgICAgICAgICAgKFJFQURfQklUKHBsbGNmZ3IsIFJDQ19QTExDRkdSX1BMTFIpICE9IFJDQ19Pc2NJbml0U3RydWN0LT5QTEwuUExMUikpCi0gICAgICAgIHsKLSAgICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgICAgICB9CisgICAgICAgIC8qIFBMTCBpcyBhbHJlYWR5IHVzZWQgYXMgU3lzdGVtIGNvcmUgY2xvY2sgKi8KKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICAgIH0KICAgICB9CiAgIH0KQEAgLTEzMDIsNyArMTM1MCw4IEBACiAgICAgSEFMX0dQSU9fSW5pdChNQ08yX0dQSU9fUE9SVCwgJkdQSU9fSW5pdFN0cnVjdCk7CiAKICAgfQotICBlbHNlCisjaWYgZGVmaW5lZChSQ0NfTUNPM19TVVBQT1JUKQorICBlbHNlIGlmIChSQ0NfTUNPeCA9PSBSQ0NfTUNPMykKICAgewogICAgIC8qIE1DTzMgQ2xvY2sgRW5hYmxlICovCiAgICAgX19NQ08zX0NMS19FTkFCTEUoKTsKQEAgLTEzMTEsNiArMTM2MCwxMSBAQAogICAgIEdQSU9fSW5pdFN0cnVjdC5BbHRlcm5hdGUgPSBHUElPX0FGNl9NQ087CiAgICAgSEFMX0dQSU9fSW5pdChNQ08zX0dQSU9fUE9SVCwgJkdQSU9fSW5pdFN0cnVjdCk7CiAgIH0KKyNlbmRpZgorICBlbHNlCisgIHsKKyAgICA7CisgIH0KIAogICAvKiBNYXNrIE1DT1NFTFtdIGFuZCBNQ09QUkVbXSBiaXRzIHRoZW4gc2V0IE1DTyBjbG9jayBzb3VyY2UgYW5kIHByZXNjYWxlciAqLwogICBMTF9SQ0NfQ29uZmlnTUNPKFJDQ19NQ09Tb3VyY2UsIFJDQ19NQ09EaXYpOwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9oYWxfcmNjX2V4LmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9yY2NfZXguYwppbmRleCA5NjhlOTBmLi40OWQ0OTQzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJ3Ynh4X2hhbF9yY2NfZXguYworKysgYi9TcmMvc3RtMzJ3Ynh4X2hhbF9yY2NfZXguYwpAQCAtNDIsNyArNDIsOSBAQAogLyoqIEBkZWZncm91cCBSQ0NFeF9Qcml2YXRlX0NvbnN0YW50cyBSQ0NFeCBQcml2YXRlIENvbnN0YW50cwogICogQHsKICAqLworI2lmIGRlZmluZWQoU0FJMSkKICNkZWZpbmUgUExMU0FJMV9USU1FT1VUX1ZBTFVFICAgICgyVSkgICAgLyogMiBtcyAobWluaW11bSBUaWNrICsgMSkgKi8KKyNlbmRpZgogI2RlZmluZSBQTExfVElNRU9VVF9WQUxVRSAgICAgICAgKDJVKSAgICAvKiAyIG1zIChtaW5pbXVtIFRpY2sgKyAxKSAqLwogCiAjZGVmaW5lIENMT0NLU01QU19USU1FT1VUX1ZBTFVFICAoNTAwMFUpIC8qIDUgcyAgICAqLwpAQCAtNTUsOSArNTcsMTEgQEAKICNkZWZpbmUgTFNDTzJfR1BJT19QT1JUICAgICAgICBHUElPSAogI2RlZmluZSBMU0NPMl9QSU4gICAgICAgICAgICAgIEdQSU9fUElOXzMKIAorI2lmIGRlZmluZWQoUkNDX0xTQ08zX1NVUFBPUlQpCiAjZGVmaW5lIF9fTFNDTzNfQ0xLX0VOQUJMRSgpICAgX19IQUxfUkNDX0dQSU9DX0NMS19FTkFCTEUoKQogI2RlZmluZSBMU0NPM19HUElPX1BPUlQgICAgICAgIEdQSU9DCiAjZGVmaW5lIExTQ08zX1BJTiAgICAgICAgICAgICAgR1BJT19QSU5fMTIKKyNlbmRpZgogCiAjZGVmaW5lIExTSTJfVElNRU9VVF9WQUxVRSAgICAgICAgICgzVSkgICAgLyogdG8gYmUgYWRqdXN0ZWQgd2l0aCBEUyAgICAqLwogCkBAIC0xMjgsMTYgKzEzMiwxNCBAQAogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19QRVJJUEhDTEtfSTJDMyAgICAgSTJDMyBwZXJpcGhlcmFsIGNsb2NrCiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1BFUklQSENMS19MUFRJTTEgICBMUFRJTTEgcGVyaXBoZXJhbCBjbG9jawogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19QRVJJUEhDTEtfTFBUSU0yICAgTFBUSU0yIHBlcmlwaGVyYWwgY2xvY2sKLSAgKgogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19QRVJJUEhDTEtfU0FJMSAgICAgU0FJMSBwZXJpcGhlcmFsIGNsb2NrCiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1BFUklQSENMS19VU0IgICAgICBVU0IgcGVyaXBoZXJhbCBjbG9jawogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19QRVJJUEhDTEtfUk5HICAgICAgUk5HIHBlcmlwaGVyYWwgY2xvY2sKLSAgKgogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19QRVJJUEhDTEtfQURDICAgICAgQURDIHBlcmlwaGVyYWwgY2xvY2sKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfUEVSSVBIQ0xLX1JUQyAgICAgIFJUQyBwZXJpcGhlcmFsIGNsb2NrCi0gICoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfUEVSSVBIQ0xLX1JGV0FLRVVQIFJGV0tQIHBlcmlwaGVyYWwgY2xvY2sKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfUEVSSVBIQ0xLX1NNUFMgICAgIFNNUFMgcGVyaXBoZXJhbCBjbG9jaworICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19QRVJJUEhDTEtfSTJTICAgICAgSTJTIHBlcmlwaGVyYWwgY2xvY2sKICAgKgogICAqCiAgICogQG5vdGUgICBDYXJlIG11c3QgYmUgdGFrZW4gd2hlbiBAcmVmIEhBTF9SQ0NFeF9QZXJpcGhDTEtDb25maWcoKSBpcyB1c2VkIHRvIHNlbGVjdApAQCAtMTcwLDEyICsxNzIsMTMgQEAKICAgICAgICAgLyogU0FJMSBjbG9jayBzb3VyY2UgY29uZmlnIHNldCBsYXRlciBhZnRlciBjbG9jayBzZWxlY3Rpb24gY2hlY2sgKi8KICAgICAgICAgYnJlYWs7CiAKKyNpZiBkZWZpbmVkKFNBSTEpCiAgICAgICBjYXNlIFJDQ19TQUkxQ0xLU09VUkNFX1BMTFNBSTE6IC8qIFBMTFNBSTEgaXMgdXNlZCBhcyBjbG9jayBzb3VyY2UgZm9yIFNBSTEgKi8KICAgICAgICAgLyogUExMU0FJMSBwYXJhbWV0ZXJzIE4gJiBQIGNvbmZpZ3VyYXRpb24gYW5kIGNsb2NrIG91dHB1dCAoUExMU0FJMUNsb2NrT3V0KSAqLwogICAgICAgICByZXQgPSBSQ0NFeF9QTExTQUkxX0NvbmZpZ05QKCYoUGVyaXBoQ2xrSW5pdC0+UExMU0FJMSkpOwogICAgICAgICAvKiBTQUkxIGNsb2NrIHNvdXJjZSBjb25maWcgc2V0IGxhdGVyIGFmdGVyIGNsb2NrIHNlbGVjdGlvbiBjaGVjayAqLwogICAgICAgICBicmVhazsKLQorI2VuZGlmCiAKICAgICAgIGNhc2UgUkNDX1NBSTFDTEtTT1VSQ0VfUElOOiAgICAgIC8qIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYXMgc291cmNlIG9mIFNBSTEgY2xvY2sqLwogICAgICAgICAvKiBTQUkxIGNsb2NrIHNvdXJjZSBjb25maWcgc2V0IGxhdGVyIGFmdGVyIGNsb2NrIHNlbGVjdGlvbiBjaGVjayAqLwpAQCAtMzI1LDYgKzMyOCw3IEBACiAgIH0KICNlbmRpZgogCisjaWYgZGVmaW5lZChVU0IpCiAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVVNCIGNsb2NrIHNvdXJjZSBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICBpZiAoKChQZXJpcGhDbGtJbml0LT5QZXJpcGhDbG9ja1NlbGVjdGlvbikgJiBSQ0NfUEVSSVBIQ0xLX1VTQikgPT0gKFJDQ19QRVJJUEhDTEtfVVNCKSkKICAgewpAQCAtMzM2LDIxICszNDAsMjEgQEAKICAgICAgIC8qIEVuYWJsZSBQTExRIG91dHB1dCAqLwogICAgICAgX19IQUxfUkNDX1BMTENMS09VVF9FTkFCTEUoUkNDX1BMTF9VU0JDTEspOwogICAgIH0KLQogI2lmIGRlZmluZWQoU0FJMSkKLSAgICBpZiAoUGVyaXBoQ2xrSW5pdC0+VXNiQ2xvY2tTZWxlY3Rpb24gPT0gUkNDX1VTQkNMS1NPVVJDRV9QTExTQUkxKQotICAgIHsKLSAgICAgIC8qIFBMTFNBSTEgcGFyYW1ldGVycyBOICYgUSBjb25maWd1cmF0aW9uIGFuZCBjbG9jayBvdXRwdXQgKFBMTFNBSTFDbG9ja091dCkgKi8KLSAgICAgIHJldCA9IFJDQ0V4X1BMTFNBSTFfQ29uZmlnTlEoJihQZXJpcGhDbGtJbml0LT5QTExTQUkxKSk7CisgIGlmIChQZXJpcGhDbGtJbml0LT5Vc2JDbG9ja1NlbGVjdGlvbiA9PSBSQ0NfVVNCQ0xLU09VUkNFX1BMTFNBSTEpCisgIHsKKyAgICAvKiBQTExTQUkxIHBhcmFtZXRlcnMgTiAmIFEgY29uZmlndXJhdGlvbiBhbmQgY2xvY2sgb3V0cHV0IChQTExTQUkxQ2xvY2tPdXQpICovCisgICAgcmV0ID0gUkNDRXhfUExMU0FJMV9Db25maWdOUSgmKFBlcmlwaENsa0luaXQtPlBMTFNBSTEpKTsKIAotICAgICAgaWYgKHJldCAhPSBIQUxfT0spCi0gICAgICB7Ci0gICAgICAgIC8qIHNldCBvdmVyYWxsIHJldHVybiB2YWx1ZSAqLwotICAgICAgICBzdGF0dXMgPSByZXQ7Ci0gICAgICB9CisgICAgaWYgKHJldCAhPSBIQUxfT0spCisgICAgeworICAgICAgLyogc2V0IG92ZXJhbGwgcmV0dXJuIHZhbHVlICovCisgICAgICBzdGF0dXMgPSByZXQ7CiAgICAgfQorICB9CiAjZW5kaWYKICAgfQorI2VuZGlmCiAKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSTkcgY2xvY2sgc291cmNlIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIGlmICgoKFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uKSAmIFJDQ19QRVJJUEhDTEtfUk5HKSA9PSAoUkNDX1BFUklQSENMS19STkcpKQpAQCAtMzg0LDE3ICszODgsMTcgQEAKICAgICB9CiAKICNpZiBkZWZpbmVkKFNBSTEpCi0gICAgaWYgKFBlcmlwaENsa0luaXQtPkFkY0Nsb2NrU2VsZWN0aW9uID09IFJDQ19BRENDTEtTT1VSQ0VfUExMU0FJMSkKLSAgICB7Ci0gICAgICAvKiBQTExTQUkxIHBhcmFtZXRlcnMgTiAmIFIgY29uZmlndXJhdGlvbiBhbmQgY2xvY2sgb3V0cHV0IChQTExTQUkxQ2xvY2tPdXQpICovCi0gICAgICByZXQgPSBSQ0NFeF9QTExTQUkxX0NvbmZpZ05SKCYoUGVyaXBoQ2xrSW5pdC0+UExMU0FJMSkpOworICBpZiAoUGVyaXBoQ2xrSW5pdC0+QWRjQ2xvY2tTZWxlY3Rpb24gPT0gUkNDX0FEQ0NMS1NPVVJDRV9QTExTQUkxKQorICB7CisgICAgLyogUExMU0FJMSBwYXJhbWV0ZXJzIE4gJiBSIGNvbmZpZ3VyYXRpb24gYW5kIGNsb2NrIG91dHB1dCAoUExMU0FJMUNsb2NrT3V0KSAqLworICAgIHJldCA9IFJDQ0V4X1BMTFNBSTFfQ29uZmlnTlIoJihQZXJpcGhDbGtJbml0LT5QTExTQUkxKSk7CiAKLSAgICAgIGlmIChyZXQgIT0gSEFMX09LKQotICAgICAgewotICAgICAgICAvKiBzZXQgb3ZlcmFsbCByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgc3RhdHVzID0gcmV0OwotICAgICAgfQorICAgIGlmIChyZXQgIT0gSEFMX09LKQorICAgIHsKKyAgICAgIC8qIHNldCBvdmVyYWxsIHJldHVybiB2YWx1ZSAqLworICAgICAgc3RhdHVzID0gcmV0OwogICAgIH0KKyAgfQogI2VuZGlmCiAgIH0KIApAQCAtNDI1LDYgKzQyOSwyNCBAQAogICB9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoU1BJX0kyU19TVVBQT1JUKQorICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tIEkyUyBjbG9jayBzb3VyY2UgY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgaWYgKCgoUGVyaXBoQ2xrSW5pdC0+UGVyaXBoQ2xvY2tTZWxlY3Rpb24pICYgUkNDX1BFUklQSENMS19JMlMpID09IChSQ0NfUEVSSVBIQ0xLX0kyUykpCisgIHsKKyAgICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICAgIGFzc2VydF9wYXJhbShJU19SQ0NfSTJTQ0xLU09VUkNFKFBlcmlwaENsa0luaXQtPkkyc0Nsb2NrU2VsZWN0aW9uKSk7CisKKyAgICAvKiBDb25maWd1cmUgdGhlIEkyUyBjbG9jayBzb3VyY2UgKi8KKyAgICBfX0hBTF9SQ0NfSTJTX0NPTkZJRyhQZXJpcGhDbGtJbml0LT5JMnNDbG9ja1NlbGVjdGlvbik7CisKKyAgICBpZiAoUGVyaXBoQ2xrSW5pdC0+STJzQ2xvY2tTZWxlY3Rpb24gPT0gUkNDX0kyU0NMS1NPVVJDRV9QTEwpCisgICAgeworICAgICAgLyogRW5hYmxlIFJDQ19QTExfSTJTQ0xLIG91dHB1dCAqLworICAgICAgX19IQUxfUkNDX1BMTENMS09VVF9FTkFCTEUoUkNDX1BMTF9JMlNDTEspOworICAgIH0KKyAgfQorI2VuZGlmCisKICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDM0LDcgKzQ1Niw3IEBACiAgICogQHBhcmFtICBQZXJpcGhDbGtJbml0ICBwb2ludGVyIHRvIGFuIFJDQ19QZXJpcGhDTEtJbml0VHlwZURlZiBzdHJ1Y3R1cmUgdGhhdAogICAqICAgICAgICAgcmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIEV4dGVuZGVkIFBlcmlwaGVyYWxzCiAgICogICAgICAgICBjbG9ja3MoU0FJMSwgTFBUSU0xLCBMUFRJTTIsIEkyQzEsIEkyQzMsIExQVUFSVDEsCi0gICogICAgICAgICBVU0FSVDEsIFJUQywgQURDeCwgVVNCLCBSTkcsIFJGV0tQLCBTTVBTKS4KKyAgKiAgICAgICAgIFVTQVJUMSwgUlRDLCBBREN4LCBVU0IsIFJORywgUkZXS1AsIFNNUFMsIEkyUykuCiAgICogQHJldHZhbCBOb25lCiAgICovCiB2b2lkIEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtDb25maWcoUkNDX1BlcmlwaENMS0luaXRUeXBlRGVmICAqUGVyaXBoQ2xrSW5pdCkKQEAgLTQ1NywxMiArNDc5LDE4IEBACiAgIFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uIHw9IFJDQ19QRVJJUEhDTEtfU0FJMTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChVU0IpCiAgIFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uIHw9IFJDQ19QRVJJUEhDTEtfVVNCOworI2VuZGlmCiAKICNpZiBkZWZpbmVkKFJDQ19TTVBTX1NVUFBPUlQpCiAgIFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uIHw9IFJDQ19QRVJJUEhDTEtfU01QUzsKICNlbmRpZgogCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisgIFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uIHw9IFJDQ19QRVJJUEhDTEtfSTJTOworI2VuZGlmCisKICNpZiBkZWZpbmVkKFNBSTEpCiAgIC8qIEdldCB0aGUgUExMU0FJMSBDbG9jayBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgUGVyaXBoQ2xrSW5pdC0+UExMU0FJMS5QTExOID0gTExfUkNDX1BMTFNBSTFfR2V0TigpOwpAQCAtNTAxLDggKzUyOSwxMCBAQAogICAvKiBHZXQgdGhlIFJUQyBjbG9jayBzb3VyY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgUGVyaXBoQ2xrSW5pdC0+UlRDQ2xvY2tTZWxlY3Rpb24gICAgICA9IF9fSEFMX1JDQ19HRVRfUlRDX1NPVVJDRSgpOwogCisjaWYgZGVmaW5lZChVU0IpCiAgIC8qIEdldCB0aGUgVVNCIGNsb2NrIHNvdXJjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICBQZXJpcGhDbGtJbml0LT5Vc2JDbG9ja1NlbGVjdGlvbiAgICAgID0gX19IQUxfUkNDX0dFVF9VU0JfU09VUkNFKCk7CisjZW5kaWYKIAogICAvKiBHZXQgdGhlIFJORyBjbG9jayBzb3VyY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgUGVyaXBoQ2xrSW5pdC0+Um5nQ2xvY2tTZWxlY3Rpb24gICAgICA9IEhBTF9SQ0NFeF9HZXRSbmdDTEtTb3VyY2UoKTsKQEAgLTUyMCw2ICs1NTAsMTEgQEAKICAgLyogR2V0IHRoZSBTTVBTIGNsb2NrIHNvdXJjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIFBlcmlwaENsa0luaXQtPlNtcHNDbG9ja1NlbGVjdGlvbiAgICAgPSBfX0hBTF9SQ0NfR0VUX1NNUFNfU09VUkNFKCk7CiAjZW5kaWYKKworI2lmIGRlZmluZWQoU1BJX0kyU19TVVBQT1JUKQorICAvKiBHZXQgdGhlIEkyUyBjbG9jayBzb3VyY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICBQZXJpcGhDbGtJbml0LT5JMnNDbG9ja1NlbGVjdGlvbiAgICAgID0gX19IQUxfUkNDX0dFVF9JMlNfU09VUkNFKCk7CisjZW5kaWYKIH0KIAogLyoqCkBAIC01MzgsMjYgKzU3MywyNiBAQAogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19QRVJJUEhDTEtfU0FJMSAgU0FJMSBwZXJpcGhlcmFsIGNsb2NrCiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1BFUklQSENMS19VU0FSVDEgIFVTQVJUMSBwZXJpcGhlcmFsIGNsb2NrCiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1BFUklQSENMS19VU0IgIFVTQiBwZXJpcGhlcmFsIGNsb2NrCi0gICoKICAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfUEVSSVBIQ0xLX1JGV0FLRVVQICBSRldLUCBwZXJpcGhlcmFsIGNsb2NrCiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX1BFUklQSENMS19TTVBTICBTTVBTIHBlcmlwaGVyYWwgY2xvY2sKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBSQ0NfUEVSSVBIQ0xLX0kyUyAgSTJTIHBlcmlwaGVyYWwgY2xvY2sKICAgKiBAcmV0dmFsIEZyZXF1ZW5jeSBpbiBIegogICAqLwogdWludDMyX3QgSEFMX1JDQ0V4X0dldFBlcmlwaENMS0ZyZXEodWludDMyX3QgUGVyaXBoQ2xrKQogewotICB1aW50MzJfdCBmcmVxdWVuY3k7Ci0KKyAgdWludDMyX3QgZnJlcXVlbmN5ID0gMFU7CisgIAogI2lmIGRlZmluZWQoUkNDX1NNUFNfU1VQUE9SVCkKICAgdWludDMyX3Qgc21wc19wcmVzY2FsZXJfaW5kZXggPSAoKExMX1JDQ19HZXRTTVBTUHJlc2NhbGVyKCkpID4+IFJDQ19TTVBTQ1JfU01QU0RJVl9Qb3MpOwogI2VuZGlmCi0KKyAgCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19SQ0NfUEVSSVBIQ0xPQ0soUGVyaXBoQ2xrKSk7Ci0KKyAgCiAgIGlmIChQZXJpcGhDbGsgPT0gUkNDX1BFUklQSENMS19SVEMpCiAgIHsKICAgICB1aW50MzJfdCBydGNDbG9ja1NvdXJjZSA9IExMX1JDQ19HZXRSVENDbG9ja1NvdXJjZSgpOwotCisgICAgCiAgICAgaWYgKHJ0Y0Nsb2NrU291cmNlID09IExMX1JDQ19SVENfQ0xLU09VUkNFX0xTRSkgLyogTFNFIGNsb2NrIHVzZWQgYXMgUlRDIGNsb2NrIHNvdXJjZSAqLwogICAgIHsKICAgICAgIGlmIChMTF9SQ0NfTFNFX0lzUmVhZHkoKSA9PSAxVSkKQEAgLTU2Niw3ICs2MDEsNyBAQAogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBmcmVxdWVuY3kgPSAwVTsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLwogICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChydGNDbG9ja1NvdXJjZSA9PSBMTF9SQ0NfUlRDX0NMS1NPVVJDRV9MU0kpIC8qIExTSSBjbG9jayB1c2VkIGFzIFJUQyBjbG9jayBzb3VyY2UgKi8KQEAgLTU3OSw3ICs2MTQsNyBAQAogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBmcmVxdWVuY3kgPSAwVTsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLwogICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChydGNDbG9ja1NvdXJjZSA9PSBMTF9SQ0NfUlRDX0NMS1NPVVJDRV9IU0VfRElWMzIpIC8qIEhTRSBjbG9jayB1c2VkIGFzIFJUQyBjbG9jayBzb3VyY2UgKi8KQEAgLTU4OCw3ICs2MjMsNyBAQAogICAgIH0KICAgICBlbHNlIC8qIE5vIGNsb2NrIHVzZWQgYXMgUlRDIGNsb2NrIHNvdXJjZSAqLwogICAgIHsKLSAgICAgIGZyZXF1ZW5jeSA9IDA7CisgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgfQogICB9CiAjaWYgZGVmaW5lZChTQUkxKQpAQCAtNTk2LDQ5ICs2MzEsNTEgQEAKICAgewogICAgIHN3aXRjaCAoTExfUkNDX0dldFNBSUNsb2NrU291cmNlKExMX1JDQ19TQUkxX0NMS1NPVVJDRSkpCiAgICAgewotICAgICAgY2FzZSBMTF9SQ0NfU0FJMV9DTEtTT1VSQ0VfSFNJOiAgICAgICAgLyogSFNJIGNsb2NrIHVzZWQgYXMgU0FJMSBjbG9jayBzb3VyY2UgKi8KLSAgICAgICAgaWYgKExMX1JDQ19IU0lfSXNSZWFkeSgpID09IDFVKQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gSFNJX1ZBTFVFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGZyZXF1ZW5jeSA9IDBVOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIExMX1JDQ19TQUkxX0NMS1NPVVJDRV9QTExTQUkxOiAgICAvKiBQTExTQUkxIGNsb2NrIHVzZWQgYXMgU0FJMSBjbG9jayBzb3VyY2UgKi8KLSAgICAgICAgaWYgKExMX1JDQ19QTExTQUkxX0lzUmVhZHkoKSA9PSAxVSkKLSAgICAgICAgewotICAgICAgICAgIGZyZXF1ZW5jeSA9IFJDQ19QTExTQUkxX0dldEZyZXFEb21haW5fUCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGZyZXF1ZW5jeSA9IDBVOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIExMX1JDQ19TQUkxX0NMS1NPVVJDRV9QTEw6ICAgICAgICAvKiBQTEwgY2xvY2sgdXNlZCBhcyBTQUkxIGNsb2NrIHNvdXJjZSAqLwotICAgICAgICBpZiAoTExfUkNDX1BMTF9Jc1JlYWR5KCkgPT0gMVUpCi0gICAgICAgIHsKLSAgICAgICAgICBmcmVxdWVuY3kgPSBSQ0NfUExMX0dldEZyZXFEb21haW5fUCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGZyZXF1ZW5jeSA9IDBVOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OiAvKiBFeHRlcm5hbCBpbnB1dCBjbG9jayB1c2VkIGFzIFNBSTEgY2xvY2sgc291cmNlICovCi0gICAgICAgIGZyZXF1ZW5jeSA9IEVYVEVSTkFMX1NBSTFfQ0xPQ0tfVkFMVUU7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgTExfUkNDX1NBSTFfQ0xLU09VUkNFX0hTSTogICAgICAgIC8qIEhTSSBjbG9jayB1c2VkIGFzIFNBSTEgY2xvY2sgc291cmNlICovCisgICAgICBpZiAoTExfUkNDX0hTSV9Jc1JlYWR5KCkgPT0gMVUpCisgICAgICB7CisgICAgICAgIGZyZXF1ZW5jeSA9IEhTSV9WQUxVRTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICAKKyNpZiBkZWZpbmVkKFNBSTEpCisgICAgY2FzZSBMTF9SQ0NfU0FJMV9DTEtTT1VSQ0VfUExMU0FJMTogICAgLyogUExMU0FJMSBjbG9jayB1c2VkIGFzIFNBSTEgY2xvY2sgc291cmNlICovCisgICAgICBpZiAoTExfUkNDX1BMTFNBSTFfSXNSZWFkeSgpID09IDFVKQorICAgICAgeworICAgICAgICBmcmVxdWVuY3kgPSBSQ0NfUExMU0FJMV9HZXRGcmVxRG9tYWluX1AoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLworICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgIAorICAgIGNhc2UgTExfUkNDX1NBSTFfQ0xLU09VUkNFX1BMTDogICAgICAgIC8qIFBMTCBjbG9jayB1c2VkIGFzIFNBSTEgY2xvY2sgc291cmNlICovCisgICAgICBpZiAoTExfUkNDX1BMTF9Jc1JlYWR5KCkgPT0gMVUpCisgICAgICB7CisgICAgICAgIGZyZXF1ZW5jeSA9IFJDQ19QTExfR2V0RnJlcURvbWFpbl9QKCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgICAgCisgICAgZGVmYXVsdDogLyogRXh0ZXJuYWwgaW5wdXQgY2xvY2sgdXNlZCBhcyBTQUkxIGNsb2NrIHNvdXJjZSAqLworICAgICAgZnJlcXVlbmN5ID0gRVhURVJOQUxfU0FJMV9DTE9DS19WQUxVRTsKKyAgICAgIGJyZWFrOwogICAgIH0KICAgfQogI2VuZGlmCiAgIGVsc2UgaWYgKFBlcmlwaENsayA9PSBSQ0NfUEVSSVBIQ0xLX1JORykKICAgewogICAgIHVpbnQzMl90IHJuZ0Nsb2NrU291cmNlID0gSEFMX1JDQ0V4X0dldFJuZ0NMS1NvdXJjZSgpOwotCisgICAgCiAgICAgaWYgKHJuZ0Nsb2NrU291cmNlID09IFJDQ19STkdDTEtTT1VSQ0VfTFNJKSAgICAgICAgICAgICAvKiBMU0kgY2xvY2sgdXNlZCBhcyBSTkcgY2xvY2sgc291cmNlICovCiAgICAgewogICAgICAgY29uc3QgdWludDMyX3QgdGVtcF9sc2kxcmVhZHkgPSBMTF9SQ0NfTFNJMV9Jc1JlYWR5KCk7CkBAIC02NDksNyArNjg2LDcgQEAKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgZnJlcXVlbmN5ID0gMFU7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAocm5nQ2xvY2tTb3VyY2UgPT0gUkNDX1JOR0NMS1NPVVJDRV9MU0UpICAgICAgICAvKiBMU0UgY2xvY2sgdXNlZCBhcyBSTkcgY2xvY2sgc291cmNlICovCkBAIC02NjAsNyArNjk3LDcgQEAKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgZnJlcXVlbmN5ID0gMFU7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAocm5nQ2xvY2tTb3VyY2UgPT0gUkNDX1JOR0NMS1NPVVJDRV9QTEwpICAgICAgICAvKiBQTEwgY2xvY2sgZGl2aWRlZCBieSAzIHVzZWQgYXMgUk5HIGNsb2NrIHNvdXJjZSAqLwpAQCAtNjcxLDcgKzcwOCw3IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGZyZXF1ZW5jeSA9IDBVOworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHJuZ0Nsb2NrU291cmNlID09IFJDQ19STkdDTEtTT1VSQ0VfTVNJKSAgICAgICAgLyogTVNJIGNsb2NrIGRpdmlkZWQgYnkgMyB1c2VkIGFzIFJORyBjbG9jayBzb3VyY2UgKi8KQEAgLTY4Miw3ICs3MTksNyBAQAogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBmcmVxdWVuY3kgPSAwVTsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLwogICAgICAgfQogICAgIH0KICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhTSTQ4IGNsb2NrIGRpdmlkZWQgYnkgMyB1c2VkIGFzIFJORyBjbG9jayBzb3VyY2UgKi8KQEAgLTY5Myw5NSArNzMwLDk3IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGZyZXF1ZW5jeSA9IDBVOworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgICB9CiAgICAgfQogICB9CisjaWYgZGVmaW5lZChVU0IpCiAgIGVsc2UgaWYgKFBlcmlwaENsayA9PSBSQ0NfUEVSSVBIQ0xLX1VTQikKICAgewogICAgIHN3aXRjaCAoTExfUkNDX0dldFVTQkNsb2NrU291cmNlKExMX1JDQ19VU0JfQ0xLU09VUkNFKSkKICAgICB7CiAjaWYgZGVmaW5lZChTQUkxKQotICAgICAgY2FzZSBMTF9SQ0NfVVNCX0NMS1NPVVJDRV9QTExTQUkxOiAgICAgICAvKiBQTExTQUkxIGNsb2NrIHVzZWQgYXMgVVNCIGNsb2NrIHNvdXJjZSAqLwotICAgICAgICBpZiAoTExfUkNDX1BMTFNBSTFfSXNSZWFkeSgpID09IDFVKQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gUkNDX1BMTFNBSTFfR2V0RnJlcURvbWFpbl9RKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gMFU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMTF9SQ0NfVVNCX0NMS1NPVVJDRV9QTExTQUkxOiAgICAgICAvKiBQTExTQUkxIGNsb2NrIHVzZWQgYXMgVVNCIGNsb2NrIHNvdXJjZSAqLworICAgICAgaWYgKExMX1JDQ19QTExTQUkxX0lzUmVhZHkoKSA9PSAxVSkKKyAgICAgIHsKKyAgICAgICAgZnJlcXVlbmN5ID0gUkNDX1BMTFNBSTFfR2V0RnJlcURvbWFpbl9RKCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgICBjYXNlIExMX1JDQ19VU0JfQ0xLU09VUkNFX1BMTDogICAgICAgICAgIC8qIFBMTCBjbG9jayB1c2VkIGFzIFVTQiBjbG9jayBzb3VyY2UgKi8KLSAgICAgICAgaWYgKExMX1JDQ19QTExfSXNSZWFkeSgpID09IDFVKQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gUkNDX1BMTF9HZXRGcmVxRG9tYWluX1EoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmcmVxdWVuY3kgPSAwVTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBMTF9SQ0NfVVNCX0NMS1NPVVJDRV9NU0k6ICAgICAgICAgICAvKiBNU0kgY2xvY2sgdXNlZCBhcyBVU0IgY2xvY2sgc291cmNlICovCi0gICAgICAgIGlmIChMTF9SQ0NfTVNJX0lzUmVhZHkoKSA9PSAxVSkKLSAgICAgICAgewotICAgICAgICAgIGZyZXF1ZW5jeSA9IF9fTExfUkNDX0NBTENfTVNJX0ZSRVEoTExfUkNDX01TSV9HZXRSYW5nZSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmcmVxdWVuY3kgPSAwVTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDogLyogSFNJNDggY2xvY2sgdXNlZCBhcyBVU0IgY2xvY2sgc291cmNlICovCi0gICAgICAgIGlmIChMTF9SQ0NfSFNJNDhfSXNSZWFkeSgpID09IDFVKQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gSFNJNDhfVkFMVUU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gMFU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIExMX1JDQ19VU0JfQ0xLU09VUkNFX1BMTDogICAgICAgICAgIC8qIFBMTCBjbG9jayB1c2VkIGFzIFVTQiBjbG9jayBzb3VyY2UgKi8KKyAgICAgIGlmIChMTF9SQ0NfUExMX0lzUmVhZHkoKSA9PSAxVSkKKyAgICAgIHsKKyAgICAgICAgZnJlcXVlbmN5ID0gUkNDX1BMTF9HZXRGcmVxRG9tYWluX1EoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIExMX1JDQ19VU0JfQ0xLU09VUkNFX01TSTogICAgICAgICAgIC8qIE1TSSBjbG9jayB1c2VkIGFzIFVTQiBjbG9jayBzb3VyY2UgKi8KKyAgICAgIGlmIChMTF9SQ0NfTVNJX0lzUmVhZHkoKSA9PSAxVSkKKyAgICAgIHsKKyAgICAgICAgZnJlcXVlbmN5ID0gX19MTF9SQ0NfQ0FMQ19NU0lfRlJFUShMTF9SQ0NfTVNJX0dldFJhbmdlKCkpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGRlZmF1bHQ6IC8qIEhTSTQ4IGNsb2NrIHVzZWQgYXMgVVNCIGNsb2NrIHNvdXJjZSAqLworICAgICAgaWYgKExMX1JDQ19IU0k0OF9Jc1JlYWR5KCkgPT0gMVUpCisgICAgICB7CisgICAgICAgIGZyZXF1ZW5jeSA9IEhTSTQ4X1ZBTFVFOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCisgICAgICB9CisgICAgICBicmVhazsKICAgICB9CiAgIH0KLQorI2VuZGlmCiAgIGVsc2UgaWYgKFBlcmlwaENsayA9PSBSQ0NfUEVSSVBIQ0xLX1VTQVJUMSkKICAgewogICAgIHN3aXRjaCAoTExfUkNDX0dldFVTQVJUQ2xvY2tTb3VyY2UoTExfUkNDX1VTQVJUMV9DTEtTT1VSQ0UpKQogICAgIHsKLSAgICAgIGNhc2UgTExfUkNDX1VTQVJUMV9DTEtTT1VSQ0VfU1lTQ0xLOiAvKiBVU0FSVDEgQ2xvY2sgaXMgU3lzdGVtIENsb2NrICovCi0gICAgICAgIGZyZXF1ZW5jeSA9IEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIExMX1JDQ19VU0FSVDFfQ0xLU09VUkNFX0hTSTogICAgLyogVVNBUlQxIENsb2NrIGlzIEhTSSBPc2MuICovCi0gICAgICAgIGlmIChMTF9SQ0NfSFNJX0lzUmVhZHkoKSA9PSAxVSkKLSAgICAgICAgewotICAgICAgICAgIGZyZXF1ZW5jeSA9IEhTSV9WQUxVRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmcmVxdWVuY3kgPSAwVTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBMTF9SQ0NfVVNBUlQxX0NMS1NPVVJDRV9MU0U6ICAgIC8qIFVTQVJUMSBDbG9jayBpcyBMU0UgT3NjLiAqLwotICAgICAgICBpZiAoTExfUkNDX0xTRV9Jc1JlYWR5KCkgPT0gMVUpCi0gICAgICAgIHsKLSAgICAgICAgICBmcmVxdWVuY3kgPSBMU0VfVkFMVUU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gMFU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6IC8qIFVTQVJUMSBDbG9jayBpcyBQQ0xLMiAqLwotICAgICAgICBmcmVxdWVuY3kgPSBfX0xMX1JDQ19DQUxDX1BDTEsyX0ZSRVEoX19MTF9SQ0NfQ0FMQ19IQ0xLMV9GUkVRKEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX1JDQ19HZXRBSEJQcmVzY2FsZXIoKSksIExMX1JDQ19HZXRBUEIyUHJlc2NhbGVyKCkpOwotICAgICAgICBicmVhazsKKyAgICBjYXNlIExMX1JDQ19VU0FSVDFfQ0xLU09VUkNFX1NZU0NMSzogLyogVVNBUlQxIENsb2NrIGlzIFN5c3RlbSBDbG9jayAqLworICAgICAgZnJlcXVlbmN5ID0gSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBMTF9SQ0NfVVNBUlQxX0NMS1NPVVJDRV9IU0k6ICAgIC8qIFVTQVJUMSBDbG9jayBpcyBIU0kgT3NjLiAqLworICAgICAgaWYgKExMX1JDQ19IU0lfSXNSZWFkeSgpID09IDFVKQorICAgICAgeworICAgICAgICBmcmVxdWVuY3kgPSBIU0lfVkFMVUU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBMTF9SQ0NfVVNBUlQxX0NMS1NPVVJDRV9MU0U6ICAgIC8qIFVTQVJUMSBDbG9jayBpcyBMU0UgT3NjLiAqLworICAgICAgaWYgKExMX1JDQ19MU0VfSXNSZWFkeSgpID09IDFVKQorICAgICAgeworICAgICAgICBmcmVxdWVuY3kgPSBMU0VfVkFMVUU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgICAgCisgICAgZGVmYXVsdDogLyogVVNBUlQxIENsb2NrIGlzIFBDTEsyICovCisgICAgICBmcmVxdWVuY3kgPSBfX0xMX1JDQ19DQUxDX1BDTEsyX0ZSRVEoX19MTF9SQ0NfQ0FMQ19IQ0xLMV9GUkVRKEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCksIFwKKyAgICAgICAgTExfUkNDX0dldEFIQlByZXNjYWxlcigpKSwgTExfUkNDX0dldEFQQjJQcmVzY2FsZXIoKSk7CisgICAgICBicmVhazsKICAgICB9CiAgIH0KICNpZiBkZWZpbmVkKExQVUFSVDEpCkBAIC03ODksMzYgKzgyOCwzNiBAQAogICB7CiAgICAgc3dpdGNoIChMTF9SQ0NfR2V0TFBVQVJUQ2xvY2tTb3VyY2UoTExfUkNDX0xQVUFSVDFfQ0xLU09VUkNFKSkKICAgICB7Ci0gICAgICBjYXNlIExMX1JDQ19MUFVBUlQxX0NMS1NPVVJDRV9TWVNDTEs6IC8qIExQVUFSVDEgQ2xvY2sgaXMgU3lzdGVtIENsb2NrICovCi0gICAgICAgIGZyZXF1ZW5jeSA9IEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIExMX1JDQ19MUFVBUlQxX0NMS1NPVVJDRV9IU0k6ICAgIC8qIExQVUFSVDEgQ2xvY2sgaXMgSFNJIE9zYy4gKi8KLSAgICAgICAgaWYgKExMX1JDQ19IU0lfSXNSZWFkeSgpID09IDFVKQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gSFNJX1ZBTFVFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGZyZXF1ZW5jeSA9IDBVOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIExMX1JDQ19MUFVBUlQxX0NMS1NPVVJDRV9MU0U6ICAgIC8qIExQVUFSVDEgQ2xvY2sgaXMgTFNFIE9zYy4gKi8KLSAgICAgICAgaWYgKExMX1JDQ19MU0VfSXNSZWFkeSgpID09IDFVKQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gTFNFX1ZBTFVFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIGZyZXF1ZW5jeSA9IDBVOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBkZWZhdWx0OiAvKiBMUFVBUlQxIENsb2NrIGlzIFBDTEsxICovCi0gICAgICAgIGZyZXF1ZW5jeSA9IF9fTExfUkNDX0NBTENfUENMSzFfRlJFUShfX0xMX1JDQ19DQUxDX0hDTEsxX0ZSRVEoSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTExfUkNDX0dldEFIQlByZXNjYWxlcigpKSwgTExfUkNDX0dldEFQQjFQcmVzY2FsZXIoKSk7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgTExfUkNDX0xQVUFSVDFfQ0xLU09VUkNFX1NZU0NMSzogLyogTFBVQVJUMSBDbG9jayBpcyBTeXN0ZW0gQ2xvY2sgKi8KKyAgICAgIGZyZXF1ZW5jeSA9IEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCk7CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgTExfUkNDX0xQVUFSVDFfQ0xLU09VUkNFX0hTSTogICAgLyogTFBVQVJUMSBDbG9jayBpcyBIU0kgT3NjLiAqLworICAgICAgaWYgKExMX1JDQ19IU0lfSXNSZWFkeSgpID09IDFVKQorICAgICAgeworICAgICAgICBmcmVxdWVuY3kgPSBIU0lfVkFMVUU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBMTF9SQ0NfTFBVQVJUMV9DTEtTT1VSQ0VfTFNFOiAgICAvKiBMUFVBUlQxIENsb2NrIGlzIExTRSBPc2MuICovCisgICAgICBpZiAoTExfUkNDX0xTRV9Jc1JlYWR5KCkgPT0gMVUpCisgICAgICB7CisgICAgICAgIGZyZXF1ZW5jeSA9IExTRV9WQUxVRTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICBkZWZhdWx0OiAvKiBMUFVBUlQxIENsb2NrIGlzIFBDTEsxICovCisgICAgICBmcmVxdWVuY3kgPSBfX0xMX1JDQ19DQUxDX1BDTEsxX0ZSRVEoX19MTF9SQ0NfQ0FMQ19IQ0xLMV9GUkVRKEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCksIFwKKyAgICAgICAgTExfUkNDX0dldEFIQlByZXNjYWxlcigpKSwgTExfUkNDX0dldEFQQjFQcmVzY2FsZXIoKSk7CisgICAgICBicmVhazsKICAgICB9CiAgIH0KICNlbmRpZgpAQCAtODI2LDYxICs4NjUsNzEgQEAKICAgewogICAgIHN3aXRjaCAoTExfUkNDX0dldEFEQ0Nsb2NrU291cmNlKExMX1JDQ19BRENfQ0xLU09VUkNFKSkKICAgICB7Ci0jaWYgZGVmaW5lZChTQUkxKQotICAgICAgY2FzZSBMTF9SQ0NfQURDX0NMS1NPVVJDRV9QTExTQUkxOiAgICAgICAvKiBQTExTQUkxIGNsb2NrIHVzZWQgYXMgQURDIGNsb2NrIHNvdXJjZSAqLwotICAgICAgICBpZiAoTExfUkNDX1BMTFNBSTFfSXNSZWFkeSgpID09IDFVKQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gUkNDX1BMTFNBSTFfR2V0RnJlcURvbWFpbl9SKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gMFU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisjaWYgZGVmaW5lZChTVE0zMldCNTV4eCkgfHwgZGVmaW5lZCAoU1RNMzJXQjVNeHgpCisgICAgY2FzZSBMTF9SQ0NfQURDX0NMS1NPVVJDRV9QTExTQUkxOiAgICAgICAvKiBQTExTQUkxIGNsb2NrIHVzZWQgYXMgQURDIGNsb2NrIHNvdXJjZSAqLworICAgICAgaWYgKExMX1JDQ19QTExTQUkxX0lzUmVhZHkoKSA9PSAxVSkKKyAgICAgIHsKKyAgICAgICAgZnJlcXVlbmN5ID0gUkNDX1BMTFNBSTFfR2V0RnJlcURvbWFpbl9SKCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2VsaWYgZGVmaW5lZChTVE0zMldCMzV4eCkKKyAgICBjYXNlIExMX1JDQ19BRENfQ0xLU09VUkNFX0hTSTogICAgICAgICAgIC8qIEhTSSBjbG9jayB1c2VkIGFzIEFEQyBjbG9jayBzb3VyY2UgKi8KKyAgICAgIGlmIChMTF9SQ0NfSFNJX0lzUmVhZHkoKSA9PSAxVSkKKyAgICAgIHsKKyAgICAgICAgZnJlcXVlbmN5ID0gSFNJX1ZBTFVFOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCisgICAgICB9CisgICAgICBicmVhazsKICNlbmRpZgotICAgICAgY2FzZSBMTF9SQ0NfQURDX0NMS1NPVVJDRV9TWVNDTEs6ICAgICAgICAvKiBTWVNDTEsgY2xvY2sgdXNlZCBhcyBBREMgY2xvY2sgc291cmNlICovCi0gICAgICAgIGZyZXF1ZW5jeSA9IEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIExMX1JDQ19BRENfQ0xLU09VUkNFX1BMTDogICAgICAgICAgIC8qIFBMTCBjbG9jayB1c2VkIGFzIFVTQiBjbG9jayBzb3VyY2UgKi8KLSAgICAgICAgaWYgKExMX1JDQ19QTExfSXNSZWFkeSgpID09IDFVKQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gUkNDX1BMTF9HZXRGcmVxRG9tYWluX1AoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmcmVxdWVuY3kgPSAwVTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDogLyogTm8gY2xvY2sgdXNlZCBhcyBBREMgY2xvY2sgc291cmNlICovCi0gICAgICAgIGZyZXF1ZW5jeSA9IDA7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgTExfUkNDX0FEQ19DTEtTT1VSQ0VfU1lTQ0xLOiAgICAgICAgLyogU1lTQ0xLIGNsb2NrIHVzZWQgYXMgQURDIGNsb2NrIHNvdXJjZSAqLworICAgICAgZnJlcXVlbmN5ID0gSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBMTF9SQ0NfQURDX0NMS1NPVVJDRV9QTEw6ICAgICAgICAgICAvKiBQTEwgY2xvY2sgdXNlZCBhcyBBREMgY2xvY2sgc291cmNlICovCisgICAgICBpZiAoTExfUkNDX1BMTF9Jc1JlYWR5KCkgPT0gMVUpCisgICAgICB7CisgICAgICAgIGZyZXF1ZW5jeSA9IFJDQ19QTExfR2V0RnJlcURvbWFpbl9QKCk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgICAgCisgICAgZGVmYXVsdDogLyogTm8gY2xvY2sgdXNlZCBhcyBBREMgY2xvY2sgc291cmNlICovCisgICAgICBicmVhazsKICAgICB9CiAgIH0KICAgZWxzZSBpZiAoUGVyaXBoQ2xrID09IFJDQ19QRVJJUEhDTEtfSTJDMSkKICAgewogICAgIHN3aXRjaCAoTExfUkNDX0dldEkyQ0Nsb2NrU291cmNlKExMX1JDQ19JMkMxX0NMS1NPVVJDRSkpCiAgICAgewotICAgICAgY2FzZSBMTF9SQ0NfSTJDMV9DTEtTT1VSQ0VfU1lTQ0xLOiAvKiBJMkMxIENsb2NrIGlzIFN5c3RlbSBDbG9jayAqLwotICAgICAgICBmcmVxdWVuY3kgPSBIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBMTF9SQ0NfSTJDMV9DTEtTT1VSQ0VfSFNJOiAgICAvKiBJMkMxIENsb2NrIGlzIEhTSSBPc2MuICovCi0gICAgICAgIGlmIChMTF9SQ0NfSFNJX0lzUmVhZHkoKSA9PSAxVSkKLSAgICAgICAgewotICAgICAgICAgIGZyZXF1ZW5jeSA9IEhTSV9WQUxVRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBmcmVxdWVuY3kgPSAwVTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDogLyogSTJDMSBDbG9jayBpcyBQQ0xLMSAqLwotICAgICAgICBmcmVxdWVuY3kgPSBfX0xMX1JDQ19DQUxDX1BDTEsxX0ZSRVEoX19MTF9SQ0NfQ0FMQ19IQ0xLMV9GUkVRKEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCksIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX1JDQ19HZXRBSEJQcmVzY2FsZXIoKSksIExMX1JDQ19HZXRBUEIxUHJlc2NhbGVyKCkpOwotICAgICAgICBicmVhazsKKyAgICBjYXNlIExMX1JDQ19JMkMxX0NMS1NPVVJDRV9TWVNDTEs6IC8qIEkyQzEgQ2xvY2sgaXMgU3lzdGVtIENsb2NrICovCisgICAgICBmcmVxdWVuY3kgPSBIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIExMX1JDQ19JMkMxX0NMS1NPVVJDRV9IU0k6ICAgIC8qIEkyQzEgQ2xvY2sgaXMgSFNJIE9zYy4gKi8KKyAgICAgIGlmIChMTF9SQ0NfSFNJX0lzUmVhZHkoKSA9PSAxVSkKKyAgICAgIHsKKyAgICAgICAgZnJlcXVlbmN5ID0gSFNJX1ZBTFVFOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGRlZmF1bHQ6IC8qIEkyQzEgQ2xvY2sgaXMgUENMSzEgKi8KKyAgICAgIGZyZXF1ZW5jeSA9IF9fTExfUkNDX0NBTENfUENMSzFfRlJFUShfX0xMX1JDQ19DQUxDX0hDTEsxX0ZSRVEoSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKSwgXAorICAgICAgICBMTF9SQ0NfR2V0QUhCUHJlc2NhbGVyKCkpLCBMTF9SQ0NfR2V0QVBCMVByZXNjYWxlcigpKTsKKyAgICAgIGJyZWFrOwogICAgIH0KICAgfQogI2lmIGRlZmluZWQoSTJDMykKQEAgLTg4OCwzMiArOTM3LDMyIEBACiAgIHsKICAgICBzd2l0Y2ggKExMX1JDQ19HZXRJMkNDbG9ja1NvdXJjZShMTF9SQ0NfSTJDM19DTEtTT1VSQ0UpKQogICAgIHsKLSAgICAgIGNhc2UgTExfUkNDX0kyQzNfQ0xLU09VUkNFX1NZU0NMSzogLyogSTJDMyBDbG9jayBpcyBTeXN0ZW0gQ2xvY2sgKi8KLSAgICAgICAgZnJlcXVlbmN5ID0gSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgTExfUkNDX0kyQzNfQ0xLU09VUkNFX0hTSTogLyogSTJDMyBDbG9jayBpcyBIU0kgT3NjLiAqLwotICAgICAgICBpZiAoTExfUkNDX0hTSV9Jc1JlYWR5KCkgPT0gMVUpCi0gICAgICAgIHsKLSAgICAgICAgICBmcmVxdWVuY3kgPSBIU0lfVkFMVUU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gMFU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6IC8qIEkyQzMgQ2xvY2sgaXMgUENMSzEgKi8KLSAgICAgICAgZnJlcXVlbmN5ID0gX19MTF9SQ0NfQ0FMQ19QQ0xLMV9GUkVRKF9fTExfUkNDX0NBTENfSENMSzFfRlJFUShIQUxfUkNDX0dldFN5c0Nsb2NrRnJlcSgpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTF9SQ0NfR2V0QUhCUHJlc2NhbGVyKCkpLCBMTF9SQ0NfR2V0QVBCMVByZXNjYWxlcigpKTsKLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMTF9SQ0NfSTJDM19DTEtTT1VSQ0VfU1lTQ0xLOiAvKiBJMkMzIENsb2NrIGlzIFN5c3RlbSBDbG9jayAqLworICAgICAgZnJlcXVlbmN5ID0gSEFMX1JDQ19HZXRTeXNDbG9ja0ZyZXEoKTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBMTF9SQ0NfSTJDM19DTEtTT1VSQ0VfSFNJOiAvKiBJMkMzIENsb2NrIGlzIEhTSSBPc2MuICovCisgICAgICBpZiAoTExfUkNDX0hTSV9Jc1JlYWR5KCkgPT0gMVUpCisgICAgICB7CisgICAgICAgIGZyZXF1ZW5jeSA9IEhTSV9WQUxVRTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICAKKyAgICBkZWZhdWx0OiAvKiBJMkMzIENsb2NrIGlzIFBDTEsxICovCisgICAgICBmcmVxdWVuY3kgPSBfX0xMX1JDQ19DQUxDX1BDTEsxX0ZSRVEoX19MTF9SQ0NfQ0FMQ19IQ0xLMV9GUkVRKEhBTF9SQ0NfR2V0U3lzQ2xvY2tGcmVxKCksIFwKKyAgICAgICAgTExfUkNDX0dldEFIQlByZXNjYWxlcigpKSwgTExfUkNDX0dldEFQQjFQcmVzY2FsZXIoKSk7CisgICAgICBicmVhazsKICAgICB9CiAgIH0KICNlbmRpZgogICBlbHNlIGlmIChQZXJpcGhDbGsgPT0gUkNDX1BFUklQSENMS19MUFRJTTEpCiAgIHsKICAgICB1aW50MzJfdCBscHRpbUNsb2NrU291cmNlID0gTExfUkNDX0dldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMV9DTEtTT1VSQ0UpOwotCisgICAgCiAgICAgaWYgKGxwdGltQ2xvY2tTb3VyY2UgPT0gTExfUkNDX0xQVElNMV9DTEtTT1VSQ0VfTFNJKSAvKiBMUFRJTTEgQ2xvY2sgaXMgTFNJIE9zYy4gKi8KICAgICB7CiAgICAgICBjb25zdCB1aW50MzJfdCB0ZW1wX2xzaTFyZWFkeSA9IExMX1JDQ19MU0kxX0lzUmVhZHkoKTsKQEAgLTkyNCw3ICs5NzMsNyBAQAogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBmcmVxdWVuY3kgPSAwVTsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLwogICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChscHRpbUNsb2NrU291cmNlID09IExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFX0hTSSkgLyogTFBUSU0xIENsb2NrIGlzIEhTSSBPc2MuICovCkBAIC05MzUsNyArOTg0LDcgQEAKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgZnJlcXVlbmN5ID0gMFU7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAobHB0aW1DbG9ja1NvdXJjZSA9PSBMTF9SQ0NfTFBUSU0xX0NMS1NPVVJDRV9MU0UpIC8qIExQVElNMSBDbG9jayBpcyBMU0UgT3NjLiAqLwpAQCAtOTQ2LDcgKzk5NSw3IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGZyZXF1ZW5jeSA9IDBVOworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgICB9CiAgICAgfQogICAgIGVsc2UgLyogTFBUSU0xIENsb2NrIGlzIFBDTEsxICovCkBAIC05NTcsNyArMTAwNiw3IEBACiAgIGVsc2UgaWYgKFBlcmlwaENsayA9PSBSQ0NfUEVSSVBIQ0xLX0xQVElNMikKICAgewogICAgIHVpbnQzMl90IGxwdGltQ2xvY2tTb3VyY2UgPSBMTF9SQ0NfR2V0TFBUSU1DbG9ja1NvdXJjZShMTF9SQ0NfTFBUSU0yX0NMS1NPVVJDRSk7Ci0KKyAgICAKICAgICBpZiAobHB0aW1DbG9ja1NvdXJjZSA9PSBMTF9SQ0NfTFBUSU0yX0NMS1NPVVJDRV9MU0kpIC8qIExQVElNMiBDbG9jayBpcyBMU0kgT3NjLiAqLwogICAgIHsKICAgICAgIGNvbnN0IHVpbnQzMl90IHRlbXBfbHNpMXJlYWR5ID0gTExfUkNDX0xTSTFfSXNSZWFkeSgpOwpAQCAtOTY4LDcgKzEwMTcsNyBAQAogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBmcmVxdWVuY3kgPSAwVTsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLwogICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChscHRpbUNsb2NrU291cmNlID09IExMX1JDQ19MUFRJTTJfQ0xLU09VUkNFX0hTSSkgLyogTFBUSU0yIENsb2NrIGlzIEhTSSBPc2MuICovCkBAIC05NzksNyArMTAyOCw3IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGZyZXF1ZW5jeSA9IDBVOworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKGxwdGltQ2xvY2tTb3VyY2UgPT0gTExfUkNDX0xQVElNMl9DTEtTT1VSQ0VfTFNFKSAvKiBMUFRJTTIgQ2xvY2sgaXMgTFNFIE9zYy4gKi8KQEAgLTk5MCw3ICsxMDM5LDcgQEAKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgZnJlcXVlbmN5ID0gMFU7CisgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gYXMgZnJlcXVlbmN5IGFscmVhZHkgaW5pdGlhbGl6ZWQgdG8gMFUgKi8KICAgICAgIH0KICAgICB9CiAgICAgZWxzZSAvKiBMUFRJTTIgQ2xvY2sgaXMgUENMSzEgKi8KQEAgLTEwMDEsNyArMTA1MCw3IEBACiAgIGVsc2UgaWYgKFBlcmlwaENsayA9PSBSQ0NfUEVSSVBIQ0xLX1JGV0FLRVVQKQogICB7CiAgICAgdWludDMyX3QgcmZ3a3BDbG9ja1NvdXJjZSA9IExMX1JDQ19HZXRSRldLUENsb2NrU291cmNlKCk7Ci0KKyAgICAKICAgICBpZiAocmZ3a3BDbG9ja1NvdXJjZSA9PSBMTF9SQ0NfUkZXS1BfQ0xLU09VUkNFX0xTRSkgLyogTFNFIGNsb2NrIHVzZWQgYXMgUkYgV2FrZXVwIGNsb2NrIHNvdXJjZSAqLwogICAgIHsKICAgICAgIGlmIChMTF9SQ0NfTFNFX0lzUmVhZHkoKSA9PSAxVSkKQEAgLTEwMTAsNyArMTA1OSw3IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGZyZXF1ZW5jeSA9IDBVOworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHJmd2twQ2xvY2tTb3VyY2UgPT0gTExfUkNDX1JGV0tQX0NMS1NPVVJDRV9MU0kpIC8qIExTSSBjbG9jayB1c2VkIGFzIFJGIFdha2V1cCBjbG9jayBzb3VyY2UgKi8KQEAgLTEwMjMsNyArMTA3Miw3IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGZyZXF1ZW5jeSA9IDBVOworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHJmd2twQ2xvY2tTb3VyY2UgPT0gTExfUkNDX1JGV0tQX0NMS1NPVVJDRV9IU0VfRElWMTAyNCkgLyogSFNFIGNsb2NrIHVzZWQgYXMgUkYgV2FrZXVwIGNsb2NrIHNvdXJjZSAqLwpAQCAtMTAzMiwxNCArMTA4MSwxNCBAQAogICAgIH0KICAgICBlbHNlIC8qIE5vIGNsb2NrIHVzZWQgYXMgUkYgV2FrZXVwIGNsb2NrIHNvdXJjZSAqLwogICAgIHsKLSAgICAgIGZyZXF1ZW5jeSA9IDA7CisgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgfQogICB9CiAjaWYgZGVmaW5lZChSQ0NfU01QU19TVVBQT1JUKQogICBlbHNlIGlmIChQZXJpcGhDbGsgPT0gUkNDX1BFUklQSENMS19TTVBTKQogICB7CiAgICAgdWludDMyX3Qgc21wc0Nsb2NrU291cmNlID0gTExfUkNDX0dldFNNUFNDbG9ja1NvdXJjZSgpOwotCisgICAgCiAgICAgaWYgKHNtcHNDbG9ja1NvdXJjZSA9PSBMTF9SQ0NfU01QU19DTEtTT1VSQ0VfU1RBVFVTX0hTSSkgLyogU01QUyBDbG9jayBzb3VyY2UgaXMgSFNJIE9zYy4gKi8KICAgICB7CiAgICAgICBpZiAoTExfUkNDX0hTSV9Jc1JlYWR5KCkgPT0gMVUpCkBAIC0xMDQ5LDcgKzEwOTgsNyBAQAogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewotICAgICAgICBmcmVxdWVuY3kgPSAwVTsKKyAgICAgICAgLyogTm90aGluZyB0byBkbyBhcyBmcmVxdWVuY3kgYWxyZWFkeSBpbml0aWFsaXplZCB0byAwVSAqLwogICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChzbXBzQ2xvY2tTb3VyY2UgPT0gTExfUkNDX1NNUFNfQ0xLU09VUkNFX1NUQVRVU19IU0UpIC8qIFNNUFMgQ2xvY2sgc291cmNlIGlzIEhTRSBPc2MuICovCkBAIC0xMDYxLDQxICsxMTEwLDYyIEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIGZyZXF1ZW5jeSA9IDBVOworICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHNtcHNDbG9ja1NvdXJjZSA9PSBMTF9SQ0NfU01QU19DTEtTT1VSQ0VfU1RBVFVTX01TSSkgLyogU01QUyBDbG9jayBzb3VyY2UgaXMgTVNJIE9zYy4gKi8KICAgICB7CiAgICAgICBzd2l0Y2ggKExMX1JDQ19NU0lfR2V0UmFuZ2UoKSkKICAgICAgIHsKLSAgICAgICAgY2FzZSBMTF9SQ0NfTVNJUkFOR0VfODoKLSAgICAgICAgICBmcmVxdWVuY3kgPSBfX0xMX1JDQ19DQUxDX01TSV9GUkVRKExMX1JDQ19NU0lSQU5HRV84KSAvIFNtcHNQcmVzY2FsZXJUYWJsZVtzbXBzX3ByZXNjYWxlcl9pbmRleF1bNF07Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTExfUkNDX01TSVJBTkdFXzk6Ci0gICAgICAgICAgZnJlcXVlbmN5ID0gX19MTF9SQ0NfQ0FMQ19NU0lfRlJFUShMTF9SQ0NfTVNJUkFOR0VfOSkgLyBTbXBzUHJlc2NhbGVyVGFibGVbc21wc19wcmVzY2FsZXJfaW5kZXhdWzNdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExMX1JDQ19NU0lSQU5HRV8xMDoKLSAgICAgICAgICBmcmVxdWVuY3kgPSBfX0xMX1JDQ19DQUxDX01TSV9GUkVRKExMX1JDQ19NU0lSQU5HRV8xMCkgLyBTbXBzUHJlc2NhbGVyVGFibGVbc21wc19wcmVzY2FsZXJfaW5kZXhdWzJdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIExMX1JDQ19NU0lSQU5HRV8xMToKLSAgICAgICAgICBmcmVxdWVuY3kgPSBfX0xMX1JDQ19DQUxDX01TSV9GUkVRKExMX1JDQ19NU0lSQU5HRV8xMSkgLyBTbXBzUHJlc2NhbGVyVGFibGVbc21wc19wcmVzY2FsZXJfaW5kZXhdWzFdOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGZyZXF1ZW5jeSA9IDBVOwotICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMTF9SQ0NfTVNJUkFOR0VfODoKKyAgICAgICAgZnJlcXVlbmN5ID0gX19MTF9SQ0NfQ0FMQ19NU0lfRlJFUShMTF9SQ0NfTVNJUkFOR0VfOCkgLyBTbXBzUHJlc2NhbGVyVGFibGVbc21wc19wcmVzY2FsZXJfaW5kZXhdWzRdOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTExfUkNDX01TSVJBTkdFXzk6CisgICAgICAgIGZyZXF1ZW5jeSA9IF9fTExfUkNDX0NBTENfTVNJX0ZSRVEoTExfUkNDX01TSVJBTkdFXzkpIC8gU21wc1ByZXNjYWxlclRhYmxlW3NtcHNfcHJlc2NhbGVyX2luZGV4XVszXTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIExMX1JDQ19NU0lSQU5HRV8xMDoKKyAgICAgICAgZnJlcXVlbmN5ID0gX19MTF9SQ0NfQ0FMQ19NU0lfRlJFUShMTF9SQ0NfTVNJUkFOR0VfMTApIC8gU21wc1ByZXNjYWxlclRhYmxlW3NtcHNfcHJlc2NhbGVyX2luZGV4XVsyXTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIExMX1JDQ19NU0lSQU5HRV8xMToKKyAgICAgICAgZnJlcXVlbmN5ID0gX19MTF9SQ0NfQ0FMQ19NU0lfRlJFUShMTF9SQ0NfTVNJUkFOR0VfMTEpIC8gU21wc1ByZXNjYWxlclRhYmxlW3NtcHNfcHJlc2NhbGVyX2luZGV4XVsxXTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGZyZXF1ZW5jeSA9IGZyZXF1ZW5jeSA+PiAxVTsgLyogU3lzdGVtYXRpYyBEaXYgYnkgMiAqLwogICAgIH0KICAgICBlbHNlIC8qIFNNUFMgaGFzIG5vIENsb2NrICovCiAgICAgewotICAgICAgZnJlcXVlbmN5ID0gMFU7CisgICAgICAvKiBOb3RoaW5nIHRvIGRvIGFzIGZyZXF1ZW5jeSBhbHJlYWR5IGluaXRpYWxpemVkIHRvIDBVICovCiAgICAgfQogICB9CiAjZW5kaWYKLSAgZWxzZQorI2lmIGRlZmluZWQoU1BJX0kyU19TVVBQT1JUKQorICBpZiAoUGVyaXBoQ2xrID09IFJDQ19QRVJJUEhDTEtfSTJTKQogICB7Ci0gICAgZnJlcXVlbmN5ID0gMFU7CisgICAgc3dpdGNoIChMTF9SQ0NfR2V0STJTQ2xvY2tTb3VyY2UoTExfUkNDX0kyU19DTEtTT1VSQ0UpKQorICAgIHsKKyAgICBjYXNlIExMX1JDQ19JMlNfQ0xLU09VUkNFX1BJTjogICAgICAgICAgLyogSTJTIENsb2NrIGlzIEV4dGVybmFsIGNsb2NrICovCisgICAgICBmcmVxdWVuY3kgPSBFWFRFUk5BTF9DTE9DS19WQUxVRTsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBMTF9SQ0NfSTJTX0NMS1NPVVJDRV9IU0k6ICAgICAgICAgIC8qIEkyUyBDbG9jayBpcyBIU0kgT3NjLiAqLworICAgICAgaWYgKExMX1JDQ19IU0lfSXNSZWFkeSgpID09IDFVKQorICAgICAgeworICAgICAgICBmcmVxdWVuY3kgPSBIU0lfVkFMVUU7CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAgIAorICAgIGNhc2UgTExfUkNDX0kyU19DTEtTT1VSQ0VfUExMOiAgICAgICAgICAvKiBJMlMgQ2xvY2sgaXMgUExMICovCisgICAgICBmcmVxdWVuY3kgPSBSQ0NfUExMX0dldEZyZXFEb21haW5fUCgpOworICAgICAgYnJlYWs7CisgICAgICAKKyAgICBjYXNlIExMX1JDQ19JMlNfQ0xLU09VUkNFX05PTkU6ICAgICAgICAgIC8qIE5vIGNsb2NrIHVzZWQgYXMgSTJTIGNsb2NrIHNvdXJjZSAqLworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CiAgIH0KKyNlbmRpZgogICByZXR1cm4gKGZyZXF1ZW5jeSk7CiB9CiAKQEAgLTEzMzQsNyArMTQwNCw3IEBACiAgICogQG5vdGUgICBQQTIsIFBIMyBvciBQQzEyIHNob3VsZCBiZSBjb25maWd1cmVkIGluIGFsdGVybmF0ZSBmdW5jdGlvbiBtb2RlLgogICAqIEBwYXJhbSAgUkNDX0xTQ094ICBzcGVjaWZpZXMgdGhlIG91dHB1dCBkaXJlY3Rpb24gZm9yIHRoZSBjbG9jayBzb3VyY2UuCiAgICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0xTQ08xICBDbG9jayBzb3VyY2UgdG8gb3V0cHV0IG9uIExTQ08xIHBpbihQQTIpCi0gICogICAgICAgICAgICBAYXJnIEByZWYgUkNDX0xTQ08yICBDbG9jayBzb3VyY2UgdG8gb3V0cHV0IG9uIExTQ08yIHBpbihQSDEzKQorICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19MU0NPMiAgQ2xvY2sgc291cmNlIHRvIG91dHB1dCBvbiBMU0NPMiBwaW4oUEgzKQogICAqICAgICAgICAgICAgQGFyZyBAcmVmIFJDQ19MU0NPMyAgQ2xvY2sgc291cmNlIHRvIG91dHB1dCBvbiBMU0NPMyBwaW4oUEMxMikKICAgKiBAcGFyYW0gIFJDQ19MU0NPU291cmNlICBzcGVjaWZpZXMgdGhlIGNsb2NrIHNvdXJjZSB0byBvdXRwdXQuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTEzNzgsNyArMTQ0OCw4IEBACiAgICAgSEFMX0dQSU9fSW5pdChMU0NPMl9HUElPX1BPUlQsICZHUElPX0luaXRTdHJ1Y3QpOwogCiAgIH0KLSAgZWxzZQorI2lmIGRlZmluZWQoUkNDX0xTQ08zX1NVUFBPUlQpCisgIGVsc2UgaWYgKFJDQ19MU0NPeCA9PSBSQ0NfTFNDTzMpCiAgIHsKICAgICAvKiBMU0NPMyBDbG9jayBFbmFibGUgKi8KICAgICBfX0xTQ08zX0NMS19FTkFCTEUoKTsKQEAgLTEzODcsNiArMTQ1OCwxMSBAQAogICAgIEdQSU9fSW5pdFN0cnVjdC5BbHRlcm5hdGUgPSBHUElPX0FGNl9MU0NPOwogICAgIEhBTF9HUElPX0luaXQoTFNDTzNfR1BJT19QT1JULCAmR1BJT19Jbml0U3RydWN0KTsKICAgfQorI2VuZGlmCisgIGVsc2UKKyAgeworICAgIDsKKyAgfQogCiAgIC8qIFVwZGF0ZSBMU0NPU0VMIGNsb2NrIHNvdXJjZSBpbiBCYWNrdXAgRG9tYWluIGNvbnRyb2wgcmVnaXN0ZXIgKi8KICAgaWYgKEhBTF9JU19CSVRfQ0xSKFBXUi0+Q1IxLCBQV1JfQ1IxX0RCUCkpCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2hhbF9zbWFydGNhcmQuYyBiL1NyYy9zdG0zMndieHhfaGFsX3NtYXJ0Y2FyZC5jCmluZGV4IGEyNGEwMzUuLjZmMzhkMGMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfaGFsX3NtYXJ0Y2FyZC5jCisrKyBiL1NyYy9zdG0zMndieHhfaGFsX3NtYXJ0Y2FyZC5jCkBAIC0xMDcsOCArMTA3LDggQEAKICAgICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgogCiAgICAgWy4uXQotICAgIFVzZSBGdW5jdGlvbiBAcmVmIEhBTF9TTUFSVENBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KLSAgICBGdW5jdGlvbiBAcmVmIEhBTF9TTUFSVENBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgIFVzZSBGdW5jdGlvbiBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCisgICAgRnVuY3Rpb24gSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CiAgICAgKCspIFR4Q3BsdENhbGxiYWNrICAgICAgICAgICAgOiBUeCBDb21wbGV0ZSBDYWxsYmFjay4KICAgICAoKykgUnhDcGx0Q2FsbGJhY2sgICAgICAgICAgICA6IFJ4IENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgICAgIDogRXJyb3IgQ2FsbGJhY2suCkBAIC0xMjMsOSArMTIzLDkgQEAKICAgICBhbmQgYSBwb2ludGVyIHRvIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLgogCiAgICAgWy4uXQotICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9TTUFSVENBUkRfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAorICAgIFVzZSBmdW5jdGlvbiBIQUxfU01BUlRDQVJEX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbi4KLSAgICBAcmVmIEhBTF9TTUFSVENBUkRfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAorICAgIEhBTF9TTUFSVENBUkRfVW5SZWdpc3RlckNhbGxiYWNrKCkgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAogICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCiAgICAgVGhpcyBmdW5jdGlvbiBhbGxvd3MgdG8gcmVzZXQgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgICAgICA6IFR4IENvbXBsZXRlIENhbGxiYWNrLgpAQCAtMTQwLDEzICsxNDAsMTMgQEAKICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICA6IFNNQVJUQ0FSRCBNc3BEZUluaXQuCiAKICAgICBbLi5dCi0gICAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEByZWYgSEFMX1NNQVJUQ0FSRF9Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9TTUFSVENBUkRfU1RBVEVfUkVTRVQKKyAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgSEFMX1NNQVJUQ0FSRF9Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9TTUFSVENBUkRfU1RBVEVfUkVTRVQKICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zOgotICAgIGV4YW1wbGVzIEByZWYgSEFMX1NNQVJUQ0FSRF9UeENwbHRDYWxsYmFjaygpLCBAcmVmIEhBTF9TTUFSVENBUkRfUnhDcGx0Q2FsbGJhY2soKS4KKyAgICBleGFtcGxlcyBIQUxfU01BUlRDQVJEX1R4Q3BsdENhbGxiYWNrKCksIEhBTF9TTUFSVENBUkRfUnhDcGx0Q2FsbGJhY2soKS4KICAgICBFeGNlcHRpb24gZG9uZSBmb3IgTXNwSW5pdCBhbmQgTXNwRGVJbml0IGZ1bmN0aW9ucyB0aGF0IGFyZSByZXNwZWN0aXZlbHkKLSAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfU01BUlRDQVJEX0luaXQoKQotICAgIGFuZCBAcmVmIEhBTF9TTUFSVENBUkRfRGVJbml0KCkgb25seSB3aGVuIHRoZXNlIGNhbGxiYWNrcyBhcmUgbnVsbCAobm90IHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCkuCi0gICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9TTUFSVENBUkRfSW5pdCgpIGFuZCBAcmVmIEhBTF9TTUFSVENBUkRfRGVJbml0KCkKKyAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgSEFMX1NNQVJUQ0FSRF9Jbml0KCkKKyAgICBhbmQgSEFMX1NNQVJUQ0FSRF9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKyAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9TTUFSVENBUkRfSW5pdCgpIGFuZCBIQUxfU01BUlRDQVJEX0RlSW5pdCgpCiAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KIAogICAgIFsuLl0KQEAgLTE1NSw4ICsxNTUsOCBAQAogICAgIGluIEhBTF9TTUFSVENBUkRfU1RBVEVfUkVBRFkgb3IgSEFMX1NNQVJUQ0FSRF9TVEFURV9SRVNFVCBzdGF0ZSwgdGh1cyByZWdpc3RlcmVkICh1c2VyKQogICAgIE1zcEluaXQvRGVJbml0IGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBkdXJpbmcgdGhlIEluaXQvRGVJbml0LgogICAgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKLSAgICB1c2luZyBAcmVmIEhBTF9TTUFSVENBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIGJlZm9yZSBjYWxsaW5nIEByZWYgSEFMX1NNQVJUQ0FSRF9EZUluaXQoKQotICAgIG9yIEByZWYgSEFMX1NNQVJUQ0FSRF9Jbml0KCkgZnVuY3Rpb24uCisgICAgdXNpbmcgSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgSEFMX1NNQVJUQ0FSRF9EZUluaXQoKQorICAgIG9yIEhBTF9TTUFSVENBUkRfSW5pdCgpIGZ1bmN0aW9uLgogCiAgICAgWy4uXQogICAgIFdoZW4gVGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX1NNQVJUQ0FSRF9SRUdJU1RFUl9DQUxMQkFDS1MgaXMgc2V0IHRvIDAgb3IKQEAgLTcyMiw1OSArNzIyLDU5IEBACiAgICAgKCspIDEuNSBzdG9wIGJpdHMgd2hlbiB0cmFuc21pdHRpbmcgYW5kIHJlY2VpdmluZzogd2hlcmUgU1RPUD0xMSBpbiB0aGUgVVNBUlRfQ1IyIHJlZ2lzdGVyLgogCiAgIFsuLl0KLSAgICAoKykgVGhlcmUgYXJlIHR3byBtb2RlcyBvZiB0cmFuc2ZlcjoKLSAgICAgICAgKCsrKSBCbG9ja2luZyBtb2RlOiBUaGUgY29tbXVuaWNhdGlvbiBpcyBwZXJmb3JtZWQgaW4gcG9sbGluZyBtb2RlLgorICAgICgjKSBUaGVyZSBhcmUgdHdvIG1vZGVzIG9mIHRyYW5zZmVyOgorICAgICAgICAoIyMpIEJsb2NraW5nIG1vZGU6IFRoZSBjb21tdW5pY2F0aW9uIGlzIHBlcmZvcm1lZCBpbiBwb2xsaW5nIG1vZGUuCiAgICAgICAgICAgICAgVGhlIEhBTCBzdGF0dXMgb2YgYWxsIGRhdGEgcHJvY2Vzc2luZyBpcyByZXR1cm5lZCBieSB0aGUgc2FtZSBmdW5jdGlvbgogICAgICAgICAgICAgIGFmdGVyIGZpbmlzaGluZyB0cmFuc2Zlci4KLSAgICAgICAgKCsrKSBOb24tQmxvY2tpbmcgbW9kZTogVGhlIGNvbW11bmljYXRpb24gaXMgcGVyZm9ybWVkIHVzaW5nIEludGVycnVwdHMKKyAgICAgICAgKCMjKSBOb24tQmxvY2tpbmcgbW9kZTogVGhlIGNvbW11bmljYXRpb24gaXMgcGVyZm9ybWVkIHVzaW5nIEludGVycnVwdHMKICAgICAgICAgICAgICBvciBETUEsIHRoZSByZWxldmFudCBBUEkncyByZXR1cm4gdGhlIEhBTCBzdGF0dXMuCiAgICAgICAgICAgICAgVGhlIGVuZCBvZiB0aGUgZGF0YSBwcm9jZXNzaW5nIHdpbGwgYmUgaW5kaWNhdGVkIHRocm91Z2ggdGhlCiAgICAgICAgICAgICAgZGVkaWNhdGVkIFNNQVJUQ0FSRCBJUlEgd2hlbiB1c2luZyBJbnRlcnJ1cHQgbW9kZSBvciB0aGUgRE1BIElSUSB3aGVuCiAgICAgICAgICAgICAgdXNpbmcgRE1BIG1vZGUuCi0gICAgICAgICgrKykgVGhlIEhBTF9TTUFSVENBUkRfVHhDcGx0Q2FsbGJhY2soKSwgSEFMX1NNQVJUQ0FSRF9SeENwbHRDYWxsYmFjaygpIHVzZXIgY2FsbGJhY2tzCisgICAgICAgICgjIykgVGhlIEhBTF9TTUFSVENBUkRfVHhDcGx0Q2FsbGJhY2soKSwgSEFMX1NNQVJUQ0FSRF9SeENwbHRDYWxsYmFjaygpIHVzZXIgY2FsbGJhY2tzCiAgICAgICAgICAgICAgd2lsbCBiZSBleGVjdXRlZCByZXNwZWN0aXZlbHkgYXQgdGhlIGVuZCBvZiB0aGUgVHJhbnNtaXQgb3IgUmVjZWl2ZSBwcm9jZXNzCiAgICAgICAgICAgICAgVGhlIEhBTF9TTUFSVENBUkRfRXJyb3JDYWxsYmFjaygpIHVzZXIgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCB3aGVuIGEgY29tbXVuaWNhdGlvbgogICAgICAgICAgICAgIGVycm9yIGlzIGRldGVjdGVkLgogCi0gICAgKCspIEJsb2NraW5nIG1vZGUgQVBJcyBhcmUgOgotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfVHJhbnNtaXQoKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfUmVjZWl2ZSgpCisgICAgKCMpIEJsb2NraW5nIG1vZGUgQVBJcyBhcmUgOgorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfVHJhbnNtaXQoKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfUmVjZWl2ZSgpCiAKLSAgICAoKykgTm9uIEJsb2NraW5nIG1vZGUgQVBJcyB3aXRoIEludGVycnVwdCBhcmUgOgotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfVHJhbnNtaXRfSVQoKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfUmVjZWl2ZV9JVCgpCi0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9JUlFIYW5kbGVyKCkKKyAgICAoIykgTm9uIEJsb2NraW5nIG1vZGUgQVBJcyB3aXRoIEludGVycnVwdCBhcmUgOgorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfVHJhbnNtaXRfSVQoKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfUmVjZWl2ZV9JVCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9JUlFIYW5kbGVyKCkKIAotICAgICgrKSBOb24gQmxvY2tpbmcgbW9kZSBmdW5jdGlvbnMgd2l0aCBETUEgYXJlIDoKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX1RyYW5zbWl0X0RNQSgpCi0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9SZWNlaXZlX0RNQSgpCisgICAgKCMpIE5vbiBCbG9ja2luZyBtb2RlIGZ1bmN0aW9ucyB3aXRoIERNQSBhcmUgOgorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfVHJhbnNtaXRfRE1BKCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX1JlY2VpdmVfRE1BKCkKIAotICAgICgrKSBBIHNldCBvZiBUcmFuc2ZlciBDb21wbGV0ZSBDYWxsYmFja3MgYXJlIHByb3ZpZGVkIGluIG5vbiBCbG9ja2luZyBtb2RlOgotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfVHhDcGx0Q2FsbGJhY2soKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfUnhDcGx0Q2FsbGJhY2soKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfRXJyb3JDYWxsYmFjaygpCisgICAgKCMpIEEgc2V0IG9mIFRyYW5zZmVyIENvbXBsZXRlIENhbGxiYWNrcyBhcmUgcHJvdmlkZWQgaW4gbm9uIEJsb2NraW5nIG1vZGU6CisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9UeENwbHRDYWxsYmFjaygpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9SeENwbHRDYWxsYmFjaygpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkKIAogICAgICgjKSBOb24tQmxvY2tpbmcgbW9kZSB0cmFuc2ZlcnMgY291bGQgYmUgYWJvcnRlZCB1c2luZyBBYm9ydCBBUEkncyA6Ci0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0KCkKLSAgICAgICAgKCspIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdCgpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZSgpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0X0lUKCkKLSAgICAgICAgKCspIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdF9JVCgpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZV9JVCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydFRyYW5zbWl0KCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZSgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydF9JVCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydFRyYW5zbWl0X0lUKCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX0Fib3J0UmVjZWl2ZV9JVCgpCiAKICAgICAoIykgRm9yIEFib3J0IHNlcnZpY2VzIGJhc2VkIG9uIGludGVycnVwdHMgKEhBTF9TTUFSVENBUkRfQWJvcnR4eHhfSVQpLCBhIHNldCBvZiBBYm9ydCBDb21wbGV0ZSBDYWxsYmFja3MgYXJlIHByb3ZpZGVkOgotICAgICAgICAoKykgSEFMX1NNQVJUQ0FSRF9BYm9ydENwbHRDYWxsYmFjaygpCi0gICAgICAgICgrKSBIQUxfU01BUlRDQVJEX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKQotICAgICAgICAoKykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmVDcGx0Q2FsbGJhY2soKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfQWJvcnRDcGx0Q2FsbGJhY2soKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdENwbHRDYWxsYmFjaygpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmVDcGx0Q2FsbGJhY2soKQogCiAgICAgKCMpIEluIE5vbi1CbG9ja2luZyBtb2RlIHRyYW5zZmVycywgcG9zc2libGUgZXJyb3JzIGFyZSBzcGxpdCBpbnRvIDIgY2F0ZWdvcmllcy4KICAgICAgICAgRXJyb3JzIGFyZSBoYW5kbGVkIGFzIGZvbGxvd3MgOgotICAgICAgICgrKSBFcnJvciBpcyBjb25zaWRlcmVkIGFzIFJlY292ZXJhYmxlIGFuZCBub24gYmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBnbyB0aWxsIGVuZCwgYnV0IGVycm9yIHNldmVyaXR5IGlzCisgICAgICAgKCMjKSBFcnJvciBpcyBjb25zaWRlcmVkIGFzIFJlY292ZXJhYmxlIGFuZCBub24gYmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBnbyB0aWxsIGVuZCwgYnV0IGVycm9yIHNldmVyaXR5IGlzCiAgICAgICAgICAgIHRvIGJlIGV2YWx1YXRlZCBieSB1c2VyIDogdGhpcyBjb25jZXJucyBGcmFtZSBFcnJvciwgUGFyaXR5IEVycm9yIG9yIE5vaXNlIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiAuCiAgICAgICAgICAgIFJlY2VpdmVkIGNoYXJhY3RlciBpcyB0aGVuIHJldHJpZXZlZCBhbmQgc3RvcmVkIGluIFJ4IGJ1ZmZlciwgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeSBlcnJvciB0eXBlLAogICAgICAgICAgICBhbmQgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4gVHJhbnNmZXIgaXMga2VwdCBvbmdvaW5nIG9uIFNNQVJUQ0FSRCBzaWRlLgogICAgICAgICAgICBJZiB1c2VyIHdhbnRzIHRvIGFib3J0IGl0LCBBYm9ydCBzZXJ2aWNlcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHVzZXIuCi0gICAgICAgKCspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgQmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIHByb3Blcmx5IGFuZCBpcyBhYm9ydGVkLgorICAgICAgICgjIykgRXJyb3IgaXMgY29uc2lkZXJlZCBhcyBCbG9ja2luZyA6IFRyYW5zZmVyIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWQgcHJvcGVybHkgYW5kIGlzIGFib3J0ZWQuCiAgICAgICAgICAgIFRoaXMgY29uY2VybnMgRnJhbWUgRXJyb3IgaW4gSW50ZXJydXB0IG1vZGUgdHJhbm1pc3Npb24sIE92ZXJydW4gRXJyb3IgaW4gSW50ZXJydXB0IG1vZGUgcmVjZXB0aW9uIGFuZCBhbGwgZXJyb3JzIGluIERNQSBtb2RlLgogICAgICAgICAgICBFcnJvciBjb2RlIGlzIHNldCB0byBhbGxvdyB1c2VyIHRvIGlkZW50aWZ5IGVycm9yIHR5cGUsIGFuZCBIQUxfU01BUlRDQVJEX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLgogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2hhbF90aW0uYyBiL1NyYy9zdG0zMndieHhfaGFsX3RpbS5jCmluZGV4IGVlZWM4MTIuLmNlN2ExZTggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfaGFsX3RpbS5jCisrKyBiL1NyYy9zdG0zMndieHhfaGFsX3RpbS5jCkBAIC0yNjI1LDEwICsyNjI1LDEwIEBACiAgIH0KIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAgIGFzc2VydF9wYXJhbShJU19USU1fQ09VTlRFUl9NT0RFKGh0aW0tPkluaXQuQ291bnRlck1vZGUpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DTE9DS0RJVklTSU9OX0RJVihodGltLT5Jbml0LkNsb2NrRGl2aXNpb24pKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9BVVRPUkVMT0FEX1BSRUxPQUQoaHRpbS0+SW5pdC5BdXRvUmVsb2FkUHJlbG9hZCkpOwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfTU9ERShzQ29uZmlnLT5FbmNvZGVyTW9kZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lDX1NFTEVDVElPTihzQ29uZmlnLT5JQzFTZWxlY3Rpb24pKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JQ19TRUxFQ1RJT04oc0NvbmZpZy0+SUMyU2VsZWN0aW9uKSk7CkBAIC0yNzkxLDcgKzI3OTEsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDMl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKICAgLyogRW5hYmxlIHRoZSBlbmNvZGVyIGludGVyZmFjZSBjaGFubmVscyAqLwogICBzd2l0Y2ggKENoYW5uZWwpCkBAIC0yODM1LDcgKzI4MzUsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0b3AoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAogICAvKiBEaXNhYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWxzIDEgYW5kIDIKICAgICAoaW4gdGhlIEVuY29kZXJJbnRlcmZhY2UgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKSAqLwpAQCAtMjg4MSw3ICsyODgxLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQzJfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCiAgIC8qIEVuYWJsZSB0aGUgZW5jb2RlciBpbnRlcmZhY2UgY2hhbm5lbHMgKi8KICAgLyogRW5hYmxlIHRoZSBjYXB0dXJlIGNvbXBhcmUgSW50ZXJydXB0cyAxIGFuZC9vciAyICovCkBAIC0yOTMxLDcgKzI5MzEsNyBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0b3BfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0sIHVpbnQzMl90IENoYW5uZWwpCiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCi0gIGFzc2VydF9wYXJhbShJU19USU1fQ0MyX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAogICAvKiBEaXNhYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWxzIDEgYW5kIDIKICAgICAoaW4gdGhlIEVuY29kZXJJbnRlcmZhY2UgdGhlIHR3byBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xIGFuZCBUSU1fQ0hBTk5FTF8yKSAqLwpAQCAtMjk4Niw3ICsyOTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnBEYXRhMiwgdWludDE2X3QgTGVuZ3RoKQogewogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwotICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9DQ19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOworICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKICAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKICAgewpAQCAtMzEyMCw3ICszMTIwLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdG9wX0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KLSAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQ0NfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCiAgIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbHMgMSBhbmQgMgogICAgIChpbiB0aGUgRW5jb2RlckludGVyZmFjZSB0aGUgdHdvIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIpICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2hhbF93d2RnLmMgYi9TcmMvc3RtMzJ3Ynh4X2hhbF93d2RnLmMKaW5kZXggMTE5NTQ3Ni4uZTcwMjI3YyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9oYWxfd3dkZy5jCisrKyBiL1NyYy9zdG0zMndieHhfaGFsX3d3ZGcuYwpAQCAtMzIsMTIgKzMyLDExIEBACiAgICAgICAgICgrKykgbWluIHRpbWUgKG1TKSA9IDEwMDAgKiAoQ291bnRlciAtIFdpbmRvdykgLyBXV0RHIGNsb2NrCiAgICAgICAgICgrKykgbWF4IHRpbWUgKG1TKSA9IDEwMDAgKiAoQ291bnRlciAtIDB4NDApIC8gV1dERyBjbG9jawogICAgICgrKSBUeXBpY2FsIHZhbHVlczoKLSAgICAgICAgKCsrKSBDb3VudGVyIG1pbiAoVFs1OzBdID0gMHgwMCkgQDY0IE1IeiAoUENMSzEpIHdpdGggemVybyBwcmVzY2FsZXI6Ci0gICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDY0tXMKLSAgICAgICAgKCsrKSBDb3VudGVyIG1heCAoVFs1OzBdID0gMHgzRikgQDY0IE1IeiAoUENMSzEpIHdpdGggcHJlc2NhbGVyIGRpdmlkaW5nIGJ5IDEyODoKKyAgICAgICAgKCsrKSBDb3VudGVyIG1pbiAoVFs1OzBdID0gMHgwMCkgYXQgNjQgTUh6IChQQ0xLMSkgd2l0aCB6ZXJvIHByZXNjYWxlcjoKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgNjR1cworICAgICAgICAoKyspIENvdW50ZXIgbWF4IChUWzU7MF0gPSAweDNGKSBhdCA2NCBNSHogKFBDTEsxKSB3aXRoIHByZXNjYWxlciBkaXZpZGluZyBieSAxMjg6CiAgICAgICAgICAgICAgbWF4IHRpbWVvdXQgYmVmb3JlIHJlc2V0OiBhcHByb3hpbWF0ZWx5IDUyNC4yOG1zCiAKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC02NywyNiArNjYsMjYgQEAKICAgWy4uXQogICAgIFRoZSBjb21waWxhdGlvbiBkZWZpbmUgIFVTRV9IQUxfV1dER19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMSBhbGxvd3MKICAgICB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuIFVzZSBGdW5jdGlvbnMKLSAgICBAcmVmIEhBTF9XV0RHX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCisgICAgSEFMX1dXREdfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KIAotICAgICgrKSBGdW5jdGlvbiBAcmVmIEhBTF9XV0RHX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nCisgICAgKCspIEZ1bmN0aW9uIEhBTF9XV0RHX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nCiAgICAgICAgIGNhbGxiYWNrczoKICAgICAgICAgKCsrKSBFd2lDYWxsYmFjayA6IGNhbGxiYWNrIGZvciBFYXJseSBXYWtlVXAgSW50ZXJydXB0LgogICAgICAgICAoKyspIE1zcEluaXRDYWxsYmFjayA6IFdXREcgTXNwSW5pdC4KICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECiAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KIAotICAgICgrKSBVc2UgZnVuY3Rpb24gQHJlZiBIQUxfV1dER19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvCi0gICAgdGhlIGRlZmF1bHQgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb24uIEByZWYgSEFMX1dXREdfVW5SZWdpc3RlckNhbGxiYWNrKCkKKyAgICAoKykgVXNlIGZ1bmN0aW9uIEhBTF9XV0RHX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8KKyAgICB0aGUgZGVmYXVsdCB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbi4gSEFMX1dXREdfVW5SZWdpc3RlckNhbGxiYWNrKCkKICAgICB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICAoKyspIEV3aUNhbGxiYWNrIDogY2FsbGJhY2sgZm9yICBFYXJseSBXYWtlVXAgSW50ZXJydXB0LgogICAgICAgICAoKyspIE1zcEluaXRDYWxsYmFjayA6IFdXREcgTXNwSW5pdC4KIAogICAgIFsuLl0KLSAgICBXaGVuIGNhbGxpbmcgQHJlZiBIQUxfV1dER19Jbml0IGZ1bmN0aW9uLCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZQorICAgIFdoZW4gY2FsbGluZyBIQUxfV1dER19Jbml0IGZ1bmN0aW9uLCBjYWxsYmFja3MgYXJlIHJlc2V0IHRvIHRoZQogICAgIGNvcnJlc3BvbmRpbmcgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uczoKLSAgICBAcmVmIEhBTF9XV0RHX0Vhcmx5V2FrZXVwQ2FsbGJhY2soKSBhbmQgSEFMX1dXREdfTXNwSW5pdCgpIG9ubHkgaWYgdGhleSBoYXZlCisgICAgSEFMX1dXREdfRWFybHlXYWtldXBDYWxsYmFjaygpIGFuZCBIQUxfV1dER19Nc3BJbml0KCkgb25seSBpZiB0aGV5IGhhdmUKICAgICBub3QgYmVlbiByZWdpc3RlcmVkIGJlZm9yZS4KIAogICAgIFsuLl0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfbGxfZ3Bpby5jIGIvU3JjL3N0bTMyd2J4eF9sbF9ncGlvLmMKaW5kZXggMDk4NTNiNC4uZGFmOWY2YSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyd2J4eF9sbF9ncGlvLmMKKysrIGIvU3JjL3N0bTMyd2J4eF9sbF9ncGlvLmMKQEAgLTE5MCw5ICsxOTAsNiBAQAogCiAgICAgaWYgKGN1cnJlbnRwaW4gIT0gMHgwMHUpCiAgICAgewotICAgICAgLyogUGluIE1vZGUgY29uZmlndXJhdGlvbiAqLwotICAgICAgTExfR1BJT19TZXRQaW5Nb2RlKEdQSU94LCBjdXJyZW50cGluLCBHUElPX0luaXRTdHJ1Y3QtPk1vZGUpOwotCiAgICAgICBpZiAoKEdQSU9fSW5pdFN0cnVjdC0+TW9kZSA9PSBMTF9HUElPX01PREVfT1VUUFVUKSB8fCAoR1BJT19Jbml0U3RydWN0LT5Nb2RlID09IExMX0dQSU9fTU9ERV9BTFRFUk5BVEUpKQogICAgICAgewogICAgICAgICAvKiBDaGVjayBTcGVlZCBtb2RlIHBhcmFtZXRlcnMgKi8KQEAgLTIwMCw2ICsxOTcsMTIgQEAKIAogICAgICAgICAvKiBTcGVlZCBtb2RlIGNvbmZpZ3VyYXRpb24gKi8KICAgICAgICAgTExfR1BJT19TZXRQaW5TcGVlZChHUElPeCwgY3VycmVudHBpbiwgR1BJT19Jbml0U3RydWN0LT5TcGVlZCk7CisKKyAgICAgICAgLyogQ2hlY2sgT3V0cHV0IG1vZGUgcGFyYW1ldGVycyAqLworICAgICAgICBhc3NlcnRfcGFyYW0oSVNfTExfR1BJT19PVVRQVVRfVFlQRShHUElPX0luaXRTdHJ1Y3QtPk91dHB1dFR5cGUpKTsKKworICAgICAgICAvKiBPdXRwdXQgbW9kZSBjb25maWd1cmF0aW9uKi8KKyAgICAgICAgTExfR1BJT19TZXRQaW5PdXRwdXRUeXBlKEdQSU94LCBjdXJyZW50cGluLCBHUElPX0luaXRTdHJ1Y3QtPk91dHB1dFR5cGUpOwogICAgICAgfQogCiAgICAgICAvKiBQdWxsLXVwIFB1bGwgZG93biByZXNpc3RvciBjb25maWd1cmF0aW9uKi8KQEAgLTIyMCwxOSArMjIzLDEzIEBACiAgICAgICAgICAgTExfR1BJT19TZXRBRlBpbl84XzE1KEdQSU94LCBjdXJyZW50cGluLCBHUElPX0luaXRTdHJ1Y3QtPkFsdGVybmF0ZSk7CiAgICAgICAgIH0KICAgICAgIH0KKworICAgICAgLyogUGluIE1vZGUgY29uZmlndXJhdGlvbiAqLworICAgICAgTExfR1BJT19TZXRQaW5Nb2RlKEdQSU94LCBjdXJyZW50cGluLCBHUElPX0luaXRTdHJ1Y3QtPk1vZGUpOwogICAgIH0KICAgICBwaW5wb3MrKzsKICAgfQogCi0gIGlmICgoR1BJT19Jbml0U3RydWN0LT5Nb2RlID09IExMX0dQSU9fTU9ERV9PVVRQVVQpIHx8IChHUElPX0luaXRTdHJ1Y3QtPk1vZGUgPT0gTExfR1BJT19NT0RFX0FMVEVSTkFURSkpCi0gIHsKLSAgICAvKiBDaGVjayBPdXRwdXQgbW9kZSBwYXJhbWV0ZXJzICovCi0gICAgYXNzZXJ0X3BhcmFtKElTX0xMX0dQSU9fT1VUUFVUX1RZUEUoR1BJT19Jbml0U3RydWN0LT5PdXRwdXRUeXBlKSk7Ci0KLSAgICAvKiBPdXRwdXQgbW9kZSBjb25maWd1cmF0aW9uKi8KLSAgICBMTF9HUElPX1NldFBpbk91dHB1dFR5cGUoR1BJT3gsIEdQSU9fSW5pdFN0cnVjdC0+UGluLCBHUElPX0luaXRTdHJ1Y3QtPk91dHB1dFR5cGUpOwotCi0gIH0KICAgcmV0dXJuIChTVUNDRVNTKTsKIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyd2J4eF9sbF9scHRpbS5jIGIvU3JjL3N0bTMyd2J4eF9sbF9scHRpbS5jCmluZGV4IDE2Y2RlOTcuLmVhMDI5MzYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfbGxfbHB0aW0uYworKysgYi9TcmMvc3RtMzJ3Ynh4X2xsX2xwdGltLmMKQEAgLTIwNywxNiArMjA3LDE2IEBACiAgIC8qIFNhdmUgTFBUSU0gc291cmNlIGNsb2NrICovCiAgIHN3aXRjaCAoKHVpbnQzMl90KUxQVElNeCkKICAgewotICAgICBjYXNlIExQVElNMV9CQVNFOgotICAgICAgIHRtcGNsa3NvdXJjZSA9IExMX1JDQ19HZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFKTsKLSAgICAgICBicmVhazsKKyAgICBjYXNlIExQVElNMV9CQVNFOgorICAgICAgdG1wY2xrc291cmNlID0gTExfUkNDX0dldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMV9DTEtTT1VSQ0UpOworICAgICAgYnJlYWs7CiAjaWYgZGVmaW5lZChMUFRJTTIpCi0gICAgIGNhc2UgTFBUSU0yX0JBU0U6Ci0gICAgICAgdG1wY2xrc291cmNlID0gTExfUkNDX0dldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMl9DTEtTT1VSQ0UpOwotICAgICAgIGJyZWFrOworICAgIGNhc2UgTFBUSU0yX0JBU0U6CisgICAgICB0bXBjbGtzb3VyY2UgPSBMTF9SQ0NfR2V0TFBUSU1DbG9ja1NvdXJjZShMTF9SQ0NfTFBUSU0yX0NMS1NPVVJDRSk7CisgICAgICBicmVhazsKICNlbmRpZiAvKiBMUFRJTTIgKi8KLSAgICAgZGVmYXVsdDoKLSAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CiAgIH0KIAogICAvKiBTYXZlIExQVElNIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCkBAIC0yMzcsMTYgKzIzNywxNiBAQAogICAgIC8qIEZvcmNlIExQVElNIHNvdXJjZSBrZXJuZWwgY2xvY2sgZnJvbSBBUEIgKi8KICAgICBzd2l0Y2ggKCh1aW50MzJfdClMUFRJTXgpCiAgICAgewotICAgICAgIGNhc2UgTFBUSU0xX0JBU0U6Ci0gICAgICAgICBMTF9SQ0NfU2V0TFBUSU1DbG9ja1NvdXJjZShMTF9SQ0NfTFBUSU0xX0NMS1NPVVJDRV9QQ0xLMSk7Ci0gICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgTFBUSU0xX0JBU0U6CisgICAgICAgIExMX1JDQ19TZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFX1BDTEsxKTsKKyAgICAgICAgYnJlYWs7CiAjaWYgZGVmaW5lZChMUFRJTTIpCi0gICAgICAgY2FzZSBMUFRJTTJfQkFTRToKLSAgICAgICAgIExMX1JDQ19TZXRMUFRJTUNsb2NrU291cmNlKExMX1JDQ19MUFRJTTJfQ0xLU09VUkNFX1BDTEsxKTsKLSAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBMUFRJTTJfQkFTRToKKyAgICAgICAgTExfUkNDX1NldExQVElNQ2xvY2tTb3VyY2UoTExfUkNDX0xQVElNMl9DTEtTT1VSQ0VfUENMSzEpOworICAgICAgICBicmVhazsKICNlbmRpZiAvKiBMUFRJTTIgKi8KLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAodG1wQ01QICE9IDBVTCkKQEAgLTI1OSw3ICsyNTksOCBAQAogICAgICAgZG8KICAgICAgIHsKICAgICAgICAgcmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3ktLTsgLyogVXNlZCBmb3IgdGltZW91dCAqLwotICAgICAgfSB3aGlsZSAoKChMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQ01QT0soTFBUSU14KSAhPSAxVUwpKSAmJiAoKHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5KSA+IDBVTCkpOworICAgICAgfQorICAgICAgd2hpbGUgKCgoTExfTFBUSU1fSXNBY3RpdmVGbGFnX0NNUE9LKExQVElNeCkgIT0gMVVMKSkgJiYgKChyY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeSkgPiAwVUwpKTsKIAogICAgICAgTExfTFBUSU1fQ2xlYXJGbGFnX0NNUE9LKExQVElNeCk7CiAgICAgfQpAQCAtMjc0LDcgKzI3NSw4IEBACiAgICAgICBkbwogICAgICAgewogICAgICAgICByY2NfY2xvY2suU1lTQ0xLX0ZyZXF1ZW5jeS0tOyAvKiBVc2VkIGZvciB0aW1lb3V0ICovCi0gICAgICB9IHdoaWxlICgoKExMX0xQVElNX0lzQWN0aXZlRmxhZ19BUlJPSyhMUFRJTXgpICE9IDFVTCkpICYmICgocmNjX2Nsb2NrLlNZU0NMS19GcmVxdWVuY3kpID4gMFVMKSk7CisgICAgICB9CisgICAgICB3aGlsZSAoKChMTF9MUFRJTV9Jc0FjdGl2ZUZsYWdfQVJST0soTFBUSU14KSAhPSAxVUwpKSAmJiAoKHJjY19jbG9jay5TWVNDTEtfRnJlcXVlbmN5KSA+IDBVTCkpOwogCiAgICAgICBMTF9MUFRJTV9DbGVhckZsYWdfQVJST0soTFBUSU14KTsKICAgICB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2xsX3JjYy5jIGIvU3JjL3N0bTMyd2J4eF9sbF9yY2MuYwppbmRleCAxYTk2NGM0Li4yM2FhODM4IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJ3Ynh4X2xsX3JjYy5jCisrKyBiL1NyYy9zdG0zMndieHhfbGxfcmNjLmMKQEAgLTcyLDYgKzcyLDkgQEAKIAogI2RlZmluZSBJU19MTF9SQ0NfQURDX0NMS1NPVVJDRShfX1ZBTFVFX18pICAgICgoKF9fVkFMVUVfXykgPT0gTExfUkNDX0FEQ19DTEtTT1VSQ0UpKQogCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisjZGVmaW5lIElTX0xMX1JDQ19JMlNfQ0xLU09VUkNFKF9fVkFMVUVfXykgICAgICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfSTJTX0NMS1NPVVJDRSkKKyNlbmRpZgogLyoqCiAgICogQH0KICAgKi8KQEAgLTgxLDcgKzg0LDkgQEAKICAgKiBAewogICAqLwogdWludDMyX3QgUkNDX1BMTF9HZXRGcmVxRG9tYWluX1NZUyh2b2lkKTsKKyNpZiBkZWZpbmVkKFNBSTEpCiB1aW50MzJfdCBSQ0NfUExMX0dldEZyZXFEb21haW5fU0FJKHZvaWQpOworI2VuZGlmCiB1aW50MzJfdCBSQ0NfUExMX0dldEZyZXFEb21haW5fQURDKHZvaWQpOwogdWludDMyX3QgUkNDX1BMTF9HZXRGcmVxRG9tYWluXzQ4TSh2b2lkKTsKIApAQCAtOTEsNiArOTYsMTAgQEAKIHVpbnQzMl90IFJDQ19QTExTQUkxX0dldEZyZXFEb21haW5fQURDKHZvaWQpOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFNQSV9JMlNfU1VQUE9SVCkKK3VpbnQzMl90IFJDQ19QTExfR2V0RnJlcURvbWFpbl9JMlModm9pZCk7CisjZW5kaWYKKwogdWludDMyX3QgUkNDX0dldFN5c3RlbUNsb2NrRnJlcSh2b2lkKTsKIAogCkBAIC0zNDksNyArMzU4LDYgQEAKIAogICByZXR1cm4gc21wc19mcmVxdWVuY3k7CiB9Ci0KICNlbmRpZgogCiAvKioKQEAgLTYxNiwxMiArNjI0LDE1IEBACiAgICAgICB9CiAgICAgICBicmVhazsKIAorI2lmIGRlZmluZWQoU0FJMSkKICAgICBjYXNlIExMX1JDQ19TQUkxX0NMS1NPVVJDRV9QTExTQUkxOiAgICAvKiBQTExTQUkxIGNsb2NrIHVzZWQgYXMgU0FJMSBjbG9jayBzb3VyY2UgKi8KICAgICAgIGlmIChMTF9SQ0NfUExMU0FJMV9Jc1JlYWR5KCkgPT0gMVUpCiAgICAgICB7CiAgICAgICAgIHNhaV9mcmVxdWVuY3kgPSBSQ0NfUExMU0FJMV9HZXRGcmVxRG9tYWluX1NBSSgpOwogICAgICAgfQogICAgICAgYnJlYWs7CisjZW5kaWYKKwogICAgIGNhc2UgTExfUkNDX1NBSTFfQ0xLU09VUkNFX1BMTDogICAgICAgIC8qIFBMTCBjbG9jayB1c2VkIGFzIFNBSTEgY2xvY2sgc291cmNlICovCiAgICAgICBpZiAoTExfUkNDX1BMTF9Jc1JlYWR5KCkgPT0gMVUpCiAgICAgICB7CkBAIC03NzUsNyArNzg2LDcgQEAKICAgICAgIGFkY19mcmVxdWVuY3kgPSBSQ0NfR2V0U3lzdGVtQ2xvY2tGcmVxKCk7CiAgICAgICBicmVhazsKIAotICAgIGNhc2UgTExfUkNDX0FEQ19DTEtTT1VSQ0VfUExMOiAgICAgICAgICAgLyogUExMIGNsb2NrIHVzZWQgYXMgVVNCIGNsb2NrIHNvdXJjZSAqLworICAgIGNhc2UgTExfUkNDX0FEQ19DTEtTT1VSQ0VfUExMOiAgICAgICAgICAgLyogUExMIGNsb2NrIHVzZWQgYXMgQURDIGNsb2NrIHNvdXJjZSAqLwogICAgICAgaWYgKExMX1JDQ19QTExfSXNSZWFkeSgpID09IDFVKQogICAgICAgewogICAgICAgICBhZGNfZnJlcXVlbmN5ID0gUkNDX1BMTF9HZXRGcmVxRG9tYWluX0FEQygpOwpAQCAtODc0LDYgKzg4NSw0NiBAQAogICByZXR1cm4gcmZ3a3BfZnJlcXVlbmN5OwogfQogCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiBJMlN4IGNsb2NrIGZyZXF1ZW5jeQorICAqIEBwYXJhbSAgSTJTeFNvdXJjZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19JMlNfQ0xLU09VUkNFCisgICogQHJldHZhbCBJMlMgY2xvY2sgZnJlcXVlbmN5IChpbiBIeikKKyAgKiAgICAgICAgIC0gQHJlZiAgTExfUkNDX1BFUklQSF9GUkVRVUVOQ1lfTk8gaW5kaWNhdGVzIHRoYXQgb3NjaWxsYXRvciAoSFNJKSBvciBQTExzIChQTEwpIGlzIG5vdCByZWFkeQorICAqLwordWludDMyX3QgTExfUkNDX0dldEkyU0Nsb2NrRnJlcSh1aW50MzJfdCBJMlN4U291cmNlKQoreworICB1aW50MzJfdCBpMnNfZnJlcXVlbmN5ID0gTExfUkNDX1BFUklQSF9GUkVRVUVOQ1lfTk87CisKKyAgLyogQ2hlY2sgcGFyYW1ldGVyICovCisgIGFzc2VydF9wYXJhbShJU19MTF9SQ0NfSTJTX0NMS1NPVVJDRShJMlN4U291cmNlKSk7CisKKyAgLyogSTJTQ0xLIGNsb2NrIGZyZXF1ZW5jeSAqLworICBzd2l0Y2ggKExMX1JDQ19HZXRJMlNDbG9ja1NvdXJjZShJMlN4U291cmNlKSkKKyAgeworICAgIGNhc2UgTExfUkNDX0kyU19DTEtTT1VSQ0VfUExMOiAgICAvKiBJMlMyIENsb2NrIGlzIFBMTCJQIiAqLworICAgICAgaWYgKExMX1JDQ19QTExfSXNSZWFkeSgpID09IDFVKQorICAgICAgeworICAgICAgICBpMnNfZnJlcXVlbmN5ID0gUkNDX1BMTF9HZXRGcmVxRG9tYWluX0kyUygpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExMX1JDQ19JMlNfQ0xLU09VUkNFX1BJTjogICAgICAgICAgLyogSTJTMiBDbG9jayBpcyBFeHRlcm5hbCBjbG9jayAqLworICAgICAgaTJzX2ZyZXF1ZW5jeSA9IEVYVEVSTkFMX0NMT0NLX1ZBTFVFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExMX1JDQ19JMlNfQ0xLU09VUkNFX0hTSTogICAgICAgICAgIC8qIEhTSSBjbG9jayB1c2VkIGFzIEkyUyBjbG9jayBzb3VyY2UgKi8KKyAgICBkZWZhdWx0OgorICAgICAgaWYgKExMX1JDQ19IU0lfSXNSZWFkeSgpID09IDFVKQorICAgICAgeworICAgICAgICBpMnNfZnJlcXVlbmN5ID0gSFNJX1ZBTFVFOworICAgICAgfQorICAgICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIGkyc19mcmVxdWVuY3k7Cit9CisjZW5kaWYKIAogLyoqCiAgICogQH0KQEAgLTEzMTIsNiArMTM2MywzNiBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFNQSV9JMlNfU1VQUE9SVCkKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIFBMTCBjbG9jayBmcmVxdWVuY3kgdXNlZCBmb3IgSTJTIGRvbWFpbgorICAqIEByZXR2YWwgUExMIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCisgICovCit1aW50MzJfdCBSQ0NfUExMX0dldEZyZXFEb21haW5fSTJTKHZvaWQpCit7CisgIHVpbnQzMl90IHBsbGlucHV0ZnJlcSwgcGxsc291cmNlOworCisgIC8qIFBMTF9WQ08gPSAoSFNFX1ZBTFVFIG9yIEhTSV9WQUxVRSAvIFBMTE0pICogUExMTgorICAgICBJMlMgRG9tYWluIGNsb2NrID0gUExMX1ZDTyAvIFBMTFAKKyAgKi8KKyAgcGxsc291cmNlID0gTExfUkNDX1BMTF9HZXRNYWluU291cmNlKCk7CisKKyAgc3dpdGNoIChwbGxzb3VyY2UpCisgIHsKKyAgICBjYXNlIExMX1JDQ19QTExTT1VSQ0VfSFNFOiAgLyogSFNFIHVzZWQgYXMgUExMIGNsb2NrIHNvdXJjZSAqLworICAgICAgcGxsaW5wdXRmcmVxID0gSFNFX1ZBTFVFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExMX1JDQ19QTExTT1VSQ0VfSFNJOiAgLyogSFNJIHVzZWQgYXMgUExMIGNsb2NrIHNvdXJjZSAqLworICAgIGRlZmF1bHQ6CisgICAgICBwbGxpbnB1dGZyZXEgPSBIU0lfVkFMVUU7CisgICAgICBicmVhazsKKyAgfQorICByZXR1cm4gX19MTF9SQ0NfQ0FMQ19QTExDTEtfSTJTX0ZSRVEocGxsaW5wdXRmcmVxLCBMTF9SQ0NfUExMX0dldERpdmlkZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX1JDQ19QTExfR2V0TigpLCBMTF9SQ0NfUExMX0dldFAoKSk7Cit9CisjZW5kaWYKKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMndieHhfbGxfc3BpLmMgYi9TcmMvc3RtMzJ3Ynh4X2xsX3NwaS5jCmluZGV4IDhkOGM0MjIuLjEzMDE3MTkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMndieHhfbGxfc3BpLmMKKysrIGIvU3JjL3N0bTMyd2J4eF9sbF9zcGkuYwpAQCAtMjEsNiArMjEsNyBAQAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMndieHhfbGxfc3BpLmgiCiAjaW5jbHVkZSAic3RtMzJ3Ynh4X2xsX2J1cy5oIgorI2luY2x1ZGUgInN0bTMyd2J4eF9sbF9yY2MuaCIKIAogI2lmZGVmICBVU0VfRlVMTF9BU1NFUlQKICNpbmNsdWRlICJzdG0zMl9hc3NlcnQuaCIKQEAgLTIzMiw2ICsyMzMsMTAgQEAKICAgICBzdGF0dXMgPSBTVUNDRVNTOwogICB9CiAKKyNpZiBkZWZpbmVkIChTUElfSTJTX1NVUFBPUlQpCisgIC8qIEFjdGl2YXRlIHRoZSBTUEkgbW9kZSAoUmVzZXQgSTJTTU9EIGJpdCBpbiBJMlNDRkdSIHJlZ2lzdGVyKSAqLworICBDTEVBUl9CSVQoU1BJeC0+STJTQ0ZHUiwgU1BJX0kyU0NGR1JfSTJTTU9EKTsKKyNlbmRpZiAvKiBTUElfSTJTX1NVUFBPUlQgKi8KICAgcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMjY4LDYgKzI3MywyNTEgQEAKICAgKiBAfQogICAqLwogCisjaWYgZGVmaW5lZChTUElfSTJTX1NVUFBPUlQpCisvKiogQGFkZHRvZ3JvdXAgSTJTX0xMCisgICogQHsKKyAgKi8KKworLyogUHJpdmF0ZSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBJMlNfTExfUHJpdmF0ZV9Db25zdGFudHMgSTJTIFByaXZhdGUgQ29uc3RhbnRzCisgICogQHsKKyAgKi8KKy8qIEkyUyByZWdpc3RlcnMgTWFza3MgKi8KKyNkZWZpbmUgSTJTX0kyU0NGR1JfQ0xFQVJfTUFTSyAgICAgICAgICAgICAoU1BJX0kyU0NGR1JfQ0hMRU4gICB8IFNQSV9JMlNDRkdSX0RBVExFTiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0kyU0NGR1JfQ0tQT0wgICB8IFNQSV9JMlNDRkdSX0kyU1NURCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1BJX0kyU0NGR1JfSTJTQ0ZHICB8IFNQSV9JMlNDRkdSX0kyU01PRCApCisKKyNkZWZpbmUgSTJTX0kyU1BSX0NMRUFSX01BU0sgICAgICAgICAgICAgICAweDAwMDJVCisvKioKKyAgKiBAfQorICAqLworLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgSTJTX0xMX1ByaXZhdGVfTWFjcm9zIEkyUyBQcml2YXRlIE1hY3JvcworICAqIEB7CisgICovCisKKyNkZWZpbmUgSVNfTExfSTJTX0RBVEFGT1JNQVQoX19WQUxVRV9fKSAgKCgoX19WQUxVRV9fKSA9PSBMTF9JMlNfREFUQUZPUk1BVF8xNkIpICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfREFUQUZPUk1BVF8xNkJfRVhURU5ERUQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfREFUQUZPUk1BVF8yNEIpICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfREFUQUZPUk1BVF8zMkIpKQorCisjZGVmaW5lIElTX0xMX0kyU19DUE9MKF9fVkFMVUVfXykgICAgICAgICgoKF9fVkFMVUVfXykgPT0gTExfSTJTX1BPTEFSSVRZX0xPVykgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfUE9MQVJJVFlfSElHSCkpCisKKyNkZWZpbmUgSVNfTExfSTJTX1NUQU5EQVJEKF9fVkFMVUVfXykgICAgKCgoX19WQUxVRV9fKSA9PSBMTF9JMlNfU1RBTkRBUkRfUEhJTElQUykgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX1NUQU5EQVJEX01TQikgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19TVEFOREFSRF9MU0IpICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9JMlNfU1RBTkRBUkRfUENNX1NIT1JUKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX1NUQU5EQVJEX1BDTV9MT05HKSkKKworI2RlZmluZSBJU19MTF9JMlNfTU9ERShfX1ZBTFVFX18pICAgICAgICAoKChfX1ZBTFVFX18pID09IExMX0kyU19NT0RFX1NMQVZFX1RYKSAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19NT0RFX1NMQVZFX1JYKSAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19NT0RFX01BU1RFUl9UWCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19NT0RFX01BU1RFUl9SWCkpCisKKyNkZWZpbmUgSVNfTExfSTJTX01DTEtfT1VUUFVUKF9fVkFMVUVfXykgKCgoX19WQUxVRV9fKSA9PSBMTF9JMlNfTUNMS19PVVRQVVRfRU5BQkxFKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfSTJTX01DTEtfT1VUUFVUX0RJU0FCTEUpKQorCisjZGVmaW5lIElTX0xMX0kyU19BVURJT19GUkVRKF9fVkFMVUVfXykgKCgoKF9fVkFMVUVfXykgPj0gTExfSTJTX0FVRElPRlJFUV84SykgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChfX1ZBTFVFX18pIDw9IExMX0kyU19BVURJT0ZSRVFfMTkySykpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19BVURJT0ZSRVFfREVGQVVMVCkpCisKKyNkZWZpbmUgSVNfTExfSTJTX1BSRVNDQUxFUl9MSU5FQVIoX19WQUxVRV9fKSAgKChfX1ZBTFVFX18pID49IDB4MlUpCisKKyNkZWZpbmUgSVNfTExfSTJTX1BSRVNDQUxFUl9QQVJJVFkoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX0kyU19QUkVTQ0FMRVJfUEFSSVRZX0VWRU4pIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0kyU19QUkVTQ0FMRVJfUEFSSVRZX09ERCkpCisvKioKKyAgKiBAfQorICAqLworCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBhZGR0b2dyb3VwIEkyU19MTF9FeHBvcnRlZF9GdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKiogQGFkZHRvZ3JvdXAgSTJTX0xMX0VGX0luaXQKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIERlLWluaXRpYWxpemUgdGhlIFNQSS9JMlMgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLgorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOgorICAqICAgICAgICAgIC0gU1VDQ0VTUzogU1BJIHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKKyAgKiAgICAgICAgICAtIEVSUk9SOiBTUEkgcmVnaXN0ZXJzIGFyZSBub3QgZGUtaW5pdGlhbGl6ZWQKKyAgKi8KK0Vycm9yU3RhdHVzIExMX0kyU19EZUluaXQoU1BJX1R5cGVEZWYgKlNQSXgpCit7CisgIHJldHVybiBMTF9TUElfRGVJbml0KFNQSXgpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEluaXRpYWxpemVzIHRoZSBTUEkvSTJTIHJlZ2lzdGVycyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXJzIGluIEkyU19Jbml0U3RydWN0LgorICAqIEBub3RlICAgQXMgc29tZSBiaXRzIGluIFNQSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBjYW4gb25seSBiZSB3cml0dGVuIHdoZW4gdGhlIFNQSSBpcyBkaXNhYmxlZCAoU1BJX0NSMV9TUEUgYml0ID0wKSwKKyAgKiAgICAgICAgIFNQSSBwZXJpcGhlcmFsIHNob3VsZCBiZSBpbiBkaXNhYmxlZCBzdGF0ZSBwcmlvciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIE90aGVyd2lzZSwgRVJST1IgcmVzdWx0IHdpbGwgYmUgcmV0dXJuZWQuCisgICogQHBhcmFtICBTUEl4IFNQSSBJbnN0YW5jZQorICAqIEBwYXJhbSAgSTJTX0luaXRTdHJ1Y3QgcG9pbnRlciB0byBhIEByZWYgTExfSTJTX0luaXRUeXBlRGVmIHN0cnVjdHVyZQorICAqIEByZXR2YWwgQW4gRXJyb3JTdGF0dXMgZW51bWVyYXRpb24gdmFsdWU6CisgICogICAgICAgICAgLSBTVUNDRVNTOiBTUEkgcmVnaXN0ZXJzIGFyZSBJbml0aWFsaXplZAorICAqICAgICAgICAgIC0gRVJST1I6IFNQSSByZWdpc3RlcnMgYXJlIG5vdCBJbml0aWFsaXplZAorICAqLworRXJyb3JTdGF0dXMgTExfSTJTX0luaXQoU1BJX1R5cGVEZWYgKlNQSXgsIExMX0kyU19Jbml0VHlwZURlZiAqSTJTX0luaXRTdHJ1Y3QpCit7CisgIHVpbnQzMl90IGkyc2RpdiA9IDJVOworICB1aW50MzJfdCBpMnNvZGQgPSAwVTsKKyAgdWludDMyX3QgcGFja2V0bGVuZ3RoID0gMVU7CisgIHVpbnQzMl90IHRtcDsKKyAgdWludDMyX3Qgc291cmNlY2xvY2s7CisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IEVSUk9SOworCisgIC8qIENoZWNrIHRoZSBJMlMgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfSTJTX0FMTF9JTlNUQU5DRShTUEl4KSk7CisgIGFzc2VydF9wYXJhbShJU19MTF9JMlNfTU9ERShJMlNfSW5pdFN0cnVjdC0+TW9kZSkpOworICBhc3NlcnRfcGFyYW0oSVNfTExfSTJTX1NUQU5EQVJEKEkyU19Jbml0U3RydWN0LT5TdGFuZGFyZCkpOworICBhc3NlcnRfcGFyYW0oSVNfTExfSTJTX0RBVEFGT1JNQVQoSTJTX0luaXRTdHJ1Y3QtPkRhdGFGb3JtYXQpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0xMX0kyU19NQ0xLX09VVFBVVChJMlNfSW5pdFN0cnVjdC0+TUNMS091dHB1dCkpOworICBhc3NlcnRfcGFyYW0oSVNfTExfSTJTX0FVRElPX0ZSRVEoSTJTX0luaXRTdHJ1Y3QtPkF1ZGlvRnJlcSkpOworICBhc3NlcnRfcGFyYW0oSVNfTExfSTJTX0NQT0woSTJTX0luaXRTdHJ1Y3QtPkNsb2NrUG9sYXJpdHkpKTsKKworICBpZiAoTExfSTJTX0lzRW5hYmxlZChTUEl4KSA9PSAweDAwMDAwMDAwVSkKKyAgeworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTUEl4IEkyU0NGR1IgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIENvbmZpZ3VyZSBTUEl4IEkyU0NGR1Igd2l0aCBwYXJhbWV0ZXJzOgorICAgICAqIC0gTW9kZTogICAgICAgICAgU1BJX0kyU0NGR1JfSTJTQ0ZHWzE6MF0gYml0CisgICAgICogLSBTdGFuZGFyZDogICAgICBTUElfSTJTQ0ZHUl9JMlNTVERbMTowXSBhbmQgU1BJX0kyU0NGR1JfUENNU1lOQyBiaXRzCisgICAgICogLSBEYXRhRm9ybWF0OiAgICBTUElfSTJTQ0ZHUl9DSExFTiBhbmQgU1BJX0kyU0NGR1JfREFUTEVOIGJpdHMKKyAgICAgKiAtIENsb2NrUG9sYXJpdHk6IFNQSV9JMlNDRkdSX0NLUE9MIGJpdAorICAgICAqLworCisgICAgLyogV3JpdGUgdG8gU1BJeCBJMlNDRkdSICovCisgICAgTU9ESUZZX1JFRyhTUEl4LT5JMlNDRkdSLAorICAgICAgICAgICAgICAgSTJTX0kyU0NGR1JfQ0xFQVJfTUFTSywKKyAgICAgICAgICAgICAgIEkyU19Jbml0U3RydWN0LT5Nb2RlIHwgSTJTX0luaXRTdHJ1Y3QtPlN0YW5kYXJkIHwKKyAgICAgICAgICAgICAgIEkyU19Jbml0U3RydWN0LT5EYXRhRm9ybWF0IHwgSTJTX0luaXRTdHJ1Y3QtPkNsb2NrUG9sYXJpdHkgfAorICAgICAgICAgICAgICAgU1BJX0kyU0NGR1JfSTJTTU9EKTsKKworICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTUEl4IEkyU1BSIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIENvbmZpZ3VyZSBTUEl4IEkyU1BSIHdpdGggcGFyYW1ldGVyczoKKyAgICAgKiAtIE1DTEtPdXRwdXQ6ICAgIFNQSV9JMlNQUl9NQ0tPRSBiaXQKKyAgICAgKiAtIEF1ZGlvRnJlcTogICAgIFNQSV9JMlNQUl9JMlNESVZbNzowXSBhbmQgU1BJX0kyU1BSX09ERCBiaXRzCisgICAgICovCisKKyAgICAvKiBJZiB0aGUgcmVxdWVzdGVkIGF1ZGlvIGZyZXF1ZW5jeSBpcyBub3QgdGhlIGRlZmF1bHQsIGNvbXB1dGUgdGhlIHByZXNjYWxlciAoaTJzb2RkLCBpMnNkaXYpCisgICAgICogZWxzZSwgZGVmYXVsdCB2YWx1ZXMgYXJlIHVzZWQ6ICBpMnNvZGQgPSAwVSwgaTJzZGl2ID0gMlUuCisgICAgICovCisgICAgaWYgKEkyU19Jbml0U3RydWN0LT5BdWRpb0ZyZXEgIT0gTExfSTJTX0FVRElPRlJFUV9ERUZBVUxUKQorICAgIHsKKyAgICAgIC8qIENoZWNrIHRoZSBmcmFtZSBsZW5ndGggKEZvciB0aGUgUHJlc2NhbGVyIGNvbXB1dGluZykKKyAgICAgICAqIERlZmF1bHQgdmFsdWU6IExMX0kyU19EQVRBRk9STUFUXzE2QiAocGFja2V0bGVuZ3RoID0gMVUpLgorICAgICAgICovCisgICAgICBpZiAoSTJTX0luaXRTdHJ1Y3QtPkRhdGFGb3JtYXQgIT0gTExfSTJTX0RBVEFGT1JNQVRfMTZCKQorICAgICAgeworICAgICAgICAvKiBQYWNrZXQgbGVuZ3RoIGlzIDMyIGJpdHMgKi8KKyAgICAgICAgcGFja2V0bGVuZ3RoID0gMlU7CisgICAgICB9CisKKyAgICAgIC8qIElmIGFuIGV4dGVybmFsIEkyUyBjbG9jayBoYXMgdG8gYmUgdXNlZCwgdGhlIHNwZWNpZmljIGRlZmluZSBzaG91bGQgYmUgc2V0CisgICAgICBpbiB0aGUgcHJvamVjdCBjb25maWd1cmF0aW9uIG9yIGluIHRoZSBzdG0zMndieHhfbGxfcmNjLmggZmlsZSAqLworICAgICAgLyogR2V0IHRoZSBJMlMgc291cmNlIGNsb2NrIHZhbHVlICovCisgICAgICBzb3VyY2VjbG9jayA9IExMX1JDQ19HZXRJMlNDbG9ja0ZyZXEoTExfUkNDX0kyU19DTEtTT1VSQ0UpOworCisgICAgICAvKiBDb21wdXRlIHRoZSBSZWFsIGRpdmlkZXIgZGVwZW5kaW5nIG9uIHRoZSBNQ0xLIG91dHB1dCBzdGF0ZSB3aXRoIGEgZmxvYXRpbmcgcG9pbnQgKi8KKyAgICAgIGlmIChJMlNfSW5pdFN0cnVjdC0+TUNMS091dHB1dCA9PSBMTF9JMlNfTUNMS19PVVRQVVRfRU5BQkxFKQorICAgICAgeworICAgICAgICAvKiBNQ0xLIG91dHB1dCBpcyBlbmFibGVkICovCisgICAgICAgIHRtcCA9ICgoKCgoc291cmNlY2xvY2sgLyAyNTZVKSAqIDEwVSkgLyBJMlNfSW5pdFN0cnVjdC0+QXVkaW9GcmVxKSkgKyA1VSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIE1DTEsgb3V0cHV0IGlzIGRpc2FibGVkICovCisgICAgICAgIHRtcCA9ICgoKCgoc291cmNlY2xvY2sgLyAoMzJVICogcGFja2V0bGVuZ3RoKSkgKiAxMFUpIC8gSTJTX0luaXRTdHJ1Y3QtPkF1ZGlvRnJlcSkpICsgNVUpOworICAgICAgfQorCisgICAgICAvKiBSZW1vdmUgdGhlIGZsb2F0aW5nIHBvaW50ICovCisgICAgICB0bXAgPSB0bXAgLyAxMFU7CisKKyAgICAgIC8qIENoZWNrIHRoZSBwYXJpdHkgb2YgdGhlIGRpdmlkZXIgKi8KKyAgICAgIGkyc29kZCA9ICh0bXAgJiAodWludDE2X3QpMHgwMDAxVSk7CisKKyAgICAgIC8qIENvbXB1dGUgdGhlIGkyc2RpdiBwcmVzY2FsZXIgKi8KKyAgICAgIGkyc2RpdiA9ICgodG1wIC0gaTJzb2RkKSAvIDJVKTsKKworICAgICAgLyogR2V0IHRoZSBNYXNrIGZvciB0aGUgT2RkIGJpdCAoU1BJX0kyU1BSWzhdKSByZWdpc3RlciAqLworICAgICAgaTJzb2RkID0gKGkyc29kZCA8PCA4VSk7CisgICAgfQorCisgICAgLyogVGVzdCBpZiB0aGUgZGl2aWRlciBpcyAxIG9yIDAgb3IgZ3JlYXRlciB0aGFuIDB4RkYgKi8KKyAgICBpZiAoKGkyc2RpdiA8IDJVKSB8fCAoaTJzZGl2ID4gMHhGRlUpKQorICAgIHsKKyAgICAgIC8qIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgKi8KKyAgICAgIGkyc2RpdiA9IDJVOworICAgICAgaTJzb2RkID0gMFU7CisgICAgfQorCisgICAgLyogV3JpdGUgdG8gU1BJeCBJMlNQUiByZWdpc3RlciB0aGUgY29tcHV0ZWQgdmFsdWUgKi8KKyAgICBXUklURV9SRUcoU1BJeC0+STJTUFIsIGkyc2RpdiB8IGkyc29kZCB8IEkyU19Jbml0U3RydWN0LT5NQ0xLT3V0cHV0KTsKKworICAgIHN0YXR1cyA9IFNVQ0NFU1M7CisgIH0KKyAgcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgZWFjaCBAcmVmIExMX0kyU19Jbml0VHlwZURlZiBmaWVsZCB0byBkZWZhdWx0IHZhbHVlLgorICAqIEBwYXJhbSAgSTJTX0luaXRTdHJ1Y3QgcG9pbnRlciB0byBhIEByZWYgTExfSTJTX0luaXRUeXBlRGVmIHN0cnVjdHVyZQorICAqICAgICAgICAgd2hvc2UgZmllbGRzIHdpbGwgYmUgc2V0IHRvIGRlZmF1bHQgdmFsdWVzLgorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBMTF9JMlNfU3RydWN0SW5pdChMTF9JMlNfSW5pdFR5cGVEZWYgKkkyU19Jbml0U3RydWN0KQoreworICAvKi0tLS0tLS0tLS0tLS0tLSBSZXNldCBJMlMgaW5pdCBzdHJ1Y3R1cmUgcGFyYW1ldGVycyB2YWx1ZXMgLS0tLS0tLS0tLS0tLS0tLS0qLworICBJMlNfSW5pdFN0cnVjdC0+TW9kZSAgICAgICAgICAgICAgPSBMTF9JMlNfTU9ERV9TTEFWRV9UWDsKKyAgSTJTX0luaXRTdHJ1Y3QtPlN0YW5kYXJkICAgICAgICAgID0gTExfSTJTX1NUQU5EQVJEX1BISUxJUFM7CisgIEkyU19Jbml0U3RydWN0LT5EYXRhRm9ybWF0ICAgICAgICA9IExMX0kyU19EQVRBRk9STUFUXzE2QjsKKyAgSTJTX0luaXRTdHJ1Y3QtPk1DTEtPdXRwdXQgICAgICAgID0gTExfSTJTX01DTEtfT1VUUFVUX0RJU0FCTEU7CisgIEkyU19Jbml0U3RydWN0LT5BdWRpb0ZyZXEgICAgICAgICA9IExMX0kyU19BVURJT0ZSRVFfREVGQVVMVDsKKyAgSTJTX0luaXRTdHJ1Y3QtPkNsb2NrUG9sYXJpdHkgICAgID0gTExfSTJTX1BPTEFSSVRZX0xPVzsKK30KKworLyoqCisgICogQGJyaWVmICBTZXQgbGluZWFyIGFuZCBwYXJpdHkgcHJlc2NhbGVyLgorICAqIEBub3RlICAgVG8gY2FsY3VsYXRlIHZhbHVlIG9mIFByZXNjYWxlckxpbmVhcihJMlNESVZbNzowXSBiaXRzKSBhbmQgUHJlc2NhbGVyUGFyaXR5KE9ERCBiaXQpXG4KKyAgKiAgICAgICAgIENoZWNrIEF1ZGlvIGZyZXF1ZW5jeSB0YWJsZSBhbmQgZm9ybXVsYXMgaW5zaWRlIFJlZmVyZW5jZSBNYW51YWwgKFNQSS9JMlMpLgorICAqIEBwYXJhbSAgU1BJeCBTUEkgSW5zdGFuY2UKKyAgKiBAcGFyYW0gIFByZXNjYWxlckxpbmVhciB2YWx1ZSBNaW5fRGF0YT0weDAyIGFuZCBNYXhfRGF0YT0weEZGLgorICAqIEBwYXJhbSAgUHJlc2NhbGVyUGFyaXR5IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfSTJTX1BSRVNDQUxFUl9QQVJJVFlfRVZFTgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0kyU19QUkVTQ0FMRVJfUEFSSVRZX09ERAorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBMTF9JMlNfQ29uZmlnUHJlc2NhbGVyKFNQSV9UeXBlRGVmICpTUEl4LCB1aW50MzJfdCBQcmVzY2FsZXJMaW5lYXIsIHVpbnQzMl90IFByZXNjYWxlclBhcml0eSkKK3sKKyAgLyogQ2hlY2sgdGhlIEkyUyBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19JMlNfQUxMX0lOU1RBTkNFKFNQSXgpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0xMX0kyU19QUkVTQ0FMRVJfTElORUFSKFByZXNjYWxlckxpbmVhcikpOworICBhc3NlcnRfcGFyYW0oSVNfTExfSTJTX1BSRVNDQUxFUl9QQVJJVFkoUHJlc2NhbGVyUGFyaXR5KSk7CisKKyAgLyogV3JpdGUgdG8gU1BJeCBJMlNQUiAqLworICBNT0RJRllfUkVHKFNQSXgtPkkyU1BSLCBTUElfSTJTUFJfSTJTRElWIHwgU1BJX0kyU1BSX09ERCwgUHJlc2NhbGVyTGluZWFyIHwgKFByZXNjYWxlclBhcml0eSA8PCA4VSkpOworfQorCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qIFNQSV9JMlNfU1VQUE9SVCAqLworCiAjZW5kaWYgLyogZGVmaW5lZCAoU1BJMSkgfHwgZGVmaW5lZCAoU1BJMikgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJ3Ynh4X2xsX3RpbS5jIGIvU3JjL3N0bTMyd2J4eF9sbF90aW0uYwppbmRleCBhM2YyNDBhLi5iYTc5YjJhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJ3Ynh4X2xsX3RpbS5jCisrKyBiL1NyYy9zdG0zMndieHhfbGxfdGltLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogICBUSU1fSW5pdFN0cnVjdC0+Q291bnRlck1vZGUgICAgICAgPSBMTF9USU1fQ09VTlRFUk1PREVfVVA7CiAgIFRJTV9Jbml0U3RydWN0LT5BdXRvcmVsb2FkICAgICAgICA9IDB4RkZGRkZGRkZVOwogICBUSU1fSW5pdFN0cnVjdC0+Q2xvY2tEaXZpc2lvbiAgICAgPSBMTF9USU1fQ0xPQ0tESVZJU0lPTl9ESVYxOwotICBUSU1fSW5pdFN0cnVjdC0+UmVwZXRpdGlvbkNvdW50ZXIgPSAodWludDhfdCkweDAwOworICBUSU1fSW5pdFN0cnVjdC0+UmVwZXRpdGlvbkNvdW50ZXIgPSAweDAwMDAwMDAwVTsKIH0KIAogLyoqCg==