ZGlmZiAtLWdpdCBhL0luYy9MZWdhY3kvc3RtMzJfaGFsX2xlZ2FjeS5oIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKaW5kZXggODA1YTlhNS4uZTU3ZTgyMyAxMDA2NDQKLS0tIGEvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKKysrIGIvSW5jL0xlZ2FjeS9zdG0zMl9oYWxfbGVnYWN5LmgKQEAgLTMxNSw2ICszMTUsMTEgQEAKICNpZiBkZWZpbmVkKFNUTTMyRzApCiAjZGVmaW5lIERNQV9SRVFVRVNUX0RBQzFfQ0hBTk5FTDEgICAgICAgICAgICAgICAgRE1BX1JFUVVFU1RfREFDMV9DSDEKICNkZWZpbmUgRE1BX1JFUVVFU1RfREFDMV9DSEFOTkVMMiAgICAgICAgICAgICAgICBETUFfUkVRVUVTVF9EQUMxX0NIMgorI2RlZmluZSBETUFfUkVRVUVTVF9USU0xNl9UUklHX0NPTSAgICAgICAgICAgICAgIERNQV9SRVFVRVNUX1RJTTE2X0NPTQorI2RlZmluZSBETUFfUkVRVUVTVF9USU0xN19UUklHX0NPTSAgICAgICAgICAgICAgIERNQV9SRVFVRVNUX1RJTTE3X0NPTQorCisjZGVmaW5lIExMX0RNQU1VWF9SRVFfVElNMTZfVFJJR19DT00gICAgICAgICAgICAgTExfRE1BTVVYX1JFUV9USU0xNl9DT00KKyNkZWZpbmUgTExfRE1BTVVYX1JFUV9USU0xN19UUklHX0NPTSAgICAgICAgICAgICBMTF9ETUFNVVhfUkVRX1RJTTE3X0NPTQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFNUTTMySDcpCkBAIC02NDMsNiArNjQ4LDEwIEBACiAjZGVmaW5lIEhBTF9IUlRJTV9FeHRlcm5hbEV2ZW50Q291bnRlckVuYWJsZSAgICBIQUxfSFJUSU1fRXh0RXZlbnRDb3VudGVyRW5hYmxlCiAjZGVmaW5lIEhBTF9IUlRJTV9FeHRlcm5hbEV2ZW50Q291bnRlckRpc2FibGUgICBIQUxfSFJUSU1fRXh0RXZlbnRDb3VudGVyRGlzYWJsZQogI2RlZmluZSBIQUxfSFJUSU1fRXh0ZXJuYWxFdmVudENvdW50ZXJSZXNldCAgICAgSEFMX0hSVElNX0V4dEV2ZW50Q291bnRlclJlc2V0CisjZGVmaW5lIEhSVElNX1RJTUVFVkVOVF9BICAgICAgICAgICAgICAgICAgICAgICBIUlRJTV9FVkVOVENPVU5URVJfQQorI2RlZmluZSBIUlRJTV9USU1FRVZFTlRfQiAgICAgICAgICAgICAgICAgICAgICAgSFJUSU1fRVZFTlRDT1VOVEVSX0IKKyNkZWZpbmUgSFJUSU1fVElNRUVWRU5UUkVTRVRNT0RFX1VOQ09ORElUSU9OQUwgIEhSVElNX0VWRU5UQ09VTlRFUl9SU1RNT0RFX1VOQ09ORElUSU9OQUwKKyNkZWZpbmUgSFJUSU1fVElNRUVWRU5UUkVTRVRNT0RFX0NPTkRJVElPTkFMICAgIEhSVElNX0VWRU5UQ09VTlRFUl9SU1RNT0RFX0NPTkRJVElPTkFMCiAjZW5kaWYgLyogU1RNMzJHNCAqLwogCiAjaWYgZGVmaW5lZChTVE0zMkg3KQpAQCAtMTUzMSwxOCArMTU0MCwxOCBAQAogCiAjZGVmaW5lIEhBTF9JMkNGYXN0TW9kZVBsdXNDb25maWcoU1lTQ0ZHX0kyQ0Zhc3RNb2RlUGx1cywgY21kKSAoKChjbWQpPT1FTkFCTEUpPyBIQUxfSTJDRXhfRW5hYmxlRmFzdE1vZGVQbHVzKFNZU0NGR19JMkNGYXN0TW9kZVBsdXMpOiBIQUxfSTJDRXhfRGlzYWJsZUZhc3RNb2RlUGx1cyhTWVNDRkdfSTJDRmFzdE1vZGVQbHVzKSkKIAotI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGMCkgfHwgZGVmaW5lZChTVE0zMkYxKSB8fCBkZWZpbmVkKFNUTTMyRjIpIHx8IGRlZmluZWQoU1RNMzJGMykgfHwgZGVmaW5lZChTVE0zMkY0KSB8fCBkZWZpbmVkKFNUTTMyRjcpIHx8IGRlZmluZWQoU1RNMzJMMCkgfHwgZGVmaW5lZChTVE0zMkw0KSB8fCBkZWZpbmVkKFNUTTMyTDUpIHx8IGRlZmluZWQoU1RNMzJHNCkKKyNpZiBkZWZpbmVkKFNUTTMySDcpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRjApIHx8IGRlZmluZWQoU1RNMzJGMSkgfHwgZGVmaW5lZChTVE0zMkYyKSB8fCBkZWZpbmVkKFNUTTMyRjMpIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMMSkKICNkZWZpbmUgSEFMX0kyQ19NYXN0ZXJfU2VxdWVudGlhbF9UcmFuc21pdF9JVCAgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0lUCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfUmVjZWl2ZV9JVCAgIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0lUCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9UcmFuc21pdF9JVCAgIEhBTF9JMkNfU2xhdmVfU2VxX1RyYW5zbWl0X0lUCiAjZGVmaW5lIEhBTF9JMkNfU2xhdmVfU2VxdWVudGlhbF9SZWNlaXZlX0lUICAgIEhBTF9JMkNfU2xhdmVfU2VxX1JlY2VpdmVfSVQKLSNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGMCB8fCBTVE0zMkYxIHx8IFNUTTMyRjIgfHwgU1RNMzJGMyB8fCBTVE0zMkY0IHx8IFNUTTMyRjcgfHwgU1RNMzJMMCB8fCBTVE0zMkw0IHx8IFNUTTMyTDUgfHwgU1RNMzJHNCAqLwotI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpCisjZW5kaWYgLyogU1RNMzJINyB8fCBTVE0zMldCICB8fCBTVE0zMkcwIHx8IFNUTTMyRjAgfHwgU1RNMzJGMSB8fCBTVE0zMkYyIHx8IFNUTTMyRjMgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgfHwgU1RNMzJMMSAqLworI2lmIGRlZmluZWQoU1RNMzJINykgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJGNCkgfHwgZGVmaW5lZChTVE0zMkY3KSB8fCBkZWZpbmVkKFNUTTMyTDApIHx8IGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMkw1KSB8fCBkZWZpbmVkKFNUTTMyRzQpfHwgZGVmaW5lZChTVE0zMkwxKQogI2RlZmluZSBIQUxfSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1RyYW5zbWl0X0RNQSBIQUxfSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfRE1BCiAjZGVmaW5lIEhBTF9JMkNfTWFzdGVyX1NlcXVlbnRpYWxfUmVjZWl2ZV9ETUEgIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQQogI2RlZmluZSBIQUxfSTJDX1NsYXZlX1NlcXVlbnRpYWxfVHJhbnNtaXRfRE1BICBIQUxfSTJDX1NsYXZlX1NlcV9UcmFuc21pdF9ETUEKICNkZWZpbmUgSEFMX0kyQ19TbGF2ZV9TZXF1ZW50aWFsX1JlY2VpdmVfRE1BICAgSEFMX0kyQ19TbGF2ZV9TZXFfUmVjZWl2ZV9ETUEKLSNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgKi8KKyNlbmRpZiAvKiBTVE0zMkg3IHx8IFNUTTMyV0IgIHx8IFNUTTMyRzAgfHwgU1RNMzJGNCB8fCBTVE0zMkY3IHx8IFNUTTMyTDAgfHwgU1RNMzJMNCB8fCBTVE0zMkw1IHx8IFNUTTMyRzQgfHwgU1RNMzJMMSAqLwogCiAjaWYgZGVmaW5lZChTVE0zMkY0KQogI2RlZmluZSBIQUxfRk1QSTJDX01hc3Rlcl9TZXF1ZW50aWFsX1RyYW5zbWl0X0lUICBIQUxfRk1QSTJDX01hc3Rlcl9TZXFfVHJhbnNtaXRfSVQKQEAgLTMyNDMsNyArMzI1Miw3IEBACiAjZGVmaW5lIFJDQ19NQ09TT1VSQ0VfUExMQ0xLX05PRElWICBSQ0NfTUNPMVNPVVJDRV9QTExDTEsKICNkZWZpbmUgUkNDX01DT1NPVVJDRV9QTExDTEtfRElWMiAgIFJDQ19NQ08xU09VUkNFX1BMTENMS19ESVYyCiAKLSNpZiBkZWZpbmVkKFNUTTMyTDQpIHx8IGRlZmluZWQoU1RNMzJXQikgfHwgZGVmaW5lZChTVE0zMkcwKSB8fCBkZWZpbmVkKFNUTTMyRzQpIHx8IGRlZmluZWQoU1RNMzJMNSkgfHwgZGVmaW5lZChTVE0zMldMKQorI2lmIGRlZmluZWQoU1RNMzJMNCkgfHwgZGVmaW5lZChTVE0zMldCKSB8fCBkZWZpbmVkKFNUTTMyRzApIHx8IGRlZmluZWQoU1RNMzJHNCkgfHwgZGVmaW5lZChTVE0zMkw1KQogI2RlZmluZSBSQ0NfUlRDQ0xLU09VUkNFX05PX0NMSyAgICAgUkNDX1JUQ0NMS1NPVVJDRV9OT05FCiAjZWxzZQogI2RlZmluZSBSQ0NfUlRDQ0xLU09VUkNFX05PTkUgICAgICAgUkNDX1JUQ0NMS1NPVVJDRV9OT19DTEsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsLmggYi9JbmMvc3RtMzJoN3h4X2hhbC5oCmluZGV4IGY4NzQzZmEuLjhmOTk0NmYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWwuaApAQCAtMTE3LDEwICsxMTcsMzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19QSU5fXykgJiBTWVNDRkdfRkFTVE1PREVQTFVTX1BCOCkgPT0gU1lTQ0ZHX0ZBU1RNT0RFUExVU19QQjgpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19QSU5fXykgJiBTWVNDRkdfRkFTVE1PREVQTFVTX1BCOSkgPT0gU1lTQ0ZHX0ZBU1RNT0RFUExVU19QQjkpKQogCi0jZW5kaWYgLyogISBTWVNDRkdfUE1DUl9CT09TVEVOICovCiAvKioKICAgKiBAfQogICAqLworI2VuZGlmIC8qICEgU1lTQ0ZHX1BNQ1JfQk9PU1RFTiAqLworCisKKyNpZiBkZWZpbmVkKFNZU0NGR19BREMyQUxUX0FEQzJfUk9VVDApIHx8IGRlZmluZWQoU1lTQ0ZHX0FEQzJBTFRfQURDMl9ST1VUMSkKKy8qKiBAZGVmZ3JvdXAgU1lTQ0ZHX0FkYzJfQWx0ZXJuYXRlX0Nvbm5lY3Rpb24gU1lTQ0ZHIEFEQzIgQWx0ZXJuYXRlIENvbm5lY3Rpb24KKyAgKiBAeworICAqLworCisvKiogQGJyaWVmICBBZGMyIEFsdGVybmF0ZSBDb25uZWN0aW9uIG9uIFZpbnBbMTZdIGFuZCBWaW5wWzE3XQorICAqLworI2RlZmluZSBTWVNDRkdfQURDMl9ST1VUMF9EQUMxXzEgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKSAgICAgIC8qITwgREFDMV9vdXQxIGNvbm5lY3RlZCB0byBBREMyIFZJTlBbMTZdICovCisjZGVmaW5lIFNZU0NGR19BREMyX1JPVVQwX1ZCQVQ0ICAgICAgICAgU1lTQ0ZHX0FEQzJBTFRfQURDMl9ST1VUMCAgLyohPCBWQkFULzQgY29ubmVjdGVkIHRvIEFEQzIgVklOUFsxNl0gKi8KKyNkZWZpbmUgU1lTQ0ZHX0FEQzJfUk9VVDFfREFDMV8yICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAgICAvKiE8IERBQzFfb3V0MiBjb25uZWN0ZWQgdG8gQURDMiBWSU5QWzE3XSAqLworI2RlZmluZSBTWVNDRkdfQURDMl9ST1VUMV9WUkVGSU5UICAgICAgIFNZU0NGR19BREMyQUxUX0FEQzJfUk9VVDEgIC8qITwgVlJFRklOVCBjb25uZWN0ZWQgdG8gQURDMiBWSU5QWzE3XSAqLworCisjZGVmaW5lIElTX1NZU0NGR19BREMyQUxUX1JPVVQwKF9fVkFMVUVfXykgICgoKF9fVkFMVUVfXykgPT0gU1lTQ0ZHX0FEQzJfUk9VVDBfREFDMV8xKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gU1lTQ0ZHX0FEQzJfUk9VVDBfVkJBVDQpKQorI2RlZmluZSBJU19TWVNDRkdfQURDMkFMVF9ST1VUMShfX1ZBTFVFX18pICAoKChfX1ZBTFVFX18pID09IFNZU0NGR19BREMyX1JPVVQxX0RBQzFfMikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IFNZU0NGR19BREMyX1JPVVQxX1ZSRUZJTlQpKQorCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qU1lTQ0ZHX0FEQzJBTFRfQURDMl9ST1VUMCB8fCBTWVNDRkdfQURDMkFMVF9BREMyX1JPVVQxKi8KKwogCiAvKiogQGRlZmdyb3VwIFNZU0NGR19FdGhlcm5ldF9Db25maWcgIEV0aGVybmV0IENvbmZpZwogICAqIEB7CkBAIC0xNDUsMTAgKzE2OSw2IEBACiAjZGVmaW5lIFNZU0NGR19TV0lUQ0hfUEMzICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfUE1DUl9QQzNTTyAgLyohPCBTZWxlY3QgUEMzIGFuYWxvZyBzd2l0Y2ggKi8KIAogCi0jZGVmaW5lIElTX1NZU0NGR19BTkFMT0dfU1dJVENIKFNXSVRDSCkgICAgKCgoKFNXSVRDSCkgJiBTWVNDRkdfU1dJVENIX1BBMCkgPT0gU1lTQ0ZHX1NXSVRDSF9QQTApfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFNXSVRDSCkgJiBTWVNDRkdfU1dJVENIX1BBMSkgPT0gU1lTQ0ZHX1NXSVRDSF9QQTEpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChTV0lUQ0gpICYgU1lTQ0ZHX1NXSVRDSF9QQzIpID09IFNZU0NGR19TV0lUQ0hfUEMyKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoU1dJVENIKSAmIFNZU0NGR19TV0lUQ0hfUEMzKSA9PSBTWVNDRkdfU1dJVENIX1BDMykpCiAKIAogI2RlZmluZSBTWVNDRkdfU1dJVENIX1BBMF9PUEVOICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfUE1DUl9QQTBTTyAgICAgICAvKiE8IFBBMCBhbmFsb2cgc3dpdGNoIG9wZW5lZCAqLwpAQCAtMTYwLDYgKzE4MCwxNiBAQAogI2RlZmluZSBTWVNDRkdfU1dJVENIX1BDM19PUEVOICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfUE1DUl9QQzNTTyAgICAgICAvKiE8IFBDMyBhbmFsb2cgc3dpdGNoIG9wZW5lZCAqLwogI2RlZmluZSBTWVNDRkdfU1dJVENIX1BDM19DTE9TRSAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAvKiE8IFBDMyBhbmFsb2cgc3dpdGNoIGNsb3NlZCAqLwogCisvKioKKyAgKiBAfQorICAqLworCisjZGVmaW5lIElTX1NZU0NGR19BTkFMT0dfU1dJVENIKFNXSVRDSCkgICAgKCgoKFNXSVRDSCkgJiBTWVNDRkdfU1dJVENIX1BBMCkgPT0gU1lTQ0ZHX1NXSVRDSF9QQTApfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFNXSVRDSCkgJiBTWVNDRkdfU1dJVENIX1BBMSkgPT0gU1lTQ0ZHX1NXSVRDSF9QQTEpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChTV0lUQ0gpICYgU1lTQ0ZHX1NXSVRDSF9QQzIpID09IFNZU0NGR19TV0lUQ0hfUEMyKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoU1dJVENIKSAmIFNZU0NGR19TV0lUQ0hfUEMzKSA9PSBTWVNDRkdfU1dJVENIX1BDMykpCisKKwogI2RlZmluZSBJU19TWVNDRkdfU1dJVENIX1NUQVRFKFNUQVRFKSAgICAgICgoKChTVEFURSkgJiBTWVNDRkdfU1dJVENIX1BBMF9PUEVOKSA9PSBTWVNDRkdfU1dJVENIX1BBMF9PUEVOKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoU1RBVEUpICYgU1lTQ0ZHX1NXSVRDSF9QQTBfQ0xPU0UpID09IFNZU0NGR19TV0lUQ0hfUEEwX0NMT1NFKSAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChTVEFURSkgJiBTWVNDRkdfU1dJVENIX1BBMV9PUEVOKSA9PSBTWVNDRkdfU1dJVENIX1BBMV9PUEVOKSAgICAgfHwgXApAQCAtMTY4LDkgKzE5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoU1RBVEUpICYgU1lTQ0ZHX1NXSVRDSF9QQzJfQ0xPU0UpID09IFNZU0NGR19TV0lUQ0hfUEMyX0NMT1NFKSAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChTVEFURSkgJiBTWVNDRkdfU1dJVENIX1BDM19PUEVOKSA9PSBTWVNDRkdfU1dJVENIX1BDM19PUEVOKSAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKFNUQVRFKSAmIFNZU0NGR19TV0lUQ0hfUEMzX0NMT1NFKSA9PSBTWVNDRkdfU1dJVENIX1BDM19DTE9TRSkpCi0vKioKLSAgKiBAfQotICAqLworCiAKIC8qKiBAZGVmZ3JvdXAgU1lTQ0ZHX0Jvb3RfQ29uZmlnICBCb290IENvbmZpZwogICAqIEB7CkBAIC0zMjcsNiArMzU1LDkgQEAKICNkZWZpbmUgRVhUSV9MSU5FODYgICAgICAoKHVpbnQzMl90KTB4NTYpICAvKiBOb3QgYXZhaWxhYmxlIGluIGFsbCBmYW1pbHkgbGluZXMgKi8KICNkZWZpbmUgRVhUSV9MSU5FODcgICAgICAoKHVpbnQzMl90KTB4NTcpCiAjZGVmaW5lIEVYVElfTElORTg4ICAgICAgKCh1aW50MzJfdCkweDU4KSAgLyogTm90IGF2YWlsYWJsZSBpbiBhbGwgZmFtaWx5IGxpbmVzICovCisjZGVmaW5lIEVYVElfTElORTg5ICAgICAgKCh1aW50MzJfdCkweDU5KSAgLyogTm90IGF2YWlsYWJsZSBpbiBhbGwgZmFtaWx5IGxpbmVzICovCisjZGVmaW5lIEVYVElfTElORTkwICAgICAgKCh1aW50MzJfdCkweDVBKSAgLyogTm90IGF2YWlsYWJsZSBpbiBhbGwgZmFtaWx5IGxpbmVzICovCisjZGVmaW5lIEVYVElfTElORTkxICAgICAgKCh1aW50MzJfdCkweDVCKSAgLyogTm90IGF2YWlsYWJsZSBpbiBhbGwgZmFtaWx5IGxpbmVzICovCiAKICNpZiBkZWZpbmVkKERVQUxfQ09SRSkKICNkZWZpbmUgSVNfSEFMX0VYVElfQ09ORklHX0xJTkUoTElORSkgKCgoTElORSkgPT0gRVhUSV9MSU5FMCkgfHwgKChMSU5FKSA9PSBFWFRJX0xJTkUxKSB8fCBcCkBAIC0zNDksMTMgKzM4MCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTQpICB8fCAoKExJTkUpID09IEVYVElfTElORTUpICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTYpICB8fCAoKExJTkUpID09IEVYVElfTElORTcpICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTgpICB8fCAoKExJTkUpID09IEVYVElfTElORTkpICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTEwKSB8fCAoKExJTkUpID09IEVYVElfTElORTExKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FMTIpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMTMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkUxNCkgfHwgKChMSU5FKSA9PSBFWFRJX0xJTkUxNSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTE2KSB8fCAoKExJTkUpID09IEVYVElfTElORTE3KSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FMTgpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMTkpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkUyMCkgfHwgKChMSU5FKSA9PSBFWFRJX0xJTkUyMSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTQ5KSB8fCAoKExJTkUpID09IEVYVElfTElORTUxKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FMTApIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMTEpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FMTIpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMTMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FMTQpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMTUpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FMTYpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMTcpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FMTgpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMTkpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FMjApIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMjEpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FNDkpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FNTEpICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FODUpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FODYpKQogI2VuZGlmIC8qIERVQUxfQ09SRSAqLwogCkBAIC00NDQsNyArNDc1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkU3NSkgfHwgKChMSU5FKSA9PSBFWFRJX0xJTkU3NikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTg1KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FODYpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FODcpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkU4OCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FODgpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FODkpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkU5MCkgfHwgKChMSU5FKSA9PSBFWFRJX0xJTkU5MSkpCiAjZW5kaWYgLypEVUFMX0NPUkUqLwogCiAjaWYgZGVmaW5lZChEVUFMX0NPUkUpCkBAIC01MzAsNyArNTYyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkU3NSkgfHwgKChMSU5FKSA9PSBFWFRJX0xJTkU3NikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTg1KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FODYpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FODcpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkU4OCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FODgpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FODkpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkU5MCkgfHwgKChMSU5FKSA9PSBFWFRJX0xJTkU5MSkpCiAjZW5kaWYgLypEVUFMX0NPUkUqLwogCiAjaWYgZGVmaW5lZChEVUFMX0NPUkUpCkBAIC02MDgsNyArNjQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkU0MSkgfHwgKChMSU5FKSA9PSBFWFRJX0xJTkU0OCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTQ5KSB8fCAoKExJTkUpID09IEVYVElfTElORTUwKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FNTEpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FNTIpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMSU5FKSA9PSBFWFRJX0xJTkU1MykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTElORSkgPT0gRVhUSV9MSU5FNTMpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FODgpKQogI2Vsc2UKICNkZWZpbmUgSVNfRVhUSV9EM19MSU5FKExJTkUpICgoKExJTkUpID09IEVYVElfTElORTApIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMSkgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExJTkUpID09IEVYVElfTElORTIpIHx8ICgoTElORSkgPT0gRVhUSV9MSU5FMykgICB8fCBcCkBAIC02NjcsMTAgKzcwMCwxMCBAQAogCiAKIC8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChEVUFMX0NPUkUpCiAvKiogQGRlZmdyb3VwIEFSVF9FeHBvcnRlZF9NYWNyb3MgQVJUIEV4cG9ydGVkIE1hY3JvcwogICAqIEB7CiAgICovCi0jaWYgZGVmaW5lZChEVUFMX0NPUkUpCiAKIC8qKiBAYnJpZWYgIEFSVCBFbmFibGUgTWFjcm8uCiAgICogICAgICAgICBFbmFibGUgdGhlIENvcnRleC1NNCBBUlQgY2FjaGUuCkBAIC02ODcsMTAgKzcyMCwxMCBAQAogICAqLwogI2RlZmluZSBfX0hBTF9BUlRfQ09ORklHX0JBU0VfQUREUkVTUyhfX0JBU0VfQUREUkVTU19fKSAgIE1PRElGWV9SRUcoQVJULT5DVFIsIEFSVF9DVFJfUENBQ0hFQUREUiwgKCgoX19CQVNFX0FERFJFU1NfXykgPj4gMTJVKSAmIDB4MDAwRkZGMDBVTCkpCiAKLSNlbmRpZiAvKiBEVUFMX0NPUkUgKi8KIC8qKgogICAqIEB9CiAgICovCisjZW5kaWYgLyogRFVBTF9DT1JFICovCiAKIC8qKiBAZGVmZ3JvdXAgU1lTQ0ZHX0V4cG9ydGVkX01hY3JvcyBTWVNDRkcgRXhwb3J0ZWQgTWFjcm9zCiAgICogQHsKQEAgLTgyMCw4ICs4NTMsMTkgQEAKICNkZWZpbmUgX19IQUxfREJHTUNVX0ZSRUVaRV9JMkMxKCkgICAgICAgICAgIChEQkdNQ1UtPkFQQjFMRloxIHw9IChEQkdNQ1VfQVBCMUxGWjFfREJHX0kyQzEpKQogI2RlZmluZSBfX0hBTF9EQkdNQ1VfRlJFRVpFX0kyQzIoKSAgICAgICAgICAgKERCR01DVS0+QVBCMUxGWjEgfD0gKERCR01DVV9BUEIxTEZaMV9EQkdfSTJDMikpCiAjZGVmaW5lIF9fSEFMX0RCR01DVV9GUkVFWkVfSTJDMygpICAgICAgICAgICAoREJHTUNVLT5BUEIxTEZaMSB8PSAoREJHTUNVX0FQQjFMRloxX0RCR19JMkMzKSkKKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX0RCR01DVV9GUkVFWkVfSTJDNSgpICAgICAgICAgICAoREJHTUNVLT5BUEIxTEZaMSB8PSAoREJHTUNVX0FQQjFMRloxX0RCR19JMkM1KSkKKyNlbmRpZiAvKkkyQzUqLworI2lmIGRlZmluZWQoREJHTUNVX0FQQjFIRloxX0RCR19GRENBTikKICNkZWZpbmUgX19IQUxfREJHTUNVX0ZSRUVaRV9GRENBTigpICAgICAgICAgIChEQkdNQ1UtPkFQQjFIRloxIHw9IChEQkdNQ1VfQVBCMUhGWjFfREJHX0ZEQ0FOKSkKKyNlbmRpZiAvKkRCR01DVV9BUEIxSEZaMV9EQkdfRkRDQU4qLwogCisjaWYgZGVmaW5lZChUSU0yMykKKyNkZWZpbmUgX19IQUxfREJHTUNVX0ZSRUVaRV9USU0yMygpICAgICAgICAgICAoREJHTUNVLT5BUEIxSEZaMSB8PSAoREJHTUNVX0FQQjFIRloxX0RCR19USU0yMykpCisjZW5kaWYgLypUSU0yMyovCisjaWYgZGVmaW5lZChUSU0yNCkKKyNkZWZpbmUgX19IQUxfREJHTUNVX0ZSRUVaRV9USU0yNCgpICAgICAgICAgICAoREJHTUNVLT5BUEIxSEZaMSB8PSAoREJHTUNVX0FQQjFIRloxX0RCR19USU0yNCkpCisjZW5kaWYgLypUSU0yNCovCiAKICNkZWZpbmUgX19IQUxfREJHTUNVX0ZSRUVaRV9USU0xKCkgICAgICAgICAgIChEQkdNQ1UtPkFQQjJGWjEgfD0gKERCR01DVV9BUEIyRloxX0RCR19USU0xKSkKICNkZWZpbmUgX19IQUxfREJHTUNVX0ZSRUVaRV9USU04KCkgICAgICAgICAgIChEQkdNQ1UtPkFQQjJGWjEgfD0gKERCR01DVV9BUEIyRloxX0RCR19USU04KSkKQEAgLTg1NCw4ICs4OTgsMTkgQEAKICNkZWZpbmUgX19IQUxfREJHTUNVX1VuRnJlZXplX0kyQzEoKSAgICAgICAgICAgKERCR01DVS0+QVBCMUxGWjEgICY9IH4gKERCR01DVV9BUEIxTEZaMV9EQkdfSTJDMSkpCiAjZGVmaW5lIF9fSEFMX0RCR01DVV9VbkZyZWV6ZV9JMkMyKCkgICAgICAgICAgIChEQkdNQ1UtPkFQQjFMRloxICAmPSB+IChEQkdNQ1VfQVBCMUxGWjFfREJHX0kyQzIpKQogI2RlZmluZSBfX0hBTF9EQkdNQ1VfVW5GcmVlemVfSTJDMygpICAgICAgICAgICAoREJHTUNVLT5BUEIxTEZaMSAgJj0gfiAoREJHTUNVX0FQQjFMRloxX0RCR19JMkMzKSkKKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX0RCR01DVV9VbkZyZWV6ZV9JMkM1KCkgICAgICAgICAgIChEQkdNQ1UtPkFQQjFMRloxICAmPSB+IChEQkdNQ1VfQVBCMUxGWjFfREJHX0kyQzUpKQorI2VuZGlmIC8qSTJDNSovCisjaWYgZGVmaW5lZChEQkdNQ1VfQVBCMUhGWjFfREJHX0ZEQ0FOKQogI2RlZmluZSBfX0hBTF9EQkdNQ1VfVW5GcmVlemVfRkRDQU4oKSAgICAgICAgICAoREJHTUNVLT5BUEIxSEZaMSAgJj0gfiAoREJHTUNVX0FQQjFIRloxX0RCR19GRENBTikpCisjZW5kaWYgLypEQkdNQ1VfQVBCMUhGWjFfREJHX0ZEQ0FOKi8KIAorI2lmIGRlZmluZWQoVElNMjMpCisjZGVmaW5lIF9fSEFMX0RCR01DVV9VbkZyZWV6ZV9USU0yMygpICAgICAgICAgIChEQkdNQ1UtPkFQQjFIRloxICY9IH4gKERCR01DVV9BUEIxSEZaMV9EQkdfVElNMjMpKQorI2VuZGlmIC8qVElNMjMqLworI2lmIGRlZmluZWQoVElNMjQpCisjZGVmaW5lIF9fSEFMX0RCR01DVV9VbkZyZWV6ZV9USU0yNCgpICAgICAgICAgIChEQkdNQ1UtPkFQQjFIRloxICY9IH4gKERCR01DVV9BUEIxSEZaMV9EQkdfVElNMjQpKQorI2VuZGlmIC8qVElNMjQqLwogCiAjZGVmaW5lIF9fSEFMX0RCR01DVV9VbkZyZWV6ZV9USU0xKCkgICAgICAgICAgIChEQkdNQ1UtPkFQQjJGWjEgICY9IH4gKERCR01DVV9BUEIyRloxX0RCR19USU0xKSkKICNkZWZpbmUgX19IQUxfREJHTUNVX1VuRnJlZXplX1RJTTgoKSAgICAgICAgICAgKERCR01DVS0+QVBCMkZaMSAgJj0gfiAoREJHTUNVX0FQQjJGWjFfREJHX1RJTTgpKQpAQCAtMTA2MCw2ICsxMTE1LDEyIEBACiB2b2lkIEhBTF9TWVNDRkdfVlJFRkJVRl9UcmltbWluZ0NvbmZpZyh1aW50MzJfdCBUcmltbWluZ1ZhbHVlKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TWVNDRkdfRW5hYmxlVlJFRkJVRih2b2lkKTsKIHZvaWQgSEFMX1NZU0NGR19EaXNhYmxlVlJFRkJVRih2b2lkKTsKKyNpZiBkZWZpbmVkKFNZU0NGR19BREMyQUxUX0FEQzJfUk9VVDApCit2b2lkIEhBTF9TWVNDRkdfQURDMkFMVF9Sb3V0MENvbmZpZyh1aW50MzJfdCBBZGMyQWx0Um91dDApOworI2VuZGlmIC8qU1lTQ0ZHX0FEQzJBTFRfQURDMl9ST1VUMCovCisjaWYgZGVmaW5lZChTWVNDRkdfQURDMkFMVF9BREMyX1JPVVQxKQordm9pZCBIQUxfU1lTQ0ZHX0FEQzJBTFRfUm91dDFDb25maWcodWludDMyX3QgQWRjMkFsdFJvdXQxKTsKKyNlbmRpZiAvKlNZU0NGR19BREMyQUxUX0FEQzJfUk9VVDEqLwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9oYWxfYWRjLmggYi9JbmMvc3RtMzJoN3h4X2hhbF9hZGMuaAppbmRleCAyNTllYjVhLi41YmUxZTFhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9hZGMuaAorKysgYi9JbmMvc3RtMzJoN3h4X2hhbF9hZGMuaApAQCAtNDksOCArNDksMTIgQEAKICAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0gIHVpbnQzMl90IFJhdGlvOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyZXMgdGhlIG92ZXJzYW1wbGluZyByYXRpby4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAxIGFuZCAxMDI0ICovCisgIHVpbnQzMl90IFJhdGlvOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbmZpZ3VyZXMgdGhlIG92ZXJzYW1wbGluZyByYXRpby4gKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgZnJvbSAxIHRvIDEwMjMgZm9yIEFEQzEvMiBvciBhIHZhbHVlIG9mIEByZWYgQURDX0hBTF9FQ19PVlNfUkFUSU8gIGZvciBBREMzKi8gICAgCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfSEFMX0VDX09WU19SQVRJTyAqLworI2VuZGlmCiAKICAgdWludDMyX3QgUmlnaHRCaXRTaGlmdDsgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlcyB0aGUgZGl2aXNpb24gY29lZmZpY2llbnQgZm9yIHRoZSBPdmVyc2FtcGxlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfSEFMX0VDX09WU19TSElGVCAqLwpAQCAtMTAwLDYgKzEwNCwxMyBAQAogICB1aW50MzJfdCBSZXNvbHV0aW9uOyAgICAgICAgICAgIC8qITwgQ29uZmlndXJlIHRoZSBBREMgcmVzb2x1dGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQURDX0hBTF9FQ19SRVNPTFVUSU9OICovCiAKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICB1aW50MzJfdCBEYXRhQWxpZ247ICAgICAgICAgICAgIC8qITwgU3BlY2lmeSBBREMgZGF0YSBhbGlnbm1lbnQgaW4gY29udmVyc2lvbiBkYXRhIHJlZ2lzdGVyIChyaWdodCBvciBsZWZ0KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyIHRvIHJlZmVyZW5jZSBtYW51YWwgZm9yIGFsaWdubWVudHMgZm9ybWF0cyB2ZXJzdXMgcmVzb2x1dGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEFEQ19IQUxfRUNfREFUQV9BTElHTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgcmVzZXJ2ZWQgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4Ki8KKyNlbmRpZgorCiAgIHVpbnQzMl90IFNjYW5Db252TW9kZTsgICAgICAgICAgLyohPCBDb25maWd1cmUgdGhlIHNlcXVlbmNlciBvZiBBREMgZ3JvdXBzIHJlZ3VsYXIgYW5kIGluamVjdGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFzc29jaWF0ZWQgdG8gcGFyYW1ldGVyICdEaXNjb250aW51b3VzQ29udk1vZGUnIHRvIGhhdmUgbWFpbiBzZXF1ZW5jZSBzdWJkaXZpZGVkIGluIHN1Y2Nlc3NpdmUgcGFydHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBkaXNhYmxlZDogQ29udmVyc2lvbiBpcyBwZXJmb3JtZWQgaW4gc2luZ2xlIG1vZGUgKG9uZSBjaGFubmVsIGNvbnZlcnRlZCwgdGhlIG9uZSBkZWZpbmVkIGluIHJhbmsgMSkuCkBAIC0xNTYsNyArMTY3LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiBJbiBjb250aW51b3VzIG1vZGUsIERNQSBtdXN0IGJlIGNvbmZpZ3VyZWQgaW4gY2lyY3VsYXIgbW9kZS4gT3RoZXJ3aXNlIGFuIG92ZXJydW4gd2lsbCBiZSB0cmlnZ2VyZWQgd2hlbiBETUEgYnVmZmVyIG1heGltdW0gcG9pbnRlciBpcyByZWFjaGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfQ29udmVyc2lvbkRhdGFNYW5hZ2VtZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZTogVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBtb2RpZmllZCB3aGVuIG5vIGNvbnZlcnNpb24gaXMgb24gZ29pbmcgb24gYm90aCByZWd1bGFyIGFuZCBpbmplY3RlZCBncm91cHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBREMgZGlzYWJsZWQsIG9yIEFEQyBlbmFibGVkIHdpdGhvdXQgY29udGludW91cyBtb2RlIG9yIGV4dGVybmFsIHRyaWdnZXIgdGhhdCBjb3VsZCBsYXVuY2ggYSBjb252ZXJzaW9uKS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBREMgZGlzYWJsZWQsIG9yIEFEQyBlbmFibGVkIHdpdGhvdXQgY29udGludW91cyBtb2RlIG9yIGV4dGVybmFsIHRyaWdnZXIgdGhhdCBjb3VsZCBsYXVuY2ggYSBjb252ZXJzaW9uKS4qLworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgIC8qTm90ZTogT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4LCB0aGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpYyB0byBBREMzIG9ubHkuICovCisKKyAgdWludDMyX3QgU2FtcGxpbmdNb2RlOyAgICAgICAgICAvKiE8IFNlbGVjdCB0aGUgc2FtcGxpbmcgbW9kZSB0byBiZSB1c2VkIGZvciBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfcmVndWxhcl9zYW1wbGluZ19tb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmljIHRvIEFEQzMgb25seS4gKi8KKworICBGdW5jdGlvbmFsU3RhdGUgRE1BQ29udGludW91c1JlcXVlc3RzOyAvKiE8IFNwZWNpZnkgd2hldGhlciB0aGUgRE1BIHJlcXVlc3RzIGFyZSBwZXJmb3JtZWQgaW4gb25lIHNob3QgbW9kZSAoRE1BIHRyYW5zZmVyIHN0b3BzIHdoZW4gbnVtYmVyIG9mIGNvbnZlcnNpb25zIGlzIHJlYWNoZWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpbiBjb250aW51b3VzIG1vZGUgKERNQSB0cmFuc2ZlciB1bmxpbWl0ZWQsIHdoYXRldmVyIG51bWJlciBvZiBjb252ZXJzaW9ucykuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIEVOQUJMRSBvciBESVNBQkxFLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEluIGNvbnRpbnVvdXMgbW9kZSwgRE1BIG11c3QgYmUgY29uZmlndXJlZCBpbiBjaXJjdWxhciBtb2RlLiBPdGhlcndpc2UgYW4gb3ZlcnJ1biB3aWxsIGJlIHRyaWdnZXJlZCB3aGVuIERNQSBidWZmZXIgbWF4aW11bSBwb2ludGVyIGlzIHJlYWNoZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFNwZWNpZmljIHRvIEFEQzMgb25seSBvbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNlbmRpZgogCiAgIHVpbnQzMl90IE92ZXJydW47ICAgICAgICAgICAgICAgLyohPCBTZWxlY3QgdGhlIGJlaGF2aW9yIGluIGNhc2Ugb2Ygb3ZlcnJ1bjogZGF0YSBvdmVyd3JpdHRlbiBvciBwcmVzZXJ2ZWQgKGRlZmF1bHQpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgYXBwbGllcyB0byBBREMgZ3JvdXAgcmVndWxhciBvbmx5LgpAQCAtMjM5LDcgKzI2NSwyMCBAQAogICBGdW5jdGlvbmFsU3RhdGUgT2Zmc2V0UmlnaHRTaGlmdDsgICAvKiE8IERlZmluZSB0aGUgUmlnaHQtc2hpZnQgZGF0YSBhZnRlciBPZmZzZXQgY29ycmVjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBhcHBsaWVkIG9ubHkgZm9yIDE2LWJpdCBvciA4LWJpdCByZXNvbHV0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gRU5BQkxFIG9yIERJU0FCTEUuKi8KLQorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgIHVpbnQzMl90IE9mZnNldFNpZ247ICAgICAgICAgICAgICAgIC8qITwgRGVmaW5lIGlmIHRoZSBvZmZzZXQgc2hvdWxkIGJlIHN1YnN0cmFjdGVkIChuZWdhdGl2ZSBzaWduKSBvciBhZGRlZCAocG9zaXRpdmUgc2lnbikgZnJvbSBvciB0byB0aGUgcmF3IGNvbnZlcnRlZCBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQURDRXhfT2Zmc2V0U2lnbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgbW9kaWZpZWQgd2hlbiBubyBjb252ZXJzaW9uIGlzIG9uIGdvaW5nIG9uIGJvdGggcmVndWxhciBhbmQgaW5qZWN0ZWQgZ3JvdXBzIChBREMgZGlzYWJsZWQsIG9yIEFEQyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGNvbnRpbnVvdXMgbW9kZSBvciBleHRlcm5hbCB0cmlnZ2VyIHRoYXQgY291bGQgbGF1bmNoIGEgY29udmVyc2lvbikuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQXBwbGljYWJsZSBmb3IgQURDMyBvbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyAgRnVuY3Rpb25hbFN0YXRlIE9mZnNldFNhdHVyYXRpb247ICAgLyohPCBEZWZpbmUgaWYgdGhlIG9mZnNldCBzaG91bGQgYmUgc2F0dXJhdGVkIHVwb24gdW5kZXIgb3Igb3ZlciBmbG93LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIHZhbHVlIGNhbiBiZSBFTkFCTEUgb3IgRElTQUJMRS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgbW9kaWZpZWQgd2hlbiBubyBjb252ZXJzaW9uIGlzIG9uIGdvaW5nIG9uIGJvdGggcmVndWxhciBhbmQgaW5qZWN0ZWQgZ3JvdXBzIChBREMgZGlzYWJsZWQsIG9yIEFEQyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGNvbnRpbnVvdXMgbW9kZSBvciBleHRlcm5hbCB0cmlnZ2VyIHRoYXQgY291bGQgbGF1bmNoIGEgY29udmVyc2lvbikuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQXBwbGljYWJsZSBmb3IgQURDMyBvbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNlbmRpZgogICBGdW5jdGlvbmFsU3RhdGUgT2Zmc2V0U2lnbmVkU2F0dXJhdGlvbjsgLyohPCBTcGVjaWZ5IHdoZXRoZXIgdGhlIFNpZ25lZCBzYXR1cmF0aW9uIGZlYXR1cmUgaXMgdXNlZCBvciBub3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBhcHBsaWVkIG9ubHkgZm9yIDE2LWJpdCBvciA4LWJpdCByZXNvbHV0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNldCB0byBFTkFCTEUgb3IgRElTQUJMRS4gKi8KQEAgLTI5MSw2ICszMzAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wYWN0ZWQ6IHRoZSBjb21wYXJpc29uIG9mIGFuYWxvZyB3YXRjaGRvZyB0aHJlc2hvbGRzIGlzIGRvbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gb3ZlcnNhbXBsaW5nIGludGVybWVkaWF0ZSBjb21wdXRhdGlvbiAoYWZ0ZXIgcmF0aW8sIGJlZm9yZSBzaGlmdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbik6IGludGVybWVkaWF0ZSByZWdpc3RlciBiaXRmaWVsZCBbMzI6N10gKDI2IG1vc3Qgc2lnbmlmaWNhbnQgYml0cykuICovCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgdWludDMyX3QgRmlsdGVyaW5nQ29uZmlnOyAgIC8qITwgU3BlY2lmeSB3aGV0aGVyIGZpbHRlcmluZyBzaG91bGQgYmUgdXNlIGFuZCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgdG8gY29uc2lkZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlZm9yZSBzZXR0aW5nIGZsYWcgb3IgcmFpc2luZyBpbnRlcnJ1cHQsIGFuYWxvZyB3YXRjaGRvZyBjYW4gd2FpdCB0byBoYXZlIHNldmVyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc2VjdXRpdmUgb3V0LW9mLXdpbmRvdyBzYW1wbGVzLiBUaGlzIHBhcmFtZXRlciBhbGxvd3MgdG8gY29uZmlndXJlIHRoaXMgbnVtYmVyLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBvbmx5IGFwcGxpZXMgdG8gQW5hbG9nIHdhdGNoZG9nIDEuIEZvciBvdGhlcnMsIHVzZSB2YWx1ZSBBRENfQVdEX0ZJTFRFUklOR19OT05FLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEFEQ19hbmFsb2dfd2F0Y2hkb2dfZmlsdGVyaW5nX2NvbmZpZy4gQXBwbGljYWJsZSBmb3IgQURDMyBvbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHguICovCisjZW5kaWYKIH0gQURDX0FuYWxvZ1dER0NvbmZUeXBlRGVmOwogCiAvKioKQEAgLTQ2NCwxNSArNTEwLDM1IEBACiAvKiogQGRlZmdyb3VwIEFEQ19IQUxfRUNfUkVTT0xVVElPTiAgQURDIGluc3RhbmNlIC0gUmVzb2x1dGlvbgogICAqIEB7CiAgICovCi0jZGVmaW5lIEFEQ19SRVNPTFVUSU9OXzE2QiAgICAgICAgICAgICAgICAgKExMX0FEQ19SRVNPTFVUSU9OXzE2QikgIC8qITwgQURDIHJlc29sdXRpb24gMTYgYml0cyAqLwotI2RlZmluZSBBRENfUkVTT0xVVElPTl8xNEIgICAgICAgICAgICAgICAgIChMTF9BRENfUkVTT0xVVElPTl8xNEIpICAvKiE8IEFEQyByZXNvbHV0aW9uIDE0IGJpdHMgKi8KKyNkZWZpbmUgQURDX1JFU09MVVRJT05fMTZCICAgICAgICAgICAgICAgICAoTExfQURDX1JFU09MVVRJT05fMTZCKSAgLyohPCBBREMgcmVzb2x1dGlvbiAxNiBiaXRzLCBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzEsIEFEQzIgKi8KKyNkZWZpbmUgQURDX1JFU09MVVRJT05fMTRCICAgICAgICAgICAgICAgICAoTExfQURDX1JFU09MVVRJT05fMTRCKSAgLyohPCBBREMgcmVzb2x1dGlvbiAxNCBiaXRzLCBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzEsIEFEQzIgICovCiAjZGVmaW5lIEFEQ19SRVNPTFVUSU9OXzEyQiAgICAgICAgICAgICAgICAgKExMX0FEQ19SRVNPTFVUSU9OXzEyQikgIC8qITwgQURDIHJlc29sdXRpb24gMTIgYml0cyAqLwogI2RlZmluZSBBRENfUkVTT0xVVElPTl8xMEIgICAgICAgICAgICAgICAgIChMTF9BRENfUkVTT0xVVElPTl8xMEIpICAvKiE8IEFEQyByZXNvbHV0aW9uIDEwIGJpdHMgKi8KICNkZWZpbmUgQURDX1JFU09MVVRJT05fOEIgICAgICAgICAgICAgICAgICAoTExfQURDX1JFU09MVVRJT05fOEIpICAgLyohPCBBREMgcmVzb2x1dGlvbiAgOCBiaXRzICovCisKKyNpZiBkZWZpbmVkIChBRENfVkVSX1Y1X1gpCisjZGVmaW5lIEFEQ19SRVNPTFVUSU9OXzE0Ql9PUFQgICAgICAgICAgICAgKExMX0FEQ19SRVNPTFVUSU9OXzE0Ql9PUFQpIC8qITwgQURDIHJlc29sdXRpb24gMTQgYml0cyBvcHRpbWl6ZWQgZm9yIHBvd2VyIGNvbnN1bXB0aW9uLCBhdmFpbGFibGUgb24gZm9yIGRldmljZXMgcmV2aXNpb24gViBvbmx5ICovCisjZGVmaW5lIEFEQ19SRVNPTFVUSU9OXzEyQl9PUFQgICAgICAgICAgICAgKExMX0FEQ19SRVNPTFVUSU9OXzEyQl9PUFQpIC8qITwgQURDIHJlc29sdXRpb24gMTIgYml0cyBvcHRpbWl6ZWQgZm9yIHBvd2VyIGNvbnN1bXB0aW9uLCBhdmFpbGFibGUgb24gZm9yIGRldmljZXMgcmV2aXNpb24gViBvbmx5ICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisjZGVmaW5lIEFEQ19SRVNPTFVUSU9OXzZCICAgICAgICAgICAgICAgICAgKExMX0FEQ19SRVNPTFVUSU9OXzZCKSAgIC8qITwgQURDIHJlc29sdXRpb24gIDYgYml0cywgT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMzICAqLworI2VuZGlmICAvKiBBRENfVkVSX1Y1X1Y5MCAqLwogLyoqCiAgICogQH0KICAgKi8KIAorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKiogQGRlZmdyb3VwIEFEQ19IQUxfRUNfREFUQV9BTElHTiBBREMgY29udmVyc2lvbiBkYXRhIGFsaWdubWVudAorICAqIEB7CisgICovCisjZGVmaW5lIEFEQzNfREFUQUFMSUdOX1JJR0hUICAgICAgICAgICAgICAgIChMTF9BRENfREFUQV9BTElHTl9SSUdIVCkgICAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYWxpZ25tZW50OiByaWdodCBhbGlnbmVkIChhbGlnbm1lbnQgb24gZGF0YSByZWdpc3RlciBMU0IgYml0IDApKi8KKyNkZWZpbmUgQURDM19EQVRBQUxJR05fTEVGVCAgICAgICAgICAgICAgICAgKExMX0FEQ19EQVRBX0FMSUdOX0xFRlQpICAgICAgIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhbGlnbm1lbnQ6IGxlZnQgYWxpZ25lZCAoYWxpZ21lbnQgb24gZGF0YSByZWdpc3RlciBNU0IgYml0IDE1KSovCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmCisKIC8qKiBAZGVmZ3JvdXAgQURDX1NjYW5fbW9kZSBBREMgc2VxdWVuY2VyIHNjYW4gbW9kZQogICAqIEB7CiAgICovCkBAIC01MDgsNiArNTc0LDEyIEBACiAjZGVmaW5lIEFEQ19FWFRFUk5BTFRSSUdfTFBUSU0xX09VVCAgIChMTF9BRENfUkVHX1RSSUdfRVhUX0xQVElNMV9PVVQpICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IExQVElNMSBPVVQgZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCiAjZGVmaW5lIEFEQ19FWFRFUk5BTFRSSUdfTFBUSU0yX09VVCAgIChMTF9BRENfUkVHX1RSSUdfRVhUX0xQVElNMl9PVVQpICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IExQVElNMiBPVVQgZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCiAjZGVmaW5lIEFEQ19FWFRFUk5BTFRSSUdfTFBUSU0zX09VVCAgIChMTF9BRENfUkVHX1RSSUdfRVhUX0xQVElNM19PVVQpICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IExQVElNMyBldmVudCBPVVQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCisjaWYgZGVmaW5lZChUSU0yMykKKyNkZWZpbmUgQURDX0VYVEVSTkFMVFJJR19UMjNfVFJHTyAgICAgKExMX0FEQ19SRUdfVFJJR19FWFRfVElNMjNfVFJHTykgICAgICAgICAgIC8qITwgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgcGVyaXBoZXJhbDogVElNMjMgVFJHTyBldmVudC4gVHJpZ2dlciBlZGdlIHNldCB0byByaXNpbmcgZWRnZSAoZGVmYXVsdCBzZXR0aW5nKS4gKi8KKyNlbmRpZiAvKlRJTTIzKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBBRENfRVhURVJOQUxUUklHX1QyNF9UUkdPICAgICAoTExfQURDX1JFR19UUklHX0VYVF9USU0yNF9UUkdPKSAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU0yNCBUUkdPIGV2ZW50LiBUcmlnZ2VyIGVkZ2Ugc2V0IHRvIHJpc2luZyBlZGdlIChkZWZhdWx0IHNldHRpbmcpLiAqLworI2VuZGlmIC8qVElNMjQqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTUyMiw2ICs1OTQsMjMgQEAKIC8qKgogICAqIEB9CiAgICovCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKy8qKiBAZGVmZ3JvdXAgQURDX3JlZ3VsYXJfc2FtcGxpbmdfbW9kZSBBREMgZ3JvdXAgcmVndWxhciBzYW1wbGluZyBtb2RlCisgICogQHsKKyAgKi8KKyNkZWZpbmUgQURDX1NBTVBMSU5HX01PREVfTk9STUFMICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVUwpICAgICAgLyohPCBBREMgY29udmVyc2lvbnMgc2FtcGxpbmcgcGhhc2UgZHVyYXRpb24gaXMgZGVmaW5lZCB1c2luZyAgQHJlZiBBRENfSEFMX0VDX0NIQU5ORUxfU0FNUExJTkdUSU1FICovCisjZGVmaW5lIEFEQ19TQU1QTElOR19NT0RFX0JVTEIgICAgICAgICAgICAgICAgICAoQURDM19DRkdSMl9CVUxCKSAgICAvKiE8IEFEQyBjb252ZXJzaW9ucyBzYW1wbGluZyBwaGFzZSBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIgZW5kIG9mIGNvbnZlcnNpb24sIGFuZCBzdG9wcyB1cG9uIHRyaWdnZXIgZXZlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGVzOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBGaXJzdCBjb252ZXJzaW9uIGlzIHVzaW5nIG1pbmltYWwgc2FtcGxpbmcgdGltZSAoc2VlIEByZWYgQURDX0hBTF9FQ19DSEFOTkVMX1NBTVBMSU5HVElNRSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQXBwbGljYWJsZSBmb3IgQURDMyBvbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggICovCisjZGVmaW5lIEFEQ19TQU1QTElOR19NT0RFX1RSSUdHRVJfQ09OVFJPTEVEICAgICAoQURDM19DRkdSMl9TTVBUUklHKSAvKiE8IEFEQyBjb252ZXJzaW9ucyBzYW1wbGluZyBwaGFzZSBpcyBjb250cm9sbGVkIGJ5IHRyaWdnZXIgZXZlbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJpZ2dlciByaXNpbmcgZWRnZSAgPSBzdGFydCBzYW1wbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJpZ2dlciBmYWxsaW5nIGVkZ2UgPSBzdG9wIHNhbXBsaW5nIGFuZCBzdGFydCBjb252ZXJzaW9uIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZTogQXBwbGljYWJsZSBmb3IgQURDMyBvbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggICovCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmCiAKIC8qKiBAZGVmZ3JvdXAgQURDX0VPQ1NlbGVjdGlvbiBBREMgc2VxdWVuY2VyIGVuZCBvZiB1bml0YXJ5IGNvbnZlcnNpb24gb3Igc2VxdWVuY2UgY29udmVyc2lvbnMKICAgKiBAewpAQCAtNTY3LDE3ICs2NTYsMzUgQEAKIC8qKiBAZGVmZ3JvdXAgQURDX0hBTF9FQ19DSEFOTkVMX1NBTVBMSU5HVElNRSAgQ2hhbm5lbCAtIFNhbXBsaW5nIHRpbWUKICAgKiBAewogICAqLwotI2RlZmluZSBBRENfU0FNUExFVElNRV8xQ1lDTEVfNSAgICAgICAgICAoTExfQURDX1NBTVBMSU5HVElNRV8xQ1lDTEVfNSkgICAgIC8qITwgU2FtcGxpbmcgdGltZSAxLjUgQURDIGNsb2NrIGN5Y2xlcyAqLwotI2RlZmluZSBBRENfU0FNUExFVElNRV8yQ1lDTEVTXzUgICAgICAgICAoTExfQURDX1NBTVBMSU5HVElNRV8yQ1lDTEVTXzUpICAgIC8qITwgU2FtcGxpbmcgdGltZSAyLjUgQURDIGNsb2NrIGN5Y2xlcyAqLwotI2RlZmluZSBBRENfU0FNUExFVElNRV84Q1lDTEVTXzUgICAgICAgICAoTExfQURDX1NBTVBMSU5HVElNRV84Q1lDTEVTXzUpICAgIC8qITwgU2FtcGxpbmcgdGltZSA4LjUgQURDIGNsb2NrIGN5Y2xlcyAqLwotI2RlZmluZSBBRENfU0FNUExFVElNRV8xNkNZQ0xFU181ICAgICAgICAoTExfQURDX1NBTVBMSU5HVElNRV8xNkNZQ0xFU181KSAgIC8qITwgU2FtcGxpbmcgdGltZSAxNi41IEFEQyBjbG9jayBjeWNsZXMgKi8KLSNkZWZpbmUgQURDX1NBTVBMRVRJTUVfMzJDWUNMRVNfNSAgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfMzJDWUNMRVNfNSkgICAvKiE8IFNhbXBsaW5nIHRpbWUgMzIuNSBBREMgY2xvY2sgY3ljbGVzICovCi0jZGVmaW5lIEFEQ19TQU1QTEVUSU1FXzY0Q1lDTEVTXzUgICAgICAgIChMTF9BRENfU0FNUExJTkdUSU1FXzY0Q1lDTEVTXzUpICAgLyohPCBTYW1wbGluZyB0aW1lIDY0LjUgQURDIGNsb2NrIGN5Y2xlcyAqLwotI2RlZmluZSBBRENfU0FNUExFVElNRV8zODdDWUNMRVNfNSAgICAgICAoTExfQURDX1NBTVBMSU5HVElNRV8zODdDWUNMRVNfNSkgIC8qITwgU2FtcGxpbmcgdGltZSAzODcuNSBBREMgY2xvY2sgY3ljbGVzICovCi0jZGVmaW5lIEFEQ19TQU1QTEVUSU1FXzgxMENZQ0xFU181ICAgICAgIChMTF9BRENfU0FNUExJTkdUSU1FXzgxMENZQ0xFU181KSAgLyohPCBTYW1wbGluZyB0aW1lIDgxMC41IEFEQyBjbG9jayBjeWNsZXMgKi8KKyNkZWZpbmUgQURDX1NBTVBMRVRJTUVfMUNZQ0xFXzUgICAgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfMUNZQ0xFXzUpICAgICAvKiE8IFNhbXBsaW5nIHRpbWUgMS41IEFEQyBjbG9jayBjeWNsZXMsIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMSwgQURDMiAqLworI2RlZmluZSBBRENfU0FNUExFVElNRV8yQ1lDTEVTXzUgICAgICAgICAoTExfQURDX1NBTVBMSU5HVElNRV8yQ1lDTEVTXzUpICAgIC8qITwgU2FtcGxpbmcgdGltZSAyLjUgQURDIGNsb2NrIGN5Y2xlcywgT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMxLCBBREMyICovCisjZGVmaW5lIEFEQ19TQU1QTEVUSU1FXzhDWUNMRVNfNSAgICAgICAgIChMTF9BRENfU0FNUExJTkdUSU1FXzhDWUNMRVNfNSkgICAgLyohPCBTYW1wbGluZyB0aW1lIDguNSBBREMgY2xvY2sgY3ljbGVzLCBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzEsIEFEQzIgKi8KKyNkZWZpbmUgQURDX1NBTVBMRVRJTUVfMTZDWUNMRVNfNSAgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfMTZDWUNMRVNfNSkgICAvKiE8IFNhbXBsaW5nIHRpbWUgMTYuNSBBREMgY2xvY2sgY3ljbGVzLCBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzEsIEFEQzIgKi8KKyNkZWZpbmUgQURDX1NBTVBMRVRJTUVfMzJDWUNMRVNfNSAgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfMzJDWUNMRVNfNSkgICAvKiE8IFNhbXBsaW5nIHRpbWUgMzIuNSBBREMgY2xvY2sgY3ljbGVzLCBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzEsIEFEQzIgKi8KKyNkZWZpbmUgQURDX1NBTVBMRVRJTUVfNjRDWUNMRVNfNSAgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfNjRDWUNMRVNfNSkgICAvKiE8IFNhbXBsaW5nIHRpbWUgNjQuNSBBREMgY2xvY2sgY3ljbGVzLCBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzEsIEFEQzIgKi8KKyNkZWZpbmUgQURDX1NBTVBMRVRJTUVfMzg3Q1lDTEVTXzUgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfMzg3Q1lDTEVTXzUpICAvKiE8IFNhbXBsaW5nIHRpbWUgMzg3LjUgQURDIGNsb2NrIGN5Y2xlcywgT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMxLCBBREMyICovCisjZGVmaW5lIEFEQ19TQU1QTEVUSU1FXzgxMENZQ0xFU181ICAgICAgIChMTF9BRENfU0FNUExJTkdUSU1FXzgxMENZQ0xFU181KSAgLyohPCBTYW1wbGluZyB0aW1lIDgxMC41IEFEQyBjbG9jayBjeWNsZXMsIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMSwgQURDMiAqLwogLyoqCiAgICogQH0KICAgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorLyoqIEBkZWZncm91cCBBRENfSEFMX0VDX0NIQU5ORUxfU0FNUExJTkdUSU1FICBDaGFubmVsIC0gU2FtcGxpbmcgdGltZQorICAqIEB7CisgICovCisjZGVmaW5lIEFEQzNfU0FNUExFVElNRV8yQ1lDTEVTXzUgICAgICAgICAoTExfQURDX1NBTVBMSU5HVElNRV9BREMzXzJDWUNMRVNfNSkgICAgLyohPCBTYW1wbGluZyB0aW1lIDIuNSBBREMgY2xvY2sgY3ljbGVzLCBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzMgKi8KKyNkZWZpbmUgQURDM19TQU1QTEVUSU1FXzZDWUNMRVNfNSAgICAgICAgIChMTF9BRENfU0FNUExJTkdUSU1FX0FEQzNfNkNZQ0xFU181KSAgICAvKiE8IFNhbXBsaW5nIHRpbWUgNi41IEFEQyBjbG9jayBjeWNsZXMsIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMyAqLworI2RlZmluZSBBREMzX1NBTVBMRVRJTUVfMTJDWUNMRVNfNSAgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfQURDM18xMkNZQ0xFU181KSAgIC8qITwgU2FtcGxpbmcgdGltZSAxMi41IEFEQyBjbG9jayBjeWNsZXMsIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMyAqLworI2RlZmluZSBBREMzX1NBTVBMRVRJTUVfMjRDWUNMRVNfNSAgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfQURDM18yNENZQ0xFU181KSAgIC8qITwgU2FtcGxpbmcgdGltZSAyNC41IEFEQyBjbG9jayBjeWNsZXMsIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMyAqLworI2RlZmluZSBBREMzX1NBTVBMRVRJTUVfNDdDWUNMRVNfNSAgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfQURDM180N0NZQ0xFU181KSAgIC8qITwgU2FtcGxpbmcgdGltZSA0Ny41IEFEQyBjbG9jayBjeWNsZXMsIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMyAqLworI2RlZmluZSBBREMzX1NBTVBMRVRJTUVfOTJDWUNMRVNfNSAgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfQURDM185MkNZQ0xFU181KSAgIC8qITwgU2FtcGxpbmcgdGltZSA5Mi41IEFEQyBjbG9jayBjeWNsZXMsIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMyAqLworI2RlZmluZSBBREMzX1NBTVBMRVRJTUVfMjQ3Q1lDTEVTXzUgICAgICAgKExMX0FEQ19TQU1QTElOR1RJTUVfQURDM18yNDdDWUNMRVNfNSkgIC8qITwgU2FtcGxpbmcgdGltZSAyNDcuNSBBREMgY2xvY2sgY3ljbGVzLCBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzMgKi8KKyNkZWZpbmUgQURDM19TQU1QTEVUSU1FXzY0MENZQ0xFU181ICAgICAgIChMTF9BRENfU0FNUExJTkdUSU1FX0FEQzNfNjQwQ1lDTEVTXzUpICAvKiE8IFNhbXBsaW5nIHRpbWUgNjQwLjUgQURDIGNsb2NrIGN5Y2xlcywgT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMzICovCisjZGVmaW5lIEFEQzNfU0FNUExFVElNRV8zQ1lDTEVTXzUgICAgICAgICAoQURDX1NNUFIxX1NNUFBMVVMgfCBMTF9BRENfU0FNUExJTkdUSU1FX0FEQzNfMkNZQ0xFU181KSAvKiE8IFNhbXBsaW5nIHRpbWUgMy41IEFEQyBjbG9jayBjeWNsZXMuIElmIHNlbGVjdGVkLCB0aGlzIHNhbXBsaW5nIHRpbWUgcmVwbGFjZXMgYWxsIHNhbXBsaW5nIHRpbWUgMi41IEFEQyBjbG9jayBjeWNsZXMuIFRoZXNlIDIgc2FtcGxpbmcgdGltZXMgY2Fubm90IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHkuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzMgKi8KKy8qKgorICAqIEB9CisgICovCisjZW5kaWYKIAogLyoqIEBkZWZncm91cCBBRENFeF9DYWxpYnJhdGlvbl9Nb2RlICAgQURDIEV4dGVuZGVkIENhbGlicmF0aW9uIG1vZGUgb2Zmc2V0IG1vZGUgb3IgbGluZWFyIG1vZGUKICAgKiBAewpAQCAtNjI4LDEwICs3MzUsMTAgQEAKIC8qKiBAZGVmZ3JvdXAgQURDX0NvbnZlcnNpb25EYXRhTWFuYWdlbWVudCBBREMgQ29udmVyc2lvbiBEYXRhIE1hbmFnZW1lbnQKICAgKiBAewogICAqLwotI2RlZmluZSBBRENfQ09OVkVSU0lPTkRBVEFfRFIgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBSZWd1bGFyIENvbnZlcnNpb24gZGF0YSBzdG9yZWQgaW4gRFIgcmVnaXN0ZXIgb25seSAgKi8KLSNkZWZpbmUgQURDX0NPTlZFUlNJT05EQVRBX0RGU0RNICAgICAgICAgICAgICAgKEFEQ19DRkdSX0RNTkdUXzEpICAgICAgICAgICAgICAgICAgICAgIC8qITwgREZTRE0gbW9kZSBzZWxlY3RlZCAqLwotI2RlZmluZSBBRENfQ09OVkVSU0lPTkRBVEFfRE1BX09ORVNIT1QgICAgICAgICAoQURDX0NGR1JfRE1OR1RfMCkgICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgb25lIHNob3QgbW9kZSBzZWxlY3RlZCAqLwotI2RlZmluZSBBRENfQ09OVkVSU0lPTkRBVEFfRE1BX0NJUkNVTEFSICAgICAgICAoQURDX0NGR1JfRE1OR1RfMCB8IEFEQ19DRkdSX0RNTkdUXzEpICAgLyohPCBETUEgY2lyY3VsYXIgbW9kZSBzZWxlY3RlZCAqLworI2RlZmluZSBBRENfQ09OVkVSU0lPTkRBVEFfRFIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUmVndWxhciBDb252ZXJzaW9uIGRhdGEgc3RvcmVkIGluIERSIHJlZ2lzdGVyIG9ubHkgICovCisjZGVmaW5lIEFEQ19DT05WRVJTSU9OREFUQV9ERlNETSAgICAgICAgICAgICAgICgodWludDMyX3QpQURDX0NGR1JfRE1OR1RfMSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBERlNETSBtb2RlIHNlbGVjdGVkICovCisjZGVmaW5lIEFEQ19DT05WRVJTSU9OREFUQV9ETUFfT05FU0hPVCAgICAgICAgICgodWludDMyX3QpQURDX0NGR1JfRE1OR1RfMCkgICAgICAgICAgICAgICAgICAgICAgLyohPCBETUEgb25lIHNob3QgbW9kZSBzZWxlY3RlZCAqLworI2RlZmluZSBBRENfQ09OVkVSU0lPTkRBVEFfRE1BX0NJUkNVTEFSICAgICAgICAoKHVpbnQzMl90KShBRENfQ0ZHUl9ETU5HVF8wIHwgQURDX0NGR1JfRE1OR1RfMSkpIC8qITwgRE1BIGNpcmN1bGFyIG1vZGUgc2VsZWN0ZWQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC02NDUsNiArNzUyLDIzIEBACiAgICogQH0KICAgKi8KIAorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKiogQGRlZmdyb3VwIEFEQ19hbmFsb2dfd2F0Y2hkb2dfZmlsdGVyaW5nX2NvbmZpZyBBREMgQW5hbG9nIFdhdGNoZG9nIGZpbHRlcmluZyBjb25maWd1cmF0aW9uCisgICogQHsKKyAgKi8KKyNkZWZpbmUgQURDM19BV0RfRklMVEVSSU5HX05PTkUgICAgICAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBhbmFsb2cgd2F0aGRvZyBubyBmaWx0ZXJpbmcsIG9uZSBvdXQtb2Ytd2luZG93IHNhbXBsZSBpcyBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfQVdEX0ZJTFRFUklOR18yU0FNUExFUyAgICAgICgoQURDM19UUjFfQVdERklMVF8wKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgMiBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfQVdEX0ZJTFRFUklOR18zU0FNUExFUyAgICAgICgoQURDM19UUjFfQVdERklMVF8xKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgMyBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfQVdEX0ZJTFRFUklOR180U0FNUExFUyAgICAgICgoQURDM19UUjFfQVdERklMVF8xIHwgQURDM19UUjFfQVdERklMVF8wKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgNCBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfQVdEX0ZJTFRFUklOR181U0FNUExFUyAgICAgICgoQURDM19UUjFfQVdERklMVF8yKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgNSBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfQVdEX0ZJTFRFUklOR182U0FNUExFUyAgICAgICgoQURDM19UUjFfQVdERklMVF8yIHwgQURDM19UUjFfQVdERklMVF8wKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgNiBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfQVdEX0ZJTFRFUklOR183U0FNUExFUyAgICAgICgoQURDM19UUjFfQVdERklMVF8yIHwgQURDM19UUjFfQVdERklMVF8xKSkgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgNyBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfQVdEX0ZJTFRFUklOR184U0FNUExFUyAgICAgICgoQURDM19UUjFfQVdERklMVF8yIHwgQURDM19UUjFfQVdERklMVF8xIHwgQURDM19UUjFfQVdERklMVF8wKSkgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgOCBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmCisKIC8qKiBAZGVmZ3JvdXAgQURDX2FuYWxvZ193YXRjaGRvZ19tb2RlIEFEQyBBbmFsb2cgV2F0Y2hkb2cgTW9kZQogICAqIEB7CiAgICovCkBAIC02NTgsNiArNzgyLDI0IEBACiAvKioKICAgKiBAfQogICAqLworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKiogQGRlZmdyb3VwIEFEQ19IQUxfRUNfT1ZTX1JBVElPICBPdmVyc2FtcGxpbmcgLSBSYXRpbworICAqIEB7CisgICovCisjZGVmaW5lIEFEQzNfT1ZFUlNBTVBMSU5HX1JBVElPXzIgICAgICAgICAgIChMTF9BRENfT1ZTX1JBVElPXzIpICAgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAyICgyIEFEQyBjb252ZXJzaW9ucyBhcmUgcGVyZm9ybWVkLCBzdW0gb2YgdGhlc2UgY29udmVyc2lvbnMgZGF0YSBpcyBjb21wdXRlZCB0byByZXN1bHQgYXMgdGhlIEFEQyBvdmVyc2FtcGxpbmcgY29udmVyc2lvbiBkYXRhIChiZWZvcmUgcG90ZW50aWFsIHNoaWZ0KS4gQXBwbGljYWJsZSBmb3IgQURDMyBvbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNkZWZpbmUgQURDM19PVkVSU0FNUExJTkdfUkFUSU9fNCAgICAgICAgICAgKExMX0FEQ19PVlNfUkFUSU9fNCkgICAgLyohPCBBREMgb3ZlcnNhbXBsaW5nIHJhdGlvIG9mIDQgKDQgQURDIGNvbnZlcnNpb25zIGFyZSBwZXJmb3JtZWQsIHN1bSBvZiB0aGVzZSBjb252ZXJzaW9ucyBkYXRhIGlzIGNvbXB1dGVkIHRvIHJlc3VsdCBhcyB0aGUgQURDIG92ZXJzYW1wbGluZyBjb252ZXJzaW9uIGRhdGEgKGJlZm9yZSBwb3RlbnRpYWwgc2hpZnQpLiBBcHBsaWNhYmxlIGZvciBBREMzIG9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCAqLworI2RlZmluZSBBREMzX09WRVJTQU1QTElOR19SQVRJT184ICAgICAgICAgICAoTExfQURDX09WU19SQVRJT184KSAgICAvKiE8IEFEQyBvdmVyc2FtcGxpbmcgcmF0aW8gb2YgOCAoOCBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCwgc3VtIG9mIHRoZXNlIGNvbnZlcnNpb25zIGRhdGEgaXMgY29tcHV0ZWQgdG8gcmVzdWx0IGFzIHRoZSBBREMgb3ZlcnNhbXBsaW5nIGNvbnZlcnNpb24gZGF0YSAoYmVmb3JlIHBvdGVudGlhbCBzaGlmdCkuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfT1ZFUlNBTVBMSU5HX1JBVElPXzE2ICAgICAgICAgIChMTF9BRENfT1ZTX1JBVElPXzE2KSAgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAxNiAoMTYgQURDIGNvbnZlcnNpb25zIGFyZSBwZXJmb3JtZWQsIHN1bSBvZiB0aGVzZSBjb252ZXJzaW9ucyBkYXRhIGlzIGNvbXB1dGVkIHRvIHJlc3VsdCBhcyB0aGUgQURDIG92ZXJzYW1wbGluZyBjb252ZXJzaW9uIGRhdGEgKGJlZm9yZSBwb3RlbnRpYWwgc2hpZnQpLiBBcHBsaWNhYmxlIGZvciBBREMzIG9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCAqLworI2RlZmluZSBBREMzX09WRVJTQU1QTElOR19SQVRJT18zMiAgICAgICAgICAoTExfQURDX09WU19SQVRJT18zMikgICAvKiE8IEFEQyBvdmVyc2FtcGxpbmcgcmF0aW8gb2YgMzIgKDMyIEFEQyBjb252ZXJzaW9ucyBhcmUgcGVyZm9ybWVkLCBzdW0gb2YgdGhlc2UgY29udmVyc2lvbnMgZGF0YSBpcyBjb21wdXRlZCB0byByZXN1bHQgYXMgdGhlIEFEQyBvdmVyc2FtcGxpbmcgY29udmVyc2lvbiBkYXRhIChiZWZvcmUgcG90ZW50aWFsIHNoaWZ0KS4gQXBwbGljYWJsZSBmb3IgQURDMyBvbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNkZWZpbmUgQURDM19PVkVSU0FNUExJTkdfUkFUSU9fNjQgICAgICAgICAgKExMX0FEQ19PVlNfUkFUSU9fNjQpICAgLyohPCBBREMgb3ZlcnNhbXBsaW5nIHJhdGlvIG9mIDY0ICg2NCBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCwgc3VtIG9mIHRoZXNlIGNvbnZlcnNpb25zIGRhdGEgaXMgY29tcHV0ZWQgdG8gcmVzdWx0IGFzIHRoZSBBREMgb3ZlcnNhbXBsaW5nIGNvbnZlcnNpb24gZGF0YSAoYmVmb3JlIHBvdGVudGlhbCBzaGlmdCkuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfT1ZFUlNBTVBMSU5HX1JBVElPXzEyOCAgICAgICAgIChMTF9BRENfT1ZTX1JBVElPXzEyOCkgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAxMjggKDEyOCBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCwgc3VtIG9mIHRoZXNlIGNvbnZlcnNpb25zIGRhdGEgaXMgY29tcHV0ZWQgdG8gcmVzdWx0IGFzIHRoZSBBREMgb3ZlcnNhbXBsaW5nIGNvbnZlcnNpb24gZGF0YSAoYmVmb3JlIHBvdGVudGlhbCBzaGlmdCkuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfT1ZFUlNBTVBMSU5HX1JBVElPXzI1NiAgICAgICAgIChMTF9BRENfT1ZTX1JBVElPXzI1NikgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAyNTYgKDI1NiBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCwgc3VtIG9mIHRoZXNlIGNvbnZlcnNpb25zIGRhdGEgaXMgY29tcHV0ZWQgdG8gcmVzdWx0IGFzIHRoZSBBREMgb3ZlcnNhbXBsaW5nIGNvbnZlcnNpb24gZGF0YSAoYmVmb3JlIHBvdGVudGlhbCBzaGlmdCkuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfT1ZFUlNBTVBMSU5HX1JBVElPXzUxMiAgICAgICAgIChMTF9BRENfT1ZTX1JBVElPXzUxMikgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAyNTYgKDI1NiBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCwgc3VtIG9mIHRoZXNlIGNvbnZlcnNpb25zIGRhdGEgaXMgY29tcHV0ZWQgdG8gcmVzdWx0IGFzIHRoZSBBREMgb3ZlcnNhbXBsaW5nIGNvbnZlcnNpb24gZGF0YSAoYmVmb3JlIHBvdGVudGlhbCBzaGlmdCkuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIEFEQzNfT1ZFUlNBTVBMSU5HX1JBVElPXzEwMjQgICAgICAgIChMTF9BRENfT1ZTX1JBVElPXzEwMjQpIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAyNTYgKDI1NiBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCwgc3VtIG9mIHRoZXNlIGNvbnZlcnNpb25zIGRhdGEgaXMgY29tcHV0ZWQgdG8gcmVzdWx0IGFzIHRoZSBBREMgb3ZlcnNhbXBsaW5nIGNvbnZlcnNpb24gZGF0YSAoYmVmb3JlIHBvdGVudGlhbCBzaGlmdCkuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmCiAKIC8qKiBAZGVmZ3JvdXAgQURDX0hBTF9FQ19PVlNfU0hJRlQgIE92ZXJzYW1wbGluZyAtIERhdGEgc2hpZnQKICAgKiBAewpAQCAtODYzLDYgKzEwMDUsMTYgQEAKICNkZWZpbmUgSVNfQURDX1JBTkdFKF9fUkVTT0xVVElPTl9fLCBfX0FEQ19WQUxVRV9fKSBcCiAgICgoX19BRENfVkFMVUVfXykgPD0gX19MTF9BRENfRElHSVRBTF9TQ0FMRShfX1JFU09MVVRJT05fXykpCiAKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorLyoqCisgICogQGJyaWVmIFZlcmlmeSB0aGF0IGEgZ2l2ZW4gdmFsdWUgaXMgYWxpZ25lZCB3aXRoIHRoZSBBREMgcmVzb2x1dGlvbiByYW5nZS4gQXBwbGljYWJsZSBmb3IgQURDMyBvbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHguCisgICogQHBhcmFtIF9fUkVTT0xVVElPTl9fIEFEQyByZXNvbHV0aW9uICgxMiwgMTAsIDggb3IgNiBiaXRzKS4KKyAgKiBAcGFyYW0gX19BRENfVkFMVUVfXyB2YWx1ZSBjaGVja2VkIGFnYWluc3QgdGhlIHJlc29sdXRpb24uCisgICogQHJldHZhbCBTRVQgKF9fQURDX1ZBTFVFX18gaW4gbGluZSB3aXRoIF9fUkVTT0xVVElPTl9fKSBvciBSRVNFVCAoX19BRENfVkFMVUVfXyBub3QgaW4gbGluZSB3aXRoIF9fUkVTT0xVVElPTl9fKQorICAqLworI2RlZmluZSBJU19BREMzX1JBTkdFKF9fUkVTT0xVVElPTl9fLCBfX0FEQ19WQUxVRV9fKSBcCisgICgoX19BRENfVkFMVUVfXykgPD0gX19MTF9BREMzX0RJR0lUQUxfU0NBTEUoX19SRVNPTFVUSU9OX18pKQorI2VuZGlmCiAvKioKICAgKiBAYnJpZWYgVmVyaWZ5IHRoZSBsZW5ndGggb2YgdGhlIHNjaGVkdWxlZCByZWd1bGFyIGNvbnZlcnNpb25zIGdyb3VwLgogICAqIEBwYXJhbSBfX0xFTkdUSF9fIG51bWJlciBvZiBwcm9ncmFtbWVkIGNvbnZlcnNpb25zLgpAQCAtOTA1LDExICsxMDU3LDI5IEBACiAgICogQHBhcmFtIF9fUkVTT0xVVElPTl9fIHByb2dyYW1tZWQgQURDIHJlc29sdXRpb24uCiAgICogQHJldHZhbCBTRVQgKF9fUkVTT0xVVElPTl9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX1JFU09MVVRJT05fXyBpcyBpbnZhbGlkKQogICAqLworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisjZGVmaW5lIElTX0FEQ19SRVNPTFVUSU9OKF9fUkVTT0xVVElPTl9fKSAoKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTZCKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTRCKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTJCKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTBCKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fOEIpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fNkIpICAgICkKKyNlbGlmIGRlZmluZWQgKEFEQ19WRVJfVjVfWCkKKyNkZWZpbmUgSVNfQURDX1JFU09MVVRJT04oX19SRVNPTFVUSU9OX18pICgoKF9fUkVTT0xVVElPTl9fKSA9PSBBRENfUkVTT0xVVElPTl8xNkIpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTRCKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRVNPTFVUSU9OX18pID09IEFEQ19SRVNPTFVUSU9OXzE0Ql9PUFQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVTT0xVVElPTl9fKSA9PSBBRENfUkVTT0xVVElPTl8xMkIpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTJCX09QVCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRVNPTFVUSU9OX18pID09IEFEQ19SRVNPTFVUSU9OXzEwQikgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVTT0xVVElPTl9fKSA9PSBBRENfUkVTT0xVVElPTl84QikgICAgKQorI2Vsc2UgLyogQURDX1ZFUl9WNV8zICovCiAjZGVmaW5lIElTX0FEQ19SRVNPTFVUSU9OKF9fUkVTT0xVVElPTl9fKSAoKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTZCKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTRCKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTJCKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fMTBCKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fOEIpICAgICkKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCovCisKIC8qKgogICAqIEBicmllZiBWZXJpZnkgdGhlIEFEQyByZXNvbHV0aW9uIHNldHRpbmcgd2hlbiBsaW1pdGVkIHRvIDggYml0cy4KICAgKiBAcGFyYW0gX19SRVNPTFVUSU9OX18gcHJvZ3JhbW1lZCBBREMgcmVzb2x1dGlvbiB3aGVuIGxpbWl0ZWQgdG8gOCBiaXRzLgpAQCAtOTE3LDYgKzEwODcsMjYgQEAKICAgKi8KICNkZWZpbmUgSVNfQURDX1JFU09MVVRJT05fOF9CSVRTKF9fUkVTT0xVVElPTl9fKSAoKChfX1JFU09MVVRJT05fXykgPT0gQURDX1JFU09MVVRJT05fOEIpKQogCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKy8qKgorICAqIEBicmllZiBWZXJpZnkgdGhlIEFEQyBjb252ZXJ0ZWQgZGF0YSBhbGlnbm1lbnQuIEFwcGxpY2FibGUgZm9yIEFEQzMgb24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4LiAKKyAgKiBAcGFyYW0gX19BTElHTl9fIHByb2dyYW1tZWQgQURDIGNvbnZlcnRlZCBkYXRhIGFsaWdubWVudC4KKyAgKiBAcmV0dmFsIFNFVCAoX19BTElHTl9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX0FMSUdOX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfQURDM19EQVRBX0FMSUdOKF9fQUxJR05fXykgKCgoX19BTElHTl9fKSA9PSBBREMzX0RBVEFBTElHTl9SSUdIVCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0FMSUdOX18pID09IEFEQzNfREFUQUFMSUdOX0xFRlQpICAgICkKKworLyoqCisgICogQGJyaWVmIFZlcmlmeSB0aGUgQURDIHJlZ3VsYXIgY29udmVyc2lvbnMgZXh0ZXJuYWwgdHJpZ2dlci4KKyAgKiBAcGFyYW0gX19TQU1QTElOR01PREVfXyBwcm9ncmFtbWVkIEFEQyByZWd1bGFyIGNvbnZlcnNpb25zIGV4dGVybmFsIHRyaWdnZXIuCisgICogQHJldHZhbCBTRVQgKF9fU0FNUExJTkdNT0RFX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fU0FNUExJTkdNT0RFX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfQURDM19TQU1QTElOR01PREUoX19TQU1QTElOR01PREVfXykgKCgoX19TQU1QTElOR01PREVfXykgPT0gQURDX1NBTVBMSU5HX01PREVfTk9STUFMKSAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fU0FNUExJTkdNT0RFX18pID09IEFEQ19TQU1QTElOR19NT0RFX0JVTEIpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1NBTVBMSU5HTU9ERV9fKSA9PSBBRENfU0FNUExJTkdfTU9ERV9UUklHR0VSX0NPTlRST0xFRCkgICkKKworI2VuZGlmCisKIC8qKgogICAqIEBicmllZiBWZXJpZnkgdGhlIEFEQyBzY2FuIG1vZGUuCiAgICogQHBhcmFtIF9fU0NBTl9NT0RFX18gcHJvZ3JhbW1lZCBBREMgc2NhbiBtb2RlLgpAQCAtOTQwLDYgKzExMzAsNyBAQAogICAqIEBwYXJhbSBfX1JFR1RSSUdfXyBwcm9ncmFtbWVkIEFEQyByZWd1bGFyIGNvbnZlcnNpb25zIGV4dGVybmFsIHRyaWdnZXIuCiAgICogQHJldHZhbCBTRVQgKF9fUkVHVFJJR19fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX1JFR1RSSUdfXyBpcyBpbnZhbGlkKQogICAqLworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCiAjZGVmaW5lIElTX0FEQ19FWFRUUklHKF9fUkVHVFJJR19fKSAoKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UMV9DQzEpICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UMV9DQzIpICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX0VYVEVSTkFMVFJJR19UMV9DQzMpICAgICAgICB8fCBcCkBAIC05NjEsNyArMTE1MiwzNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfTFBUSU0xX09VVCkgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfTFBUSU0yX09VVCkgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfTFBUSU0zX09VVCkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDIzX1RSR08pICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QyNF9UUkdPKSAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JFR1RSSUdfXykgPT0gQURDX1NPRlRXQVJFX1NUQVJUKSAgICAgICAgICAgKQorI2Vsc2UKKyNkZWZpbmUgSVNfQURDX0VYVFRSSUcoX19SRUdUUklHX18pICgoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QxX0NDMSkgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkVHVFJJR19fKSA9PSBBRENfRVhURVJOQUxUUklHX1QxX0NDMikgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDFfQ0MzKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDJfQ0MyKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDNfVFJHTykgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDRfQ0M0KSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfRVhUX0lUMTEpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDhfVFJHTykgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDhfVFJHTzIpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDFfVFJHTykgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDFfVFJHTzIpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDJfVFJHTykgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDRfVFJHTykgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDZfVFJHTykgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDE1X1RSR08pICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfVDNfQ0M0KSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfSFIxX0FEQ1RSRzEpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfSFIxX0FEQ1RSRzMpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfTFBUSU0xX09VVCkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfTFBUSU0yX09VVCkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19FWFRFUk5BTFRSSUdfTFBUSU0zX09VVCkgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SRUdUUklHX18pID09IEFEQ19TT0ZUV0FSRV9TVEFSVCkgICAgICAgICAgICkKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCovCisKIAogLyoqCiAgICogQGJyaWVmIFZlcmlmeSB0aGUgQURDIHJlZ3VsYXIgY29udmVyc2lvbnMgY2hlY2sgZm9yIGNvbnZlcnRlZCBkYXRhIGF2YWlsYWJpbGl0eS4KQEAgLTEwNDQsNyArMTI2Miw3IEBACiAvKiBEZWxheSBmb3IgQURDIHZvbHRhZ2UgcmVndWxhdG9yIHN0YXJ0dXAgdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1heGltdW0gZGVsYXkgaXMgMTAgbWljcm9zZWNvbmRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIChyZWZlciBkZXZpY2UgUk0sIHBhcmFtZXRlciBUYWRjdnJlZ19zdHVwKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEFEQ19TVEFCX0RFTEFZX1VTICAgICAgICAgICAgICAgKCh1aW50MzJfdCkgMTApICAgICAvKiE8IEFEQyB2b2x0YWdlIHJlZ3VsYXRvciBzdGFydHVwIHRpbWUgKi8KKyNkZWZpbmUgQURDX1NUQUJfREVMQVlfVVMgICAgICAgICAgICAgICAoMTBVTCkgICAgIC8qITwgQURDIHZvbHRhZ2UgcmVndWxhdG9yIHN0YXJ0dXAgdGltZSAqLwogCiAvKioKICAgKiBAfQpAQCAtMTA2OSwxMCArMTI4NywxMCBAQAogI2lmIChVU0VfSEFMX0FEQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICNkZWZpbmUgX19IQUxfQURDX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfQURDX1NUQVRFX1JFU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9IHdoaWxlKDApCisgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfQURDX1NUQVRFX1JFU0VUOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChfX0hBTkRMRV9fKS0+TXNwSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoX19IQU5ETEVfXyktPk1zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCiAjZWxzZQogI2RlZmluZSBfX0hBTF9BRENfUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfQURDX1NUQVRFX1JFU0VUKQpAQCAtMTIyNSw3ICsxNDQzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9WQkFUICAgICAgICAgKDEpCiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfREFDMUNIMV9BREMyICgyKQogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMiAoMikKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gU1RNMzJINywgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMy5cbgogICAqICAgICAgICAgKDIpIE9uIFNUTTMySDcsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzIuXG4KICAgKiAgICAgICAgICgzKSBPbiBTVE0zMkg3LCBmYXN0IGNoYW5uZWwgKDAuMTI1IHVzIGZvciAxNC1iaXQgcmVzb2x1dGlvbiAoQURDIGNvbnZlcnNpb24gcmF0ZSB1cCB0byA4IE1zL3MpKS4KQEAgLTEyMzMsNyArMTQ1MSw3IEBACiAgICogQHJldHZhbCBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTAgYW5kIE1heF9EYXRhPTE4CiAgICovCiAjZGVmaW5lIF9fSEFMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoX19DSEFOTkVMX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoKF9fQ0hBTk5FTF9fKSkKKyAgICAgICAgIF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQigoX19DSEFOTkVMX18pKQogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBnZXQgQURDIGNoYW5uZWwgaW4gbGl0ZXJhbCBmb3JtYXQgQURDX0NIQU5ORUxfeApAQCAtMTI2Nyw3ICsxNDg1LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9WQkFUICAgICAgICAgKDEpCiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfREFDMUNIMV9BREMyICgyKQogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMiAoMikKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gU1RNMzJINywgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMy5cbgogICAqICAgICAgICAgKDIpIE9uIFNUTTMySDcsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzIuXG4KICAgKiAgICAgICAgICgzKSBPbiBTVE0zMkg3LCBmYXN0IGNoYW5uZWwgKDAuMTI1IHVzIGZvciAxNC1iaXQgcmVzb2x1dGlvbiAoQURDIGNvbnZlcnNpb24gcmF0ZSB1cCB0byA4IE1zL3MpKS4KQEAgLTEyNzcsNyArMTQ5NSw3IEBACiAgICogICAgICAgICAgICAgICAgdXNpbmcgaGVscGVyIG1hY3JvIEByZWYgX19MTF9BRENfQ0hBTk5FTF9JTlRFUk5BTF9UT19FWFRFUk5BTCgpLgogICAqLwogI2RlZmluZSBfX0hBTF9BRENfREVDSU1BTF9OQl9UT19DSEFOTkVMKF9fREVDSU1BTF9OQl9fKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19MTF9BRENfREVDSU1BTF9OQl9UT19DSEFOTkVMKChfX0RFQ0lNQUxfTkJfXykpCisgICAgICAgICBfX0xMX0FEQ19ERUNJTUFMX05CX1RPX0NIQU5ORUwoKF9fREVDSU1BTF9OQl9fKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNlbGVjdGVkIGNoYW5uZWwKQEAgLTEzMjEsNyArMTUzOSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfVkJBVCAgICAgICAgICgxKQogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDFfQURDMiAoMikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9EQUMxQ0gyX0FEQzIgKDIpCi0gICogICAgICAgICAKKyAgKgogICAqICAgICAgICAgKDEpIE9uIFNUTTMySDcsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzMuXG4KICAgKiAgICAgICAgICgyKSBPbiBTVE0zMkg3LCBwYXJhbWV0ZXIgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMyLlxuCiAgICogICAgICAgICAoMykgT24gU1RNMzJINywgZmFzdCBjaGFubmVsICgwLjEyNSB1cyBmb3IgMTQtYml0IHJlc29sdXRpb24gKEFEQyBjb252ZXJzaW9uIHJhdGUgdXAgdG8gOCBNcy9zKSkuCkBAIC0xMzMwLDcgKzE1NDgsNyBAQAogICAqICAgICAgICAgVmFsdWUgIjEiIGlmIHRoZSBjaGFubmVsIGNvcnJlc3BvbmRzIHRvIGEgcGFyYW1ldGVyIGRlZmluaXRpb24gb2YgYSBBREMgaW50ZXJuYWwgY2hhbm5lbC4KICAgKi8KICNkZWZpbmUgX19IQUxfQURDX0lTX0NIQU5ORUxfSU5URVJOQUwoX19DSEFOTkVMX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fTExfQURDX0lTX0NIQU5ORUxfSU5URVJOQUwoKF9fQ0hBTk5FTF9fKSkKKyAgICAgICAgIF9fTExfQURDX0lTX0NIQU5ORUxfSU5URVJOQUwoKF9fQ0hBTk5FTF9fKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY29udmVydCBhIGNoYW5uZWwgZGVmaW5lZCBmcm9tIHBhcmFtZXRlcgpAQCAtMTM3MCw3ICsxNTg4LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9WQkFUICAgICAgICAgKDEpCiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfREFDMUNIMV9BREMyICgyKQogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMiAoMikKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gU1RNMzJINywgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMy5cbgogICAqICAgICAgICAgKDIpIE9uIFNUTTMySDcsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzIuXG4KICAgKiAgICAgICAgICgzKSBPbiBTVE0zMkg3LCBmYXN0IGNoYW5uZWwgKDAuMTI1IHVzIGZvciAxNC1iaXQgcmVzb2x1dGlvbiAoQURDIGNvbnZlcnNpb24gcmF0ZSB1cCB0byA4IE1zL3MpKS4KQEAgLTEzOTcsNyArMTYxNSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfMTgKICAgKi8KICNkZWZpbmUgX19IQUxfQURDX0NIQU5ORUxfSU5URVJOQUxfVE9fRVhURVJOQUwoX19DSEFOTkVMX18pICAgICAgICAgICAgICAgICAgICBcCi0gIF9fTExfQURDX0NIQU5ORUxfSU5URVJOQUxfVE9fRVhURVJOQUwoKF9fQ0hBTk5FTF9fKSkKKyAgICAgICAgIF9fTExfQURDX0NIQU5ORUxfSU5URVJOQUxfVE9fRVhURVJOQUwoKF9fQ0hBTk5FTF9fKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGludGVybmFsIGNoYW5uZWwKQEAgLTE0MTksMTQgKzE2MzcsMTQgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBBRENfQ0hBTk5FTF9WQkFUICAgICAgICAgKDEpCiAgICogICAgICAgICBAYXJnIEByZWYgQURDX0NIQU5ORUxfREFDMUNIMV9BREMyICgyKQogICAqICAgICAgICAgQGFyZyBAcmVmIEFEQ19DSEFOTkVMX0RBQzFDSDJfQURDMiAoMikKLSAgKiAgICAgICAgIAorICAqCiAgICogICAgICAgICAoMSkgT24gU1RNMzJINywgcGFyYW1ldGVyIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMy5cbgogICAqICAgICAgICAgKDIpIE9uIFNUTTMySDcsIHBhcmFtZXRlciBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzIuCiAgICogQHJldHZhbCBWYWx1ZSAiMCIgaWYgdGhlIGludGVybmFsIGNoYW5uZWwgc2VsZWN0ZWQgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgQURDIGluc3RhbmNlIHNlbGVjdGVkLgogICAqICAgICAgICAgVmFsdWUgIjEiIGlmIHRoZSBpbnRlcm5hbCBjaGFubmVsIHNlbGVjdGVkIGlzIGF2YWlsYWJsZSBvbiB0aGUgQURDIGluc3RhbmNlIHNlbGVjdGVkLgogICAqLwogI2RlZmluZSBfX0hBTF9BRENfSVNfQ0hBTk5FTF9JTlRFUk5BTF9BVkFJTEFCTEUoX19BRENfSU5TVEFOQ0VfXywgX19DSEFOTkVMX18pICBcCi0gIF9fTExfQURDX0lTX0NIQU5ORUxfSU5URVJOQUxfQVZBSUxBQkxFKChfX0FEQ19JTlNUQU5DRV9fKSwgKF9fQ0hBTk5FTF9fKSkKKyAgICAgICAgIF9fTExfQURDX0lTX0NIQU5ORUxfSU5URVJOQUxfQVZBSUxBQkxFKChfX0FEQ19JTlNUQU5DRV9fKSwgKF9fQ0hBTk5FTF9fKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gZ2V0IHRoZSBBREMgbXVsdGltb2RlIGNvbnZlcnNpb24gZGF0YSBvZiBBREMgbWFzdGVyCkBAIC0xNDQyLDcgKzE2NjAsNyBAQAogICAqIEByZXR2YWwgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKICAgKi8KICNkZWZpbmUgX19IQUxfQURDX01VTFRJX0NPTlZfREFUQV9NQVNURVJfU0xBVkUoX19BRENfTVVMVElfTUFTVEVSX1NMQVZFX18sIF9fQURDX01VTFRJX0NPTlZfREFUQV9fKSAgXAotICBfX0xMX0FEQ19NVUxUSV9DT05WX0RBVEFfTUFTVEVSX1NMQVZFKChfX0FEQ19NVUxUSV9NQVNURVJfU0xBVkVfXyksIChfX0FEQ19NVUxUSV9DT05WX0RBVEFfXykpCisgICAgICAgICBfX0xMX0FEQ19NVUxUSV9DT05WX0RBVEFfTUFTVEVSX1NMQVZFKChfX0FEQ19NVUxUSV9NQVNURVJfU0xBVkVfXyksIChfX0FEQ19NVUxUSV9DT05WX0RBVEFfXykpCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIHNlbGVjdCB0aGUgQURDIGNvbW1vbiBpbnN0YW5jZQpAQCAtMTQ1NSw3ICsxNjczLDcgQEAKICAgKiBAcmV0dmFsIEFEQyBjb21tb24gcmVnaXN0ZXIgaW5zdGFuY2UKICAgKi8KICNkZWZpbmUgX19IQUxfQURDX0NPTU1PTl9JTlNUQU5DRShfX0FEQ3hfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fTExfQURDX0NPTU1PTl9JTlNUQU5DRSgoX19BREN4X18pKQorICAgICAgICAgX19MTF9BRENfQ09NTU9OX0lOU1RBTkNFKChfX0FEQ3hfXykpCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNoZWNrIGlmIGFsbCBBREMgaW5zdGFuY2VzIHNoYXJpbmcgdGhlIHNhbWUKQEAgLTE0NzUsNyArMTY5Myw3IEBACiAgICogICAgICAgICBpcyBlbmFibGVkLgogICAqLwogI2RlZmluZSBfX0hBTF9BRENfSVNfRU5BQkxFRF9BTExfQ09NTU9OX0lOU1RBTkNFKF9fQURDWFlfQ09NTU9OX18pICAgICAgICAgICAgICBcCi0gIF9fTExfQURDX0lTX0VOQUJMRURfQUxMX0NPTU1PTl9JTlNUQU5DRSgoX19BRENYWV9DT01NT05fXykpCisgICAgICAgICBfX0xMX0FEQ19JU19FTkFCTEVEX0FMTF9DT01NT05fSU5TVEFOQ0UoKF9fQURDWFlfQ09NTU9OX18pKQogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBkZWZpbmUgdGhlIEFEQyBjb252ZXJzaW9uIGRhdGEgZnVsbC1zY2FsZSBkaWdpdGFsCkBAIC0xNDkyLDcgKzE3MTAsNyBAQAogICAqIEByZXR2YWwgQURDIGNvbnZlcnNpb24gZGF0YSBmdWxsLXNjYWxlIGRpZ2l0YWwgdmFsdWUKICAgKi8KICNkZWZpbmUgX19IQUxfQURDX0RJR0lUQUxfU0NBTEUoX19BRENfUkVTT0xVVElPTl9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBfX0xMX0FEQ19ESUdJVEFMX1NDQUxFKChfX0FEQ19SRVNPTFVUSU9OX18pKQorICAgICAgICAgX19MTF9BRENfRElHSVRBTF9TQ0FMRSgoX19BRENfUkVTT0xVVElPTl9fKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY29udmVydCB0aGUgQURDIGNvbnZlcnNpb24gZGF0YSBmcm9tCkBAIC0xNTE3LDkgKzE3MzUsOSBAQAogI2RlZmluZSBfX0hBTF9BRENfQ09OVkVSVF9EQVRBX1JFU09MVVRJT04oX19EQVRBX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfUkVTT0xVVElPTl9DVVJSRU5UX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfUkVTT0xVVElPTl9UQVJHRVRfXykgICAgICAgICAgICBcCi0gIF9fTExfQURDX0NPTlZFUlRfREFUQV9SRVNPTFVUSU9OKChfX0RBVEFfXyksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fQ1VSUkVOVF9fKSwgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BRENfUkVTT0xVVElPTl9UQVJHRVRfXykpCisgICAgICAgICBfX0xMX0FEQ19DT05WRVJUX0RBVEFfUkVTT0xVVElPTigoX19EQVRBX18pLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pKQogCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjYWxjdWxhdGUgdGhlIHZvbHRhZ2UgKHVuaXQ6IG1Wb2x0KQpAQCAtMTU0MSw5ICsxNzU5LDkgQEAKICNkZWZpbmUgX19IQUxfQURDX0NBTENfREFUQV9UT19WT0xUQUdFKF9fVlJFRkFOQUxPR19WT0xUQUdFX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfREFUQV9fLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgICBcCi0gIF9fTExfQURDX0NBTENfREFUQV9UT19WT0xUQUdFKChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BRENfREFUQV9fKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCisgICAgICAgICBfX0xMX0FEQ19DQUxDX0RBVEFfVE9fVk9MVEFHRSgoX19WUkVGQU5BTE9HX1ZPTFRBR0VfXyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX0RBVEFfXyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNhbGN1bGF0ZSBhbmFsb2cgcmVmZXJlbmNlIHZvbHRhZ2UgKFZyZWYrKQpAQCAtMTU3Myw4ICsxNzkxLDggQEAKICAgKi8KICNkZWZpbmUgX19IQUxfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKF9fVlJFRklOVF9BRENfREFUQV9fLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICBcCi0gIF9fTExfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKChfX1ZSRUZJTlRfQURDX0RBVEFfXyksICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FEQ19SRVNPTFVUSU9OX18pKQorICAgICAgICAgX19MTF9BRENfQ0FMQ19WUkVGQU5BTE9HX1ZPTFRBR0UoKF9fVlJFRklOVF9BRENfREFUQV9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19BRENfUkVTT0xVVElPTl9fKSkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSB0ZW1wZXJhdHVyZSAodW5pdDogZGVncmVlIENlbHNpdXMpCkBAIC0xNjI1LDkgKzE4NDMsOSBAQAogI2RlZmluZSBfX0hBTF9BRENfQ0FMQ19URU1QRVJBVFVSRShfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19URU1QU0VOU09SX0FEQ19EQVRBX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgX19MTF9BRENfQ0FMQ19URU1QRVJBVFVSRSgoX19WUkVGQU5BTE9HX1ZPTFRBR0VfXyksICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fVEVNUFNFTlNPUl9BRENfREFUQV9fKSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0FEQ19SRVNPTFVUSU9OX18pKQorICAgICAgICAgX19MTF9BRENfQ0FMQ19URU1QRVJBVFVSRSgoX19WUkVGQU5BTE9HX1ZPTFRBR0VfXyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19URU1QU0VOU09SX0FEQ19EQVRBX18pLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCiAKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNhbGN1bGF0ZSB0aGUgdGVtcGVyYXR1cmUgKHVuaXQ6IGRlZ3JlZSBDZWxzaXVzKQpAQCAtMTY4MCwxMiArMTg5OCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVlJFRkFOQUxPR19WT0xUQUdFX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fVEVNUFNFTlNPUl9BRENfREFUQV9fLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICBcCi0gIF9fTExfQURDX0NBTENfVEVNUEVSQVRVUkVfVFlQX1BBUkFNUygoX19URU1QU0VOU09SX1RZUF9BVkdTTE9QRV9fKSwgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19URU1QU0VOU09SX1RZUF9DQUxYX1ZfXyksICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fVEVNUFNFTlNPUl9DQUxYX1RFTVBfXyksICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSwgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19URU1QU0VOU09SX0FEQ19EQVRBX18pLCAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCisgICAgICAgICBfX0xMX0FEQ19DQUxDX1RFTVBFUkFUVVJFX1RZUF9QQVJBTVMoKF9fVEVNUFNFTlNPUl9UWVBfQVZHU0xPUEVfXyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX1RFTVBTRU5TT1JfVFlQX0NBTFhfVl9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fVEVNUFNFTlNPUl9DQUxYX1RFTVBfXyksXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX1ZSRUZBTkFMT0dfVk9MVEFHRV9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fVEVNUFNFTlNPUl9BRENfREFUQV9fKSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXykpCiAKIC8qKgogICAqIEB9CkBAIC0xNzEzLDEwICsxOTMxLDEwIEBACiB2b2lkICAgICAgICAgICAgICAgICAgICBIQUxfQURDX01zcEluaXQoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMpOwogdm9pZCAgICAgICAgICAgICAgICAgICAgSEFMX0FEQ19Nc3BEZUluaXQoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMpOwogCisKICNpZiAoVVNFX0hBTF9BRENfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0FEQ19SZWdpc3RlckNhbGxiYWNrKEFEQ19IYW5kbGVUeXBlRGVmICpoYWRjLCBIQUxfQURDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFEQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9BRENfUmVnaXN0ZXJDYWxsYmFjayhBRENfSGFuZGxlVHlwZURlZiAqaGFkYywgSEFMX0FEQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwQURDX0NhbGxiYWNrVHlwZURlZiBwQ2FsbGJhY2spOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0FEQ19VblJlZ2lzdGVyQ2FsbGJhY2soQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIEhBTF9BRENfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CiAjZW5kaWYgLyogVVNFX0hBTF9BRENfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAvKioKQEAgLTE3NTcsOSArMTk3NSw5IEBACiAgICovCiAKIC8qKiBAYWRkdG9ncm91cCBBRENfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCi0gICogIEBicmllZiAgICBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCi0gICogQHsKLSAgKi8KKyAqICBAYnJpZWYgICAgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucworICogQHsKKyAqLwogLyogUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9BRENfQ29uZmlnQ2hhbm5lbChBRENfSGFuZGxlVHlwZURlZiAqaGFkYywgQURDX0NoYW5uZWxDb25mVHlwZURlZiAqc0NvbmZpZyk7CiBIQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfQURDX0FuYWxvZ1dER0NvbmZpZyhBRENfSGFuZGxlVHlwZURlZiAqaGFkYywgQURDX0FuYWxvZ1dER0NvbmZUeXBlRGVmICpBbmFsb2dXREdDb25maWcpOwpAQCAtMTc5Myw3ICsyMDExLDcgQEAKIHZvaWQgQURDX0RNQUNvbnZDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHZvaWQgQURDX0RNQUhhbGZDb252Q3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiB2b2lkIEFEQ19ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7Ci12b2lkIEFEQ19Db25maWd1cmVCb29zdE1vZGUoQURDX0hhbmRsZVR5cGVEZWYqIGhhZGMpOwordm9pZCBBRENfQ29uZmlndXJlQm9vc3RNb2RlKEFEQ19IYW5kbGVUeXBlRGVmICpoYWRjKTsKIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX2FkY19leC5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfYWRjX2V4LmgKaW5kZXggMzM4ODU1My4uYjg2YzI1OSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfYWRjX2V4LmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfYWRjX2V4LmgKQEAgLTQ2LDggKzQ2LDEyIEBACiAgICovCiB0eXBlZGVmIHN0cnVjdAogewotICB1aW50MzJfdCBSYXRpbzsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmVzIHRoZSBvdmVyc2FtcGxpbmcgcmF0aW8uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMTAyNCAqLworICB1aW50MzJfdCBSYXRpbzsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb25maWd1cmVzIHRoZSBvdmVyc2FtcGxpbmcgcmF0aW8uICovCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCB0aGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBmcm9tIDEgdG8gMTAyMyBmb3IgQURDMS8yIGFuZCB2YWx1ZSBvZiBAcmVmIEFEQ19IQUxfRUNfT1ZTX1JBVElPIGZvciBBREMzKi8KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfSEFMX0VDX09WU19SQVRJTyAqLworI2VuZGlmCiAKICAgdWludDMyX3QgUmlnaHRCaXRTaGlmdDsgICAgICAgICAgICAgICAgIC8qITwgQ29uZmlndXJlcyB0aGUgZGl2aXNpb24gY29lZmZpY2llbnQgZm9yIHRoZSBPdmVyc2FtcGxlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENfSEFMX0VDX09WU19TSElGVCAqLwpAQCAtMTE3LDEzICsxMjEsMjQgQEAKICAgdWludDMyX3QgSW5qZWN0ZWRPZmZzZXRSaWdodFNoaWZ0OyAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSAxIGJpdCBSaWdodC1zaGlmdCBmZWF0dXJlIGlzIHVzZWQgb3Igbm90LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgYXBwbGllZCBvbmx5IGZvciAxNi1iaXQgb3IgOC1iaXQgcmVzb2x1dGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gRU5BQkxFIG9yIERJU0FCTEUuICovCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgdWludDMyX3QgSW5qZWN0ZWRPZmZzZXRTaWduOyAgICAgICAgICAgICAgICAvKiE8IERlZmluZSBpZiB0aGUgb2Zmc2V0IHNob3VsZCBiZSBzdWJzdHJhY3RlZCAobmVnYXRpdmUgc2lnbikgb3IgYWRkZWQgKHBvc2l0aXZlIHNpZ24pIGZyb20gb3IgdG8gdGhlIHJhdyBjb252ZXJ0ZWQgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBBRENFeF9PZmZzZXRTaWduLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIG1vZGlmaWVkIHdoZW4gbm8gY29udmVyc2lvbiBpcyBvbiBnb2luZyBvbiBib3RoIHJlZ3VsYXIgYW5kIGluamVjdGVkIGdyb3VwcyAoQURDIGRpc2FibGVkLCBvciBBREMgZW5hYmxlZCB3aXRob3V0IGNvbnRpbnVvdXMgbW9kZSBvciBleHRlcm5hbCB0cmlnZ2VyIHRoYXQgY291bGQgbGF1bmNoIGEgY29udmVyc2lvbikuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgdGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWMgdG8gQURDMyBvbmx5LiAqLworICBGdW5jdGlvbmFsU3RhdGUgSW5qZWN0ZWRPZmZzZXRTYXR1cmF0aW9uOyAgIC8qITwgRGVmaW5lIGlmIHRoZSBvZmZzZXQgc2hvdWxkIGJlIHNhdHVyYXRlZCB1cG9uIHVuZGVyIG9yIG92ZXIgZmxvdy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgdmFsdWUgY2FuIGJlIEVOQUJMRSBvciBESVNBQkxFLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIG1vZGlmaWVkIHdoZW4gbm8gY29udmVyc2lvbiBpcyBvbiBnb2luZyBvbiBib3RoIHJlZ3VsYXIgYW5kIGluamVjdGVkIGdyb3VwcyAoQURDIGRpc2FibGVkLCBvciBBREMgZW5hYmxlZCB3aXRob3V0IGNvbnRpbnVvdXMgbW9kZSBvciBleHRlcm5hbCB0cmlnZ2VyIHRoYXQgY291bGQgbGF1bmNoIGEgY29udmVyc2lvbikuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIE9uIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCwgdGhpcyBwYXJhbWV0ZXIgaXMgc3BlY2lmaWMgdG8gQURDMyBvbmx5LiAqLworCisjZW5kaWYKIAogICBGdW5jdGlvbmFsU3RhdGUgSW5qZWN0ZWRPZmZzZXRTaWduZWRTYXR1cmF0aW9uOyAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFNpZ25lZCBzYXR1cmF0aW9uIGZlYXR1cmUgaXMgdXNlZCBvciBub3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIGFwcGxpZWQgb25seSBmb3IgMTYtYml0IG9yIDgtYml0IHJlc29sdXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gRU5BQkxFIG9yIERJU0FCTEUuICovCi0gIHVpbnQzMl90IEluamVjdGVkTGVmdEJpdFNoaWZ0OyAgICAgICAgICAvKiE8IENvbmZpZ3VyZXMgdGhlIGxlZnQgc2hpZnRpbmcgYXBwbGllZCB0byB0aGUgZmluYWwgcmVzdWx0IHdpdGggb3Igd2l0aG91dCBvdmVyc2FtcGxpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQURDRXhfTGVmdF9CaXRfU2hpZnQgKi8KLQorICAKICAgdWludDMyX3QgSW5qZWN0ZWROYnJPZkNvbnZlcnNpb247ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmFua3MgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB3aXRoaW4gdGhlIEFEQyBncm91cCBpbmplY3RlZCBzZXF1ZW5jZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIHVzZSB0aGUgaW5qZWN0ZWQgZ3JvdXAgc2VxdWVuY2VyIGFuZCBjb252ZXJ0IHNldmVyYWwgcmFua3MsIHBhcmFtZXRlciAnU2NhbkNvbnZNb2RlJyBtdXN0IGJlIGVuYWJsZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDEgYW5kIE1heF9EYXRhID0gNC4KQEAgLTI3Niw2ICsyOTEsMTcgQEAKICAgKiBAfQogICAqLwogCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKy8qKiBAZGVmZ3JvdXAgQURDRXhfT2Zmc2V0U2lnbiBBREMgRXh0ZW5kZWQgT2Zmc2V0IFNpZ24KKyAgKiBAeworICAqLworI2RlZmluZSBBREMzX09GRlNFVF9TSUdOX05FR0FUSVZFICAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgICAgLyohPCBPZmZzZXQgc2lnbiBuZWdhdGl2ZSwgb2Zmc2V0IGlzIHN1YnN0cmFjdGVkICovCisjZGVmaW5lIEFEQzNfT0ZGU0VUX1NJR05fUE9TSVRJVkUgICAgICAoQURDM19PRlIxX09GRlNFVFBPUykgICAvKiE8IE9mZnNldCBzaWduIHBvc2l0aXZlLCBvZmZzZXQgaXMgYWRkZWQgICovCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmCisKIC8qKiBAZGVmZ3JvdXAgQURDX0lOSl9TRVFfUkFOS1MgIEFEQyBncm91cCBpbmplY3RlZCAtIFNlcXVlbmNlciByYW5rcwogICAqIEB7CiAgICovCkBAIC0zNzIsNiArMzk4LDE3IEBACiAvKioKICAgKiBAfQogICAqLworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKiogQGRlZmdyb3VwIEFEQ19DRkdSX2ZpZWxkc18yIEFEQ3ggQ0ZHUiBzdWIgZmllbGRzCisgICogQHsKKyAgKi8KKy8qIEFEQ19DRkdSIGZpZWxkcyBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHVwZGF0ZWQgd2hlbiBubyBjb252ZXJzaW9uCisgICAobmVpdGhlciByZWd1bGFyIG5vciBpbmplY3RlZCkgaXMgb24tZ29pbmcgICovCisjZGVmaW5lIEFEQzNfQ0ZHUl9GSUVMRFNfMiAgKChBREMzX0NGR1JfRE1BQ0ZHIHwgQURDX0NGR1JfQVVURExZKSkKKy8qKgorICAqIEB9CisgICovCisjZW5kaWYKIAogI2lmIGRlZmluZWQoREZTRE0xX0NoYW5uZWwwKQogLyoqIEBkZWZncm91cCBBRENfSEFMX0VDX1JFR19ERlNETV9UUkFOU0ZFUiBBREMgZ3JvdXAgcmVndWxhciAtIERGU0RNIHRyYW5zZmVyIG9mIEFEQyBjb252ZXJzaW9uIGRhdGEKQEAgLTQ0OSwxMyArNDg2LDE1IEBACiAjZGVmaW5lIEFEQ19JU19DT05WRVJTSU9OX09OR09JTkdfSU5KRUNURUQoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoTExfQURDX0lOSl9Jc0NvbnZlcnNpb25PbmdvaW5nKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpKQogCisKKyNpZiBkZWZpbmVkIChBREMzKQogLyoqCiAgICogQGJyaWVmIENoZWNrIHdoZXRoZXIgb3Igbm90IEFEQyBpcyBpbmRlcGVuZGVudC4KICAgKiBAcGFyYW0gX19IQU5ETEVfXyBBREMgaGFuZGxlLgogICAqIEBub3RlICBXaGVuIG11bHRpbW9kZSBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBtYWNybyBhbHdheXMgcmV0dXJucyBTRVQuCiAgICogQHJldHZhbCBTRVQgKEFEQyBpcyBpbmRlcGVuZGVudCkgb3IgUkVTRVQgKEFEQyBpcyBub3QpLgogICAqLwotI2lmIGRlZmluZWQgKEFEQzMpCisKICNkZWZpbmUgQURDX0lTX0lOREVQRU5ERU5UKF9fSEFORExFX18pICAgIFwKICAgKCAoICggKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzMpIFwKICAgICApPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUyMiw2ICs1NjEsMTQgQEAKICAgKi8KICNkZWZpbmUgQURDX0NGR1JfRE1BQ09OVFJFUShfX0RNQUNPTlRSRVFfTU9ERV9fKSAoKF9fRE1BQ09OVFJFUV9NT0RFX18pKQogCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKy8qKgorICAqIEBicmllZiBDb25maWd1cmUgdGhlIEFEQyBETUEgY29udGludW91cyByZXF1ZXN0LgorICAqIEBwYXJhbSBfX0RNQUNPTlRSRVFfTU9ERV9fIERNQSBjb250aW51b3VzIHJlcXVlc3QgbW9kZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgQURDM19DRkdSX0RNQUNPTlRSRVEoX19ETUFDT05UUkVRX01PREVfXykgKChfX0RNQUNPTlRSRVFfTU9ERV9fKSA8PCAgQURDM19DRkdSX0RNQUNGR19Qb3MpCisjZW5kaWYKIC8qKgogICAqIEBicmllZiBDb25maWd1cmUgdGhlIGNoYW5uZWwgbnVtYmVyIGludG8gb2Zmc2V0IE9GUnggcmVnaXN0ZXIuCiAgICogQHBhcmFtIF9fQ0hBTk5FTF9fIEFEQyBDaGFubmVsLgpAQCAtNTk3LDYgKzY0NCwxMiBAQAogICAgICAgICApCiAjZW5kaWYgLyogQURDX1ZFUl9WNV8zICovCiAKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorI2RlZmluZSBBREMzX09GRlNFVF9TSElGVF9SRVNPTFVUSU9OKF9fSEFORExFX18sIF9fT0ZGU0VUX18pIFwKKyAgICAgICAgKChfX09GRlNFVF9fKSA8PCAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DRkdSICYgQURDM19DRkdSX1JFUykgPj4gM1VMKSAqIDJVTCkpCisKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCAqLworCiAvKioKICAgKiBAYnJpZWYgU2hpZnQgdGhlIEFXRDEgdGhyZXNob2xkIGluIGZ1bmN0aW9uIG9mIHRoZSBzZWxlY3RlZCBBREMgcmVzb2x1dGlvbi4KICAgKiBAbm90ZSAgVGhyZXNob2xkcyBoYXZlIHRvIGJlIGxlZnQtYWxpZ25lZCBvbiBiaXQgMTUsIHRoZSBMU0IgKHJpZ2h0IGJpdHMpIGFyZSBzZXQgdG8gMC4KQEAgLTYxMSw2ICs2NjQsMTcgQEAKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KICNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfMykKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorI2RlZmluZSBBRENfQVdEMVRIUkVTSE9MRF9TSElGVF9SRVNPTFVUSU9OKF9fSEFORExFX18sIF9fVEhSRVNIT0xEX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gQURDMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICA/KChfX1RIUkVTSE9MRF9fKTw8KCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNGR1IpICYgQURDM19DRkdSX1JFUyk+PiAzVUwpKjJVTCkpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0ZHUikgJiBBRENfQ0ZHUl9SRVNfMikgPT0gMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgID8oKF9fVEhSRVNIT0xEX18pPDwoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0ZHUikgJiBBRENfQ0ZHUl9SRVMpPj4gMlVMKSoyVUwpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKChfX1RIUkVTSE9MRF9fKTw8KCgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNGR1IpICYgKEFEQ19DRkdSX1JFUyAmIDB4RkZGRkZGRjNVTCkpPj4gMlVMICkqMlVMKSkgIFwKKyAgICAgICAgKQorI2Vsc2UKICNkZWZpbmUgQURDX0FXRDFUSFJFU0hPTERfU0hJRlRfUkVTT0xVVElPTihfX0hBTkRMRV9fLCBfX1RIUkVTSE9MRF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0ZHUikgJiBBRENfQ0ZHUl9SRVNfMikgPT0gMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTYxOCw2ICs2ODIsOCBAQAogICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAoKF9fVEhSRVNIT0xEX18pPDwoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0ZHUikgJiAoQURDX0NGR1JfUkVTICYgMHhGRkZGRkZGM1VMKSk+PiAyVUwgKSoyVUwpKSAgXAogICAgICAgICApCisjZW5kaWYKKwogI2Vsc2UKICNkZWZpbmUgQURDX0FXRDFUSFJFU0hPTERfU0hJRlRfUkVTT0xVVElPTihfX0hBTkRMRV9fLCBfX1RIUkVTSE9MRF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKCgoREJHTUNVLT5JRENPREUgJiAweEYwMDAwMDAwVUwpID09IDB4MTAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTY0Myw4ICs3MDksOCBAQAogICAqIEBwYXJhbSBfX1RIUkVTSE9MRF9fOiBWYWx1ZSB0byBiZSBzaGlmdGVkCiAgICogQHJldHZhbCBOb25lCiAgICovCi0jaWYgZGVmaW5lZChBRENfVkVSX1Y1XzMpCi0jZGVmaW5lIEFEQ19BV0QyM1RIUkVTSE9MRF9TSElGVF9SRVNPTFVUSU9OKF9fSEFORExFX18sIF9fVEhSRVNIT0xEX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfMykgfHwgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyNkZWZpbmUgQURDX0FXRDIzVEhSRVNIT0xEX1NISUZUX1JFU09MVVRJT04oX19IQU5ETEVfXywgX19USFJFU0hPTERfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5DRkdSKSAmIEFEQ19DRkdSX1JFU18yKSA9PSAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgPyAoKF9fVEhSRVNIT0xEX18pPDwoKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0ZHUikgJiBBRENfQ0ZHUl9SRVMpPj4gMlVMKSoyVUwpKSAgICAgICAgICAgICAgICAgICAgXApAQCAtNzA3LDkgKzc3Myw5IEBACiAjZGVmaW5lIEFEQ19JU19EVUFMX1JFR1VMQVJfQ09OVkVSU0lPTl9FTkFCTEUoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICggKCAoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlKSA9PSBBREMxKSB8fCAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UpID09IEFEQzIpKSBcCiAgICAgKT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICggKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgIT0gQURDX01PREVfSU5ERVBFTkRFTlQpICAgICAmJiAgICAgIFwKLSAgICAgICAoKEFEQzEyX0NPTU1PTi0+Q0NSICYgQURDX0NDUl9EVUFMKSAhPSBBRENfRFVBTE1PREVfSU5KRUNTSU1VTFQpICYmICAgICAgXAotICAgICAgICgoQURDMTJfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpICE9IEFEQ19EVUFMTU9ERV9BTFRFUlRSSUcpICkgICAgICAgICBcCisgICAgICggKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgIT0gQURDX01PREVfSU5ERVBFTkRFTlQpICAgICAmJiAgICAgICBcCisgICAgICAgKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgIT0gQURDX0RVQUxNT0RFX0lOSkVDU0lNVUxUKSAmJiAgICAgICBcCisgICAgICAgKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgIT0gQURDX0RVQUxNT0RFX0FMVEVSVFJJRykgKSAgICAgICAgICBcCiAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIFJFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKQEAgLTcxOSwxMiArNzg1LDEyIEBACiAgICogQHBhcmFtIF9fSEFORExFX186IEFEQyBoYW5kbGUKICAgKiBAcmV0dmFsIFNFVCAobm9uLU11bHRpTW9kZSBvciBNYXN0ZXIgaGFuZGxlKSBvciBSRVNFVCAoaGFuZGxlIG9mIFNsYXZlIEFEQyBpbiBNdWx0aU1vZGUpCiAgICovCi0jZGVmaW5lIEFEQzEyX05PTk1VTFRJTU9ERV9PUl9NVUxUSU1PREVNQVNURVIoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEFEQzEyX05PTk1VTFRJTU9ERV9PUl9NVUxUSU1PREVNQVNURVIoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgXAogICAoICggKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gQURDMSkgfHwgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UgPT0gQURDMikgICAgIFwKICAgICApPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIFNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gUkVTRVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gUkVTRVQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICkKICNpZiBkZWZpbmVkIChBREMzKQogLyoqCkBAIC03MzQsMTAgKzgwMCwxMCBAQAogICAqLwogI2RlZmluZSBBREMzX05PTk1VTFRJTU9ERV9PUl9NVUxUSU1PREVNQVNURVIoX19IQU5ETEVfXykgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICggKCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBBREMzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICApPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIFNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKChBREMzX0NPTU1PTi0+Q0NSICYgQURDX0NDUl9EVUFMKSA9PSBSRVNFVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIFNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKEFEQzNfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpID09IFJFU0VUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKQogI2VuZGlmCiAvKioKQEAgLTc1MSw4ICs4MTcsOCBAQAogICAgICk/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoICgoQURDMTJfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpID09IEFEQ19NT0RFX0lOREVQRU5ERU5UKSAgICAgfHwgXAotICAgICAgICgoQURDMTJfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpID09IEFEQ19EVUFMTU9ERV9JTkpFQ1NJTVVMVCkgfHwgXAorICAgICAoICgoQURDMTJfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpID09IEFEQ19NT0RFX0lOREVQRU5ERU5UKSAgICAgfHwgIFwKKyAgICAgICAoKEFEQzEyX0NPTU1PTi0+Q0NSICYgQURDX0NDUl9EVUFMKSA9PSBBRENfRFVBTE1PREVfSU5KRUNTSU1VTFQpIHx8ICBcCiAgICAgICAgKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gQURDX0RVQUxNT0RFX0FMVEVSVFJJRykgKSkKICNlbHNlCiAjZGVmaW5lIEFEQ19JTkRFUEVOREVOVF9PUl9OT05NVUxUSU1PREVSRUdVTEFSX1NMQVZFKF9fSEFORExFX18pICAgICAgICAgICAgXApAQCAtNzYwLDggKzgyNiw4IEBACiAgICAgKT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICBTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICggKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gQURDX01PREVfSU5ERVBFTkRFTlQpICAgICB8fCBcCi0gICAgICAgKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gQURDX0RVQUxNT0RFX0lOSkVDU0lNVUxUKSB8fCBcCisgICAgICggKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gQURDX01PREVfSU5ERVBFTkRFTlQpICAgICB8fCAgXAorICAgICAgICgoQURDMTJfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpID09IEFEQ19EVUFMTU9ERV9JTkpFQ1NJTVVMVCkgfHwgIFwKICAgICAgICAoKEFEQzEyX0NPTU1PTi0+Q0NSICYgQURDX0NDUl9EVUFMKSA9PSBBRENfRFVBTE1PREVfQUxURVJUUklHKSApKQogI2VuZGlmCiAKQEAgLTc3MSwyMiArODM3LDIyIEBACiAgICogQHJldHZhbCBTRVQgKG5vbi1NdWx0aU1vZGUgb3IgTWFzdGVyLCBvciBTbGF2ZSB3aXRob3V0IGR1YWwgaW5qZWN0ZWQgY29udmVyc2lvbnMgZW5hYmxlZCkgb3IgUkVTRVQgKFNsYXZlIEFEQyB3aXRoIGR1YWwgaW5qZWN0ZWQgY29udmVyc2lvbnMgZW5hYmxlZCkKICAgKi8KICNpZiBkZWZpbmVkIChBREMzKQotI2RlZmluZSBBRENfSU5ERVBFTkRFTlRfT1JfTk9OTVVMVElNT0RFSU5KRUNURURfU0xBVkUoX19IQU5ETEVfXykgICAgICAgICBcCisjZGVmaW5lIEFEQ19JTkRFUEVOREVOVF9PUl9OT05NVUxUSU1PREVJTkpFQ1RFRF9TTEFWRShfX0hBTkRMRV9fKSAgICAgICAgICBcCiAgICggKCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBBREMxKSB8fCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBBREMzKSBcCiAgICAgKT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIFNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICggKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gQURDX01PREVfSU5ERVBFTkRFTlQpICAgIHx8IFwKLSAgICAgICAoKEFEQzEyX0NPTU1PTi0+Q0NSICYgQURDX0NDUl9EVUFMKSA9PSBBRENfRFVBTE1PREVfUkVHU0lNVUxUKSAgfHwgXAorICAgICAoICgoQURDMTJfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpID09IEFEQ19NT0RFX0lOREVQRU5ERU5UKSAgICB8fCAgXAorICAgICAgICgoQURDMTJfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpID09IEFEQ19EVUFMTU9ERV9SRUdTSU1VTFQpICB8fCAgXAogICAgICAgICgoQURDMTJfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpID09IEFEQ19EVUFMTU9ERV9JTlRFUkwpICkpCiAjZWxzZQotI2RlZmluZSBBRENfSU5ERVBFTkRFTlRfT1JfTk9OTVVMVElNT0RFSU5KRUNURURfU0xBVkUoX19IQU5ETEVfXykgICAgICAgICBcCi0gICggKCAoKF9fSEFORExFX18pLT5JbnN0YW5jZSA9PSBBREMxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgQURDX0lOREVQRU5ERU5UX09SX05PTk1VTFRJTU9ERUlOSkVDVEVEX1NMQVZFKF9fSEFORExFX18pICAgICAgICAgIFwKKyAgKCAoICgoX19IQU5ETEVfXyktPkluc3RhbmNlID09IEFEQzEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICApPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgKCAoKEFEQzEyX0NPTU1PTi0+Q0NSICYgQURDX0NDUl9EVUFMKSA9PSBBRENfTU9ERV9JTkRFUEVOREVOVCkgICAgfHwgXAotICAgICAgICgoQURDMTJfQ09NTU9OLT5DQ1IgJiBBRENfQ0NSX0RVQUwpID09IEFEQ19EVUFMTU9ERV9SRUdTSU1VTFQpICB8fCBcCisgICAgICggKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gQURDX01PREVfSU5ERVBFTkRFTlQpICAgIHx8ICBcCisgICAgICAgKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gQURDX0RVQUxNT0RFX1JFR1NJTVVMVCkgIHx8ICBcCiAgICAgICAgKChBREMxMl9DT01NT04tPkNDUiAmIEFEQ19DQ1JfRFVBTCkgPT0gQURDX0RVQUxNT0RFX0lOVEVSTCkgKSkKICNlbmRpZgogCkBAIC05NTQsNyArMTAyMCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19PRkZTRVRfTlVNQkVSX18pID09IEFEQ19PRkZTRVRfMikgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19PRkZTRVRfTlVNQkVSX18pID09IEFEQ19PRkZTRVRfMykgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19PRkZTRVRfTlVNQkVSX18pID09IEFEQ19PRkZTRVRfNCkgICAgICApCi0KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorLyoqCisgICogQGJyaWVmIFZlcmlmeSB0aGUgQURDIG9mZnNldCBzaWduIHNldHRpbmcuCisgICogQHBhcmFtIF9fT0ZGU0VUX1NJR05fXyBBREMgb2Zmc2V0IHNpZ24uCisgICogQHJldHZhbCBTRVQgKF9fT0ZGU0VUX1NJR05fXyBpcyB2YWxpZCkgb3IgUkVTRVQgKF9fT0ZGU0VUX1NJR05fXyBpcyBpbnZhbGlkKQorICAqLworI2RlZmluZSBJU19BREMzX09GRlNFVF9TSUdOKF9fT0ZGU0VUX1NJR05fXykgICAgICgoKF9fT0ZGU0VUX1NJR05fXykgPT0gQURDM19PRkZTRVRfU0lHTl9ORUdBVElWRSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fT0ZGU0VUX1NJR05fXykgPT0gQURDM19PRkZTRVRfU0lHTl9QT1NJVElWRSkgICAgKQorI2VuZGlmICAvKiBBRENfVkVSX1Y1X1Y5MCAqLwogLyoqCiAgICogQGJyaWVmIFZlcmlmeSB0aGUgQURDIGluamVjdGVkIGNoYW5uZWwgc2V0dGluZy4KICAgKiBAcGFyYW0gX19DSEFOTkVMX18gcHJvZ3JhbW1lZCBBREMgaW5qZWN0ZWQgY2hhbm5lbC4KQEAgLTk5NCwyNCArMTA2OCwyNCBAQAogICAqIEBwYXJhbSBfX0VER0VfXyBwcm9ncmFtbWVkIEFEQyBlZGdlIHRyaWdnZXIgc2V0dGluZy4KICAgKiBAcmV0dmFsIFNFVCAoX19FREdFX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fRURHRV9fIGlzIGludmFsaWQpCiAgICovCi0jZGVmaW5lIElTX0FEQ19FWFRUUklHSU5KRUNfRURHRShfX0VER0VfXykgKCgoX19FREdFX18pID09IEFEQ19FWFRFUk5BTFRSSUdJTkpFQ0NPTlZfRURHRV9OT05FKSAgICAgICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VER0VfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDQ09OVl9FREdFX1JJU0lORykgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRURHRV9fKSA9PSBBRENfRVhURVJOQUxUUklHSU5KRUNDT05WX0VER0VfRkFMTElORykgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19FREdFX18pID09IEFEQ19FWFRFUk5BTFRSSUdJTkpFQ0NPTlZfRURHRV9SSVNJTkdGQUxMSU5HKSApCisjZGVmaW5lIElTX0FEQ19FWFRUUklHSU5KRUNfRURHRShfX0VER0VfXykgKCgoX19FREdFX18pID09IEFEQ19FWFRFUk5BTFRSSUdJTkpFQ0NPTlZfRURHRV9OT05FKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19FREdFX18pID09IEFEQ19FWFRFUk5BTFRSSUdJTkpFQ0NPTlZfRURHRV9SSVNJTkcpICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRURHRV9fKSA9PSBBRENfRVhURVJOQUxUUklHSU5KRUNDT05WX0VER0VfRkFMTElORykgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VER0VfXykgPT0gQURDX0VYVEVSTkFMVFJJR0lOSkVDQ09OVl9FREdFX1JJU0lOR0ZBTExJTkcpICkKIAogLyoqCiAgICogQGJyaWVmIFZlcmlmeSB0aGUgQURDIG11bHRpbW9kZSBzZXR0aW5nLgogICAqIEBwYXJhbSBfX01PREVfXyBwcm9ncmFtbWVkIEFEQyBtdWx0aW1vZGUgc2V0dGluZy4KICAgKiBAcmV0dmFsIFNFVCAoX19NT0RFX18gaXMgdmFsaWQpIG9yIFJFU0VUIChfX01PREVfXyBpcyBpbnZhbGlkKQogICAqLwotI2RlZmluZSBJU19BRENfTVVMVElNT0RFKF9fTU9ERV9fKSAoKChfX01PREVfXykgPT0gQURDX01PREVfSU5ERVBFTkRFTlQpICAgICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gQURDX0RVQUxNT0RFX1JFR1NJTVVMVF9JTkpFQ1NJTVVMVCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gQURDX0RVQUxNT0RFX1JFR1NJTVVMVF9BTFRFUlRSSUcpICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gQURDX0RVQUxNT0RFX1JFR0lOVEVSTF9JTkpFQ1NJTVVMVCkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gQURDX0RVQUxNT0RFX0lOSkVDU0lNVUxUKSAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gQURDX0RVQUxNT0RFX1JFR1NJTVVMVCkgICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gQURDX0RVQUxNT0RFX0lOVEVSTCkgICAgICAgICAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gQURDX0RVQUxNT0RFX0FMVEVSVFJJRykgICAgICAgICAgICAgICApCisjZGVmaW5lIElTX0FEQ19NVUxUSU1PREUoX19NT0RFX18pICgoKF9fTU9ERV9fKSA9PSBBRENfTU9ERV9JTkRFUEVOREVOVCkgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEFEQ19EVUFMTU9ERV9SRUdTSU1VTFRfSU5KRUNTSU1VTFQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBBRENfRFVBTE1PREVfUkVHU0lNVUxUX0FMVEVSVFJJRykgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gQURDX0RVQUxNT0RFX1JFR0lOVEVSTF9JTkpFQ1NJTVVMVCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEFEQ19EVUFMTU9ERV9JTkpFQ1NJTVVMVCkgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBBRENfRFVBTE1PREVfUkVHU0lNVUxUKSAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX01PREVfXykgPT0gQURDX0RVQUxNT0RFX0lOVEVSTCkgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEFEQ19EVUFMTU9ERV9BTFRFUlRSSUcpICAgICAgICAgICAgICAgKQogCiAvKioKICAgKiBAYnJpZWYgVmVyaWZ5IHRoZSBBREMgZHVhbCBkYXRhIG1vZGUgc2V0dGluZy4KQEAgLTEwNTksMjYgKzExMzMsNDMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1dBVENIRE9HX01PREVfXykgPT0gQURDX0FOQUxPR1dBVENIRE9HX0FMTF9JTkpFQykgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1dBVENIRE9HX01PREVfXykgPT0gQURDX0FOQUxPR1dBVENIRE9HX0FMTF9SRUdJTkpFQykgICAgICAgKQogCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKy8qKgorICAqIEBicmllZiBWZXJpZnkgdGhlIEFEQyBhbmFsb2cgd2F0Y2hkb2cgZmlsdGVyaW5nIHNldHRpbmcuCisgICogQHBhcmFtIF9fRklMVEVSSU5HX01PREVfXyBwcm9ncmFtbWVkIEFEQyBhbmFsb2cgd2F0Y2hkb2cgbW9kZSBzZXR0aW5nLgorICAqIEByZXR2YWwgU0VUIChfX0ZJTFRFUklOR19NT0RFX18gaXMgdmFsaWQpIG9yIFJFU0VUIChfX0ZJTFRFUklOR19NT0RFX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfQURDX0FOQUxPR19XQVRDSERPR19GSUxURVJJTkdfTU9ERV9BREMzKF9fRklMVEVSSU5HX01PREVfXykgICgoKF9fRklMVEVSSU5HX01PREVfXykgPT0gQURDM19BV0RfRklMVEVSSU5HX05PTkUpICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GSUxURVJJTkdfTU9ERV9fKSA9PSBBREMzX0FXRF9GSUxURVJJTkdfMlNBTVBMRVMpICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZJTFRFUklOR19NT0RFX18pID09IEFEQzNfQVdEX0ZJTFRFUklOR18zU0FNUExFUykgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRklMVEVSSU5HX01PREVfXykgPT0gQURDM19BV0RfRklMVEVSSU5HXzRTQU1QTEVTKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GSUxURVJJTkdfTU9ERV9fKSA9PSBBREMzX0FXRF9GSUxURVJJTkdfNVNBTVBMRVMpICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZJTFRFUklOR19NT0RFX18pID09IEFEQzNfQVdEX0ZJTFRFUklOR182U0FNUExFUykgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRklMVEVSSU5HX01PREVfXykgPT0gQURDM19BV0RfRklMVEVSSU5HXzdTQU1QTEVTKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GSUxURVJJTkdfTU9ERV9fKSA9PSBBREMzX0FXRF9GSUxURVJJTkdfOFNBTVBMRVMpICAgICAgICAgICApCisKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCAqLworCiAvKioKICAgKiBAYnJpZWYgVmVyaWZ5IHRoZSBBREMgY29udmVyc2lvbiAocmVndWxhciBvciBpbmplY3RlZCBvciBib3RoKS4KICAgKiBAcGFyYW0gX19DT05WRVJTSU9OX18gQURDIGNvbnZlcnNpb24gZ3JvdXAuCiAgICogQHJldHZhbCBTRVQgKF9fQ09OVkVSU0lPTl9fIGlzIHZhbGlkKSBvciBSRVNFVCAoX19DT05WRVJTSU9OX18gaXMgaW52YWxpZCkKICAgKi8KLSNkZWZpbmUgSVNfQURDX0NPTlZFUlNJT05fR1JPVVAoX19DT05WRVJTSU9OX18pICgoKF9fQ09OVkVSU0lPTl9fKSA9PSBBRENfUkVHVUxBUl9HUk9VUCkgICAgICAgICB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NPTlZFUlNJT05fXykgPT0gQURDX0lOSkVDVEVEX0dST1VQKSAgICAgICAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DT05WRVJTSU9OX18pID09IEFEQ19SRUdVTEFSX0lOSkVDVEVEX0dST1VQKSAgKQorI2RlZmluZSBJU19BRENfQ09OVkVSU0lPTl9HUk9VUChfX0NPTlZFUlNJT05fXykgKCgoX19DT05WRVJTSU9OX18pID09IEFEQ19SRUdVTEFSX0dST1VQKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NPTlZFUlNJT05fXykgPT0gQURDX0lOSkVDVEVEX0dST1VQKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0NPTlZFUlNJT05fXykgPT0gQURDX1JFR1VMQVJfSU5KRUNURURfR1JPVVApICApCiAKIC8qKgogICAqIEBicmllZiBWZXJpZnkgdGhlIEFEQyBldmVudCB0eXBlLgogICAqIEBwYXJhbSBfX0VWRU5UX18gQURDIGV2ZW50LgogICAqIEByZXR2YWwgU0VUIChfX0VWRU5UX18gaXMgdmFsaWQpIG9yIFJFU0VUIChfX0VWRU5UX18gaXMgaW52YWxpZCkKICAgKi8KLSNkZWZpbmUgSVNfQURDX0VWRU5UX1RZUEUoX19FVkVOVF9fKSAoKChfX0VWRU5UX18pID09IEFEQ19FT1NNUF9FVkVOVCkgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VWRU5UX18pID09IEFEQ19BV0RfRVZFTlQpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VWRU5UX18pID09IEFEQ19BV0QyX0VWRU5UKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VWRU5UX18pID09IEFEQ19BV0QzX0VWRU5UKSAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VWRU5UX18pID09IEFEQ19PVlJfRVZFTlQpICAgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VWRU5UX18pID09IEFEQ19KUU9WRl9FVkVOVCkgICkKKyNkZWZpbmUgSVNfQURDX0VWRU5UX1RZUEUoX19FVkVOVF9fKSAoKChfX0VWRU5UX18pID09IEFEQ19FT1NNUF9FVkVOVCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19FVkVOVF9fKSA9PSBBRENfQVdEX0VWRU5UKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VWRU5UX18pID09IEFEQ19BV0QyX0VWRU5UKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRVZFTlRfXykgPT0gQURDX0FXRDNfRVZFTlQpICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19FVkVOVF9fKSA9PSBBRENfT1ZSX0VWRU5UKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0VWRU5UX18pID09IEFEQ19KUU9WRl9FVkVOVCkgICkKIAogLyoqCiAgICogQGJyaWVmIFZlcmlmeSB0aGUgQURDIG92ZXJzYW1wbGluZyByYXRpby4KQEAgLTEwODcsNiArMTE3OCwyMiBAQAogICAqLwogI2RlZmluZSBJU19BRENfT1ZFUlNBTVBMSU5HX1JBVElPKFJBVElPKSAgKCgoUkFUSU8pID49IDFVTCkgJiYgKChSQVRJTykgPD0gMTAyNFVMKSkKIAorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKioKKyAgKiBAYnJpZWYgVmVyaWZ5IHRoZSBBREMzIG92ZXJzYW1wbGluZyByYXRpby4KKyAgKiBAcGFyYW0gX19SQVRJT19fIHByb2dyYW1tZWQgQURDIG92ZXJzYW1wbGluZyByYXRpby4KKyAgKiBAcmV0dmFsIFNFVCAoX19SQVRJT19fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX1JBVElPX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfQURDX09WRVJTQU1QTElOR19SQVRJT19BREMzKF9fUkFUSU9fXykgICAgKCgoX19SQVRJT19fKSA9PSBBREMzX09WRVJTQU1QTElOR19SQVRJT18yICAgKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkFUSU9fXykgPT0gQURDM19PVkVSU0FNUExJTkdfUkFUSU9fNCAgICkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JBVElPX18pID09IEFEQzNfT1ZFUlNBTVBMSU5HX1JBVElPXzggICApIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SQVRJT19fKSA9PSBBREMzX09WRVJTQU1QTElOR19SQVRJT18xNiAgKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkFUSU9fXykgPT0gQURDM19PVkVSU0FNUExJTkdfUkFUSU9fMzIgICkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1JBVElPX18pID09IEFEQzNfT1ZFUlNBTVBMSU5HX1JBVElPXzY0ICApIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SQVRJT19fKSA9PSBBREMzX09WRVJTQU1QTElOR19SQVRJT18xMjggKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUkFUSU9fXykgPT0gQURDM19PVkVSU0FNUExJTkdfUkFUSU9fMjU2ICkpCisjZW5kaWYgIC8qIEFEQ19WRVJfVjVfVjkwICovCisKIC8qKgogICAqIEBicmllZiBWZXJpZnkgdGhlIEFEQyBvdmVyc2FtcGxpbmcgc2hpZnQuCiAgICogQHBhcmFtIF9fU0hJRlRfXyBwcm9ncmFtbWVkIEFEQyBvdmVyc2FtcGxpbmcgc2hpZnQuCkBAIC0xMTY1LDkgKzEyNzIsOSBAQAogLyogQURDIGNhbGlicmF0aW9uICovCiBIQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfQURDRXhfQ2FsaWJyYXRpb25fU3RhcnQoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIHVpbnQzMl90IENhbGlicmF0aW9uTW9kZSwgdWludDMyX3QgU2luZ2xlRGlmZik7CiB1aW50MzJfdCAgICAgICAgICAgICAgICBIQUxfQURDRXhfQ2FsaWJyYXRpb25fR2V0VmFsdWUoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIHVpbnQzMl90IFNpbmdsZURpZmYpOwotSEFMX1N0YXR1c1R5cGVEZWYgICAgICAgSEFMX0FEQ0V4X0xpbmVhckNhbGlicmF0aW9uX0dldFZhbHVlKEFEQ19IYW5kbGVUeXBlRGVmICpoYWRjLCB1aW50MzJfdCogTGluZWFyQ2FsaWJfQnVmZmVyKTsKK0hBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9BRENFeF9MaW5lYXJDYWxpYnJhdGlvbl9HZXRWYWx1ZShBRENfSGFuZGxlVHlwZURlZiAqaGFkYywgdWludDMyX3QgKkxpbmVhckNhbGliX0J1ZmZlcik7CiBIQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfQURDRXhfQ2FsaWJyYXRpb25fU2V0VmFsdWUoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIHVpbnQzMl90IFNpbmdsZURpZmYsIHVpbnQzMl90IENhbGlicmF0aW9uRmFjdG9yKTsKLUhBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9BRENFeF9MaW5lYXJDYWxpYnJhdGlvbl9TZXRWYWx1ZShBRENfSGFuZGxlVHlwZURlZiAqaGFkYywgdWludDMyX3QqIExpbmVhckNhbGliX0J1ZmZlcik7CitIQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfQURDRXhfTGluZWFyQ2FsaWJyYXRpb25fU2V0VmFsdWUoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIHVpbnQzMl90ICpMaW5lYXJDYWxpYl9CdWZmZXIpOwogSEFMX1N0YXR1c1R5cGVEZWYgICAgICAgSEFMX0FEQ0V4X0xpbmVhckNhbGlicmF0aW9uX0ZhY3RvckxvYWQoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMpOwogCiAKQEAgLTEyMDksNyArMTMxNiw3IEBACiAgICogQHsKICAgKi8KIC8qIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1IQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfQURDRXhfSW5qZWN0ZWRDb25maWdDaGFubmVsKEFEQ19IYW5kbGVUeXBlRGVmICpoYWRjLEFEQ19JbmplY3Rpb25Db25mVHlwZURlZiogc0NvbmZpZ0luamVjdGVkKTsKK0hBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9BRENFeF9JbmplY3RlZENvbmZpZ0NoYW5uZWwoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIEFEQ19JbmplY3Rpb25Db25mVHlwZURlZiAqc0NvbmZpZ0luamVjdGVkKTsKIEhBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9BRENFeF9NdWx0aU1vZGVDb25maWdDaGFubmVsKEFEQ19IYW5kbGVUeXBlRGVmICpoYWRjLCBBRENfTXVsdGlNb2RlVHlwZURlZiAqbXVsdGltb2RlKTsKIEhBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9BRENFeF9FbmFibGVJbmplY3RlZFF1ZXVlKEFEQ19IYW5kbGVUeXBlRGVmICpoYWRjKTsKIEhBTF9TdGF0dXNUeXBlRGVmICAgICAgIEhBTF9BRENFeF9EaXNhYmxlSW5qZWN0ZWRRdWV1ZShBRENfSGFuZGxlVHlwZURlZiAqaGFkYyk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9jb25mX3RlbXBsYXRlLmggYi9JbmMvc3RtMzJoN3h4X2hhbF9jb25mX3RlbXBsYXRlLmgKaW5kZXggNzBkNTRmOC4uMTBlZDllYSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfY29uZl90ZW1wbGF0ZS5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX2NvbmZfdGVtcGxhdGUuaApAQCAtMzgsNiArMzgsNyBAQAogI2RlZmluZSBIQUxfQURDX01PRFVMRV9FTkFCTEVECiAjZGVmaW5lIEhBTF9DRUNfTU9EVUxFX0VOQUJMRUQKICNkZWZpbmUgSEFMX0NPTVBfTU9EVUxFX0VOQUJMRUQKKyNkZWZpbmUgSEFMX0NPUkRJQ19NT0RVTEVfRU5BQkxFRAogI2RlZmluZSBIQUxfQ09SVEVYX01PRFVMRV9FTkFCTEVECiAjZGVmaW5lIEhBTF9DUkNfTU9EVUxFX0VOQUJMRUQKICNkZWZpbmUgSEFMX0NSWVBfTU9EVUxFX0VOQUJMRUQKQEAgLTUzLDYgKzU0LDcgQEAKICNkZWZpbmUgSEFMX0ZEQ0FOX01PRFVMRV9FTkFCTEVECiAjZGVmaW5lIEhBTF9GTEFTSF9NT0RVTEVfRU5BQkxFRAogI2RlZmluZSBIQUxfR0ZYTU1VX01PRFVMRV9FTkFCTEVECisjZGVmaW5lIEhBTF9GTUFDX01PRFVMRV9FTkFCTEVECiAjZGVmaW5lIEhBTF9HUElPX01PRFVMRV9FTkFCTEVECiAjZGVmaW5lIEhBTF9IQVNIX01PRFVMRV9FTkFCTEVECiAjZGVmaW5lIEhBTF9IQ0RfTU9EVUxFX0VOQUJMRUQKQEAgLTEwMiwxMSArMTA0LDExIEBACiAgICogICAgICAgICh3aGVuIEhTRSBpcyB1c2VkIGFzIHN5c3RlbSBjbG9jayBzb3VyY2UsIGRpcmVjdGx5IG9yIHRocm91Z2ggdGhlIFBMTCkuCiAgICovCiAjaWYgIWRlZmluZWQgIChIU0VfVkFMVUUpCi0jZGVmaW5lIEhTRV9WQUxVRSAgICAoKHVpbnQzMl90KTI1MDAwMDAwKSAvKiE8IFZhbHVlIG9mIHRoZSBFeHRlcm5hbCBvc2NpbGxhdG9yIGluIEh6ICovCisjZGVmaW5lIEhTRV9WQUxVRSAgICAoMjUwMDAwMDBVTCkgLyohPCBWYWx1ZSBvZiB0aGUgRXh0ZXJuYWwgb3NjaWxsYXRvciBpbiBIeiAqLwogI2VuZGlmIC8qIEhTRV9WQUxVRSAqLwogCiAjaWYgIWRlZmluZWQgIChIU0VfU1RBUlRVUF9USU1FT1VUKQotICAjZGVmaW5lIEhTRV9TVEFSVFVQX1RJTUVPVVQgICAgKCh1aW50MzJfdCk1MDAwKSAgIC8qITwgVGltZSBvdXQgZm9yIEhTRSBzdGFydCB1cCwgaW4gbXMgKi8KKyAgI2RlZmluZSBIU0VfU1RBUlRVUF9USU1FT1VUICAgICg1MDAwVUwpICAgLyohPCBUaW1lIG91dCBmb3IgSFNFIHN0YXJ0IHVwLCBpbiBtcyAqLwogI2VuZGlmIC8qIEhTRV9TVEFSVFVQX1RJTUVPVVQgKi8KIAogLyoqCkBAIC0xMTQsNyArMTE2LDcgQEAKICAgKiAgICAgICAgVGhpcyB2YWx1ZSBpcyB0aGUgZGVmYXVsdCBDU0kgdmFsdWUgYWZ0ZXIgUmVzZXQuCiAgICovCiAjaWYgIWRlZmluZWQgIChDU0lfVkFMVUUpCi0gICNkZWZpbmUgQ1NJX1ZBTFVFICAgICgodWludDMyX3QpNDAwMDAwMCkgLyohPCBWYWx1ZSBvZiB0aGUgSW50ZXJuYWwgb3NjaWxsYXRvciBpbiBIeiovCisgICNkZWZpbmUgQ1NJX1ZBTFVFICAgICg0MDAwMDAwVUwpIC8qITwgVmFsdWUgb2YgdGhlIEludGVybmFsIG9zY2lsbGF0b3IgaW4gSHoqLwogI2VuZGlmIC8qIENTSV9WQUxVRSAqLwogCiAvKioKQEAgLTEyMyw3ICsxMjUsNyBAQAogICAqICAgICAgICAod2hlbiBIU0kgaXMgdXNlZCBhcyBzeXN0ZW0gY2xvY2sgc291cmNlLCBkaXJlY3RseSBvciB0aHJvdWdoIHRoZSBQTEwpLgogICAqLwogI2lmICFkZWZpbmVkICAoSFNJX1ZBTFVFKQotICAjZGVmaW5lIEhTSV9WQUxVRSAgICAoKHVpbnQzMl90KTY0MDAwMDAwKSAvKiE8IFZhbHVlIG9mIHRoZSBJbnRlcm5hbCBvc2NpbGxhdG9yIGluIEh6Ki8KKyAgI2RlZmluZSBIU0lfVkFMVUUgICAgKDY0MDAwMDAwVUwpIC8qITwgVmFsdWUgb2YgdGhlIEludGVybmFsIG9zY2lsbGF0b3IgaW4gSHoqLwogI2VuZGlmIC8qIEhTSV9WQUxVRSAqLwogCiAvKioKQEAgLTEzMSwxNiArMTMzLDE2IEBACiAgICogICAgICAgIFRoaXMgdmFsdWUgaXMgdXNlZCBieSB0aGUgVUFSVCwgUlRDIEhBTCBtb2R1bGUgdG8gY29tcHV0ZSB0aGUgc3lzdGVtIGZyZXF1ZW5jeQogICAqLwogI2lmICFkZWZpbmVkICAoTFNFX1ZBTFVFKQotICAjZGVmaW5lIExTRV9WQUxVRSAgICAoKHVpbnQzMl90KTMyNzY4KSAvKiE8IFZhbHVlIG9mIHRoZSBFeHRlcm5hbCBvc2NpbGxhdG9yIGluIEh6Ki8KKyAgI2RlZmluZSBMU0VfVkFMVUUgICAgKDMyNzY4VUwpIC8qITwgVmFsdWUgb2YgdGhlIEV4dGVybmFsIG9zY2lsbGF0b3IgaW4gSHoqLwogI2VuZGlmIC8qIExTRV9WQUxVRSAqLwogCiAKICNpZiAhZGVmaW5lZCAgKExTRV9TVEFSVFVQX1RJTUVPVVQpCi0gICNkZWZpbmUgTFNFX1NUQVJUVVBfVElNRU9VVCAgICAoKHVpbnQzMl90KTUwMDApICAgLyohPCBUaW1lIG91dCBmb3IgTFNFIHN0YXJ0IHVwLCBpbiBtcyAqLworICAjZGVmaW5lIExTRV9TVEFSVFVQX1RJTUVPVVQgICAgKDUwMDBVTCkgICAvKiE8IFRpbWUgb3V0IGZvciBMU0Ugc3RhcnQgdXAsIGluIG1zICovCiAjZW5kaWYgLyogTFNFX1NUQVJUVVBfVElNRU9VVCAqLwogCiAjaWYgIWRlZmluZWQgIChMU0lfVkFMVUUpCi0gICNkZWZpbmUgTFNJX1ZBTFVFICAoKHVpbnQzMl90KTMyMDAwKSAgICAgIC8qITwgTFNJIFR5cGljYWwgVmFsdWUgaW4gSHoqLworICAjZGVmaW5lIExTSV9WQUxVRSAgKDMyMDAwVUwpICAgICAgICAgICAgICAvKiE8IExTSSBUeXBpY2FsIFZhbHVlIGluIEh6Ki8KICNlbmRpZiAvKiBMU0lfVkFMVUUgKi8gICAgICAgICAgICAgICAgICAgICAgLyohPCBWYWx1ZSBvZiB0aGUgSW50ZXJuYWwgTG93IFNwZWVkIG9zY2lsbGF0b3IgaW4gSHoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgcmVhbCB2YWx1ZSBtYXkgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHZhcmlhdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB2b2x0YWdlIGFuZCB0ZW1wZXJhdHVyZS4qLwpAQCAtMTUxLDcgKzE1Myw3IEBACiAgICogICAgICAgIGZyZXF1ZW5jeSwgdGhpcyBzb3VyY2UgaXMgaW5zZXJ0ZWQgZGlyZWN0bHkgdGhyb3VnaCBJMlNfQ0tJTiBwYWQuCiAgICovCiAjaWYgIWRlZmluZWQgIChFWFRFUk5BTF9DTE9DS19WQUxVRSkKLSAgI2RlZmluZSBFWFRFUk5BTF9DTE9DS19WQUxVRSAgICAxMjI4ODAwMFUgLyohPCBWYWx1ZSBvZiB0aGUgRXh0ZXJuYWwgY2xvY2sgaW4gSHoqLworICAjZGVmaW5lIEVYVEVSTkFMX0NMT0NLX1ZBTFVFICAgIDEyMjg4MDAwVUwgLyohPCBWYWx1ZSBvZiB0aGUgRXh0ZXJuYWwgY2xvY2sgaW4gSHoqLwogI2VuZGlmIC8qIEVYVEVSTkFMX0NMT0NLX1ZBTFVFICovCiAKIC8qIFRpcDogVG8gYXZvaWQgbW9kaWZ5aW5nIHRoaXMgZmlsZSBlYWNoIHRpbWUgeW91IG5lZWQgdG8gdXNlIGRpZmZlcmVudCBIU0UsCkBAIC0xNjEsOCArMTYzLDggQEAKIC8qKgogICAqIEBicmllZiBUaGlzIGlzIHRoZSBIQUwgc3lzdGVtIGNvbmZpZ3VyYXRpb24gc2VjdGlvbgogICAqLwotI2RlZmluZSAgVkREX1ZBTFVFICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTMzMDApIC8qITwgVmFsdWUgb2YgVkREIGluIG12ICovCi0jZGVmaW5lICBUSUNLX0lOVF9QUklPUklUWSAgICAgICAgICAgICgodWludDMyX3QpMHgwRikgLyohPCB0aWNrIGludGVycnVwdCBwcmlvcml0eSAqLworI2RlZmluZSAgVkREX1ZBTFVFICAgICAgICAgICAgICAgICAgICAoMzMwMFVMKSAvKiE8IFZhbHVlIG9mIFZERCBpbiBtdiAqLworI2RlZmluZSAgVElDS19JTlRfUFJJT1JJVFkgICAgICAgICAgICAoMHgwRlVMKSAvKiE8IHRpY2sgaW50ZXJydXB0IHByaW9yaXR5ICovCiAjZGVmaW5lICBVU0VfUlRPUyAgICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgIFVTRV9TRF9UUkFOU0NFSVZFUiAgICAgICAgICAgMVUgICAgICAgICAgICAgICAvKiE8IHVzZSB1U0QgVHJhbnNjZWl2ZXIgKi8KICNkZWZpbmUgIFVTRV9TUElfQ1JDICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAvKiE8IHVzZSBDUkMgaW4gU1BJICovCkBAIC0xNzAsNiArMTcyLDcgQEAKICNkZWZpbmUgIFVTRV9IQUxfQURDX1JFR0lTVEVSX0NBTExCQUNLUyAgICAgMFUgLyogQURDIHJlZ2lzdGVyIGNhbGxiYWNrIGRpc2FibGVkICAgICAqLwogI2RlZmluZSAgVVNFX0hBTF9DRUNfUkVHSVNURVJfQ0FMTEJBQ0tTICAgICAwVSAvKiBDRUMgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgICovCiAjZGVmaW5lICBVU0VfSEFMX0NPTVBfUkVHSVNURVJfQ0FMTEJBQ0tTICAgIDBVIC8qIENPTVAgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgKi8KKyNkZWZpbmUgIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyAgMFUgLyogQ09SRElDIHJlZ2lzdGVyIGNhbGxiYWNrIGRpc2FibGVkICAqLyAKICNkZWZpbmUgIFVTRV9IQUxfQ1JZUF9SRUdJU1RFUl9DQUxMQkFDS1MgICAgMFUgLyogQ1JZUCByZWdpc3RlciBjYWxsYmFjayBkaXNhYmxlZCAgICAqLwogI2RlZmluZSAgVVNFX0hBTF9EQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICAgICAwVSAvKiBEQUMgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgICovCiAjZGVmaW5lICBVU0VfSEFMX0RDTUlfUkVHSVNURVJfQ0FMTEJBQ0tTICAgIDBVIC8qIERDTUkgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgKi8KQEAgLTE3OSw2ICsxODIsNyBAQAogI2RlZmluZSAgVVNFX0hBTF9EVFNfUkVHSVNURVJfQ0FMTEJBQ0tTICAgICAwVSAvKiBEVFMgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgICovCiAjZGVmaW5lICBVU0VfSEFMX0VUSF9SRUdJU1RFUl9DQUxMQkFDS1MgICAgIDBVIC8qIEVUSCByZWdpc3RlciBjYWxsYmFjayBkaXNhYmxlZCAgICAgKi8KICNkZWZpbmUgIFVTRV9IQUxfRkRDQU5fUkVHSVNURVJfQ0FMTEJBQ0tTICAgMFUgLyogRkRDQU4gcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAqLworI2RlZmluZSAgVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyAgICAwVSAvKiBGTUFDIHJlZ2lzdGVyIGNhbGxiYWNrIGRpc2FibGVkICAqLyAKICNkZWZpbmUgIFVTRV9IQUxfTkFORF9SRUdJU1RFUl9DQUxMQkFDS1MgICAgMFUgLyogTkFORCByZWdpc3RlciBjYWxsYmFjayBkaXNhYmxlZCAgICAqLwogI2RlZmluZSAgVVNFX0hBTF9OT1JfUkVHSVNURVJfQ0FMTEJBQ0tTICAgICAwVSAvKiBOT1IgcmVnaXN0ZXIgY2FsbGJhY2sgZGlzYWJsZWQgICAgICovCiAjZGVmaW5lICBVU0VfSEFMX1NEUkFNX1JFR0lTVEVSX0NBTExCQUNLUyAgIDBVIC8qIFNEUkFNIHJlZ2lzdGVyIGNhbGxiYWNrIGRpc2FibGVkICAgKi8KQEAgLTIxOCwxMiArMjIyLDEyIEBACiAjZGVmaW5lIEVUSF9UWF9ERVNDX0NOVCAgICAgICAgIDQgIC8qIG51bWJlciBvZiBFdGhlcm5ldCBUeCBETUEgZGVzY3JpcHRvcnMgKi8KICNkZWZpbmUgRVRIX1JYX0RFU0NfQ05UICAgICAgICAgNCAgLyogbnVtYmVyIG9mIEV0aGVybmV0IFJ4IERNQSBkZXNjcmlwdG9ycyAqLwogCi0jZGVmaW5lIEVUSF9NQUNfQUREUjAgICAgKCh1aW50OF90KTB4MDIpCi0jZGVmaW5lIEVUSF9NQUNfQUREUjEgICAgKCh1aW50OF90KTB4MDApCi0jZGVmaW5lIEVUSF9NQUNfQUREUjIgICAgKCh1aW50OF90KTB4MDApCi0jZGVmaW5lIEVUSF9NQUNfQUREUjMgICAgKCh1aW50OF90KTB4MDApCi0jZGVmaW5lIEVUSF9NQUNfQUREUjQgICAgKCh1aW50OF90KTB4MDApCi0jZGVmaW5lIEVUSF9NQUNfQUREUjUgICAgKCh1aW50OF90KTB4MDApCisjZGVmaW5lIEVUSF9NQUNfQUREUjAgICAgKDB4MDJVTCkKKyNkZWZpbmUgRVRIX01BQ19BRERSMSAgICAoMHgwMFVMKQorI2RlZmluZSBFVEhfTUFDX0FERFIyICAgICgweDAwVUwpCisjZGVmaW5lIEVUSF9NQUNfQUREUjMgICAgKDB4MDBVTCkKKyNkZWZpbmUgRVRIX01BQ19BRERSNCAgICAoMHgwMFVMKQorI2RlZmluZSBFVEhfTUFDX0FERFI1ICAgICgweDAwVUwpCiAKIC8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFzc2VydCBTZWxlY3Rpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCiAvKioKQEAgLTMwNiw2ICszMTAsMTAgQEAKICAgI2luY2x1ZGUgInN0bTMyaDd4eF9oYWxfY29tcC5oIgogI2VuZGlmIC8qIEhBTF9DT01QX01PRFVMRV9FTkFCTEVEICovCiAKKyNpZmRlZiBIQUxfQ09SRElDX01PRFVMRV9FTkFCTEVECisgICNpbmNsdWRlICJzdG0zMmg3eHhfaGFsX2NvcmRpYy5oIgorI2VuZGlmIC8qIEhBTF9DT1JESUNfTU9EVUxFX0VOQUJMRUQgKi8KKwogI2lmZGVmIEhBTF9DUkNfTU9EVUxFX0VOQUJMRUQKICAgI2luY2x1ZGUgInN0bTMyaDd4eF9oYWxfY3JjLmgiCiAjZW5kaWYgLyogSEFMX0NSQ19NT0RVTEVfRU5BQkxFRCAqLwpAQCAtMzI2LDYgKzMzNCwxMCBAQAogICAjaW5jbHVkZSAic3RtMzJoN3h4X2hhbF9nZnhtbXUuaCIKICNlbmRpZiAvKiBIQUxfR0ZYTU1VX01PRFVMRV9FTkFCTEVEICovCiAKKyNpZmRlZiBIQUxfRk1BQ19NT0RVTEVfRU5BQkxFRAorICAjaW5jbHVkZSAic3RtMzJoN3h4X2hhbF9mbWFjLmgiCisjZW5kaWYgLyogSEFMX0ZNQUNfTU9EVUxFX0VOQUJMRUQgKi8KKwogI2lmZGVmIEhBTF9IUlRJTV9NT0RVTEVfRU5BQkxFRAogICAjaW5jbHVkZSAic3RtMzJoN3h4X2hhbF9ocnRpbS5oIgogI2VuZGlmIC8qIEhBTF9IUlRJTV9NT0RVTEVfRU5BQkxFRCAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9oYWxfY29yZGljLmggYi9JbmMvc3RtMzJoN3h4X2hhbF9jb3JkaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmI5MjA4Ci0tLSAvZGV2L251bGwKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfY29yZGljLmgKQEAgLTAsMCArMSw1OTkgQEAKKy8qKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAZmlsZSAgICBzdG0zMmg3eHhfaGFsX2NvcmRpYy5oCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIENPUkRJQyBmaXJtd2FyZQorICAqICAgICAgICAgIGxpYnJhcnkuCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBhdHRlbnRpb24KKyAgKgorICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgorICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9jZW50ZXI+PC9oMj4KKyAgKgorICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAorICAqIHRoZSAiTGljZW5zZSI7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKKyAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQ6CisgICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKi8KKworLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZm5kZWYgU1RNMzJIN3h4X0hBTF9DT1JESUNfSAorI2RlZmluZSBTVE0zMkg3eHhfSEFMX0NPUkRJQ19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpbmNsdWRlICJzdG0zMmg3eHhfaGFsX2RlZi5oIgorCisjaWYgZGVmaW5lZChDT1JESUMpCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJIN3h4X0hBTF9Ecml2ZXIKKyAgKiBAeworICAqLworCisvKiogQGFkZHRvZ3JvdXAgQ09SRElDCisgICogQHsKKyAgKi8KKworLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0V4cG9ydGVkX1R5cGVzIENPUkRJQyBFeHBvcnRlZCBUeXBlcworICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgQ09SRElDIEhBTCBTdGF0ZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgorICAqLwordHlwZWRlZiBlbnVtCit7CisgIEhBTF9DT1JESUNfU1RBVEVfUkVTRVQgICAgID0gMHgwMFUsICAvKiE8IENPUkRJQyBub3QgeWV0IGluaXRpYWxpemVkIG9yIGRpc2FibGVkICovCisgIEhBTF9DT1JESUNfU1RBVEVfUkVBRFkgICAgID0gMHgwMVUsICAvKiE8IENPUkRJQyBpbml0aWFsaXplZCBhbmQgcmVhZHkgZm9yIHVzZSAgICovCisgIEhBTF9DT1JESUNfU1RBVEVfQlVTWSAgICAgID0gMHgwMlUsICAvKiE8IENPUkRJQyBpbnRlcm5hbCBwcm9jZXNzIGlzIG9uZ29pbmcgICAgICovCisgIEhBTF9DT1JESUNfU1RBVEVfRVJST1IgICAgID0gMHgwM1UgICAvKiE8IENPUkRJQyBlcnJvciBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICovCit9IEhBTF9DT1JESUNfU3RhdGVUeXBlRGVmOworCisvKioKKyAgKiBAYnJpZWYgIENPUkRJQyBIYW5kbGUgU3RydWN0dXJlIGRlZmluaXRpb24KKyAgKi8KKyNpZiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMQordHlwZWRlZiBzdHJ1Y3QgX19DT1JESUNfSGFuZGxlVHlwZURlZgorI2Vsc2UKK3R5cGVkZWYgc3RydWN0CisjZW5kaWYgLyogVVNFX0hBTF9DT1JESUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCit7CisgIENPUkRJQ19UeXBlRGVmICAgICAgICAgICAgICAgICpJbnN0YW5jZTsgICAvKiE8IFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworCisgIGludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICpwSW5CdWZmOyAgICAvKiE8IFBvaW50ZXIgdG8gQ09SRElDIGlucHV0IGRhdGEgYnVmZmVyICovCisKKyAgaW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgKnBPdXRCdWZmOyAgIC8qITwgUG9pbnRlciB0byBDT1JESUMgb3V0cHV0IGRhdGEgYnVmZmVyICovCisKKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgTmJDYWxjVG9PcmRlcjsgLyohPCBSZW1haW5pbmcgbnVtYmVyIG9mIGNhbGN1bGF0aW9uIHRvIG9yZGVyICovCisKKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgTmJDYWxjVG9HZXQ7IC8qITwgUmVtYWluaW5nIG51bWJlciBvZiBjYWxjdWxhdGlvbiByZXN1bHQgdG8gZ2V0ICovCisKKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgRE1BRGlyZWN0aW9uOyAvKiE8IERpcmVjdGlvbiBvZiBDT1JESUMgRE1BIHRyYW5zZmVycyAqLworCisgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgICpoZG1hSW47ICAgICAvKiE8IENPUkRJQyBwZXJpcGhlcmFsIGlucHV0IGRhdGEgRE1BIGhhbmRsZSBwYXJhbWV0ZXJzICovCisKKyAgRE1BX0hhbmRsZVR5cGVEZWYgICAgICAgICAgICAgKmhkbWFPdXQ7ICAgIC8qITwgQ09SRElDIHBlcmlwaGVyYWwgb3V0cHV0IGRhdGEgRE1BIGhhbmRsZSBwYXJhbWV0ZXJzICovCisKKyAgSEFMX0xvY2tUeXBlRGVmICAgICAgICAgICAgICAgTG9jazsgICAgICAgIC8qITwgQ09SRElDIGxvY2tpbmcgb2JqZWN0ICovCisKKyAgX19JTyBIQUxfQ09SRElDX1N0YXRlVHlwZURlZiAgU3RhdGU7ICAgICAgIC8qITwgQ09SRElDIHN0YXRlICovCisKKyAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgICAgRXJyb3JDb2RlOyAgIC8qITwgQ09SRElDIHBlcmlwaGVyYWwgZXJyb3IgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENPUkRJQ19FcnJvcl9Db2RlICovCisKKyNpZiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMQorICB2b2lkICgqIEVycm9yQ2FsbGJhY2spKHN0cnVjdCBfX0NPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKTsgICAgICAgICAgLyohPCBDT1JESUMgZXJyb3IgY2FsbGJhY2sgKi8KKyAgdm9pZCAoKiBDYWxjdWxhdGVDcGx0Q2FsbGJhY2spKHN0cnVjdCBfX0NPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKTsgIC8qITwgQ09SRElDIGNhbGN1bGF0ZSBjb21wbGV0ZSBjYWxsYmFjayAqLworCisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19DT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYyk7ICAgICAgICAvKiE8IENPUkRJQyBNc3AgSW5pdCBjYWxsYmFjayAqLworICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19DT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYyk7ICAgICAgLyohPCBDT1JESUMgTXNwIERlSW5pdCBjYWxsYmFjayAqLworCisjZW5kaWYgLyogKFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KKworfSBDT1JESUNfSGFuZGxlVHlwZURlZjsKKworLyoqCisgICogQGJyaWVmICBDT1JESUMgQ29uZmlnIFN0cnVjdHVyZSBkZWZpbml0aW9uCisgICovCit0eXBlZGVmIHN0cnVjdAoreworICB1aW50MzJfdCAgIEZ1bmN0aW9uOyAgICAgLyohPCBGdW5jdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENPUkRJQ19GdW5jdGlvbiAqLworCisgIHVpbnQzMl90ICAgU2NhbGU7ICAgICAgICAvKiE8IFNjYWxpbmcgZmFjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQ09SRElDX1NjYWxlICovCisKKyAgdWludDMyX3QgICBJblNpemU7ICAgICAgIC8qITwgV2lkdGggb2YgaW5wdXQgZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENPUkRJQ19Jbl9TaXplICovCisKKyAgdWludDMyX3QgICBPdXRTaXplOyAgICAgIC8qITwgV2lkdGggb2Ygb3V0cHV0IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBDT1JESUNfT3V0X1NpemUgKi8KKworICB1aW50MzJfdCAgIE5iV3JpdGU7ICAgICAgLyohPCBOdW1iZXIgb2YgMzItYml0IHdyaXRlIGV4cGVjdGVkIGZvciBvbmUgY2FsY3VsYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBDT1JESUNfTmJfV3JpdGUgKi8KKworICB1aW50MzJfdCAgIE5iUmVhZDsgICAgICAgLyohPCBOdW1iZXIgb2YgMzItYml0IHJlYWQgZXhwZWN0ZWQgYWZ0ZXIgb25lIGNhbGN1bGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgQ09SRElDX05iX1JlYWQgKi8KKworICB1aW50MzJfdCAgIFByZWNpc2lvbjsgICAgLyohPCBOdW1iZXIgb2YgY3ljbGVzIGZvciBjYWxjdWxhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENPUkRJQ19QcmVjaXNpb25fSW5fQ3ljbGVzX051bWJlciAqLworCit9IENPUkRJQ19Db25maWdUeXBlRGVmOworCisjaWYgVVNFX0hBTF9DT1JESUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEKKy8qKgorICAqIEBicmllZiAgSEFMIENPUkRJQyBDYWxsYmFjayBJRCBlbnVtZXJhdGlvbiBkZWZpbml0aW9uCisgICovCit0eXBlZGVmIGVudW0KK3sKKyAgSEFMX0NPUkRJQ19FUlJPUl9DQl9JRCAgICAgICAgICAgICA9IDB4MDBVLCAgICAvKiE8IENPUkRJQyBlcnJvciBjYWxsYmFjayBJRCAqLworICBIQUxfQ09SRElDX0NBTENVTEFURV9DUExUX0NCX0lEICAgID0gMHgwMVUsICAgIC8qITwgQ09SRElDIGNhbGN1bGF0ZSBjb21wbGV0ZSBjYWxsYmFjayBJRCAqLworCisgIEhBTF9DT1JESUNfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgPSAweDAyVSwgICAgLyohPCBDT1JESUMgTXNwSW5pdCBjYWxsYmFjayBJRCAqLworICBIQUxfQ09SRElDX01TUERFSU5JVF9DQl9JRCAgICAgICAgID0gMHgwM1UsICAgIC8qITwgQ09SRElDIE1zcERlSW5pdCBjYWxsYmFjayBJRCAqLworCit9IEhBTF9DT1JESUNfQ2FsbGJhY2tJRFR5cGVEZWY7CisKKy8qKgorICAqIEBicmllZiAgSEFMIENPUkRJQyBDYWxsYmFjayBwb2ludGVyIGRlZmluaXRpb24KKyAgKi8KK3R5cGVkZWYgIHZvaWQgKCpwQ09SRElDX0NhbGxiYWNrVHlwZURlZikoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMpOyAgLyohPCBwb2ludGVyIHRvIGEgQ09SRElDIGNhbGxiYWNrIGZ1bmN0aW9uICovCisKKyNlbmRpZiAvKiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBDT1JESUNfRXhwb3J0ZWRfQ29uc3RhbnRzIENPUkRJQyBFeHBvcnRlZCBDb25zdGFudHMKKyAgKiBAeworICAqLworCisvKiogQGRlZmdyb3VwIENPUkRJQ19FcnJvcl9Db2RlIENPUkRJQyBFcnJvciBjb2RlCisgICogQHsKKyAgKi8KKyNkZWZpbmUgSEFMX0NPUkRJQ19FUlJPUl9OT05FICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAgIC8qITwgTm8gZXJyb3IgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX0NPUkRJQ19FUlJPUl9QQVJBTSAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDFVKSAgIC8qITwgV3JvbmcgcGFyYW1ldGVyIGVycm9yICAgKi8KKyNkZWZpbmUgSEFMX0NPUkRJQ19FUlJPUl9OT1RfUkVBRFkgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDJVKSAgIC8qITwgUGVyaXBoZXJhbCBub3QgcmVhZHkgICAgKi8KKyNkZWZpbmUgSEFMX0NPUkRJQ19FUlJPUl9USU1FT1VUICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDRVKSAgIC8qITwgVGltZW91dCBlcnJvciAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX0NPUkRJQ19FUlJPUl9ETUEgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDhVKSAgIC8qITwgRE1BIGVycm9yICAgICAgICAgICAgICAgKi8KKyNpZiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMQorI2RlZmluZSBIQUxfQ09SRElDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0sgICgodWludDMyX3QpMHgwMDAwMDAxMFUpICAgLyohPCBJbnZhbGlkIENhbGxiYWNrIGVycm9yICAqLworI2VuZGlmIC8qIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfRnVuY3Rpb24gQ09SRElDIEZ1bmN0aW9uCisgICogQHsKKyAgKi8KKyNkZWZpbmUgQ09SRElDX0ZVTkNUSU9OX0NPU0lORSAgICAgICgweDAwMDAwMDAwVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3NpbmUgKi8KKyNkZWZpbmUgQ09SRElDX0ZVTkNUSU9OX1NJTkUgICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfRlVOQ18wKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTaW5lICovCisjZGVmaW5lIENPUkRJQ19GVU5DVElPTl9QSEFTRSAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX0ZVTkNfMSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgUGhhc2UgKi8KKyNkZWZpbmUgQ09SRElDX0ZVTkNUSU9OX01PRFVMVVMgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfRlVOQ18xIHwgQ09SRElDX0NTUl9GVU5DXzApKSAgICAgICAgICAgICAgICAgICAgLyohPCBNb2R1bHVzICovCisjZGVmaW5lIENPUkRJQ19GVU5DVElPTl9BUkNUQU5HRU5UICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX0ZVTkNfMikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQXJjdGFuZ2VudCAqLworI2RlZmluZSBDT1JESUNfRlVOQ1RJT05fSENPU0lORSAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9GVU5DXzIgfCBDT1JESUNfQ1NSX0ZVTkNfMCkpICAgICAgICAgICAgICAgICAgICAvKiE8IEh5cGVyYm9saWMgQ29zaW5lICovCisjZGVmaW5lIENPUkRJQ19GVU5DVElPTl9IU0lORSAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX0ZVTkNfMiB8IENPUkRJQ19DU1JfRlVOQ18xKSkgICAgICAgICAgICAgICAgICAgIC8qITwgSHlwZXJib2xpYyBTaW5lICovCisjZGVmaW5lIENPUkRJQ19GVU5DVElPTl9IQVJDVEFOR0VOVCAoKHVpbnQzMl90KShDT1JESUNfQ1NSX0ZVTkNfMiB8IENPUkRJQ19DU1JfRlVOQ18xIHwgQ09SRElDX0NTUl9GVU5DXzApKS8qITwgSHlwZXJib2xpYyBBcmN0YW5nZW50ICovCisjZGVmaW5lIENPUkRJQ19GVU5DVElPTl9OQVRVUkFMTE9HICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX0ZVTkNfMykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTmF0dXJhbCBMb2dhcml0aG0gKi8KKyNkZWZpbmUgQ09SRElDX0ZVTkNUSU9OX1NRVUFSRVJPT1QgICgodWludDMyX3QpKENPUkRJQ19DU1JfRlVOQ18zIHwgQ09SRElDX0NTUl9GVU5DXzApKSAgICAgICAgICAgICAgICAgICAgLyohPCBTcXVhcmUgUm9vdCAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfUHJlY2lzaW9uX0luX0N5Y2xlc19OdW1iZXIgQ09SRElDIFByZWNpc2lvbiBpbiBDeWNsZXMgTnVtYmVyCisgICogQHsKKyAgKi8KKy8qIE5vdGU6IDEgY3ljbGUgY29ycmVzcG9uZHMgdG8gNCBhbGdvcml0aG0gaXRlcmF0aW9ucyAqLworI2RlZmluZSBDT1JESUNfUFJFQ0lTSU9OXzFDWUNMRSAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMCkpCisjZGVmaW5lIENPUkRJQ19QUkVDSVNJT05fMkNZQ0xFUyAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1BSRUNJU0lPTl8xKSkKKyNkZWZpbmUgQ09SRElDX1BSRUNJU0lPTl8zQ1lDTEVTICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfUFJFQ0lTSU9OXzEgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8wKSkKKyNkZWZpbmUgQ09SRElDX1BSRUNJU0lPTl80Q1lDTEVTICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfUFJFQ0lTSU9OXzIpKQorI2RlZmluZSBDT1JESUNfUFJFQ0lTSU9OXzVDWUNMRVMgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMiB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzApKQorI2RlZmluZSBDT1JESUNfUFJFQ0lTSU9OXzZDWUNMRVMgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMiB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzEpKQorI2RlZmluZSBDT1JESUNfUFJFQ0lTSU9OXzdDWUNMRVMgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMiB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzEgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8wKSkKKyNkZWZpbmUgQ09SRElDX1BSRUNJU0lPTl84Q1lDTEVTICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfUFJFQ0lTSU9OXzMpKQorI2RlZmluZSBDT1JESUNfUFJFQ0lTSU9OXzlDWUNMRVMgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMyB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzApKQorI2RlZmluZSBDT1JESUNfUFJFQ0lTSU9OXzEwQ1lDTEVTICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMyB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzEpKQorI2RlZmluZSBDT1JESUNfUFJFQ0lTSU9OXzExQ1lDTEVTICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMyB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzEgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8wKSkKKyNkZWZpbmUgQ09SRElDX1BSRUNJU0lPTl8xMkNZQ0xFUyAgICgodWludDMyX3QpKENPUkRJQ19DU1JfUFJFQ0lTSU9OXzMgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8yKSkKKyNkZWZpbmUgQ09SRElDX1BSRUNJU0lPTl8xM0NZQ0xFUyAgICgodWludDMyX3QpKENPUkRJQ19DU1JfUFJFQ0lTSU9OXzMgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8yIHwgQ09SRElDX0NTUl9QUkVDSVNJT05fMCkpCisjZGVmaW5lIENPUkRJQ19QUkVDSVNJT05fMTRDWUNMRVMgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1BSRUNJU0lPTl8zIHwgQ09SRElDX0NTUl9QUkVDSVNJT05fMiB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzEpKQorI2RlZmluZSBDT1JESUNfUFJFQ0lTSU9OXzE1Q1lDTEVTICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMyB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzIgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8xIHwgQ09SRElDX0NTUl9QUkVDSVNJT05fMCkpCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIENPUkRJQ19TY2FsZSBDT1JESUMgU2NhbGluZyBmYWN0b3IKKyAgKiBAeworICAqLworLyogU2NhbGUgZmFjdG9yIHZhbHVlICduJyBpbXBsaWVzIHRoYXQgdGhlIGlucHV0IGRhdGEgaGF2ZSBiZWVuIG11bHRpcGxpZWQKKyAgIGJ5IGEgZmFjdG9yIDJleHAoLW4pLCBhbmQvb3IgdGhlIG91dHB1dCBkYXRhIG5lZWQgdG8gYmUgbXVsdGlwbGllZCBieSAyZXhwKG4pLiAqLworI2RlZmluZSBDT1JESUNfU0NBTEVfMCAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBDT1JESUNfU0NBTEVfMSAgICAgICAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9TQ0FMRV8wKSkKKyNkZWZpbmUgQ09SRElDX1NDQUxFXzIgICAgICAgICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfU0NBTEVfMSkpCisjZGVmaW5lIENPUkRJQ19TQ0FMRV8zICAgICAgICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1NDQUxFXzEgfCBDT1JESUNfQ1NSX1NDQUxFXzApKQorI2RlZmluZSBDT1JESUNfU0NBTEVfNCAgICAgICAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9TQ0FMRV8yKSkKKyNkZWZpbmUgQ09SRElDX1NDQUxFXzUgICAgICAgICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfU0NBTEVfMiB8IENPUkRJQ19DU1JfU0NBTEVfMCkpCisjZGVmaW5lIENPUkRJQ19TQ0FMRV82ICAgICAgICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1NDQUxFXzIgfCBDT1JESUNfQ1NSX1NDQUxFXzEpKQorI2RlZmluZSBDT1JESUNfU0NBTEVfNyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9TQ0FMRV8yIHwgQ09SRElDX0NTUl9TQ0FMRV8xIHwgQ09SRElDX0NTUl9TQ0FMRV8wKSkKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0ludGVycnVwdHNfRW5hYmxlIENPUkRJQyBJbnRlcnJ1cHRzIEVuYWJsZSBiaXQKKyAgKiBAeworICAqLworI2RlZmluZSBDT1JESUNfSVRfSUVOICAgICAgICAgICAgICBDT1JESUNfQ1NSX0lFTiAgICAgICAgICAgIC8qITwgUmVzdWx0IHJlYWR5IGludGVycnVwdCBlbmFibGUgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0RNQVIgRE1BIFJlYWQgUmVxdWVzdCBFbmFibGUgYml0CisgICogQHsKKyAgKi8KKyNkZWZpbmUgQ09SRElDX0RNQV9SRU4gICAgICAgICAgICAgQ09SRElDX0NTUl9ETUFSRU4gICAgICAgICAvKiE8IERNQSBSZWFkIHJlcXVlc3RzIGVuYWJsZSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfRE1BVyBETUEgV3JpdGUgUmVxdWVzdCBFbmFibGUgYml0CisgICogQHsKKyAgKi8KKyNkZWZpbmUgQ09SRElDX0RNQV9XRU4gICAgICAgICAgICAgQ09SRElDX0NTUl9ETUFXRU4gICAgICAgICAvKiE8IERNQSBXcml0ZSBjaGFubmVsIGVuYWJsZSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfTmJfV3JpdGUgQ09SRElDIE51bWJlciBvZiAzMi1iaXQgd3JpdGUgcmVxdWlyZWQgZm9yIG9uZSBjYWxjdWxhdGlvbgorICAqIEB7CisgICovCisjZGVmaW5lIENPUkRJQ19OQldSSVRFXzEgICAgICAgICAgICgweDAwMDAwMDAwVSkgICAgICAgICAgICAgLyohPCBPbmUgMzItYml0cyB3cml0ZSBjb250YWluaW5nIGVpdGhlciBvbmx5IG9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzItYml0IGRhdGEgaW5wdXQgKFExLjMxIGZvcm1hdCksIG9yIHR3byAxNi1iaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgaW5wdXQgKFExLjE1IGZvcm1hdCkgcGFja2VkIGluIG9uZSAzMiBiaXRzIERhdGEgKi8KKyNkZWZpbmUgQ09SRElDX05CV1JJVEVfMiAgICAgICAgICAgQ09SRElDX0NTUl9OQVJHUyAgICAgICAgICAvKiE8IFR3byAzMi1iaXQgd3JpdGUgY29udGFpbmluZyB0d28gMzItYml0cyBkYXRhIGlucHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUTEuMzEgZm9ybWF0KSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfTmJfUmVhZCBDT1JESUMgTnVtYmVyIG9mIDMyLWJpdCByZWFkIHJlcXVpcmVkIGFmdGVyIG9uZSBjYWxjdWxhdGlvbgorICAqIEB7CisgICovCisjZGVmaW5lIENPUkRJQ19OQlJFQURfMSAgICAgICAgICAgICgweDAwMDAwMDAwVSkgICAgICAgICAgICAgLyohPCBPbmUgMzItYml0cyByZWFkIGNvbnRhaW5pbmcgZWl0aGVyIG9ubHkgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMi1iaXQgZGF0YSBvdXB1dCAoUTEuMzEgZm9ybWF0KSwgb3IgdHdvIDE2LWJpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBvdXRwdXQgKFExLjE1IGZvcm1hdCkgcGFja2VkIGluIG9uZSAzMiBiaXRzIERhdGEgKi8KKyNkZWZpbmUgQ09SRElDX05CUkVBRF8yICAgICAgICAgICAgQ09SRElDX0NTUl9OUkVTICAgICAgICAgICAvKiE8IFR3byAzMi1iaXQgRGF0YSBjb250YWluaW5nIHR3byAzMi1iaXRzIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUTEuMzEgZm9ybWF0KSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfSW5fU2l6ZSBDT1JESUMgaW5wdXQgZGF0YSBzaXplCisgICogQHsKKyAgKi8KKyNkZWZpbmUgQ09SRElDX0lOU0laRV8zMkJJVFMgICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAgICAgICAvKiE8IDMyIGJpdHMgaW5wdXQgZGF0YSBzaXplIChRMS4zMSBmb3JtYXQpICovCisjZGVmaW5lIENPUkRJQ19JTlNJWkVfMTZCSVRTICAgICAgIENPUkRJQ19DU1JfQVJHU0laRSAgICAgICAgLyohPCAxNiBiaXRzIGlucHV0IGRhdGEgc2l6ZSAoUTEuMTUgZm9ybWF0KSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfT3V0X1NpemUgQ09SRElDIFJlc3VsdHMgU2l6ZQorICAqIEB7CisgICovCisjZGVmaW5lIENPUkRJQ19PVVRTSVpFXzMyQklUUyAgICAgICgweDAwMDAwMDAwVSkgICAgICAgICAgICAgLyohPCAzMiBiaXRzIG91dHB1dCBkYXRhIHNpemUgKFExLjMxIGZvcm1hdCkgKi8KKyNkZWZpbmUgQ09SRElDX09VVFNJWkVfMTZCSVRTICAgICAgQ09SRElDX0NTUl9SRVNTSVpFICAgICAgICAvKiE8IDE2IGJpdHMgb3V0cHV0IGRhdGEgc2l6ZSAoUTEuMTUgZm9ybWF0KSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfRmxhZ3MgIENPUkRJQyBzdGF0dXMgZmxhZ3MKKyAgKiBAeworICAqLworI2RlZmluZSBDT1JESUNfRkxBR19SUkRZICAgICAgICAgICBDT1JESUNfQ1NSX1JSRFkgICAgICAgICAgIC8qITwgUmVzdWx0IFJlYWR5IEZsYWcgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0RNQV9EaXJlY3Rpb24gQ09SRElDIERNQSBkaXJlY3Rpb24KKyAgKiBAeworICAqLworI2RlZmluZSBDT1JESUNfRE1BX0RJUl9OT05FICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAgIC8qITwgRE1BIGRpcmVjdGlvbiA6IG5vbmUgKi8KKyNkZWZpbmUgQ09SRElDX0RNQV9ESVJfSU4gICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxVSkgICAvKiE8IERNQSBkaXJlY3Rpb24gOiBJbnB1dCBvZiBDT1JESUMgKi8KKyNkZWZpbmUgQ09SRElDX0RNQV9ESVJfT1VUICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyVSkgICAvKiE8IERNQSBkaXJlY3Rpb24gOiBPdXRwdXQgb2YgQ09SRElDICovCisjZGVmaW5lIENPUkRJQ19ETUFfRElSX0lOX09VVCAgICAgICgodWludDMyX3QpMHgwMDAwMDAwM1UpICAgLyohPCBETUEgZGlyZWN0aW9uIDogSW5wdXQgYW5kIE91dHB1dCBvZiBDT1JESUMgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKworLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0V4cG9ydGVkX01hY3JvcyBDT1JESUMgRXhwb3J0ZWQgTWFjcm9zCisgICogQHsKKyAgKi8KKworLyoqIEBicmllZiAgUmVzZXQgQ09SRElDIGhhbmRsZSBzdGF0ZS4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gQ09SRElDIGhhbmRsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworI2lmIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxCisjZGVmaW5lIF9fSEFMX0NPUkRJQ19SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfQ09SRElDX1NUQVRFX1JFU0VUOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgX19IQUxfQ09SRElDX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9DT1JESUNfU1RBVEVfUkVTRVQpCisjZW5kaWYgLypVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgdGhlIENPUkRJQyBpbnRlcnJ1cHQgd2hlbiByZXN1bHQgaXMgcmVhZHkKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gQ09SRElDIGhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gQ09SRElDIEludGVycnVwdC4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEByZWYgQ09SRElDX0lUX0lFTiBFbmFibGUgSW50ZXJydXB0CisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIF9fSEFMX0NPUkRJQ19FTkFCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNTUikgfD0gKF9fSU5URVJSVVBUX18pKQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgdGhlIENPUkRJQyBpbnRlcnJ1cHQKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gQ09SRElDIGhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gQ09SRElDIEludGVycnVwdC4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEByZWYgQ09SRElDX0lUX0lFTiBFbmFibGUgSW50ZXJydXB0CisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIF9fSEFMX0NPUkRJQ19ESVNBQkxFX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1NSKSAmPSB+KF9fSU5URVJSVVBUX18pKQorCisvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgQ09SRElDIGludGVycnVwdCBvY2N1cnJlZCBvciBub3QuCisgICAgICAgICAgICBEdW1teSBtYWNybyBhcyBubyBpbnRlcnJ1cHQgc3RhdHVzIGZsYWcuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIENPUkRJQyBoYW5kbGUuCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIENPUkRJQyBpbnRlcnJ1cHQgdG8gY2hlY2sKKyAgKiBAcmV0dmFsIFNFVCAoaW50ZXJydXB0IG9jY3VycmVkKSBvciBSRVNFVCAoaW50ZXJydXB0IGRpZCBub3Qgb2NjdXJyZWQpCisgICovCisjZGVmaW5lIF9fSEFMX0NPUkRJQ19HRVRfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgIC8qIER1bW15IG1hY3JvICovCisKKy8qKiBAYnJpZWYgIENsZWFyIHNwZWNpZmllZCBDT1JESUMgaW50ZXJydXB0IHN0YXR1cy4gRHVtbXkgbWFjcm8gYXMgbm8KKyAgICAgICAgICAgIGludGVycnVwdCBzdGF0dXMgZmxhZy4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gQ09SRElDIGhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gQ09SRElDIGludGVycnVwdCB0byBjbGVhcgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9DT1JESUNfQ0xFQVJfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAvKiBEdW1teSBtYWNybyAqLworCisvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgQ09SRElDIHN0YXR1cyBmbGFnIGlzIHNldCBvciBub3QuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIENPUkRJQyBoYW5kbGUuCisgICogQHBhcmFtICBfX0ZMQUdfXyBDT1JESUMgZmxhZyB0byBjaGVjaworICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBDT1JESUNfRkxBR19SUkRZIFJlc3VsdCBSZWFkeSBGbGFnCisgICogQHJldHZhbCBTRVQgKGZsYWcgaXMgc2V0KSBvciBSRVNFVCAoZmxhZyBpcyByZXNldCkKKyAgKi8KKyNkZWZpbmUgX19IQUxfQ09SRElDX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1NSKSAmIChfX0ZMQUdfXykpID09IChfX0ZMQUdfXykpCisKKy8qKiBAYnJpZWYgIENsZWFyIHNwZWNpZmllZCBDT1JESUMgc3RhdHVzIGZsYWcuIER1bW15IG1hY3JvIGFzIG5vCisgICAgICAgICAgICBmbGFnIGNhbiBiZSBjbGVhcmVkLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBDT1JESUMgaGFuZGxlLgorICAqIEBwYXJhbSAgX19GTEFHX18gQ09SRElDIGZsYWcgdG8gY2xlYXIKKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEByZWYgQ09SRElDX0ZMQUdfUlJEWSBSZXN1bHQgUmVhZHkgRmxhZworICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9DT1JESUNfQ0xFQVJfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgICAgIC8qIER1bW15IG1hY3JvICovCisKKy8qKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBDT1JESUMgaW50ZXJydXB0IGlzIGVuYWJsZWQgb3Igbm90LgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBDT1JESUMgaGFuZGxlLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBDT1JESUMgaW50ZXJydXB0IHRvIGNoZWNrCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBAcmVmIENPUkRJQ19JVF9JRU4gRW5hYmxlIEludGVycnVwdAorICAqIEByZXR2YWwgRmxhZ1N0YXR1cworICAqLworI2RlZmluZSBfX0hBTF9DT1JESUNfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNTUikgJiAoX19JTlRFUlJVUFRfXykpCisKKy8qKgorICAqIEB9CisgICovCisKKy8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgIENPUkRJQ19Qcml2YXRlX01hY3JvcyAgIENPUkRJQyBQcml2YXRlIE1hY3JvcworICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBDT1JESUMgZnVuY3Rpb24uCisgICogQHBhcmFtICBfX0ZVTkNUSU9OX18gTmFtZSBvZiB0aGUgZnVuY3Rpb24uCisgICogQHJldHZhbCBTRVQgKF9fRlVOQ1RJT05fXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19GVU5DVElPTl9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0NPUkRJQ19GVU5DVElPTihfX0ZVTkNUSU9OX18pICgoKF9fRlVOQ1RJT05fXykgPT0gQ09SRElDX0ZVTkNUSU9OX0NPU0lORSkgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZVTkNUSU9OX18pID09IENPUkRJQ19GVU5DVElPTl9TSU5FKSAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GVU5DVElPTl9fKSA9PSBDT1JESUNfRlVOQ1RJT05fUEhBU0UpICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlVOQ1RJT05fXykgPT0gQ09SRElDX0ZVTkNUSU9OX01PRFVMVVMpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZVTkNUSU9OX18pID09IENPUkRJQ19GVU5DVElPTl9BUkNUQU5HRU5UKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GVU5DVElPTl9fKSA9PSBDT1JESUNfRlVOQ1RJT05fSENPU0lORSkgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlVOQ1RJT05fXykgPT0gQ09SRElDX0ZVTkNUSU9OX0hTSU5FKSAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZVTkNUSU9OX18pID09IENPUkRJQ19GVU5DVElPTl9IQVJDVEFOR0VOVCkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GVU5DVElPTl9fKSA9PSBDT1JESUNfRlVOQ1RJT05fTkFUVVJBTExPRykgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlVOQ1RJT05fXykgPT0gQ09SRElDX0ZVTkNUSU9OX1NRVUFSRVJPT1QpKQorCisKKy8qKgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBDT1JESUMgcHJlY2lzaW9uLgorICAqIEBwYXJhbSAgX19QUkVDSVNJT05fXyBDT1JESUMgUHJlY2lzaW9uIGluIEN5Y2xlcyBOdW1iZXIuCisgICogQHJldHZhbCBTRVQgKF9fUFJFQ0lTSU9OX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fUFJFQ0lTSU9OX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfQ09SRElDX1BSRUNJU0lPTihfX1BSRUNJU0lPTl9fKSAoKChfX1BSRUNJU0lPTl9fKSA9PSBDT1JESUNfUFJFQ0lTSU9OXzFDWUNMRSkgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QUkVDSVNJT05fXykgPT0gQ09SRElDX1BSRUNJU0lPTl8yQ1lDTEVTKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUFJFQ0lTSU9OX18pID09IENPUkRJQ19QUkVDSVNJT05fM0NZQ0xFUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BSRUNJU0lPTl9fKSA9PSBDT1JESUNfUFJFQ0lTSU9OXzRDWUNMRVMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QUkVDSVNJT05fXykgPT0gQ09SRElDX1BSRUNJU0lPTl81Q1lDTEVTKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUFJFQ0lTSU9OX18pID09IENPUkRJQ19QUkVDSVNJT05fNkNZQ0xFUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BSRUNJU0lPTl9fKSA9PSBDT1JESUNfUFJFQ0lTSU9OXzdDWUNMRVMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QUkVDSVNJT05fXykgPT0gQ09SRElDX1BSRUNJU0lPTl84Q1lDTEVTKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUFJFQ0lTSU9OX18pID09IENPUkRJQ19QUkVDSVNJT05fOUNZQ0xFUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BSRUNJU0lPTl9fKSA9PSBDT1JESUNfUFJFQ0lTSU9OXzEwQ1lDTEVTKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QUkVDSVNJT05fXykgPT0gQ09SRElDX1BSRUNJU0lPTl8xMUNZQ0xFUykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUFJFQ0lTSU9OX18pID09IENPUkRJQ19QUkVDSVNJT05fMTJDWUNMRVMpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BSRUNJU0lPTl9fKSA9PSBDT1JESUNfUFJFQ0lTSU9OXzEzQ1lDTEVTKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QUkVDSVNJT05fXykgPT0gQ09SRElDX1BSRUNJU0lPTl8xNENZQ0xFUykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUFJFQ0lTSU9OX18pID09IENPUkRJQ19QUkVDSVNJT05fMTVDWUNMRVMpKQorCisvKioKKyAgKiBAYnJpZWYgIFZlcmlmeSB0aGUgQ09SRElDIHNjYWxpbmcgZmFjdG9yLgorICAqIEBwYXJhbSAgX19TQ0FMRV9fIE51bWJlciBvZiBjeWNsZXMgZm9yIGNhbGN1bGF0aW9uLCAxIGN5Y2xlIGNvcnJlc3BvbmRpbmcgdG8gNCBhbGdvcml0aG0gaXRlcmF0aW9ucy4KKyAgKiBAcmV0dmFsIFNFVCAoX19TQ0FMRV9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX1NDQUxFX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfQ09SRElDX1NDQUxFKF9fU0NBTEVfXykgKCgoX19TQ0FMRV9fKSA9PSBDT1JESUNfU0NBTEVfMCkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TQ0FMRV9fKSA9PSBDT1JESUNfU0NBTEVfMSkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TQ0FMRV9fKSA9PSBDT1JESUNfU0NBTEVfMikgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TQ0FMRV9fKSA9PSBDT1JESUNfU0NBTEVfMykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TQ0FMRV9fKSA9PSBDT1JESUNfU0NBTEVfNCkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TQ0FMRV9fKSA9PSBDT1JESUNfU0NBTEVfNSkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TQ0FMRV9fKSA9PSBDT1JESUNfU0NBTEVfNikgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TQ0FMRV9fKSA9PSBDT1JESUNfU0NBTEVfNykpCisKKy8qKgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBDT1JESUMgbnVtYmVyIG9mIDMyLWJpdHMgd3JpdGUgZXhwZWN0ZWQgZm9yIG9uZSBjYWxjdWxhdGlvbi4KKyAgKiBAcGFyYW0gIF9fTkJXUklURV9fIE51bWJlciBvZiAzMi1iaXRzIHdyaXRlIGV4cGVjdGVkIGZvciBvbmUgY2FsY3VsYXRpb24uCisgICogQHJldHZhbCBTRVQgKF9fTkJXUklURV9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX05CV1JJVEVfXyBpcyBpbnZhbGlkKQorICAqLworI2RlZmluZSBJU19DT1JESUNfTkJXUklURShfX05CV1JJVEVfXykgKCgoX19OQldSSVRFX18pID09IENPUkRJQ19OQldSSVRFXzEpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX05CV1JJVEVfXykgPT0gQ09SRElDX05CV1JJVEVfMikpCisKKy8qKgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBDT1JESUMgbnVtYmVyIG9mIDMyLWJpdHMgcmVhZCBleHBlY3RlZCBhZnRlciBvbmUgY2FsY3VsYXRpb24uCisgICogQHBhcmFtICBfX05CUkVBRF9fIE51bWJlciBvZiAzMi1iaXRzIHJlYWQgZXhwZWN0ZWQgYWZ0ZXIgb25lIGNhbGN1bGF0aW9uLgorICAqIEByZXR2YWwgU0VUIChfX05CUkVBRF9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX05CUkVBRF9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0NPUkRJQ19OQlJFQUQoX19OQlJFQURfXykgKCgoX19OQlJFQURfXykgPT0gQ09SRElDX05CUkVBRF8xKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTkJSRUFEX18pID09IENPUkRJQ19OQlJFQURfMikpCisKKy8qKgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBDT1JESUMgaW5wdXQgZGF0YSBzaXplIGZvciBvbmUgY2FsY3VsYXRpb24uCisgICogQHBhcmFtICBfX0lOU0laRV9fIGlucHV0IGRhdGEgc2l6ZSBmb3Igb25lIGNhbGN1bGF0aW9uLgorICAqIEByZXR2YWwgU0VUIChfX0lOU0laRV9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX0lOU0laRV9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0NPUkRJQ19JTlNJWkUoX19JTlNJWkVfXykgKCgoX19JTlNJWkVfXykgPT0gQ09SRElDX0lOU0laRV8zMkJJVFMpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19JTlNJWkVfXykgPT0gQ09SRElDX0lOU0laRV8xNkJJVFMpKQorCisvKioKKyAgKiBAYnJpZWYgIFZlcmlmeSB0aGUgQ09SRElDIG91dHB1dCBkYXRhIHNpemUgZm9yIG9uZSBjYWxjdWxhdGlvbi4KKyAgKiBAcGFyYW0gIF9fT1VUU0laRV9fIG91dHB1dCBkYXRhIHNpemUgZm9yIG9uZSBjYWxjdWxhdGlvbi4KKyAgKiBAcmV0dmFsIFNFVCAoX19PVVRTSVpFX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fT1VUU0laRV9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0NPUkRJQ19PVVRTSVpFKF9fT1VUU0laRV9fKSAoKChfX09VVFNJWkVfXykgPT0gQ09SRElDX09VVFNJWkVfMzJCSVRTKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19PVVRTSVpFX18pID09IENPUkRJQ19PVVRTSVpFXzE2QklUUykpCisKKy8qKgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBDT1JESUMgRE1BIHRyYW5zZmVyIERpcmVjdGlvbi4KKyAgKiBAcGFyYW0gIF9fRE1BRElSX18gRE1BIHRyYW5zZmVyIGRpcmVjdGlvbi4KKyAgKiBAcmV0dmFsIFNFVCAoX19ETUFESVJfXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19ETUFESVJfXyBpcyBpbnZhbGlkKQorICAqLworI2RlZmluZSBJU19DT1JESUNfRE1BX0RJUkVDVElPTihfX0RNQURJUl9fKSAoKChfX0RNQURJUl9fKSA9PSBDT1JESUNfRE1BX0RJUl9JTikgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19ETUFESVJfXykgPT0gQ09SRElDX0RNQV9ESVJfT1VUKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRE1BRElSX18pID09IENPUkRJQ19ETUFfRElSX0lOX09VVCkpCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBDT1JESUNfRXhwb3J0ZWRfRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qKiBAYWRkdG9ncm91cCBDT1JESUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMQorICAqIEB7CisgICovCisvKiBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DT1JESUNfSW5pdChDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ09SRElDX0RlSW5pdChDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYyk7Cit2b2lkIEhBTF9DT1JESUNfTXNwSW5pdChDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYyk7Cit2b2lkIEhBTF9DT1JESUNfTXNwRGVJbml0KENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKTsKKworI2lmIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxCisvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NPUkRJQ19SZWdpc3RlckNhbGxiYWNrKENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljLCBIQUxfQ09SRElDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQsIHBDT1JESUNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ09SRElDX1VuUmVnaXN0ZXJDYWxsYmFjayhDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYywgSEFMX0NPUkRJQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBDT1JESUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMgorICAqIEB7CisgICovCisjZW5kaWYgLyogVVNFX0hBTF9DT1JESUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisvKiBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NPUkRJQ19Db25maWd1cmUoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMsIENPUkRJQ19Db25maWdUeXBlRGVmICpzQ29uZmlnKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DT1JESUNfQ2FsY3VsYXRlKENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljLCBpbnQzMl90ICpwSW5CdWZmLCBpbnQzMl90ICpwT3V0QnVmZiwgdWludDMyX3QgTmJDYWxjLCB1aW50MzJfdCBUaW1lb3V0KTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DT1JESUNfQ2FsY3VsYXRlWk8oQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMsIGludDMyX3QgKnBJbkJ1ZmYsIGludDMyX3QgKnBPdXRCdWZmLCB1aW50MzJfdCBOYkNhbGMsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NPUkRJQ19DYWxjdWxhdGVfSVQoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMsIGludDMyX3QgKnBJbkJ1ZmYsIGludDMyX3QgKnBPdXRCdWZmLCB1aW50MzJfdCBOYkNhbGMpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NPUkRJQ19DYWxjdWxhdGVfRE1BKENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljLCBpbnQzMl90ICpwSW5CdWZmLCBpbnQzMl90ICpwT3V0QnVmZiwgdWludDMyX3QgTmJDYWxjLCB1aW50MzJfdCBETUFEaXJlY3Rpb24pOworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBhZGR0b2dyb3VwIENPUkRJQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzCisgICogQHsKKyAgKi8KKy8qIENhbGxiYWNrIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIEhBTF9DT1JESUNfRXJyb3JDYWxsYmFjayhDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYyk7Cit2b2lkIEhBTF9DT1JESUNfQ2FsY3VsYXRlQ3BsdENhbGxiYWNrKENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKTsKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBDT1JESUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNAorICAqIEB7CisgICovCisvKiBJUlEgaGFuZGxlciBtYW5hZ2VtZW50ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBIQUxfQ09SRElDX0lSUUhhbmRsZXIoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMpOworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBhZGR0b2dyb3VwIENPUkRJQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA1CisgICogQHsKKyAgKi8KKy8qIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitIQUxfQ09SRElDX1N0YXRlVHlwZURlZiBIQUxfQ09SRElDX0dldFN0YXRlKENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKTsKK3VpbnQzMl90IEhBTF9DT1JESUNfR2V0RXJyb3IoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMpOworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIENPUkRJQyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU1RNMzJIN3h4X0hBTF9DT1JESUNfSCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9oYWxfY3J5cC5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfY3J5cC5oCmluZGV4IDNlZDc2YjIuLmZjMjRmYmYgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsX2NyeXAuaAorKysgYi9JbmMvc3RtMzJoN3h4X2hhbF9jcnlwLmgKQEAgLTY0LDggKzY0LDggQEAKICAgdWludDMyX3QgSGVhZGVyU2l6ZTsgICAgICAgICAgICAgICAgLyohPCBUaGUgc2l6ZSBvZiBoZWFkZXIgYnVmZmVyIGluIHdvcmQgICovCiAgIHVpbnQzMl90ICpCMDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQjAgaXMgZmlyc3QgYXV0aGVudGljYXRpb24gYmxvY2sgdXNlZCBvbmx5ICBpbiBBRVMgQ0NNIG1vZGUgKi8KICAgdWludDMyX3QgRGF0YVdpZHRoVW5pdDsgICAgICAgICAgICAgLyohPCBEYXRhIFdpdGggVW5pdCwgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHZhbHVlIG9mIEByZWYgQ1JZUF9EYXRhX1dpZHRoX1VuaXQqLwotICB1aW50MzJfdCBLZXlJVkNvbmZpZ1NraXA7ICAgICAgICAgICAgLyohPCBDUllQIHBlcmlwaGVyYWwgS2V5IGFuZCBJViBjb25maWd1cmF0aW9uIHNraXAsIHRvIGNvbmZpZyBLZXkgYW5kIEluaXRpYWxpemF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yIG9ubHkgb25jZSBhbmQgdG8gc2tpcCBjb25maWd1cmF0aW9uIGZvciBjb25zZWN1dGl2ZSBwcm9jZXNzaW5ncy4KKyAgdWludDMyX3QgS2V5SVZDb25maWdTa2lwOyAgICAgICAgICAgIC8qITwgQ1JZUCBwZXJpcGhlcmFsIEtleSBhbmQgSVYgY29uZmlndXJhdGlvbiBza2lwLCB0byBjb25maWd1cmUgS2V5IGFuZCBJbml0aWFsaXphdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvciBvbmx5IG9uY2UgYW5kIHRvIHNraXAgY29uZmlndXJhdGlvbiBmb3IgY29uc2VjdXRpdmUgcHJvY2Vzc2luZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIENSWVBfQ29uZmlndXJhdGlvbl9Ta2lwICovCiAKIH0gQ1JZUF9Db25maWdUeXBlRGVmOwpAQCAtMTA4LDcgKzEwOCw3IEBACiAKICAgX19JTyB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgIENyeXBPdXRDb3VudDsgICAgIC8qITwgQ291bnRlciBvZiBvdXRwdXQgZGF0YSAqLwogCi0gIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplOyAgICAgICAgICAgLyohPCBsZW5ndGggb2YgaW5wdXQgZGF0YSBpbiB3b3JkICovCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgICBTaXplOyAgICAgICAgICAgLyohPCBsZW5ndGggb2YgaW5wdXQgZGF0YSBpbiB3b3JkIG9yIGluIGJ5dGUsIGFjY29yZGluZyB0byBEYXRhV2lkdGhVbml0ICovCiAKICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgIFBoYXNlOyAgICAgICAgICAgIC8qITwgQ1JZUCBwZXJpcGhlcmFsIHBoYXNlICovCiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX2Rmc2RtLmggYi9JbmMvc3RtMzJoN3h4X2hhbF9kZnNkbS5oCmluZGV4IDU3ZmI0ZGIuLjY0OGVmOTQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsX2Rmc2RtLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfZGZzZG0uaApAQCAtMjM3LDcgKzIzNyw3IEBACiAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgIEVycm9yQ29kZTsgICAgICAgICAgIC8qITwgREZTRE0gZmlsdGVyIGVycm9yIGNvZGUgKi8KICNpZiAoVVNFX0hBTF9ERlNETV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKICAgdm9pZCAoKkF3ZENhbGxiYWNrKSAgICAgICAgICAgICAoc3RydWN0IF9fREZTRE1fRmlsdGVyX0hhbmRsZVR5cGVEZWYgKmhkZnNkbV9maWx0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFRocmVzaG9sZCk7ICAgICAgICAgICAgICAgLyohPCBERlNETSBmaWx0ZXIgYW5hbG9nIHdhdGNoZG9nIGNhbGxiYWNrICovCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgVGhyZXNob2xkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBERlNETSBmaWx0ZXIgYW5hbG9nIHdhdGNoZG9nIGNhbGxiYWNrICovCiAgIHZvaWQgKCpSZWdDb252Q3BsdENhbGxiYWNrKSAgICAgKHN0cnVjdCBfX0RGU0RNX0ZpbHRlcl9IYW5kbGVUeXBlRGVmICpoZGZzZG1fZmlsdGVyKTsgLyohPCBERlNETSBmaWx0ZXIgcmVndWxhciBjb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrICovCiAgIHZvaWQgKCpSZWdDb252SGFsZkNwbHRDYWxsYmFjaykgKHN0cnVjdCBfX0RGU0RNX0ZpbHRlcl9IYW5kbGVUeXBlRGVmICpoZGZzZG1fZmlsdGVyKTsgLyohPCBERlNETSBmaWx0ZXIgaGFsZiByZWd1bGFyIGNvbnZlcnNpb24gY29tcGxldGUgY2FsbGJhY2sgKi8KICAgdm9pZCAoKkluakNvbnZDcGx0Q2FsbGJhY2spICAgICAoc3RydWN0IF9fREZTRE1fRmlsdGVyX0hhbmRsZVR5cGVEZWYgKmhkZnNkbV9maWx0ZXIpOyAvKiE8IERGU0RNIGZpbHRlciBpbmplY3RlZCBjb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrICovCkBAIC0zMDIsOCArMzAyLDggQEAKIC8qKiBAZGVmZ3JvdXAgREZTRE1fQ2hhbm5lbF9PdXB1dENsb2NrIERGU0RNIGNoYW5uZWwgb3V0cHV0IGNsb2NrIHNlbGVjdGlvbgogICAqIEB7CiAgICovCi0jZGVmaW5lIERGU0RNX0NIQU5ORUxfT1VUUFVUX0NMT0NLX1NZU1RFTSAgICAweDAwMDAwMDAwVSAgICAgICAgICAgIC8qITwgU291cmNlIGZvciBvdXB1dCBjbG9jayBpcyBzeXN0ZW0gY2xvY2sgKi8KLSNkZWZpbmUgREZTRE1fQ0hBTk5FTF9PVVRQVVRfQ0xPQ0tfQVVESU8gICAgIERGU0RNX0NIQ0ZHUjFfQ0tPVVRTUkMgLyohPCBTb3VyY2UgZm9yIG91cHV0IGNsb2NrIGlzIGF1ZGlvIGNsb2NrICovCisjZGVmaW5lIERGU0RNX0NIQU5ORUxfT1VUUFVUX0NMT0NLX1NZU1RFTSAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IFNvdXJjZSBmb3Igb3VwdXQgY2xvY2sgaXMgc3lzdGVtIGNsb2NrICovCisjZGVmaW5lIERGU0RNX0NIQU5ORUxfT1VUUFVUX0NMT0NLX0FVRElPICAgICBERlNETV9DSENGR1IxX0NLT1VUU1JDICAvKiE8IFNvdXJjZSBmb3Igb3VwdXQgY2xvY2sgaXMgYXVkaW8gY2xvY2sgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0zMzEsOCArMzMxLDggQEAKIC8qKiBAZGVmZ3JvdXAgREZTRE1fQ2hhbm5lbF9JbnB1dFBpbnMgREZTRE0gY2hhbm5lbCBpbnB1dCBwaW5zCiAgICogQHsKICAgKi8KLSNkZWZpbmUgREZTRE1fQ0hBTk5FTF9TQU1FX0NIQU5ORUxfUElOUyAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgLyohPCBJbnB1dCBmcm9tIHBpbnMgb24gc2FtZSBjaGFubmVsICovCi0jZGVmaW5lIERGU0RNX0NIQU5ORUxfRk9MTE9XSU5HX0NIQU5ORUxfUElOUyBERlNETV9DSENGR1IxX0NISU5TRUwgIC8qITwgSW5wdXQgZnJvbSBwaW5zIG9uIGZvbGxvd2luZyBjaGFubmVsICovCisjZGVmaW5lIERGU0RNX0NIQU5ORUxfU0FNRV9DSEFOTkVMX1BJTlMgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IElucHV0IGZyb20gcGlucyBvbiBzYW1lIGNoYW5uZWwgKi8KKyNkZWZpbmUgREZTRE1fQ0hBTk5FTF9GT0xMT1dJTkdfQ0hBTk5FTF9QSU5TIERGU0RNX0NIQ0ZHUjFfQ0hJTlNFTCAgIC8qITwgSW5wdXQgZnJvbSBwaW5zIG9uIGZvbGxvd2luZyBjaGFubmVsICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzQwLDEwICszNDAsMTAgQEAKIC8qKiBAZGVmZ3JvdXAgREZTRE1fQ2hhbm5lbF9TZXJpYWxJbnRlcmZhY2VUeXBlIERGU0RNIGNoYW5uZWwgc2VyaWFsIGludGVyZmFjZSB0eXBlCiAgICogQHsKICAgKi8KLSNkZWZpbmUgREZTRE1fQ0hBTk5FTF9TUElfUklTSU5HICAgICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAvKiE8IFNQSSB3aXRoIHJpc2luZyBlZGdlICovCi0jZGVmaW5lIERGU0RNX0NIQU5ORUxfU1BJX0ZBTExJTkcgICAgICAgIERGU0RNX0NIQ0ZHUjFfU0lUUF8wICAgLyohPCBTUEkgd2l0aCBmYWxsaW5nIGVkZ2UgKi8KLSNkZWZpbmUgREZTRE1fQ0hBTk5FTF9NQU5DSEVTVEVSX1JJU0lORyAgREZTRE1fQ0hDRkdSMV9TSVRQXzEgICAvKiE8IE1hbmNoZXN0ZXIgd2l0aCByaXNpbmcgZWRnZSAqLwotI2RlZmluZSBERlNETV9DSEFOTkVMX01BTkNIRVNURVJfRkFMTElORyBERlNETV9DSENGR1IxX1NJVFAgICAgIC8qITwgTWFuY2hlc3RlciB3aXRoIGZhbGxpbmcgZWRnZSAqLworI2RlZmluZSBERlNETV9DSEFOTkVMX1NQSV9SSVNJTkcgICAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAvKiE8IFNQSSB3aXRoIHJpc2luZyBlZGdlICovCisjZGVmaW5lIERGU0RNX0NIQU5ORUxfU1BJX0ZBTExJTkcgICAgICAgIERGU0RNX0NIQ0ZHUjFfU0lUUF8wICAgIC8qITwgU1BJIHdpdGggZmFsbGluZyBlZGdlICovCisjZGVmaW5lIERGU0RNX0NIQU5ORUxfTUFOQ0hFU1RFUl9SSVNJTkcgIERGU0RNX0NIQ0ZHUjFfU0lUUF8xICAgIC8qITwgTWFuY2hlc3RlciB3aXRoIHJpc2luZyBlZGdlICovCisjZGVmaW5lIERGU0RNX0NIQU5ORUxfTUFOQ0hFU1RFUl9GQUxMSU5HIERGU0RNX0NIQ0ZHUjFfU0lUUCAgICAgIC8qITwgTWFuY2hlc3RlciB3aXRoIGZhbGxpbmcgZWRnZSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTM4MywxNSArMzgzLDE1IEBACiAvKiogQGRlZmdyb3VwIERGU0RNX0ZpbHRlcl9FeHRUcmlnZ2VyIERGU0RNIGZpbHRlciBleHRlcm5hbCB0cmlnZ2VyCiAgICogQHsKICAgKi8KLSNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTFfVFJHTyAgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRm9yIGFsbCBERlNETSBmaWx0ZXJzICovCi0jZGVmaW5lIERGU0RNX0ZJTFRFUl9FWFRfVFJJR19USU0xX1RSR08yICAgICAgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZvciBhbGwgREZTRE0gZmlsdGVycyAqLwotI2RlZmluZSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNOF9UUkdPICAgICAgIERGU0RNX0ZMVENSMV9KRVhUU0VMXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KLSNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTThfVFJHTzIgICAgICAoREZTRE1fRkxUQ1IxX0pFWFRTRUxfMCB8IERGU0RNX0ZMVENSMV9KRVhUU0VMXzEpIC8qITwgRm9yIGFsbCBERlNETSBmaWx0ZXJzICovCi0jZGVmaW5lIERGU0RNX0ZJTFRFUl9FWFRfVFJJR19USU0zX1RSR08gICAgICAgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZvciBhbGwgREZTRE0gZmlsdGVycyAqLwotI2RlZmluZSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNNF9UUkdPICAgICAgIChERlNETV9GTFRDUjFfSkVYVFNFTF8wIHwgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMikgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KKyNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTFfVFJHTyAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KKyNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTFfVFJHTzIgICAgIERGU0RNX0ZMVENSMV9KRVhUU0VMXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KKyNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTThfVFJHTyAgICAgIERGU0RNX0ZMVENSMV9KRVhUU0VMXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KKyNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTThfVFJHTzIgICAgIChERlNETV9GTFRDUjFfSkVYVFNFTF8wIHwgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMSkgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KKyNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTNfVFJHTyAgICAgIERGU0RNX0ZMVENSMV9KRVhUU0VMXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KKyNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTRfVFJHTyAgICAgIChERlNETV9GTFRDUjFfSkVYVFNFTF8wIHwgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMikgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KICNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTE2X09DMSAgICAgICAoREZTRE1fRkxUQ1IxX0pFWFRTRUxfMiB8IERGU0RNX0ZMVENSMV9KRVhUU0VMXzEpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KICNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTZfVFJHTyAgICAgICAoREZTRE1fRkxUQ1IxX0pFWFRTRUxfMCB8IERGU0RNX0ZMVENSMV9KRVhUU0VMXzIgfCBERlNETV9GTFRDUjFfSkVYVFNFTF8xKSAvKiE8IEZvciBhbGwgREZTRE0gZmlsdGVycyAqLwotI2RlZmluZSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNN19UUkdPICAgICAgIERGU0RNX0ZMVENSMV9KRVhUU0VMXzMgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KKyNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTdfVFJHTyAgICAgIERGU0RNX0ZMVENSMV9KRVhUU0VMXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KICNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX0hSVElNMV9BRENUUkcxICAoREZTRE1fRkxUQ1IxX0pFWFRTRUxfMyB8IERGU0RNX0ZMVENSMV9KRVhUU0VMXzApCiAjZGVmaW5lIERGU0RNX0ZJTFRFUl9FWFRfVFJJR19IUlRJTTFfQURDVFJHMyAgKERGU0RNX0ZMVENSMV9KRVhUU0VMXzMgfCBERlNETV9GTFRDUjFfSkVYVFNFTF8xKQogI2RlZmluZSBERlNETV9GSUxURVJfRVhUX1RSSUdfRVhUSTExICAgICAgICAgIChERlNETV9GTFRDUjFfSkVYVFNFTF80IHwgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMykgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KQEAgLTM5OSwxMiArMzk5LDE2IEBACiAjZGVmaW5lIERGU0RNX0ZJTFRFUl9FWFRfVFJJR19MUFRJTTFfT1VUICAgICAgKERGU0RNX0ZMVENSMV9KRVhUU0VMXzQgfCBERlNETV9GTFRDUjFfSkVYVFNFTF8zIHwgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZvciBhbGwgREZTRE0gZmlsdGVycyAqLwogI2RlZmluZSBERlNETV9GSUxURVJfRVhUX1RSSUdfTFBUSU0yX09VVCAgICAgIChERlNETV9GTFRDUjFfSkVYVFNFTF80IHwgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMyB8IERGU0RNX0ZMVENSMV9KRVhUU0VMXzEgfCBERlNETV9GTFRDUjFfSkVYVFNFTF8wKSAgLyohPCBGb3IgYWxsIERGU0RNIGZpbHRlcnMgKi8KICNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX0xQVElNM19PVVQgICAgICAoREZTRE1fRkxUQ1IxX0pFWFRTRUxfNCB8IERGU0RNX0ZMVENSMV9KRVhUU0VMXzMgfCBERlNETV9GTFRDUjFfSkVYVFNFTF8yKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRm9yIGFsbCBERlNETSBmaWx0ZXJzICovCi0jaWYgZGVmaW5lZChTVE0zMkg3QTN4eCkgfHwgZGVmaW5lZChTVE0zMkg3QTN4eFEpIHx8IGRlZmluZWQoU1RNMzJIN0IzeHgpIHx8IGRlZmluZWQoU1RNMzJIN0IzeHhRKSB8fCBkZWZpbmVkKFNUTTMySDdCMHh4KSB8fCBkZWZpbmVkKFNUTTMySDdCMHh4USkKKyNpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCkKICNkZWZpbmUgREZTRE1fRklMVEVSX0VYVF9UUklHX0NPTVAxX09VVCAgICAgIChERlNETV9GTFRDUjFfSkVYVFNFTF80IHwgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMyB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERlNETV9GTFRDUjFfSkVYVFNFTF8yIHwgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERlNETV9GTFRDUjFfSkVYVFNFTF8yIHwgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMCkgICAgICAgCiAjZGVmaW5lIERGU0RNX0ZJTFRFUl9FWFRfVFJJR19DT01QMl9PVVQgICAgICAoREZTRE1fRkxUQ1IxX0pFWFRTRUxfNCB8IERGU0RNX0ZMVENSMV9KRVhUU0VMXzMgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZTRE1fRkxUQ1IxX0pFWFRTRUxfMiB8IERGU0RNX0ZMVENSMV9KRVhUU0VMXzEpCi0jZW5kaWYgLyogU1RNMzJIN0EzeHggfHwgU1RNMzJIN0EzeHhRIHx8IFNUTTMySDdCM3h4IHx8IFNUTTMySDdCM3h4USB8fCBTVE0zMkg3QjB4eCB8fCBTVE0zMkg3QjB4eFEgKi8KKyNlbGlmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4M1VMKQorI2RlZmluZSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNMjNfVFJHTyAgICAgKERGU0RNX0ZMVENSMV9KRVhUU0VMXzMgfCBERlNETV9GTFRDUjFfSkVYVFNFTF8xIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGU0RNX0ZMVENSMV9KRVhUU0VMXzApIAorI2RlZmluZSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNMjRfVFJHTyAgICAgKERGU0RNX0ZMVENSMV9KRVhUU0VMXzMgfCBERlNETV9GTFRDUjFfSkVYVFNFTF8yICkKKyNlbmRpZiAvKiBTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNzUwLDcgKzc1NCw3IEBACiAjZGVmaW5lIElTX0RGU0RNX0ZJTFRFUl9JTkpfVFJJR0dFUihUUklHKSAgICAgICAgICAgICAoKChUUklHKSA9PSBERlNETV9GSUxURVJfU1dfVFJJR0dFUikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJRykgPT0gREZTRE1fRklMVEVSX1NZTkNfVFJJR0dFUikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHR0VSKSkKLSNpZiBkZWZpbmVkKFNUTTMySDdBM3h4KSB8fCBkZWZpbmVkKFNUTTMySDdBM3h4USkgfHwgZGVmaW5lZChTVE0zMkg3QjN4eCkgfHwgZGVmaW5lZChTVE0zMkg3QjN4eFEpIHx8IGRlZmluZWQoU1RNMzJIN0IweHgpIHx8IGRlZmluZWQoU1RNMzJIN0IweHhRKQorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMKQogI2RlZmluZSBJU19ERlNETV9GSUxURVJfRVhUX1RSSUcoVFJJRykgICAgICAgICAgICAgICAgKCgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTFfVFJHTykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTFfVFJHTzIpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUcpID09IERGU0RNX0ZJTFRFUl9FWFRfVFJJR19USU04X1RSR08pIHx8IFwKQEAgLTc2Nyw2ICs3NzEsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUcpID09IERGU0RNX0ZJTFRFUl9FWFRfVFJJR19MUFRJTTNfT1VUKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfQ09NUDFfT1VUKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfQ09NUDJfT1VUKSkKKyNlbGlmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4M1VMKQorI2RlZmluZSBJU19ERlNETV9GSUxURVJfRVhUX1RSSUcoVFJJRykgICAgICAgICAgICAgICAgKCgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTFfVFJHTykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTFfVFJHTzIpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUcpID09IERGU0RNX0ZJTFRFUl9FWFRfVFJJR19USU04X1RSR08pIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUcpID09IERGU0RNX0ZJTFRFUl9FWFRfVFJJR19USU04X1RSR08yKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNM19UUkdPKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNNF9UUkdPKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNMTZfT0MxKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNNl9UUkdPKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNN19UUkdPKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfRVhUSTExKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfRVhUSTE1KSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfTFBUSU0xX09VVCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX0xQVElNMl9PVVQpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUcpID09IERGU0RNX0ZJTFRFUl9FWFRfVFJJR19MUFRJTTNfT1VUKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfVElNMjNfVFJHTykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTI0X1RSR08pKQorCiAjZWxzZQogI2RlZmluZSBJU19ERlNETV9GSUxURVJfRVhUX1RSSUcoVFJJRykgICAgICAgICAgICAgICAgKCgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTFfVFJHTykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX1RJTTFfVFJHTzIpIHx8IFwKQEAgLTc4NCw3ICs4MDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJRykgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX0xQVElNMV9PVVQpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUcpID09IERGU0RNX0ZJTFRFUl9FWFRfVFJJR19MUFRJTTJfT1VUKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHKSA9PSBERlNETV9GSUxURVJfRVhUX1RSSUdfTFBUSU0zX09VVCkpCi0jZW5kaWYgLyogU1RNMzJIN0EzeHggfHwgU1RNMzJIN0EzeHhRIHx8IFNUTTMySDdCM3h4IHx8IFNUTTMySDdCM3h4USB8fCBTVE0zMkg3QjB4eCAgfHwgU1RNMzJIN0IweHhRICovCisjZW5kaWYgLyogU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCAqLwogI2RlZmluZSBJU19ERlNETV9GSUxURVJfRVhUX1RSSUdfRURHRShFREdFKSAgICAgICAgICAgKCgoRURHRSkgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX1JJU0lOR19FREdFKSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRURHRSkgPT0gREZTRE1fRklMVEVSX0VYVF9UUklHX0ZBTExJTkdfRURHRSkgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEVER0UpID09IERGU0RNX0ZJTFRFUl9FWFRfVFJJR19CT1RIX0VER0VTKSkKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX2RtYS5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfZG1hLmgKaW5kZXggNjFkM2E5OS4uM2MxZjZmZSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfZG1hLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfZG1hLmgKQEAgLTMzMiw4ICszMzIsMTEgQEAKIAogI2RlZmluZSBETUFfUkVRVUVTVF9TQUkxX0EgICAgICAgICAgIDg3VSAgLyohPCBETUFNVVgxIFNBSTEgQSByZXF1ZXN0ICAgICovCiAjZGVmaW5lIERNQV9SRVFVRVNUX1NBSTFfQiAgICAgICAgICAgODhVICAvKiE8IERNQU1VWDEgU0FJMSBCIHJlcXVlc3QgICAgKi8KKworI2lmIGRlZmluZWQoU0FJMikKICNkZWZpbmUgRE1BX1JFUVVFU1RfU0FJMl9BICAgICAgICAgICA4OVUgIC8qITwgRE1BTVVYMSBTQUkyIEEgcmVxdWVzdCAgICAqLwogI2RlZmluZSBETUFfUkVRVUVTVF9TQUkyX0IgICAgICAgICAgIDkwVSAgLyohPCBETUFNVVgxIFNBSTIgQiByZXF1ZXN0ICAgICovCisjZW5kaWYgLyogU0FJMiAqLwogCiAjZGVmaW5lIERNQV9SRVFVRVNUX1NXUE1JX1JYICAgICAgICAgOTFVICAvKiE8IERNQU1VWDEgU1dQTUkgUlggcmVxdWVzdCAgKi8KICNkZWZpbmUgRE1BX1JFUVVFU1RfU1dQTUlfVFggICAgICAgICA5MlUgIC8qITwgRE1BTVVYMSBTV1BNSSBUWCByZXF1ZXN0ICAqLwpAQCAtMzg1LDYgKzM4OCwzOCBAQAogI2RlZmluZSBETUFfUkVRVUVTVF9VU0FSVDEwX1RYICAgICAgMTE5VSAgLyohPCBETUFNVVgxIFVTQVJUMTAgcmVxdWVzdCAgKi8KICNlbmRpZiAvKiBVU0FSVDEwICovCiAKKyNpZiBkZWZpbmVkKEZNQUMpCisjZGVmaW5lIERNQV9SRVFVRVNUX0ZNQUNfUkVBRCAgICAgICAxMjBVICAvKiE8IERNQU1VWDEgRk1BQyBSZWFkIHJlcXVlc3QgICovCisjZGVmaW5lIERNQV9SRVFVRVNUX0ZNQUNfV1JJVEUgICAgICAxMjFVICAvKiE8IERNQU1VWDEgRk1BQyBXcml0ZSByZXF1ZXN0ICovCisjZW5kaWYgLyogRk1BQyAqLworCisjaWYgZGVmaW5lZChDT1JESUMpCisjZGVmaW5lIERNQV9SRVFVRVNUX0NPUkRJQ19SRUFEICAgICAxMjJVICAvKiE8IERNQU1VWDEgQ09SRElDIFJlYWQgcmVxdWVzdCAgKi8KKyNkZWZpbmUgRE1BX1JFUVVFU1RfQ09SRElDX1dSSVRFICAgIDEyM1UgIC8qITwgRE1BTVVYMSBDT1JESUMgV3JpdGUgcmVxdWVzdCAqLworI2VuZGlmIC8qIENPUkRJQyAqLworCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBETUFfUkVRVUVTVF9JMkM1X1JYICAgICAgICAgMTI0VSAgLyohPCBETUFNVVgxIEkyQzUgUlggcmVxdWVzdCAgICovCisjZGVmaW5lIERNQV9SRVFVRVNUX0kyQzVfVFggICAgICAgICAxMjVVICAvKiE8IERNQU1VWDEgSTJDNSBUWCByZXF1ZXN0ICAgKi8KKyNlbmRpZiAvKiBJMkM1ICovCisKKyNpZiBkZWZpbmVkKFRJTTIzKQorI2RlZmluZSBETUFfUkVRVUVTVF9USU0yM19DSDEgICAgICAgIDEyNlUgIC8qITwgRE1BTVVYMSBUSU0yMyBDSDEgcmVxdWVzdCAgKi8KKyNkZWZpbmUgRE1BX1JFUVVFU1RfVElNMjNfQ0gyICAgICAgICAxMjdVICAvKiE8IERNQU1VWDEgVElNMjMgQ0gyIHJlcXVlc3QgICovCisjZGVmaW5lIERNQV9SRVFVRVNUX1RJTTIzX0NIMyAgICAgICAgMTI4VSAgLyohPCBETUFNVVgxIFRJTTIzIENIMyByZXF1ZXN0ICAqLworI2RlZmluZSBETUFfUkVRVUVTVF9USU0yM19DSDQgICAgICAgIDEyOVUgIC8qITwgRE1BTVVYMSBUSU0yMyBDSDQgcmVxdWVzdCAgKi8KKyNkZWZpbmUgRE1BX1JFUVVFU1RfVElNMjNfVVAgICAgICAgICAxMzBVICAvKiE8IERNQU1VWDEgVElNMjMgVVAgcmVxdWVzdCAgICovCisjZGVmaW5lIERNQV9SRVFVRVNUX1RJTTIzX1RSSUcgICAgICAgMTMxVSAgLyohPCBETUFNVVgxIFRJTTIzIFRSSUcgcmVxdWVzdCAqLworI2VuZGlmIC8qIFRJTTIzICovCisKKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBETUFfUkVRVUVTVF9USU0yNF9DSDEgICAgICAgIDEzMlUgIC8qITwgRE1BTVVYMSBUSU0yNCBDSDEgcmVxdWVzdCAgKi8KKyNkZWZpbmUgRE1BX1JFUVVFU1RfVElNMjRfQ0gyICAgICAgICAxMzNVICAvKiE8IERNQU1VWDEgVElNMjQgQ0gyIHJlcXVlc3QgICovCisjZGVmaW5lIERNQV9SRVFVRVNUX1RJTTI0X0NIMyAgICAgICAgMTM0VSAgLyohPCBETUFNVVgxIFRJTTI0IENIMyByZXF1ZXN0ICAqLworI2RlZmluZSBETUFfUkVRVUVTVF9USU0yNF9DSDQgICAgICAgIDEzNVUgIC8qITwgRE1BTVVYMSBUSU0yNCBDSDQgcmVxdWVzdCAgKi8KKyNkZWZpbmUgRE1BX1JFUVVFU1RfVElNMjRfVVAgICAgICAgICAxMzZVICAvKiE8IERNQU1VWDEgVElNMjQgVVAgcmVxdWVzdCAgICovCisjZGVmaW5lIERNQV9SRVFVRVNUX1RJTTI0X1RSSUcgICAgICAgMTM3VSAgLyohPCBETUFNVVgxIFRJTTI0IFRSSUcgcmVxdWVzdCAqLworI2VuZGlmIC8qIFRJTTI0ICovCiAKIC8qIERNQU1VWDIgcmVxdWVzdHMgKi8KICNkZWZpbmUgQkRNQV9SRVFVRVNUX01FTTJNRU0gICAgICAgICAgMFUgIC8qITwgbWVtb3J5IHRvIG1lbW9yeSB0cmFuc2ZlciAgICovCkBAIC0xMjAwLDExICsxMjM1LDEzIEBACiAgICogQHsKICAgKi8KIAotI2lmIGRlZmluZWQoQURDMykKKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBJU19ETUFfUkVRVUVTVChSRVFVRVNUKSAoKChSRVFVRVNUKSA8PSBETUFfUkVRVUVTVF9USU0yNF9UUklHKSkKKyNlbGlmIGRlZmluZWQoQURDMykKICNkZWZpbmUgSVNfRE1BX1JFUVVFU1QoUkVRVUVTVCkgKCgoUkVRVUVTVCkgPD0gRE1BX1JFUVVFU1RfQURDMykpCiAjZWxzZQogI2RlZmluZSBJU19ETUFfUkVRVUVTVChSRVFVRVNUKSAoKChSRVFVRVNUKSA8PSBETUFfUkVRVUVTVF9VU0FSVDEwX1RYKSkKLSNlbmRpZiAvKiBBREMzICovCisjZW5kaWYgLyogVElNMjQgKi8KIAogI2lmIGRlZmluZWQoQURDMykKICNkZWZpbmUgSVNfQkRNQV9SRVFVRVNUKFJFUVVFU1QpICgoKFJFUVVFU1QpIDw9IEJETUFfUkVRVUVTVF9BREMzKSkKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX2V0aC5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfZXRoLmgKaW5kZXggMjIzZjM0Ni4uMDM5ZGM2NiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfZXRoLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfZXRoLmgKQEAgLTI1LDEwICsyNSwxMiBAQAogIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEVUSCkKKwogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmg3eHhfaGFsX2RlZi5oIgogCisjaWYgZGVmaW5lZChFVEgpCisKIC8qKiBAYWRkdG9ncm91cCBTVE0zMkg3eHhfSEFMX0RyaXZlcgogICAqIEB7CiAgICovCkBAIC02MCw4ICs2Miw4IEBACiAgIF9fSU8gdWludDMyX3QgREVTQzE7CiAgIF9fSU8gdWludDMyX3QgREVTQzI7CiAgIF9fSU8gdWludDMyX3QgREVTQzM7Ci0gIF9fSU8gdWludDMyX3QgQmFja3VwQWRkcjA7IC8qIHVzZWQgdG8gc3RvcmUgcnggYnVmZmVyIDEgYWRkcmVzcyAqLwotICBfX0lPIHVpbnQzMl90IEJhY2t1cEFkZHIxOyAvKiB1c2VkIHRvIHN0b3JlIHJ4IGJ1ZmZlciAyIGFkZHJlc3MgKi8KKyAgdWludDMyX3QgQmFja3VwQWRkcjA7IC8qIHVzZWQgdG8gc3RvcmUgcnggYnVmZmVyIDEgYWRkcmVzcyAqLworICB1aW50MzJfdCBCYWNrdXBBZGRyMTsgLyogdXNlZCB0byBzdG9yZSByeCBidWZmZXIgMiBhZGRyZXNzICovCiB9RVRIX0RNQURlc2NUeXBlRGVmOwogLyoqIAogICAqIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9oYWxfZXRoX2V4LmggYi9JbmMvc3RtMzJoN3h4X2hhbF9ldGhfZXguaAppbmRleCAwNTEyYTBlLi5jZWMzODg3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9ldGhfZXguaAorKysgYi9JbmMvc3RtMzJoN3h4X2hhbF9ldGhfZXguaApAQCAtMzYsNyArMzYsNyBAQAogCiAvKiogQGFkZHRvZ3JvdXAgRVRIRXgKICAgKiBAewotICAqLyAKKyAgKi8KIAogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgRVRIRXhfRXhwb3J0ZWRfVHlwZXMgRVRIRXggRXhwb3J0ZWQgVHlwZXMKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX2V4dGkuaCBiL0luYy9zdG0zMmg3eHhfaGFsX2V4dGkuaAppbmRleCA5NGE2ZWEzLi4xOGNmZmVjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9leHRpLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfZXh0aS5oCkBAIC0xNTAsMjIgKzE1MCwzMCBAQAogI2RlZmluZSBFWFRJX0xJTkVfNDkgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9DT05GSUcgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMICAgICB8IDB4MTFVKQogI2RlZmluZSBFWFRJX0xJTkVfNTAgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMICAgICB8IDB4MTJVKQogI2RlZmluZSBFWFRJX0xJTkVfNTEgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9DT05GSUcgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMICAgICB8IDB4MTNVKQotI2lmICFkZWZpbmVkKFVBUlQ5KQorI2lmIGRlZmluZWQoTFBUSU00KQogI2RlZmluZSBFWFRJX0xJTkVfNTIgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMICAgICB8IDB4MTRVKQogI2Vsc2UKICNkZWZpbmUgRVhUSV9MSU5FXzUyICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfRElSRUNUICAgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUcyIHwgRVhUSV9UQVJHRVRfTVNLX0FMTF9DUFUgfCAweDE0VSkKLSNlbmRpZiAvKiBVQVJUOSAqLwotI2lmICFkZWZpbmVkKFVTQVJUMTApCisjZW5kaWYgLypMUFRJTTQqLworI2lmIGRlZmluZWQoTFBUSU01KQogI2RlZmluZSBFWFRJX0xJTkVfNTMgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMICAgICB8IDB4MTVVKQogI2Vsc2UKICNkZWZpbmUgRVhUSV9MSU5FXzUzICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfRElSRUNUICAgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUcyIHwgRVhUSV9UQVJHRVRfTVNLX0FMTF9DUFUgfCAweDE1VSkKLSNlbmRpZiAvKiBVU0FSVDEwICovCisjZW5kaWYgLypMUFRJTTUqLwogI2RlZmluZSBFWFRJX0xJTkVfNTQgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMX0NQVSB8IDB4MTZVKQogI2RlZmluZSBFWFRJX0xJTkVfNTUgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMX0NQVSB8IDB4MTdVKQogI2RlZmluZSBFWFRJX0xJTkVfNTYgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMX0NQVSB8IDB4MThVKQorI2lmIGRlZmluZWQoRVhUSV9JTVIyX0lNNTcpCiAjZGVmaW5lIEVYVElfTElORV81NyAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0RJUkVDVCAgIHwgRVhUSV9FVkVOVCB8IEVYVElfUkVHMiB8IEVYVElfVEFSR0VUX01TS19BTExfQ1BVIHwgMHgxOVUpCisjZWxzZQorI2RlZmluZSBFWFRJX0xJTkVfNTcgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfTk9ORSAgICB8IDB4MTlVKQorI2VuZGlmIC8qRVhUSV9JTVIyX0lNNTcqLwogI2RlZmluZSBFWFRJX0xJTkVfNTggICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMX0NQVSB8IDB4MUFVKQorI2lmIGRlZmluZWQoRVhUSV9JTVIyX0lNNTkpCiAjZGVmaW5lIEVYVElfTElORV81OSAgICAgICAgICAgICAgICAgICAgICAgIChFWFRJX0RJUkVDVCAgIHwgRVhUSV9FVkVOVCB8IEVYVElfUkVHMiB8IEVYVElfVEFSR0VUX01TS19BTExfQ1BVIHwgMHgxQlUpCisjZWxzZQorI2RlZmluZSBFWFRJX0xJTkVfNTkgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfTk9ORSAgICB8IDB4MUJVKQorI2VuZGlmIC8qRVhUSV9JTVIyX0lNNTkqLwogI2RlZmluZSBFWFRJX0xJTkVfNjAgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMX0NQVSB8IDB4MUNVKQogI2RlZmluZSBFWFRJX0xJTkVfNjEgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMX0NQVSB8IDB4MURVKQogI2RlZmluZSBFWFRJX0xJTkVfNjIgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzIgfCBFWFRJX1RBUkdFVF9NU0tfQUxMX0NQVSB8IDB4MUVVKQpAQCAtMjAyLDE1ICsyMTAsMTIgQEAKICNkZWZpbmUgRVhUSV9MSU5FXzc5ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfUkVTRVJWRUQgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUczIHwgRVhUSV9UQVJHRVRfTVNLX05PTkV8IDB4MEZVKQogI2RlZmluZSBFWFRJX0xJTkVfODAgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzMgfCBFWFRJX1RBUkdFVF9NU0tfTk9ORXwgMHgxMFUpCiAjZW5kaWYgLyogRFVBTF9DT1JFICovCi0KICNkZWZpbmUgRVhUSV9MSU5FXzgxICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfUkVTRVJWRUQgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUczIHwgRVhUSV9UQVJHRVRfTVNLX05PTkV8IDB4MTFVKQotCiAjaWYgZGVmaW5lZCAoRFVBTF9DT1JFKQogI2RlZmluZSBFWFRJX0xJTkVfODIgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9DT05GSUcgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzMgfCBFWFRJX1RBUkdFVF9NU0tfQ1BVMnwgMHgxMlUpCiAjZWxzZQogI2RlZmluZSBFWFRJX0xJTkVfODIgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9SRVNFUlZFRCB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzMgfCBFWFRJX1RBUkdFVF9NU0tfTk9ORXwgMHgxMlUpCiAjZW5kaWYgLyogRFVBTF9DT1JFICovCi0KICNkZWZpbmUgRVhUSV9MSU5FXzgzICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfUkVTRVJWRUQgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUczIHwgRVhUSV9UQVJHRVRfTVNLX05PTkV8IDB4MTNVKQogI2lmIGRlZmluZWQgKERVQUxfQ09SRSkKICNkZWZpbmUgRVhUSV9MSU5FXzg0ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfQ09ORklHICAgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUczIHwgRVhUSV9UQVJHRVRfTVNLX0NQVTF8IDB4MTRVKQpAQCAtMjI3LDYgKzIzMiwxNSBAQAogI2lmIGRlZmluZWQoRFRTKQogI2RlZmluZSBFWFRJX0xJTkVfODggICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzMgfCBFWFRJX1RBUkdFVF9NU0tfQUxMIHwgMHgxOFUpCiAjZW5kaWYgLyogRFRTICovCisjaWYgZGVmaW5lZChFWFRJX0lNUjNfSU04OSkKKyNkZWZpbmUgRVhUSV9MSU5FXzg5ICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfRElSRUNUICAgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUczIHwgRVhUSV9UQVJHRVRfTVNLX0FMTF9DUFUgfCAweDE5VSkKKyNlbmRpZiAvKkVYVElfSU1SM19JTTg5Ki8KKyNpZiBkZWZpbmVkKEVYVElfSU1SM19JTTkwKQorI2RlZmluZSBFWFRJX0xJTkVfOTAgICAgICAgICAgICAgICAgICAgICAgICAoRVhUSV9ESVJFQ1QgICB8IEVYVElfRVZFTlQgfCBFWFRJX1JFRzMgfCBFWFRJX1RBUkdFVF9NU0tfQUxMX0NQVSB8IDB4MUFVKQorI2VuZGlmIC8qRVhUSV9JTVIzX0lNOTAqLworI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgRVhUSV9MSU5FXzkxICAgICAgICAgICAgICAgICAgICAgICAgKEVYVElfRElSRUNUICAgfCBFWFRJX0VWRU5UIHwgRVhUSV9SRUczIHwgRVhUSV9UQVJHRVRfTVNLX0FMTF9DUFUgfCAweDFCVSkKKyNlbmRpZiAvKkkyQzUqLwogCiAvKioKICAgKiBAfQpAQCAtMjcxLDcgKzI4NSw5IEBACiAjZGVmaW5lIEVYVElfR1BJT0YgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDVVCiAjZGVmaW5lIEVYVElfR1BJT0cgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDZVCiAjZGVmaW5lIEVYVElfR1BJT0ggICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDdVCisjaWYgZGVmaW5lZChHUElPSSkKICNkZWZpbmUgRVhUSV9HUElPSSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOFUKKyNlbmRpZiAvKkdQSU9JKi8KICNkZWZpbmUgRVhUSV9HUElPSiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOVUKICNkZWZpbmUgRVhUSV9HUElPSyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQVUKIApAQCAtMzc4LDExICszOTQsMTMgQEAKIC8qKgogICAqIEBicmllZiAgRVhUSSBMaW5lIG51bWJlcgogICAqLwotI2lmIGRlZmluZWQgKEVYVElfTElORV84OCkKKyNpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODNVTCkKKyNkZWZpbmUgRVhUSV9MSU5FX05CICAgICAgICAgICAgICAgICAgICAgICAgOTJVTAorI2VsaWYgKFNUTTMySDdfREVWX0lEID09IDB4NDgwVUwpCiAjZGVmaW5lIEVYVElfTElORV9OQiAgICAgICAgICAgICAgICAgICAgICAgIDg5VUwKICNlbHNlCiAjZGVmaW5lIEVYVElfTElORV9OQiAgICAgICAgICAgICAgICAgICAgICAgIDg4VUwKLSNlbmRpZiAvKiBFWFRJX0xJTkVfODggKi8KKyNlbmRpZiAvKiBFWFRJX0xJTkVfOTEgKi8KIAogLyoqCiAgICogQH0KQEAgLTQyMCw2ICs0MzgsNyBAQAogCiAjZGVmaW5lIElTX0VYVElfQ09ORklHX0xJTkUoX19MSU5FX18pICAgKCgoX19MSU5FX18pICYgRVhUSV9DT05GSUcpICE9IDB4MDBVTCkKIAorI2lmIGRlZmluZWQoR1BJT0kpCiAjZGVmaW5lIElTX0VYVElfR1BJT19QT1JUKF9fUE9SVF9fKSAgICAgKCgoX19QT1JUX18pID09IEVYVElfR1BJT0EpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPQikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9DKSB8fCBcCkBAIC00MzEsNiArNDUwLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0kpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPSikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9LKSkKKyNlbHNlCisjZGVmaW5lIElTX0VYVElfR1BJT19QT1JUKF9fUE9SVF9fKSAgICAgKCgoX19QT1JUX18pID09IEVYVElfR1BJT0EpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPQikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9DKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0QpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPRSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9GKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0cpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1BPUlRfXykgPT0gRVhUSV9HUElPSCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fUE9SVF9fKSA9PSBFWFRJX0dQSU9KKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19QT1JUX18pID09IEVYVElfR1BJT0spKQorI2VuZGlmIC8qR1BJT0kqLwogCiAjZGVmaW5lIElTX0VYVElfR1BJT19QSU4oX19QSU5fXykgICAgICAgKChfX1BJTl9fKSA8IDE2VUwpCiAjaWYgZGVmaW5lZCAoTFBUSU00KSAmJiBkZWZpbmVkIChMUFRJTTUpCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9mZGNhbi5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfZmRjYW4uaAppbmRleCBhMmM0NzkxLi5lY2M2MjkwIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9mZGNhbi5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX2ZkY2FuLmgKQEAgLTI4LDYgKzI4LDggQEAKIC8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaW5jbHVkZSAic3RtMzJoN3h4X2hhbF9kZWYuaCIKIAorI2lmIGRlZmluZWQoRkRDQU4xKQorCiAvKiogQGFkZHRvZ3JvdXAgU1RNMzJIN3h4X0hBTF9Ecml2ZXIKICAgKiBAewogICAqLwpAQCAtMjQwMyw2ICsyNDA1LDcgQEAKIC8qKgogICAqIEB9CiAgICovCisjZW5kaWYgLyogRkRDQU4xICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9oYWxfZmxhc2guaCBiL0luYy9zdG0zMmg3eHhfaGFsX2ZsYXNoLmgKaW5kZXggZjk0MDI5ZC4uOGE0N2UwYiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfZmxhc2guaAorKysgYi9JbmMvc3RtMzJoN3h4X2hhbF9mbGFzaC5oCkBAIC01NDQsOSArNTQ0LDEzIEBACiAKICNkZWZpbmUgX19IQUxfRkxBU0hfRU5BQkxFX0lUX0JBTksyKF9fSU5URVJSVVBUX18pICAgICAgKEZMQVNILT5DUjIgfD0gKChfX0lOVEVSUlVQVF9fKSAmIDB4N0ZGRkZGRkZVKSkKIAorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICNkZWZpbmUgX19IQUxfRkxBU0hfRU5BQkxFX0lUKF9fSU5URVJSVVBUX18pICAgIChJU19GTEFTSF9JVF9CQU5LMShfX0lOVEVSUlVQVF9fKSA/IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9GTEFTSF9FTkFCTEVfSVRfQkFOSzEoX19JTlRFUlJVUFRfXykgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfRkxBU0hfRU5BQkxFX0lUX0JBTksyKF9fSU5URVJSVVBUX18pKQorI2Vsc2UKKyNkZWZpbmUgX19IQUxfRkxBU0hfRU5BQkxFX0lUKF9fSU5URVJSVVBUX18pICAgIF9fSEFMX0ZMQVNIX0VOQUJMRV9JVF9CQU5LMShfX0lOVEVSUlVQVF9fKQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogCiAKIC8qKgpAQCAtNTg4LDkgKzU5MiwxMyBAQAogCiAjZGVmaW5lIF9fSEFMX0ZMQVNIX0RJU0FCTEVfSVRfQkFOSzIoX19JTlRFUlJVUFRfXykgIChGTEFTSC0+Q1IyICY9IH4odWludDMyX3QpKChfX0lOVEVSUlVQVF9fKSAmIDB4N0ZGRkZGRkZVKSkKIAorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICNkZWZpbmUgX19IQUxfRkxBU0hfRElTQUJMRV9JVChfX0lOVEVSUlVQVF9fKSAgKElTX0ZMQVNIX0lUX0JBTksxKF9fSU5URVJSVVBUX18pID8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfRkxBU0hfRElTQUJMRV9JVF9CQU5LMShfX0lOVEVSUlVQVF9fKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX0ZMQVNIX0RJU0FCTEVfSVRfQkFOSzIoX19JTlRFUlJVUFRfXykpCisjZWxzZQorI2RlZmluZSBfX0hBTF9GTEFTSF9ESVNBQkxFX0lUKF9fSU5URVJSVVBUX18pICBfX0hBTF9GTEFTSF9ESVNBQkxFX0lUX0JBTksxKF9fSU5URVJSVVBUX18pCisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAKIAogLyoqCkBAIC02MzcsOCArNjQ1LDEyIEBACiAKICNkZWZpbmUgX19IQUxfRkxBU0hfR0VUX0ZMQUdfQkFOSzIoX19GTEFHX18pICAgICAoUkVBRF9CSVQoRkxBU0gtPlNSMiwgKChfX0ZMQUdfXykgJiAweDdGRkZGRkZGVSkpID09ICgoKF9fRkxBR19fKSAmIDB4N0ZGRkZGRkZVKSkpCiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAjZGVmaW5lIF9fSEFMX0ZMQVNIX0dFVF9GTEFHKF9fRkxBR19fKSAgICAgICAgICAgKElTX0ZMQVNIX0ZMQUdfQkFOSzEoX19GTEFHX18pID8gIF9fSEFMX0ZMQVNIX0dFVF9GTEFHX0JBTksxKF9fRkxBR19fKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19IQUxfRkxBU0hfR0VUX0ZMQUdfQkFOSzIoX19GTEFHX18pKQorI2Vsc2UKKyNkZWZpbmUgX19IQUxfRkxBU0hfR0VUX0ZMQUcoX19GTEFHX18pICAgICAgICAgICBfX0hBTF9GTEFTSF9HRVRfRkxBR19CQU5LMShfX0ZMQUdfXykKKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogCiAvKioKQEAgLTY4Miw4ICs2OTQsMTIgQEAKIAogI2RlZmluZSBfX0hBTF9GTEFTSF9DTEVBUl9GTEFHX0JBTksyKF9fRkxBR19fKSAgICBXUklURV9SRUcoRkxBU0gtPkNDUjIsICgoX19GTEFHX18pICYgMHg3RkZGRkZGRlUpKQogCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogI2RlZmluZSBfX0hBTF9GTEFTSF9DTEVBUl9GTEFHKF9fRkxBR19fKSAgICAgICAgIChJU19GTEFTSF9GTEFHX0JBTksxKF9fRkxBR19fKSA/ICBfX0hBTF9GTEFTSF9DTEVBUl9GTEFHX0JBTksxKF9fRkxBR19fKSA6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSEFMX0ZMQVNIX0NMRUFSX0ZMQUdfQkFOSzIoX19GTEFHX18pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0hBTF9GTEFTSF9DTEVBUl9GTEFHX0JBTksyKF9fRkxBR19fKSkKKyNlbHNlCisjZGVmaW5lIF9fSEFMX0ZMQVNIX0NMRUFSX0ZMQUcoX19GTEFHX18pICAgICAgICAgX19IQUxfRkxBU0hfQ0xFQVJfRkxBR19CQU5LMShfX0ZMQUdfXykKKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogLyoqCiAgICogQH0KQEAgLTc2OCwxNiArNzg0LDIzIEBACiAjZW5kaWYgLyogRkxBU0hfT1BUQ1JfUEdfT1RQICovCiAKICNkZWZpbmUgSVNfRkxBU0hfSVRfQkFOSzEoSVQpICAgICAgICAgICAgKCgoSVQpICYgRkxBU0hfSVRfQUxMX0JBTksxKSA9PSAoSVQpKQotCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogI2RlZmluZSBJU19GTEFTSF9JVF9CQU5LMihJVCkgICAgICAgICAgICAoKChJVCkgJiBGTEFTSF9JVF9BTExfQkFOSzIpID09IChJVCkpCisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAKICNkZWZpbmUgSVNfRkxBU0hfRkxBR19CQU5LMShGTEFHKSAgICAgICAgKCgoRkxBRykgJiBGTEFTSF9GTEFHX0FMTF9CQU5LMSkgPT0gKEZMQUcpKQotCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogI2RlZmluZSBJU19GTEFTSF9GTEFHX0JBTksyKEZMQUcpICAgICAgICAoKChGTEFHKSAmIEZMQVNIX0ZMQUdfQUxMX0JBTksyKSA9PSAoRkxBRykpCisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAjZGVmaW5lIElTX0ZMQVNIX1BST0dSQU1fQUREUkVTU19CQU5LMShBRERSRVNTKSAoKChBRERSRVNTKSA+PSBGTEFTSF9CQU5LMV9CQVNFKSAmJiAoKEFERFJFU1MpIDwgRkxBU0hfQkFOSzJfQkFTRSkpCiAjZGVmaW5lIElTX0ZMQVNIX1BST0dSQU1fQUREUkVTU19CQU5LMihBRERSRVNTKSAoKChBRERSRVNTKSA+PSBGTEFTSF9CQU5LMl9CQVNFICkgJiYgKChBRERSRVNTKSA8PSBGTEFTSF9FTkQpKQorI2Vsc2UKKyNkZWZpbmUgSVNfRkxBU0hfUFJPR1JBTV9BRERSRVNTX0JBTksxKEFERFJFU1MpICgoKEFERFJFU1MpID49IEZMQVNIX0JBTksxX0JBU0UpICYmICgoQUREUkVTUykgPD0gRkxBU0hfRU5EKSkKKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICNpZiBkZWZpbmVkIChGTEFTSF9PUFRDUl9QR19PVFApCiAjZGVmaW5lIElTX0ZMQVNIX1BST0dSQU1fQUREUkVTU19PVFAoQUREUkVTUykgICAoKChBRERSRVNTKSA+PSAweDA4RkZGMDAwVSkgJiYgKChBRERSRVNTKSA8PSAweDA4RkZGM0ZGVSkpCiAjZGVmaW5lIElTX0ZMQVNIX1BST0dSQU1fQUREUkVTUyhBRERSRVNTKSAgICAgICAoSVNfRkxBU0hfUFJPR1JBTV9BRERSRVNTX0JBTksxKEFERFJFU1MpIHx8IFwKQEAgLTc4NywxNiArODEwLDI4IEBACiAjZGVmaW5lIElTX0ZMQVNIX1BST0dSQU1fQUREUkVTUyhBRERSRVNTKSAgICAgICAoSVNfRkxBU0hfUFJPR1JBTV9BRERSRVNTX0JBTksxKEFERFJFU1MpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19GTEFTSF9QUk9HUkFNX0FERFJFU1NfQkFOSzIoQUREUkVTUykpCiAjZW5kaWYgLyogRkxBU0hfT1BUQ1JfUEdfT1RQICovCisjZWxzZQorI2lmIGRlZmluZWQgKEZMQVNIX09QVENSX1BHX09UUCkKKyNkZWZpbmUgSVNfRkxBU0hfUFJPR1JBTV9BRERSRVNTX09UUChBRERSRVNTKSAgICgoKEFERFJFU1MpID49IDB4MDhGRkYwMDBVKSAmJiAoKEFERFJFU1MpIDw9IDB4MDhGRkYzRkZVKSkKKyNkZWZpbmUgSVNfRkxBU0hfUFJPR1JBTV9BRERSRVNTKEFERFJFU1MpICAgICAgIChJU19GTEFTSF9QUk9HUkFNX0FERFJFU1NfQkFOSzEoQUREUkVTUykgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTX0ZMQVNIX1BST0dSQU1fQUREUkVTU19PVFAoQUREUkVTUykpCisjZWxzZQorI2RlZmluZSBJU19GTEFTSF9QUk9HUkFNX0FERFJFU1MoQUREUkVTUykgICAgICAgKElTX0ZMQVNIX1BST0dSQU1fQUREUkVTU19CQU5LMShBRERSRVNTKSkKKyNlbmRpZiAvKiBGTEFTSF9PUFRDUl9QR19PVFAgKi8KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAotI2RlZmluZSBJU19CT09UX0FERFJFU1MoQUREUkVTUykgICAgICAgICAgICgoQUREUkVTUykgPD0gKDB4M0ZGRjAwMDBVKSkKKyNkZWZpbmUgSVNfQk9PVF9BRERSRVNTKEFERFJFU1MpICAgICAgICAgKChBRERSRVNTKSA8PSAoMHgzRkZGMDAwMFUpKQogCi0jZGVmaW5lIElTX0ZMQVNIX0JBTksoQkFOSykgICAgICAgICAgICAgICAgKCgoQkFOSykgPT0gRkxBU0hfQkFOS18xKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBTkspID09IEZMQVNIX0JBTktfMikgIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQU5LKSA9PSBGTEFTSF9CQU5LX0JPVEgpKQotCi0jZGVmaW5lIElTX0ZMQVNIX0JBTktfRVhDTFVTSVZFKEJBTkspICAgICAgKCgoQkFOSykgPT0gRkxBU0hfQkFOS18xKSAgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBTkspID09IEZMQVNIX0JBTktfMikpCi0KKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCisjZGVmaW5lIElTX0ZMQVNIX0JBTksoQkFOSykgICAgICAgICAgICAgICgoKEJBTkspID09IEZMQVNIX0JBTktfMSkgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkFOSykgPT0gRkxBU0hfQkFOS18yKSAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQU5LKSA9PSBGTEFTSF9CQU5LX0JPVEgpKQorI2RlZmluZSBJU19GTEFTSF9CQU5LX0VYQ0xVU0lWRShCQU5LKSAgICAoKChCQU5LKSA9PSBGTEFTSF9CQU5LXzEpICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBTkspID09IEZMQVNIX0JBTktfMikpCisjZWxzZQorI2RlZmluZSBJU19GTEFTSF9CQU5LKEJBTkspICAgICAgICAgICAgICAoKEJBTkspID09IEZMQVNIX0JBTktfMSkKKyNkZWZpbmUgSVNfRkxBU0hfQkFOS19FWENMVVNJVkUoQkFOSykgICAgKChCQU5LKSA9PSBGTEFTSF9CQU5LXzEpCisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9mbGFzaF9leC5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfZmxhc2hfZXguaAppbmRleCBjZTY3ODU0Li4zYzRjODFhIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9mbGFzaF9leC5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX2ZsYXNoX2V4LmgKQEAgLTEzOCw2ICsxMzgsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIG9mIEByZWYgRkxBU0hFeF9PVFBfQmxvY2tzICovCiAjZW5kaWYgLyogRkxBU0hfT1RQQkxfTE9DS0JMICovCiAKKyNpZiBkZWZpbmVkIChGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRUQpCisgIHVpbnQzMl90IFNoYXJlZFJhbUNvbmZpZzsgLyohPCBTcGVjaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgVENNIC8gQVhJIHNoYXJlZCBSQU0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgdmFsdWUgb2YgQHJlZiBGTEFTSEV4X09CX1RDTV9BWElfU0hBUkVEICovCisjZW5kaWYgLyogRkxBU0hfT1BUU1IyX1RDTV9BWElfU0hBUkVEICovCisKKyNpZiBkZWZpbmVkIChGTEFTSF9PUFRTUjJfQ1BVRlJFUV9CT09TVCkKKyAgdWludDMyX3QgRnJlcUJvb3N0U3RhdGU7ICAvKiE8IFNwZWNpZmllcyB0aGUgc3RhdGUgb2YgQ1BVIEZyZXF1ZW5jeSBCb29zdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSB2YWx1ZSBvZiBAcmVmIEZMQVNIRXhfT0JfQ1BVRlJFUV9CT09TVCAqLworI2VuZGlmIC8qIEZMQVNIX09QVFNSMl9DUFVGUkVRX0JPT1NUICovCisKIH0gRkxBU0hfT0JQcm9ncmFtSW5pdFR5cGVEZWY7CiAKIC8qKgpAQCAtMjI3LDYgKzIzNywzMCBAQAogI2lmIGRlZmluZWQgKEZMQVNIX09UUEJMX0xPQ0tCTCkKICNkZWZpbmUgT1BUSU9OQllURV9PVFBfTE9DSyAgICAgIDB4ODBVICAvKiE8IE9UUCBMb2NrIG9wdGlvbiBieXRlIGNvbmZpZ3VyYXRpb24gKi8KICNlbmRpZiAvKiBGTEFTSF9PVFBCTF9MT0NLQkwgKi8KKyNpZiBkZWZpbmVkIChGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRUQpCisjZGVmaW5lIE9QVElPTkJZVEVfU0hBUkVEX1JBTSAgICAweDEwMFUgLyohPCBUQ00gLyBBWEkgU2hhcmVkIFJBTSBvcHRpb24gYnl0ZSBjb25maWd1cmF0aW9uICovCisjZW5kaWYgLyogRkxBU0hfT1BUU1IyX1RDTV9BWElfU0hBUkVEICovCisjaWYgZGVmaW5lZCAoRkxBU0hfT1BUU1IyX0NQVUZSRVFfQk9PU1QpCisjZGVmaW5lIE9QVElPTkJZVEVfRlJFUV9CT09TVCAgICAweDIwMFUgLyohPCBDUFUgRnJlcXVlbmN5IEJvb3N0IG9wdGlvbiBieXRlIGNvbmZpZ3VyYXRpb24gKi8KKyNlbmRpZiAvKiBGTEFTSF9PUFRTUjJfQ1BVRlJFUV9CT09TVCAqLworCisjaWYgZGVmaW5lZCAoRFVBTF9DT1JFKQorI2RlZmluZSBPUFRJT05CWVRFX0FMTCAgICAgICAgICAgKE9QVElPTkJZVEVfV1JQICAgICAgICAgfCBPUFRJT05CWVRFX1JEUCAgICAgICAgfCBPUFRJT05CWVRFX1VTRVIgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OQllURV9QQ1JPUCAgICAgICB8IE9QVElPTkJZVEVfQk9SICAgICAgICB8IE9QVElPTkJZVEVfU0VDVVJFX0FSRUEgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05CWVRFX0NNN19CT09UQUREIHwgT1BUSU9OQllURV9DTTRfQk9PVEFERCkgLyohPCBBbGwgb3B0aW9uIGJ5dGUgY29uZmlndXJhdGlvbiAqLworI2VsaWYgZGVmaW5lZCAoRkxBU0hfT1RQQkxfTE9DS0JMKQorI2RlZmluZSBPUFRJT05CWVRFX0FMTCAgICAgICAgICAgKE9QVElPTkJZVEVfV1JQICAgICAgICAgfCBPUFRJT05CWVRFX1JEUCAgICAgICAgfCBPUFRJT05CWVRFX1VTRVIgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OQllURV9QQ1JPUCAgICAgICB8IE9QVElPTkJZVEVfQk9SICAgICAgICB8IE9QVElPTkJZVEVfU0VDVVJFX0FSRUEgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05CWVRFX0JPT1RBREQgICAgIHwgT1BUSU9OQllURV9PVFBfTE9DSykgICAgLyohPCBBbGwgb3B0aW9uIGJ5dGUgY29uZmlndXJhdGlvbiAqLworI2VsaWYgZGVmaW5lZCAoRkxBU0hfT1BUU1IyX1RDTV9BWElfU0hBUkVEKQorI2RlZmluZSBPUFRJT05CWVRFX0FMTCAgICAgICAgICAgKE9QVElPTkJZVEVfV1JQICAgICAgICAgfCBPUFRJT05CWVRFX1JEUCAgICAgICAgfCBPUFRJT05CWVRFX1VTRVIgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OQllURV9QQ1JPUCAgICAgICB8IE9QVElPTkJZVEVfQk9SICAgICAgICB8IE9QVElPTkJZVEVfU0VDVVJFX0FSRUEgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05CWVRFX0JPT1RBREQgICAgIHwgT1BUSU9OQllURV9TSEFSRURfUkFNIHwgT1BUSU9OQllURV9GUkVRX0JPT1NUKSAvKiE8IEFsbCBvcHRpb24gYnl0ZSBjb25maWd1cmF0aW9uICovCisjZWxzZQorI2RlZmluZSBPUFRJT05CWVRFX0FMTCAgICAgICAgICAgKE9QVElPTkJZVEVfV1JQICAgICAgICAgfCBPUFRJT05CWVRFX1JEUCAgICAgICAgfCBPUFRJT05CWVRFX1VTRVIgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU9OQllURV9QQ1JPUCAgICAgICB8IE9QVElPTkJZVEVfQk9SICAgICAgICB8IE9QVElPTkJZVEVfU0VDVVJFX0FSRUEgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUFRJT05CWVRFX0JPT1RBREQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBbGwgb3B0aW9uIGJ5dGUgY29uZmlndXJhdGlvbiAqLworI2VuZGlmIC8qIERVQUxfQ09SRSAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI1NSw4ICsyODksOCBAQAogLyoqIEBkZWZncm91cCBGTEFTSEV4X09wdGlvbl9CeXRlc19JV2F0Y2hkb2cgRkxBU0ggT3B0aW9uIEJ5dGVzIElXYXRjaGRvZwogICAqIEB7CiAgICovCi0jZGVmaW5lIE9CX0lXREdfU1cgICAgICAgICAgIDB4MjBVICAvKiE8IFNvZnR3YXJlIElXREcgc2VsZWN0ZWQgKi8KLSNkZWZpbmUgT0JfSVdER19IVyAgICAgICAgICAgMHgwMFUgIC8qITwgSGFyZHdhcmUgSVdERyBzZWxlY3RlZCAqLworI2RlZmluZSBPQl9JV0RHX1NXICAgICAgICAgICBPQl9JV0RHMV9TVyAgLyohPCBTb2Z0d2FyZSBJV0RHIHNlbGVjdGVkICovCisjZGVmaW5lIE9CX0lXREdfSFcgICAgICAgICAgIE9CX0lXREcxX0hXICAvKiE8IEhhcmR3YXJlIElXREcgc2VsZWN0ZWQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0zNTEsOCArMzg1LDEwIEBACiAgICogQHsKICAgKi8KICNkZWZpbmUgRkxBU0hfQkFOS18xICAgICAgICAgICAgIDB4MDFVICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQmFuayAxICAgKi8KKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAjZGVmaW5lIEZMQVNIX0JBTktfMiAgICAgICAgICAgICAweDAyVSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEJhbmsgMiAgICovCi0jZGVmaW5lIEZMQVNIX0JBTktfQk9USCAgICAgICAgICAoRkxBU0hfQkFOS18xIHwgRkxBU0hfQkFOS18yKSAvKiE8IEJhbmsxIGFuZCBCYW5rMiAgKi8KKyNkZWZpbmUgRkxBU0hfQkFOS19CT1RIICAgICAgICAgIChGTEFTSF9CQU5LXzEgfCBGTEFTSF9CQU5LXzIpIC8qITwgQmFuazEgYW5kIEJhbmsyICovCisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNTAwLDcgKzUzNiw3IEBACiAgICogQH0KICAgKi8KIAotI2lmIGRlZmluZWQgKERVQUxfQ09SRSkKKyNpZiBkZWZpbmVkIChGTEFTSF9PUFRTUl9OUlNUX1NUT1BfRDIpCiAvKiogQGRlZmdyb3VwIEZMQVNIRXhfT0JfTlJTVF9TVE9QX0QyICBGTEFTSEV4IE9CIE5SU1QgU1RPUCBEMgogICAqIEB7CiAgICovCkBAIC01MTgsNyArNTU0LDcgQEAKIC8qKgogICAqIEB9CiAgICovCi0jZW5kaWYgLyogRFVBTF9DT1JFICovCisjZW5kaWYgLyogRkxBU0hfT1BUU1JfTlJTVF9TVE9QX0QyICovCiAKIC8qKiBAZGVmZ3JvdXAgRkxBU0hFeF9PQl9TV0FQX0JBTksgIEZMQVNIRXggT0IgU1dBUCBCQU5LCiAgICogQHsKQEAgLTU0OSwxNSArNTg1LDI5IEBACiAgICovCiAjZW5kaWYgLyogRkxBU0hfT1BUU1JfVkRETU1DX0hTTFYgKi8KIAotLyoqIEBkZWZncm91cCBGTEFTSEV4X09CX0JPT1RfT1BUSU9OICBGTEFTSEV4IE9CIEJPT1QgT1BUSU9OCisjaWYgZGVmaW5lZCAoRkxBU0hfT1BUU1IyX0NQVUZSRVFfQk9PU1QpCisvKiogQGRlZmdyb3VwIEZMQVNIRXhfT0JfQ1BVRlJFUV9CT09TVCBGTEFTSEV4IE9CIENQVUZSRVEgQk9PU1QKICAgKiBAewogICAqLwotI2RlZmluZSBPQl9CT09UX0FERDAgICAgICAgICAgIDB4MDFVICAgICAgIC8qITwgU2VsZWN0IEJvb3QgQWRkcmVzcyAwICovCi0jZGVmaW5lIE9CX0JPT1RfQUREMSAgICAgICAgICAgMHgwMlUgICAgICAgLyohPCBTZWxlY3QgQm9vdCBBZGRyZXNzIDEgKi8KLSNkZWZpbmUgT0JfQk9PVF9BRERfQk9USCAgICAgICAweDAzVSAgICAgICAvKiE8IFNlbGVjdCBCb290IEFkZHJlc3MgMCBhbmQgMSAqLworI2RlZmluZSBPQl9DUFVGUkVRX0JPT1NUX0RJU0FCTEUgICAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgIC8qITwgQ1BVRlJFUSBCT09TVCBkaXNhYmxlZCAqLworI2RlZmluZSBPQl9DUFVGUkVRX0JPT1NUX0VOQUJMRSAgICAgIEZMQVNIX09QVFNSMl9DUFVGUkVRX0JPT1NUIC8qITwgQ1BVRlJFUSBCT09TVCBlbmFibGVkICovCiAvKioKICAgKiBAfQogICAqLworI2VuZGlmIC8qIEZMQVNIX09QVFNSMl9DUFVGUkVRX0JPT1NUICovCisKKyNpZiBkZWZpbmVkIChGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRUQpCisvKiogQGRlZmdyb3VwIEZMQVNIRXhfT0JfVENNX0FYSV9TSEFSRUQgIEZMQVNIRXggT0IgVENNIEFYSSBTSEFSRUQKKyAgKiBAeworICAqLworI2RlZmluZSBPQl9UQ01fQVhJX1NIQVJFRF9JVENNNjRLQiAgIDB4MDAwMDAwMDBVICAgICAgICAgICAgICAgICAgIC8qITwgNjRLQiBJVENNIC8gMzIwS0Igc3lzdGVtIEFYSSAgKi8KKyNkZWZpbmUgT0JfVENNX0FYSV9TSEFSRURfSVRDTTEyOEtCICBGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRURfMCAvKiE8IDEyOEtCIElUQ00gLyAyNTZLQiBzeXN0ZW0gQVhJICovCisjZGVmaW5lIE9CX1RDTV9BWElfU0hBUkVEX0lUQ00xOTJLQiAgRkxBU0hfT1BUU1IyX1RDTV9BWElfU0hBUkVEXzEgLyohPCAxOTJLQiBJVENNIC8gMTkyS0Igc3lzdGVtIEFYSSAqLworI2RlZmluZSBPQl9UQ01fQVhJX1NIQVJFRF9JVENNMjU2S0IgIEZMQVNIX09QVFNSMl9UQ01fQVhJX1NIQVJFRCAgIC8qITwgMjU2S0IgSVRDTSAvIDEyOEtCIHN5c3RlbSBBWEkgKi8KKy8qKgorICAqIEB9CisgICovCisjZW5kaWYgLyogRkxBU0hfT1BUU1IyX1RDTV9BWElfU0hBUkVEICovCiAKICAvKiogQGRlZmdyb3VwIEZMQVNIRXhfT0JfVVNFUl9UeXBlICBGTEFTSEV4IE9CIFVTRVIgVHlwZQogICAqIEB7CkBAIC01NzAsNyArNjIwLDkgQEAKICNkZWZpbmUgT0JfVVNFUl9TVF9SQU1fU0laRSAgICAgICAweDAwMjBVIC8qITwgZGVkaWNhdGVkIERUQ00gUmFtIHNpemUgc2VsZWN0aW9uICovCiAjZGVmaW5lIE9CX1VTRVJfU0VDVVJJVFkgICAgICAgICAgMHgwMDQwVSAvKiE8IHNlY3VyaXR5IHNlbGVjdGlvbiAqLwogI2RlZmluZSBPQl9VU0VSX0lPSFNMViAgICAgICAgICAgIDB4MDA4MFUgLyohPCBJTyBIU0xWIHNlbGVjdGlvbiAqLworI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICNkZWZpbmUgT0JfVVNFUl9TV0FQX0JBTksgICAgICAgICAweDAxMDBVIC8qITwgQmFuayBzd2FwIHNlbGVjdGlvbiAqLworI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogI2lmIGRlZmluZWQgKEZMQVNIX09QVFNSX1ZERE1NQ19IU0xWKQogI2RlZmluZSBPQl9VU0VSX1ZERE1NQ19IU0xWICAgICAgIDB4MDIwMFUgLyohPCBWRERNTUMgSFNMViBzZWxlY3Rpb24gKi8KICNlbmRpZiAvKiBGTEFTSF9PUFRTUl9WRERNTUNfSFNMViAqLwpAQCAtNTc4LDEwICs2MzAsNDMgQEAKICNkZWZpbmUgT0JfVVNFUl9JV0RHMl9TVyAgICAgICAgICAweDAyMDBVIC8qITwgV2luZG93IHdhdGNoZG9nIHNlbGVjdGlvbiAqLwogI2RlZmluZSBPQl9VU0VSX0JDTTQgICAgICAgICAgICAgIDB4MDQwMFUgLyohPCBDTTQgYm9vdCBzZWxlY3Rpb24gKi8KICNkZWZpbmUgT0JfVVNFUl9CQ003ICAgICAgICAgICAgICAweDA4MDBVIC8qITwgQ003IGJvb3Qgc2VsZWN0aW9uICovCi0jZGVmaW5lIE9CX1VTRVJfTlJTVF9TVE9QX0QyICAgICAgMHgxMDAwVSAvKiE8IFJlc2V0IHdoZW4gZW50ZXJpbmcgU3RvcCBtb2RlIHNlbGVjdGlvbiovCi0jZGVmaW5lIE9CX1VTRVJfTlJTVF9TVERCWV9EMiAgICAgMHgyMDAwVSAvKiE8IFJlc2V0IHdoZW4gZW50ZXJpbmcgc3RhbmRieSBtb2RlIHNlbGVjdGlvbiovCiAjZW5kaWYgLypEVUFMX0NPUkUqLworI2lmIGRlZmluZWQgKEZMQVNIX09QVFNSX05SU1RfU1RPUF9EMikKKyNkZWZpbmUgT0JfVVNFUl9OUlNUX1NUT1BfRDIgICAgICAweDEwMDBVIC8qITwgUmVzZXQgd2hlbiBlbnRlcmluZyBTdG9wIG1vZGUgc2VsZWN0aW9uICovCisjZGVmaW5lIE9CX1VTRVJfTlJTVF9TVERCWV9EMiAgICAgMHgyMDAwVSAvKiE8IFJlc2V0IHdoZW4gZW50ZXJpbmcgc3RhbmRieSBtb2RlIHNlbGVjdGlvbiAqLworI2VuZGlmIC8qIEZMQVNIX09QVFNSX05SU1RfU1RPUF9EMiAqLwogCisjaWYgZGVmaW5lZCAoRFVBTF9DT1JFKQorI2RlZmluZSBPQl9VU0VSX0FMTCAoT0JfVVNFUl9JV0RHMV9TVyAgICAgfCBPQl9VU0VSX05SU1RfU1RPUF9EMSB8IE9CX1VTRVJfTlJTVF9TVERCWV9EMSB8XAorICAgICAgICAgICAgICAgICAgICAgT0JfVVNFUl9JV0RHX1NUT1AgICAgfCBPQl9VU0VSX0lXREdfU1REQlkgICB8IE9CX1VTRVJfU1RfUkFNX1NJWkUgICB8XAorICAgICAgICAgICAgICAgICAgICAgT0JfVVNFUl9TRUNVUklUWSAgICAgfCBPQl9VU0VSX0lPSFNMViAgICAgICB8IE9CX1VTRVJfU1dBUF9CQU5LICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgT0JfVVNFUl9JV0RHMl9TVyAgICAgfCBPQl9VU0VSX0JDTTQgICAgICAgICB8IE9CX1VTRVJfQkNNNyAgICAgICAgICB8XAorICAgICAgICAgICAgICAgICAgICAgT0JfVVNFUl9OUlNUX1NUT1BfRDIgfCBPQl9VU0VSX05SU1RfU1REQllfRDIpCisjZWxpZiBkZWZpbmVkIChGTEFTSF9PUFRTUl9WRERNTUNfSFNMVikKKyNkZWZpbmUgT0JfVVNFUl9BTEwgKE9CX1VTRVJfSVdERzFfU1cgICAgIHwgT0JfVVNFUl9OUlNUX1NUT1BfRDEgfCBPQl9VU0VSX05SU1RfU1REQllfRDEgfFwKKyAgICAgICAgICAgICAgICAgICAgIE9CX1VTRVJfSVdER19TVE9QICAgIHwgT0JfVVNFUl9JV0RHX1NUREJZICAgfCBPQl9VU0VSX1NUX1JBTV9TSVpFICAgfFwKKyAgICAgICAgICAgICAgICAgICAgIE9CX1VTRVJfU0VDVVJJVFkgICAgIHwgT0JfVVNFUl9JT0hTTFYgICAgICAgfCBPQl9VU0VSX1NXQVBfQkFOSyAgICAgfFwKKyAgICAgICAgICAgICAgICAgICAgIE9CX1VTRVJfVkRETU1DX0hTTFYpCisjZWxpZiBkZWZpbmVkIChGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRUQpCisjZGVmaW5lIE9CX1VTRVJfQUxMIChPQl9VU0VSX0lXREcxX1NXICAgICB8IE9CX1VTRVJfTlJTVF9TVE9QX0QxIHwgT0JfVVNFUl9OUlNUX1NUREJZX0QxIHxcCisgICAgICAgICAgICAgICAgICAgICBPQl9VU0VSX0lXREdfU1RPUCAgICB8IE9CX1VTRVJfSVdER19TVERCWSAgIHwgT0JfVVNFUl9TVF9SQU1fU0laRSAgIHxcCisgICAgICAgICAgICAgICAgICAgICBPQl9VU0VSX1NFQ1VSSVRZICAgICB8IE9CX1VTRVJfSU9IU0xWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcCisgICAgICAgICAgICAgICAgICAgICBPQl9VU0VSX05SU1RfU1RPUF9EMiB8IE9CX1VTRVJfTlJTVF9TVERCWV9EMikKKyNlbHNlCisjZGVmaW5lIE9CX1VTRVJfQUxMIChPQl9VU0VSX0lXREcxX1NXICAgICB8IE9CX1VTRVJfTlJTVF9TVE9QX0QxIHwgT0JfVVNFUl9OUlNUX1NUREJZX0QxIHxcCisgICAgICAgICAgICAgICAgICAgICBPQl9VU0VSX0lXREdfU1RPUCAgICB8IE9CX1VTRVJfSVdER19TVERCWSAgIHwgT0JfVVNFUl9TVF9SQU1fU0laRSAgIHxcCisgICAgICAgICAgICAgICAgICAgICBPQl9VU0VSX1NFQ1VSSVRZICAgICB8IE9CX1VTRVJfSU9IU0xWICAgICAgIHwgT0JfVVNFUl9TV0FQX0JBTksgICAgICkKKyNlbmRpZiAvKiBEVUFMX0NPUkUgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRkxBU0hFeF9PQl9CT09UX09QVElPTiAgRkxBU0hFeCBPQiBCT09UIE9QVElPTgorICAqIEB7CisgICovCisjZGVmaW5lIE9CX0JPT1RfQUREMCAgICAgICAgICAgMHgwMVUgICAgICAgLyohPCBTZWxlY3QgQm9vdCBBZGRyZXNzIDAgKi8KKyNkZWZpbmUgT0JfQk9PVF9BREQxICAgICAgICAgICAweDAyVSAgICAgICAvKiE8IFNlbGVjdCBCb290IEFkZHJlc3MgMSAqLworI2RlZmluZSBPQl9CT09UX0FERF9CT1RIICAgICAgIDB4MDNVICAgICAgIC8qITwgU2VsZWN0IEJvb3QgQWRkcmVzcyAwIGFuZCAxICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtNjc4LDkgKzc2MywxMyBAQAogICAqIEBwYXJhbSAgX19CQU5LX186IEZsYXNoIGJhbmsgKEZMQVNIX0JBTktfMSBvciBGTEFTSF9CQU5LXzIpCiAgICogQHJldHZhbCBub25lCiAgICovCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogI2RlZmluZSBfX0hBTF9GTEFTSF9TRVRfUFNJWkUoX19QU0laRV9fLCBfX0JBTktfXykgKCgoX19CQU5LX18pID09IEZMQVNIX0JBTktfMSkgID8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhGTEFTSC0+Q1IxLCBGTEFTSF9DUl9QU0laRSwgKF9fUFNJWkVfXykpIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhGTEFTSC0+Q1IyLCBGTEFTSF9DUl9QU0laRSwgKF9fUFNJWkVfXykpKQorI2Vsc2UKKyNkZWZpbmUgX19IQUxfRkxBU0hfU0VUX1BTSVpFKF9fUFNJWkVfXywgX19CQU5LX18pICBNT0RJRllfUkVHKEZMQVNILT5DUjEsIEZMQVNIX0NSX1BTSVpFLCAoX19QU0laRV9fKSkKKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIEZMQVNIIFByb2dyYW0vRXJhc2UgcGFyYWxsZWxpc20uCkBAIC02ODgsOSArNzc3LDE0IEBACiAgICogQHJldHZhbCBGTEFTSCBQcm9ncmFtL0VyYXNlIHBhcmFsbGVsaXNtCiAgICogICAgICAgICBUaGlzIHJldHVybiB2YWx1ZSBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZMQVNIX1Byb2dyYW1fUGFyYWxsZWxpc20KICAgKi8KKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAjZGVmaW5lIF9fSEFMX0ZMQVNIX0dFVF9QU0laRShfX0JBTktfXykgKCgoX19CQU5LX18pID09IEZMQVNIX0JBTktfMSkgPyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFEX0JJVCgoRkxBU0gtPkNSMSksIEZMQVNIX0NSX1BTSVpFKSAgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFEX0JJVCgoRkxBU0gtPkNSMiksIEZMQVNIX0NSX1BTSVpFKSkKKyNlbHNlCisjZGVmaW5lIF9fSEFMX0ZMQVNIX0dFVF9QU0laRShfX0JBTktfXykgIFJFQURfQklUKChGTEFTSC0+Q1IxKSwgRkxBU0hfQ1JfUFNJWkUpCisjZW5kaWYgLyogRFVBTF9CQU5LICovCisKICNlbmRpZiAvKiBGTEFTSF9DUl9QU0laRSAqLwogCiAvKioKQEAgLTcyNCw4ICs4MTgsMTAgQEAKIAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZMQVNIRXhfVW5sb2NrX0JhbmsxKHZvaWQpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZMQVNIRXhfTG9ja19CYW5rMSh2b2lkKTsKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkxBU0hFeF9VbmxvY2tfQmFuazIodm9pZCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkxBU0hFeF9Mb2NrX0JhbmsyKHZvaWQpOworI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkxBU0hFeF9Db21wdXRlQ1JDKEZMQVNIX0NSQ0luaXRUeXBlRGVmICpwQ1JDSW5pdCwgdWludDMyX3QgKkNSQ19SZXN1bHQpOwogCkBAIC03NjEsMTMgKzg1Nyw4IEBACiAjZGVmaW5lIElTX1dSUFNUQVRFKFZBTFVFKSAgICAgICAgICAgICAgICgoKFZBTFVFKSA9PSBPQl9XUlBTVEFURV9ESVNBQkxFKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBPQl9XUlBTVEFURV9FTkFCTEUpKQogCi0jaWYgZGVmaW5lZCAoRkxBU0hfT1BUU1JfVkRETU1DX0hTTFYpCi0jZGVmaW5lIElTX09QVElPTkJZVEUoVkFMVUUpICAgICAgICAgICAgICgoKFZBTFVFKSA8PSAweDAzRkZVKSAmJiAoKFZBTFVFKSAhPSAwVSkpCi0jZWxpZiBkZWZpbmVkIChEVUFMX0NPUkUpCi0jZGVmaW5lIElTX09QVElPTkJZVEUoVkFMVUUpICAgICAgICAgICAgICgoKFZBTFVFKSA8PSAweDNGRkZVKSAmJiAoKFZBTFVFKSAhPSAwVSkpCi0jZWxzZQotI2RlZmluZSBJU19PUFRJT05CWVRFKFZBTFVFKSAgICAgICAgICAgICAoKChWQUxVRSkgPD0gMHgwMUZGVSkgJiYgKChWQUxVRSkgIT0gMFUpKQotI2VuZGlmIC8qRFVBTF9DT1JFKi8KKyNkZWZpbmUgSVNfT1BUSU9OQllURShWQUxVRSkgICAgICAgICAgICAgKCgoKFZBTFVFKSAmIE9QVElPTkJZVEVfQUxMKSAhPSAwVSkgJiYgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoVkFMVUUpICYgfk9QVElPTkJZVEVfQUxMKSA9PSAwVSkpCiAKICNkZWZpbmUgSVNfT0JfQk9PVF9BRERSRVNTKEFERFJFU1MpICAgICAgKChBRERSRVNTKSA8PSAweDgwMTNVKQogCkBAIC04NTAsMTYgKzk0MSwyNSBAQAogI2RlZmluZSBJU19PQl9VU0VSX0JDTTQoVkFMVUUpICAgICAgICAgICAoKChWQUxVRSkgPT0gT0JfQkNNNF9ESVNBQkxFKSB8fCAoKFZBTFVFKSA9PSBPQl9CQ000X0VOQUJMRSkpCiAKICNkZWZpbmUgSVNfT0JfVVNFUl9CQ003KFZBTFVFKSAgICAgICAgICAgKCgoVkFMVUUpID09IE9CX0JDTTdfRElTQUJMRSkgfHwgKChWQUxVRSkgPT0gT0JfQkNNN19FTkFCTEUpKQorI2VuZGlmIC8qIERVQUxfQ09SRSAqLwogCisjaWYgZGVmaW5lZCAoRkxBU0hfT1BUU1JfTlJTVF9TVE9QX0QyKQogI2RlZmluZSBJU19PQl9TVE9QX0QyX1JFU0VUKFZBTFVFKSAgICAgICAoKChWQUxVRSkgPT0gT0JfU1RPUF9OT19SU1RfRDIpIHx8ICgoVkFMVUUpID09IE9CX1NUT1BfUlNUX0QyKSkKIAogI2RlZmluZSBJU19PQl9TVERCWV9EMl9SRVNFVChWQUxVRSkgICAgICAoKChWQUxVRSkgPT0gT0JfU1REQllfTk9fUlNUX0QyKSB8fCAoKFZBTFVFKSA9PSBPQl9TVERCWV9SU1RfRDIpKQotI2VuZGlmIC8qIERVQUxfQ09SRSAqLwotI2lmIGRlZmluZWQgKERVQUxfQ09SRSkKLSNkZWZpbmUgSVNfT0JfVVNFUl9UWVBFKFRZUEUpICAgICAgICAgICAgKCgoVFlQRSkgPD0gKHVpbnQzMl90KTB4M0ZGRlUpICYmICgoVFlQRSkgIT0gMFUpKQotI2Vsc2UKLSNkZWZpbmUgSVNfT0JfVVNFUl9UWVBFKFRZUEUpICAgICAgICAgICAgKCgoVFlQRSkgPD0gKHVpbnQzMl90KTB4NzNGVSkgJiYgKChUWVBFKSAhPSAwVSkpCi0jZW5kaWYgLyogRFVBTF9DT1JFICovCisjZW5kaWYgLyogRkxBU0hfT1BUU1JfTlJTVF9TVE9QX0QyICovCisKKyNpZiBkZWZpbmVkIChGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRUQpCisjZGVmaW5lIElTX09CX1VTRVJfVENNX0FYSV9TSEFSRUQoVkFMVUUpICgoKFZBTFVFKSA9PSBPQl9UQ01fQVhJX1NIQVJFRF9JVENNNjRLQikgfHwgKChWQUxVRSkgPT0gT0JfVENNX0FYSV9TSEFSRURfSVRDTTEyOEtCKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBPQl9UQ01fQVhJX1NIQVJFRF9JVENNMTkyS0IpIHx8ICgoVkFMVUUpID09IE9CX1RDTV9BWElfU0hBUkVEX0lUQ00yNTZLQikpCisjZW5kaWYgLyogRkxBU0hfT1BUU1IyX1RDTV9BWElfU0hBUkVEICovCisKKyNpZiBkZWZpbmVkIChGTEFTSF9PUFRTUjJfQ1BVRlJFUV9CT09TVCkKKyNkZWZpbmUgSVNfT0JfVVNFUl9DUFVGUkVRX0JPT1NUKFZBTFVFKSAgKCgoVkFMVUUpID09IE9CX0NQVUZSRVFfQk9PU1RfRElTQUJMRSkgfHwgKChWQUxVRSkgPT0gT0JfQ1BVRlJFUV9CT09TVF9FTkFCTEUpKQorI2VuZGlmIC8qIEZMQVNIX09QVFNSMl9DUFVGUkVRX0JPT1NUICovCisKKyNkZWZpbmUgSVNfT0JfVVNFUl9UWVBFKFRZUEUpICAgICAgICAgICAgKCgoKFRZUEUpICYgT0JfVVNFUl9BTEwpICE9IDBVKSAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChUWVBFKSAmIH5PQl9VU0VSX0FMTCkgPT0gMFUpKQogCiAjZGVmaW5lIElTX09CX0JPT1RfQUREX09QVElPTihWQUxVRSkgICAgICgoKFZBTFVFKSA9PSBPQl9CT09UX0FERDApICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFZBTFVFKSA9PSBPQl9CT09UX0FERDEpICB8fCBcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9mbWFjLmggYi9JbmMvc3RtMzJoN3h4X2hhbF9mbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViOTk0MQotLS0gL2Rldi9udWxsCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX2ZtYWMuaApAQCAtMCwwICsxLDY5NiBAQAorLyoqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBmaWxlICAgIHN0bTMyaDd4eF9oYWxfZm1hYy5oCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIEZNQUMgZmlybXdhcmUKKyAgKiAgICAgICAgICBsaWJyYXJ5LgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKKyAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovCisKKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZuZGVmIFNUTTMySDd4eF9IQUxfRk1BQ19ICisjZGVmaW5lIFNUTTMySDd4eF9IQUxfRk1BQ19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpbmNsdWRlICJzdG0zMmg3eHhfaGFsX2RlZi5oIgorCisjaWYgZGVmaW5lZChGTUFDKQorLyoqIEBhZGR0b2dyb3VwIFNUTTMySDd4eF9IQUxfRHJpdmVyCisgICogQHsKKyAgKi8KKworLyoqIEBhZGR0b2dyb3VwIEZNQUMKKyAgKiBAeworICAqLworCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBGTUFDX0V4cG9ydGVkX1R5cGVzIEZNQUMgRXhwb3J0ZWQgVHlwZXMKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIEZNQUMgSEFMIFN0YXRlIFN0cnVjdHVyZSBkZWZpbml0aW9uCisgICovCit0eXBlZGVmIGVudW0KK3sKKyAgSEFMX0ZNQUNfU1RBVEVfUkVTRVQgICAgICAgPSAweDAwVSwgICAgICAgICAgICAvKiE8IEZNQUMgbm90IHlldCBpbml0aWFsaXplZCBvciBkaXNhYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEhBTF9GTUFDX1NUQVRFX1JFQURZICAgICAgID0gMHgyMFUsICAgICAgICAgICAgLyohPCBGTUFDIGluaXRpYWxpemVkIGFuZCByZWFkeSBmb3IgdXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBIQUxfRk1BQ19TVEFURV9CVVNZICAgICAgICA9IDB4MjRVLCAgICAgICAgICAgIC8qITwgRk1BQyBpbnRlcm5hbCBwcm9jZXNzIGlzIG9uZ29pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX0ZNQUNfU1RBVEVfQlVTWV9SRCAgICAgPSAweDI1VSwgICAgICAgICAgICAvKiE8IEZNQUMgcmVhZGluZyBjb25maWd1cmF0aW9uIGlzIG9uZ29pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEhBTF9GTUFDX1NUQVRFX0JVU1lfV1IgICAgID0gMHgyNlUsICAgICAgICAgICAgLyohPCBGTUFDIHdyaXRpbmcgY29uZmlndXJhdGlvbiBpcyBvbmdvaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBIQUxfRk1BQ19TVEFURV9USU1FT1VUICAgICA9IDB4QTBVLCAgICAgICAgICAgIC8qITwgRk1BQyBpbiBUaW1lb3V0IHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX0ZNQUNfU1RBVEVfRVJST1IgICAgICAgPSAweEUwVSAgICAgICAgICAgICAvKiE8IEZNQUMgaW4gRXJyb3Igc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IEhBTF9GTUFDX1N0YXRlVHlwZURlZjsKKworLyoqCisgICogQGJyaWVmICBGTUFDIEhhbmRsZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgorICAqLworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCit0eXBlZGVmIHN0cnVjdCBfX0ZNQUNfSGFuZGxlVHlwZURlZgorI2Vsc2UKK3R5cGVkZWYgc3RydWN0CisjZW5kaWYgIC8qIFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KK3sKKyAgRk1BQ19UeXBlRGVmICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgICAgICAvKiE8IFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworCisgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgIEZpbHRlclBhcmFtOyAgICAgICAgLyohPCBGaWx0ZXIgY29uZmlndXJhdGlvbiAob3BlcmF0aW9uIGFuZCBwYXJhbWV0ZXJzKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0byAwIGlmIG5vIHZhbGlkIGNvbmZpZ3VyYXRpb24gd2FzIGFwcGxpZWQuICovCisKKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgSW5wdXRBY2Nlc3M7ICAgICAgIC8qITwgQWNjZXNzIHRvIHRoZSBpbnB1dCBidWZmZXIgKGludGVybmFsIG1lbW9yeSBhcmVhKTogRE1BLCBJVCwgUG9sbGluZywgTm9uZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUFDX0J1ZmZlcl9BY2Nlc3MuICovCisKKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgT3V0cHV0QWNjZXNzOyAgICAgIC8qITwgQWNjZXNzIHRvIHRoZSBvdXRwdXQgYnVmZmVyIChpbnRlcm5hbCBtZW1vcnkgYXJlYSk6IERNQSwgSVQsIFBvbGxpbmcsIE5vbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1BQ19CdWZmZXJfQWNjZXNzLiAqLworCisgIGludDE2X3QgICAgICAgICAgICAgICAgICAgICpwSW5wdXQ7ICAgICAgICAgICAgLyohPCBQb2ludGVyIHRvIEZNQUMgaW5wdXQgZGF0YSBidWZmZXIgKi8KKworICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICBJbnB1dEN1cnJlbnRTaXplOyAgIC8qITwgTnVtYmVyIG9mIHRoZSBpbnB1dCBlbGVtZW50cyBhbHJlYWR5IHdyaXR0ZW4gaW50byBGTUFDICovCisKKyAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgKnBJbnB1dFNpemU7ICAgICAgICAvKiE8IE51bWJlciBvZiBpbnB1dCBlbGVtZW50cyB0byB3cml0ZSAobWVtb3J5IGFsbG9jYXRlZCB0byBwSW5wdXQpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gY2FzZSBvZiBlYXJseSBpbnRlcnJ1cHRpb24gb2YgdGhlIGZpbHRlciBvcGVyYXRpb24sIGl0cyB2YWx1ZSB3aWxsIGJlIHVwZGF0ZWQuICovCisKKyAgaW50MTZfdCAgICAgICAgICAgICAgICAgICAgKnBPdXRwdXQ7ICAgICAgICAgICAvKiE8IFBvaW50ZXIgdG8gRk1BQyBvdXRwdXQgZGF0YSBidWZmZXIgKi8KKworICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICBPdXRwdXRDdXJyZW50U2l6ZTsgIC8qITwgTnVtYmVyIG9mIHRoZSBvdXRwdXQgZWxlbWVudHMgYWxyZWFkeSByZWFkIGZyb20gRk1BQyAqLworCisgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICpwT3V0cHV0U2l6ZTsgICAgICAgLyohPCBOdW1iZXIgb2Ygb3V0cHV0IGVsZW1lbnRzIHRvIHJlYWQgKG1lbW9yeSBhbGxvY2F0ZWQgdG8gcE91dHB1dCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIGVhcmx5IGludGVycnVwdGlvbiBvZiB0aGUgZmlsdGVyIG9wZXJhdGlvbiwgaXRzIHZhbHVlIHdpbGwgYmUgdXBkYXRlZC4gKi8KKworICBETUFfSGFuZGxlVHlwZURlZiAgICAgICAgICAqaGRtYUluOyAgICAgICAgICAgIC8qITwgRk1BQyBwZXJpcGhlcmFsIGlucHV0IGRhdGEgRE1BIGhhbmRsZSBwYXJhbWV0ZXJzICovCisKKyAgRE1BX0hhbmRsZVR5cGVEZWYgICAgICAgICAgKmhkbWFPdXQ7ICAgICAgICAgICAvKiE8IEZNQUMgcGVyaXBoZXJhbCBvdXRwdXQgZGF0YSBETUEgaGFuZGxlIHBhcmFtZXRlcnMgKi8KKworICBETUFfSGFuZGxlVHlwZURlZiAgICAgICAgICAqaGRtYVByZWxvYWQ7ICAgICAgIC8qITwgRk1BQyBwZXJpcGhlcmFsIHByZWxvYWRlZCBkYXRhIChYMSwgWDIgYW5kIFkpIERNQSBoYW5kbGUgcGFyYW1ldGVycyAqLworCisjaWYgKFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgdm9pZCAoKiBFcnJvckNhbGxiYWNrKShzdHJ1Y3QgX19GTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsgICAgICAgICAgICAgICAvKiE8IEZNQUMgZXJyb3IgY2FsbGJhY2sgICAgICAgICAgICAgICAgICAqLworCisgIHZvaWQgKCogSGFsZkdldERhdGFDYWxsYmFjaykoc3RydWN0IF9fRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyk7ICAgICAgICAgLyohPCBGTUFDIGdldCBoYWxmIGRhdGEgY2FsbGJhY2sgICAgICAgICAgKi8KKworICB2b2lkICgqIEdldERhdGFDYWxsYmFjaykoc3RydWN0IF9fRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyk7ICAgICAgICAgICAgIC8qITwgRk1BQyBnZXQgZGF0YSBjYWxsYmFjayAgICAgICAgICAgICAgICovCisKKyAgdm9pZCAoKiBIYWxmT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2spKHN0cnVjdCBfX0ZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpOyAvKiE8IEZNQUMgaGFsZiBvdXRwdXQgZGF0YSByZWFkeSBjYWxsYmFjayAqLworCisgIHZvaWQgKCogT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2spKHN0cnVjdCBfX0ZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpOyAgICAgLyohPCBGTUFDIG91dHB1dCBkYXRhIHJlYWR5IGNhbGxiYWNrICAgICAgKi8KKworICB2b2lkICgqIEZpbHRlckNvbmZpZ0NhbGxiYWNrKShzdHJ1Y3QgX19GTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsgICAgICAgIC8qITwgRk1BQyBmaWx0ZXIgY29uZmlndXJhdGlvbiBjYWxsYmFjayAgICovCisKKyAgdm9pZCAoKiBGaWx0ZXJQcmVsb2FkQ2FsbGJhY2spKHN0cnVjdCBfX0ZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpOyAgICAgICAvKiE8IEZNQUMgZmlsdGVyIHByZWxvYWQgY2FsbGJhY2sgICAgICAgICAqLworCisgIHZvaWQgKCogTXNwSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19GTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsgICAgICAgICAgICAgLyohPCBGTUFDIE1zcCBJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAgKi8KKworICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19GTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsgICAgICAgICAgIC8qITwgRk1BQyBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgICovCisKKyNlbmRpZiAvKiAoVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KKworICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICBMb2NrOyAgICAgICAgICAgICAgIC8qITwgRk1BQyBsb2NraW5nIG9iamVjdCAqLworCisgIF9fSU8gSEFMX0ZNQUNfU3RhdGVUeXBlRGVmIFN0YXRlOyAgICAgICAgICAgICAgLyohPCBGTUFDIHN0YXRlIHJlbGF0ZWQgdG8gZ2xvYmFsIGhhbmRsZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEhBTF9GTUFDX1N0YXRlVHlwZURlZiAqLworCisgIF9fSU8gSEFMX0ZNQUNfU3RhdGVUeXBlRGVmIFJkU3RhdGU7ICAgICAgICAgICAgLyohPCBGTUFDIHN0YXRlIHJlbGF0ZWQgdG8gcmVhZCBvcGVyYXRpb25zIChhY2Nlc3MgdG8gWSBidWZmZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEhBTF9GTUFDX1N0YXRlVHlwZURlZiAqLworCisgIF9fSU8gSEFMX0ZNQUNfU3RhdGVUeXBlRGVmIFdyU3RhdGU7ICAgICAgICAgICAgLyohPCBGTUFDIHN0YXRlIHJlbGF0ZWQgdG8gd3JpdGUgb3BlcmF0aW9ucyAoYWNjZXNzIHRvIFgxIGJ1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSEFMX0ZNQUNfU3RhdGVUeXBlRGVmICovCisKKyAgX19JTyB1aW50MzJfdCAgICAgICAgICAgICAgRXJyb3JDb2RlOyAgICAgICAgICAvKiE8IEZNQUMgcGVyaXBoZXJhbCBlcnJvciBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQUNfRXJyb3JfQ29kZSAqLworCit9IEZNQUNfSGFuZGxlVHlwZURlZjsKKworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisvKioKKyAgKiBAYnJpZWYgIEZNQUMgQ2FsbGJhY2sgSUQgc3RydWN0dXJlIGRlZmluaXRpb24KKyAgKi8KK3R5cGVkZWYgZW51bQoreworICBIQUxfRk1BQ19FUlJPUl9DQl9JRCAgICAgICAgICAgICAgICAgID0gMHgwMFUsIC8qITwgRk1BQyBlcnJvciBjYWxsYmFjayBJRCAgICAgICAgICAgICAgICAgICovCisgIEhBTF9GTUFDX0hBTEZfR0VUX0RBVEFfQ0JfSUQgICAgICAgICAgPSAweDAxVSwgLyohPCBGTUFDIGdldCBoYWxmIGRhdGEgY2FsbGJhY2sgSUQgICAgICAgICAgKi8KKyAgSEFMX0ZNQUNfR0VUX0RBVEFfQ0JfSUQgICAgICAgICAgICAgICA9IDB4MDJVLCAvKiE8IEZNQUMgZ2V0IGRhdGEgY2FsbGJhY2sgSUQgICAgICAgICAgICAgICAqLworICBIQUxfRk1BQ19IQUxGX09VVFBVVF9EQVRBX1JFQURZX0NCX0lEID0gMHgwM1UsIC8qITwgRk1BQyBoYWxmIG91dHB1dCBkYXRhIHJlYWR5IGNhbGxiYWNrIElEICovCisgIEhBTF9GTUFDX09VVFBVVF9EQVRBX1JFQURZX0NCX0lEICAgICAgPSAweDA0VSwgLyohPCBGTUFDIG91dHB1dCBkYXRhIHJlYWR5IGNhbGxiYWNrIElEICAgICAgKi8KKyAgSEFMX0ZNQUNfRklMVEVSX0NPTkZJR19DQl9JRCAgICAgICAgICA9IDB4MDVVLCAvKiE8IEZNQUMgZmlsdGVyIGNvbmZpZ3VyYXRpb24gY2FsbGJhY2sgSUQgICAqLworICBIQUxfRk1BQ19GSUxURVJfUFJFTE9BRF9DQl9JRCAgICAgICAgID0gMHgwNlUsIC8qITwgRk1BQyBmaWx0ZXIgcHJlbG9hZCBjYWxsYmFjayBJRCAgICAgICAgICovCisKKyAgSEFMX0ZNQUNfTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICAgICA9IDB4MDdVLCAvKiE8IEZNQUMgTXNwSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAgICAgICAqLworICBIQUxfRk1BQ19NU1BERUlOSVRfQ0JfSUQgICAgICAgICAgICAgID0gMHgwOFUsIC8qITwgRk1BQyBNc3BEZUluaXQgY2FsbGJhY2sgSUQgICAgICAgICAgICAgICovCit9IEhBTF9GTUFDX0NhbGxiYWNrSURUeXBlRGVmOworCisvKioKKyAgKiBAYnJpZWYgIEhBTCBGTUFDIENhbGxiYWNrIHBvaW50ZXIgZGVmaW5pdGlvbgorICAqLwordHlwZWRlZiAgdm9pZCAoKnBGTUFDX0NhbGxiYWNrVHlwZURlZikoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyk7ICAvKiE8IHBvaW50ZXIgdG8gYW4gRk1BQyBjYWxsYmFjayBmdW5jdGlvbiAqLworCisjZW5kaWYgLyogVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisvKioKKyAgKiBAYnJpZWYgIEZNQUMgRmlsdGVyIENvbmZpZ3VyYXRpb24gU3RydWN0dXJlIGRlZmluaXRpb24KKyAgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIElucHV0QmFzZUFkZHJlc3M7ICAvKiE8IEJhc2UgYWRkcmVzcyBvZiB0aGUgaW5wdXQgYnVmZmVyIChYMSkgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkgKDB4MDAgdG8gMHhGRikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElnbm9yZWQgaWYgSW5wdXRCdWZmZXJTaXplIGlzIHNldCB0byAwIChwcmV2aW91cyBjb25maWd1cmF0aW9uIGtlcHQpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQjogdGhlIGJ1ZmZlcnMgY2FuIG92ZXJsYXAgb3IgZXZlbiBjb2luY2lkZSBleGFjdGx5LiAqLworCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgIElucHV0QnVmZmVyU2l6ZTsgICAvKiE8IE51bWJlciBvZiAxNi1iaXQgYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUgaW5wdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGlmIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUga2VwdC4gKi8KKworICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICBJbnB1dFRocmVzaG9sZDsgICAgLyohPCBJbnB1dCB0aHJlc2hvbGQ6IHRoZSBidWZmZXIgZnVsbCBmbGFnIHdpbGwgYmUgc2V0IGlmIHRoZSBudW1iZXIgb2YgZnJlZSBzcGFjZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGJ1ZmZlciBpcyBpbmZlcmlvciB0byB0aGlzIHRocmVzaG9sZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUFDX0RhdGFfQnVmZmVyX1RocmVzaG9sZC4gKi8KKworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICBDb2VmZkJhc2VBZGRyZXNzOyAgLyohPCBCYXNlIGFkZHJlc3Mgb2YgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciAoWDIpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5ICgweDAwIHRvIDB4RkYpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZ25vcmVkIGlmIENvZWZmQnVmZmVyU2l6ZSBpcyBzZXQgdG8gMCAocHJldmlvdXMgY29uZmlndXJhdGlvbiBrZXB0KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkI6IHRoZSBidWZmZXJzIGNhbiBvdmVybGFwIG9yIGV2ZW4gY29pbmNpZGUgZXhhY3RseS4gKi8KKworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICBDb2VmZkJ1ZmZlclNpemU7ICAgLyohPCBOdW1iZXIgb2YgMTYtYml0IGFkZHJlc3NlcyBhbGxvY2F0ZWQgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCBpZiBhIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIGtlcHQuICovCisKKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgT3V0cHV0QmFzZUFkZHJlc3M7IC8qITwgQmFzZSBhZGRyZXNzIG9mIHRoZSBvdXRwdXQgYnVmZmVyIChZKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSAoMHgwMCB0byAweEZGKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWdub3JlZCBpZiBPdXB1dEJ1ZmZlclNpemUgaXMgc2V0IHRvIDAgKHByZXZpb3VzIGNvbmZpZ3VyYXRpb24ga2VwdCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5COiB0aGUgYnVmZmVycyBjYW4gb3ZlcmxhcCBvciBldmVuIGNvaW5jaWRlIGV4YWN0bHkuICovCisKKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgT3V0cHV0QnVmZmVyU2l6ZTsgIC8qITwgTnVtYmVyIG9mIDE2LWJpdCBhZGRyZXNzZXMgYWxsb2NhdGVkIHRvIHRoZSBvdXRwdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGlmIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUga2VwdC4gKi8KKworICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICBPdXRwdXRUaHJlc2hvbGQ7ICAgLyohPCBPdXRwdXQgdGhyZXNob2xkOiB0aGUgYnVmZmVyIGVtcHR5IGZsYWcgd2lsbCBiZSBzZXQgaWYgdGhlIG51bWJlciBvZiB1bnJlYWQgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBidWZmZXIgaXMgaW5mZXJpb3IgdG8gdGhpcyB0aHJlc2hvbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1BQ19EYXRhX0J1ZmZlcl9UaHJlc2hvbGQuICovCisKKyAgaW50MTZfdCAgICAgICAgICAgICAgICAgICAgKnBDb2VmZkE7ICAgICAgICAgIC8qITwgW0lJUiBvbmx5XSBJbml0aWFsaXphdGlvbiBvZiB0aGUgY29lZmZpY2llbnQgdmVjdG9yIEEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBuZWVkZWQsIGl0IHNob3VsZCBiZSBzZXQgdG8gTlVMTC4gKi8KKworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICBDb2VmZkFTaXplOyAgICAgICAgLyohPCBTaXplIG9mIHRoZSBjb2VmZmljaWVudCB2ZWN0b3IgQS4gKi8KKworICBpbnQxNl90ICAgICAgICAgICAgICAgICAgICAqcENvZWZmQjsgICAgICAgICAgLyohPCBJbml0aWFsaXphdGlvbiBvZiB0aGUgY29lZmZpY2llbnQgdmVjdG9yIEIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBuZWVkZWQgKHJlLXVzZSBvZiBhIHByZXZpb3VzbHkgbG9hZGVkIGJ1ZmZlciksIGl0IHNob3VsZCBiZSBzZXQgdG8gTlVMTC4gKi8KKworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICBDb2VmZkJTaXplOyAgICAgICAgLyohPCBTaXplIG9mIHRoZSBjb2VmZmljaWVudCB2ZWN0b3IgQi4gKi8KKworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICBJbnB1dEFjY2VzczsgICAgICAgLyohPCBBY2Nlc3MgdG8gdGhlIGlucHV0IGJ1ZmZlciAoaW50ZXJuYWwgbWVtb3J5IGFyZWEpOiBETVQsIElULCBQb2xsaW5nLCBOb25lLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZNQUNfQnVmZmVyX0FjY2Vzcy4gKi8KKworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICBPdXRwdXRBY2Nlc3M7ICAgICAgLyohPCBBY2Nlc3MgdG8gdGhlIG91dHB1dCBidWZmZXIgKGludGVybmFsIG1lbW9yeSBhcmVhKTogRE1BLCBJVCwgUG9sbGluZywgTm9uZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUFDX0J1ZmZlcl9BY2Nlc3MuICovCisKKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgQ2xpcDsgICAgICAgICAgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgdGhlIGNsaXBwaW5nIGZlYXR1cmUgKHdyYXBwaW5nIHdoZW4gdGhlIHExLjE1IHJhbmdlIGlzIGV4Y2VlZGVkKS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGTUFDX0NsaXBfU3RhdGUuICovCisKKyAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgRmlsdGVyOyAgICAgICAgICAgIC8qITwgRmlsdGVyIHR5cGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRk1BQ19GdW5jdGlvbnMgKGZpbHRlciByZWxhdGVkIHZhbHVlcykuICovCisKKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgUDsgICAgICAgICAgICAgICAgIC8qITwgUGFyYW1ldGVyIFAgKHZlY3RvciBsZW5ndGgsIG51bWJlciBvZiBmaWx0ZXIgdGFwcywgZXRjLikuICovCisKKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgUTsgICAgICAgICAgICAgICAgIC8qITwgUGFyYW1ldGVyIFEgKHZlY3RvciBsZW5ndGgsIGV0Yy4pLiBJZ25vcmVkIGlmIG5vdCBuZWVkZWQuICovCisKKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgUjsgICAgICAgICAgICAgICAgIC8qITwgUGFyYW1ldGVyIFIgKGdhaW4sIGV0Yy4pLiBJZ25vcmVkIGlmIG5vdCBuZWVkZWQuICovCisKK30gRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmOworCisvKioKKyAgKiBAfQorICAqLworCisKKy8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKworLyoqIEBkZWZncm91cCBGTUFDX0V4cG9ydGVkX0NvbnN0YW50cyBGTUFDIEV4cG9ydGVkIENvbnN0YW50cworICAqIEB7CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19FcnJvcl9Db2RlIEZNQUMgRXJyb3IgY29kZQorICAqIEB7CisgICovCisjZGVmaW5lIEhBTF9GTUFDX0VSUk9SX05PTkUgICAgICAgICAgICAgICAgMHgwMDAwMDAwMFVMIC8qITwgTm8gZXJyb3IgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9TQVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVTCAvKiE8IFNhdHVyYXRpb24gZXJyb3IgICAgICAgKi8KKyNkZWZpbmUgSEFMX0ZNQUNfRVJST1JfVU5GTCAgICAgICAgICAgICAgICAweDAwMDAwMDAyVUwgLyohPCBVbmRlcmZsb3cgZXJyb3IgICAgICAgICovCisjZGVmaW5lIEhBTF9GTUFDX0VSUk9SX09WRkwgICAgICAgICAgICAgICAgMHgwMDAwMDAwNFVMIC8qITwgT3ZlcmZsb3cgZXJyb3IgICAgICAgICAqLworI2RlZmluZSBIQUxfRk1BQ19FUlJPUl9ETUEgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDhVTCAvKiE8IERNQSBlcnJvciAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX0ZNQUNfRVJST1JfUkVTRVQgICAgICAgICAgICAgICAweDAwMDAwMDEwVUwgLyohPCBSZXNldCBlcnJvciAgICAgICAgICAgICovCisjZGVmaW5lIEhBTF9GTUFDX0VSUk9SX1BBUkFNICAgICAgICAgICAgICAgMHgwMDAwMDAyMFVMIC8qITwgUGFyYW1ldGVyIGVycm9yICAgICAgICAqLworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisjZGVmaW5lIEhBTF9GTUFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0sgICAgMHgwMDAwMDA0MFVMIC8qITwgSW52YWxpZCBDYWxsYmFjayBlcnJvciAqLworI2VuZGlmIC8qIFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyNkZWZpbmUgSEFMX0ZNQUNfRVJST1JfVElNRU9VVCAgICAgICAgICAgICAweDAwMDAwMDgwVUwgLyohPCBUaW1lb3V0IGVycm9yICAgICAgICAgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19GdW5jdGlvbnMgRk1BQyBGdW5jdGlvbnMKKyAgKiBAeworICAqLworI2RlZmluZSBGTUFDX0ZVTkNfTE9BRF9YMSAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKEZNQUNfUEFSQU1fRlVOQ18wKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMb2FkIFgxIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGTUFDX0ZVTkNfTE9BRF9YMiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKEZNQUNfUEFSQU1fRlVOQ18xKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMb2FkIFgyIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGTUFDX0ZVTkNfTE9BRF9ZICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKEZNQUNfUEFSQU1fRlVOQ18xIHwgRk1BQ19QQVJBTV9GVU5DXzApKSAgICAgICAgICAgICAgICAgICAgLyohPCBMb2FkIFkgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGTUFDX0ZVTkNfQ09OVk9fRklSICAgICAgICAgICAgICAgICgodWludDMyX3QpKEZNQUNfUEFSQU1fRlVOQ18zKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb252b2x1dGlvbiAoRklSIGZpbHRlcikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGTUFDX0ZVTkNfSUlSX0RJUkVDVF9GT1JNXzEgICAgICAgICgodWludDMyX3QpKEZNQUNfUEFSQU1fRlVOQ18zIHwgRk1BQ19QQVJBTV9GVU5DXzApKSAgICAgICAgICAgICAgICAgICAgLyohPCBJSVIgZmlsdGVyIChkaXJlY3QgZm9ybSAxKSAgICAgICAgICAgICAgICAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBGTUFDX0RhdGFfQnVmZmVyX1RocmVzaG9sZCBGTUFDIERhdGEgQnVmZmVyIFRocmVzaG9sZAorICAqIEB7CisgICogQG5vdGUgICAgIFRoaXMgcGFyYW1ldGVyIHNldHMgYSB3YXRlcm1hcmsgZm9yIGJ1ZmZlciBmdWxsIChpbnB1dCkgb3IgYnVmZmVyIGVtcHR5IChvdXRwdXQpLgorICAqLworI2RlZmluZSBGTUFDX1RIUkVTSE9MRF8xICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVTCAgICAvKiE8IElucHV0OiBCdWZmZXIgZnVsbCBmbGFnIHNldCBpZiB0aGUgbnVtYmVyIG9mIGZyZWUgc3BhY2VzIGluIHRoZSBidWZmZXIgaXMgbGVzcyB0aGFuIDEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBCdWZmZXIgZW1wdHkgZmxhZyBzZXQgaWYgdGhlIG51bWJlciBvZiB1bnJlYWQgdmFsdWVzIGluIHRoZSBidWZmZXIgaXMgbGVzcyB0aGFuIDEuICovCisjZGVmaW5lIEZNQUNfVEhSRVNIT0xEXzIgICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMFVMICAgIC8qITwgSW5wdXQ6IEJ1ZmZlciBmdWxsIGZsYWcgc2V0IGlmIHRoZSBudW1iZXIgb2YgZnJlZSBzcGFjZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gMi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IEJ1ZmZlciBlbXB0eSBmbGFnIHNldCBpZiB0aGUgbnVtYmVyIG9mIHVucmVhZCB2YWx1ZXMgaW4gdGhlIGJ1ZmZlciBpcyBsZXNzIHRoYW4gMi4gKi8KKyNkZWZpbmUgRk1BQ19USFJFU0hPTERfNCAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwVUwgICAgLyohPCBJbnB1dDogQnVmZmVyIGZ1bGwgZmxhZyBzZXQgaWYgdGhlIG51bWJlciBvZiBmcmVlIHNwYWNlcyBpbiB0aGUgYnVmZmVyIGlzIGxlc3MgdGhhbiA0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogQnVmZmVyIGVtcHR5IGZsYWcgc2V0IGlmIHRoZSBudW1iZXIgb2YgdW5yZWFkIHZhbHVlcyBpbiB0aGUgYnVmZmVyIGlzIGxlc3MgdGhhbiA0LiAqLworI2RlZmluZSBGTUFDX1RIUkVTSE9MRF84ICAgICAgICAgICAgICAgICAgIDB4MDMwMDAwMDBVTCAgICAvKiE8IElucHV0OiBCdWZmZXIgZnVsbCBmbGFnIHNldCBpZiB0aGUgbnVtYmVyIG9mIGZyZWUgc3BhY2VzIGluIHRoZSBidWZmZXIgaXMgbGVzcyB0aGFuIDguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBCdWZmZXIgZW1wdHkgZmxhZyBzZXQgaWYgdGhlIG51bWJlciBvZiB1bnJlYWQgdmFsdWVzIGluIHRoZSBidWZmZXIgaXMgbGVzcyB0aGFuIDguICovCisjZGVmaW5lIEZNQUNfVEhSRVNIT0xEX05PX1ZBTFVFICAgICAgICAgICAgMHhGRkZGRkZGRlVMICAgIC8qITwgVGhlIGNvbmZpZ3VyZWQgdGhyZXNob2xkIHZhbHVlIHNob3VsZG4ndCBiZSBjaGFuZ2VkICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfQnVmZmVyX0FjY2VzcyBGTUFDIEJ1ZmZlciBBY2Nlc3MKKyAgKiBAeworICAqLworI2RlZmluZSBGTUFDX0JVRkZFUl9BQ0NFU1NfTk9ORSAgICAgICAgICAgIDB4MDBVICAgICAgICAgICAvKiE8IEJ1ZmZlciBoYW5kbGVkIGJ5IGFuIGV4dGVybmFsIElQIChBREMgZm9yIGluc3RhbmNlKSAqLworI2RlZmluZSBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BICAgICAgICAgICAgIDB4MDFVICAgICAgICAgICAvKiE8IEJ1ZmZlciBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBGTUFDIERNQSAqLworI2RlZmluZSBGTUFDX0JVRkZFUl9BQ0NFU1NfUE9MTElORyAgICAgICAgIDB4MDJVICAgICAgICAgICAvKiE8IEJ1ZmZlciBhY2Nlc3NlZCB0aHJvdWdoIHBvbGxpbmcgKi8KKyNkZWZpbmUgRk1BQ19CVUZGRVJfQUNDRVNTX0lUICAgICAgICAgICAgICAweDAzVSAgICAgICAgICAgLyohPCBCdWZmZXIgYWNjZXNzZWQgdGhyb3VnaCBpbnRlcnJ1cHRpb25zICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfQ2xpcF9TdGF0ZSBGTUFDIENsaXAgU3RhdGUKKyAgKiBAeworICAqLworI2RlZmluZSBGTUFDX0NMSVBfRElTQUJMRUQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVTCAgICAvKiE8IENsaXBwaW5nIGRpc2FibGVkICovCisjZGVmaW5lIEZNQUNfQ0xJUF9FTkFCTEVEICAgICAgICAgICAgICAgICAgRk1BQ19DUl9DTElQRU4gIC8qITwgQ2xpcHBpbmcgZW5hYmxlZCAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBGTUFDX0ZsYWdzICBGTUFDIHN0YXR1cyBmbGFncworICAqIEB7CisgICovCisjZGVmaW5lIEZNQUNfRkxBR19ZRU1QVFkgICAgICAgICAgICAgICAgICAgRk1BQ19TUl9ZRU1QVFkgIC8qITwgWSBCdWZmZXIgRW1wdHkgRmxhZyAqLworI2RlZmluZSBGTUFDX0ZMQUdfWDFGVUxMICAgICAgICAgICAgICAgICAgIEZNQUNfU1JfWDFGVUxMICAvKiE8IFgxIEJ1ZmZlciBGdWxsIEZsYWcgKi8KKyNkZWZpbmUgRk1BQ19GTEFHX09WRkwgICAgICAgICAgICAgICAgICAgICBGTUFDX1NSX09WRkwgICAgLyohPCBPdmVyZmxvdyBFcnJvciBGbGFnICovCisjZGVmaW5lIEZNQUNfRkxBR19VTkZMICAgICAgICAgICAgICAgICAgICAgRk1BQ19TUl9VTkZMICAgIC8qITwgVW5kZXJmbG93IEVycm9yIEZsYWcgKi8KKyNkZWZpbmUgRk1BQ19GTEFHX1NBVCAgICAgICAgICAgICAgICAgICAgICBGTUFDX1NSX1NBVCAgICAgLyohPCBTYXR1cmF0aW9uIEVycm9yIEZsYWcgKHRoaXMgaGVscHMgaW4gZGVidWdnaW5nIGEgZmlsdGVyKSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBGTUFDX0ludGVycnVwdHNfRW5hYmxlIEZNQUMgSW50ZXJydXB0cyBFbmFibGUgYml0CisgICogQHsKKyAgKi8KKyNkZWZpbmUgRk1BQ19JVF9SSUVOICAgICAgICAgICAgICAgICAgICAgICBGTUFDX0NSX1JJRU4gICAgLyohPCBSZWFkIEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgRk1BQ19JVF9XSUVOICAgICAgICAgICAgICAgICAgICAgICBGTUFDX0NSX1dJRU4gICAgLyohPCBXcml0ZSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEZNQUNfSVRfT1ZGTElFTiAgICAgICAgICAgICAgICAgICAgRk1BQ19DUl9PVkZMSUVOIC8qITwgT3ZlcmZsb3cgRXJyb3IgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBGTUFDX0lUX1VORkxJRU4gICAgICAgICAgICAgICAgICAgIEZNQUNfQ1JfVU5GTElFTiAvKiE8IFVuZGVyZmxvdyBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIEZNQUNfSVRfU0FUSUVOICAgICAgICAgICAgICAgICAgICAgRk1BQ19DUl9TQVRJRU4gIC8qITwgU2F0dXJhdGlvbiBFcnJvciBJbnRlcnJ1cHQgRW5hYmxlICh0aGlzIGhlbHBzIGluIGRlYnVnZ2luZyBhIGZpbHRlcikgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19ETUFSIERNQSBSZWFkIFJlcXVlc3QgRW5hYmxlIGJpdAorICAqIEB7CisgICovCisjZGVmaW5lIEZNQUNfRE1BX1JFTiAgICAgICAgICAgICAgICAgICAgICAgRk1BQ19DUl9ETUFSRU4gIC8qITwgRE1BIFJlYWQgUmVxdWVzdHMgRW5hYmxlICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfRE1BVyBETUEgV3JpdGUgUmVxdWVzdCBFbmFibGUgYml0CisgICogQHsKKyAgKi8KKyNkZWZpbmUgRk1BQ19ETUFfV0VOICAgICAgICAgICAgICAgICAgICAgICBGTUFDX0NSX0RNQVdFTiAgLyohPCBETUEgV3JpdGUgQ2hhbm5lbCBFbmFibGUgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19ETUFTIERNQSBTVEFSVCBiaXQKKyAgKiBAeworICAqLworI2RlZmluZSBGTUFDX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgIEZNQUNfUEFSQU1fU1RBUlQgIC8qITwgRE1BIFN0YXJ0ICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfVGltZU91dF9WYWx1ZSAgICBGTUFDIHBvbGxpbmctYmFzZWQgY29tbXVuaWNhdGlvbnMgdGltZS1vdXQgdmFsdWUKKyAgKiBAeworICAqLworI2RlZmluZSBIQUxfRk1BQ19USU1FT1VUX1ZBTFVFICAgICAgICAgICAgIDEwMDBVTCAgICAgICAgICAvKiE8IEZNQUMgcG9sbGluZy1iYXNlZCBjb21tdW5pY2F0aW9ucyB0aW1lLW91dCB2YWx1ZSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBGTUFDX1Jlc2V0X1RpbWVPdXRfVmFsdWUgICAgRk1BQyByZXNldCB0aW1lLW91dCB2YWx1ZQorICAqIEB7CisgICovCisjZGVmaW5lIEhBTF9GTUFDX1JFU0VUX1RJTUVPVVRfVkFMVUUgICAgICAgNTAwVUwgICAgICAgICAgIC8qITwgRk1BQyByZXNldCB0aW1lLW91dCB2YWx1ZSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworCisvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBGTUFDX0V4cG9ydGVkX01hY3JvcyBGTUFDIEV4cG9ydGVkIE1hY3JvcworICAqIEB7CisgICovCisKKy8qKiBAYnJpZWYgIFJlc2V0IEZNQUMgaGFuZGxlIHN0YXRlLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGTUFDIGhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNpZiAoVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorI2RlZmluZSBfX0hBTF9GTUFDX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMFUpCisjZWxzZQorI2RlZmluZSBfX0hBTF9GTUFDX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFU0VUKQorI2VuZGlmIC8qIFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgdGhlIEZNQUMgaW50ZXJydXB0IHdoZW4gcmVzdWx0IGlzIHJlYWR5CisgICogQHBhcmFtICBfX0hBTkRMRV9fIEZNQUMgaGFuZGxlLgorICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBGTUFDIEludGVycnVwdC4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEByZWYgRk1BQ19JVF9SSUVOICAgIFJlYWQgaW50ZXJydXB0IGVuYWJsZQorICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfSVRfV0lFTiAgICBXcml0ZSBpbnRlcnJ1cHQgZW5hYmxlCisgICogICAgICAgICAgICBAYXJnIEByZWYgRk1BQ19JVF9PVkZMSUVOIE92ZXJmbG93IGVycm9yIGludGVycnVwdCBlbmFibGUKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0lUX1VORkxJRU4gVW5kZXJmbG93IGVycm9yIGludGVycnVwdCBlbmFibGUKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0lUX1NBVElFTiAgU2F0dXJhdGlvbiBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlICh0aGlzIGhlbHBzIGluIGRlYnVnZ2luZyBhIGZpbHRlcikKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgX19IQUxfRk1BQ19FTkFCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgXAorICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSKSB8PSAoX19JTlRFUlJVUFRfXykpCisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSB0aGUgRk1BQyBpbnRlcnJ1cHQKKyAgKiBAcGFyYW0gIF9fSEFORExFX18gRk1BQyBoYW5kbGUuCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIEZNQUMgSW50ZXJydXB0LgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0lUX1JJRU4gICAgUmVhZCBpbnRlcnJ1cHQgZW5hYmxlCisgICogICAgICAgICAgICBAYXJnIEByZWYgRk1BQ19JVF9XSUVOICAgIFdyaXRlIGludGVycnVwdCBlbmFibGUKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0lUX09WRkxJRU4gT3ZlcmZsb3cgZXJyb3IgaW50ZXJydXB0IGVuYWJsZQorICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfSVRfVU5GTElFTiBVbmRlcmZsb3cgZXJyb3IgaW50ZXJydXB0IGVuYWJsZQorICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfSVRfU0FUSUVOICBTYXR1cmF0aW9uIGVycm9yIGludGVycnVwdCBlbmFibGUgKHRoaXMgaGVscHMgaW4gZGVidWdnaW5nIGEgZmlsdGVyKQorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9GTUFDX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgXAorICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPkNSKSAmPSB+KF9fSU5URVJSVVBUX18pKQorCisvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgRk1BQyBpbnRlcnJ1cHQgb2NjdXJyZWQgb3Igbm90LgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGTUFDIGhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gRk1BQyBpbnRlcnJ1cHQgdG8gY2hlY2suCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfRkxBR19ZRU1QVFkgWSBCdWZmZXIgRW1wdHkgRmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfRkxBR19YMUZVTEwgWDEgQnVmZmVyIEZ1bGwgRmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfRkxBR19PVkZMICAgT3ZlcmZsb3cgRXJyb3IgRmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfRkxBR19VTkZMICAgVW5kZXJmbG93IEVycm9yIEZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0ZMQUdfU0FUICAgIFNhdHVyYXRpb24gRXJyb3IgRmxhZworICAqIEByZXR2YWwgU0VUIChpbnRlcnJ1cHQgb2NjdXJyZWQpIG9yIFJFU0VUIChpbnRlcnJ1cHQgZGlkIG5vdCBvY2N1cnJlZCkKKyAgKi8KKyNkZWZpbmUgX19IQUxfRk1BQ19HRVRfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgXAorICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlNSKSAmPSB+KF9fSU5URVJSVVBUX18pKQorCisvKiogQGJyaWVmICBDbGVhciBzcGVjaWZpZWQgRk1BQyBpbnRlcnJ1cHQgc3RhdHVzLiBEdW1teSBtYWNybyBhcyB0aGUKKyAgICAgICAgICAgIGludGVycnVwdCBzdGF0dXMgZmxhZ3MgYXJlIHJlYWQtb25seS4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gRk1BQyBoYW5kbGUuCisgICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIEZNQUMgaW50ZXJydXB0IHRvIGNsZWFyLgorICAqIEByZXR2YWwgTm9uZQorICAqLworI2RlZmluZSBfX0hBTF9GTUFDX0NMRUFSX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgLyogRHVtbXkgbWFjcm8gKi8KKworLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIEZNQUMgc3RhdHVzIGZsYWcgaXMgc2V0IG9yIG5vdC4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gRk1BQyBoYW5kbGUuCisgICogQHBhcmFtICBfX0ZMQUdfXyBGTUFDIGZsYWcgdG8gY2hlY2suCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfRkxBR19ZRU1QVFkgWSBCdWZmZXIgRW1wdHkgRmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfRkxBR19YMUZVTEwgWDEgQnVmZmVyIEZ1bGwgRmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfRkxBR19PVkZMICAgT3ZlcmZsb3cgRXJyb3IgRmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfRkxBR19VTkZMICAgVW5kZXJmbG93IEVycm9yIEZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0ZMQUdfU0FUICAgIFNhdHVyYXRpb24gZXJyb3IgRmxhZworICAqIEByZXR2YWwgU0VUIChmbGFnIGlzIHNldCkgb3IgUkVTRVQgKGZsYWcgaXMgcmVzZXQpCisgICovCisjZGVmaW5lIF9fSEFMX0ZNQUNfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pIFwKKyAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+U1IpICYgKF9fRkxBR19fKSkgPT0gKF9fRkxBR19fKSkKKworLyoqIEBicmllZiAgQ2xlYXIgc3BlY2lmaWVkIEZNQUMgc3RhdHVzIGZsYWcuIER1bW15IG1hY3JvIGFzIG5vCisgICAgICAgICAgICBmbGFnIGNhbiBiZSBjbGVhcmVkLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGTUFDIGhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fRkxBR19fIEZNQUMgZmxhZyB0byBjbGVhci4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgX19IQUxfRk1BQ19DTEVBUl9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgLyogRHVtbXkgbWFjcm8gKi8KKworLyoqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIEZNQUMgaW50ZXJydXB0IGlzIGVuYWJsZWQgb3Igbm90LgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGTUFDIGhhbmRsZS4KKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gRk1BQyBpbnRlcnJ1cHQgdG8gY2hlY2suCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfSVRfUklFTiAgICBSZWFkIGludGVycnVwdCBlbmFibGUKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBGTUFDX0lUX1dJRU4gICAgV3JpdGUgaW50ZXJydXB0IGVuYWJsZQorICAqICAgICAgICAgICAgQGFyZyBAcmVmIEZNQUNfSVRfT1ZGTElFTiBPdmVyZmxvdyBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlCisgICogICAgICAgICAgICBAYXJnIEByZWYgRk1BQ19JVF9VTkZMSUVOIFVuZGVyZmxvdyBlcnJvciBpbnRlcnJ1cHQgZW5hYmxlCisgICogICAgICAgICAgICBAYXJnIEByZWYgRk1BQ19JVF9TQVRJRU4gIFNhdHVyYXRpb24gZXJyb3IgaW50ZXJydXB0IGVuYWJsZSAodGhpcyBoZWxwcyBpbiBkZWJ1Z2dpbmcgYSBmaWx0ZXIpCisgICogQHJldHZhbCBGbGFnU3RhdHVzCisgICovCisjZGVmaW5lIF9fSEFMX0ZNQUNfR0VUX0lUX1NPVVJDRShfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSBcCisgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q1IpICYgKF9fSU5URVJSVVBUX18pKQorCisvKioKKyAgKiBAfQorICAqLworCisvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGFkZHRvZ3JvdXAgIEZNQUNfUHJpdmF0ZV9NYWNyb3MKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIFZlcmlmeSB0aGUgRk1BQyBmdW5jdGlvbi4KKyAgKiBAcGFyYW0gIF9fRlVOQ1RJT05fXyBJRCBvZiB0aGUgZnVuY3Rpb24uCisgICogQHJldHZhbCBTRVQgKF9fRlVOQ1RJT05fXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19GVU5DVElPTl9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0ZNQUNfRlVOQ1RJT04oX19GVU5DVElPTl9fKSAoKChfX0ZVTkNUSU9OX18pID09IEZNQUNfRlVOQ19MT0FEX1gxKSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZVTkNUSU9OX18pID09IEZNQUNfRlVOQ19MT0FEX1gyKSAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZVTkNUSU9OX18pID09IEZNQUNfRlVOQ19MT0FEX1kpICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZVTkNUSU9OX18pID09IEZNQUNfRlVOQ19DT05WT19GSVIpICAgICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0ZVTkNUSU9OX18pID09IEZNQUNfRlVOQ19JSVJfRElSRUNUX0ZPUk1fMSkpCisKKy8qKgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBGTUFDIGxvYWQgZnVuY3Rpb24uCisgICogQHBhcmFtICBfX0ZVTkNUSU9OX18gSUQgb2YgdGhlIGxvYWQgZnVuY3Rpb24uCisgICogQHJldHZhbCBTRVQgKF9fRlVOQ1RJT05fXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19GVU5DVElPTl9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0ZNQUNfTE9BRF9GVU5DVElPTihfX0ZVTkNUSU9OX18pICgoKF9fRlVOQ1RJT05fXykgPT0gRk1BQ19GVU5DX0xPQURfWDEpICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlVOQ1RJT05fXykgPT0gRk1BQ19GVU5DX0xPQURfWDIpICAgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlVOQ1RJT05fXykgPT0gRk1BQ19GVU5DX0xPQURfWSkpCisKKy8qKgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBGTUFDIGxvYWQgZnVuY3Rpb24uCisgICogQHBhcmFtICBfX0ZVTkNUSU9OX18gSUQgb2YgdGhlIGxvYWQgZnVuY3Rpb24uCisgICogQHJldHZhbCBTRVQgKF9fRlVOQ1RJT05fXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19GVU5DVElPTl9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0ZNQUNfTl9MT0FEX0ZVTkNUSU9OKF9fRlVOQ1RJT05fXykgKCgoX19GVU5DVElPTl9fKSA9PSBGTUFDX0ZVTkNfTE9BRF9YMSkgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GVU5DVElPTl9fKSA9PSBGTUFDX0ZVTkNfTE9BRF9ZKSkKKworLyoqCisgICogQGJyaWVmICBWZXJpZnkgdGhlIEZNQUMgbG9hZCBmdW5jdGlvbi4KKyAgKiBAcGFyYW0gIF9fRlVOQ1RJT05fXyBJRCBvZiB0aGUgbG9hZCBmdW5jdGlvbi4KKyAgKiBAcmV0dmFsIFNFVCAoX19GVU5DVElPTl9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX0ZVTkNUSU9OX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfRk1BQ19OX01fTE9BRF9GVU5DVElPTihfX0ZVTkNUSU9OX18pICgoX19GVU5DVElPTl9fKSA9PSBGTUFDX0ZVTkNfTE9BRF9YMikKKworLyoqCisgICogQGJyaWVmICBWZXJpZnkgdGhlIEZNQUMgZmlsdGVyIGZ1bmN0aW9uLgorICAqIEBwYXJhbSAgX19GVU5DVElPTl9fIElEIG9mIHRoZSBmaWx0ZXIgZnVuY3Rpb24uCisgICogQHJldHZhbCBTRVQgKF9fRlVOQ1RJT05fXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19GVU5DVElPTl9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0ZNQUNfRklMVEVSX0ZVTkNUSU9OKF9fRlVOQ1RJT05fXykgKCgoX19GVU5DVElPTl9fKSA9PSBGTUFDX0ZVTkNfQ09OVk9fRklSKSAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19GVU5DVElPTl9fKSA9PSBGTUFDX0ZVTkNfSUlSX0RJUkVDVF9GT1JNXzEpKQorCisKKy8qKgorICAqIEBicmllZiAgVmVyaWZ5IHRoZSBGTUFDIHRocmVzaG9sZC4KKyAgKiBAcGFyYW0gIF9fVEhSRVNIT0xEX18gVmFsdWUgb2YgdGhlIHRocmVzaG9sZC4KKyAgKiBAcmV0dmFsIFNFVCAoX19USFJFU0hPTERfXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19USFJFU0hPTERfXyBpcyBpbnZhbGlkKQorICAqLworI2RlZmluZSBJU19GTUFDX1RIUkVTSE9MRChfX1RIUkVTSE9MRF9fKSAoKChfX1RIUkVTSE9MRF9fKSA9PSBGTUFDX1RIUkVTSE9MRF8xKSAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1RIUkVTSE9MRF9fKSA9PSBGTUFDX1RIUkVTSE9MRF8yKSAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1RIUkVTSE9MRF9fKSA9PSBGTUFDX1RIUkVTSE9MRF80KSAgICAgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1RIUkVTSE9MRF9fKSA9PSBGTUFDX1RIUkVTSE9MRF9OT19WQUxVRSkgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1RIUkVTSE9MRF9fKSA9PSBGTUFDX1RIUkVTSE9MRF84KSkKKworLyoqCisgICogQGJyaWVmICBWZXJpZnkgdGhlIEZNQUMgZmlsdGVyIHBhcmFtZXRlciBQLgorICAqIEBwYXJhbSAgX19QX18gVmFsdWUgb2YgdGhlIGZpbHRlciBwYXJhbWV0ZXIgUC4KKyAgKiBAcGFyYW0gIF9fRlVOQ1RJT05fXyBJRCBvZiB0aGUgZmlsdGVyIGZ1bmN0aW9uLgorICAqIEByZXR2YWwgU0VUIChfX1BfXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19QX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfRk1BQ19QQVJBTV9QKF9fRlVOQ1RJT05fXywgX19QX18pICggKCgoX19GVU5DVElPTl9fKSA9PSBGTUFDX0ZVTkNfQ09OVk9fRklSKSAgICAgICAgICAgICAgICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fUF9fKSA+PSAyVSkgJiYgKChfX1BfXykgPD0gMTI3VSkpKSAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19GVU5DVElPTl9fKSA9PSBGTUFDX0ZVTkNfSUlSX0RJUkVDVF9GT1JNXzEpICAgICAgICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fUF9fKSA+PSAyVSkgJiYgKChfX1BfXykgPD0gNjRVKSkpICkKKworLyoqCisgICogQGJyaWVmICBWZXJpZnkgdGhlIEZNQUMgZmlsdGVyIHBhcmFtZXRlciBRLgorICAqIEBwYXJhbSAgX19RX18gVmFsdWUgb2YgdGhlIGZpbHRlciBwYXJhbWV0ZXIgUS4KKyAgKiBAcGFyYW0gIF9fRlVOQ1RJT05fXyBJRCBvZiB0aGUgZmlsdGVyIGZ1bmN0aW9uLgorICAqIEByZXR2YWwgU0VUIChfX1FfXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19RX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfRk1BQ19QQVJBTV9RKF9fRlVOQ1RJT05fXywgX19RX18pICggKChfX0ZVTkNUSU9OX18pID09IEZNQUNfRlVOQ19DT05WT19GSVIpICAgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19GVU5DVElPTl9fKSA9PSBGTUFDX0ZVTkNfSUlSX0RJUkVDVF9GT1JNXzEpICAgICAgICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKF9fUV9fKSA+PSAxVSkgJiYgKChfX1FfXykgPD0gNjNVKSkpICkKKworLyoqCisgICogQGJyaWVmICBWZXJpZnkgdGhlIEZNQUMgZmlsdGVyIHBhcmFtZXRlciBSLgorICAqIEBwYXJhbSAgX19SX18gVmFsdWUgb2YgdGhlIGZpbHRlciBwYXJhbWV0ZXIuCisgICogQHBhcmFtICBfX0ZVTkNUSU9OX18gSUQgb2YgdGhlIGZpbHRlciBmdW5jdGlvbi4KKyAgKiBAcmV0dmFsIFNFVCAoX19SX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fUl9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0ZNQUNfUEFSQU1fUihfX0ZVTkNUSU9OX18sIF9fUl9fKSAoICgoKF9fRlVOQ1RJT05fXykgPT0gRk1BQ19GVU5DX0NPTlZPX0ZJUikgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fRlVOQ1RJT05fXykgPT0gRk1BQ19GVU5DX0lJUl9ESVJFQ1RfRk9STV8xKSkgICAgICAmJiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19SX18pIDw9IDdVKSkKKworLyoqCisgICogQGJyaWVmICBWZXJpZnkgdGhlIEZNQUMgYnVmZmVyIGFjY2Vzcy4KKyAgKiBAcGFyYW0gIF9fQlVGRkVSX0FDQ0VTU19fIFR5cGUgb2YgYWNjZXNzLgorICAqIEByZXR2YWwgU0VUIChfX0JVRkZFUl9BQ0NFU1NfXyBpcyBhIHZhbGlkIHZhbHVlKSBvciBSRVNFVCAoX19CVUZGRVJfQUNDRVNTX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfRk1BQ19CVUZGRVJfQUNDRVNTKF9fQlVGRkVSX0FDQ0VTU19fKSAoKChfX0JVRkZFUl9BQ0NFU1NfXykgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX05PTkUpICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JVRkZFUl9BQ0NFU1NfXykgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX0RNQSkgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JVRkZFUl9BQ0NFU1NfXykgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX1BPTExJTkcpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0JVRkZFUl9BQ0NFU1NfXykgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX0lUKSkKKworLyoqCisgICogQGJyaWVmICBWZXJpZnkgdGhlIEZNQUMgY2xpcCBmZWF0dXJlLgorICAqIEBwYXJhbSAgX19DTElQX1NUQVRFX18gQ2xpcCBzdGF0ZS4KKyAgKiBAcmV0dmFsIFNFVCAoX19DTElQX1NUQVRFX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fQ0xJUF9TVEFURV9fIGlzIGludmFsaWQpCisgICovCisjZGVmaW5lIElTX0ZNQUNfQ0xJUF9TVEFURShfX0NMSVBfU1RBVEVfXykgKCgoX19DTElQX1NUQVRFX18pID09IEZNQUNfQ0xJUF9ESVNBQkxFRCkgICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19DTElQX1NUQVRFX18pID09IEZNQUNfQ0xJUF9FTkFCTEVEKSkKKworLyoqCisgICogQH0KKyAgKi8KKworLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qKiBAYWRkdG9ncm91cCBGTUFDX0V4cG9ydGVkX0Z1bmN0aW9ucworICAqIEB7CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBGTUFDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKKyAgKiBAeworICAqLworLyogSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0luaXQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19EZUluaXQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyk7Cit2b2lkIEhBTF9GTUFDX01zcEluaXQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyk7Cit2b2lkIEhBTF9GTUFDX01zcERlSW5pdChGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKKworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisvKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfUmVnaXN0ZXJDYWxsYmFjayhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBIQUxfRk1BQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRk1BQ19DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX1VuUmVnaXN0ZXJDYWxsYmFjayhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBIQUxfRk1BQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGFkZHRvZ3JvdXAgRk1BQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyCisgICogQHsKKyAgKi8KKy8qIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19GaWx0ZXJDb25maWcoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmICpzQ29uZmlnKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlckNvbmZpZ19ETUEoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmICpzQ29uZmlnKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlclByZWxvYWQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcElucHV0LCB1aW50OF90IElucHV0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqcE91dHB1dCwgdWludDhfdCBPdXRwdXRTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlclByZWxvYWRfRE1BKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIGludDE2X3QgKnBJbnB1dCwgdWludDhfdCBJbnB1dFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpwT3V0cHV0LCB1aW50OF90IE91dHB1dFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfRmlsdGVyU3RhcnQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcE91dHB1dCwgdWludDE2X3QgKnBPdXRwdXRTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0FwcGVuZEZpbHRlckRhdGEoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcElucHV0LCB1aW50MTZfdCAqcElucHV0U2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19Db25maWdGaWx0ZXJPdXRwdXRCdWZmZXIoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcE91dHB1dCwgdWludDE2X3QgKnBPdXRwdXRTaXplKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX1BvbGxGaWx0ZXJEYXRhKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIHVpbnQzMl90IFRpbWVvdXQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfRmlsdGVyU3RvcChGTUFDX0hhbmRsZVR5cGVEZWYgICpoZm1hYyk7CisvKioKKyAgKiBAfQorICAqLworCisvKiogQGFkZHRvZ3JvdXAgRk1BQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzCisgICogQHsKKyAgKi8KKy8qIENhbGxiYWNrIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIEhBTF9GTUFDX0Vycm9yQ2FsbGJhY2soRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyk7Cit2b2lkIEhBTF9GTUFDX0hhbGZHZXREYXRhQ2FsbGJhY2soRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyk7Cit2b2lkIEhBTF9GTUFDX0dldERhdGFDYWxsYmFjayhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKK3ZvaWQgSEFMX0ZNQUNfSGFsZk91dHB1dERhdGFSZWFkeUNhbGxiYWNrKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpOwordm9pZCBIQUxfRk1BQ19PdXRwdXREYXRhUmVhZHlDYWxsYmFjayhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKK3ZvaWQgSEFMX0ZNQUNfRmlsdGVyQ29uZmlnQ2FsbGJhY2soRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyk7Cit2b2lkIEhBTF9GTUFDX0ZpbHRlclByZWxvYWRDYWxsYmFjayhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBGTUFDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQKKyAgKiBAeworICAqLworLyogSVJRIGhhbmRsZXIgbWFuYWdlbWVudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgSEFMX0ZNQUNfSVJRSGFuZGxlcihGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBGTUFDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDUKKyAgKiBAeworICAqLworLyogUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9GTUFDX1N0YXRlVHlwZURlZiBIQUxfRk1BQ19HZXRTdGF0ZShGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKK3VpbnQzMl90IEhBTF9GTUFDX0dldEVycm9yKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpOworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIEZNQUMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFNUTTMySDd4eF9IQUxfRk1BQ19IICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9ncGlvX2V4LmggYi9JbmMvc3RtMzJoN3h4X2hhbF9ncGlvX2V4LmgKaW5kZXggOTMzYTRjNS4uZGM1NjQ4MyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfZ3Bpb19leC5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX2dwaW9fZXguaApAQCAtNzcsNiArNzcsMTEgQEAKICNpZiBkZWZpbmVkKEhSVElNMSkKICNkZWZpbmUgR1BJT19BRjFfSFJUSU0xICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgIC8qIEhSVElNMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLwogI2VuZGlmIC8qIEhSVElNMSAqLworI2lmIGRlZmluZWQoU0FJNCkKKyNkZWZpbmUgR1BJT19BRjFfU0FJNCAgICAgICAgICAoKHVpbnQ4X3QpMHgwMSkgIC8qIFNBSTQgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgOiBhdmFpbGFibGUgb24gU1RNMzJINzJ4eHgvU1RNMzJINzN4eHggKi8KKyNlbmRpZiAvKiBTQUk0ICovCisjZGVmaW5lIEdQSU9fQUYxX0ZNQyAgICAgICAgICAgKCh1aW50OF90KTB4MDEpICAvKiBGTUMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgOiBhdmFpbGFibGUgb24gU1RNMzJINzJ4eHgvU1RNMzJINzN4eHggKi8KKwogCiAvKioKICAgKiBAYnJpZWYgICBBRiAyIHNlbGVjdGlvbgpAQCAtODksNyArOTQsMTAgQEAKICNpZiBkZWZpbmVkKEhSVElNMSkKICNkZWZpbmUgR1BJT19BRjJfSFJUSU0xICAgICAgICAoKHVpbnQ4X3QpMHgwMikgIC8qIEhSVElNMSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLwogI2VuZGlmIC8qIEhSVElNMSAqLwotI2RlZmluZSBHUElPX0FGMl9USU0xNSAgICAgICAgICgodWludDhfdCkweDAyKSAgLyogVElNMTUgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgOiBhdmFpbGFibGUgb24gU1RNMzJIN0EzeHh4L1NUTTMySDdCM3h4eC9TVE0zMkg3QjB4eHggKi8KKyNkZWZpbmUgR1BJT19BRjJfVElNMTUgICAgICAgICAoKHVpbnQ4X3QpMHgwMikgIC8qIFRJTTE1IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nIDogYXZhaWxhYmxlIG9uIFNUTTMySDdBM3h4eC9TVE0zMkg3QjN4eHgvU1RNMzJIN0IweHh4IGFuZCBTVE0zMkg3Mnh4eC9TVE0zMkg3M3h4eCAqLworI2lmIGRlZmluZWQoRkRDQU4zKQorI2RlZmluZSBHUElPX0FGMl9GRENBTjMgICAgICAgICgodWludDhfdCkweDAyKSAgLyogRkRDQU4zIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovCisjZW5kaWYgLypGRENBTjMqLwogCiAvKioKICAgKiBAYnJpZWYgICBBRiAzIHNlbGVjdGlvbgpAQCAtMTA4LDYgKzExNiw3IEBACiAjaWYgZGVmaW5lZChIUlRJTTEpCiAjZGVmaW5lIEdQSU9fQUYzX0hSVElNMSAgICAgICAgKCh1aW50OF90KTB4MDMpICAvKiBIUlRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8KICNlbmRpZiAvKiBIUlRJTTEgKi8KKyNkZWZpbmUgR1BJT19BRjNfTFREQyAgICAgICAgICAoKHVpbnQ4X3QpMHgwMykgIC8qIExUREMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgOiBhdmFpbGFibGUgb24gU1RNMzJINzJ4eHgvU1RNMzJINzN4eHggKi8KIAogLyoqCiAgICogQGJyaWVmICAgQUYgNCBzZWxlY3Rpb24KQEAgLTExNiwxNyArMTI1LDI3IEBACiAjZGVmaW5lIEdQSU9fQUY0X0kyQzIgICAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiBJMkMyIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KICNkZWZpbmUgR1BJT19BRjRfSTJDMyAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgIC8qIEkyQzMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLwogI2RlZmluZSBHUElPX0FGNF9JMkM0ICAgICAgICAgICgodWludDhfdCkweDA0KSAgLyogSTJDNCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICovCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBHUElPX0FGNF9JMkM1ICAgICAgICAgICgodWludDhfdCkweDA0KSAgLyogSTJDNSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICovCisjZW5kaWYgLyogSTJDNSovCiAjZGVmaW5lIEdQSU9fQUY0X1RJTTE1ICAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiBUSU0xNSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgKi8KICNkZWZpbmUgR1BJT19BRjRfQ0VDICAgICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgIC8qIENFQyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAqLwogI2RlZmluZSBHUElPX0FGNF9MUFRJTTIgICAgICAgICgodWludDhfdCkweDA0KSAgLyogTFBUSU0yIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovCiAjZGVmaW5lIEdQSU9fQUY0X1VTQVJUMSAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiBVU0FSVDEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8KKyNpZiBkZWZpbmVkKFVTQVJUMTApCisjZGVmaW5lIEdQSU9fQUY0X1VTQVJUMTAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiBVU0FSVDEwIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nIDogYXZhaWxhYmxlIG9uIFNUTTMySDcyeHh4L1NUTTMySDczeHh4ICovCisjZW5kaWYgLypVU0FSVDEwKi8KICNkZWZpbmUgR1BJT19BRjRfREZTRE0xICAgICAgICAoKHVpbnQ4X3QpMHgwNCkgIC8qIERGU0RNICBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLwogI2lmIGRlZmluZWQoREZTRE0yX0JBU0UpCiAjZGVmaW5lIEdQSU9fQUY0X0RGU0RNMiAgICAgICAgKCh1aW50OF90KTB4MDQpICAvKiBERlNETTIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8KICNlbmRpZiAvKiBERlNETTJfQkFTRSAqLworI2RlZmluZSBHUElPX0FGNF9EQ01JICAgICAgICAgICgodWludDhfdCkweDA0KSAgIC8qIERDTUkgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgOiBhdmFpbGFibGUgb24gU1RNMzJIN0EzeHh4L1NUTTMySDdCM3h4eC9TVE0zMkg3QjB4eHggYW5kIFNUTTMySDcyeHh4L1NUTTMySDczeHh4ICovCiAjaWYgZGVmaW5lZChQU1NJKQogI2RlZmluZSBHUElPX0FGNF9QU1NJICAgICAgICAgICgodWludDhfdCkweDA0KSAgLyogUFNTSSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICovCiAjZW5kaWYgLyogUFNTSSAqLworI2lmIGRlZmluZWQoT0NUT1NQSU0pCisjZGVmaW5lIEdQSU9fQUY0X09DVE9TUElNX1AxICAgKCh1aW50OF90KTB4MDQpICAvKiBPQ1RPU1BJIE1hbmFnZXIgUG9ydCAxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICA6IGF2YWlsYWJsZSBvbiBTVE0zMkg3Mnh4eC9TVE0zMkg3M3h4eCAqLworI2VuZGlmIC8qIE9DVE9TUElNICovCiAKIC8qKgogICAqIEBicmllZiAgIEFGIDUgc2VsZWN0aW9uCkBAIC0xMzgsNiArMTU3LDkgQEAKICNkZWZpbmUgR1BJT19BRjVfU1BJNSAgICAgICAgICAoKHVpbnQ4X3QpMHgwNSkgIC8qIFNQSTUgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLwogI2RlZmluZSBHUElPX0FGNV9TUEk2ICAgICAgICAgICgodWludDhfdCkweDA1KSAgLyogU1BJNiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICovCiAjZGVmaW5lIEdQSU9fQUY1X0NFQyAgICAgICAgICAgKCh1aW50OF90KTB4MDUpICAvKiBDRUMgIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNpZiBkZWZpbmVkKEZEQ0FOMykKKyNkZWZpbmUgR1BJT19BRjVfRkRDQU4zICAgICAgICAoKHVpbnQ4X3QpMHgwNSkgIC8qIEZEQ0FOMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLworI2VuZGlmIC8qRkRDQU4zKi8KIAogLyoqCiAgICogQGJyaWVmICAgQUYgNiBzZWxlY3Rpb24KQEAgLTE0Niw2ICsxNjgsOSBAQAogI2RlZmluZSBHUElPX0FGNl9TUEkzICAgICAgICAgICgodWludDhfdCkweDA2KSAgLyogU1BJMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICovCiAjZGVmaW5lIEdQSU9fQUY2X1NBSTEgICAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiBTQUkxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KICNkZWZpbmUgR1BJT19BRjZfSTJDNCAgICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qIEkyQzQgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgR1BJT19BRjZfSTJDNSAgICAgICAgICAoKHVpbnQ4X3QpMHgwNikgIC8qIEkyQzUgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAqLworI2VuZGlmIC8qIEkyQzUqLwogI2RlZmluZSBHUElPX0FGNl9ERlNETTEgICAgICAgICgodWludDhfdCkweDA2KSAgLyogREZTRE0gQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICovCiAjZGVmaW5lIEdQSU9fQUY2X1VBUlQ0ICAgICAgICAgKCh1aW50OF90KTB4MDYpICAvKiBVQVJUNCBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgKi8KICNpZiBkZWZpbmVkKERGU0RNMl9CQVNFKQpAQCAtMTY5LDE0ICsxOTQsMTUgQEAKICNkZWZpbmUgR1BJT19BRjdfVVNBUlQzICAgICAgICAoKHVpbnQ4X3QpMHgwNykgIC8qIFVTQVJUMyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLwogI2RlZmluZSBHUElPX0FGN19VU0FSVDYgICAgICAgICgodWludDhfdCkweDA3KSAgLyogVVNBUlQ2IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovCiAjZGVmaW5lIEdQSU9fQUY3X1VBUlQ3ICAgICAgICAgKCh1aW50OF90KTB4MDcpICAvKiBVQVJUNyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgKi8KLSNkZWZpbmUgR1BJT19BRjdfREZTRE0xICAgICAgICAoKHVpbnQ4X3QpMHgwNykgIC8qIERGU0RNIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAqLwogI2RlZmluZSBHUElPX0FGN19TRE1NQzEgICAgICAgICgodWludDhfdCkweDA3KSAgLyogU0RNTUMxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovCiAKIC8qKgogICAqIEBicmllZiAgIEFGIDggc2VsZWN0aW9uCiAgICovCiAjZGVmaW5lIEdQSU9fQUY4X1NQSTYgICAgICAgICAgKCh1aW50OF90KTB4MDgpICAvKiBTUEk2IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNpZiBkZWZpbmVkKFNBSTIpCiAjZGVmaW5lIEdQSU9fQUY4X1NBSTIgICAgICAgICAgKCh1aW50OF90KTB4MDgpICAvKiBTQUkyIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgKi8KKyNlbmRpZiAvKlNBSTIqLwogI2RlZmluZSBHUElPX0FGOF9VQVJUNCAgICAgICAgICgodWludDhfdCkweDA4KSAgLyogVUFSVDQgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICovCiAjZGVmaW5lIEdQSU9fQUY4X1VBUlQ1ICAgICAgICAgKCh1aW50OF90KTB4MDgpICAvKiBVQVJUNSBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgKi8KICNkZWZpbmUgR1BJT19BRjhfVUFSVDggICAgICAgICAoKHVpbnQ4X3QpMHgwOCkgIC8qIFVBUlQ4IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAqLwpAQCAtMjEyLDcgKzIzOCw5IEBACiAvKioKICAgKiBAYnJpZWYgICBBRiAxMCBzZWxlY3Rpb24KICAgKi8KKyNpZiBkZWZpbmVkKFNBSTIpCiAjZGVmaW5lIEdQSU9fQUYxMF9TQUkyICAgICAgICAgICgodWludDhfdCkweDBBKSAgLyogU0FJMiBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZW5kaWYgLypTQUkyKi8KICNkZWZpbmUgR1BJT19BRjEwX1NETU1DMiAgICAgICAgKCh1aW50OF90KTB4MEEpICAvKiBTRE1NQzIgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNpZiBkZWZpbmVkKFVTQjJfT1RHX0ZTKQogI2RlZmluZSBHUElPX0FGMTBfT1RHMl9GUyAgICAgICAoKHVpbnQ4X3QpMHgwQSkgIC8qIE9URzJfRlMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjMwLDEzICsyNTgsMTQgQEAKICNkZWZpbmUgR1BJT19BRjEwX1NBSTQgICAgICAgICAgKCh1aW50OF90KTB4MEEpICAvKiBTQUk0IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNlbmRpZiAvKiBTQUk0ICovCiAjaWYgIWRlZmluZWQoVVNCMl9PVEdfRlMpCi0jZGVmaW5lIEdQSU9fQUYxMF9PVEcxX0ZTICAgICAgICgodWludDhfdCkweDBBKSAgLyogT1RHMV9GUyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyA6IGF2YWlsYWJsZSBvbiBTVE0zMkg3QTN4eHgvU1RNMzJIN0IzeHh4L1NUTTMySDdCMHh4eCAqLworI2RlZmluZSBHUElPX0FGMTBfT1RHMV9GUyAgICAgICAoKHVpbnQ4X3QpMHgwQSkgIC8qIE9URzFfRlMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgOiBhdmFpbGFibGUgb24gU1RNMzJIN0EzeHh4L1NUTTMySDdCM3h4eC9TVE0zMkg3QjB4eHggYW5kIFNUTTMySDcyeHh4L1NUTTMySDczeHh4ICovCiAjZW5kaWYgLyogIVVTQjJfT1RHX0ZTICovCiAjZGVmaW5lIEdQSU9fQUYxMF9PVEcxX0hTICAgICAgICgodWludDhfdCkweDBBKSAgLyogT1RHMV9IUyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWYgZGVmaW5lZChPQ1RPU1BJTSkKICNkZWZpbmUgR1BJT19BRjEwX09DVE9TUElNX1AxICAgKCh1aW50OF90KTB4MEEpICAvKiBPQ1RPU1BJIE1hbmFnZXIgUG9ydCAxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovCiAjZW5kaWYgLyogT0NUT1NQSU0gKi8KICNkZWZpbmUgR1BJT19BRjEwX1RJTTggICAgICAgICAgKCh1aW50OF90KTB4MEEpICAvKiBUSU04IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgR1BJT19BRjEwX0ZNQyAgICAgICAgICAgKCh1aW50OF90KTB4MEEpICAvKiBGTUMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgOiBhdmFpbGFibGUgb24gU1RNMzJIN0EzeHh4L1NUTTMySDdCM3h4eC9TVE0zMkg3QjB4eHggYW5kIFNUTTMySDcyeHh4L1NUTTMySDczeHh4ICovCiAKIC8qKgogICAqIEBicmllZiAgIEFGIDExIHNlbGVjdGlvbgpAQCAtMjY0LDcgKzI5Myw3IEBACiAjZGVmaW5lIEdQSU9fQUYxMV9FVEggICAgICAgICAgICgodWludDhfdCkweDBCKSAgLyogRVRIIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAgICAqLwogI2VuZGlmIC8qIEVUSCAqLwogI2lmIGRlZmluZWQoTFREQykKLSNkZWZpbmUgR1BJT19BRjExX0xUREMgICAgICAgICAgKCh1aW50OF90KTB4MEIpICAvKiBMVERDIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nIDogYXZhaWxhYmxlIG9uIFNUTTMySDdBM3h4eC9TVE0zMkg3QjN4eHgvU1RNMzJIN0IweHh4ICAqLworI2RlZmluZSBHUElPX0FGMTFfTFREQyAgICAgICAgICAoKHVpbnQ4X3QpMHgwQikgIC8qIExUREMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgOiBhdmFpbGFibGUgb24gU1RNMzJIN0EzeHh4L1NUTTMySDdCM3h4eC9TVE0zMkg3QjB4eHggYW5kIFNUTTMySDcyeHh4L1NUTTMySDczeHh4ICovCiAjZW5kaWYgLypMVERDKi8KICNpZiBkZWZpbmVkKE9DVE9TUElNKQogI2RlZmluZSBHUElPX0FGMTFfT0NUT1NQSU1fUDEgICAoKHVpbnQ4X3QpMHgwQikgIC8qIE9DVE9TUEkgTWFuYWdlciBQb3J0IDEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8KQEAgLTI4Niw2ICszMTUsOSBAQAogI2lmIGRlZmluZWQoVVNCMl9PVEdfRlMpCiAjZGVmaW5lIEdQSU9fQUYxMl9PVEcxX0ZTICAgICAgICgodWludDhfdCkweDBDKSAgLyogT1RHMV9GUyBBbHRlcm5hdGUgRnVuY3Rpb24gbWFwcGluZyAqLwogI2VuZGlmIC8qIFVTQjJfT1RHX0ZTICovCisjaWYgZGVmaW5lZChPQ1RPU1BJTSkKKyNkZWZpbmUgR1BJT19BRjEyX09DVE9TUElNX1AxICAgKCh1aW50OF90KTB4MEMpICAvKiBPQ1RPU1BJIE1hbmFnZXIgUG9ydCAxIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovCisjZW5kaWYgLyogT0NUT1NQSU0gKi8KIAogLyoqCiAgICogQGJyaWVmICAgQUYgMTMgc2VsZWN0aW9uCkBAIC0zMDMsMTIgKzMzNSwxOCBAQAogI2RlZmluZSBHUElPX0FGMTNfUFNTSSAgICAgICAgICAoKHVpbnQ4X3QpMHgwRCkgICAvKiBQU1NJIEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICAqLwogI2VuZGlmIC8qIFBTU0kgKi8KICNkZWZpbmUgR1BJT19BRjEzX1RJTTEgICAgICAgICAgKCh1aW50OF90KTB4MEQpICAgIC8qIFRJTTEgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8KKyNpZiBkZWZpbmVkKFRJTTIzKQorI2RlZmluZSBHUElPX0FGMTNfVElNMjMgICAgICAgICAoKHVpbnQ4X3QpMHgwRCkgICAgLyogVElNMjMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8KKyNlbmRpZiAgLypUSU0yMyovCiAKIC8qKgogICAqIEBicmllZiAgIEFGIDE0IHNlbGVjdGlvbgogICAqLwogI2RlZmluZSBHUElPX0FGMTRfTFREQyAgICAgICAgICgodWludDhfdCkweDBFKSAgIC8qIExUREMgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgICovCiAjZGVmaW5lIEdQSU9fQUYxNF9VQVJUNSAgICAgICAgKCh1aW50OF90KTB4MEUpICAgLyogVUFSVDUgQWx0ZXJuYXRlIEZ1bmN0aW9uIG1hcHBpbmcgKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBHUElPX0FGMTRfVElNMjQgICAgICAgICgodWludDhfdCkweDBFKSAgIC8qIFRJTTI0IEFsdGVybmF0ZSBGdW5jdGlvbiBtYXBwaW5nICovCisjZW5kaWYgIC8qVElNMjQqLwogCiAvKioKICAgKiBAYnJpZWYgICBBRiAxNSBzZWxlY3Rpb24KQEAgLTM2MCwxMSArMzk4LDIxIEBACiAjZGVmaW5lIEdQSU9FX1BJTl9BVkFJTEFCTEUgIEdQSU9fUElOX0FsbAogI2RlZmluZSBHUElPRl9QSU5fQVZBSUxBQkxFICBHUElPX1BJTl9BbGwKICNkZWZpbmUgR1BJT0dfUElOX0FWQUlMQUJMRSAgR1BJT19QSU5fQWxsCisjaWYgZGVmaW5lZChHUElPSSkKICNkZWZpbmUgR1BJT0lfUElOX0FWQUlMQUJMRSAgR1BJT19QSU5fQWxsCisjZW5kaWYgLypHUElPSSovCisjaWYgZGVmaW5lZChHUElPSSkKICNkZWZpbmUgR1BJT0pfUElOX0FWQUlMQUJMRSAgR1BJT19QSU5fQWxsCisjZWxzZQorI2RlZmluZSBHUElPSl9QSU5fQVZBSUxBQkxFICAoR1BJT19QSU5fOCB8IEdQSU9fUElOXzkgfCBHUElPX1BJTl8xMCB8IEdQSU9fUElOXzExICkKKyNlbmRpZiAvKiBHUElPSSAqLwogI2RlZmluZSBHUElPSF9QSU5fQVZBSUxBQkxFICBHUElPX1BJTl9BbGwKKyNpZiBkZWZpbmVkKEdQSU9JKQogI2RlZmluZSBHUElPS19QSU5fQVZBSUxBQkxFICAoR1BJT19QSU5fMCB8IEdQSU9fUElOXzEgfCBHUElPX1BJTl8yIHwgR1BJT19QSU5fMyB8IEdQSU9fUElOXzQgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUElPX1BJTl81IHwgR1BJT19QSU5fNiB8IEdQSU9fUElOXzcpCisjZWxzZQorI2RlZmluZSBHUElPS19QSU5fQVZBSUxBQkxFICAoR1BJT19QSU5fMCB8IEdQSU9fUElOXzEgfCBHUElPX1BJTl8yICkKKyNlbmRpZiAvKiBHUElPSSAqLwogCiAvKioKICAgKiBAfQpAQCAtMzc3LDYgKzQyNSw3IEBACiAvKiogQGRlZmdyb3VwIEdQSU9FeF9HZXRfUG9ydF9JbmRleCBHUElPIEdldCBQb3J0IEluZGV4CiAgICogQHsKICAgKi8KKyNpZiBkZWZpbmVkKEdQSU9JKQogI2RlZmluZSBHUElPX0dFVF9JTkRFWChfX0dQSU94X18pICAoKChfX0dQSU94X18pID09IChHUElPQSkpPyAwVUwgOlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19HUElPeF9fKSA9PSAoR1BJT0IpKT8gMVVMIDpcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fR1BJT3hfXykgPT0gKEdQSU9DKSk/IDJVTCA6XApAQCAtMzg3LDYgKzQzNiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0dQSU94X18pID09IChHUElPSCkpPyA3VUwgOlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19HUElPeF9fKSA9PSAoR1BJT0kpKT8gOFVMIDpcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fR1BJT3hfXykgPT0gKEdQSU9KKSk/IDlVTCA6IDEwVUwpCisjZWxzZQorI2RlZmluZSBHUElPX0dFVF9JTkRFWChfX0dQSU94X18pICAoKChfX0dQSU94X18pID09IChHUElPQSkpPyAwVUwgOlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19HUElPeF9fKSA9PSAoR1BJT0IpKT8gMVVMIDpcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fR1BJT3hfXykgPT0gKEdQSU9DKSk/IDJVTCA6XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0dQSU94X18pID09IChHUElPRCkpPyAzVUwgOlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19HUElPeF9fKSA9PSAoR1BJT0UpKT8gNFVMIDpcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fR1BJT3hfXykgPT0gKEdQSU9GKSk/IDVVTCA6XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0dQSU94X18pID09IChHUElPRykpPyA2VUwgOlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19HUElPeF9fKSA9PSAoR1BJT0gpKT8gN1VMIDpcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fR1BJT3hfXykgPT0gKEdQSU9KKSk/IDlVTCA6IDEwVUwpCisjZW5kaWYgLyogR1BJT0kgKi8KKwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX2hjZC5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfaGNkLmgKaW5kZXggMWU2MGQ1NS4uZmEwMGVjYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfaGNkLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfaGNkLmgKQEAgLTEwOSw4ICsxMDksOCBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIEhDRF9TUEVFRF9ISUdIICAgICAgICAgICAgICAgVVNCSF9IU19TUEVFRAotI2RlZmluZSBIQ0RfU1BFRURfRlVMTCAgICAgICAgICAgICAgIFVTQkhfRlNfU1BFRUQKLSNkZWZpbmUgSENEX1NQRUVEX0xPVyAgICAgICAgICAgICAgICBVU0JIX0xTX1NQRUVECisjZGVmaW5lIEhDRF9TUEVFRF9GVUxMICAgICAgICAgICAgICAgVVNCSF9GU0xTX1NQRUVECisjZGVmaW5lIEhDRF9TUEVFRF9MT1cgICAgICAgICAgICAgICAgVVNCSF9GU0xTX1NQRUVECiAKIC8qKgogICAqIEB9CkBAIC0xNzAsMTkgKzE3MCwxNSBAQAogLyoqIEBkZWZncm91cCBIQ0RfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCiAgICogQHsKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmICAgICAgSEFMX0hDRF9Jbml0KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKLUhBTF9TdGF0dXNUeXBlRGVmICAgICAgSEFMX0hDRF9EZUluaXQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwotSEFMX1N0YXR1c1R5cGVEZWYgICAgICBIQUxfSENEX0hDX0luaXQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGNoX251bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZXBudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGRldl9hZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBzcGVlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZXBfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG1wcyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX0luaXQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hDRF9EZUluaXQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hDRF9IQ19Jbml0KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNoX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwbnVtLCB1aW50OF90IGRldl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc3BlZWQsIHVpbnQ4X3QgZXBfdHlwZSwgdWludDE2X3QgbXBzKTsKIAotSEFMX1N0YXR1c1R5cGVEZWYgICAgIEhBTF9IQ0RfSENfSGFsdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaF9udW0pOwotdm9pZCAgICAgICAgICAgICAgICAgIEhBTF9IQ0RfTXNwSW5pdChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Ci12b2lkICAgICAgICAgICAgICAgICAgSEFMX0hDRF9Nc3BEZUluaXQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hDRF9IQ19IYWx0KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNoX251bSk7Cit2b2lkICAgICAgICAgICAgICBIQUxfSENEX01zcEluaXQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwordm9pZCAgICAgICAgICAgICAgSEFMX0hDRF9Nc3BEZUluaXQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwogCiAjaWYgKFVTRV9IQUxfSENEX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKIC8qKiBAZGVmZ3JvdXAgSEFMX0hDRF9DYWxsYmFja19JRF9lbnVtZXJhdGlvbl9kZWZpbml0aW9uIEhBTCBVU0IgT1RHIEhDRCBDYWxsYmFjayBJRCBlbnVtZXJhdGlvbiBkZWZpbml0aW9uCkBAIC0xOTEsMTQgKzE4NywxNCBAQAogICAqLwogdHlwZWRlZiBlbnVtCiB7Ci0gIEhBTF9IQ0RfU09GX0NCX0lEICAgICAgICAgICA9IDB4MDEsICAgICAgIC8qITwgVVNCIEhDRCBTT0YgY2FsbGJhY2sgSUQgICAgICAgICAgICovCi0gIEhBTF9IQ0RfQ09OTkVDVF9DQl9JRCAgICAgICA9IDB4MDIsICAgICAgIC8qITwgVVNCIEhDRCBDb25uZWN0IGNhbGxiYWNrIElEICAgICAgICovCi0gIEhBTF9IQ0RfRElTQ09OTkVDVF9DQl9JRCAgID0gMHgwMywgICAgICAgLyohPCBVU0IgSENEIERpc2Nvbm5lY3QgY2FsbGJhY2sgSUQgICAgKi8KLSAgSEFMX0hDRF9QT1JUX0VOQUJMRURfQ0JfSUQgICA9IDB4MDQsICAgICAgLyohPCBVU0IgSENEIFBvcnQgRW5hYmxlIGNhbGxiYWNrIElEICAgKi8KLSAgSEFMX0hDRF9QT1JUX0RJU0FCTEVEX0NCX0lEICA9IDB4MDUsICAgICAgLyohPCBVU0IgSENEIFBvcnQgRGlzYWJsZSBjYWxsYmFjayBJRCAgKi8KKyAgSEFMX0hDRF9TT0ZfQ0JfSUQgICAgICAgICAgICA9IDB4MDEsICAgICAgIC8qITwgVVNCIEhDRCBTT0YgY2FsbGJhY2sgSUQgICAgICAgICAgICovCisgIEhBTF9IQ0RfQ09OTkVDVF9DQl9JRCAgICAgICAgPSAweDAyLCAgICAgICAvKiE8IFVTQiBIQ0QgQ29ubmVjdCBjYWxsYmFjayBJRCAgICAgICAqLworICBIQUxfSENEX0RJU0NPTk5FQ1RfQ0JfSUQgICAgID0gMHgwMywgICAgICAgLyohPCBVU0IgSENEIERpc2Nvbm5lY3QgY2FsbGJhY2sgSUQgICAgKi8KKyAgSEFMX0hDRF9QT1JUX0VOQUJMRURfQ0JfSUQgICA9IDB4MDQsICAgICAgIC8qITwgVVNCIEhDRCBQb3J0IEVuYWJsZSBjYWxsYmFjayBJRCAgICovCisgIEhBTF9IQ0RfUE9SVF9ESVNBQkxFRF9DQl9JRCAgPSAweDA1LCAgICAgICAvKiE8IFVTQiBIQ0QgUG9ydCBEaXNhYmxlIGNhbGxiYWNrIElEICAqLwogCi0gIEhBTF9IQ0RfTVNQSU5JVF9DQl9JRCAgICAgICA9IDB4MDYsICAgICAgIC8qITwgVVNCIEhDRCBNc3BJbml0IGNhbGxiYWNrIElEICAgICAgICovCi0gIEhBTF9IQ0RfTVNQREVJTklUX0NCX0lEICAgICA9IDB4MDcgICAgICAgIC8qITwgVVNCIEhDRCBNc3BEZUluaXQgY2FsbGJhY2sgSUQgICAgICovCisgIEhBTF9IQ0RfTVNQSU5JVF9DQl9JRCAgICAgICAgPSAweDA2LCAgICAgICAvKiE8IFVTQiBIQ0QgTXNwSW5pdCBjYWxsYmFjayBJRCAgICAgICAqLworICBIQUxfSENEX01TUERFSU5JVF9DQl9JRCAgICAgID0gMHgwNyAgICAgICAgLyohPCBVU0IgSENEIE1zcERlSW5pdCBjYWxsYmFjayBJRCAgICAgKi8KIAogfSBIQUxfSENEX0NhbGxiYWNrSURUeXBlRGVmOwogLyoqCkBAIC0yMzIsMjUgKzIyOCwyMCBAQAogLyoqIEBhZGR0b2dyb3VwIEhDRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAyIElucHV0IGFuZCBPdXRwdXQgb3BlcmF0aW9uIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfSENEX0hDX1N1Ym1pdFJlcXVlc3QoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjaF9udW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkaXJlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlcF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqcGJ1ZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZG9fcGluZyk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX0hDX1N1Ym1pdFJlcXVlc3QoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZGlyZWN0aW9uLCB1aW50OF90IGVwX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB0b2tlbiwgdWludDhfdCAqcGJ1ZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgbGVuZ3RoLCB1aW50OF90IGRvX3BpbmcpOwogCiAvKiBOb24tQmxvY2tpbmcgbW9kZTogSW50ZXJydXB0ICovCi12b2lkICAgICAgICAgICAgIEhBTF9IQ0RfSVJRSGFuZGxlcihIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Ci12b2lkICAgICAgICAgICAgIEhBTF9IQ0RfU09GX0NhbGxiYWNrKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKLXZvaWQgICAgICAgICAgICAgSEFMX0hDRF9Db25uZWN0X0NhbGxiYWNrKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKLXZvaWQgICAgICAgICAgICAgSEFMX0hDRF9EaXNjb25uZWN0X0NhbGxiYWNrKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKLXZvaWQgICAgICAgICAgICAgSEFMX0hDRF9Qb3J0RW5hYmxlZF9DYWxsYmFjayhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Ci12b2lkICAgICAgICAgICAgIEhBTF9IQ0RfUG9ydERpc2FibGVkX0NhbGxiYWNrKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKLXZvaWQgICAgICAgICAgICAgSEFMX0hDRF9IQ19Ob3RpZnlVUkJDaGFuZ2VfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY2hudW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhDRF9VUkJTdGF0ZVR5cGVEZWYgdXJiX3N0YXRlKTsKK3ZvaWQgSEFMX0hDRF9JUlFIYW5kbGVyKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKK3ZvaWQgSEFMX0hDRF9TT0ZfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwordm9pZCBIQUxfSENEX0Nvbm5lY3RfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwordm9pZCBIQUxfSENEX0Rpc2Nvbm5lY3RfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwordm9pZCBIQUxfSENEX1BvcnRFbmFibGVkX0NhbGxiYWNrKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkKTsKK3ZvaWQgSEFMX0hDRF9Qb3J0RGlzYWJsZWRfQ2FsbGJhY2soSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwordm9pZCBIQUxfSENEX0hDX05vdGlmeVVSQkNoYW5nZV9DYWxsYmFjayhIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCwgdWludDhfdCBjaG51bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSENEX1VSQlN0YXRlVHlwZURlZiB1cmJfc3RhdGUpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI1OSw5ICsyNTAsOSBAQAogLyoqIEBhZGR0b2dyb3VwIEhDRF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAzIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKICAgKiBAewogICAqLwotSEFMX1N0YXR1c1R5cGVEZWYgICAgICAgSEFMX0hDRF9SZXNldFBvcnQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwotSEFMX1N0YXR1c1R5cGVEZWYgICAgICAgSEFMX0hDRF9TdGFydChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiAgICAgICBIQUxfSENEX1N0b3AoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hDRF9SZXNldFBvcnQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0hDRF9TdGFydChIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSENEX1N0b3AoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI3Miw4ICsyNjMsOCBAQAogICAqLwogSENEX1N0YXRlVHlwZURlZiAgICAgICAgSEFMX0hDRF9HZXRTdGF0ZShIQ0RfSGFuZGxlVHlwZURlZiAqaGhjZCk7CiBIQ0RfVVJCU3RhdGVUeXBlRGVmICAgICBIQUxfSENEX0hDX0dldFVSQlN0YXRlKEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNobnVtKTsKLXVpbnQzMl90ICAgICAgICAgICAgICAgIEhBTF9IQ0RfSENfR2V0WGZlckNvdW50KEhDRF9IYW5kbGVUeXBlRGVmICpoaGNkLCB1aW50OF90IGNobnVtKTsKIEhDRF9IQ1N0YXRlVHlwZURlZiAgICAgIEhBTF9IQ0RfSENfR2V0U3RhdGUoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwordWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9IQ19HZXRYZmVyQ291bnQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QsIHVpbnQ4X3QgY2hudW0pOwogdWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9HZXRDdXJyZW50RnJhbWUoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwogdWludDMyX3QgICAgICAgICAgICAgICAgSEFMX0hDRF9HZXRDdXJyZW50U3BlZWQoSENEX0hhbmRsZVR5cGVEZWYgKmhoY2QpOwogLyoqCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9pMmNfZXguaCBiL0luYy9zdG0zMmg3eHhfaGFsX2kyY19leC5oCmluZGV4IDFmYmQ0ZTUuLjc5N2NkNGMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsX2kyY19leC5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX2kyY19leC5oCkBAIC01NSw2ICs1NSw3IEBACiAvKiogQGRlZmdyb3VwIEkyQ0V4X0Zhc3RNb2RlUGx1cyBJMkMgRXh0ZW5kZWQgRmFzdCBNb2RlIFBsdXMKICAgKiBAewogICAqLworI2RlZmluZSBJMkNfRk1QX05PVF9TVVBQT1JURUQgICAgICAgICAgIDB4QUFBQTAwMDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRmFzdCBNb2RlIFBsdXMgbm90IHN1cHBvcnRlZCAgICAgICAqLwogI2RlZmluZSBJMkNfRkFTVE1PREVQTFVTX1BCNiAgICAgICAgICAgIFNZU0NGR19QTUNSX0kyQ19QQjZfRk1QICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgRmFzdCBNb2RlIFBsdXMgb24gUEI2ICAgICAgICovCiAjZGVmaW5lIEkyQ19GQVNUTU9ERVBMVVNfUEI3ICAgICAgICAgICAgU1lTQ0ZHX1BNQ1JfSTJDX1BCN19GTVAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBGYXN0IE1vZGUgUGx1cyBvbiBQQjcgICAgICAgKi8KICNkZWZpbmUgSTJDX0ZBU1RNT0RFUExVU19QQjggICAgICAgICAgICBTWVNDRkdfUE1DUl9JMkNfUEI4X0ZNUCAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIEZhc3QgTW9kZSBQbHVzIG9uIFBCOCAgICAgICAqLwpAQCAtNjMsNiArNjQsMTEgQEAKICNkZWZpbmUgSTJDX0ZBU1RNT0RFUExVU19JMkMyICAgICAgICAgICBTWVNDRkdfUE1DUl9JMkMyX0ZNUCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRW5hYmxlIEZhc3QgTW9kZSBQbHVzIG9uIEkyQzIgcGlucyAqLwogI2RlZmluZSBJMkNfRkFTVE1PREVQTFVTX0kyQzMgICAgICAgICAgIFNZU0NGR19QTUNSX0kyQzNfRk1QICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgRmFzdCBNb2RlIFBsdXMgb24gSTJDMyBwaW5zICovCiAjZGVmaW5lIEkyQ19GQVNUTU9ERVBMVVNfSTJDNCAgICAgICAgICAgU1lTQ0ZHX1BNQ1JfSTJDNF9GTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEVuYWJsZSBGYXN0IE1vZGUgUGx1cyBvbiBJMkM0IHBpbnMgKi8KKyNpZiBkZWZpbmVkKFNZU0NGR19QTUNSX0kyQzVfRk1QKQorI2RlZmluZSBJMkNfRkFTVE1PREVQTFVTX0kyQzUgICAgICAgICAgIFNZU0NGR19QTUNSX0kyQzVfRk1QICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFbmFibGUgRmFzdCBNb2RlIFBsdXMgb24gSTJDNSBwaW5zICovCisjZWxzZQorI2RlZmluZSBJMkNfRkFTVE1PREVQTFVTX0kyQzUgICAgICAgICAgICh1aW50MzJfdCkoMHgwMDAwMTAwMFUgfCBJMkNfRk1QX05PVF9TVVBQT1JURUQpIC8qITwgRmFzdCBNb2RlIFBsdXMgSTJDNSBub3Qgc3VwcG9ydGVkICAqLworI2VuZGlmCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9oYWxfaTJzLmggYi9JbmMvc3RtMzJoN3h4X2hhbF9pMnMuaAppbmRleCBiNDUxODk2Li42Njc2MmY0IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9pMnMuaAorKysgYi9JbmMvc3RtMzJoN3h4X2hhbF9pMnMuaApAQCAtNjUsNyArNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX0Nsb2NrX1BvbGFyaXR5ICovCiAKICAgdWludDMyX3QgRmlyc3RCaXQ7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciBkYXRhIHRyYW5zZmVycyBzdGFydCBmcm9tIE1TQiBvciBMU0IgYml0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX01TQl9MU0JfdHJhbnNtaXNzaW9uICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMlNfTVNCX0xTQl9UcmFuc21pc3Npb24gICAgICAgKi8KIAogICB1aW50MzJfdCBXU0ludmVyc2lvbjsgICAgICAgICAvKiE8IENvbnRyb2wgdGhlIFdvcmQgU2VsZWN0IEludmVyc2lvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyU19XU0ludmVyc2lvbiAgICAgICAgICAgICAgICAqLwpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyU19EYXRhXzI0Qml0X0FsaWdubWVudCAgICAgICAqLwogCiAgIHVpbnQzMl90IE1hc3RlcktlZXBJT1N0YXRlOyAgIC8qITwgQ29udHJvbCBvZiBBbHRlcm5hdGUgZnVuY3Rpb24gR1BJT3Mgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNQSV9NYXN0ZXJfS2VlcF9JT19TdGF0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX01hc3Rlcl9LZWVwX0lPX1N0YXRlICovCiAKIH0gSTJTX0luaXRUeXBlRGVmOwogCkBAIC04OCw2ICs4OCw3IEBACiAgIEhBTF9JMlNfU1RBVEVfQlVTWSAgICAgICA9IDB4MDJVTCwgIC8qITwgSTJTIGludGVybmFsIHByb2Nlc3MgaXMgb25nb2luZyAgICAgICAgICAgICAgICAgICAgKi8KICAgSEFMX0kyU19TVEFURV9CVVNZX1RYICAgID0gMHgwM1VMLCAgLyohPCBEYXRhIFRyYW5zbWlzc2lvbiBwcm9jZXNzIGlzIG9uZ29pbmcgICAgICAgICAgICAgICAqLwogICBIQUxfSTJTX1NUQVRFX0JVU1lfUlggICAgPSAweDA0VUwsICAvKiE8IERhdGEgUmVjZXB0aW9uIHByb2Nlc3MgaXMgb25nb2luZyAgICAgICAgICAgICAgICAgICovCisgIEhBTF9JMlNfU1RBVEVfQlVTWV9UWF9SWCA9IDB4MDVVTCwgIC8qITwgRGF0YSBUcmFuc21pc3Npb24gYW5kIFJlY2VwdGlvbiBwcm9jZXNzIGlzIG9uZ29pbmcgKi8KICAgSEFMX0kyU19TVEFURV9USU1FT1VUICAgID0gMHgwNlVMLCAgLyohPCBJMlMgdGltZW91dCBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBIQUxfSTJTX1NUQVRFX0VSUk9SICAgICAgPSAweDA3VUwgICAvKiE8IEkyUyBlcnJvciBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiB9IEhBTF9JMlNfU3RhdGVUeXBlRGVmOwpAQCAtOTgsNDYgKzk5LDQ4IEBACiB0eXBlZGVmIHN0cnVjdCBfX0kyU19IYW5kbGVUeXBlRGVmCiB7CiAgIFNQSV9UeXBlRGVmICAgICAgICAgICAgICAgICpJbnN0YW5jZTsgICAgICAgICAgICAvKiE8IEkyUyByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICBJMlNfSW5pdFR5cGVEZWYgICAgICAgICAgICBJbml0OyAgICAgICAgICAgICAgICAgLyohPCBJMlMgY29tbXVuaWNhdGlvbiBwYXJhbWV0ZXJzICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAqcFR4QnVmZlB0cjsgICAgICAgICAgLyohPCBQb2ludGVyIHRvIEkyUyBUeCB0cmFuc2ZlciBidWZmZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgIF9fSU8gdWludDE2X3QgICAgICAgICAgICAgIFR4WGZlclNpemU7ICAgICAgICAgICAvKiE8IEkyUyBUeCB0cmFuc2ZlciBzaXplICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICBfX0lPIHVpbnQxNl90ICAgICAgICAgICAgICBUeFhmZXJDb3VudDsgICAgICAgICAgLyohPCBJMlMgVHggdHJhbnNmZXIgQ291bnRlciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgKnBSeEJ1ZmZQdHI7ICAgICAgICAgIC8qITwgUG9pbnRlciB0byBJMlMgUnggdHJhbnNmZXIgYnVmZmVyICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICBfX0lPIHVpbnQxNl90ICAgICAgICAgICAgICBSeFhmZXJTaXplOyAgICAgICAgICAgLyohPCBJMlMgUnggdHJhbnNmZXIgc2l6ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgX19JTyB1aW50MTZfdCAgICAgICAgICAgICAgUnhYZmVyQ291bnQ7ICAgICAgICAgIC8qITwgSTJTIFJ4IHRyYW5zZmVyIGNvdW50ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUaGlzIGZpZWxkIGlzIGluaXRpYWxpemVkIGF0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgdmFsdWUgYXMgdHJhbnNmZXIgc2l6ZSBhdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zZmVyIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY3JlbWVudGVkIHdoZW4gYSBzYW1wbGUgaXMgcmVjZWl2ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYlNhbXBsZXNSZWNlaXZlZCA9IFJ4QnVmZmVyU2l6ZS1SeEJ1ZmZlckNvdW50KSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgIHZvaWQgKCpSeElTUikoc3RydWN0IF9fSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOyAvKiE8IGZ1bmN0aW9uIHBvaW50ZXIgb24gUnggSVNSICovCiAKICAgdm9pZCAoKlR4SVNSKShzdHJ1Y3QgX19JMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7IC8qITwgZnVuY3Rpb24gcG9pbnRlciBvbiBUeCBJU1IgKi8KICAgCiAgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICpoZG1hdHg7ICAgICAgICAgICAgICAvKiE8IEkyUyBUeCBETUEgaGFuZGxlIHBhcmFtZXRlcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICpoZG1hcng7ICAgICAgICAgICAgICAvKiE8IEkyUyBSeCBETUEgaGFuZGxlIHBhcmFtZXRlcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgIF9fSU8gSEFMX0xvY2tUeXBlRGVmICAgICAgIExvY2s7ICAgICAgICAgICAgICAgICAvKiE8IEkyUyBsb2NraW5nIG9iamVjdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgX19JTyBIQUxfSTJTX1N0YXRlVHlwZURlZiAgU3RhdGU7ICAgICAgICAgICAgICAgIC8qITwgSTJTIGNvbW11bmljYXRpb24gc3RhdGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgIF9fSU8gdWludDMyX3QgICAgICAgICAgICAgIEVycm9yQ29kZTsgICAgICAgICAgICAvKiE8IEkyUyBFcnJvciBjb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJTX0Vycm9yICovCiAKICNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQogICB2b2lkICgqIFR4Q3BsdENhbGxiYWNrKShzdHJ1Y3QgX19JMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7ICAgICAgICAgICAgIC8qITwgSTJTIFR4IENvbXBsZXRlZCBjYWxsYmFjayAgICAgICAgICAqLwogICB2b2lkICgqIFJ4Q3BsdENhbGxiYWNrKShzdHJ1Y3QgX19JMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7ICAgICAgICAgICAgIC8qITwgSTJTIFJ4IENvbXBsZXRlZCBjYWxsYmFjayAgICAgICAgICAqLworICB2b2lkICgqIFR4UnhDcGx0Q2FsbGJhY2spKHN0cnVjdCBfX0kyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsgICAgICAgICAgIC8qITwgSTJTIFR4UnggQ29tcGxldGVkIGNhbGxiYWNrICAgICAgICAqLwogICB2b2lkICgqIFR4SGFsZkNwbHRDYWxsYmFjaykoc3RydWN0IF9fSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOyAgICAgICAgIC8qITwgSTJTIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrICAgICAqLwogICB2b2lkICgqIFJ4SGFsZkNwbHRDYWxsYmFjaykoc3RydWN0IF9fSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOyAgICAgICAgIC8qITwgSTJTIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrICAgICAqLworICB2b2lkICgqIFR4UnhIYWxmQ3BsdENhbGxiYWNrKShzdHJ1Y3QgX19JMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7ICAgICAgIC8qITwgSTJTIFR4UnggSGFsZiBDb21wbGV0ZWQgY2FsbGJhY2sgICAqLwogICB2b2lkICgqIEVycm9yQ2FsbGJhY2spKHN0cnVjdCBfX0kyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsgICAgICAgICAgICAgIC8qITwgSTJTIEVycm9yIGNhbGxiYWNrICAgICAgICAgICAgICAgICAqLwogICB2b2lkICgqIE1zcEluaXRDYWxsYmFjaykoc3RydWN0IF9fSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOyAgICAgICAgICAgIC8qITwgSTJTIE1zcCBJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAqLwogICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19JMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7ICAgICAgICAgIC8qITwgSTJTIE1zcCBEZUluaXQgY2FsbGJhY2sgICAgICAgICAgICAqLwpAQCAtMTU0LDggKzE1NywxMCBAQAogewogICBIQUxfSTJTX1RYX0NPTVBMRVRFX0NCX0lEICAgICAgICAgICAgID0gMHgwMFVMLCAgICAvKiE8IEkyUyBUeCBDb21wbGV0ZWQgY2FsbGJhY2sgSUQgICAgICAgICAqLwogICBIQUxfSTJTX1JYX0NPTVBMRVRFX0NCX0lEICAgICAgICAgICAgID0gMHgwMVVMLCAgICAvKiE8IEkyUyBSeCBDb21wbGV0ZWQgY2FsbGJhY2sgSUQgICAgICAgICAqLworICBIQUxfSTJTX1RYX1JYX0NPTVBMRVRFX0NCX0lEICAgICAgICAgID0gMHgwMlVMLCAgICAvKiE8IEkyUyBUeFJ4IENvbXBsZXRlZCBjYWxsYmFjayBJRCAgICAgICAqLwogICBIQUxfSTJTX1RYX0hBTEZfQ09NUExFVEVfQ0JfSUQgICAgICAgID0gMHgwM1VMLCAgICAvKiE8IEkyUyBUeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjayBJRCAgICAqLwogICBIQUxfSTJTX1JYX0hBTEZfQ09NUExFVEVfQ0JfSUQgICAgICAgID0gMHgwNFVMLCAgICAvKiE8IEkyUyBSeCBIYWxmIENvbXBsZXRlZCBjYWxsYmFjayBJRCAgICAqLworICBIQUxfSTJTX1RYX1JYX0hBTEZfQ09NUExFVEVfQ0JfSUQgICAgID0gMHgwNVVMLCAgICAvKiE8IEkyUyBUeFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrIElEICAqLwogICBIQUxfSTJTX0VSUk9SX0NCX0lEICAgICAgICAgICAgICAgICAgID0gMHgwNlVMLCAgICAvKiE8IEkyUyBFcnJvciBjYWxsYmFjayBJRCAgICAgICAgICAgICAgICAqLwogICBIQUxfSTJTX01TUElOSVRfQ0JfSUQgICAgICAgICAgICAgICAgID0gMHgwN1VMLCAgICAvKiE8IEkyUyBNc3AgSW5pdCBjYWxsYmFjayBJRCAgICAgICAgICAgICAqLwogICBIQUxfSTJTX01TUERFSU5JVF9DQl9JRCAgICAgICAgICAgICAgID0gMHgwOFVMICAgICAvKiE8IEkyUyBNc3AgRGVJbml0IGNhbGxiYWNrIElEICAgICAgICAgICAqLwpAQCAtMTc4LDcgKzE4Myw3IEBACiAgICovCiAvKiogQGRlZmdyb3VwIEkyU19FcnJvciBJMlMgRXJyb3IKICAgKiBAewotICAqLyAKKyAgKi8KICNkZWZpbmUgSEFMX0kyU19FUlJPUl9OT05FICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVTCkgIC8qITwgTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEhBTF9JMlNfRVJST1JfVElNRU9VVCAgICAgICAgICAgICgweDAwMDAwMDAxVUwpICAvKiE8IFRpbWVvdXQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBIQUxfSTJTX0VSUk9SX09WUiAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMlVMKSAgLyohPCBPVlIgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI1Nyw3ICsyNjIsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgSTJTX0Z1bGxEdXBsZXhfTW9kZSBJMlMgRnVsbER1cGxleCBNb2RlCisvKiogQGRlZmdyb3VwIEkyU19DbG9ja19Qb2xhcml0eSBJMlMgRnVsbER1cGxleCBNb2RlCiAgICogQHsKICAgKi8KICNkZWZpbmUgSTJTX0NQT0xfTE9XICAgICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVTCkKQEAgLTMwNyw2ICszMTIsNyBAQAogICAqLwogI2RlZmluZSBJMlNfSVRfUlhQICAgICAgICAgICAgICAgICAgICAgICBTUElfSUVSX1JYUElFCiAjZGVmaW5lIEkyU19JVF9UWFAgICAgICAgICAgICAgICAgICAgICAgIFNQSV9JRVJfVFhQSUUKKyNkZWZpbmUgSTJTX0lUX0RYUCAgICAgICAgICAgICAgICAgICAgICAgU1BJX0lFUl9EWFBJRQogI2RlZmluZSBJMlNfSVRfVURSICAgICAgICAgICAgICAgICAgICAgICBTUElfSUVSX1VEUklFCiAjZGVmaW5lIEkyU19JVF9PVlIgICAgICAgICAgICAgICAgICAgICAgIFNQSV9JRVJfT1ZSSUUKICNkZWZpbmUgSTJTX0lUX0ZSRSAgICAgICAgICAgICAgICAgICAgICAgU1BJX0lFUl9USUZSRUlFCkBAIC0zMjAsMTEgKzMyNiwxMiBAQAogICAqLwogI2RlZmluZSBJMlNfRkxBR19SWFAgICAgICAgICAgICAgICAgICAgICBTUElfU1JfUlhQICAgICAgIC8qIEkyUyBzdGF0dXMgZmxhZyA6IFJ4LVBhY2tldCBhdmFpbGFibGUgZmxhZyAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSTJTX0ZMQUdfVFhQICAgICAgICAgICAgICAgICAgICAgU1BJX1NSX1RYUCAgICAgICAvKiBJMlMgc3RhdHVzIGZsYWcgOiBUeC1QYWNrZXQgc3BhY2UgYXZhaWxhYmxlIGZsYWcgICAgICAgICAgICovCisjZGVmaW5lIEkyU19GTEFHX0RYUCAgICAgICAgICAgICAgICAgICAgIFNQSV9TUl9EWFAgICAgICAgLyogSTJTIHN0YXR1cyBmbGFnIDogRHgtUGFja2V0IHNwYWNlIGF2YWlsYWJsZSBmbGFnICAgICAgICAgICAqLwogI2RlZmluZSBJMlNfRkxBR19VRFIgICAgICAgICAgICAgICAgICAgICBTUElfU1JfVURSICAgICAgIC8qIEkyUyBFcnJvciBmbGFnICA6IFVuZGVycnVuIGZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgSTJTX0ZMQUdfT1ZSICAgICAgICAgICAgICAgICAgICAgU1BJX1NSX09WUiAgICAgICAvKiBJMlMgRXJyb3IgZmxhZyAgOiBPdmVycnVuIGZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIEkyU19GTEFHX0ZSRSAgICAgICAgICAgICAgICAgICAgIFNQSV9TUl9USUZSRSAgICAgLyogSTJTIEVycm9yIGZsYWcgIDogVEkgbW9kZSBmcmFtZSBmb3JtYXQgZXJyb3IgZmxhZyAgICAgICAgICAqLwogCi0jZGVmaW5lIEkyU19GTEFHX01BU0sgICAgICAgICAgICAgICAgICAgIChTUElfU1JfUlhQIHwgU1BJX1NSX1RYUCB8IFNQSV9TUl9VRFIgfCBTUElfU1JfT1ZSIHwgU1BJX1NSX1RJRlJFKQorI2RlZmluZSBJMlNfRkxBR19NQVNLICAgICAgICAgICAgICAgICAgICAoU1BJX1NSX1JYUCB8IFNQSV9TUl9UWFAgfCBTUElfU1JfRFhQIHxTUElfU1JfVURSIHwgU1BJX1NSX09WUiB8IFNQSV9TUl9USUZSRSkKIC8qKgogICAqIEB9CiAgICovCkBAIC00MDEsNiArNDA4LDcgQEAKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBJMlNfSVRfUlhQIDogUngtUGFja2V0IGF2YWlsYWJsZSBpbnRlcnJ1cHQKICAgKiAgICAgICAgICAgIEBhcmcgSTJTX0lUX1RYUCA6IFR4LVBhY2tldCBzcGFjZSBhdmFpbGFibGUgaW50ZXJydXB0CisgICogICAgICAgICAgICBAYXJnIEkyU19JVF9EWFAgOiBUeC1QYWNrZXQgc3BhY2UgYXZhaWxhYmxlIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBJMlNfSVRfVURSIDogVW5kZXJydW4gaW50ZXJydXB0CiAgICogICAgICAgICAgICBAYXJnIEkyU19JVF9PVlIgOiBPdmVycnVuIGludGVycnVwdAogICAqICAgICAgICAgICAgQGFyZyBJMlNfSVRfRlJFIDogVEkgbW9kZSBmcmFtZSBmb3JtYXQgZXJyb3IgaW50ZXJydXB0CkBAIC00NDAsMTEgKzQ0OCwxMSBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2RlZmluZSBfX0hBTF9JMlNfQ0xFQVJfVElGUkVGTEFHKF9fSEFORExFX18pIFNFVF9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SUZDUiAsIFNQSV9JRkNSX1RJRlJFQykKLQogLyoqCiAgICogQH0KICAgKi8KIAorCiAvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIEkyU19FeHBvcnRlZF9GdW5jdGlvbnMKICAgKiBAewpAQCAtNDc1LDE1ICs0ODMsMjIgQEAKIC8qIEJsb2NraW5nIG1vZGU6IFBvbGxpbmcgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfVHJhbnNtaXQoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIHVpbnQxNl90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX1JlY2VpdmUoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIHVpbnQxNl90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSwgdWludDMyX3QgVGltZW91dCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTRXhfVHJhbnNtaXRSZWNlaXZlKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcFR4RGF0YSwgdWludDE2X3QgKnBSeERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpOwogCiAvKiBOb24tQmxvY2tpbmcgbW9kZTogSW50ZXJydXB0ICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX1RyYW5zbWl0X0lUKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19SZWNlaXZlX0lUKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZV9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBUeERhdGEsIHVpbnQxNl90ICpwUnhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplKTsKKwogdm9pZCBIQUxfSTJTX0lSUUhhbmRsZXIoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpOwogCiAvKiBOb24tQmxvY2tpbmcgbW9kZTogRE1BICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX1RyYW5zbWl0X0RNQShJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNfUmVjZWl2ZV9ETUEoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMsIHVpbnQxNl90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTRXhfVHJhbnNtaXRSZWNlaXZlX0RNQShJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBUeERhdGEsIHVpbnQxNl90ICpwUnhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplKTsKIAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU19ETUFQYXVzZShJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTX0RNQVJlc3VtZShJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CkBAIC00OTQsNiArNTA5LDggQEAKIHZvaWQgSEFMX0kyU19UeENwbHRDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CiB2b2lkIEhBTF9JMlNfUnhIYWxmQ3BsdENhbGxiYWNrKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKIHZvaWQgSEFMX0kyU19SeENwbHRDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7Cit2b2lkIEhBTF9JMlNFeF9UeFJ4SGFsZkNwbHRDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7Cit2b2lkIEhBTF9JMlNFeF9UeFJ4Q3BsdENhbGxiYWNrKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKIHZvaWQgSEFMX0kyU19FcnJvckNhbGxiYWNrKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzKTsKIC8qKgogICAqIEB9CkBAIC01NzUsNiArNTkyLDkgQEAKICNkZWZpbmUgSVNfSTJTX1NMQVZFKF9fTU9ERV9fKSAgICAgICAgICAgICAgICAgICAgICAoKChfX01PREVfXykgPT0gSTJTX01PREVfU0xBVkVfVFgpICAgICAgICAgICAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBJMlNfTU9ERV9TTEFWRV9SWCkgICAgICAgICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19NT0RFX18pID09IEkyU19NT0RFX1NMQVZFX0ZVTExEVVBMRVgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgSVNfSTJTX0ZVTExEVVBMRVgoX19NT0RFX18pICAgICAgICAgICAgICAgICAoKChfX01PREVfXykgPT0gSTJTX01PREVfTUFTVEVSX0ZVTExEVVBMRVgpICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTU9ERV9fKSA9PSBJMlNfTU9ERV9TTEFWRV9GVUxMRFVQTEVYKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogCiAjZGVmaW5lIElTX0kyU19TVEFOREFSRChfX1NUQU5EQVJEX18pICAgICAgICAgICAgICAgKCgoX19TVEFOREFSRF9fKSA9PSBJMlNfU1RBTkRBUkRfUEhJTElQUykgICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19TVEFOREFSRF9fKSA9PSBJMlNfU1RBTkRBUkRfTVNCKSAgICAgICAgICAgICAgICB8fCBcCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9pMnNfZXguaCBiL0luYy9zdG0zMmg3eHhfaGFsX2kyc19leC5oCmluZGV4IGIzODU3YzYuLjBmNzQ1MDcgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsX2kyc19leC5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX2kyc19leC5oCkBAIC0xNiw1ICsxNiwxMyBAQAogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLwotICAvKiBUaGUgSTJTIEZ1bGwgZHVwbGV4IGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIEhBTCBEcml2ZXIgICAgICAgICAgKi8KKyAgCisvKioKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgPT09PT0gSTJTIEZVTEwgRFVQTEVYIEZFQVRVUkUgPT09PT0KKyAgICAgICBJMlMgRnVsbCBEdXBsZXggQVBJcyBhcmUgYXZhaWxhYmxlIGluIHN0bTMyaDd4eF9oYWxfaTJzLmMvLmgKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX21kbWEuaCBiL0luYy9zdG0zMmg3eHhfaGFsX21kbWEuaAppbmRleCAzNTRkZmFjLi5hZmQyYWViIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9tZG1hLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfbWRtYS5oCkBAIC01OTgsOCArNTk4LDggQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIE1ETUEgQ2hhbm5lbCBpbnRlcnJ1cHQgaXMgZW5hYmxlZCBvciBub3QuCi0gICogQHBhcmFtICBfX0hBTkRMRV9fOiBETUEgaGFuZGxlCi0gICogQHBhcmFtICBfX0lOVEVSUlVQVF9fOiBzcGVjaWZpZXMgdGhlIERNQSBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXzogTURNQSBoYW5kbGUKKyAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX186IHNwZWNpZmllcyB0aGUgTURNQSBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLgogICAqICAgICAgICAgICAgQGFyZyBNRE1BX0lUX1RFICAgOiAgVHJhbnNmZXIgRXJyb3IgaW50ZXJydXB0IG1hc2sKICAgKiAgICAgICAgICAgIEBhcmcgTURNQV9JVF9DVEMgIDogIENoYW5uZWwgVHJhbnNmZXIgQ29tcGxldGUgaW50ZXJydXB0IG1hc2sKICAgKiAgICAgICAgICAgIEBhcmcgTURNQV9JVF9CUlQgIDogIEJsb2NrIFJlcGVhdCBUcmFuc2ZlciBpbnRlcnJ1cHQgbWFzawpAQCAtNjEwLDYgKzYxMCwyMSBAQAogI2RlZmluZSBfX0hBTF9NRE1BX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NSICYgKF9fSU5URVJSVVBUX18pKSkKIAogLyoqCisgICogQGJyaWVmICBXcml0ZXMgdGhlIG51bWJlciBvZiBkYXRhIGluIGJ5dGVzIHRvIGJlIHRyYW5zZmVycmVkIG9uIHRoZSBNRE1BIENoYW5uZWx4LgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyA6IE1ETUEgaGFuZGxlCisgICogQHBhcmFtICBfX0NPVU5URVJfXzogTnVtYmVyIG9mIGRhdGEgaW4gYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQuCisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIF9fSEFMX01ETUFfU0VUX0NPVU5URVIoX19IQU5ETEVfXywgX19DT1VOVEVSX18pICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0JORFRSIHw9ICgoX19DT1VOVEVSX18pICYgTURNQV9DQk5EVFJfQk5EVCkpCisKKy8qKgorICAqIEBicmllZiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBkYXRhIGluIGJ5dGVzIGluIHRoZSBjdXJyZW50IE1ETUEgQ2hhbm5lbHggdHJhbnNmZXIuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIDogTURNQSBoYW5kbGUKKyAgKiBAcmV0dmFsIFRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGRhdGEgaW4gYnl0ZXMgaW4gdGhlIGN1cnJlbnQgTURNQSBDaGFubmVseCB0cmFuc2Zlci4KKyAgKi8KKyNkZWZpbmUgX19IQUxfTURNQV9HRVRfQ09VTlRFUihfX0hBTkRMRV9fKSAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0JORFRSICYgTURNQV9DQk5EVFJfQk5EVCkKKworLyoqCiAgICogQH0KICAgKi8KIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9oYWxfbW1jLmggYi9JbmMvc3RtMzJoN3h4X2hhbF9tbWMuaAppbmRleCBhNWE4NDU4Li5iM2RjN2NjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9tbWMuaAorKysgYi9JbmMvc3RtMzJoN3h4X2hhbF9tbWMuaApAQCAtMzU4LDYgKzM1OCw0MyBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX0NvbnN0YW5zdHNfR3JvdXA1IE1NQyBFcmFzZSBUeXBlCisgICogQHsKKyAgKi8KKyNkZWZpbmUgSEFMX01NQ19FUkFTRSAgICAgICAgICAgICAweDAwMDAwMDAwVSAgLyohPCBFcmFzZSB0aGUgZXJhc2UgZ3JvdXBzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX01NQ19UUklNICAgICAgICAgICAgICAweDAwMDAwMDAxVSAgLyohPCBFcmFzZSB0aGUgd3JpdGUgYmxvY2tzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX01NQ19ESVNDQVJEICAgICAgICAgICAweDAwMDAwMDAzVSAgLyohPCBEaXNjYXJkIHRoZSB3cml0ZSBibG9ja3MgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX01NQ19TRUNVUkVfRVJBU0UgICAgICAweDgwMDAwMDAwVSAgLyohPCBQZXJmb3JtIGEgc2VjdXJlIHB1cmdlIGFjY29yZGluZyBTUlQgb24gdGhlIGVyYXNlIGdyb3VwcyBpZGVudGlmaWVkIGJ5IENNRDM1ICYgMzYgKi8KKyNkZWZpbmUgSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMSAweDgwMDAwMDAxVSAgLyohPCBNYXJrIHRoZSB3cml0ZSBibG9ja3MgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2IGZvciBzZWN1cmUgZXJhc2UgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMiAweDgwMDA4MDAwVSAgLyohPCBQZXJmb3JtIGEgc2VjdXJlIHB1cmdlIGFjY29yZGluZyBTUlQgb24gdGhlIHdyaXRlIGJsb2NrcyBwcmV2aW91c2x5IGlkZW50aWZpZWQgICAgKi8KKworI2RlZmluZSBJU19NTUNfRVJBU0VfVFlQRShUWVBFKSAoKChUWVBFKSA9PSBIQUxfTU1DX0VSQVNFKSAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IEhBTF9NTUNfVFJJTSkgICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gSEFMX01NQ19ESVNDQVJEKSAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBIQUxfTU1DX1NFQ1VSRV9FUkFTRSkgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IEhBTF9NTUNfU0VDVVJFX1RSSU1fU1RFUDEpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMikpCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIE1NQ19FeHBvcnRlZF9Db25zdGFuc3RzX0dyb3VwNiBNTUMgU2VjdXJlIFJlbW92YWwgVHlwZQorICAqIEB7CisgICovCisjZGVmaW5lIEhBTF9NTUNfU1JUX0VSQVNFICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFVICAvKiE8IEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gZXJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9FUkFTRSAgICAgICAgMHgwMDAwMDAwMlUgIC8qITwgSW5mb3JtYXRpb24gcmVtb3ZlZCBieSBhbiBvdmVyd3JpdGluZyB3aXRoIGEgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IGFuIGVyYXNlICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0NPTVBMX1JBTkRPTSAweDAwMDAwMDA0VSAgLyohPCBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIG92ZXJ3cml0aW5nIHdpdGggYSBjaGFyYWN0ZXIsIGl0cyBjb21wbGVtZW50IHRoZW4gYSByYW5kb20gY2hhcmFjdGVyICovCisjZGVmaW5lIEhBTF9NTUNfU1JUX1ZFTkRPUl9ERUZJTkVEICAgICAgICAgIDB4MDAwMDAwMDhVICAvKiE8IEluZm9ybWF0aW9uIHJlbW92ZWQgdXNpbmcgYSB2ZW5kb3IgZGVmaW5lZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCisjZGVmaW5lIElTX01NQ19TUlRfVFlQRShUWVBFKSAoKChUWVBFKSA9PSBIQUxfTU1DX1NSVF9FUkFTRSkgICAgICAgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9FUkFTRSkgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IEhBTF9NTUNfU1JUX1dSSVRFX0NIQVJfQ09NUExfUkFORE9NKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBIQUxfTU1DX1NSVF9WRU5ET1JfREVGSU5FRCkpCisvKioKKyAgKiBAfQorICAqLworCiAvKioKICAgKiBAfQogICAqLwpAQCAtNjYxLDcgKzY5OCw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBNTUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNiBQZXJpb2hlcmFsIEFib3J0IG1hbmFnZW1lbnQKKy8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDYgUGVyaXBoZXJhbCBBYm9ydCBtYW5hZ2VtZW50CiAgICogQHsKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfQWJvcnQoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMpOwpAQCAtNjcwLDYgKzcwNywxNyBAQAogICAqIEB9CiAgICovCiAKKy8qKiBAZGVmZ3JvdXAgTU1DX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDcgUGVyaXBoZXJhbCBFcmFzZSBtYW5hZ2VtZW50CisgICogQHsKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfRXJhc2VTZXF1ZW5jZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgRXJhc2VUeXBlLCB1aW50MzJfdCBCbG9ja1N0YXJ0QWRkLCB1aW50MzJfdCBCbG9ja0VuZEFkZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfTU1DX1Nhbml0aXplKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfQ29uZmlnU2VjUmVtb3ZhbFR5cGUoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90IFNSVE1vZGUpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19HZXRTdXBwb3J0ZWRTZWNSZW1vdmFsVHlwZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgKlN1cHBvcnRlZFNSVCk7CisvKioKKyAgKiBAfQorICAqLworCiAvKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBkZWZncm91cCBNTUNfUHJpdmF0ZV9UeXBlcyBNTUMgUHJpdmF0ZSBUeXBlcwogICAqIEB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9tbWNfZXguaCBiL0luYy9zdG0zMmg3eHhfaGFsX21tY19leC5oCmluZGV4IDJkYjZiMDguLmI1Yzk0MjQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsX21tY19leC5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX21tY19leC5oCkBAIC0xNSw3ICsxNSw3IEBACiAgICogICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLyAKKyAgKi8KIAogLyogRGVmaW5lIHRvIHByZXZlbnQgcmVjdXJzaXZlIGluY2x1c2lvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpZm5kZWYgU1RNMzJIN3h4X0hBTF9NTUNfRVhfSApAQCAtMzUsNyArMzUsNyBAQAogLyoqIEBhZGR0b2dyb3VwIE1NQ0V4CiAgICogQGJyaWVmIFNEIEhBTCBleHRlbmRlZCBtb2R1bGUgZHJpdmVyCiAgICogQHsKLSAgKi8gCisgICovCiAKIC8qIEV4cG9ydGVkIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIE1NQ0V4X0V4cG9ydGVkX1R5cGVzIE1NQ0V4IEV4cG9ydGVkIFR5cGVzCkBAIC00NCw3ICs0NCw3IEBACiAKIC8qKiBAZGVmZ3JvdXAgTU1DRXhfRXhwb3J0ZWRfVHlwZXNfR3JvdXAxIE1NQyBJbnRlcm5hbCBETUEgQnVmZmVyIHN0cnVjdHVyZQogICAqIEB7Ci0gICovIAorICAqLwogdHlwZWRlZiBlbnVtCiB7CiAgIE1NQ19ETUFfQlVGRkVSMCAgICAgID0gMHgwMFUsICAgIC8qITwgc2VsZWN0cyBNTUMgaW50ZXJuYWwgRE1BIEJ1ZmZlciAwICAgICAqLwpAQCAtNTMsMjAgKzUzLDIwIEBACiB9SEFMX01NQ0V4X0RNQUJ1ZmZlcl9NZW1vcnlUeXBlRGVmOwogCiAKLS8qKiAKKy8qKgogICAqIEB9CiAgICovCi0gIAotLyoqIAorCisvKioKICAgKiBAfQotICAqLyAgCisgICovCiAvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGRlZmdyb3VwIE1NQ0V4X0V4cG9ydGVkX0Z1bmN0aW9ucyBNTUNFeCBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewogICAqLwotICAKKwogLyoqIEBkZWZncm91cCBNTUNFeF9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIE11bHRpQnVmZmVyIGZ1bmN0aW9ucwogICAqIEB7CiAgICovCkBAIC04MywxMSArODMsMTEgQEAKIC8qKgogICAqIEB9CiAgICovCi0gIAorCiAvKioKICAgKiBAfQogICAqLwotICAKKwogLyogUHJpdmF0ZSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtOTUsNyArOTUsNyBAQAogLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb25zIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEwOCw2ICsxMDgsNiBAQAogI2VuZGlmCiAKIAotI2VuZGlmIC8qIFNUTTMySDd4eF9IQUxfTU1DRXhfSCAqLyAKKyNlbmRpZiAvKiBTVE0zMkg3eHhfSEFMX01NQ0V4X0ggKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX290ZmRlYy5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfb3RmZGVjLmgKaW5kZXggMjNjZGUwNi4uZWJkNGVhNyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfb3RmZGVjLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfb3RmZGVjLmgKQEAgLTE4LDE0ICsxOCwxMyBAQAogICAqLwogCiAvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2lmbmRlZiBfX1NUTTMySDd4eF9IQUxfT1RGREVDX0gKLSNkZWZpbmUgX19TVE0zMkg3eHhfSEFMX09URkRFQ19ICisjaWZuZGVmIFNUTTMySDd4eF9IQUxfT1RGREVDX0gKKyNkZWZpbmUgU1RNMzJIN3h4X0hBTF9PVEZERUNfSAogCiAjaWZkZWYgX19jcGx1c3BsdXMKICBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChPVEZERUMxKQogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmg3eHhfaGFsX2RlZi5oIgogCkBAIC0zMyw2ICszMiw4IEBACiAgICogQHsKICAgKi8KIAorI2lmIGRlZmluZWQoT1RGREVDMSkKKwogLyoqIEBhZGR0b2dyb3VwIE9URkRFQwogICAqIEB7CiAgICovCkBAIC0yNjYsNiArMjY3LDM4IEBACiAgICovCiAjZGVmaW5lIF9fSEFMX09URkRFQ19ESVNBQkxFX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICBDTEVBUl9CSVQoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklFUiksIChfX0lOVEVSUlVQVF9fKSkKIAorICAvKiogQGJyaWVmICBDaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY29tYmluYXRpb24gb2YgT1RGREVDIGludGVycnVwdCBmbGFncyBpcyBzZXQgb3Igbm90LgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBwb2ludGVyIHRvIGFuIE9URkRFQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgT1RGREVDIG1vZHVsZQorICAqIEBwYXJhbSAgX19GTEFHX18gbWFzayBvbiBjb21iaW5hdGlvbiBvZiBpbnRlcnJ1cHRzIGZsYWdzCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBPVEZERUNfU0VDX0VSUk9SX0lOVCAgICAgICAgT1RGREVDIHNlY3VyaXR5IGVycm9yIGludGVycnVwdCBmbGFnCisgICogICAgICAgICAgICBAYXJnIEByZWYgT1RGREVDX0VYRV9FUlJPUl9JTlQgICAgICAgIE9URkRFQyBleGVjdXRpb24gZXJyb3IgaW50ZXJydXB0IGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBPVEZERUNfS0VZX0VSUk9SX0lOVCAgICAgICAgT1RGREVDIGtleSBlcnJvciBpbnRlcnJ1cHQgZmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIE9URkRFQ19TRUNfRVhFX0VSUk9SX0lOVCAgICBPVEZERUMgc2VjdXJpdHkgYW5kIGV4ZWN1dGlvbiBlcnJvcnMgaW50ZXJydXB0cyBmbGFncworICAqICAgICAgICAgICAgQGFyZyBAcmVmIE9URkRFQ19TRUNfS0VZX0VSUk9SX0lOVCAgICBPVEZERUMgc2VjdXJpdHkgYW5kIGtleSBlcnJvcnMgaW50ZXJydXB0cyBmbGFncworICAqICAgICAgICAgICAgQGFyZyBAcmVmIE9URkRFQ19FWEVfS0VZX0VSUk9SX0lOVCAgICBPVEZERUMgZXhlY3V0aW9uIGFuZCBrZXkgZXJyb3JzIGludGVycnVwdHMgZmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIE9URkRFQ19BTExfSU5UICAgICAgICAgICAgICBPVEZERUMgYWxsIGludGVycnVwdHMgZmxhZ3MKKyAqIEByZXR2YWwgVGhlIHN0YXRlIG9mIF9fRkxBR19fIChUUlVFIG9yIEZBTFNFKS4KKyAgKi8KKyAgI2RlZmluZSBfX0hBTF9PVEZERUNfR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVNSICYgKF9fRkxBR19fKSkgPT0gKF9fRkxBR19fKSkKKworLyoqIEBicmllZiAgQ2xlYXIgdGhlIHNwZWNpZmllZCBjb21iaW5hdGlvbiBvZiBPVEZERUMgaW50ZXJydXB0IGZsYWdzLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBwb2ludGVyIHRvIGFuIE9URkRFQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgT1RGREVDIG1vZHVsZQorICAqIEBwYXJhbSAgX19GTEFHX18gbWFzayBvbiBjb21iaW5hdGlvbiBvZiBpbnRlcnJ1cHRzIGZsYWdzCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBPVEZERUNfU0VDX0VSUk9SX0lOVCAgICAgICAgT1RGREVDIHNlY3VyaXR5IGVycm9yIGludGVycnVwdCBmbGFnCisgICogICAgICAgICAgICBAYXJnIEByZWYgT1RGREVDX0VYRV9FUlJPUl9JTlQgICAgICAgIE9URkRFQyBleGVjdXRpb24gZXJyb3IgaW50ZXJydXB0IGZsYWcKKyAgKiAgICAgICAgICAgIEBhcmcgQHJlZiBPVEZERUNfS0VZX0VSUk9SX0lOVCAgICAgICAgT1RGREVDIGtleSBlcnJvciBpbnRlcnJ1cHQgZmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIE9URkRFQ19TRUNfRVhFX0VSUk9SX0lOVCAgICBPVEZERUMgc2VjdXJpdHkgYW5kIGV4ZWN1dGlvbiBlcnJvcnMgaW50ZXJydXB0cyBmbGFncworICAqICAgICAgICAgICAgQGFyZyBAcmVmIE9URkRFQ19TRUNfS0VZX0VSUk9SX0lOVCAgICBPVEZERUMgc2VjdXJpdHkgYW5kIGtleSBlcnJvcnMgaW50ZXJydXB0cyBmbGFncworICAqICAgICAgICAgICAgQGFyZyBAcmVmIE9URkRFQ19FWEVfS0VZX0VSUk9SX0lOVCAgICBPVEZERUMgZXhlY3V0aW9uIGFuZCBrZXkgZXJyb3JzIGludGVycnVwdHMgZmxhZworICAqICAgICAgICAgICAgQGFyZyBAcmVmIE9URkRFQ19BTExfSU5UICAgICAgICAgICAgICBPVEZERUMgYWxsIGludGVycnVwdHMgZmxhZ3MKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgX19IQUxfT1RGREVDX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pIFNFVF9CSVQoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SUNSLCAoX19GTEFHX18pKQorCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDI4LDE3ICs0NjEsMTcgQEAKICAgKiBAfQogICAqLwogCisjZW5kaWYgLyogT1RGREVDMSAqLwogCiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmIC8qIE9URkRFQzEgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIAotI2VuZGlmIC8qIF9fU1RNMzJIN3h4X0hBTF9PVEZERUNfSCAqLworI2VuZGlmIC8qIFNUTTMySDd4eF9IQUxfT1RGREVDX0ggKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8KIApkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9oYWxfcGNkLmggYi9JbmMvc3RtMzJoN3h4X2hhbF9wY2QuaAppbmRleCBjOTBjYzE2Li44MjFmOGQ5IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9wY2QuaAorKysgYi9JbmMvc3RtMzJoN3h4X2hhbF9wY2QuaApAQCAtOTYsMTYgKzk2LDE2IEBACiB0eXBlZGVmIHN0cnVjdAogI2VuZGlmIC8qIFVTRV9IQUxfUENEX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogewotICBQQ0RfVHlwZURlZiAgICAgICAgICAgICAqSW5zdGFuY2U7ICAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICovCi0gIFBDRF9Jbml0VHlwZURlZiAgICAgICAgIEluaXQ7ICAgICAgICAvKiE8IFBDRCByZXF1aXJlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgKi8KLSAgX19JTyB1aW50OF90ICAgICAgICAgICAgVVNCX0FkZHJlc3M7IC8qITwgVVNCIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBQQ0RfRVBUeXBlRGVmICAgICAgICAgICBJTl9lcFsxNl07ICAgLyohPCBJTiBlbmRwb2ludCBwYXJhbWV0ZXJzICAgICAgICAgICAgICovCi0gIFBDRF9FUFR5cGVEZWYgICAgICAgICAgIE9VVF9lcFsxNl07ICAvKiE8IE9VVCBlbmRwb2ludCBwYXJhbWV0ZXJzICAgICAgICAgICAgKi8KLSAgSEFMX0xvY2tUeXBlRGVmICAgICAgICAgTG9jazsgICAgICAgIC8qITwgUENEIHBlcmlwaGVyYWwgc3RhdHVzICAgICAgICAgICAgICAqLwotICBfX0lPIFBDRF9TdGF0ZVR5cGVEZWYgICBTdGF0ZTsgICAgICAgLyohPCBQQ0QgY29tbXVuaWNhdGlvbiBzdGF0ZSAgICAgICAgICAgICovCi0gIF9fSU8gIHVpbnQzMl90ICAgICAgICAgIEVycm9yQ29kZTsgICAvKiE8IFBDRCBFcnJvciBjb2RlICAgICAgICAgICAgICAgICAgICAgKi8KLSAgdWludDMyX3QgICAgICAgICAgICAgICAgU2V0dXBbMTJdOyAgIC8qITwgU2V0dXAgcGFja2V0IGJ1ZmZlciAgICAgICAgICAgICAgICAqLwotICBQQ0RfTFBNX1N0YXRlVHlwZURlZiAgICBMUE1fU3RhdGU7ICAgLyohPCBMUE0gU3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIFBDRF9UeXBlRGVmICAgICAgICAgICAgICpJbnN0YW5jZTsgICAvKiE8IFJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAqLworICBQQ0RfSW5pdFR5cGVEZWYgICAgICAgICBJbml0OyAgICAgICAgLyohPCBQQ0QgcmVxdWlyZWQgcGFyYW1ldGVycyAgICAgICAgICAgKi8KKyAgX19JTyB1aW50OF90ICAgICAgICAgICAgVVNCX0FkZHJlc3M7IC8qITwgVVNCIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICovCisgIFBDRF9FUFR5cGVEZWYgICAgICAgICAgIElOX2VwWzE2XTsgICAvKiE8IElOIGVuZHBvaW50IHBhcmFtZXRlcnMgICAgICAgICAgICAqLworICBQQ0RfRVBUeXBlRGVmICAgICAgICAgICBPVVRfZXBbMTZdOyAgLyohPCBPVVQgZW5kcG9pbnQgcGFyYW1ldGVycyAgICAgICAgICAgKi8KKyAgSEFMX0xvY2tUeXBlRGVmICAgICAgICAgTG9jazsgICAgICAgIC8qITwgUENEIHBlcmlwaGVyYWwgc3RhdHVzICAgICAgICAgICAgICovCisgIF9fSU8gUENEX1N0YXRlVHlwZURlZiAgIFN0YXRlOyAgICAgICAvKiE8IFBDRCBjb21tdW5pY2F0aW9uIHN0YXRlICAgICAgICAgICAqLworICBfX0lPICB1aW50MzJfdCAgICAgICAgICBFcnJvckNvZGU7ICAgLyohPCBQQ0QgRXJyb3IgY29kZSAgICAgICAgICAgICAgICAgICAgKi8KKyAgdWludDMyX3QgICAgICAgICAgICAgICAgU2V0dXBbMTJdOyAgIC8qITwgU2V0dXAgcGFja2V0IGJ1ZmZlciAgICAgICAgICAgICAgICovCisgIFBDRF9MUE1fU3RhdGVUeXBlRGVmICAgIExQTV9TdGF0ZTsgICAvKiE8IExQTSBTdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICB1aW50MzJfdCAgICAgICAgICAgICAgICBCRVNMOwogCiAKQEAgLTI0NCw3ICsyNDQsNyBAQAogICBIQUxfUENEX1NVU1BFTkRfQ0JfSUQgICAgICA9IDB4MDQsICAgICAgLyohPCBVU0IgUENEIFN1c3BlbmQgY2FsbGJhY2sgSUQgICAgICAqLwogICBIQUxfUENEX1JFU1VNRV9DQl9JRCAgICAgICA9IDB4MDUsICAgICAgLyohPCBVU0IgUENEIFJlc3VtZSBjYWxsYmFjayBJRCAgICAgICAqLwogICBIQUxfUENEX0NPTk5FQ1RfQ0JfSUQgICAgICA9IDB4MDYsICAgICAgLyohPCBVU0IgUENEIENvbm5lY3QgY2FsbGJhY2sgSUQgICAgICAqLwotICBIQUxfUENEX0RJU0NPTk5FQ1RfQ0JfSUQgID0gMHgwNywgICAgICAvKiE8IFVTQiBQQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRCAgICovCisgIEhBTF9QQ0RfRElTQ09OTkVDVF9DQl9JRCAgID0gMHgwNywgICAgICAvKiE8IFVTQiBQQ0QgRGlzY29ubmVjdCBjYWxsYmFjayBJRCAgICovCiAKICAgSEFMX1BDRF9NU1BJTklUX0NCX0lEICAgICAgPSAweDA4LCAgICAgIC8qITwgVVNCIFBDRCBNc3BJbml0IGNhbGxiYWNrIElEICAgICAgKi8KICAgSEFMX1BDRF9NU1BERUlOSVRfQ0JfSUQgICAgPSAweDA5ICAgICAgIC8qITwgVVNCIFBDRCBNc3BEZUluaXQgY2FsbGJhY2sgSUQgICAgKi8KQEAgLTM2MywxNCArMzYzLDYgQEAKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQgKFVTQl9PVEdfRlMpIHx8IGRlZmluZWQgKFVTQl9PVEdfSFMpCi0jZGVmaW5lIFVTQl9PVEdfRlNfV0FLRVVQX0VYVElfUklTSU5HX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOFUKLSNkZWZpbmUgVVNCX09UR19GU19XQUtFVVBfRVhUSV9GQUxMSU5HX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDVQotI2RlZmluZSBVU0JfT1RHX0ZTX1dBS0VVUF9FWFRJX1JJU0lOR19GQUxMSU5HX0VER0UgICAgICAgICAgICAgICAgICAgIDB4MTBVCi0KLSNkZWZpbmUgVVNCX09UR19IU19XQUtFVVBfRVhUSV9SSVNJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4VQotI2RlZmluZSBVU0JfT1RHX0hTX1dBS0VVUF9FWFRJX0ZBTExJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MENVCi0jZGVmaW5lIFVTQl9PVEdfSFNfV0FLRVVQX0VYVElfUklTSU5HX0ZBTExJTkdfRURHRSAgICAgICAgICAgICAgICAgICAgMHgxMFUKLQogI2RlZmluZSBVU0JfT1RHX0ZTX1dBS0VVUF9FWFRJX0xJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFVIDw8IDEyKSAgLyohPCBVU0IgRlMgRVhUSSBMaW5lIFdha2VVcCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgVVNCX09UR19IU19XQUtFVVBfRVhUSV9MSU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxVSA8PCAxMSkgIC8qITwgVVNCIEhTIEVYVEkgTGluZSBXYWtlVXAgSW50ZXJydXB0ICovCiAjZW5kaWYgLyogZGVmaW5lZCAoVVNCX09UR19GUykgfHwgZGVmaW5lZCAoVVNCX09UR19IUykgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX3B3ci5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfcHdyLmgKaW5kZXggMThkYTRjZC4uOWRiZjQwNCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfcHdyLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfcHdyLmgKQEAgLTIyOCwxMSArMjI4LDExIEBACiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2FsZSAyIG1vZGUuCiAgICogICAgICAgICAgICBAYXJnIFBXUl9SRUdVTEFUT1JfVk9MVEFHRV9TQ0FMRTMgOiBSZWd1bGF0b3Igdm9sdGFnZSBvdXRwdXQKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjYWxlIDMgbW9kZS4KLSAgKiBAbm90ZSAgIEZvciBhbGwgSDcgbGluZXMgZXhjZXB0IFNUTTMySDdBeHh4IGFuZCBTVE0zMkg3Qnh4eCBsaW5lcywKLSAgKiAgICAgICAgIGNvbmZpZ3VyaW5nIFZvbHRhZ2UgU2NhbGUgMCBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gVmNvcmUgaXMgc3VwcGxpZWQKLSAgKiAgICAgICAgIGZyb20gTERPIChMb3cgRHJvcE91dCkuIFRoZSBTWVNDRkcgQ2xvY2sgbXVzdCBiZSBlbmFibGVkIHRocm91Z2gKLSAgKiAgICAgICAgIF9fSEFMX1JDQ19TWVNDRkdfQ0xLX0VOQUJMRSgpIG1hY3JvIGJlZm9yZSBjb25maWd1cmluZyBWb2x0YWdlIFNjYWxlCi0gICogICAgICAgICAwIHVzaW5nIF9fSEFMX1BXUl9WT0xUQUdFU0NBTElOR19DT05GSUcoKS4KKyAgKiBAbm90ZSAgIEZvciBTVE0zMkg3NHggYW5kIFNUTTMySDc1eCBsaW5lcywgY29uZmlndXJpbmcgVm9sdGFnZSBTY2FsZSAwIGlzCisgICogICAgICAgICBvbmx5IHBvc3NpYmxlIHdoZW4gVmNvcmUgaXMgc3VwcGxpZWQgZnJvbSBMRE8gKExvdyBEcm9wT3V0KS4gVGhlCisgICogICAgICAgICBTWVNDRkcgQ2xvY2sgbXVzdCBiZSBlbmFibGVkIHRocm91Z2ggX19IQUxfUkNDX1NZU0NGR19DTEtfRU5BQkxFKCkKKyAgKiAgICAgICAgIG1hY3JvIGJlZm9yZSBjb25maWd1cmluZyBWb2x0YWdlIFNjYWxlIDAgdXNpbmcKKyAgKiAgICAgICAgIF9fSEFMX1BXUl9WT0xUQUdFU0NBTElOR19DT05GSUcoKS4KICAgKiAgICAgICAgIFRyYW5zaXRpb24gdG8gVm9sdGFnZSBTY2FsZSAwIGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgc3lzdGVtIGlzCiAgICogICAgICAgICBhbHJlYWR5IGluIFZvbHRhZ2UgU2NhbGUgMS4KICAgKiAgICAgICAgIFRyYW5zaXRpb24gZnJvbSBWb2x0YWdlIFNjYWxlIDAgaXMgb25seSBwb3NzaWJsZSB0byBWb2x0YWdlIFNjYWxlIDEKQEAgLTI0NSwxNiArMjQ1LDE4IEBACiAgICogICAgICAgICBsb3cgcG93ZXIgbW9kZS4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi0jaWYgZGVmaW5lZChQV1JfU1JEQ1JfVk9TKSAvKiBTVE0zMkg3QXh4eCBhbmQgU1RNMzJIN0J4eHggbGluZXMgKi8KKyNpZiBkZWZpbmVkIChQV1JfU1JEQ1JfVk9TKSAvKiBTVE0zMkg3QXh4eCBhbmQgU1RNMzJIN0J4eHggbGluZXMgKi8KICNkZWZpbmUgX19IQUxfUFdSX1ZPTFRBR0VTQ0FMSU5HX0NPTkZJRyhfX1JFR1VMQVRPUl9fKSAgICAgICAgICAgICAgICAgICAgICAgICBcCiBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgX19JTyB1aW50MzJfdCB0bXByZWcgPSAweDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC8qIENvbmZpZ3VyZSB0aGUgVm9sdGFnZSBTY2FsaW5nICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBNT0RJRllfUkVHKFBXUi0+U1JEQ1IsIFBXUl9TUkRDUl9WT1MsIChfX1JFR1VMQVRPUl9fKSk7ICAgICAgICAgICAgICAgICAgXAogICAgICAgLyogRGVsYXkgYWZ0ZXIgc2V0dGluZyB0aGUgdm9sdGFnZSBzY2FsaW5nICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFBXUi0+U1JEQ1IsIFBXUl9TUkRDUl9WT1MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBVTlVTRUQodG1wcmVnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSgwKQotI2Vsc2UgLyogQWxsIEg3IGxpbmVzIGV4Y2VwdCBTVE0zMkg3QXh4eCBhbmQgU1RNMzJIN0J4eHggbGluZXMgKi8KKyNlbHNlIC8qIDMgcG93ZXIgZG9tYWlucyBkZXZpY2VzICovCisjaWYgZGVmaW5lZChTWVNDRkdfUFdSQ1JfT0RFTikgLyogU1RNMzJINzR4eHggYW5kIFNUTTMySDc1eHh4IGxpbmVzICovCiAjZGVmaW5lIF9fSEFMX1BXUl9WT0xUQUdFU0NBTElOR19DT05GSUcoX19SRUdVTEFUT1JfXykgICAgICAgICAgICAgICAgICAgICAgICAgXAogZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnID0gMHgwMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yODMsNyArMjg1LDE4IEBACiAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgVU5VU0VEKHRtcHJlZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0gd2hpbGUoMCkKLSNlbmRpZiAvKiBQV1JfU1JEQ1JfVk9TICovCisjZWxzZSAvKiBTVE0zMkg3Mnh4eCBhbmQgU1RNMzJINzN4eHggbGluZXMgKi8KKyNkZWZpbmUgX19IQUxfUFdSX1ZPTFRBR0VTQ0FMSU5HX0NPTkZJRyhfX1JFR1VMQVRPUl9fKSAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgX19JTyB1aW50MzJfdCB0bXByZWcgPSAweDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIC8qIENvbmZpZ3VyZSB0aGUgVm9sdGFnZSBTY2FsaW5nICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBNT0RJRllfUkVHIChQV1ItPkQzQ1IsIFBXUl9EM0NSX1ZPUywgKF9fUkVHVUxBVE9SX18pKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgLyogRGVsYXkgYWZ0ZXIgc2V0dGluZyB0aGUgdm9sdGFnZSBzY2FsaW5nICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHRtcHJlZyA9IFJFQURfQklUKFBXUi0+RDNDUiwgUFdSX0QzQ1JfVk9TKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBVTlVTRUQodG1wcmVnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSgwKQorI2VuZGlmIC8qIGRlZmluZWQoU1lTQ0ZHX1BXUkNSX09ERU4pICovCisjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1NSRENSX1ZPUykgKi8KIAogLyoqIEBicmllZiAgQ2hlY2sgUFdSIGZsYWdzIGFyZSBzZXQgb3Igbm90LgogICAqIEBwYXJhbSAgX19GTEFHX18gOiBTcGVjaWZpZXMgdGhlIGZsYWcgdG8gY2hlY2suCkBAIC0zNTYsMTAgKzM2OSwxMCBAQAogICAqICAgICAgICAgZmFtaWx5IGV4Y2VwdCBTVE0zMkg3QXh4eCBhbmQgU1RNMzJIN0J4eHggbGluZXMuCiAgICogICAgICAgICBUaGUgUFdSX0ZMQUdfTU1DVkRPIGZsYWcgaXMgdXNlZCBvbmx5IGZvciBTVE0zMkg3QXh4eCBhbmQKICAgKiAgICAgICAgIFNUTTMySDdCeHh4IGxpbmVzLgotICAqICAgICAgICAgVGhlIFBXUl9GTEFHX1NDVUVOIGZsYWcgaXMgdXNlZCBmb3IgU1RNMzJINzQzLCBTVE0zMkg3NTMsIFNUTTMySDc0MiwKLSAgKiAgICAgICAgIFNUTTMySDc1MCwgU1RNMzJIN0F4eCBhbmQgU1RNMzJIN0J4eCBsaW5lcy4KLSAgKiAgICAgICAgIFRoZSBQV1JfRkxBR19TTVBTRVhUUkRZIGZsYWcgaXMgdXNlZCBmb3IgZHVhbCBjb3JlIGFuZCBTVE0zMkg3QXh4USwKLSAgKiAgICAgICAgIFNUTTMySDdCeHhRIGxpbmVzLgorICAqICAgICAgICAgVGhlIFBXUl9GTEFHX1NDVUVOIGZsYWcgaXMgdXNlZCBmb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgb25seSBMRE8KKyAgKiAgICAgICAgIHJlZ3VsYXRvci4KKyAgKiAgICAgICAgIFRoZSBQV1JfRkxBR19TTVBTRVhUUkRZIGZsYWcgaXMgdXNlZCBmb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgTERPCisgICogICAgICAgICBhbmQgU01QUyByZWd1bGF0b3JzLgogICAqIEByZXR2YWwgVGhlIChfX0ZMQUdfXykgc3RhdGUgKFRSVUUgb3IgRkFMU0UpLgogICAqLwogI2lmIGRlZmluZWQgKERVQUxfQ09SRSkgLyogRHVhbCBjb3JlIGxpbmVzICovCkBAIC0zODYsNyArMzk5LDI1IEBACiAgKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfVkJBVEgpICAgICAgPyAoKFBXUi0+Q1IyICYgUFdSX0NSMl9WQkFUSCkgICAgICAgID09IFBXUl9DUjJfVkJBVEgpICAgICAgOlwKICAoKFBXUi0+Q1IyICYgUFdSX0NSMl9WQkFUTCkgPT0gUFdSX0NSMl9WQkFUTCkpCiAjZWxzZSAvKiBTaW5nbGUgY29yZSBsaW5lcyAqLwotI2lmIGRlZmluZWQgKFBXUl9DUFVDUl9TQkZfRDIpIC8qIFNUTTMySDc0MywgU1RNMzJINzUzLCBTVE0zMkg3NDIgYW5kIFNUTTMySDc1MCBsaW5lcyAqLworI2lmIGRlZmluZWQgKFBXUl9DUFVDUl9TQkZfRDIpIC8qIFNUTTMySDcyeCwgU1RNMzJINzN4LCBTVE0zMkg3NHggYW5kIFNUTTMySDc1eCBsaW5lcyAqLworI2lmIGRlZmluZWQgKFNNUFMpIC8qIFNUTTMySDcyNSBhbmQgU1RNMzJINzM1IGxpbmVzICovCisjZGVmaW5lIF9fSEFMX1BXUl9HRVRfRkxBRyhfX0ZMQUdfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKygoKF9fRkxBR19fKSA9PSBQV1JfRkxBR19QVkRPKSAgICAgICA/ICgoUFdSLT5DU1IxICYgUFdSX0NTUjFfUFZETykgICAgICA9PSBQV1JfQ1NSMV9QVkRPKSAgICAgICA6XAorICgoX19GTEFHX18pID09IFBXUl9GTEFHX0FWRE8pICAgICAgID8gKChQV1ItPkNTUjEgJiBQV1JfQ1NSMV9BVkRPKSAgICAgID09IFBXUl9DU1IxX0FWRE8pICAgICAgIDpcCisgKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfQUNUVk9TUkRZKSAgPyAoKFBXUi0+Q1NSMSAmIFBXUl9DU1IxX0FDVFZPU1JEWSkgPT0gUFdSX0NTUjFfQUNUVk9TUkRZKSAgOlwKKyAoKF9fRkxBR19fKSA9PSBQV1JfRkxBR19WT1NSRFkpICAgICA/ICgoUFdSLT5EM0NSICYgUFdSX0QzQ1JfVk9TUkRZKSAgICA9PSBQV1JfRDNDUl9WT1NSRFkpICAgICA6XAorICgoX19GTEFHX18pID09IFBXUl9GTEFHX1NNUFNFWFRSRFkpID8gKChQV1ItPkNSMyAmIFBXUl9GTEFHX1NNUFNFWFRSRFkpID09IFBXUl9GTEFHX1NNUFNFWFRSRFkpIDpcCisgKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfQlJSKSAgICAgICAgPyAoKFBXUi0+Q1IyICYgUFdSX0NSMl9CUlJEWSkgICAgICAgPT0gUFdSX0NSMl9CUlJEWSkgICAgICAgOlwKKyAoKF9fRkxBR19fKSA9PSBQV1JfRkxBR19TQikgICAgICAgICA/ICgoUFdSLT5DUFVDUiAmIFBXUl9DUFVDUl9TQkYpICAgICA9PSBQV1JfQ1BVQ1JfU0JGKSAgICAgICA6XAorICgoX19GTEFHX18pID09IFBXUl9GTEFHX1NUT1ApICAgICAgID8gKChQV1ItPkNQVUNSICYgUFdSX0NQVUNSX1NUT1BGKSAgID09IFBXUl9DUFVDUl9TVE9QRikgICAgIDpcCisgKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfU0JfRDEpICAgICAgPyAoKFBXUi0+Q1BVQ1IgJiBQV1JfQ1BVQ1JfU0JGX0QxKSAgPT0gUFdSX0NQVUNSX1NCRl9EMSkgICAgOlwKKyAoKF9fRkxBR19fKSA9PSBQV1JfRkxBR19TQl9EMikgICAgICA/ICgoUFdSLT5DUFVDUiAmIFBXUl9DUFVDUl9TQkZfRDIpICA9PSBQV1JfQ1BVQ1JfU0JGX0QyKSAgICA6XAorICgoX19GTEFHX18pID09IFBXUl9GTEFHX1VTQjMzUkRZKSAgID8gKChQV1ItPkNSMyAmIFBXUl9DUjNfVVNCMzNSRFkpICAgID09IFBXUl9DUjNfVVNCMzNSRFkpICAgIDpcCisgKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfVEVNUEgpICAgICAgPyAoKFBXUi0+Q1IyICYgUFdSX0NSMl9URU1QSCkgICAgICAgPT0gUFdSX0NSMl9URU1QSCkgICAgICAgOlwKKyAoKF9fRkxBR19fKSA9PSBQV1JfRkxBR19URU1QTCkgICAgICA/ICgoUFdSLT5DUjIgJiBQV1JfQ1IyX1RFTVBMKSAgICAgICA9PSBQV1JfQ1IyX1RFTVBMKSAgICAgICA6XAorICgoX19GTEFHX18pID09IFBXUl9GTEFHX1ZCQVRIKSAgICAgID8gKChQV1ItPkNSMiAmIFBXUl9DUjJfVkJBVEgpICAgICAgID09IFBXUl9DUjJfVkJBVEgpICAgICAgIDpcCisgKChQV1ItPkNSMiAmIFBXUl9DUjJfVkJBVEwpID09IFBXUl9DUjJfVkJBVEwpKQorI2Vsc2UgLyogU1RNMzJINzIzLCBTVE0zMkg3MzMsIFNUTTMySDc0MiwgU1RNMzJINzQzLCBTVE0zMkg3NTAgYW5kIFNUTTMySDc1MyBsaW5lcyAqLwogI2RlZmluZSBfX0hBTF9QV1JfR0VUX0ZMQUcoX19GTEFHX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogKCgoX19GTEFHX18pID09IFBXUl9GTEFHX1BWRE8pICAgICAgPyAoKFBXUi0+Q1NSMSAmIFBXUl9DU1IxX1BWRE8pICAgICAgPT0gUFdSX0NTUjFfUFZETykgICAgICA6XAogICgoX19GTEFHX18pID09IFBXUl9GTEFHX0FWRE8pICAgICAgPyAoKFBXUi0+Q1NSMSAmIFBXUl9DU1IxX0FWRE8pICAgICAgPT0gUFdSX0NTUjFfQVZETykgICAgICA6XApAQCAtNDAzLDkgKzQzNCwxMCBAQAogICgoX19GTEFHX18pID09IFBXUl9GTEFHX1RFTVBMKSAgICAgPyAoKFBXUi0+Q1IyICYgUFdSX0NSMl9URU1QTCkgICAgICAgPT0gUFdSX0NSMl9URU1QTCkgICAgICA6XAogICgoX19GTEFHX18pID09IFBXUl9GTEFHX1ZCQVRIKSAgICAgPyAoKFBXUi0+Q1IyICYgUFdSX0NSMl9WQkFUSCkgICAgICAgPT0gUFdSX0NSMl9WQkFUSCkgICAgICA6XAogICgoUFdSLT5DUjIgJiBQV1JfQ1IyX1ZCQVRMKSA9PSBQV1JfQ1IyX1ZCQVRMKSkKKyNlbmRpZiAvKiBkZWZpbmVkIChTTVBTKSAqLwogI2Vsc2UgLyogU1RNMzJIN0F4eHggYW5kIFNUTTMySDdCeHh4IGxpbmVzICovCi0jaWYgZGVmaW5lZCAoU01QUykgLyogU1RNMzJIN0F4eFEgYW5kIFNUTTMySDdCeHhRIFNNUFMgbGluZXMgKi8KLSNkZWZpbmUgX19IQUxfUFdSX0dFVF9GTEFHKF9fRkxBR19fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNpZiBkZWZpbmVkIChTTVBTKSAvKiBTVE0zMkg3QXh4USBhbmQgU1RNMzJIN0J4eFEgbGluZXMgKi8KKyNkZWZpbmUgX19IQUxfUFdSX0dFVF9GTEFHKF9fRkxBR19fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAoKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfUFZETykgICAgICAgPyAoKFBXUi0+Q1NSMSAmIFBXUl9DU1IxX1BWRE8pICAgICAgPT0gUFdSX0NTUjFfUFZETykgICAgICA6XAogICgoX19GTEFHX18pID09IFBXUl9GTEFHX0FWRE8pICAgICAgID8gKChQV1ItPkNTUjEgJiBQV1JfQ1NSMV9BVkRPKSAgICAgID09IFBXUl9DU1IxX0FWRE8pICAgICAgOlwKICAoKF9fRkxBR19fKSA9PSBQV1JfRkxBR19BQ1RWT1NSRFkpICA/ICgoUFdSLT5DU1IxICYgUFdSX0NTUjFfQUNUVk9TUkRZKSA9PSBQV1JfQ1NSMV9BQ1RWT1NSRFkpIDpcCkBAIC00MjAsOCArNDUyLDggQEAKICAoKF9fRkxBR19fKSA9PSBQV1JfRkxBR19URU1QTCkgICAgICA/ICgoUFdSLT5DUjIgJiBQV1JfQ1IyX1RFTVBMKSAgICAgICA9PSBQV1JfQ1IyX1RFTVBMKSAgICAgIDpcCiAgKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfVkJBVEgpICAgICAgPyAoKFBXUi0+Q1IyICYgUFdSX0NSMl9WQkFUSCkgICAgICAgPT0gUFdSX0NSMl9WQkFUSCkgICAgICA6XAogICgoUFdSLT5DUjIgJiBQV1JfQ1IyX1ZCQVRMKSA9PSBQV1JfQ1IyX1ZCQVRMKSkKLSNlbHNlIC8qIFNUTTMySDdBeHggYW5kIFNUTTMySDdCeHggTERPIGxpbmVzICovCi0jZGVmaW5lIF9fSEFMX1BXUl9HRVRfRkxBRyhfX0ZMQUdfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZWxzZSAvKiBTVE0zMkg3QXh4IGFuZCBTVE0zMkg3Qnh4IGxpbmVzICovCisjZGVmaW5lIF9fSEFMX1BXUl9HRVRfRkxBRyhfX0ZMQUdfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAoKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfUFZETykgICAgICA/ICgoUFdSLT5DU1IxICYgUFdSX0NTUjFfUFZETykgICAgICA9PSBQV1JfQ1NSMV9QVkRPKSAgICAgIDpcCiAgKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfQVZETykgICAgICA/ICgoUFdSLT5DU1IxICYgUFdSX0NTUjFfQVZETykgICAgICA9PSBQV1JfQ1NSMV9BVkRPKSAgICAgIDpcCiAgKChfX0ZMQUdfXykgPT0gUFdSX0ZMQUdfQUNUVk9TUkRZKSA/ICgoUFdSLT5DU1IxICYgUFdSX0NTUjFfQUNUVk9TUkRZKSA9PSBQV1JfQ1NSMV9BQ1RWT1NSRFkpIDpcCkBAIC00NDksNiArNDgxLDggQEAKICAgKiAgICAgICAgICAgIEBhcmcgUFdSX0ZMQUdfV0tVUDQgOiBUaGlzIHBhcmFtZXRlciBjbGVhciBXYWtlIHVwIGxpbmUgNCBmbGFnLgogICAqICAgICAgICAgICAgQGFyZyBQV1JfRkxBR19XS1VQNSA6IFRoaXMgcGFyYW1ldGVyIGNsZWFyIFdha2UgdXAgbGluZSA1IGZsYWcuCiAgICogICAgICAgICAgICBAYXJnIFBXUl9GTEFHX1dLVVA2IDogVGhpcyBwYXJhbWV0ZXIgY2xlYXIgV2FrZSB1cCBsaW5lIDYgZmxhZy4KKyAgKiBAbm90ZSAgIFRoZSBQV1JfRkxBR19XS1VQMyBhbmQgUFdSX0ZMQUdfV0tVUDUgYXJlIGF2YWlsYWJsZSBvbmx5IGZvciBkZXZpY2VzCisgICogICAgICAgICB0aGF0IHN1cHBvcnQgR1BJT0kgcG9ydC4KICAgKiBAcmV0dmFsIFRoZSAoX19GTEFHX18pIHN0YXRlIChUUlVFIG9yIEZBTFNFKS4KICAgKi8KICNkZWZpbmUgX19IQUxfUFdSX0dFVF9XQUtFVVBGTEFHKF9fRkxBR19fKSAoKFBXUi0+V0tVUEZSICYgKF9fRkxBR19fKSkgPyAwIDogMSkKQEAgLTQ3NSw4ICs1MDksOSBAQAogICAqIEBub3RlICAgVGhpcyBwYXJhbWV0ZXIgaXMgbm90IHVzZWQgZm9yIHRoZSBTVE0zMkg3IGZhbWlseSBhbmQgaXMga2VwdCBhcwogICAqICAgICAgICAgcGFyYW1ldGVyIGp1c3QgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGZhbWlsaWVzLgogICAqIEBub3RlICAgVGhpcyBtYWNybyBjbGVhciBhbGwgQ1BVIGZsYWdzLgotICAqICAgICAgICAgRm9yIFNUTTMySDdBeHh4IGFuZCBTVE0zMkg3Qnh4eCBsaW5lcyBDUFUgZmxhZ3MgYXJlIFNUT1BGIGFuZCBTQkYuCi0gICogICAgICAgICBGb3IgZHVhbCBjb3JlIGxpbmVzIGZsYWdzIGFyZSBIT0xEeEYsIFNUT1BGLCBTQkYgYW5kIFNCRl9EeC4KKyAgKiAgICAgICAgIEZvciBzaW5nbGUgY29yZSBkZXZpY2VzIGV4Y2VwdCBTVE0zMkg3QXh4eCBhbmQgU1RNMzJIN0J4eHgsIENQVQorICAqICAgICAgICAgZmxhZ3MgYXJlIFNUT1BGLCBTQkYsIFNCRl9EMSBhbmQgU0JGX0QyLgorICAqICAgICAgICAgRm9yIFNUTTMySDdBeHh4IGFuZCBTVE0zMkg3Qnh4eCBsaW5lcywgQ1BVIGZsYWdzIGFyZSBTVE9QRiBhbmQgU0JGLgogICAqIEByZXR2YWwgTm9uZS4KICAgKi8KICNkZWZpbmUgX19IQUxfUFdSX0NMRUFSX0ZMQUcoX19GTEFHX18pIFNFVF9CSVQoUFdSLT5DUFVDUiwgUFdSX0NQVUNSX0NTU0YpCkBAIC00OTEsNiArNTI2LDggQEAKICAgKiAgICAgICAgICAgIEBhcmcgUFdSX0ZMQUdfV0tVUDQgOiBUaGlzIHBhcmFtZXRlciBjbGVhciBXYWtlIHVwIGxpbmUgNCBmbGFnLgogICAqICAgICAgICAgICAgQGFyZyBQV1JfRkxBR19XS1VQNSA6IFRoaXMgcGFyYW1ldGVyIGNsZWFyIFdha2UgdXAgbGluZSA1IGZsYWcuCiAgICogICAgICAgICAgICBAYXJnIFBXUl9GTEFHX1dLVVA2IDogVGhpcyBwYXJhbWV0ZXIgY2xlYXIgV2FrZSB1cCBsaW5lIDYgZmxhZy4KKyAgKiBAbm90ZSAgIFRoZSBQV1JfRkxBR19XS1VQMyBhbmQgUFdSX0ZMQUdfV0tVUDUgYXJlIGF2YWlsYWJsZSBvbmx5IGZvciBkZXZpY2VzCisgICogICAgICAgICB0aGF0IHN1cHBvcnQgR1BJT0kgcG9ydC4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiAjZGVmaW5lIF9fSEFMX1BXUl9DTEVBUl9XQUtFVVBGTEFHKF9fRkxBR19fKSBTRVRfQklUKFBXUi0+V0tVUENSLCAoX19GTEFHX18pKQpAQCAtNjQwLDQ0ICs2NzcsNDQgQEAKICAgKiBAewogICAqLwogCi0vKiogQGFkZHRvZ3JvdXAgUFdSX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIERlLUluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworLyoqIEBhZGR0b2dyb3VwIFBXUl9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXAxIEluaXRpYWxpemF0aW9uIGFuZCBEZS1Jbml0aWFsaXphdGlvbiBGdW5jdGlvbnMKICAgKiBAewogICAqLwogLyogSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgSEFMX1BXUl9EZUluaXQodm9pZCk7Ci12b2lkIEhBTF9QV1JfRW5hYmxlQmtVcEFjY2Vzcyh2b2lkKTsKLXZvaWQgSEFMX1BXUl9EaXNhYmxlQmtVcEFjY2Vzcyh2b2lkKTsKK3ZvaWQgSEFMX1BXUl9EZUluaXQgICAgICAgICAgICAodm9pZCk7Cit2b2lkIEhBTF9QV1JfRW5hYmxlQmtVcEFjY2VzcyAgKHZvaWQpOwordm9pZCBIQUxfUFdSX0Rpc2FibGVCa1VwQWNjZXNzICh2b2lkKTsKIC8qKgogICAqIEB9CiAgICovCiAKLS8qKiBAYWRkdG9ncm91cCBQV1JfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisvKiogQGFkZHRvZ3JvdXAgUFdSX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDIgUGVyaXBoZXJhbCBDb250cm9sIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCiAvKiBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogUFZEIGNvbmZpZ3VyYXRpb24gKi8KLXZvaWQgSEFMX1BXUl9Db25maWdQVkQoUFdSX1BWRFR5cGVEZWYgKnNDb25maWdQVkQpOwotdm9pZCBIQUxfUFdSX0VuYWJsZVBWRCh2b2lkKTsKLXZvaWQgSEFMX1BXUl9EaXNhYmxlUFZEKHZvaWQpOwordm9pZCBIQUxfUFdSX0NvbmZpZ1BWRCAgKFBXUl9QVkRUeXBlRGVmICpzQ29uZmlnUFZEKTsKK3ZvaWQgSEFMX1BXUl9FbmFibGVQVkQgICh2b2lkKTsKK3ZvaWQgSEFMX1BXUl9EaXNhYmxlUFZEICh2b2lkKTsKIAogLyogV2FrZVVwIHBpbnMgY29uZmlndXJhdGlvbiAqLwotdm9pZCBIQUxfUFdSX0VuYWJsZVdha2VVcFBpbih1aW50MzJfdCBXYWtlVXBQaW5Qb2xhcml0eSk7Ci12b2lkIEhBTF9QV1JfRGlzYWJsZVdha2VVcFBpbih1aW50MzJfdCBXYWtlVXBQaW54KTsKK3ZvaWQgSEFMX1BXUl9FbmFibGVXYWtlVXBQaW4gICh1aW50MzJfdCBXYWtlVXBQaW5Qb2xhcml0eSk7Cit2b2lkIEhBTF9QV1JfRGlzYWJsZVdha2VVcFBpbiAodWludDMyX3QgV2FrZVVwUGlueCk7CiAKIC8qIExvdyBQb3dlciBtb2RlcyBlbnRyeSAqLwotdm9pZCBIQUxfUFdSX0VudGVyU1RPUE1vZGUodWludDMyX3QgUmVndWxhdG9yLCB1aW50OF90IFNUT1BFbnRyeSk7Ci12b2lkIEhBTF9QV1JfRW50ZXJTTEVFUE1vZGUodWludDMyX3QgUmVndWxhdG9yLCB1aW50OF90IFNMRUVQRW50cnkpOwotdm9pZCBIQUxfUFdSX0VudGVyU1RBTkRCWU1vZGUodm9pZCk7Cit2b2lkIEhBTF9QV1JfRW50ZXJTVE9QTW9kZSAgICAodWludDMyX3QgUmVndWxhdG9yLCB1aW50OF90IFNUT1BFbnRyeSk7Cit2b2lkIEhBTF9QV1JfRW50ZXJTTEVFUE1vZGUgICAodWludDMyX3QgUmVndWxhdG9yLCB1aW50OF90IFNMRUVQRW50cnkpOwordm9pZCBIQUxfUFdSX0VudGVyU1RBTkRCWU1vZGUgKHZvaWQpOwogCiAvKiBQb3dlciBQVkQgSVJRIEhhbmRsZXIgKi8KLXZvaWQgSEFMX1BXUl9QVkRfSVJRSGFuZGxlcih2b2lkKTsKLXZvaWQgSEFMX1BXUl9QVkRDYWxsYmFjayh2b2lkKTsKK3ZvaWQgSEFMX1BXUl9QVkRfSVJRSGFuZGxlciAodm9pZCk7Cit2b2lkIEhBTF9QV1JfUFZEQ2FsbGJhY2sgICAgKHZvaWQpOwogCiAvKiBDb3J0ZXggU3lzdGVtIENvbnRyb2wgZnVuY3Rpb25zICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBIQUxfUFdSX0VuYWJsZVNsZWVwT25FeGl0KHZvaWQpOwotdm9pZCBIQUxfUFdSX0Rpc2FibGVTbGVlcE9uRXhpdCh2b2lkKTsKLXZvaWQgSEFMX1BXUl9FbmFibGVTRVZPblBlbmQodm9pZCk7Ci12b2lkIEhBTF9QV1JfRGlzYWJsZVNFVk9uUGVuZCh2b2lkKTsKK3ZvaWQgSEFMX1BXUl9FbmFibGVTbGVlcE9uRXhpdCAgKHZvaWQpOwordm9pZCBIQUxfUFdSX0Rpc2FibGVTbGVlcE9uRXhpdCAodm9pZCk7Cit2b2lkIEhBTF9QV1JfRW5hYmxlU0VWT25QZW5kICAgICh2b2lkKTsKK3ZvaWQgSEFMX1BXUl9EaXNhYmxlU0VWT25QZW5kICAgKHZvaWQpOwogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX3B3cl9leC5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfcHdyX2V4LmgKaW5kZXggMzI4NmRmNy4uNTYzYTg3NSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfcHdyX2V4LmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfcHdyX2V4LmgKQEAgLTQ2LDggKzQ2LDggQEAKIHR5cGVkZWYgc3RydWN0CiB7CiAgIHVpbnQzMl90IEFWRExldmVsOyAvKiE8IEFWRExldmVsIDogU3BlY2lmaWVzIHRoZSBBVkQgZGV0ZWN0aW9uIGxldmVsLiBUaGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFBXUkV4X0FWRF9kZXRlY3Rpb25fbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBXUkV4X0FWRF9kZXRlY3Rpb25fbGV2ZWwKICAgICAgICAgICAgICAgICAgICAgICovCiAKICAgdWludDMyX3QgTW9kZTsgICAgIC8qITwgTW9kZSA6IFNwZWNpZmllcyB0aGUgRVhUSSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIEFWRApAQCAtMTAyLDI1ICsxMDIsMzcgQEAKICAgKi8KIC8qIEhpZ2ggbGV2ZWwgYW5kIE5vIHB1bGwgKGRlZmF1bHQgY29uZmlndXJhdGlvbikgKi8KICNkZWZpbmUgUFdSX1dBS0VVUF9QSU42ICAgICAgUFdSX1dLVVBFUFJfV0tVUEVONgorI2lmIGRlZmluZWQgKFBXUl9XS1VQRVBSX1dLVVBFTjUpCiAjZGVmaW5lIFBXUl9XQUtFVVBfUElONSAgICAgIFBXUl9XS1VQRVBSX1dLVVBFTjUKKyNlbmRpZiAvKiBkZWZpbmVkIChQV1JfV0tVUEVQUl9XS1VQRU41KSAqLwogI2RlZmluZSBQV1JfV0FLRVVQX1BJTjQgICAgICBQV1JfV0tVUEVQUl9XS1VQRU40CisjaWYgZGVmaW5lZCAoUFdSX1dLVVBFUFJfV0tVUEVOMykKICNkZWZpbmUgUFdSX1dBS0VVUF9QSU4zICAgICAgUFdSX1dLVVBFUFJfV0tVUEVOMworI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRVBSX1dLVVBFTjMpICovCiAjZGVmaW5lIFBXUl9XQUtFVVBfUElOMiAgICAgIFBXUl9XS1VQRVBSX1dLVVBFTjIKICNkZWZpbmUgUFdSX1dBS0VVUF9QSU4xICAgICAgUFdSX1dLVVBFUFJfV0tVUEVOMQogCiAvKiBIaWdoIGxldmVsIGFuZCBObyBwdWxsICovCiAjZGVmaW5lIFBXUl9XQUtFVVBfUElONl9ISUdIIFBXUl9XS1VQRVBSX1dLVVBFTjYKKyNpZiBkZWZpbmVkIChQV1JfV0tVUEVQUl9XS1VQRU41KQogI2RlZmluZSBQV1JfV0FLRVVQX1BJTjVfSElHSCBQV1JfV0tVUEVQUl9XS1VQRU41CisjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1dLVVBFUFJfV0tVUEVONSkgKi8KICNkZWZpbmUgUFdSX1dBS0VVUF9QSU40X0hJR0ggUFdSX1dLVVBFUFJfV0tVUEVONAorI2lmIGRlZmluZWQgKFBXUl9XS1VQRVBSX1dLVVBFTjMpCiAjZGVmaW5lIFBXUl9XQUtFVVBfUElOM19ISUdIIFBXUl9XS1VQRVBSX1dLVVBFTjMKKyNlbmRpZiAvKiBkZWZpbmVkIChQV1JfV0tVUEVQUl9XS1VQRU4zKSAqLwogI2RlZmluZSBQV1JfV0FLRVVQX1BJTjJfSElHSCBQV1JfV0tVUEVQUl9XS1VQRU4yCiAjZGVmaW5lIFBXUl9XQUtFVVBfUElOMV9ISUdIIFBXUl9XS1VQRVBSX1dLVVBFTjEKIAogLyogTG93IGxldmVsIGFuZCBObyBwdWxsICovCiAjZGVmaW5lIFBXUl9XQUtFVVBfUElONl9MT1cgIChQV1JfV0tVUEVQUl9XS1VQUDYgfCBQV1JfV0tVUEVQUl9XS1VQRU42KQorI2lmIGRlZmluZWQgKFBXUl9XS1VQRVBSX1dLVVBQNSkKICNkZWZpbmUgUFdSX1dBS0VVUF9QSU41X0xPVyAgKFBXUl9XS1VQRVBSX1dLVVBQNSB8IFBXUl9XS1VQRVBSX1dLVVBFTjUpCisjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1dLVVBFUFJfV0tVUFA1KSAqLwogI2RlZmluZSBQV1JfV0FLRVVQX1BJTjRfTE9XICAoUFdSX1dLVVBFUFJfV0tVUFA0IHwgUFdSX1dLVVBFUFJfV0tVUEVONCkKKyNpZiBkZWZpbmVkIChQV1JfV0tVUEVQUl9XS1VQUDMpCiAjZGVmaW5lIFBXUl9XQUtFVVBfUElOM19MT1cgIChQV1JfV0tVUEVQUl9XS1VQUDMgfCBQV1JfV0tVUEVQUl9XS1VQRU4zKQorI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRVBSX1dLVVBQMykgKi8KICNkZWZpbmUgUFdSX1dBS0VVUF9QSU4yX0xPVyAgKFBXUl9XS1VQRVBSX1dLVVBQMiB8IFBXUl9XS1VQRVBSX1dLVVBFTjIpCiAjZGVmaW5lIFBXUl9XQUtFVVBfUElOMV9MT1cgIChQV1JfV0tVUEVQUl9XS1VQUDEgfCBQV1JfV0tVUEVQUl9XS1VQRU4xKQogLyoqCkBAIC0xNTEsMTMgKzE2MywyMiBAQAogICAqLwogI2RlZmluZSBQV1JfV0FLRVVQX0ZMQUcxIFBXUl9XS1VQRlJfV0tVUEYxIC8qITwgV2FrZXVwIGZsYWcgb24gUEEwICAqLwogI2RlZmluZSBQV1JfV0FLRVVQX0ZMQUcyIFBXUl9XS1VQRlJfV0tVUEYyIC8qITwgV2FrZXVwIGZsYWcgb24gUEEyICAqLworI2lmIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEYzKQogI2RlZmluZSBQV1JfV0FLRVVQX0ZMQUczIFBXUl9XS1VQRlJfV0tVUEYzIC8qITwgV2FrZXVwIGZsYWcgb24gUEk4ICAqLworI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEYzKSAqLwogI2RlZmluZSBQV1JfV0FLRVVQX0ZMQUc0IFBXUl9XS1VQRlJfV0tVUEY0IC8qITwgV2FrZXVwIGZsYWcgb24gUEMxMyAqLworI2lmIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEY1KQogI2RlZmluZSBQV1JfV0FLRVVQX0ZMQUc1IFBXUl9XS1VQRlJfV0tVUEY1IC8qITwgV2FrZXVwIGZsYWcgb24gUEkxMSAqLworI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEY1KSAqLwogI2RlZmluZSBQV1JfV0FLRVVQX0ZMQUc2IFBXUl9XS1VQRlJfV0tVUEY2IC8qITwgV2FrZXVwIGZsYWcgb24gUEMxICAqLworI2lmIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEYzKQogI2RlZmluZSBQV1JfV0FLRVVQX0ZMQUdfQUxMIChQV1JfV0tVUEZSX1dLVVBGMSB8IFBXUl9XS1VQRlJfV0tVUEYyIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBXUl9XS1VQRlJfV0tVUEYzIHwgUFdSX1dLVVBGUl9XS1VQRjQgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdSX1dLVVBGUl9XS1VQRjUgfCBQV1JfV0tVUEZSX1dLVVBGNikKKyNlbHNlCisjZGVmaW5lIFBXUl9XQUtFVVBfRkxBR19BTEwgKFBXUl9XS1VQRlJfV0tVUEYxIHwgUFdSX1dLVVBGUl9XS1VQRjIgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFdSX1dLVVBGUl9XS1VQRjQgfCBQV1JfV0tVUEZSX1dLVVBGNikKKyNlbmRpZiAvKiBkZWZpbmVkIChQV1JfV0tVUEZSX1dLVVBGMykgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC00ODYsMTIgKzUwNywxMiBAQAogLyoqIEBhZGR0b2dyb3VwIFBXUkV4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgUG93ZXIgU3VwcGx5IENvbnRyb2wgRnVuY3Rpb25zCiAgICogQHsKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QV1JFeF9Db25maWdTdXBwbHkodWludDMyX3QgU3VwcGx5U291cmNlKTsKLXVpbnQzMl90IEhBTF9QV1JFeF9HZXRTdXBwbHlDb25maWcodm9pZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUFdSRXhfQ29udHJvbFZvbHRhZ2VTY2FsaW5nKHVpbnQzMl90IFZvbHRhZ2VTY2FsaW5nKTsKLXVpbnQzMl90IEhBTF9QV1JFeF9HZXRWb2x0YWdlUmFuZ2Uodm9pZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUFdSRXhfQ29udHJvbFN0b3BNb2RlVm9sdGFnZVNjYWxpbmcodWludDMyX3QgVm9sdGFnZVNjYWxpbmcpOwotdWludDMyX3QgSEFMX1BXUkV4X0dldFN0b3BNb2RlVm9sdGFnZVJhbmdlKHZvaWQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BXUkV4X0NvbmZpZ1N1cHBseSAgICAgICAgICAgICAgICAgICh1aW50MzJfdCBTdXBwbHlTb3VyY2UpOwordWludDMyX3QgICAgICAgICAgSEFMX1BXUkV4X0dldFN1cHBseUNvbmZpZyAgICAgICAgICAgICAgICh2b2lkKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QV1JFeF9Db250cm9sVm9sdGFnZVNjYWxpbmcgICAgICAgICAodWludDMyX3QgVm9sdGFnZVNjYWxpbmcpOwordWludDMyX3QgICAgICAgICAgSEFMX1BXUkV4X0dldFZvbHRhZ2VSYW5nZSAgICAgICAgICAgICAgICh2b2lkKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QV1JFeF9Db250cm9sU3RvcE1vZGVWb2x0YWdlU2NhbGluZyAodWludDMyX3QgVm9sdGFnZVNjYWxpbmcpOwordWludDMyX3QgICAgICAgICAgSEFMX1BXUkV4X0dldFN0b3BNb2RlVm9sdGFnZVJhbmdlICAgICAgICh2b2lkKTsKIC8qKgogICAqIEB9CiAgICovCkBAIC01MDEsNjMgKzUyMiw2NyBAQAogICAqLwogLyogU3lzdGVtIGxvdyBwb3dlciBjb250cm9sIGZ1bmN0aW9ucyAqLwogI2lmIGRlZmluZWQgKFBXUl9DUFVDUl9SRVREU19DRCkKLXZvaWQgSEFMX1BXUkV4X0VudGVyU1RPUDJNb2RlKHVpbnQzMl90IFJlZ3VsYXRvciwgdWludDhfdCBTVE9QRW50cnkpOwordm9pZCBIQUxfUFdSRXhfRW50ZXJTVE9QMk1vZGUgICAgKHVpbnQzMl90IFJlZ3VsYXRvciwgdWludDhfdCBTVE9QRW50cnkpOwogI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9DUFVDUl9SRVREU19DRCkgKi8KLXZvaWQgSEFMX1BXUkV4X0VudGVyU1RPUE1vZGUodWludDMyX3QgUmVndWxhdG9yLCB1aW50OF90IFNUT1BFbnRyeSwgdWludDMyX3QgRG9tYWluKTsKLXZvaWQgSEFMX1BXUkV4X0VudGVyU1RBTkRCWU1vZGUodWludDMyX3QgRG9tYWluKTsKLXZvaWQgSEFMX1BXUkV4X0NvbmZpZ0QzRG9tYWluKHVpbnQzMl90IEQzU3RhdGUpOwordm9pZCBIQUxfUFdSRXhfRW50ZXJTVE9QTW9kZSAgICAgKHVpbnQzMl90IFJlZ3VsYXRvciwgdWludDhfdCBTVE9QRW50cnksIHVpbnQzMl90IERvbWFpbik7Cit2b2lkIEhBTF9QV1JFeF9FbnRlclNUQU5EQllNb2RlICAodWludDMyX3QgRG9tYWluKTsKK3ZvaWQgSEFMX1BXUkV4X0NvbmZpZ0QzRG9tYWluICAgICh1aW50MzJfdCBEM1N0YXRlKTsKIC8qIENsZWFyIENvcnRleC1NeCBwZW5kaW5nIGZsYWcgKi8KLXZvaWQgSEFMX1BXUkV4X0NsZWFyUGVuZGluZ0V2ZW50KHZvaWQpOwordm9pZCBIQUxfUFdSRXhfQ2xlYXJQZW5kaW5nRXZlbnQgKHZvaWQpOwogI2lmIGRlZmluZWQgKERVQUxfQ09SRSkKIC8qIENsZWFyIGRvbWFpbiBmbGFncyAqLwotdm9pZCBIQUxfUFdSRXhfQ2xlYXJEb21haW5GbGFncyh1aW50MzJfdCBEb21haW5GbGFncyk7Cit2b2lkIEhBTF9QV1JFeF9DbGVhckRvbWFpbkZsYWdzICh1aW50MzJfdCBEb21haW5GbGFncyk7CiAvKiBDb3JlIEhvbGQvUmVsZWFzZSBmdW5jdGlvbnMgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QV1JFeF9Ib2xkQ29yZSh1aW50MzJfdCBDUFUpOwotdm9pZCBIQUxfUFdSRXhfUmVsZWFzZUNvcmUodWludDMyX3QgQ1BVKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9QV1JFeF9Ib2xkQ29yZSAgICAodWludDMyX3QgQ1BVKTsKK3ZvaWQgICAgICAgICAgICAgIEhBTF9QV1JFeF9SZWxlYXNlQ29yZSAodWludDMyX3QgQ1BVKTsKICNlbmRpZiAvKiBkZWZpbmVkIChEVUFMX0NPUkUpICovCiAvKiBGbGFzaCBsb3cgcG93ZXIgY29udHJvbCBmdW5jdGlvbnMgKi8KLXZvaWQgSEFMX1BXUkV4X0VuYWJsZUZsYXNoUG93ZXJEb3duKHZvaWQpOwotdm9pZCBIQUxfUFdSRXhfRGlzYWJsZUZsYXNoUG93ZXJEb3duKHZvaWQpOwordm9pZCBIQUxfUFdSRXhfRW5hYmxlRmxhc2hQb3dlckRvd24gICh2b2lkKTsKK3ZvaWQgSEFMX1BXUkV4X0Rpc2FibGVGbGFzaFBvd2VyRG93biAodm9pZCk7CiAjaWYgZGVmaW5lZCAoUFdSX0NSMV9TUkRSQU1TTykKIC8qIE1lbW9yeSBzaHV0LW9mZiBmdW5jdGlvbnMgKi8KLXZvaWQgSEFMX1BXUkV4X0VuYWJsZU1lbW9yeVNodXRPZmYodWludDMyX3QgTWVtb3J5QmxvY2spOwotdm9pZCBIQUxfUFdSRXhfRGlzYWJsZU1lbW9yeVNodXRPZmYodWludDMyX3QgTWVtb3J5QmxvY2spOwordm9pZCBIQUxfUFdSRXhfRW5hYmxlTWVtb3J5U2h1dE9mZiAgKHVpbnQzMl90IE1lbW9yeUJsb2NrKTsKK3ZvaWQgSEFMX1BXUkV4X0Rpc2FibGVNZW1vcnlTaHV0T2ZmICh1aW50MzJfdCBNZW1vcnlCbG9jayk7CiAjZW5kaWYgLyogZGVmaW5lZChQV1JfQ1IxX1NSRFJBTVNPKSAqLwogLyogV2FrZXVwIFBpbnMgY29udHJvbCBmdW5jdGlvbnMgKi8KLXZvaWQgSEFMX1BXUkV4X0VuYWJsZVdha2VVcFBpbihQV1JFeF9XYWtldXBQaW5UeXBlRGVmICpzUGluUGFyYW1zKTsKLXZvaWQgSEFMX1BXUkV4X0Rpc2FibGVXYWtlVXBQaW4odWludDMyX3QgV2FrZVVwUGluKTsKLXVpbnQzMl90IEhBTF9QV1JFeF9HZXRXYWtldXBGbGFnKHVpbnQzMl90IFdha2VVcEZsYWcpOwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BXUkV4X0NsZWFyV2FrZXVwRmxhZyh1aW50MzJfdCBXYWtlVXBGbGFnKTsKK3ZvaWQgSEFMX1BXUkV4X0VuYWJsZVdha2VVcFBpbiAgICAgICAgICAgICAgKFBXUkV4X1dha2V1cFBpblR5cGVEZWYgKnNQaW5QYXJhbXMpOwordm9pZCBIQUxfUFdSRXhfRGlzYWJsZVdha2VVcFBpbiAgICAgICAgICAgICAodWludDMyX3QgV2FrZVVwUGluKTsKK3VpbnQzMl90IEhBTF9QV1JFeF9HZXRXYWtldXBGbGFnICAgICAgICAgICAgKHVpbnQzMl90IFdha2VVcEZsYWcpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BXUkV4X0NsZWFyV2FrZXVwRmxhZyAodWludDMyX3QgV2FrZVVwRmxhZyk7CiAvKiBQb3dlciBXYWtldXAgUElOIElSUSBIYW5kbGVyICovCi12b2lkIEhBTF9QV1JFeF9XQUtFVVBfUElOX0lSUUhhbmRsZXIodm9pZCk7Ci12b2lkIEhBTF9QV1JFeF9XS1VQMV9DYWxsYmFjayh2b2lkKTsKLXZvaWQgSEFMX1BXUkV4X1dLVVAyX0NhbGxiYWNrKHZvaWQpOwotdm9pZCBIQUxfUFdSRXhfV0tVUDNfQ2FsbGJhY2sodm9pZCk7Ci12b2lkIEhBTF9QV1JFeF9XS1VQNF9DYWxsYmFjayh2b2lkKTsKLXZvaWQgSEFMX1BXUkV4X1dLVVA1X0NhbGxiYWNrKHZvaWQpOwotdm9pZCBIQUxfUFdSRXhfV0tVUDZfQ2FsbGJhY2sodm9pZCk7Cit2b2lkIEhBTF9QV1JFeF9XQUtFVVBfUElOX0lSUUhhbmRsZXIgKHZvaWQpOwordm9pZCBIQUxfUFdSRXhfV0tVUDFfQ2FsbGJhY2sgICAgICAgICh2b2lkKTsKK3ZvaWQgSEFMX1BXUkV4X1dLVVAyX0NhbGxiYWNrICAgICAgICAodm9pZCk7CisjaWYgZGVmaW5lZCAoUFdSX1dLVVBFUFJfV0tVUEVOMykKK3ZvaWQgSEFMX1BXUkV4X1dLVVAzX0NhbGxiYWNrICAgICAgICAodm9pZCk7CisjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1dLVVBFUFJfV0tVUEVOMykgKi8KK3ZvaWQgSEFMX1BXUkV4X1dLVVA0X0NhbGxiYWNrICAgICAgICAodm9pZCk7CisjaWYgZGVmaW5lZCAoUFdSX1dLVVBFUFJfV0tVUEVONSkKK3ZvaWQgSEFMX1BXUkV4X1dLVVA1X0NhbGxiYWNrICAgICAgICAodm9pZCk7CisjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1dLVVBFUFJfV0tVUEVONSkgKi8KK3ZvaWQgSEFMX1BXUkV4X1dLVVA2X0NhbGxiYWNrICAgICAgICAodm9pZCk7CiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGFkZHRvZ3JvdXAgUFdSRXhfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMyBQZXJpcGhlcmFscyBDb250cm9sIEZ1bmN0aW9ucworLyoqIEBhZGR0b2dyb3VwIFBXUkV4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgUGVyaXBoZXJhbHMgY29udHJvbCBmdW5jdGlvbnMKICAgKiBAewogICAqLwogLyogQmFja3VwIHJlZ3VsYXRvciBjb250cm9sIGZ1bmN0aW9ucyAqLwotSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BXUkV4X0VuYWJsZUJrVXBSZWcodm9pZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUFdSRXhfRGlzYWJsZUJrVXBSZWcodm9pZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUFdSRXhfRW5hYmxlQmtVcFJlZyAgKHZvaWQpOworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1BXUkV4X0Rpc2FibGVCa1VwUmVnICh2b2lkKTsKIC8qIFVTQiByZWd1bGF0b3IgY29udHJvbCBmdW5jdGlvbnMgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QV1JFeF9FbmFibGVVU0JSZWcodm9pZCk7Ci1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUFdSRXhfRGlzYWJsZVVTQlJlZyh2b2lkKTsKLXZvaWQgSEFMX1BXUkV4X0VuYWJsZVVTQlZvbHRhZ2VEZXRlY3Rvcih2b2lkKTsKLXZvaWQgSEFMX1BXUkV4X0Rpc2FibGVVU0JWb2x0YWdlRGV0ZWN0b3Iodm9pZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUFdSRXhfRW5hYmxlVVNCUmVnICAodm9pZCk7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUFdSRXhfRGlzYWJsZVVTQlJlZyAodm9pZCk7Cit2b2lkIEhBTF9QV1JFeF9FbmFibGVVU0JWb2x0YWdlRGV0ZWN0b3IgICAodm9pZCk7Cit2b2lkIEhBTF9QV1JFeF9EaXNhYmxlVVNCVm9sdGFnZURldGVjdG9yICAodm9pZCk7CiAvKiBCYXR0ZXJ5IGNvbnRyb2wgZnVuY3Rpb25zICovCi12b2lkIEhBTF9QV1JFeF9FbmFibGVCYXR0ZXJ5Q2hhcmdpbmcodWludDMyX3QgUmVzaXN0b3JWYWx1ZSk7Ci12b2lkIEhBTF9QV1JFeF9EaXNhYmxlQmF0dGVyeUNoYXJnaW5nKHZvaWQpOwotI2lmIGRlZmluZWQoUFdSX0NSMV9CT09TVEUpCit2b2lkIEhBTF9QV1JFeF9FbmFibGVCYXR0ZXJ5Q2hhcmdpbmcgICh1aW50MzJfdCBSZXNpc3RvclZhbHVlKTsKK3ZvaWQgSEFMX1BXUkV4X0Rpc2FibGVCYXR0ZXJ5Q2hhcmdpbmcgKHZvaWQpOworI2lmIGRlZmluZWQgKFBXUl9DUjFfQk9PU1RFKQogLyogQW5hbG9nIEJvb3N0ZXIgZnVuY3Rpb25zICovCi12b2lkIEhBTF9QV1JFeF9FbmFibGVBbmFsb2dCb29zdGVyKHZvaWQpOwotdm9pZCBIQUxfUFdSRXhfRGlzYWJsZUFuYWxvZ0Jvb3N0ZXIodm9pZCk7Cit2b2lkIEhBTF9QV1JFeF9FbmFibGVBbmFsb2dCb29zdGVyICAodm9pZCk7Cit2b2lkIEhBTF9QV1JFeF9EaXNhYmxlQW5hbG9nQm9vc3RlciAodm9pZCk7CiAjZW5kaWYgLyogUFdSX0NSMV9CT09TVEUgKi8KIC8qKgogICAqIEB9CkBAIC01NjcsMjAgKzU5MiwyMCBAQAogICAqIEB7CiAgICovCiAvKiBQb3dlciBWQkFUL1RlbXBlcmF0dXJlIG1vbml0b3JpbmcgZnVuY3Rpb25zICovCi12b2lkIEhBTF9QV1JFeF9FbmFibGVNb25pdG9yaW5nKHZvaWQpOwotdm9pZCBIQUxfUFdSRXhfRGlzYWJsZU1vbml0b3Jpbmcodm9pZCk7Ci11aW50MzJfdCBIQUxfUFdSRXhfR2V0VGVtcGVyYXR1cmVMZXZlbCh2b2lkKTsKLXVpbnQzMl90IEhBTF9QV1JFeF9HZXRWQkFUTGV2ZWwodm9pZCk7Ci0jaWYgZGVmaW5lZChQV1JfQ1NSMV9NTUNWRE8pCi1QV1JFeF9NTUNfVm9sdGFnZUxldmVsIEhBTF9QV1JFeF9HZXRNTUNWb2x0YWdlKHZvaWQpOwordm9pZCBIQUxfUFdSRXhfRW5hYmxlTW9uaXRvcmluZyAgICAgICAgKHZvaWQpOwordm9pZCBIQUxfUFdSRXhfRGlzYWJsZU1vbml0b3JpbmcgICAgICAgKHZvaWQpOwordWludDMyX3QgSEFMX1BXUkV4X0dldFRlbXBlcmF0dXJlTGV2ZWwgKHZvaWQpOwordWludDMyX3QgSEFMX1BXUkV4X0dldFZCQVRMZXZlbCAgICAgICAgKHZvaWQpOworI2lmIGRlZmluZWQgKFBXUl9DU1IxX01NQ1ZETykKK1BXUkV4X01NQ19Wb2x0YWdlTGV2ZWwgSEFMX1BXUkV4X0dldE1NQ1ZvbHRhZ2UgKHZvaWQpOwogI2VuZGlmIC8qIFBXUl9DU1IxX01NQ1ZETyAqLwogLyogUG93ZXIgQVZEIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICovCi12b2lkIEhBTF9QV1JFeF9Db25maWdBVkQoUFdSRXhfQVZEVHlwZURlZiAqc0NvbmZpZ0FWRCk7Ci12b2lkIEhBTF9QV1JFeF9FbmFibGVBVkQodm9pZCk7Ci12b2lkIEhBTF9QV1JFeF9EaXNhYmxlQVZEKHZvaWQpOwordm9pZCBIQUxfUFdSRXhfQ29uZmlnQVZEICAoUFdSRXhfQVZEVHlwZURlZiAqc0NvbmZpZ0FWRCk7Cit2b2lkIEhBTF9QV1JFeF9FbmFibGVBVkQgICh2b2lkKTsKK3ZvaWQgSEFMX1BXUkV4X0Rpc2FibGVBVkQgKHZvaWQpOwogLyogUG93ZXIgUFZEL0FWRCBJUlEgSGFuZGxlciAqLwotdm9pZCBIQUxfUFdSRXhfUFZEX0FWRF9JUlFIYW5kbGVyKHZvaWQpOwotdm9pZCBIQUxfUFdSRXhfQVZEQ2FsbGJhY2sodm9pZCk7Cit2b2lkIEhBTF9QV1JFeF9QVkRfQVZEX0lSUUhhbmRsZXIgKHZvaWQpOwordm9pZCBIQUxfUFdSRXhfQVZEQ2FsbGJhY2sgICAgICAgICh2b2lkKTsKIC8qKgogICAqIEB9CiAgICovCkBAIC02MzYsNiArNjYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBQV1JfRDNfRE9NQUlOX1JVTikpCiAKIC8qIENoZWNrIHdha2UgdXAgcGluIHBhcmFtZXRlciAqLworI2lmIGRlZmluZWQgKFBXUl9XS1VQRVBSX1dLVVBFTjMpCiAjZGVmaW5lIElTX1BXUl9XQUtFVVBfUElOKFBJTikgKCgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjEpICAgICAgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjIpICAgICAgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjMpICAgICAgfHxcCkBAIC02NTQsNiArNjgwLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjRfTE9XKSAgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjVfTE9XKSAgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjZfTE9XKSkKKyNlbHNlCisjZGVmaW5lIElTX1BXUl9XQUtFVVBfUElOKFBJTikgKCgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjEpICAgICAgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjIpICAgICAgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjQpICAgICAgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjYpICAgICAgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjFfSElHSCkgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjJfSElHSCkgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjRfSElHSCkgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjZfSElHSCkgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjFfTE9XKSAgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjJfTE9XKSAgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjRfTE9XKSAgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUElOKSA9PSBQV1JfV0FLRVVQX1BJTjZfTE9XKSkKKyNlbmRpZiAvKiBkZWZpbmVkIChQV1JfV0tVUEVQUl9XS1VQRU4zKSAqLwogCiAvKiBDaGVjayB3YWtlIHVwIHBpbiBwb2xhcml0eSBwYXJhbWV0ZXIgKi8KICNkZWZpbmUgSVNfUFdSX1dBS0VVUF9QSU5fUE9MQVJJVFkoUE9MQVJJVFkpICgoKFBPTEFSSVRZKSA9PSBQV1JfUElOX1BPTEFSSVRZX0hJR0gpIHx8XApAQCAtNjY1LDYgKzcwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUFVMTCkgPT0gUFdSX1BJTl9QVUxMX0RPV04pKQogCiAvKiBDaGVjayB3YWtlIHVwIGZsYWcgcGFyYW1ldGVyICovCisjaWYgZGVmaW5lZCAoUFdSX1dLVVBFUFJfV0tVUEVOMykKICNkZWZpbmUgSVNfUFdSX1dBS0VVUF9GTEFHKEZMQUcpICgoKEZMQUcpID09IFBXUl9XQUtFVVBfRkxBRzEpIHx8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gUFdSX1dBS0VVUF9GTEFHMikgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBQV1JfV0FLRVVQX0ZMQUczKSB8fFwKQEAgLTY3Miw2ICs3MTMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFBXUl9XQUtFVVBfRkxBRzUpIHx8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gUFdSX1dBS0VVUF9GTEFHNikgfHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBQV1JfV0FLRVVQX0ZMQUdfQUxMKSkKKyNlbHNlCisjZGVmaW5lIElTX1BXUl9XQUtFVVBfRkxBRyhGTEFHKSAoKChGTEFHKSA9PSBQV1JfV0FLRVVQX0ZMQUcxKSB8fFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFBXUl9XQUtFVVBfRkxBRzIpIHx8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkxBRykgPT0gUFdSX1dBS0VVUF9GTEFHNCkgfHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBQV1JfV0FLRVVQX0ZMQUc2KSB8fFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZMQUcpID09IFBXUl9XQUtFVVBfRkxBR19BTEwpKQorI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRVBSX1dLVVBFTjMpICovCiAKIC8qIENoZWNrIHdha2UgdXAgZmxhZyBwYXJhbWV0ZXIgKi8KICNkZWZpbmUgSVNfUFdSX0FWRF9MRVZFTChMRVZFTCkgKCgoTEVWRUwpID09IFBXUl9BVkRMRVZFTF8wKSB8fFwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX3JjYy5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfcmNjLmgKaW5kZXggZGMzNjBiMC4uZjRkODk2ZCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfcmNjLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfcmNjLmgKQEAgLTIxMSwxMSArMjExLDcgQEAKICNkZWZpbmUgUkNDX0hTSV9ESVY4ICAgICAgICAgICAgICAgICAgICAgKFJDQ19DUl9IU0lESVYgfCBSQ0NfQ1JfSFNJT04pICAgLyohPCBIU0lfRElWOCBjbG9jayBhY3RpdmF0aW9uICovCiAKIAotI2lmIGRlZmluZWQoUkNDX0hTSUNGR1JfSFNJVFJJTV82KQotI2RlZmluZSBSQ0NfSFNJQ0FMSUJSQVRJT05fREVGQVVMVCAgICAgKDB4NDBVKSAgICAgICAgIC8qIERlZmF1bHQgSFNJIGNhbGlicmF0aW9uIHRyaW1taW5nIHZhbHVlLCBmb3IgU1RNMzJINyByZXYuViBhbmQgYWJvdmUgICovCi0jZWxzZQotI2RlZmluZSBSQ0NfSFNJQ0FMSUJSQVRJT05fREVGQVVMVCAgICAgKDB4MjBVKSAgICAgICAgIC8qIERlZmF1bHQgSFNJIGNhbGlicmF0aW9uIHRyaW1taW5nIHZhbHVlLCBmb3IgU1RNMzJINyByZXYuWSAqLwotI2VuZGlmCisjZGVmaW5lIFJDQ19IU0lDQUxJQlJBVElPTl9ERUZBVUxUICAgICAgICgweDQwVSkgICAgICAgICAvKiBEZWZhdWx0IEhTSSBjYWxpYnJhdGlvbiB0cmltbWluZyB2YWx1ZSBmb3IgU1RNMzJINyByZXYuViBhbmQgYWJvdmUuICgweDIwIHZhbHVlIGZvciByZXYuWSBoYW5kbGVkIHdpdGhpbiBfX0hBTF9SQ0NfSFNJX0NBTElCUkFUSU9OVkFMVUVfQURKVVNUIG1hY3JvICkgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0yNDYsMTEgKzI0Miw3IEBACiAjZGVmaW5lIFJDQ19DU0lfT0ZGICAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMFUpCiAjZGVmaW5lIFJDQ19DU0lfT04gICAgICAgICAgICAgICAgICAgICBSQ0NfQ1JfQ1NJT04KIAotI2lmIGRlZmluZWQoUkNDX0NTSUNGR1JfQ1NJVFJJTV81KQotI2RlZmluZSBSQ0NfQ1NJQ0FMSUJSQVRJT05fREVGQVVMVCAgICAgKDB4MjBVKSAgICAgICAgIC8qIERlZmF1bHQgQ1NJIGNhbGlicmF0aW9uIHRyaW1taW5nIHZhbHVlICovCi0jZWxzZQotI2RlZmluZSBSQ0NfQ1NJQ0FMSUJSQVRJT05fREVGQVVMVCAgICAgKDB4MTBVKSAgICAgICAgIC8qIERlZmF1bHQgQ1NJIGNhbGlicmF0aW9uIHRyaW1taW5nIHZhbHVlICovCi0jZW5kaWYgLyogUkNDX0NTSUNGR1JfQ1NJVFJJTV81ICovCisjZGVmaW5lIFJDQ19DU0lDQUxJQlJBVElPTl9ERUZBVUxUICAgICAoMHgyMFUpICAgICAgICAgLyogRGVmYXVsdCBDU0kgY2FsaWJyYXRpb24gdHJpbW1pbmcgdmFsdWUgZm9yIFNUTTMySDcgcmV2LlYgYW5kIGFib3ZlLiAoMHgxMCB2YWx1ZSBmb3IgcmV2LlkgaGFuZGxlZCB3aXRoaW4gX19IQUxfUkNDX0NTSV9DQUxJQlJBVElPTlZBTFVFX0FESlVTVCBtYWNybyApICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTIxMiw2ICsxMjA0LDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAorI2lmIGRlZmluZWQoRk1BQykKKyNkZWZpbmUgX19IQUxfUkNDX0ZNQUNfQ0xLX0VOQUJMRSgpICAgZG8geyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfRk1BQ0VOKTtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfRk1BQ0VOKTtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyNlbmRpZiAvKiBGTUFDICovCisgICAgCisjaWYgZGVmaW5lZChDT1JESUMpCisjZGVmaW5lIF9fSEFMX1JDQ19DT1JESUNfQ0xLX0VOQUJMRSgpICAgZG8geyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QUhCMkVOUiwgUkNDX0FIQjJFTlJfQ09SRElDRU4pO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BSEIyRU5SLCBSQ0NfQUhCMkVOUl9DT1JESUNFTik7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisjZW5kaWYgLyogQ09SRElDICovCisKICNpZiBkZWZpbmVkKFJDQ19BSEIyRU5SX0QyU1JBTTFFTikKICNkZWZpbmUgX19IQUxfUkNDX0QyU1JBTTFfQ0xLX0VOQUJMRSgpICAgZG8geyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKQEAgLTEyOTIsNiArMTMwNCwxMiBAQAogI2VuZGlmIC8qIEhBU0ggKi8KICNkZWZpbmUgX19IQUxfUkNDX1JOR19DTEtfRElTQUJMRSgpICAgICAgICAgICAgICAoUkNDLT5BSEIyRU5SICY9IH4gKFJDQ19BSEIyRU5SX1JOR0VOKSkKICNkZWZpbmUgX19IQUxfUkNDX1NETU1DMl9DTEtfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BSEIyRU5SICY9IH4gKFJDQ19BSEIyRU5SX1NETU1DMkVOKSkKKyNpZiBkZWZpbmVkKEZNQUMpCisjZGVmaW5lIF9fSEFMX1JDQ19GTUFDX0NMS19ESVNBQkxFKCkgICAgICAgICAgICAgKFJDQy0+QUhCMkVOUiAmPSB+IChSQ0NfQUhCMkVOUl9GTUFDRU4pKQorI2VuZGlmIC8qIEZNQUMgKi8KKyNpZiBkZWZpbmVkKENPUkRJQykKKyNkZWZpbmUgX19IQUxfUkNDX0NPUkRJQ19DTEtfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BSEIyRU5SICY9IH4gKFJDQ19BSEIyRU5SX0NPUkRJQ0VOKSkKKyNlbmRpZiAvKiBDT1JESUMgKi8KICNpZiBkZWZpbmVkKFJDQ19BSEIyRU5SX0QyU1JBTTFFTikKICNkZWZpbmUgX19IQUxfUkNDX0QyU1JBTTFfQ0xLX0RJU0FCTEUoKSAgICAgICAgICAoUkNDLT5BSEIyRU5SICY9IH4gKFJDQ19BSEIyRU5SX0QyU1JBTTFFTikpCiAjZWxzZQpAQCAtMTMzMiw2ICsxMzUwLDEyIEBACiAjZW5kaWYgLyogSEFTSCAqLwogI2RlZmluZSBfX0hBTF9SQ0NfUk5HX0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICAgICAoKFJDQy0+QUhCMkVOUiAmIFJDQ19BSEIyRU5SX1JOR0VOKSAgICAgIT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19TRE1NQzJfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BSEIyRU5SICYgUkNDX0FIQjJFTlJfU0RNTUMyRU4pICAhPSAwVSkKKyNpZiBkZWZpbmVkKEZNQUMpCisjZGVmaW5lIF9fSEFMX1JDQ19GTUFDX0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICAgICgoUkNDLT5BSEIyRU5SICYgUkNDX0FIQjJFTlJfRk1BQ0VOKSAgIT0gMFUpCisjZW5kaWYgLyogRk1BQyAqLworI2lmIGRlZmluZWQoQ09SRElDKQorI2RlZmluZSBfX0hBTF9SQ0NfQ09SRElDX0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QUhCMkVOUiAmIFJDQ19BSEIyRU5SX0NPUkRJQ0VOKSAgIT0gMFUpCisjZW5kaWYgLyogQ09SRElDICovCiAjaWYgZGVmaW5lZChSQ0NfQUhCMkVOUl9EMlNSQU0xRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19EMlNSQU0xX0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICgoUkNDLT5BSEIyRU5SICYgUkNDX0FIQjJFTlJfRDJTUkFNMUVOKSAhPSAwVSkKICNlbHNlCkBAIC0xMzY2LDYgKzEzOTAsMTIgQEAKICNlbmRpZiAvKiBIQVNIICovCiAjZGVmaW5lIF9fSEFMX1JDQ19STkdfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgICAgICgoUkNDLT5BSEIyRU5SICYgUkNDX0FIQjJFTlJfUk5HRU4pICAgICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX1NETU1DMl9JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFIQjJFTlIgJiBSQ0NfQUhCMkVOUl9TRE1NQzJFTikgID09IDBVKQorI2lmIGRlZmluZWQoRk1BQykKKyNkZWZpbmUgX19IQUxfUkNDX0ZNQUNfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgICAgKChSQ0MtPkFIQjJFTlIgJiBSQ0NfQUhCMkVOUl9GTUFDRU4pICA9PSAwVSkKKyNlbmRpZiAvKiBGTUFDICovCisjaWYgZGVmaW5lZChDT1JESUMpCisjZGVmaW5lIF9fSEFMX1JDQ19DT1JESUNfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BSEIyRU5SICYgUkNDX0FIQjJFTlJfQ09SRElDRU4pICA9PSAwVSkKKyNlbmRpZiAvKiBDT1JESUMgKi8KICNpZiBkZWZpbmVkKFJDQ19BSEIyRU5SX0QyU1JBTTFFTikKICNkZWZpbmUgX19IQUxfUkNDX0QyU1JBTTFfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgKChSQ0MtPkFIQjJFTlIgJiBSQ0NfQUhCMkVOUl9EMlNSQU0xRU4pID09IDBVKQogI2Vsc2UKQEAgLTE0NTYsNiArMTQ4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKIAorI2lmIGRlZmluZWQoR1BJT0kpCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPSV9DTEtfRU5BQkxFKCkgICBkbyB7IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BSEI0RU5SLCBSQ0NfQUhCNEVOUl9HUElPSUVOKTtcCkBAIC0xNDYzLDYgKzE0OTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QUhCNEVOUiwgUkNDX0FIQjRFTlJfR1BJT0lFTik7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisjZW5kaWYgLyogR1BJT0kgKi8KIAogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0pfQ0xLX0VOQUJMRSgpICAgZG8geyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKQEAgLTE1NTcsNyArMTU4OSw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPRl9DTEtfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BSEI0RU5SKSAmPSB+IChSQ0NfQUhCNEVOUl9HUElPRkVOKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0dfQ0xLX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QUhCNEVOUikgJj0gfiAoUkNDX0FIQjRFTlJfR1BJT0dFTikKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9IX0NMS19ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFIQjRFTlIpICY9IH4gKFJDQ19BSEI0RU5SX0dQSU9IRU4pCisjaWYgZGVmaW5lZChHUElPSSkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9JX0NMS19ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFIQjRFTlIpICY9IH4gKFJDQ19BSEI0RU5SX0dQSU9JRU4pCisjZW5kaWYgLyogR1BJT0kgKi8KICNkZWZpbmUgX19IQUxfUkNDX0dQSU9KX0NMS19ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFIQjRFTlIpICY9IH4gKFJDQ19BSEI0RU5SX0dQSU9KRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPS19DTEtfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BSEI0RU5SKSAmPSB+IChSQ0NfQUhCNEVOUl9HUElPS0VOKQogI2lmIGRlZmluZWQoUkNDX0FIQjRFTlJfQ1JDRU4pCkBAIC0xNTk1LDcgKzE2MjksOSBAQAogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0ZfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BSEI0RU5SICYgUkNDX0FIQjRFTlJfR1BJT0ZFTikgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0dfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BSEI0RU5SICYgUkNDX0FIQjRFTlJfR1BJT0dFTikgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0hfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BSEI0RU5SICYgUkNDX0FIQjRFTlJfR1BJT0hFTikgICE9IDBVKQorI2lmIGRlZmluZWQoR1BJT0kpCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPSV9JU19DTEtfRU5BQkxFRCgpICAgICAgICAgICAgKChSQ0MtPkFIQjRFTlIgJiBSQ0NfQUhCNEVOUl9HUElPSUVOKSAgIT0gMFUpCisjZW5kaWYgLyogR1BJT0kgKi8KICNkZWZpbmUgX19IQUxfUkNDX0dQSU9KX0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QUhCNEVOUiAmIFJDQ19BSEI0RU5SX0dQSU9KRU4pICAhPSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9LX0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QUhCNEVOUiAmIFJDQ19BSEI0RU5SX0dQSU9LRU4pICAhPSAwVSkKICNpZiBkZWZpbmVkKFJDQ19BSEI0RU5SX0NSQ0VOKQpAQCAtMTYyNiw3ICsxNjYyLDkgQEAKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9GX0lTX0NMS19ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QUhCNEVOUiAmIFJDQ19BSEI0RU5SX0dQSU9GRU4pICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9HX0lTX0NMS19ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QUhCNEVOUiAmIFJDQ19BSEI0RU5SX0dQSU9HRU4pICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9IX0lTX0NMS19ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QUhCNEVOUiAmIFJDQ19BSEI0RU5SX0dQSU9IRU4pICA9PSAwVSkKKyNpZiBkZWZpbmVkKEdQSU9JKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0lfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BSEI0RU5SICYgUkNDX0FIQjRFTlJfR1BJT0lFTikgID09IDBVKQorI2VuZGlmIC8qIEdQSU9JICovCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPSl9JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFIQjRFTlIgJiBSQ0NfQUhCNEVOUl9HUElPSkVOKSAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPS19JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFIQjRFTlIgJiBSQ0NfQUhCNEVOUl9HUElPS0VOKSAgPT0gMFUpCiAKQEAgLTE4OTEsNiArMTkyOSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX1JDQ19JMkM1X0NMS19FTkFCTEUoKSAgIGRvIHsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFMRU5SLCBSQ0NfQVBCMUxFTlJfSTJDNUVOKTtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUxFTlIsIFJDQ19BUEIxTEVOUl9JMkM1RU4pO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorI2VuZGlmIC8qIEkyQzUgKi8KKwogI2RlZmluZSBfX0hBTF9SQ0NfQ0VDX0NMS19FTkFCTEUoKSAgIGRvIHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjFMRU5SLCBSQ0NfQVBCMUxFTlJfQ0VDRU4pO1wKQEAgLTE5NjMsNiArMjAxMSwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKKyNpZiBkZWZpbmVkKFRJTTIzKQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjNfQ0xLX0VOQUJMRSgpICAgZG8geyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19JTyB1aW50MzJfdCB0bXByZWc7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVRfQklUKFJDQy0+QVBCMUhFTlIsIFJDQ19BUEIxSEVOUl9USU0yM0VOKTtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGVsYXkgYWZ0ZXIgYW4gUkNDIHBlcmlwaGVyYWwgY2xvY2sgZW5hYmxpbmcgKi8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+QVBCMUhFTlIsIFJDQ19BUEIxSEVOUl9USU0yM0VOKTtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5VU0VEKHRtcHJlZyk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKKyNlbmRpZiAvKiAgVElNMjMgKi8KKworI2lmIGRlZmluZWQoVElNMjQpCisjZGVmaW5lIF9fSEFMX1JDQ19USU0yNF9DTEtfRU5BQkxFKCkgICBkbyB7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0lPIHVpbnQzMl90IHRtcHJlZzsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9CSVQoUkNDLT5BUEIxSEVOUiwgUkNDX0FQQjFIRU5SX1RJTTI0RU4pO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBhZnRlciBhbiBSQ0MgcGVyaXBoZXJhbCBjbG9jayBlbmFibGluZyAqLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wcmVnID0gUkVBRF9CSVQoUkNDLT5BUEIxSEVOUiwgUkNDX0FQQjFIRU5SX1RJTTI0RU4pO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlVTRUQodG1wcmVnKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQorI2VuZGlmIC8qICBUSU0yNCAqLwogCiAjZGVmaW5lIF9fSEFMX1JDQ19USU0yX0NMS19ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjFMRU5SKSAmPSB+IChSQ0NfQVBCMUxFTlJfVElNMkVOKQogI2RlZmluZSBfX0hBTF9SQ0NfVElNM19DTEtfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BUEIxTEVOUikgJj0gfiAoUkNDX0FQQjFMRU5SX1RJTTNFTikKQEAgLTE5ODksNiArMjA1Niw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMxX0NMS19ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjFMRU5SKSAmPSB+IChSQ0NfQVBCMUxFTlJfSTJDMUVOKQogI2RlZmluZSBfX0hBTF9SQ0NfSTJDMl9DTEtfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BUEIxTEVOUikgJj0gfiAoUkNDX0FQQjFMRU5SX0kyQzJFTikKICNkZWZpbmUgX19IQUxfUkNDX0kyQzNfQ0xLX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QVBCMUxFTlIpICY9IH4gKFJDQ19BUEIxTEVOUl9JMkMzRU4pCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBfX0hBTF9SQ0NfSTJDNV9DTEtfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BUEIxTEVOUikgJj0gfiAoUkNDX0FQQjFMRU5SX0kyQzVFTikKKyNlbmRpZiAvKiBJMkM1ICovCiAjZGVmaW5lIF9fSEFMX1JDQ19DRUNfQ0xLX0RJU0FCTEUoKSAgICAgICAgICAgIChSQ0MtPkFQQjFMRU5SKSAmPSB+IChSQ0NfQVBCMUxFTlJfQ0VDRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19EQUMxMl9DTEtfRElTQUJMRSgpICAgICAgICAgIChSQ0MtPkFQQjFMRU5SKSAmPSB+IChSQ0NfQVBCMUxFTlJfREFDMTJFTikKICNkZWZpbmUgX19IQUxfUkNDX1VBUlQ3X0NMS19ESVNBQkxFKCkgICAgICAgICAgKFJDQy0+QVBCMUxFTlIpICY9IH4gKFJDQ19BUEIxTEVOUl9VQVJUN0VOKQpAQCAtMTk5OCw2ICsyMDY4LDEyIEBACiAjZGVmaW5lIF9fSEFMX1JDQ19PUEFNUF9DTEtfRElTQUJMRSgpICAgICAgICAgIChSQ0MtPkFQQjFIRU5SKSAmPSB+IChSQ0NfQVBCMUhFTlJfT1BBTVBFTikKICNkZWZpbmUgX19IQUxfUkNDX01ESU9TX0NMS19ESVNBQkxFKCkgICAgICAgICAgKFJDQy0+QVBCMUhFTlIpICY9IH4gKFJDQ19BUEIxSEVOUl9NRElPU0VOKQogI2RlZmluZSBfX0hBTF9SQ0NfRkRDQU5fQ0xLX0RJU0FCTEUoKSAgICAgICAgICAoUkNDLT5BUEIxSEVOUikgJj0gfiAoUkNDX0FQQjFIRU5SX0ZEQ0FORU4pCisjaWYgZGVmaW5lZChUSU0yMykKKyNkZWZpbmUgX19IQUxfUkNDX1RJTTIzX0NMS19ESVNBQkxFKCkgICAgICAgICAgKFJDQy0+QVBCMUhFTlIpICY9IH4gKFJDQ19BUEIxSEVOUl9USU0yM0VOKQorI2VuZGlmIC8qIFRJTTIzICovCisjaWYgZGVmaW5lZChUSU0yNCkKKyNkZWZpbmUgX19IQUxfUkNDX1RJTTI0X0NMS19ESVNBQkxFKCkgICAgICAgICAgKFJDQy0+QVBCMUhFTlIpICY9IH4gKFJDQ19BUEIxSEVOUl9USU0yNEVOKQorI2VuZGlmIC8qIFRJTTI0ICovCiAKIAogLyoqIEBicmllZiAgR2V0IHRoZSBlbmFibGUgb3IgZGlzYWJsZSBzdGF0dXMgb2YgdGhlIEFQQjEgcGVyaXBoZXJhbCBjbG9jawpAQCAtMjAyOSw2ICsyMTA1LDkgQEAKICNkZWZpbmUgX19IQUxfUkNDX0kyQzFfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BUEIxTEVOUiAmIFJDQ19BUEIxTEVOUl9JMkMxRU4pICAgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfSTJDMl9JU19DTEtfRU5BQkxFRCgpICAgICAgICAgICAgKChSQ0MtPkFQQjFMRU5SICYgUkNDX0FQQjFMRU5SX0kyQzJFTikgICAgIT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMzX0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QVBCMUxFTlIgJiBSQ0NfQVBCMUxFTlJfSTJDM0VOKSAgICAhPSAwVSkKKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX1JDQ19JMkM1X0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QVBCMUxFTlIgJiBSQ0NfQVBCMUxFTlJfSTJDNUVOKSAgICAhPSAwVSkKKyNlbmRpZiAvKiBJMkM1ICovCiAjZGVmaW5lIF9fSEFMX1JDQ19DRUNfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgICAoKFJDQy0+QVBCMUxFTlIgJiBSQ0NfQVBCMUxFTlJfQ0VDRU4pICAgICAhPSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0RBQzEyX0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxTEVOUiAmIFJDQ19BUEIxTEVOUl9EQUMxMkVOKSAgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDdfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFMRU5SICYgUkNDX0FQQjFMRU5SX1VBUlQ3RU4pICAgIT0gMFUpCkBAIC0yMDM4LDYgKzIxMTcsMTIgQEAKICNkZWZpbmUgX19IQUxfUkNDX09QQU1QX0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxSEVOUiAmIFJDQ19BUEIxSEVOUl9PUEFNUEVOKSAgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfTURJT1NfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFIRU5SICYgUkNDX0FQQjFIRU5SX01ESU9TRU4pICAgIT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19GRENBTl9JU19DTEtfRU5BQkxFRCgpICAgICAgICAgICAoKFJDQy0+QVBCMUhFTlIgJiBSQ0NfQVBCMUhFTlJfRkRDQU5FTikgICAhPSAwVSkKKyNpZiBkZWZpbmVkKFRJTTIzKQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjNfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFIRU5SICYgUkNDX0FQQjFIRU5SX1RJTTIzRU4pICAgIT0gMFUpCisjZW5kaWYgLyogVElNMjMgKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjRfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFIRU5SICYgUkNDX0FQQjFIRU5SX1RJTTI0RU4pICAgIT0gMFUpIAorI2VuZGlmIC8qIFRJTTI0ICovCiAKICNkZWZpbmUgX19IQUxfUkNDX1RJTTJfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxTEVOUiAmIFJDQ19BUEIxTEVOUl9USU0yRU4pICAgID09IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfVElNM19JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFMRU5SICYgUkNDX0FQQjFMRU5SX1RJTTNFTikgICAgPT0gMFUpCkBAIC0yMDYyLDYgKzIxNDcsOSBAQAogI2RlZmluZSBfX0hBTF9SQ0NfSTJDMV9JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFMRU5SICYgUkNDX0FQQjFMRU5SX0kyQzFFTikgICAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMyX0lTX0NMS19ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QVBCMUxFTlIgJiBSQ0NfQVBCMUxFTlJfSTJDMkVOKSAgICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0kyQzNfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxTEVOUiAmIFJDQ19BUEIxTEVOUl9JMkMzRU4pICAgID09IDBVKQorI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgX19IQUxfUkNDX0kyQzVfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxTEVOUiAmIFJDQ19BUEIxTEVOUl9JMkM1RU4pICAgID09IDBVKQorI2VuZGlmIC8qIEkyQzUgKi8KICNkZWZpbmUgX19IQUxfUkNDX0NFQ19JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BUEIxTEVOUiAmIFJDQ19BUEIxTEVOUl9DRUNFTikgICAgID09IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfREFDMTJfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgKChSQ0MtPkFQQjFMRU5SICYgUkNDX0FQQjFMRU5SX0RBQzEyRU4pICAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19VQVJUN19JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAoKFJDQy0+QVBCMUxFTlIgJiBSQ0NfQVBCMUxFTlJfVUFSVDdFTikgICA9PSAwVSkKQEAgLTIwNzEsNiArMjE1OSwxMiBAQAogI2RlZmluZSBfX0hBTF9SQ0NfT1BBTVBfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgKChSQ0MtPkFQQjFIRU5SICYgUkNDX0FQQjFIRU5SX09QQU1QRU4pICAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19NRElPU19JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAoKFJDQy0+QVBCMUhFTlIgJiBSQ0NfQVBCMUhFTlJfTURJT1NFTikgICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0ZEQ0FOX0lTX0NMS19ESVNBQkxFRCgpICAgICAgICAgICgoUkNDLT5BUEIxSEVOUiAmIFJDQ19BUEIxSEVOUl9GRENBTkVOKSAgID09IDBVKQorI2lmIGRlZmluZWQoVElNMjMpCisjZGVmaW5lIF9fSEFMX1JDQ19USU0yM19JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAoKFJDQy0+QVBCMUhFTlIgJiBSQ0NfQVBCMUhFTlJfVElNMjNFTikgICA9PSAwVSkKKyNlbmRpZiAvKiBUSU0yMyAqLworI2lmIGRlZmluZWQoVElNMjQpCisjZGVmaW5lIF9fSEFMX1JDQ19USU0yNF9JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAoKFJDQy0+QVBCMUhFTlIgJiBSQ0NfQVBCMUhFTlJfVElNMjRFTikgICA9PSAwVSkKKyNlbmRpZiAvKiBUSU0yNCAqLwogCiAKIC8qKiBAYnJpZWYgIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBBUEIyIHBlcmlwaGVyYWwgY2xvY2suCkBAIC0yMTg3LDYgKzIyODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiAKKyNpZiBkZWZpbmVkKFNBSTIpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkyX0NMS19FTkFCTEUoKSAgIGRvIHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fSU8gdWludDMyX3QgdG1wcmVnOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1NBSTJFTik7XApAQCAtMjE5NCw2ICsyMjg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXByZWcgPSBSRUFEX0JJVChSQ0MtPkFQQjJFTlIsIFJDQ19BUEIyRU5SX1NBSTJFTik7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOVVNFRCh0bXByZWcpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCisjZW5kaWYgLypTQUkyKi8KIAogI2lmIGRlZmluZWQoU0FJMykKICNkZWZpbmUgX19IQUxfUkNDX1NBSTNfQ0xLX0VOQUJMRSgpICAgZG8geyBcCkBAIC0yMjQwLDcgKzIzMzYsOSBAQAogI2RlZmluZSBfX0hBTF9SQ0NfVElNMTdfQ0xLX0RJU0FCTEUoKSAgICAgICAgICAoUkNDLT5BUEIyRU5SKSAmPSB+IChSQ0NfQVBCMkVOUl9USU0xN0VOKQogI2RlZmluZSBfX0hBTF9SQ0NfU1BJNV9DTEtfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BUEIyRU5SKSAmPSB+IChSQ0NfQVBCMkVOUl9TUEk1RU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkxX0NMS19ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjJFTlIpICY9IH4gKFJDQ19BUEIyRU5SX1NBSTFFTikKKyNpZiBkZWZpbmVkKFNBSTIpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkyX0NMS19ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjJFTlIpICY9IH4gKFJDQ19BUEIyRU5SX1NBSTJFTikKKyNlbmRpZiAvKlNBSTIqLwogI2lmIGRlZmluZWQoU0FJMykKICNkZWZpbmUgX19IQUxfUkNDX1NBSTNfQ0xLX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QVBCMkVOUikgJj0gfiAoUkNDX0FQQjJFTlJfU0FJM0VOKQogI2VuZGlmIC8qU0FJMyovCkBAIC0yMjcyLDcgKzIzNzAsOSBAQAogI2RlZmluZSBfX0hBTF9SQ0NfVElNMTdfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjJFTlIgJiBSQ0NfQVBCMkVOUl9USU0xN0VOKSAgIT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEk1X0lTX0NMS19FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QVBCMkVOUiAmIFJDQ19BUEIyRU5SX1NQSTVFTikgICAhPSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX1NBSTFfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BUEIyRU5SICYgUkNDX0FQQjJFTlJfU0FJMUVOKSAgICE9IDBVKQorI2lmIGRlZmluZWQoU0FJMikKICNkZWZpbmUgX19IQUxfUkNDX1NBSTJfSVNfQ0xLX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BUEIyRU5SICYgUkNDX0FQQjJFTlJfU0FJMkVOKSAgICE9IDBVKQorI2VuZGlmIC8qU0FJMiovCiAjaWYgZGVmaW5lZChTQUkzKQogI2RlZmluZSBfX0hBTF9SQ0NfU0FJM19JU19DTEtfRU5BQkxFRCgpICAgICAgICAgICAgKChSQ0MtPkFQQjJFTlIgJiBSQ0NfQVBCMkVOUl9TQUkzRU4pICAgIT0gMFUpCiAjZW5kaWYgLyogU0FJMyAqLwpAQCAtMjI5OCw3ICsyMzk4LDkgQEAKICNkZWZpbmUgX19IQUxfUkNDX1RJTTE3X0lTX0NMS19ESVNBQkxFRCgpICAgICAgICAgICgoUkNDLT5BUEIyRU5SICYgUkNDX0FQQjJFTlJfVElNMTdFTikgID09IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfU1BJNV9JU19DTEtfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjJFTlIgJiBSQ0NfQVBCMkVOUl9TUEk1RU4pICAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkxX0lTX0NMS19ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QVBCMkVOUiAmIFJDQ19BUEIyRU5SX1NBSTFFTikgICA9PSAwVSkKKyNpZiBkZWZpbmVkKFNBSTIpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkyX0lTX0NMS19ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QVBCMkVOUiAmIFJDQ19BUEIyRU5SX1NBSTJFTikgICA9PSAwVSkKKyNlbmRpZiAvKlNBSTIqLwogI2lmIGRlZmluZWQoU0FJMykKICNkZWZpbmUgX19IQUxfUkNDX1NBSTNfSVNfQ0xLX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIyRU5SICYgUkNDX0FQQjJFTlJfU0FJM0VOKSAgID09IDBVKQogI2VuZGlmIC8qU0FJMyovCkBAIC00NTU5LDcgKzQ2NjEsMTMgQEAKIC8qKiBAYnJpZWYgIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBBSEIzIHBlcmlwaGVyYWwgcmVzZXQuCiAgICovCiAKLSNkZWZpbmUgX19IQUxfUkNDX0FIQjNfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BSEIzUlNUUiA9IDB4N0ZGRkZGRkZVKQorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKQorI2RlZmluZSBfX0hBTF9SQ0NfQUhCM19GT1JDRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFIQjNSU1RSID0gMHgwMDAxNTAzMVUpICAvKiBSZXNldHMgTURNQSwgRE1BMkQsIEpQRUcsIEZNQywgUVNQSSBhbmQgU0RNTUMxICovCisjZWxpZiAgKFNUTTMySDdfREVWX0lEID09IDB4NDgwVUwpCisjZGVmaW5lIF9fSEFMX1JDQ19BSEIzX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgKFJDQy0+QUhCM1JTVFIgPSAweDAxRTk1MDMxVSkgIC8qIFJlc2V0cyBNRE1BLCBETUEyRCwgSlBFRywgRk1DLCBPU1BJMSwgU0RNTUMxLCBPU1BJMiwgSU9NTkdSLCBPVEZEMSwgT1RGRDIgYW5kIEdGWE1NVSAqLworI2Vsc2UKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjNfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BSEIzUlNUUiA9IDB4MDBFOTUwMTFVKSAgLyogUmVzZXRzIE1ETUEsIERNQTJELCBGTUMsIE9TUEkxLCBTRE1NQzEsIE9TUEkyLCBJT01OR1IsIE9URkQxLCBPVEZEMiAqLworI2VuZGlmIC8qIFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwgKi8KICNkZWZpbmUgX19IQUxfUkNDX01ETUFfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BSEIzUlNUUiB8PSAoUkNDX0FIQjNSU1RSX01ETUFSU1QpKQogI2RlZmluZSBfX0hBTF9SQ0NfRE1BMkRfRk9SQ0VfUkVTRVQoKSAgICAgICAgIChSQ0MtPkFIQjNSU1RSIHw9IChSQ0NfQUhCM1JTVFJfRE1BMkRSU1QpKQogI2lmIGRlZmluZWQoSlBFRykKQEAgLTQ2MjMsNyArNDczMSwxMyBAQAogCiAvKiogQGJyaWVmICBGb3JjZSBvciByZWxlYXNlIHRoZSBBSEIxIHBlcmlwaGVyYWwgcmVzZXQuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JDQ19BSEIxX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICAgKFJDQy0+QUhCMVJTVFIgPSAweEZGRkZGRkZGVSkKKyNpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0NTBVTCkKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjFfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgICAoUkNDLT5BSEIxUlNUUiA9IDB4MEEwMEMwMjNVKSAgLyogUmVzZXRzIERNQTEsIERNQTIsIEFEQzEyLCBBUlQsIEVUSE1BQywgVVNCMU9URyBhbmQgVVNCMk9URyAqLworI2VsaWYgIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMKQorI2RlZmluZSBfX0hBTF9SQ0NfQUhCMV9GT1JDRV9SRVNFVCgpICAgICAgICAgICAgIChSQ0MtPkFIQjFSU1RSID0gMHgwMjAwMDIyM1UpICAvKiBSZXNldHMgRE1BMSwgRE1BMiwgQURDMTIsIENSQyBhbmQgVVNCMU9URyAqLworI2Vsc2UKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjFfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgICAoUkNDLT5BSEIxUlNUUiA9IDB4MDIwMDgwMjNVKSAgLyogUmVzZXRzIERNQTEsIERNQTIsIEFEQzEyLCBFVEhNQUMgYW5kIFVTQjFPVEcgKi8KKyNlbmRpZiAvKiBTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMICovCiAjZGVmaW5lIF9fSEFMX1JDQ19ETUExX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICAgKFJDQy0+QUhCMVJTVFIgfD0gKFJDQ19BSEIxUlNUUl9ETUExUlNUKSkKICNkZWZpbmUgX19IQUxfUkNDX0RNQTJfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgICAoUkNDLT5BSEIxUlNUUiB8PSAoUkNDX0FIQjFSU1RSX0RNQTJSU1QpKQogI2RlZmluZSBfX0hBTF9SQ0NfQURDMTJfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgIChSQ0MtPkFIQjFSU1RSIHw9IChSQ0NfQUhCMVJTVFJfQURDMTJSU1QpKQpAQCAtNDY2MSw3ICs0Nzc1LDEzIEBACiAKIC8qKiBAYnJpZWYgIEZvcmNlIG9yIHJlbGVhc2UgdGhlIEFIQjIgcGVyaXBoZXJhbCByZXNldC4KICAgKi8KLSNkZWZpbmUgX19IQUxfUkNDX0FIQjJfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QUhCMlJTVFIgPSAweEZGRkZGRkZGVSkKKyNpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0NTBVTCkKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjJfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgICAoUkNDLT5BSEIyUlNUUiA9IDB4MDAwMDAyNzFVKSAgLyogUmVzZXRzIERDTUksIENSWVBULCBIQVNILCBSTkcgYW5kIFNETU1DMiAqLworI2VsaWYgIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMKQorI2RlZmluZSBfX0hBTF9SQ0NfQUhCMl9GT1JDRV9SRVNFVCgpICAgICAgICAgICAgIChSQ0MtPkFIQjJSU1RSID0gMHgwMDAwMEE3NVUpICAvKiBSZXNldHMgRENNSV9QU1NJLCBIU0VNLCBDUllQVCwgSEFTSCwgUk5HLCBTRE1NQzIgYW5kIEJETUExICovCisjZWxzZQorI2RlZmluZSBfX0hBTF9SQ0NfQUhCMl9GT1JDRV9SRVNFVCgpICAgICAgICAgICAgIChSQ0MtPkFIQjJSU1RSID0gMHgwMDAzMDI3MVUpICAvKiBSZXNldHMgRENNSV9QU1NJLCBDUllQVCwgSEFTSCwgUk5HLCBTRE1NQzIsIEZNQUMgYW5kIENPUkRJQyAqLworI2VuZGlmIC8qIFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwgKi8KICNpZiBkZWZpbmVkKERDTUkpICYmIGRlZmluZWQoUFNTSSkKICNkZWZpbmUgX19IQUxfUkNDX0RDTUlfUFNTSV9GT1JDRV9SRVNFVCgpICAgICAgICAoUkNDLT5BSEIyUlNUUiB8PSAoUkNDX0FIQjJSU1RSX0RDTUlfUFNTSVJTVCkpCiAjZGVmaW5lIF9fSEFMX1JDQ19EQ01JX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICAgX19IQUxfUkNDX0RDTUlfUFNTSV9GT1JDRV9SRVNFVCgpICAvKiBmb3IgQVBJIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkqLwpAQCAtNDY3Niw2ICs0Nzk2LDEyIEBACiAjZW5kaWYgLyogSEFTSCAqLwogI2RlZmluZSBfX0hBTF9SQ0NfUk5HX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICAgIChSQ0MtPkFIQjJSU1RSIHw9IChSQ0NfQUhCMlJTVFJfUk5HUlNUKSkKICNkZWZpbmUgX19IQUxfUkNDX1NETU1DMl9GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BSEIyUlNUUiB8PSAoUkNDX0FIQjJSU1RSX1NETU1DMlJTVCkpCisjaWYgZGVmaW5lZChGTUFDKQorI2RlZmluZSBfX0hBTF9SQ0NfRk1BQ19GT1JDRV9SRVNFVCgpICAgICAgICAgICAgIChSQ0MtPkFIQjJSU1RSIHw9IChSQ0NfQUhCMlJTVFJfRk1BQ1JTVCkpCisjZW5kaWYgLypGTUFDKi8KKyNpZiBkZWZpbmVkKENPUkRJQykKKyNkZWZpbmUgX19IQUxfUkNDX0NPUkRJQ19GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BSEIyUlNUUiB8PSAoUkNDX0FIQjJSU1RSX0NPUkRJQ1JTVCkpCisjZW5kaWYgLypDT1JESUMqLwogI2lmIGRlZmluZWQoUkNDX0FIQjJSU1RSX0hTRU1SU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19IU0VNX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICAgKFJDQy0+QUhCMlJTVFIgfD0gKFJDQ19BSEIyUlNUUl9IU0VNUlNUKSkKICNlbmRpZgpAQCAtNDY5OCw2ICs0ODI0LDEyIEBACiAjZW5kaWYgLyogSEFTSCAqLwogI2RlZmluZSBfX0hBTF9SQ0NfUk5HX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAgICAgKFJDQy0+QUhCMlJTVFIgJj0gfiAoUkNDX0FIQjJSU1RSX1JOR1JTVCkpCiAjZGVmaW5lIF9fSEFMX1JDQ19TRE1NQzJfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BSEIyUlNUUiAmPSB+IChSQ0NfQUhCMlJTVFJfU0RNTUMyUlNUKSkKKyNpZiBkZWZpbmVkKEZNQUMpCisjZGVmaW5lIF9fSEFMX1JDQ19GTUFDX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAgICAoUkNDLT5BSEIyUlNUUiAmPSB+IChSQ0NfQUhCMlJTVFJfRk1BQ1JTVCkpCisjZW5kaWYgLypGTUFDKi8KKyNpZiBkZWZpbmVkKENPUkRJQykKKyNkZWZpbmUgX19IQUxfUkNDX0NPUkRJQ19SRUxFQVNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFIQjJSU1RSICY9IH4gKFJDQ19BSEIyUlNUUl9DT1JESUNSU1QpKQorI2VuZGlmIC8qQ09SRElDKi8KICNpZiBkZWZpbmVkKFJDQ19BSEIyUlNUUl9IU0VNUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfSFNFTV9SRUxFQVNFX1JFU0VUKCkgICAgICAgICAgICAgKFJDQy0+QUhCMlJTVFIgJj0gfiAoUkNDX0FIQjJSU1RSX0hTRU1SU1QpKQogI2VuZGlmCkBAIC00NzA5LDcgKzQ4NDEsMTMgQEAKIC8qKiBAYnJpZWYgIEZvcmNlIG9yIHJlbGVhc2UgdGhlIEFIQjQgcGVyaXBoZXJhbCByZXNldC4KICAgKi8KIAotI2RlZmluZSBfX0hBTF9SQ0NfQUhCNF9GT1JDRV9SRVNFVCgpICAgICAgICAgICAgKFJDQy0+QUhCNFJTVFIgPSAweEZGRkZGRkZGVSkKKyNpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0NTBVTCkKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjRfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSID0gMHgwMzI4MDdGRlUpICAvKiBSZXNldHMgR1BJT0EuLkdQSU9LLCBDUkMsIEJETUEsIEFEQzMgYW5kIEhTRU0gKi8KKyNlbGlmICAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCkKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjRfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSID0gMHgwMDIwMDdGRlUpICAvKiBSZXNldHMgR1BJT0EuLkdQSU9LIGFuZCBCRE1BMiAqLworI2Vsc2UKKyNkZWZpbmUgX19IQUxfUkNDX0FIQjRfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSID0gMHgwMzI4MDZGRlUpICAvKiBSZXNldHMgR1BJT0EuLkdQSU9ILCBHUElPSiwgR1BJT0ssIENSQywgQkRNQSwgQURDMyBhbmQgSFNFTSAqLworI2VuZGlmIC8qIFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwgKi8KICNkZWZpbmUgX19IQUxfUkNDX0dQSU9BX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSKSB8PSAoUkNDX0FIQjRSU1RSX0dQSU9BUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0JfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QUhCNFJTVFIpIHw9IChSQ0NfQUhCNFJTVFJfR1BJT0JSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPQ19GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BSEI0UlNUUikgfD0gKFJDQ19BSEI0UlNUUl9HUElPQ1JTVCkKQEAgLTQ3MTgsNyArNDg1Niw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPRl9GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BSEI0UlNUUikgfD0gKFJDQ19BSEI0UlNUUl9HUElPRlJTVCkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9HX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSKSB8PSAoUkNDX0FIQjRSU1RSX0dQSU9HUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0hfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QUhCNFJTVFIpIHw9IChSQ0NfQUhCNFJTVFJfR1BJT0hSU1QpCisjaWYgZGVmaW5lZChHUElPSSkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9JX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSKSB8PSAoUkNDX0FIQjRSU1RSX0dQSU9JUlNUKQorI2VuZGlmIC8qIEdQSU9JICovCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPSl9GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BSEI0UlNUUikgfD0gKFJDQ19BSEI0UlNUUl9HUElPSlJTVCkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9LX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSKSB8PSAoUkNDX0FIQjRSU1RSX0dQSU9LUlNUKQogI2lmIGRlZmluZWQoUkNDX0FIQjRSU1RSX0NSQ1JTVCkKQEAgLTQ3NDYsNyArNDg4Niw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPRl9SRUxFQVNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSKSAmPSB+IChSQ0NfQUhCNFJTVFJfR1BJT0ZSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPR19SRUxFQVNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSKSAmPSB+IChSQ0NfQUhCNFJTVFJfR1BJT0dSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPSF9SRUxFQVNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFIQjRSU1RSKSAmPSB+IChSQ0NfQUhCNFJTVFJfR1BJT0hSU1QpCisjaWYgZGVmaW5lZChHUElPSSkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9JX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QUhCNFJTVFIpICY9IH4gKFJDQ19BSEI0UlNUUl9HUElPSVJTVCkKKyNlbmRpZiAvKiBHUElPSSAqLwogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0pfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BSEI0UlNUUikgJj0gfiAoUkNDX0FIQjRSU1RSX0dQSU9KUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0tfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BSEI0UlNUUikgJj0gfiAoUkNDX0FIQjRSU1RSX0dQSU9LUlNUKQogI2lmIGRlZmluZWQoUkNDX0FIQjRSU1RSX0NSQ1JTVCkKQEAgLTQ3NjcsNyArNDkwOSwxMSBAQAogCiAvKiogQGJyaWVmICBGb3JjZSBvciByZWxlYXNlIHRoZSBBUEIzIHBlcmlwaGVyYWwgcmVzZXQuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JDQ19BUEIzX0ZPUkNFX1JFU0VUKCkgICAgICAgICAoUkNDLT5BUEIzUlNUUiA9IDB4RkZGRkZGRkZVKQorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKQorI2RlZmluZSBfX0hBTF9SQ0NfQVBCM19GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BUEIzUlNUUiA9IDB4MDAwMDAwMThVKSAvKiBSZXN0cyBMVERDIGFuZCBEU0kgKi8KKyNlbHNlCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIzX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFQQjNSU1RSID0gMHgwMDAwMDAwOFUpIC8qIFJlc3RzIExUREMgKi8KKyNlbmRpZiAvKiBTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMICovCiAjaWYgZGVmaW5lZChMVERDKQogI2RlZmluZSBfX0hBTF9SQ0NfTFREQ19GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BUEIzUlNUUikgfD0gKFJDQ19BUEIzUlNUUl9MVERDUlNUKQogI2VuZGlmIC8qIExUREMgKi8KQEAgLTQ3ODUsOCArNDkzMSwxNiBAQAogCiAvKiogQGJyaWVmICBGb3JjZSBvciByZWxlYXNlIHRoZSBBUEIxIHBlcmlwaGVyYWwgcmVzZXQuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JDQ19BUEIxTF9GT1JDRV9SRVNFVCgpICAgICAgICAoUkNDLT5BUEIxTFJTVFIgPSAweEZGRkZGRkZGVSkKLSNkZWZpbmUgX19IQUxfUkNDX0FQQjFIX0ZPUkNFX1JFU0VUKCkgICAgICAgIChSQ0MtPkFQQjFIUlNUUiA9IDB4RkZGRkZGRkZVKQorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKSB8fCAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCkKKyNkZWZpbmUgX19IQUxfUkNDX0FQQjFMX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgKFJDQy0+QVBCMUxSU1RSID0gMHhFOEZGQzNGRlUpIC8qIFJlc2V0cyBUSU0yLi5USU03LCBUSU0xMi4uVElNMTQsIExQVElNMSwgU1BJMiwgU1BJMywgU1BESUZSWCwgVVNBUlQyLCBVU0FSVDMsIFVBUlQ0LCBVQVJUNSwgSTJDMS4uSTJDMywgQ0VDLCBEQUMxKDIpLCBVQVJUNyBhbmQgVUFSVDggKi8KKyNlbHNlCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIxTF9GT1JDRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjFMUlNUUiA9IDB4RUFGRkMzRkZVKSAvKiBSZXNldHMgVElNMi4uVElNNywgVElNMTIuLlRJTTE0LCBMUFRJTTEsIFNQSTIsIFNQSTMsIFNQRElGUlgsIFVTQVJUMiwgVVNBUlQzLCBVQVJUNCwgVUFSVDUsIEkyQzEuLkkyQzMsIEkyQzUsIENFQywgREFDMTIsIFVBUlQ3IGFuZCBVQVJUOCAqLworI2VuZGlmIC8qIFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwgKi8KKyNpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0NTBVTCkgfHwgKFNUTTMySDdfREVWX0lEID09IDB4NDgwVUwpCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIxSF9GT1JDRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjFIUlNUUiA9IDB4MDAwMDAxMzZVKSAvKiBSZXNldHMgQ1JTLCBTV1AsIE9QQU1QLCBNRElPUyBhbmQgRkRDQU4gKi8KKyNlbHNlCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIxSF9GT1JDRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjFIUlNUUiA9IDB4MDMwMDAxMzZVKSAvKiBSZXNldHMgQ1JTLCBTV1AsIE9QQU1QLCBNRElPUywgRkRDQU4sIFRJTTIzIGFuZCBUSU0yNCAqLworI2VuZGlmIC8qIFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwgKi8KICNkZWZpbmUgX19IQUxfUkNDX1RJTTJfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCMUxSU1RSKSB8PSAoUkNDX0FQQjFMUlNUUl9USU0yUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfVElNM19GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BUEIxTFJTVFIpIHw9IChSQ0NfQVBCMUxSU1RSX1RJTTNSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19USU00X0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFQQjFMUlNUUikgfD0gKFJDQ19BUEIxTFJTVFJfVElNNFJTVCkKQEAgLTQ4MDcsNiArNDk2MSw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMxX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFQQjFMUlNUUikgfD0gKFJDQ19BUEIxTFJTVFJfSTJDMVJTVCkKICNkZWZpbmUgX19IQUxfUkNDX0kyQzJfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCMUxSU1RSKSB8PSAoUkNDX0FQQjFMUlNUUl9JMkMyUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfSTJDM19GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BUEIxTFJTVFIpIHw9IChSQ0NfQVBCMUxSU1RSX0kyQzNSU1QpCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBfX0hBTF9SQ0NfSTJDNV9GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BUEIxTFJTVFIpIHw9IChSQ0NfQVBCMUxSU1RSX0kyQzVSU1QpCisjZW5kaWYgLyogSTJDNSAqLwogI2RlZmluZSBfX0hBTF9SQ0NfQ0VDX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICAoUkNDLT5BUEIxTFJTVFIpIHw9IChSQ0NfQVBCMUxSU1RSX0NFQ1JTVCkKICNkZWZpbmUgX19IQUxfUkNDX0RBQzEyX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgKFJDQy0+QVBCMUxSU1RSKSB8PSAoUkNDX0FQQjFMUlNUUl9EQUMxMlJTVCkKICNkZWZpbmUgX19IQUxfUkNDX1VBUlQ3X0ZPUkNFX1JFU0VUKCkgICAgICAgICAgKFJDQy0+QVBCMUxSU1RSKSB8PSAoUkNDX0FQQjFMUlNUUl9VQVJUN1JTVCkKQEAgLTQ4MTYsNiArNDk3MywxMiBAQAogI2RlZmluZSBfX0hBTF9SQ0NfT1BBTVBfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BUEIxSFJTVFIpIHw9IChSQ0NfQVBCMUhSU1RSX09QQU1QUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfTURJT1NfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BUEIxSFJTVFIpIHw9IChSQ0NfQVBCMUhSU1RSX01ESU9TUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfRkRDQU5fRk9SQ0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BUEIxSFJTVFIpIHw9IChSQ0NfQVBCMUhSU1RSX0ZEQ0FOUlNUKQorI2lmIGRlZmluZWQoVElNMjMpCisjZGVmaW5lIF9fSEFMX1JDQ19USU0yM19GT1JDRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjFIUlNUUikgfD0gKFJDQ19BUEIxSFJTVFJfVElNMjNSU1QpCisjZW5kaWYgLyogVElNMjMgKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjRfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BUEIxSFJTVFIpIHw9IChSQ0NfQVBCMUhSU1RSX1RJTTI0UlNUKQorI2VuZGlmIC8qIFRJTTI0ICovCiAKICNkZWZpbmUgX19IQUxfUkNDX0FQQjFMX1JFTEVBU0VfUkVTRVQoKSAgICAgICAoUkNDLT5BUEIxTFJTVFIgPSAweDAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0FQQjFIX1JFTEVBU0VfUkVTRVQoKSAgICAgICAoUkNDLT5BUEIxSFJTVFIgPSAweDAwVSkKQEAgLTQ4MzksNiArNTAwMiw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMxX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCMUxSU1RSKSAmPSB+IChSQ0NfQVBCMUxSU1RSX0kyQzFSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMyX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCMUxSU1RSKSAmPSB+IChSQ0NfQVBCMUxSU1RSX0kyQzJSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMzX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCMUxSU1RSKSAmPSB+IChSQ0NfQVBCMUxSU1RSX0kyQzNSU1QpCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBfX0hBTF9SQ0NfSTJDNV9SRUxFQVNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFQQjFMUlNUUikgJj0gfiAoUkNDX0FQQjFMUlNUUl9JMkM1UlNUKQorI2VuZGlmIC8qIEkyQzUgKi8KICNkZWZpbmUgX19IQUxfUkNDX0NFQ19SRUxFQVNFX1JFU0VUKCkgICAgICAgICAgICAoUkNDLT5BUEIxTFJTVFIpICY9IH4gKFJDQ19BUEIxTFJTVFJfQ0VDUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfREFDMTJfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjFMUlNUUikgJj0gfiAoUkNDX0FQQjFMUlNUUl9EQUMxMlJTVCkKICNkZWZpbmUgX19IQUxfUkNDX1VBUlQ3X1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BUEIxTFJTVFIpICY9IH4gKFJDQ19BUEIxTFJTVFJfVUFSVDdSU1QpCkBAIC00ODQ4LDEwICs1MDE0LDIyIEBACiAjZGVmaW5lIF9fSEFMX1JDQ19PUEFNUF9SRUxFQVNFX1JFU0VUKCkgICAgICAgICAgKFJDQy0+QVBCMUhSU1RSKSAmPSB+IChSQ0NfQVBCMUhSU1RSX09QQU1QUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfTURJT1NfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjFIUlNUUikgJj0gfiAoUkNDX0FQQjFIUlNUUl9NRElPU1JTVCkKICNkZWZpbmUgX19IQUxfUkNDX0ZEQ0FOX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BUEIxSFJTVFIpICY9IH4gKFJDQ19BUEIxSFJTVFJfRkRDQU5SU1QpCisjaWYgZGVmaW5lZChUSU0yMykKKyNkZWZpbmUgX19IQUxfUkNDX1RJTTIzX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAoUkNDLT5BUEIxSFJTVFIpICY9IH4gKFJDQ19BUEIxSFJTVFJfVElNMjNSU1QpCisjZW5kaWYgLyogVElNMjMgKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjRfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjFIUlNUUikgJj0gfiAoUkNDX0FQQjFIUlNUUl9USU0yNFJTVCkKKyNlbmRpZiAvKiBUSU0yNCAqLwogCiAvKiogQGJyaWVmICBGb3JjZSBvciByZWxlYXNlIHRoZSBBUEIyIHBlcmlwaGVyYWwgcmVzZXQuCiAgICovCi0jZGVmaW5lIF9fSEFMX1JDQ19BUEIyX0ZPUkNFX1JFU0VUKCkgICAgICAgICAoUkNDLT5BUEIyUlNUUiA9IDB4RkZGRkZGRkZVKQorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKQorI2RlZmluZSBfX0hBTF9SQ0NfQVBCMl9GT1JDRV9SRVNFVCgpICAgICAgICAgICAgKFJDQy0+QVBCMlJTVFIgPSAweDMxRDczMDMzVSkgIC8qIFJlc2V0cyBUSU0xLCBUSU04LCBVU0FSVDEsIFVTQVJUNiwgU1BJMSwgU1BJNCwgVElNMTUuLlRJTTE3LCBTUEk1LCBTQUkxLi5TQUkzLCBERlNETTEgYW5kIEhSVElNICovCisjZWxpZiAgKFNUTTMySDdfREVWX0lEID09IDB4NDgwVUwpCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIyX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICAoUkNDLT5BUEIyUlNUUiA9IDB4NDBENzMwRjNVKSAgLyogUmVzZXRzIFRJTTEsIFRJTTgsIFVTQVJUMSwgVVNBUlQ2LCBVQVJUOSwgVVNBUlQxMCwgU1BJMSwgU1BJNCwgVElNMTUuLlRJTTE3LCBTUEk1LCBTQUkxLCBTQUkyIGFuZCBERlNETTEgKi8KKyNlbHNlCisjZGVmaW5lIF9fSEFMX1JDQ19BUEIyX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICAoUkNDLT5BUEIyUlNUUiA9IDB4NDA1NzMwRjNVKSAgLyogUmVzZXRzIFRJTTEsIFRJTTgsIFVTQVJUMSwgVVNBUlQ2LCBVQVJUOSwgVVNBUlQxMCwgU1BJMSwgU1BJNCwgVElNMTUuLlRJTTE3LCBTUEk1LCBTQUkxIGFuZCBERlNETTEgKi8KKyNlbmRpZiAvKiBTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMICovCiAjZGVmaW5lIF9fSEFMX1JDQ19USU0xX0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFQQjJSU1RSKSB8PSAoUkNDX0FQQjJSU1RSX1RJTTFSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19USU04X0ZPUkNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFQQjJSU1RSKSB8PSAoUkNDX0FQQjJSU1RSX1RJTThSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDFfRk9SQ0VfUkVTRVQoKSAgICAgICAgIChSQ0MtPkFQQjJSU1RSKSB8PSAoUkNDX0FQQjJSU1RSX1VTQVJUMVJTVCkKQEAgLTQ4NjksNyArNTA0Nyw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19USU0xN19GT1JDRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjJSU1RSKSB8PSAoUkNDX0FQQjJSU1RSX1RJTTE3UlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfU1BJNV9GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BUEIyUlNUUikgfD0gKFJDQ19BUEIyUlNUUl9TUEk1UlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfU0FJMV9GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BUEIyUlNUUikgfD0gKFJDQ19BUEIyUlNUUl9TQUkxUlNUKQorI2lmIGRlZmluZWQoU0FJMikKICNkZWZpbmUgX19IQUxfUkNDX1NBSTJfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCMlJTVFIpIHw9IChSQ0NfQVBCMlJTVFJfU0FJMlJTVCkKKyNlbmRpZiAvKiBTQUkyICovCiAjaWYgZGVmaW5lZChTQUkzKQogI2RlZmluZSBfX0hBTF9SQ0NfU0FJM19GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BUEIyUlNUUikgfD0gKFJDQ19BUEIyUlNUUl9TQUkzUlNUKQogI2VuZGlmIC8qU0FJMyovCkBAIC00ODk2LDcgKzUwNzYsOSBAQAogI2RlZmluZSBfX0hBTF9SQ0NfVElNMTdfUkVMRUFTRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjJSU1RSKSAmPSB+IChSQ0NfQVBCMlJTVFJfVElNMTdSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEk1X1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCMlJTVFIpICY9IH4gKFJDQ19BUEIyUlNUUl9TUEk1UlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfU0FJMV9SRUxFQVNFX1JFU0VUKCkgICAgICAgICAgIChSQ0MtPkFQQjJSU1RSKSAmPSB+IChSQ0NfQVBCMlJTVFJfU0FJMVJTVCkKKyNpZiBkZWZpbmVkKFNBSTIpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkyX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCMlJTVFIpICY9IH4gKFJDQ19BUEIyUlNUUl9TQUkyUlNUKQorI2VuZGlmIC8qIFNBSTIgKi8KICNpZiBkZWZpbmVkKFNBSTMpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkzX1JFTEVBU0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCMlJTVFIpICY9IH4gKFJDQ19BUEIyUlNUUl9TQUkzUlNUKQogI2VuZGlmIC8qU0FJMyovCkBAIC00OTA4LDcgKzUwOTAsMTMgQEAKIC8qKiBAYnJpZWYgIEZvcmNlIG9yIHJlbGVhc2UgdGhlIEFQQjQgcGVyaXBoZXJhbCByZXNldC4KICAgKi8KIAotI2RlZmluZSBfX0hBTF9SQ0NfQVBCNF9GT1JDRV9SRVNFVCgpICAgICAgICAgICAoUkNDLT5BUEI0UlNUUiA9IDB4RkZGRkZGRkZVKQorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKQorI2RlZmluZSBfX0hBTF9SQ0NfQVBCNF9GT1JDRV9SRVNFVCgpICAgICAgICAgICAgKFJDQy0+QVBCNFJTVFIgPSAweDAwMjBERUFBVSkgIC8qIFJlc2V0cyBTWVNDRkcsIExQVUFSVDEsIFNQSTYsIEkyQzQsIExQVElNMi4uTFBUSU01LCBDT01QMTIsIFZSRUYgYW5kIFNBSTQgKi8KKyNlbGlmICAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCkKKyNkZWZpbmUgX19IQUxfUkNDX0FQQjRfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgIChSQ0MtPkFQQjRSU1RSID0gMHgwQzAwRTZBQVUpICAvKiBSZXNldHMgU1lTQ0ZHLCBMUFVBUlQxLCBTUEk2LCBJMkM0LCBMUFRJTTIsIExQVElNMywgREFDMiwgQ09NUDEyLCBWUkVGLCBEVFMgYW5kIERGU0RNMiAqLworI2Vsc2UKKyNkZWZpbmUgX19IQUxfUkNDX0FQQjRfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgIChSQ0MtPkFQQjRSU1RSID0gMHgwNDIwREVBQVUpICAvKiBSZXNldHMgU1lTQ0ZHLCBMUFVBUlQxLCBTUEk2LCBJMkM0LCBMUFRJTTIuLkxQVElNNSwgQ09NUDEyLCBWUkVGLCBTQUk0IGFuZCBEVFMgKi8KKyNlbmRpZiAvKiBTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMICovCiAjZGVmaW5lIF9fSEFMX1JDQ19TWVNDRkdfRk9SQ0VfUkVTRVQoKSAgICAgICAgICAgKFJDQy0+QVBCNFJTVFIpIHw9IChSQ0NfQVBCNFJTVFJfU1lTQ0ZHUlNUKQogI2RlZmluZSBfX0hBTF9SQ0NfTFBVQVJUMV9GT1JDRV9SRVNFVCgpICAgICAgICAgIChSQ0MtPkFQQjRSU1RSKSB8PSAoUkNDX0FQQjRSU1RSX0xQVUFSVDFSU1QpCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEk2X0ZPUkNFX1JFU0VUKCkgICAgICAgICAgICAgKFJDQy0+QVBCNFJTVFIpIHw9IChSQ0NfQVBCNFJTVFJfU1BJNlJTVCkKQEAgLTUyOTAsNiArNTQ3OCwxMiBAQAogI2lmIGRlZmluZWQoUkNDX0FIQjJMUEVOUl9ERlNETURNQUxQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19ERlNETURNQV9DTEtfU0xFRVBfRU5BQkxFKCkgICAgICAgICAoUkNDLT5BSEIyTFBFTlIgfD0gKFJDQ19BSEIyTFBFTlJfREZTRE1ETUFMUEVOKSkKICNlbmRpZgorI2lmIGRlZmluZWQoRk1BQykKKyNkZWZpbmUgX19IQUxfUkNDX0ZNQUNfQ0xLX1NMRUVQX0VOQUJMRSgpICAgICAgICAgICAgIChSQ0MtPkFIQjJMUEVOUiB8PSAoUkNDX0FIQjJMUEVOUl9GTUFDTFBFTikpCisjZW5kaWYgLyogRk1BQyAqLworI2lmIGRlZmluZWQoQ09SRElDKQorI2RlZmluZSBfX0hBTF9SQ0NfQ09SRElDX0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAgKFJDQy0+QUhCMkxQRU5SIHw9IChSQ0NfQUhCMkxQRU5SX0NPUkRJQ0xQRU4pKQorI2VuZGlmIC8qIENPUkRJQyAqLwogI2lmIGRlZmluZWQoUkNDX0FIQjJMUEVOUl9EMlNSQU0xTFBFTikKICNkZWZpbmUgX19IQUxfUkNDX0QyU1JBTTFfQ0xLX1NMRUVQX0VOQUJMRSgpICAgICAgICAgIChSQ0MtPkFIQjJMUEVOUiB8PSAoUkNDX0FIQjJMUEVOUl9EMlNSQU0xTFBFTikpCiAjZWxzZQpAQCAtNTMyMSw2ICs1NTE1LDEyIEBACiAjaWYgZGVmaW5lZChSQ0NfQUhCMkxQRU5SX0RGU0RNRE1BTFBFTikKICNkZWZpbmUgX19IQUxfUkNDX0RGU0RNRE1BX0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAoUkNDLT5BSEIyTFBFTlIgJj0gfiAoUkNDX0FIQjJMUEVOUl9ERlNETURNQUxQRU4pKQogI2VuZGlmCisjaWYgZGVmaW5lZChGTUFDKQorI2RlZmluZSBfX0hBTF9SQ0NfRk1BQ19DTEtfU0xFRVBfRElTQUJMRSgpICAgICAgICAgICAgIChSQ0MtPkFIQjJMUEVOUiAmPSB+IChSQ0NfQUhCMkxQRU5SX0ZNQUNMUEVOKSkKKyNlbmRpZiAvKiBGTUFDICovCisjaWYgZGVmaW5lZChDT1JESUMpCisjZGVmaW5lIF9fSEFMX1JDQ19DT1JESUNfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QUhCMkxQRU5SICY9IH4gKFJDQ19BSEIyTFBFTlJfQ09SRElDTFBFTikpCisjZW5kaWYgLyogQ09SRElDICovCiAjaWYgZGVmaW5lZChSQ0NfQUhCMkxQRU5SX0QyU1JBTTFMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfRDJTUkFNMV9DTEtfU0xFRVBfRElTQUJMRSgpICAgICAgICAgIChSQ0MtPkFIQjJMUEVOUiAmPSB+IChSQ0NfQUhCMkxQRU5SX0QyU1JBTTFMUEVOKSkKICNlbHNlCkBAIC01MzU5LDYgKzU1NTksMTIgQEAKICNpZiBkZWZpbmVkKFJDQ19BSEIyTFBFTlJfREZTRE1ETUFMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfREZTRE1ETUFfSVNfQ0xLX1NMRUVQX0VOQUJMRUQoKSAgICAgICAgICAoKFJDQy0+QUhCMkxQRU5SICYgKFJDQ19BSEIyTFBFTlJfREZTRE1ETUFMUEVOKSkgIT0gMFUpCiAjZW5kaWYKKyNpZiBkZWZpbmVkKEZNQUMpCisjZGVmaW5lIF9fSEFMX1JDQ19GTUFDX0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICAgICgoUkNDLT5BSEIyTFBFTlIgJiAoUkNDX0FIQjJMUEVOUl9GTUFDTFBFTikpICE9IDBVKQorI2VuZGlmIC8qIEZNQUMgKi8KKyNpZiBkZWZpbmVkKENPUkRJQykKKyNkZWZpbmUgX19IQUxfUkNDX0NPUkRJQ19JU19DTEtfU0xFRVBfRU5BQkxFRCgpICAgICAgICAgICAgKChSQ0MtPkFIQjJMUEVOUiAmIChSQ0NfQUhCMkxQRU5SX0NPUkRJQ0xQRU4pKSAhPSAwVSkKKyNlbmRpZiAvKiBDT1JESUMgKi8KICNpZiBkZWZpbmVkKFJDQ19BSEIyTFBFTlJfRDJTUkFNMUxQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19EMlNSQU0xX0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICgoUkNDLT5BSEIyTFBFTlIgJiAoUkNDX0FIQjJMUEVOUl9EMlNSQU0xTFBFTikpICE9IDBVKQogI2Vsc2UKQEAgLTUzOTAsNiArNTU5NiwxMiBAQAogI2RlZmluZSBfX0hBTF9SQ0NfREZTRE1ETUFfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAoKFJDQy0+QUhCMkxQRU5SICYgKFJDQ19BSEIyTFBFTlJfREZTRE1ETUFMUEVOKSkgPT0gMFUpCiAjZW5kaWYKICNkZWZpbmUgX19IQUxfUkNDX1NETU1DMl9JU19DTEtfU0xFRVBfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFIQjJMUEVOUiAmIChSQ0NfQUhCMkxQRU5SX1NETU1DMkxQRU4pKSAgPT0gMFUpCisjaWYgZGVmaW5lZChGTUFDKQorI2RlZmluZSBfX0hBTF9SQ0NfRk1BQ19JU19DTEtfU0xFRVBfRElTQUJMRUQoKSAgICAgICAgICAgICAoKFJDQy0+QUhCMkxQRU5SICYgKFJDQ19BSEIyTFBFTlJfRk1BQ0xQRU4pKSAgPT0gMFUpCisjZW5kaWYgLyogRk1BQyAqLworI2lmIGRlZmluZWQoQ09SRElDKQorI2RlZmluZSBfX0hBTF9SQ0NfQ09SRElDX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QUhCMkxQRU5SICYgKFJDQ19BSEIyTFBFTlJfQ09SRElDTFBFTikpICA9PSAwVSkKKyNlbmRpZiAvKiBDT1JESUMgKi8KICNpZiBkZWZpbmVkKFJDQ19BSEIyTFBFTlJfRDJTUkFNMUxQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19EMlNSQU0xX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpICAgICAgICAgICgoUkNDLT5BSEIyTFBFTlIgJiAoUkNDX0FIQjJMUEVOUl9EMlNSQU0xTFBFTikpID09IDBVKQogI2Vsc2UKQEAgLTU0MjAsNyArNTYzMiw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPRl9DTEtfU0xFRVBfRU5BQkxFKCkgICAgICAgICAgIChSQ0MtPkFIQjRMUEVOUikgfD0gKFJDQ19BSEI0TFBFTlJfR1BJT0ZMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0dfQ0xLX1NMRUVQX0VOQUJMRSgpICAgICAgICAgICAoUkNDLT5BSEI0TFBFTlIpIHw9IChSQ0NfQUhCNExQRU5SX0dQSU9HTFBFTikKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9IX0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAgKFJDQy0+QUhCNExQRU5SKSB8PSAoUkNDX0FIQjRMUEVOUl9HUElPSExQRU4pCisjaWYgZGVmaW5lZChHUElPSSkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9JX0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAgKFJDQy0+QUhCNExQRU5SKSB8PSAoUkNDX0FIQjRMUEVOUl9HUElPSUxQRU4pCisjZW5kaWYgLyogR1BJT0kgKi8KICNkZWZpbmUgX19IQUxfUkNDX0dQSU9KX0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAgKFJDQy0+QUhCNExQRU5SKSB8PSAoUkNDX0FIQjRMUEVOUl9HUElPSkxQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPS19DTEtfU0xFRVBfRU5BQkxFKCkgICAgICAgICAgIChSQ0MtPkFIQjRMUEVOUikgfD0gKFJDQ19BSEI0TFBFTlJfR1BJT0tMUEVOKQogI2lmIGRlZmluZWQoUkNDX0FIQjRMUEVOUl9DUkNMUEVOKQpAQCAtNTQ1MSw3ICs1NjY1LDkgQEAKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9GX0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFIQjRMUEVOUikgJj0gfiAoUkNDX0FIQjRMUEVOUl9HUElPRkxQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPR19DTEtfU0xFRVBfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BSEI0TFBFTlIpICY9IH4gKFJDQ19BSEI0TFBFTlJfR1BJT0dMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0hfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QUhCNExQRU5SKSAmPSB+IChSQ0NfQUhCNExQRU5SX0dQSU9ITFBFTikKKyNpZiBkZWZpbmVkKEdQSU9JKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0lfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QUhCNExQRU5SKSAmPSB+IChSQ0NfQUhCNExQRU5SX0dQSU9JTFBFTikKKyNlbmRpZiAvKiBHUElPSSAqLwogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0pfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QUhCNExQRU5SKSAmPSB+IChSQ0NfQUhCNExQRU5SX0dQSU9KTFBFTikKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9LX0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFIQjRMUEVOUikgJj0gfiAoUkNDX0FIQjRMUEVOUl9HUElPS0xQRU4pCiAjaWYgZGVmaW5lZChSQ0NfQUhCNExQRU5SX0NSQ0xQRU4pCkBAIC01NDkwLDcgKzU3MDYsOSBAQAogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0ZfSVNfQ0xLX1NMRUVQX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BSEI0TFBFTlIgJiAoUkNDX0FIQjRMUEVOUl9HUElPRkxQRU4pKSAgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0dfSVNfQ0xLX1NMRUVQX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BSEI0TFBFTlIgJiAoUkNDX0FIQjRMUEVOUl9HUElPR0xQRU4pKSAgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0hfSVNfQ0xLX1NMRUVQX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BSEI0TFBFTlIgJiAoUkNDX0FIQjRMUEVOUl9HUElPSExQRU4pKSAgICE9IDBVKQorI2lmIGRlZmluZWQoR1BJT0kpCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPSV9JU19DTEtfU0xFRVBfRU5BQkxFRCgpICAgICAgICAgICAgKChSQ0MtPkFIQjRMUEVOUiAmIChSQ0NfQUhCNExQRU5SX0dQSU9JTFBFTikpICAgIT0gMFUpCisjZW5kaWYgLyogR1BJT0kgKi8KICNkZWZpbmUgX19IQUxfUkNDX0dQSU9KX0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QUhCNExQRU5SICYgKFJDQ19BSEI0TFBFTlJfR1BJT0pMUEVOKSkgICAhPSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9LX0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QUhCNExQRU5SICYgKFJDQ19BSEI0TFBFTlJfR1BJT0tMUEVOKSkgICAhPSAwVSkKICNpZiBkZWZpbmVkKFJDQ19BSEI0TFBFTlJfQ1JDTFBFTikKQEAgLTU1MjEsNyArNTczOSw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPRl9JU19DTEtfU0xFRVBfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFIQjRMUEVOUiAmIChSQ0NfQUhCNExQRU5SX0dQSU9GTFBFTikpICAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPR19JU19DTEtfU0xFRVBfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFIQjRMUEVOUiAmIChSQ0NfQUhCNExQRU5SX0dQSU9HTFBFTikpICAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19HUElPSF9JU19DTEtfU0xFRVBfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFIQjRMUEVOUiAmIChSQ0NfQUhCNExQRU5SX0dQSU9ITFBFTikpICAgPT0gMFUpCisjaWYgZGVmaW5lZChHUElPSSkKICNkZWZpbmUgX19IQUxfUkNDX0dQSU9JX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QUhCNExQRU5SICYgKFJDQ19BSEI0TFBFTlJfR1BJT0lMUEVOKSkgICA9PSAwVSkKKyNlbmRpZiAvKiBHUElPSSAqLwogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0pfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BSEI0TFBFTlIgJiAoUkNDX0FIQjRMUEVOUl9HUElPSkxQRU4pKSAgID09IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfR1BJT0tfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BSEI0TFBFTlIgJiAoUkNDX0FIQjRMUEVOUl9HUElPS0xQRU4pKSAgID09IDBVKQogI2lmIGRlZmluZWQoUkNDX0FIQjRMUEVOUl9DUkNMUEVOKQpAQCAtNTYyNSw2ICs1ODQ1LDkgQEAKICNkZWZpbmUgX19IQUxfUkNDX0kyQzFfQ0xLX1NMRUVQX0VOQUJMRSgpICAgICAgICAgICAoUkNDLT5BUEIxTExQRU5SKSB8PSAoUkNDX0FQQjFMTFBFTlJfSTJDMUxQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMyX0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAgKFJDQy0+QVBCMUxMUEVOUikgfD0gKFJDQ19BUEIxTExQRU5SX0kyQzJMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfSTJDM19DTEtfU0xFRVBfRU5BQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjFMTFBFTlIpIHw9IChSQ0NfQVBCMUxMUEVOUl9JMkMzTFBFTikKKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX1JDQ19JMkM1X0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAgKFJDQy0+QVBCMUxMUEVOUikgfD0gKFJDQ19BUEIxTExQRU5SX0kyQzVMUEVOKQorI2VuZGlmIC8qIEkyQzUgKi8KICNkZWZpbmUgX19IQUxfUkNDX0NFQ19DTEtfU0xFRVBfRU5BQkxFKCkgICAgICAgICAgICAoUkNDLT5BUEIxTExQRU5SKSB8PSAoUkNDX0FQQjFMTFBFTlJfQ0VDTFBFTikKICNkZWZpbmUgX19IQUxfUkNDX0RBQzEyX0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAoUkNDLT5BUEIxTExQRU5SKSB8PSAoUkNDX0FQQjFMTFBFTlJfREFDMTJMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDdfQ0xLX1NMRUVQX0VOQUJMRSgpICAgICAgICAgIChSQ0MtPkFQQjFMTFBFTlIpIHw9IChSQ0NfQVBCMUxMUEVOUl9VQVJUN0xQRU4pCkBAIC01NjM0LDYgKzU4NTcsMTIgQEAKICNkZWZpbmUgX19IQUxfUkNDX09QQU1QX0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAoUkNDLT5BUEIxSExQRU5SKSB8PSAoUkNDX0FQQjFITFBFTlJfT1BBTVBMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfTURJT1NfQ0xLX1NMRUVQX0VOQUJMRSgpICAgICAgICAgIChSQ0MtPkFQQjFITFBFTlIpIHw9IChSQ0NfQVBCMUhMUEVOUl9NRElPU0xQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19GRENBTl9DTEtfU0xFRVBfRU5BQkxFKCkgICAgICAgICAgKFJDQy0+QVBCMUhMUEVOUikgfD0gKFJDQ19BUEIxSExQRU5SX0ZEQ0FOTFBFTikKKyNpZiBkZWZpbmVkKFRJTTIzKQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjNfQ0xLX1NMRUVQX0VOQUJMRSgpICAgICAgICAgIChSQ0MtPkFQQjFITFBFTlIpIHw9IChSQ0NfQVBCMUhMUEVOUl9USU0yM0xQRU4pCisjZW5kaWYgLyogVElNMjMgKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjRfQ0xLX1NMRUVQX0VOQUJMRSgpICAgICAgICAgIChSQ0MtPkFQQjFITFBFTlIpIHw9IChSQ0NfQVBCMUhMUEVOUl9USU0yNExQRU4pCisjZW5kaWYgLyogVElNMjQgKi8KIAogCiAjZGVmaW5lIF9fSEFMX1JDQ19USU0yX0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjFMTFBFTlIpICY9IH4gKFJDQ19BUEIxTExQRU5SX1RJTTJMUEVOKQpAQCAtNTY2MSw2ICs1ODkwLDkgQEAKICNkZWZpbmUgX19IQUxfUkNDX0kyQzFfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QVBCMUxMUEVOUikgJj0gfiAoUkNDX0FQQjFMTFBFTlJfSTJDMUxQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMyX0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjFMTFBFTlIpICY9IH4gKFJDQ19BUEIxTExQRU5SX0kyQzJMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfSTJDM19DTEtfU0xFRVBfRElTQUJMRSgpICAgICAgICAgICAoUkNDLT5BUEIxTExQRU5SKSAmPSB+IChSQ0NfQVBCMUxMUEVOUl9JMkMzTFBFTikKKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX1JDQ19JMkM1X0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjFMTFBFTlIpICY9IH4gKFJDQ19BUEIxTExQRU5SX0kyQzVMUEVOKQorI2VuZGlmIC8qIEkyQzUgKi8KICNkZWZpbmUgX19IQUxfUkNDX0NFQ19DTEtfU0xFRVBfRElTQUJMRSgpICAgICAgICAgICAgKFJDQy0+QVBCMUxMUEVOUikgJj0gfiAoUkNDX0FQQjFMTFBFTlJfQ0VDTFBFTikKICNkZWZpbmUgX19IQUxfUkNDX0RBQzEyX0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAgKFJDQy0+QVBCMUxMUEVOUikgJj0gfiAoUkNDX0FQQjFMTFBFTlJfREFDMTJMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDdfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAoUkNDLT5BUEIxTExQRU5SKSAmPSB+IChSQ0NfQVBCMUxMUEVOUl9VQVJUN0xQRU4pCkBAIC01NjcwLDYgKzU5MDIsMTIgQEAKICNkZWZpbmUgX19IQUxfUkNDX09QQU1QX0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAgKFJDQy0+QVBCMUhMUEVOUikgJj0gfiAoUkNDX0FQQjFITFBFTlJfT1BBTVBMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfTURJT1NfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAoUkNDLT5BUEIxSExQRU5SKSAmPSB+IChSQ0NfQVBCMUhMUEVOUl9NRElPU0xQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19GRENBTl9DTEtfU0xFRVBfRElTQUJMRSgpICAgICAgICAgIChSQ0MtPkFQQjFITFBFTlIpICY9IH4gKFJDQ19BUEIxSExQRU5SX0ZEQ0FOTFBFTikKKyNpZiBkZWZpbmVkKFRJTTIzKQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjNfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAoUkNDLT5BUEIxSExQRU5SKSAmPSB+IChSQ0NfQVBCMUhMUEVOUl9USU0yM0xQRU4pCisjZW5kaWYgLyogVElNMjMgKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjRfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAoUkNDLT5BUEIxSExQRU5SKSAmPSB+IChSQ0NfQVBCMUhMUEVOUl9USU0yNExQRU4pCisjZW5kaWYgLyogVElNMjQgKi8KIAogCiAvKiogQGJyaWVmICBHZXQgdGhlIGVuYWJsZSBvciBkaXNhYmxlIHN0YXR1cyBvZiB0aGUgQVBCMSBwZXJpcGhlcmFsIGNsb2NrIGR1cmluZyBMb3cgUG9zZXIgKFNsZWVwKSBtb2RlLgpAQCAtNTcwMiw2ICs1OTQwLDkgQEAKICNkZWZpbmUgX19IQUxfUkNDX0kyQzFfSVNfQ0xLX1NMRUVQX0VOQUJMRUQoKSAgICAgICAgICAgICgoUkNDLT5BUEIxTExQRU5SICYgKFJDQ19BUEIxTExQRU5SX0kyQzFMUEVOKSkgICAgIT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMyX0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QVBCMUxMUEVOUiAmIChSQ0NfQVBCMUxMUEVOUl9JMkMyTFBFTikpICAgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfSTJDM19JU19DTEtfU0xFRVBfRU5BQkxFRCgpICAgICAgICAgICAgKChSQ0MtPkFQQjFMTFBFTlIgJiAoUkNDX0FQQjFMTFBFTlJfSTJDM0xQRU4pKSAgICAhPSAwVSkKKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX1JDQ19JMkM1X0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QVBCMUxMUEVOUiAmIChSQ0NfQVBCMUxMUEVOUl9JMkM1TFBFTikpICAgICE9IDBVKQorI2VuZGlmIC8qIEkyQzUgKi8KICNkZWZpbmUgX19IQUxfUkNDX0NFQ19JU19DTEtfU0xFRVBfRU5BQkxFRCgpICAgICAgICAgICAgICgoUkNDLT5BUEIxTExQRU5SICYgKFJDQ19BUEIxTExQRU5SX0NFQ0xQRU4pKSAgICAgIT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19EQUMxMl9JU19DTEtfU0xFRVBfRU5BQkxFRCgpICAgICAgICAgICAoKFJDQy0+QVBCMUxMUEVOUiAmIChSQ0NfQVBCMUxMUEVOUl9EQUMxMkxQRU4pKSAgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfVUFSVDdfSVNfQ0xLX1NMRUVQX0VOQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFMTFBFTlIgJiAoUkNDX0FQQjFMTFBFTlJfVUFSVDdMUEVOKSkgICAhPSAwVSkKQEAgLTU3MTEsNiArNTk1MiwxMiBAQAogI2RlZmluZSBfX0hBTF9SQ0NfT1BBTVBfSVNfQ0xLX1NMRUVQX0VOQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFITFBFTlIgJiAoUkNDX0FQQjFITFBFTlJfT1BBTVBMUEVOKSkgICAhPSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX01ESU9TX0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxSExQRU5SICYgKFJDQ19BUEIxSExQRU5SX01ESU9TTFBFTikpICAgIT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19GRENBTl9JU19DTEtfU0xFRVBfRU5BQkxFRCgpICAgICAgICAgICAoKFJDQy0+QVBCMUhMUEVOUiAmIChSQ0NfQVBCMUhMUEVOUl9GRENBTkxQRU4pKSAgICE9IDBVKQorI2lmIGRlZmluZWQoVElNMjMpCisjZGVmaW5lIF9fSEFMX1JDQ19USU0yM19JU19DTEtfU0xFRVBfRU5BQkxFRCgpICAgICAgICAgICAoKFJDQy0+QVBCMUhMUEVOUiAmIChSQ0NfQVBCMUhMUEVOUl9USU0yM0xQRU4pKSAgICE9IDBVKQorI2VuZGlmIC8qIFRJTTIzICovCisjaWYgZGVmaW5lZChUSU0yNCkKKyNkZWZpbmUgX19IQUxfUkNDX1RJTTI0X0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxSExQRU5SICYgKFJDQ19BUEIxSExQRU5SX1RJTTI0TFBFTikpICAgIT0gMFUpCisjZW5kaWYgLyogVElNMjQgKi8KIAogI2RlZmluZSBfX0hBTF9SQ0NfVElNMl9JU19DTEtfU0xFRVBfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFMTFBFTlIgJiAoUkNDX0FQQjFMTFBFTlJfVElNMkxQRU4pKSAgICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX1RJTTNfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxTExQRU5SICYgKFJDQ19BUEIxTExQRU5SX1RJTTNMUEVOKSkgICAgPT0gMFUpCkBAIC01NzM1LDYgKzU5ODIsOSBAQAogI2RlZmluZSBfX0hBTF9SQ0NfSTJDMV9JU19DTEtfU0xFRVBfRElTQUJMRUQoKSAgICAgICAgICAgKChSQ0MtPkFQQjFMTFBFTlIgJiAoUkNDX0FQQjFMTFBFTlJfSTJDMUxQRU4pKSAgICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0kyQzJfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxTExQRU5SICYgKFJDQ19BUEIxTExQRU5SX0kyQzJMUEVOKSkgICAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMzX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QVBCMUxMUEVOUiAmIChSQ0NfQVBCMUxMUEVOUl9JMkMzTFBFTikpICAgID09IDBVKQorI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgX19IQUxfUkNDX0kyQzVfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIxTExQRU5SICYgKFJDQ19BUEIxTExQRU5SX0kyQzVMUEVOKSkgICAgPT0gMFUpCisjZW5kaWYgLyogSTJDNSAqLwogI2RlZmluZSBfX0hBTF9SQ0NfQ0VDX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpICAgICAgICAgICAgKChSQ0MtPkFQQjFMTFBFTlIgJiAoUkNDX0FQQjFMTFBFTlJfQ0VDTFBFTikpICAgICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0RBQzEyX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpICAgICAgICAgICgoUkNDLT5BUEIxTExQRU5SICYgKFJDQ19BUEIxTExQRU5SX0RBQzEyTFBFTikpICAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19VQVJUN19JU19DTEtfU0xFRVBfRElTQUJMRUQoKSAgICAgICAgICAoKFJDQy0+QVBCMUxMUEVOUiAmIChSQ0NfQVBCMUxMUEVOUl9VQVJUN0xQRU4pKSAgID09IDBVKQpAQCAtNTc0NCw2ICs1OTk0LDEyIEBACiAjZGVmaW5lIF9fSEFMX1JDQ19PUEFNUF9JU19DTEtfU0xFRVBfRElTQUJMRUQoKSAgICAgICAgICAoKFJDQy0+QVBCMUhMUEVOUiAmIChSQ0NfQVBCMUhMUEVOUl9PUEFNUExQRU4pKSAgID09IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfTURJT1NfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgKChSQ0MtPkFQQjFITFBFTlIgJiAoUkNDX0FQQjFITFBFTlJfTURJT1NMUEVOKSkgICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX0ZEQ0FOX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpICAgICAgICAgICgoUkNDLT5BUEIxSExQRU5SICYgKFJDQ19BUEIxSExQRU5SX0ZEQ0FOTFBFTikpICAgPT0gMFUpCisjaWYgZGVmaW5lZChUSU0yMykKKyNkZWZpbmUgX19IQUxfUkNDX1RJTTIzX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpICAgICAgICAgICgoUkNDLT5BUEIxSExQRU5SICYgKFJDQ19BUEIxSExQRU5SX1RJTTIzTFBFTikpICAgPT0gMFUpCisjZW5kaWYgLyogVElNMjMgKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBfX0hBTF9SQ0NfVElNMjRfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgKChSQ0MtPkFQQjFITFBFTlIgJiAoUkNDX0FQQjFITFBFTlJfVElNMjRMUEVOKSkgICA9PSAwVSkKKyNlbmRpZiAvKiBUSU0yNCAqLwogCiAKIC8qKiBAYnJpZWYgIEVOQUJMRSBvciBkaXNhYmxlIHRoZSBBUEIyIHBlcmlwaGVyYWwgY2xvY2sgZHVyaW5nIExvdyBQb3dlciAoU2xlZXApIG1vZGUuCkBAIC01NzcwLDcgKzYwMjYsOSBAQAogI2RlZmluZSBfX0hBTF9SQ0NfVElNMTdfQ0xLX1NMRUVQX0VOQUJMRSgpICAgICAgICAgIChSQ0MtPkFQQjJMUEVOUikgfD0gKFJDQ19BUEIyTFBFTlJfVElNMTdMUEVOKQogI2RlZmluZSBfX0hBTF9SQ0NfU1BJNV9DTEtfU0xFRVBfRU5BQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjJMUEVOUikgfD0gKFJDQ19BUEIyTFBFTlJfU1BJNUxQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkxX0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAgKFJDQy0+QVBCMkxQRU5SKSB8PSAoUkNDX0FQQjJMUEVOUl9TQUkxTFBFTikKKyNpZiBkZWZpbmVkKFNBSTIpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkyX0NMS19TTEVFUF9FTkFCTEUoKSAgICAgICAgICAgKFJDQy0+QVBCMkxQRU5SKSB8PSAoUkNDX0FQQjJMUEVOUl9TQUkyTFBFTikKKyNlbmRpZiAvKiBTQUkyICovCiAjaWYgZGVmaW5lZChTQUkzKQogI2RlZmluZSBfX0hBTF9SQ0NfU0FJM19DTEtfU0xFRVBfRU5BQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjJMUEVOUikgfD0gKFJDQ19BUEIyTFBFTlJfU0FJM0xQRU4pCiAjZW5kaWYgLypTQUkzKi8KQEAgLTU3OTYsNyArNjA1NCw5IEBACiAjZGVmaW5lIF9fSEFMX1JDQ19USU0xN19DTEtfU0xFRVBfRElTQUJMRSgpICAgICAgICAgIChSQ0MtPkFQQjJMUEVOUikgJj0gfiAoUkNDX0FQQjJMUEVOUl9USU0xN0xQRU4pCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEk1X0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjJMUEVOUikgJj0gfiAoUkNDX0FQQjJMUEVOUl9TUEk1TFBFTikKICNkZWZpbmUgX19IQUxfUkNDX1NBSTFfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QVBCMkxQRU5SKSAmPSB+IChSQ0NfQVBCMkxQRU5SX1NBSTFMUEVOKQorI2lmIGRlZmluZWQoU0FJMikKICNkZWZpbmUgX19IQUxfUkNDX1NBSTJfQ0xLX1NMRUVQX0RJU0FCTEUoKSAgICAgICAgICAgKFJDQy0+QVBCMkxQRU5SKSAmPSB+IChSQ0NfQVBCMkxQRU5SX1NBSTJMUEVOKQorI2VuZGlmIC8qIFNBSTIgKi8KICNpZiBkZWZpbmVkKFNBSTMpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkzX0NMS19TTEVFUF9ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkFQQjJMUEVOUikgJj0gfiAoUkNDX0FQQjJMUEVOUl9TQUkzTFBFTikKICNlbmRpZiAvKlNBSTMqLwpAQCAtNTgzMCw3ICs2MDkwLDkgQEAKICNkZWZpbmUgX19IQUxfUkNDX1RJTTE3X0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIyTFBFTlIgJiAoUkNDX0FQQjJMUEVOUl9USU0xN0xQRU4pKSAgIT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19TUEk1X0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QVBCMkxQRU5SICYgKFJDQ19BUEIyTFBFTlJfU1BJNUxQRU4pKSAgICE9IDBVKQogI2RlZmluZSBfX0hBTF9SQ0NfU0FJMV9JU19DTEtfU0xFRVBfRU5BQkxFRCgpICAgICAgICAgICAgKChSQ0MtPkFQQjJMUEVOUiAmIChSQ0NfQVBCMkxQRU5SX1NBSTFMUEVOKSkgICAhPSAwVSkKKyNpZiBkZWZpbmVkKFNBSTIpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkyX0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QVBCMkxQRU5SICYgKFJDQ19BUEIyTFBFTlJfU0FJMkxQRU4pKSAgICE9IDBVKQorI2VuZGlmIC8qIFNBSTIgKi8KICNpZiBkZWZpbmVkKFNBSTMpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkzX0lTX0NMS19TTEVFUF9FTkFCTEVEKCkgICAgICAgICAgICAoKFJDQy0+QVBCMkxQRU5SICYgKFJDQ19BUEIyTFBFTlJfU0FJM0xQRU4pKSAgICE9IDBVKQogI2VuZGlmIC8qU0FJMyovCkBAIC01ODU2LDcgKzYxMTgsOSBAQAogI2RlZmluZSBfX0hBTF9SQ0NfVElNMTdfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgKChSQ0MtPkFQQjJMUEVOUiAmIChSQ0NfQVBCMkxQRU5SX1RJTTE3TFBFTikpICA9PSAwVSkKICNkZWZpbmUgX19IQUxfUkNDX1NQSTVfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIyTFBFTlIgJiAoUkNDX0FQQjJMUEVOUl9TUEk1TFBFTikpICAgPT0gMFUpCiAjZGVmaW5lIF9fSEFMX1JDQ19TQUkxX0lTX0NMS19TTEVFUF9ESVNBQkxFRCgpICAgICAgICAgICAoKFJDQy0+QVBCMkxQRU5SICYgKFJDQ19BUEIyTFBFTlJfU0FJMUxQRU4pKSAgID09IDBVKQorI2lmIGRlZmluZWQoU0FJMikKICNkZWZpbmUgX19IQUxfUkNDX1NBSTJfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIyTFBFTlIgJiAoUkNDX0FQQjJMUEVOUl9TQUkyTFBFTikpICAgPT0gMFUpCisjZW5kaWYgLyogU0FJMiAqLwogI2lmIGRlZmluZWQoU0FJMykKICNkZWZpbmUgX19IQUxfUkNDX1NBSTNfSVNfQ0xLX1NMRUVQX0RJU0FCTEVEKCkgICAgICAgICAgICgoUkNDLT5BUEIyTFBFTlIgJiAoUkNDX0FQQjJMUEVOUl9TQUkzTFBFTikpICAgPT0gMFUpCiAjZW5kaWYgLypTQUkzKi8KQEAgLTY2MzgsNiArNjkwMiw5IEBACiAjaWYgZGVmaW5lZChBREMzKQogI2RlZmluZSBfX0hBTF9SQ0NfQURDM19DTEtBTV9FTkFCTEUoKSAgICAgICAgICAgICAoUkNDLT5EM0FNUikgfD0gKFJDQ19EM0FNUl9BREMzQU1FTikKICNlbmRpZgorI2lmIGRlZmluZWQoUkNDX0QzQU1SX0RUU0FNRU4pCisjZGVmaW5lIF9fSEFMX1JDQ19EVFNfQ0xLQU1fRU5BQkxFKCkgICAgICAgICAgICAgIChSQ0MtPkQzQU1SKSB8PSAoUkNDX0QzQU1SX0RUU0FNRU4pCisjZW5kaWYKICNpZiBkZWZpbmVkKFJDQ19EM0FNUl9CS1BSQU1BTUVOKQogI2RlZmluZSBfX0hBTF9SQ0NfQktQUkFNX0NMS0FNX0VOQUJMRSgpICAgICAgICAgICAoUkNDLT5EM0FNUikgfD0gKFJDQ19EM0FNUl9CS1BSQU1BTUVOKQogI2VuZGlmCkBAIC02NzMzLDYgKzcwMDAsOSBAQAogI2lmIGRlZmluZWQoQURDMykKICNkZWZpbmUgX19IQUxfUkNDX0FEQzNfQ0xLQU1fRElTQUJMRSgpICAgICAgICAgICAgIChSQ0MtPkQzQU1SKSAmPSB+IChSQ0NfRDNBTVJfQURDM0FNRU4pCiAjZW5kaWYKKyNpZiBkZWZpbmVkKFJDQ19EM0FNUl9EVFNBTUVOKQorI2RlZmluZSBfX0hBTF9SQ0NfRFRTX0NMS0FNX0RJU0FCTEUoKSAgICAgICAgICAgICAgKFJDQy0+RDNBTVIpICY9IH4gKFJDQ19EM0FNUl9EVFNBTUVOKQorI2VuZGlmCiAjaWYgZGVmaW5lZChSQ0NfRDNBTVJfQktQUkFNQU1FTikKICNkZWZpbmUgX19IQUxfUkNDX0JLUFJBTV9DTEtBTV9ESVNBQkxFKCkgICAgICAgICAgIChSQ0MtPkQzQU1SKSAmPSB+IChSQ0NfRDNBTVJfQktQUkFNQU1FTikKICNlbmRpZgpAQCAtNjc4OCwxMiArNzA1OCw3IEBACiAKIAogI2lmIGRlZmluZWQoUkNDX0NLR0FFTlJfQVhJQ0tHKQotICAgIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBSQ0NfQ0tHQUVOUiBiaXRzIChBWEkgY2xvY2tzIGdhdGluZyBlbmFibGUgcmVnaXN0ZXIpLgotICAqIEBub3RlCi0gICogQG5vdGUKLSAgKiBAbm90ZQotICAqIEBwYXJhbQotICAqIEBub3RlCisvKiogQGJyaWVmICBNYWNybyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgUkNDX0NLR0FFTlIgYml0cyAoQVhJIGNsb2NrcyBnYXRpbmcgZW5hYmxlIHJlZ2lzdGVyKS4KICAgKi8KIAogI2RlZmluZSBfX0hBTF9SQ0NfQVhJX0NMS0dBX0VOQUJMRSgpICAgICAgICAgICAgIChSQ0MtPkNLR0FFTlIpIHw9IChSQ0NfQ0tHQUVOUl9BWElDS0cpCkBAIC02OTA5LDggKzcxNzQsMTUgQEAKICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICBpZihIQUxfR2V0UkVWSUQoKSA8PSBSRVZfSURfWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZigoX19IU0lDYWxpYnJhdGlvblZhbHVlX18pID09IFJDQ19IU0lDQUxJQlJBVElPTl9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+SFNJQ0ZHUiwgSEFMX1JDQ19SRVZfWV9IU0lUUklNX01zaywgKCh1aW50MzJfdCkweDIwKSA8PCBIQUxfUkNDX1JFVl9ZX0hTSVRSSU1fUG9zKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5IU0lDRkdSLCBIQUxfUkNDX1JFVl9ZX0hTSVRSSU1fTXNrLCAodWludDMyX3QpKF9fSFNJQ2FsaWJyYXRpb25WYWx1ZV9fKSA8PCBIQUxfUkNDX1JFVl9ZX0hTSVRSSU1fUG9zKTsgICAgXAogICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+SFNJQ0ZHUiwgUkNDX0hTSUNGR1JfSFNJVFJJTSwgKHVpbnQzMl90KShfX0hTSUNhbGlicmF0aW9uVmFsdWVfXykgPDwgUkNDX0hTSUNGR1JfSFNJVFJJTV9Qb3MpOyAgICAgICAgICAgIFwKQEAgLTY5NzUsNyArNzI0NywxNCBAQAogICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgaWYoSEFMX0dldFJFVklEKCkgPD0gUkVWX0lEX1kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkhTSUNGR1IsIEhBTF9SQ0NfUkVWX1lfQ1NJVFJJTV9Nc2ssICh1aW50MzJfdCkoX19DU0lDYWxpYnJhdGlvblZhbHVlX18pIDw8IEhBTF9SQ0NfUkVWX1lfQ1NJVFJJTV9Qb3MpOyAgICBcCisgICAgICAgICAgICAgICAgaWYoKF9fQ1NJQ2FsaWJyYXRpb25WYWx1ZV9fKSA9PSBSQ0NfQ1NJQ0FMSUJSQVRJT05fREVGQVVMVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkhTSUNGR1IsIEhBTF9SQ0NfUkVWX1lfQ1NJVFJJTV9Nc2ssICgodWludDMyX3QpMHgxMCkgPDwgSEFMX1JDQ19SRVZfWV9DU0lUUklNX1Bvcyk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+SFNJQ0ZHUiwgSEFMX1JDQ19SRVZfWV9DU0lUUklNX01zaywgKHVpbnQzMl90KShfX0NTSUNhbGlicmF0aW9uVmFsdWVfXykgPDwgSEFMX1JDQ19SRVZfWV9DU0lUUklNX1Bvcyk7IFwKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNzI0MiwxMSArNzUyMSwxMyBAQAogICAqICAgICAgICAoVGhlIGNrX3BsbF9wIG9mIHRoZSBTeXN0ZW0gUExMIGNhbm5vdCBiZSBzdG9wcGVkIGlmIHVzZWQgYXMgU3lzdGVtIENsb2NrKS4KICAgKiBAcGFyYW0gIF9fUkNDX1BMTDFDbG9ja091dF9fOiBzcGVjaWZpZXMgdGhlIFBMTCBjbG9jayB0byBiZSBvdXRwdXR0ZWQKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgICAgQGFyZyBSQ0NfUExMMV9ESVZQOiBUaGlzIGNsb2NrIGlzIHVzZWQgdG8gZ2VuZXJhdGUgc3lzdGVtIGNsb2NrIHVwIHRvIDQwME1IWiBvciAyODBNSFooKikKLSAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDFfRElWUTogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrIHVwIHRvIDQwME1IWiBvciAyODBNSFooKikKLSAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDFfRElWUjogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrIHVwIHRvIDQwME1IWiBvciAyODBNSFooKikKKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDFfRElWUDogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHN5c3RlbSBjbG9jayB1cCB0byA1NTBNSFooKiksIDQ4ME1IWigqKikgb3IgMjgwTUhaKCoqKikKKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDFfRElWUTogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrIHVwIHRvIDU1ME1IWigqKSwgNDgwTUhaKCoqKSBvciAyODBNSFooKioqKQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfUExMMV9ESVZSOiBUaGlzIGNsb2NrIGlzIHVzZWQgdG8gZ2VuZXJhdGUgcGVyaXBoZXJhbHMgY2xvY2sgdXAgdG8gNTUwTUhaKCopLCA0ODBNSFooKiopIG9yIDI4ME1IWigqKiopCiAgICoKLSAgKiAoKikgOiBGb3Igc3RtMzJoN2EzeHggYW5kIHN0bTMyaDdiM3h4IGZhbWlseSBsaW5lcy4KKyAgKiAoKikgOiBGb3Igc3RtMzJoNzJ4eHggYW5kIHN0bTMyaDczeHh4IGZhbWlseSBsaW5lcyBhbmQgcmVxdWlyZXMgdG8gZW5hYmxlIHRoZSBDUFVfRlJFUV9CT09TVCBmbGFzaCBvcHRpb24gYnl0ZSwgNTIwTUhaIG90aGVyd2lzZS4KKyAgKiAoKiopIDogRm9yIHN0bTMyaDc0eHggYW5kIHN0bTMyaDc1eHggZmFtaWx5IGxpbmVzIGFuZCByZXF1aXJlcyB0aGUgYm9hcmQgdG8gYmUgY29ubmVjdGVkIG9uIExETyByZWd1bGF0b3Igbm90IFNNUFMsIDQwME1IWiBvdGhlcndpc2UuCisgICogKCoqKik6IEZvciBzdG0zMmg3YTN4eCwgc3RtMzJoN2IzeHggYW5kIHN0bTMyaDdiMHh4IGZhbWlseSBsaW5lcy4KICAgKgogICAqIEByZXR2YWwgTm9uZQogICAqLwpAQCAtNzI4OCw3ICs3NTY5LDcgQEAKICAgKiAgICAgICAgIGJldHdlZW4gMTkyIGFuZCA4MzYgTUhaIG9yIGJldHdlZW4gMTI4IGFuZCA1NjAgTUhaKCopICh3aGVuIGluIHdpZGUgVkNPIHJhbmdlKQogICAqCiAgICogQHBhcmFtICBfX1BMTFAxX186IHNwZWNpZmllcyB0aGUgZGl2aXNpb24gZmFjdG9yIGZvciBzeXN0ZW0gIGNsb2NrLgotICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAyIGFuZCAxMjggKHdoZXJlIG9kZCBudW1iZXJzIGFyZSBub3QgYWxsb3dlZCkKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMiBvciAxKCoqKSBhbmQgMTI4ICh3aGVyZSBvZGQgbnVtYmVycyBhcmUgbm90IGFsbG93ZWQpIAogICAqCiAgICogQHBhcmFtICBfX1BMTFExX186IHNwZWNpZmllcyB0aGUgZGl2aXNpb24gZmFjdG9yIGZvciBwZXJpcGhlcmFsIGtlcm5lbCBjbG9ja3MKICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgMTI4CkBAIC03MzAyLDYgKzc1ODMsNyBAQAogICAqIEByZXR2YWwgTm9uZQogICAqCiAgICogICgqKSA6IEZvciBzdG0zMmg3YTN4eCBhbmQgc3RtMzJoN2IzeHggZmFtaWx5IGxpbmVzLgorICAqICAoKiopOiBGb3Igc3RtMzJoNzJ4eHggYW5kIHN0bTMyaDczeHh4IGZhbWlseSBsaW5lcy4KICAgKi8KIAogCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9yY2NfZXguaCBiL0luYy9zdG0zMmg3eHhfaGFsX3JjY19leC5oCmluZGV4IDlkNjJlOWUuLmNhYjYwMzkgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsX3JjY19leC5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX3JjY19leC5oCkBAIC02LDcgKzYsNyBAQAogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCiAgICoKLSAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4KKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KICAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CiAgICoKICAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKQEAgLTIyNyw4ICsyMjcsMTMgQEAKICAgIHVpbnQzMl90IFJuZ0Nsb2NrU2VsZWN0aW9uOyAgICAgIC8qITwgU3BlY2lmaWVzIFJORyBjbG9jayBzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJDQ0V4X1JOR19DbG9ja19Tb3VyY2UgICAgICovCiAKKyNpZiBkZWZpbmVkKEkyQzUpCisgICB1aW50MzJfdCBJMmMxMjM1Q2xvY2tTZWxlY3Rpb247ICAvKiE8IFNwZWNpZmllcyBJMkMxLzIvMy81IGNsb2NrIHNvdXJjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUkNDRXhfSTJDMTIzNV9DbG9ja19Tb3VyY2UgICAgKi8KKyNlbHNlIAogICAgdWludDMyX3QgSTJjMTIzQ2xvY2tTZWxlY3Rpb247ICAgLyohPCBTcGVjaWZpZXMgSTJDMS8yLzMgY2xvY2sgc291cmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSQ0NFeF9JMkMxMjNfQ2xvY2tfU291cmNlICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSQ0NFeF9JMkMxMjM1X0Nsb2NrX1NvdXJjZSAgICAqLworI2VuZGlmIC8qSTJDNSovCiAKICAgdWludDMyX3QgVXNiQ2xvY2tTZWxlY3Rpb247ICAgICAgLyohPCBTcGVjaWZpZXMgVVNCIGNsb2NrIHNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUkNDRXhfVVNCX0Nsb2NrX1NvdXJjZSAgICAgKi8KQEAgLTI3Niw2ICsyODEsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUkNDRXhfVElNX1ByZXNjYWxlcl9TZWxlY3Rpb24gKi8KIH1SQ0NfUGVyaXBoQ0xLSW5pdFR5cGVEZWY7CiAKKy8qITwgQWxpYXMgZm9yIEludGVyIFNUTTMySDcgbGluZXMgY29tcGF0aWJpbGl0eSByZWdhcmRpbmcgUkNDX1BlcmlwaENMS0luaXRUeXBlRGVmIGZpZWxkIDogSTJDNSBhdmFpbGFibGUgb24gc29tZSBsaW5lcyBvbmx5ICAqLworI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgSTJjMTIzQ2xvY2tTZWxlY3Rpb24gSTJjMTIzNUNsb2NrU2VsZWN0aW9uCisjZWxzZQorI2RlZmluZSBJMmMxMjM1Q2xvY2tTZWxlY3Rpb24gSTJjMTIzQ2xvY2tTZWxlY3Rpb24KKyNlbmRpZiAvKkkyQzUqLworCiAKIC8qKgogICAqIEBicmllZiBSQ0NfQ1JTIEluaXQgc3RydWN0dXJlIGRlZmluaXRpb24KQEAgLTM2MiwxMSArMzc0LDIzIEBACiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfVUFSVDcgICAgICAgICAgICBSQ0NfUEVSSVBIQ0xLX1VTQVJUMjM0NTc4CiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfVUFSVDggICAgICAgICAgICBSQ0NfUEVSSVBIQ0xLX1VTQVJUMjM0NTc4CiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfTFBVQVJUMSAgICAgICAgICAoMHgwMDAwMDAwNFUpCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX0kyQzEyMzUgICAgICAgICAgKDB4MDAwMDAwMDhVKQorI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX0kyQzEgICAgICAgICAgICAgUkNDX1BFUklQSENMS19JMkMxMjM1CisjZGVmaW5lIFJDQ19QRVJJUEhDTEtfSTJDMiAgICAgICAgICAgICBSQ0NfUEVSSVBIQ0xLX0kyQzEyMzUKKyNkZWZpbmUgUkNDX1BFUklQSENMS19JMkMzICAgICAgICAgICAgIFJDQ19QRVJJUEhDTEtfSTJDMTIzNQorLyogYWxpYXMgKi8KKyNkZWZpbmUgUkNDX1BFUklQSENMS19JMkMxMjMgICAgICAgICAgIFJDQ19QRVJJUEhDTEtfSTJDMTIzNQorI2Vsc2UKICNkZWZpbmUgUkNDX1BFUklQSENMS19JMkMxMjMgICAgICAgICAgICgweDAwMDAwMDA4VSkKICNkZWZpbmUgUkNDX1BFUklQSENMS19JMkMxICAgICAgICAgICAgIFJDQ19QRVJJUEhDTEtfSTJDMTIzCiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfSTJDMiAgICAgICAgICAgICBSQ0NfUEVSSVBIQ0xLX0kyQzEyMwogI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX0kyQzMgICAgICAgICAgICAgUkNDX1BFUklQSENMS19JMkMxMjMKKyNlbmRpZiAvKkkyQzUqLwogI2RlZmluZSBSQ0NfUEVSSVBIQ0xLX0kyQzQgICAgICAgICAgICAgKDB4MDAwMDAwMTBVKQorI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgUkNDX1BFUklQSENMS19JMkM1ICAgICAgICAgICAgIFJDQ19QRVJJUEhDTEtfSTJDMTIzNQorI2VuZGlmIC8qSTJDNSovCiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfTFBUSU0xICAgICAgICAgICAoMHgwMDAwMDAyMFUpCiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfTFBUSU0yICAgICAgICAgICAoMHgwMDAwMDA0MFUpCiAjZGVmaW5lIFJDQ19QRVJJUEhDTEtfTFBUSU0zNDUgICAgICAgICAoMHgwMDAwMDA4MFUpCkBAIC01MTcsNyArNTQxLDcgQEAKICNkZWZpbmUgUkNDX1VTQVJUMTZDTEtTT1VSQ0VfQ1NJICAgICAgICAgIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMXzIKICNkZWZpbmUgUkNDX1VTQVJUMTZDTEtTT1VSQ0VfTFNFICAgICAgICAgKFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMXzAgfCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNlNFTF8yKQogCi0jZWxzZQorI2VsaWYgZGVmaW5lZChSQ0NfQ0RDQ0lQMlJfVVNBUlQxNjkxMFNFTCkKICNkZWZpbmUgUkNDX1VTQVJUMTY5MTBDTEtTT1VSQ0VfQ0RQQ0xLMiAgICgweDAwMDAwMDAwVSkKIC8qIGFsaWFzICovCiAjZGVmaW5lIFJDQ19VU0FSVDE2OTEwQ0xLU09VUkNFX0QyUENMSzIgICBSQ0NfVVNBUlQxNjkxMENMS1NPVVJDRV9DRFBDTEsyCkBAIC01MzYsNiArNTYwLDIzIEBACiAjZGVmaW5lIFJDQ19VU0FSVDE2Q0xLU09VUkNFX0hTSSAgICAgICAgIFJDQ19VU0FSVDE2OTEwQ0xLU09VUkNFX0hTSQogI2RlZmluZSBSQ0NfVVNBUlQxNkNMS1NPVVJDRV9DU0kgICAgICAgICBSQ0NfVVNBUlQxNjkxMENMS1NPVVJDRV9DU0kKICNkZWZpbmUgUkNDX1VTQVJUMTZDTEtTT1VSQ0VfTFNFICAgICAgICAgUkNDX1VTQVJUMTY5MTBDTEtTT1VSQ0VfTFNFCisKKyNlbHNlICAvKiBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTCAqLworI2RlZmluZSBSQ0NfVVNBUlQxNjkxMENMS1NPVVJDRV9EMlBDTEsyICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBSQ0NfVVNBUlQxNjkxMENMS1NPVVJDRV9QTEwyICAgICAgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUxfMAorI2RlZmluZSBSQ0NfVVNBUlQxNjkxMENMS1NPVVJDRV9QTEwzICAgICAgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUxfMQorI2RlZmluZSBSQ0NfVVNBUlQxNjkxMENMS1NPVVJDRV9IU0kgICAgICAoUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUxfMCB8IFJDQ19EMkNDSVAyUl9VU0FSVDE2OTEwU0VMXzEpCisjZGVmaW5lIFJDQ19VU0FSVDE2OTEwQ0xLU09VUkNFX0NTSSAgICAgICBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTF8yCisjZGVmaW5lIFJDQ19VU0FSVDE2OTEwQ0xLU09VUkNFX0xTRSAgICAgIChSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTF8wIHwgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUxfMikKKworLyogIEFsaWFzZXMgKi8KKyNkZWZpbmUgUkNDX1VTQVJUMTZDTEtTT1VSQ0VfRDJQQ0xLMiAgICAgUkNDX1VTQVJUMTY5MTBDTEtTT1VSQ0VfRDJQQ0xLMgorI2RlZmluZSBSQ0NfVVNBUlQxNkNMS1NPVVJDRV9QQ0xLMiAgICAgICBSQ0NfVVNBUlQxNjkxMENMS1NPVVJDRV9EMlBDTEsyCisjZGVmaW5lIFJDQ19VU0FSVDE2Q0xLU09VUkNFX1BMTDIgICAgICAgIFJDQ19VU0FSVDE2OTEwQ0xLU09VUkNFX1BMTDIKKyNkZWZpbmUgUkNDX1VTQVJUMTZDTEtTT1VSQ0VfUExMMyAgICAgICAgUkNDX1VTQVJUMTY5MTBDTEtTT1VSQ0VfUExMMworI2RlZmluZSBSQ0NfVVNBUlQxNkNMS1NPVVJDRV9IU0kgICAgICAgICBSQ0NfVVNBUlQxNjkxMENMS1NPVVJDRV9IU0kKKyNkZWZpbmUgUkNDX1VTQVJUMTZDTEtTT1VSQ0VfQ1NJICAgICAgICAgUkNDX1VTQVJUMTY5MTBDTEtTT1VSQ0VfQ1NJCisjZGVmaW5lIFJDQ19VU0FSVDE2Q0xLU09VUkNFX0xTRSAgICAgICAgIFJDQ19VU0FSVDE2OTEwQ0xLU09VUkNFX0xTRQogI2VuZGlmIC8qIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMICovCiAvKioKICAgKiBAfQpAQCAtNzM2LDcgKzc3Nyw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSQ0NFeF9JMkMxMjNfQ2xvY2tfU291cmNlICBSQ0NFeCBJMkMxLzIvMyBDbG9jayBTb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDRXhfSTJDMTIzNV9DbG9ja19Tb3VyY2UgIFJDQ0V4IEkyQzEvMi8zLzUgQ2xvY2sgU291cmNlCiAgICogQHsKICAgKi8KICNpZiBkZWZpbmVkIChSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMKQpAQCAtNzQ0LDEzICs3ODUsMzMgQEAKICNkZWZpbmUgUkNDX0kyQzEyM0NMS1NPVVJDRV9QTEwzICAgICAgICAgUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTF8wCiAjZGVmaW5lIFJDQ19JMkMxMjNDTEtTT1VSQ0VfSFNJICAgICAgICAgIFJDQ19EMkNDSVAyUl9JMkMxMjNTRUxfMQogI2RlZmluZSBSQ0NfSTJDMTIzQ0xLU09VUkNFX0NTSSAgICAgICAgIChSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMXzAgfCBSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMXzEpCi0jZWxzZQorLyogYWxpYXNlcyAqLworI2RlZmluZSBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9EMlBDTEsxICAgICBSQ0NfSTJDMTIzQ0xLU09VUkNFX0QyUENMSzEKKyNkZWZpbmUgUkNDX0kyQzEyMzVDTEtTT1VSQ0VfUExMMyAgICAgICAgUkNDX0kyQzEyM0NMS1NPVVJDRV9QTEwzCisjZGVmaW5lIFJDQ19JMkMxMjM1Q0xLU09VUkNFX0hTSSAgICAgICAgIFJDQ19JMkMxMjNDTEtTT1VSQ0VfSFNJCisjZGVmaW5lIFJDQ19JMkMxMjM1Q0xLU09VUkNFX0NTSSAgICAgICAgIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ1NJCisjZWxpZiBkZWZpbmVkKFJDQ19DRENDSVAyUl9JMkMxMjNTRUwpCiAjZGVmaW5lIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ0RQQ0xLMSAgICAgICgweDAwMDAwMDAwVSkKIC8qIGFsaWFzICovCiAjZGVmaW5lIFJDQ19JMkMxMjNDTEtTT1VSQ0VfRDJQQ0xLMSAgICAgIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ0RQQ0xLMQogI2RlZmluZSBSQ0NfSTJDMTIzQ0xLU09VUkNFX1BMTDMgICAgICAgICBSQ0NfQ0RDQ0lQMlJfSTJDMTIzU0VMXzAKICNkZWZpbmUgUkNDX0kyQzEyM0NMS1NPVVJDRV9IU0kgICAgICAgICAgUkNDX0NEQ0NJUDJSX0kyQzEyM1NFTF8xCiAjZGVmaW5lIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ1NJICAgICAgICAgKFJDQ19DRENDSVAyUl9JMkMxMjNTRUxfMCB8IFJDQ19DRENDSVAyUl9JMkMxMjNTRUxfMSkKKy8qIGFsaWFzZXMgKi8KKyNkZWZpbmUgUkNDX0kyQzEyMzVDTEtTT1VSQ0VfRDJQQ0xLMSAgICAgUkNDX0kyQzEyM0NMS1NPVVJDRV9EMlBDTEsxCisjZGVmaW5lIFJDQ19JMkMxMjM1Q0xLU09VUkNFX1BMTDMgICAgICAgIFJDQ19JMkMxMjNDTEtTT1VSQ0VfUExMMworI2RlZmluZSBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9IU0kgICAgICAgICBSQ0NfSTJDMTIzQ0xLU09VUkNFX0hTSQorI2RlZmluZSBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9DU0kgICAgICAgICBSQ0NfSTJDMTIzQ0xLU09VUkNFX0NTSQorI2VsaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9EMlBDTEsxICAgICAgKDB4MDAwMDAwMDBVKQorI2RlZmluZSBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9QTEwzICAgICAgICBSQ0NfRDJDQ0lQMlJfSTJDMTIzNVNFTF8wCisjZGVmaW5lIFJDQ19JMkMxMjM1Q0xLU09VUkNFX0hTSSAgICAgICAgIFJDQ19EMkNDSVAyUl9JMkMxMjM1U0VMXzEKKyNkZWZpbmUgUkNDX0kyQzEyMzVDTEtTT1VSQ0VfQ1NJICAgICAgICAgKFJDQ19EMkNDSVAyUl9JMkMxMjM1U0VMXzAgfCBSQ0NfRDJDQ0lQMlJfSTJDMTIzNVNFTF8xKQorLyogYWxpYXNlcyAqLworI2RlZmluZSBSQ0NfSTJDMTIzQ0xLU09VUkNFX0QyUENMSzEgICAgICBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9EMlBDTEsxCisjZGVmaW5lIFJDQ19JMkMxMjNDTEtTT1VSQ0VfUExMMyAgICAgICAgIFJDQ19JMkMxMjM1Q0xLU09VUkNFX1BMTDMKKyNkZWZpbmUgUkNDX0kyQzEyM0NMS1NPVVJDRV9IU0kgICAgICAgICAgUkNDX0kyQzEyMzVDTEtTT1VSQ0VfSFNJCisjZGVmaW5lIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ1NJICAgICAgICAgIFJDQ19JMkMxMjM1Q0xLU09VUkNFX0NTSQogI2VuZGlmIC8qIFJDQ19EMkNDSVAyUl9JMkMxMjNTRUwgKi8KIC8qKgogICAqIEB9CkBAIC03NTksMTAgKzgyMCwxNyBAQAogLyoqIEBkZWZncm91cCBSQ0NFeF9JMkMxX0Nsb2NrX1NvdXJjZSAgUkNDRXggSTJDMSBDbG9jayBTb3VyY2UKICAgKiBAewogICAqLworI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgUkNDX0kyQzFDTEtTT1VSQ0VfRDJQQ0xLMSAgICAgUkNDX0kyQzEyMzVDTEtTT1VSQ0VfRDJQQ0xLMQorI2RlZmluZSBSQ0NfSTJDMUNMS1NPVVJDRV9QTEwzICAgICAgICBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9QTEwzCisjZGVmaW5lIFJDQ19JMkMxQ0xLU09VUkNFX0hTSSAgICAgICAgIFJDQ19JMkMxMjM1Q0xLU09VUkNFX0hTSQorI2RlZmluZSBSQ0NfSTJDMUNMS1NPVVJDRV9DU0kgICAgICAgICBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9DU0kKKyNlbHNlCiAjZGVmaW5lIFJDQ19JMkMxQ0xLU09VUkNFX0QyUENMSzEgICAgIFJDQ19JMkMxMjNDTEtTT1VSQ0VfRDJQQ0xLMQogI2RlZmluZSBSQ0NfSTJDMUNMS1NPVVJDRV9QTEwzICAgICAgICBSQ0NfSTJDMTIzQ0xLU09VUkNFX1BMTDMKICNkZWZpbmUgUkNDX0kyQzFDTEtTT1VSQ0VfSFNJICAgICAgICAgUkNDX0kyQzEyM0NMS1NPVVJDRV9IU0kKICNkZWZpbmUgUkNDX0kyQzFDTEtTT1VSQ0VfQ1NJICAgICAgICAgUkNDX0kyQzEyM0NMS1NPVVJDRV9DU0kKKyNlbmRpZiAvKkkyQzUqLwogCiAvKioKICAgKiBAfQpAQCAtNzcxLDEwICs4MzksMTcgQEAKIC8qKiBAZGVmZ3JvdXAgUkNDRXhfSTJDMl9DbG9ja19Tb3VyY2UgIFJDQ0V4IEkyQzIgQ2xvY2sgU291cmNlCiAgICogQHsKICAgKi8KKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIFJDQ19JMkMyQ0xLU09VUkNFX0QyUENMSzEgICAgIFJDQ19JMkMxMjM1Q0xLU09VUkNFX0QyUENMSzEKKyNkZWZpbmUgUkNDX0kyQzJDTEtTT1VSQ0VfUExMMyAgICAgICAgUkNDX0kyQzEyMzVDTEtTT1VSQ0VfUExMMworI2RlZmluZSBSQ0NfSTJDMkNMS1NPVVJDRV9IU0kgICAgICAgICBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9IU0kKKyNkZWZpbmUgUkNDX0kyQzJDTEtTT1VSQ0VfQ1NJICAgICAgICAgUkNDX0kyQzEyMzVDTEtTT1VSQ0VfQ1NJCisjZWxzZQogI2RlZmluZSBSQ0NfSTJDMkNMS1NPVVJDRV9EMlBDTEsxICAgICBSQ0NfSTJDMTIzQ0xLU09VUkNFX0QyUENMSzEKICNkZWZpbmUgUkNDX0kyQzJDTEtTT1VSQ0VfUExMMyAgICAgICAgUkNDX0kyQzEyM0NMS1NPVVJDRV9QTEwzCiAjZGVmaW5lIFJDQ19JMkMyQ0xLU09VUkNFX0hTSSAgICAgICAgIFJDQ19JMkMxMjNDTEtTT1VSQ0VfSFNJCiAjZGVmaW5lIFJDQ19JMkMyQ0xLU09VUkNFX0NTSSAgICAgICAgIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ1NJCisjZW5kaWYgLypJMkM1Ki8KIAogLyoqCiAgICogQH0KQEAgLTc4MywxMCArODU4LDE3IEBACiAvKiogQGRlZmdyb3VwIFJDQ0V4X0kyQzNfQ2xvY2tfU291cmNlICBSQ0NFeCBJMkMzIENsb2NrIFNvdXJjZQogICAqIEB7CiAgICovCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBSQ0NfSTJDM0NMS1NPVVJDRV9EMlBDTEsxICAgICBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9EMlBDTEsxCisjZGVmaW5lIFJDQ19JMkMzQ0xLU09VUkNFX1BMTDMgICAgICAgIFJDQ19JMkMxMjM1Q0xLU09VUkNFX1BMTDMKKyNkZWZpbmUgUkNDX0kyQzNDTEtTT1VSQ0VfSFNJICAgICAgICAgUkNDX0kyQzEyMzVDTEtTT1VSQ0VfSFNJCisjZGVmaW5lIFJDQ19JMkMzQ0xLU09VUkNFX0NTSSAgICAgICAgIFJDQ19JMkMxMjM1Q0xLU09VUkNFX0NTSQorI2Vsc2UKICNkZWZpbmUgUkNDX0kyQzNDTEtTT1VSQ0VfRDJQQ0xLMSAgICAgUkNDX0kyQzEyM0NMS1NPVVJDRV9EMlBDTEsxCiAjZGVmaW5lIFJDQ19JMkMzQ0xLU09VUkNFX1BMTDMgICAgICAgIFJDQ19JMkMxMjNDTEtTT1VSQ0VfUExMMwogI2RlZmluZSBSQ0NfSTJDM0NMS1NPVVJDRV9IU0kgICAgICAgICBSQ0NfSTJDMTIzQ0xLU09VUkNFX0hTSQogI2RlZmluZSBSQ0NfSTJDM0NMS1NPVVJDRV9DU0kgICAgICAgICBSQ0NfSTJDMTIzQ0xLU09VUkNFX0NTSQorI2VuZGlmIC8qSTJDNSovCiAKIC8qKgogICAqIEB9CkBAIC04MTIsNiArODk0LDE5IEBACiAvKioKICAgKiBAfQogICAqLworI2lmIGRlZmluZWQoSTJDNSkKKy8qKiBAZGVmZ3JvdXAgUkNDRXhfSTJDNV9DbG9ja19Tb3VyY2UgIFJDQ0V4IEkyQzUgQ2xvY2sgU291cmNlCisgICogQHsKKyAgKi8KKyNkZWZpbmUgUkNDX0kyQzVDTEtTT1VSQ0VfRDJQQ0xLMSAgICAgIFJDQ19JMkMxMjM1Q0xLU09VUkNFX0QyUENMSzEKKyNkZWZpbmUgUkNDX0kyQzVDTEtTT1VSQ0VfUExMMyAgICAgICAgIFJDQ19JMkMxMjM1Q0xLU09VUkNFX1BMTDMKKyNkZWZpbmUgUkNDX0kyQzVDTEtTT1VSQ0VfSFNJICAgICAgICAgIFJDQ19JMkMxMjM1Q0xLU09VUkNFX0hTSQorI2RlZmluZSBSQ0NfSTJDNUNMS1NPVVJDRV9DU0kgICAgICAgICAgUkNDX0kyQzEyMzVDTEtTT1VSQ0VfQ1NJCisKKy8qKgorICAqIEB9CisgICovCisjZW5kaWYgLypJMkM1Ki8KIAogLyoqIEBkZWZncm91cCBSQ0NFeF9STkdfQ2xvY2tfU291cmNlICBSQ0NFeCBSTkcgQ2xvY2sgU291cmNlCiAgICogQHsKQEAgLTkyMSw3ICsxMDE2LDcgQEAKICNlbmRpZiAvKiBTQUkzICovCiAKICNpZiBkZWZpbmVkKFJDQ19DRENDSVAxUl9TQUkyQVNFTCkKLS8qKiBAZGVmZ3JvdXAgUkNDRXhfU0FJMl9DbG9ja19BIFNvdXJjZSBTQUkyQSBDbG9jayBTb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDRXhfU0FJMkFfQ2xvY2tfU291cmNlIFNBSTJBIENsb2NrIFNvdXJjZQogICAqIEB7CiAgICovCiAjZGVmaW5lIFJDQ19TQUkyQUNMS1NPVVJDRV9QTEwgICAgICAgICAoMHgwMDAwMDAwMFUpCkBAIC05MzYsNyArMTAzMSw3IEBACiAjZW5kaWYgLyogUkNDX0NEQ0NJUDFSX1NBSTJBU0VMICovCiAKICNpZiBkZWZpbmVkKFJDQ19DRENDSVAxUl9TQUkyQlNFTCkKLS8qKiBAZGVmZ3JvdXAgUkNDRXhfU0FJMl9CbG9ja19CIENsb2NrX1NvdXJjZSBTQUkyQiBDbG9jayBTb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDRXhfU0FJMkJfQ2xvY2tfU291cmNlIFNBSTJCIENsb2NrIFNvdXJjZQogICAqIEB7CiAgICovCiAjZGVmaW5lIFJDQ19TQUkyQkNMS1NPVVJDRV9QTEwgICAgICAgICAoMHgwMDAwMDAwMFUpCkBAIC0xMTAyLDYgKzExOTcsOSBAQAogI2RlZmluZSBSQ0NfU0FJNEFDTEtTT1VSQ0VfUExMMyAgICAgICAgIFJDQ19EM0NDSVBSX1NBSTRBU0VMXzEKICNkZWZpbmUgUkNDX1NBSTRBQ0xLU09VUkNFX1BJTiAgICAgICAgIChSQ0NfRDNDQ0lQUl9TQUk0QVNFTF8wIHwgUkNDX0QzQ0NJUFJfU0FJNEFTRUxfMSkKICNkZWZpbmUgUkNDX1NBSTRBQ0xLU09VUkNFX0NMS1AgICAgICAgICBSQ0NfRDNDQ0lQUl9TQUk0QVNFTF8yCisjaWYgZGVmaW5lZChSQ0NfVkVSXzNfMCkKKyNkZWZpbmUgUkNDX1NBSTRBQ0xLU09VUkNFX1NQRElGICAgICAgIChSQ0NfRDNDQ0lQUl9TQUk0QVNFTF8yIHwgUkNDX0QzQ0NJUFJfU0FJNEFTRUxfMCkKKyNlbmRpZiAvKlJDQ19WRVJfM18wKi8KIAogLyoqCiAgICogQH0KQEAgLTExMTksNiArMTIxNyw5IEBACiAjZGVmaW5lIFJDQ19TQUk0QkNMS1NPVVJDRV9QTEwzICAgICAgICAgUkNDX0QzQ0NJUFJfU0FJNEJTRUxfMQogI2RlZmluZSBSQ0NfU0FJNEJDTEtTT1VSQ0VfUElOICAgICAgICAgKFJDQ19EM0NDSVBSX1NBSTRCU0VMXzAgfCBSQ0NfRDNDQ0lQUl9TQUk0QlNFTF8xKQogI2RlZmluZSBSQ0NfU0FJNEJDTEtTT1VSQ0VfQ0xLUCAgICAgICAgIFJDQ19EM0NDSVBSX1NBSTRCU0VMXzIKKyNpZiBkZWZpbmVkKFJDQ19WRVJfM18wKQorI2RlZmluZSBSQ0NfU0FJNEJDTEtTT1VSQ0VfU1BESUYgICAgICAgKFJDQ19EM0NDSVBSX1NBSTRCU0VMXzIgfCBSQ0NfRDNDQ0lQUl9TQUk0QlNFTF8wKQorI2VuZGlmIC8qIFJDQ19WRVJfM18wICovCiAKIC8qKgogICAqIEB9CkBAIC0xMjcxLDYgKzEzNzIsOCBAQAogLyoqIEBkZWZncm91cCBSQ0NFeF9PU1BJX0Nsb2NrX1NvdXJjZSAgUkNDRXggT1NQSSBDbG9jayBTb3VyY2UKICAgKiBAewogICAqLworCisjaWYgZGVmaW5lZChSQ0NfQ0RDQ0lQUl9PQ1RPU1BJU0VMKQogI2RlZmluZSBSQ0NfT1NQSUNMS1NPVVJDRV9DREhDTEsgICAgICAgKDB4MDAwMDAwMDBVKQogLyphbGlhc2VzKi8KICNkZWZpbmUgUkNDX09TUElDTEtTT1VSQ0VfRDFIQ0xLICAgICAgIFJDQ19PU1BJQ0xLU09VUkNFX0NESENMSwpAQCAtMTI3OCw2ICsxMzgxLDE0IEBACiAjZGVmaW5lIFJDQ19PU1BJQ0xLU09VUkNFX1BMTCAgICAgICAgICBSQ0NfQ0RDQ0lQUl9PQ1RPU1BJU0VMXzAKICNkZWZpbmUgUkNDX09TUElDTEtTT1VSQ0VfUExMMiAgICAgICAgIFJDQ19DRENDSVBSX09DVE9TUElTRUxfMQogI2RlZmluZSBSQ0NfT1NQSUNMS1NPVVJDRV9DTEtQICAgICAgICAgUkNDX0NEQ0NJUFJfT0NUT1NQSVNFTAorI2Vsc2UKKyNkZWZpbmUgUkNDX09TUElDTEtTT1VSQ0VfRDFIQ0xLICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgUkNDX09TUElDTEtTT1VSQ0VfSENMSyAgICAgICAgIFJDQ19PU1BJQ0xLU09VUkNFX0QxSENMSworI2RlZmluZSBSQ0NfT1NQSUNMS1NPVVJDRV9QTEwgICAgICAgICAgUkNDX0QxQ0NJUFJfT0NUT1NQSVNFTF8wCisjZGVmaW5lIFJDQ19PU1BJQ0xLU09VUkNFX1BMTDIgICAgICAgICBSQ0NfRDFDQ0lQUl9PQ1RPU1BJU0VMXzEKKyNkZWZpbmUgUkNDX09TUElDTEtTT1VSQ0VfQ0xLUCAgICAgICAgIFJDQ19EMUNDSVBSX09DVE9TUElTRUwKKyNlbmRpZiAvKiBSQ0NfQ0RDQ0lQUl9PQ1RPU1BJU0VMICovCisKIAogLyoqCiAgICogQH0KQEAgLTE1MTQsNyArMTYyNSw3IEBACiAvKiogQGRlZmdyb3VwIFJDQ0V4X0VYVElfTElORV9MU0VDU1MgIFJDQyBMU0UgQ1NTIGV4dGVybmFsIGludGVycnVwdCBsaW5lCiAgICogQHsKICAgKi8KLSNkZWZpbmUgUkNDX0VYVElfTElORV9MU0VDU1MgICAgICAgICAgIEVYVElfSU1SMV9JTTE4ICAgICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDE5IGNvbm5lY3RlZCB0byB0aGUgTFNFIENTUyBFWFRJIExpbmUgKi8KKyNkZWZpbmUgUkNDX0VYVElfTElORV9MU0VDU1MgICAgICAgICAgIEVYVElfSU1SMV9JTTE4ICAgICAgICAvKiE8IEV4dGVybmFsIGludGVycnVwdCBsaW5lIDE4IGNvbm5lY3RlZCB0byB0aGUgTFNFIENTUyBFWFRJIExpbmUgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNjYyLDExICsxNzczLDEzIEBACiAgICogICAgICAgICBUaGlzIGlzIG1haW5seSB1c2VkIHRvIHNhdmUgUG93ZXIuCiAgICogQHBhcmFtICBfX1JDQ19QTEwyQ2xvY2tPdXRfXyBTcGVjaWZpZXMgdGhlIFBMTDIgY2xvY2sgdG8gYmUgb3V0cHV0dGVkCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDJfRElWUDogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrIHVwIHRvIDQwME1IWiBvciAyODBNSFooKikKLSAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDJfRElWUTogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrIHVwIHRvIDQwME1IWiBvciAyODBNSFooKikKLSAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDJfRElWUjogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrIHVwIHRvIDQwME1IWiBvciAyODBNSFooKikKKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDJfRElWUDogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrIHVwIHRvIDU1ME1IWigqKSwgNDgwTUhaKCoqKSBvciAyODBNSFooKioqKQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfUExMMl9ESVZROiBUaGlzIGNsb2NrIGlzIHVzZWQgdG8gZ2VuZXJhdGUgcGVyaXBoZXJhbHMgY2xvY2sgdXAgdG8gNTUwTUhaKCopLCA0ODBNSFooKiopIG9yIDI4ME1IWigqKiopCisgICogICAgICAgICAgICBAYXJnIFJDQ19QTEwyX0RJVlI6IFRoaXMgY2xvY2sgaXMgdXNlZCB0byBnZW5lcmF0ZSBwZXJpcGhlcmFscyBjbG9jayB1cCB0byA1NTBNSFooKiksIDQ4ME1IWigqKikgb3IgMjgwTUhaKCoqKikKICAgKgotICAqICgqKSA6IEZvciBzdG0zMmg3YTN4eCBhbmQgc3RtMzJoN2IzeHggZmFtaWx5IGxpbmVzLgorICAqICgqKSA6IEZvciBzdG0zMmg3Mnh4eCBhbmQgc3RtMzJoNzN4eHggZmFtaWx5IGxpbmVzIGFuZCByZXF1aXJlcyB0byBlbmFibGUgdGhlIENQVV9GUkVRX0JPT1NUIGZsYXNoIG9wdGlvbiBieXRlLCA1MjBNSFogb3RoZXJ3aXNlLgorICAqICgqKikgOiBGb3Igc3RtMzJoNzR4eCBhbmQgc3RtMzJoNzV4eCBmYW1pbHkgbGluZXMgYW5kIHJlcXVpcmVzIHRoZSBib2FyZCB0byBiZSBjb25uZWN0ZWQgb24gTERPIHJlZ3VsYXRvciBub3QgU01QUywgNDAwTUhaIG90aGVyd2lzZS4KKyAgKiAoKioqKTogRm9yIHN0bTMyaDdhM3h4LCBzdG0zMmg3YjN4eCBhbmQgc3RtMzJoN2IweHggZmFtaWx5IGxpbmVzLgogICAqCiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC0xNzkxLDExICsxOTA0LDEzIEBACiAgICogICAgICAgICBUaGlzIGlzIG1haW5seSB1c2VkIHRvIHNhdmUgUG93ZXIuCiAgICogQHBhcmFtICBfX1JDQ19QTEwzQ2xvY2tPdXRfXyBzcGVjaWZpZXMgdGhlIFBMTDMgY2xvY2sgdG8gYmUgb3V0cHV0dGVkCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDNfRElWUDogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrIHVwIHRvIDQwME1IWiBvciAyODBNSFooKikKLSAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDNfRElWUTogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrICB1cCB0byA0MDBNSFogb3IgMjgwTUhaKCopCi0gICogICAgICAgICAgICBAYXJnIFJDQ19QTEwzX0RJVlI6IFRoaXMgY2xvY2sgaXMgdXNlZCB0byBnZW5lcmF0ZSBwZXJpcGhlcmFscyBjbG9jayB1cCB0byA0MDBNSFogb3IgMjgwTUhaKCopCisgICogICAgICAgICAgICBAYXJnIFJDQ19QTEwzX0RJVlA6IFRoaXMgY2xvY2sgaXMgdXNlZCB0byBnZW5lcmF0ZSBwZXJpcGhlcmFscyBjbG9jayB1cCB0byA1NTBNSFooKiksIDQ4ME1IWigqKikgb3IgMjgwTUhaKCoqKikKKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX1BMTDNfRElWUTogVGhpcyBjbG9jayBpcyB1c2VkIHRvIGdlbmVyYXRlIHBlcmlwaGVyYWxzIGNsb2NrIHVwIHRvIDU1ME1IWigqKSwgNDgwTUhaKCoqKSBvciAyODBNSFooKioqKQorICAqICAgICAgICAgICAgQGFyZyBSQ0NfUExMM19ESVZSOiBUaGlzIGNsb2NrIGlzIHVzZWQgdG8gZ2VuZXJhdGUgcGVyaXBoZXJhbHMgY2xvY2sgdXAgdG8gNTUwTUhaKCopLCA0ODBNSFooKiopIG9yIDI4ME1IWigqKiopCiAgICoKLSAgKiAoKikgOiBGb3Igc3RtMzJoN2EzeHggYW5kIHN0bTMyaDdiM3h4IGZhbWlseSBsaW5lcy4KKyAgKiAoKikgOiBGb3Igc3RtMzJoNzJ4eHggYW5kIHN0bTMyaDczeHh4IGZhbWlseSBsaW5lcyBhbmQgcmVxdWlyZXMgdG8gZW5hYmxlIHRoZSBDUFVfRlJFUV9CT09TVCBmbGFzaCBvcHRpb24gYnl0ZSwgNTIwTUhaIG90aGVyd2lzZS4KKyAgKiAoKiopIDogRm9yIHN0bTMyaDc0eHggYW5kIHN0bTMyaDc1eHggZmFtaWx5IGxpbmVzIGFuZCByZXF1aXJlcyB0aGUgYm9hcmQgdG8gYmUgY29ubmVjdGVkIG9uIExETyByZWd1bGF0b3Igbm90IFNNUFMsIDQwME1IWiBvdGhlcndpc2UuCisgICogKCoqKik6IEZvciBzdG0zMmg3YTN4eCwgc3RtMzJoN2IzeHggYW5kIHN0bTMyaDdiMHh4IGZhbWlseSBsaW5lcy4KICAgKgogICAqIEByZXR2YWwgTm9uZQogICAqLwpAQCAtMjEzNywzNCArMjI1Miw0NyBAQAogI2RlZmluZSBfX0hBTF9SQ0NfR0VUX1NBSTRCX1NPVVJDRSgpICgodWludDMyX3QpKFJFQURfQklUKFJDQy0+RDNDQ0lQUiwgUkNDX0QzQ0NJUFJfU0FJNEJTRUwpKSkKICNlbmRpZiAvKiBTQUk0X0Jsb2NrX0IgKi8KIAotLyoqIEBicmllZiBtYWNybyB0byBjb25maWd1cmUgdGhlIEkyQzEvMi8zIGNsb2NrIChJMkMxMjNDTEspLgorLyoqIEBicmllZiBtYWNybyB0byBjb25maWd1cmUgdGhlIEkyQzEvMi8zLzUqIGNsb2NrIChJMkMxMjNDTEspLgogICAqCi0gICogQHBhcmFtICBfX0kyQzEyM0NMS1NvdXJjZV9fIHNwZWNpZmllcyB0aGUgSTJDMS8yLzMgY2xvY2sgc291cmNlLgorICAqIEBwYXJhbSAgX19JMkMxMjM1Q0xLU291cmNlX18gc3BlY2lmaWVzIHRoZSBJMkMxLzIvMy81KiBjbG9jayBzb3VyY2UuCiAgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzEyM0NMS1NPVVJDRV9EMlBDTEsxOiBEMlBDTEsxIHNlbGVjdGVkIGFzIEkyQzEvMi8zIGNsb2NrCi0gICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxMjNDTEtTT1VSQ0VfUExMMzogUExMMyBzZWxlY3RlZCBhcyBJMkMxLzIvMyBjbG9jawotICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDMTIzQ0xLU09VUkNFX0hTSTogSFNJIHNlbGVjdGVkIGFzIEkyQzEvMi8zIGNsb2NrCi0gICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ1NJOiBDU0kgc2VsZWN0ZWQgYXMgSTJDMS8yLzMgY2xvY2sKKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzEyM0NMS1NPVVJDRV9EMlBDTEsxOiBEMlBDTEsxIHNlbGVjdGVkIGFzIEkyQzEvMi8zLzUqIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxMjNDTEtTT1VSQ0VfUExMMzogUExMMyBzZWxlY3RlZCBhcyBJMkMxLzIvMy81KiBjbG9jaworICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDMTIzQ0xLU09VUkNFX0hTSTogSFNJIHNlbGVjdGVkIGFzIEkyQzEvMi8zLzUqIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ1NJOiBDU0kgc2VsZWN0ZWQgYXMgSTJDMS8yLzMvNSogY2xvY2sKKyAgKgorICAqICgqKik6IEF2YWlsYWJsZSBvbiBzdG0zMmg3Mnh4eCBhbmQgc3RtMzJoNzN4eHggZmFtaWx5IGxpbmVzLgogICAqLwogI2lmIGRlZmluZWQoUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTCkKLSNkZWZpbmUgX19IQUxfUkNDX0kyQzEyM19DT05GSUcoX19JMkMxMjNDTEtTb3VyY2VfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkQyQ0NJUDJSLCBSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMLCAodWludDMyX3QpKF9fSTJDMTIzQ0xLU291cmNlX18pKQotI2Vsc2UKLSNkZWZpbmUgX19IQUxfUkNDX0kyQzEyM19DT05GSUcoX19JMkMxMjNDTEtTb3VyY2VfXykgXAotICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkNEQ0NJUDJSLCBSQ0NfQ0RDQ0lQMlJfSTJDMTIzU0VMLCAodWludDMyX3QpKF9fSTJDMTIzQ0xLU291cmNlX18pKQorI2RlZmluZSBfX0hBTF9SQ0NfSTJDMTIzX0NPTkZJRyhfX0kyQzEyMzVDTEtTb3VyY2VfXykgXAorICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkQyQ0NJUDJSLCBSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMLCAodWludDMyX3QpKF9fSTJDMTIzNUNMS1NvdXJjZV9fKSkKKyNlbGlmIGRlZmluZWQoUkNDX0NEQ0NJUDJSX0kyQzEyM1NFTCkKKyNkZWZpbmUgX19IQUxfUkNDX0kyQzEyM19DT05GSUcoX19JMkMxMjM1Q0xLU291cmNlX18pIFwKKyAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DRENDSVAyUiwgUkNDX0NEQ0NJUDJSX0kyQzEyM1NFTCwgKHVpbnQzMl90KShfX0kyQzEyMzVDTEtTb3VyY2VfXykpCisjZWxzZSAvKiBSQ0NfRDJDQ0lQMlJfSTJDMTIzNVNFTCAqLworI2RlZmluZSBfX0hBTF9SQ0NfSTJDMTIzNV9DT05GSUcoX19JMkMxMjM1Q0xLU291cmNlX18pIFwKKyAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5EMkNDSVAyUiwgUkNDX0QyQ0NJUDJSX0kyQzEyMzVTRUwsICh1aW50MzJfdCkoX19JMkMxMjM1Q0xLU291cmNlX18pKQorLyogYWxpYXMgKi8KKyNkZWZpbmUgX19IQUxfUkNDX0kyQzEyM19DT05GSUcgIF9fSEFMX1JDQ19JMkMxMjM1X0NPTkZJRwogI2VuZGlmIC8qIFJDQ19EMkNDSVAyUl9JMkMxMjNTRUwgKi8KIAotLyoqIEBicmllZiAgbWFjcm8gdG8gZ2V0IHRoZSBJMkMxLzIvMyBjbG9jayBzb3VyY2UuCisvKiogQGJyaWVmICBtYWNybyB0byBnZXQgdGhlIEkyQzEvMi8zLzUqIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzEyM0NMS1NPVVJDRV9EMlBDTEsxOiBEMlBDTEsxIHNlbGVjdGVkIGFzIEkyQzEvMi8zIGNsb2NrCi0gICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxMjNDTEtTT1VSQ0VfUExMMzogUExMMyBzZWxlY3RlZCBhcyBJMkMxLzIvMyBjbG9jawotICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDMTIzQ0xLU09VUkNFX0hTSTogSFNJIHNlbGVjdGVkIGFzIEkyQzEvMi8zIGNsb2NrCi0gICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ1NJOiBDU0kgc2VsZWN0ZWQgYXMgSTJDMS8yLzMgY2xvY2sKKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzEyM0NMS1NPVVJDRV9EMlBDTEsxOiBEMlBDTEsxIHNlbGVjdGVkIGFzIEkyQzEvMi8zLzUqIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxMjNDTEtTT1VSQ0VfUExMMzogUExMMyBzZWxlY3RlZCBhcyBJMkMxLzIvMy81KiBjbG9jaworICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDMTIzQ0xLU09VUkNFX0hTSTogSFNJIHNlbGVjdGVkIGFzIEkyQzEvMi8zLzUqIGNsb2NrCisgICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxMjNDTEtTT1VSQ0VfQ1NJOiBDU0kgc2VsZWN0ZWQgYXMgSTJDMS8yLzMvNSogY2xvY2sKKyAgKgorICAqICgqKik6IEF2YWlsYWJsZSBvbiBzdG0zMmg3Mnh4eCBhbmQgc3RtMzJoNzN4eHggZmFtaWx5IGxpbmVzLgogICAqLwogI2lmIGRlZmluZWQoUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTCkKICNkZWZpbmUgX19IQUxfUkNDX0dFVF9JMkMxMjNfU09VUkNFKCkgKCh1aW50MzJfdCkoUkVBRF9CSVQoUkNDLT5EMkNDSVAyUiwgUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTCkpKQotI2Vsc2UKKyNlbGlmIGRlZmluZWQoUkNDX0NEQ0NJUDJSX0kyQzEyM1NFTCkKICNkZWZpbmUgX19IQUxfUkNDX0dFVF9JMkMxMjNfU09VUkNFKCkgKCh1aW50MzJfdCkoUkVBRF9CSVQoUkNDLT5DRENDSVAyUiwgUkNDX0NEQ0NJUDJSX0kyQzEyM1NFTCkpKQorI2Vsc2UgLyogUkNDX0QyQ0NJUDJSX0kyQzEyMzVTRUwgKi8KKyNkZWZpbmUgX19IQUxfUkNDX0dFVF9JMkMxMjM1X1NPVVJDRSgpICgodWludDMyX3QpKFJFQURfQklUKFJDQy0+RDJDQ0lQMlIsIFJDQ19EMkNDSVAyUl9JMkMxMjM1U0VMKSkpCisvKiBhbGlhcyAqLworI2RlZmluZSBfX0hBTF9SQ0NfR0VUX0kyQzEyM19TT1VSQ0UgIF9fSEFMX1JDQ19HRVRfSTJDMTIzNV9TT1VSQ0UKICNlbmRpZiAvKiBSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMICovCiAKIC8qKiBAYnJpZWYgbWFjcm8gdG8gY29uZmlndXJlIHRoZSBJMkMxIGNsb2NrIChJMkMxQ0xLKS4KQEAgLTIxNzYsNyArMjMwNCwxMSBAQAogICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDMUNMS1NPVVJDRV9IU0k6IEhTSSBzZWxlY3RlZCBhcyBJMkMxIGNsb2NrCiAgICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxQ0xLU09VUkNFX0NTSTogQ1NJIHNlbGVjdGVkIGFzIEkyQzEgY2xvY2sKICAgKi8KKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX1JDQ19JMkMxX0NPTkZJRyAgX19IQUxfUkNDX0kyQzEyMzVfQ09ORklHCisjZWxzZQogI2RlZmluZSBfX0hBTF9SQ0NfSTJDMV9DT05GSUcgIF9fSEFMX1JDQ19JMkMxMjNfQ09ORklHCisjZW5kaWYgLypJMkM1Ki8KIAogLyoqIEBicmllZiAgbWFjcm8gdG8gZ2V0IHRoZSBJMkMxIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTIxODUsNyArMjMxNywxMSBAQAogICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDMUNMS1NPVVJDRV9IU0k6IEhTSSBzZWxlY3RlZCBhcyBJMkMxIGNsb2NrCiAgICogICAgICAgICAgICBAYXJnIFJDQ19JMkMxQ0xLU09VUkNFX0NTSTogQ1NJIHNlbGVjdGVkIGFzIEkyQzEgY2xvY2sKICAgKi8KKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfSTJDMV9TT1VSQ0UgX19IQUxfUkNDX0dFVF9JMkMxMjM1X1NPVVJDRQorI2Vsc2UKICNkZWZpbmUgX19IQUxfUkNDX0dFVF9JMkMxX1NPVVJDRSBfX0hBTF9SQ0NfR0VUX0kyQzEyM19TT1VSQ0UKKyNlbmRpZiAvKkkyQzUqLwogCiAvKiogQGJyaWVmIG1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgSTJDMiBjbG9jayAoSTJDMkNMSykuCiAgICoKQEAgLTIxOTYsNyArMjMzMiwxMSBAQAogICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDMkNMS1NPVVJDRV9IU0k6IEhTSSBzZWxlY3RlZCBhcyBJMkMyIGNsb2NrCiAgICogICAgICAgICAgICBAYXJnIFJDQ19JMkMyQ0xLU09VUkNFX0NTSTogQ1NJIHNlbGVjdGVkIGFzIEkyQzIgY2xvY2sKICAgKi8KKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIF9fSEFMX1JDQ19JMkMyX0NPTkZJRyBfX0hBTF9SQ0NfSTJDMTIzNV9DT05GSUcKKyNlbHNlCiAjZGVmaW5lIF9fSEFMX1JDQ19JMkMyX0NPTkZJRyBfX0hBTF9SQ0NfSTJDMTIzX0NPTkZJRworI2VuZGlmIC8qSTJDNSovCiAKIC8qKiBAYnJpZWYgIG1hY3JvIHRvIGdldCB0aGUgSTJDMiBjbG9jayBzb3VyY2UuCiAgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0yMjA1LDcgKzIzNDUsMTEgQEAKICAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzJDTEtTT1VSQ0VfSFNJOiBIU0kgc2VsZWN0ZWQgYXMgSTJDMiBjbG9jawogICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDMkNMS1NPVVJDRV9DU0k6IENTSSBzZWxlY3RlZCBhcyBJMkMyIGNsb2NrCiAgICovCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBfX0hBTF9SQ0NfR0VUX0kyQzJfU09VUkNFIF9fSEFMX1JDQ19HRVRfSTJDMTIzNV9TT1VSQ0UKKyNlbHNlCiAjZGVmaW5lIF9fSEFMX1JDQ19HRVRfSTJDMl9TT1VSQ0UgX19IQUxfUkNDX0dFVF9JMkMxMjNfU09VUkNFCisjZW5kaWYgLypJMkM1Ki8KIAogLyoqIEBicmllZiBtYWNybyB0byBjb25maWd1cmUgdGhlIEkyQzMgY2xvY2sgKEkyQzNDTEspLgogICAqCkBAIC0yMjE2LDcgKzIzNjAsMTEgQEAKICAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzNDTEtTT1VSQ0VfSFNJOiBIU0kgc2VsZWN0ZWQgYXMgSTJDMyBjbG9jawogICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDM0NMS1NPVVJDRV9DU0k6IENTSSBzZWxlY3RlZCBhcyBJMkMzIGNsb2NrCiAgICovCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBfX0hBTF9SQ0NfSTJDM19DT05GSUcgX19IQUxfUkNDX0kyQzEyMzVfQ09ORklHCisjZWxzZQogI2RlZmluZSBfX0hBTF9SQ0NfSTJDM19DT05GSUcgX19IQUxfUkNDX0kyQzEyM19DT05GSUcKKyNlbmRpZiAvKkkyQzUqLwogCiAvKiogQGJyaWVmICBtYWNybyB0byBnZXQgdGhlIEkyQzMgY2xvY2sgc291cmNlLgogICAqIEByZXR2YWwgVGhlIGNsb2NrIHNvdXJjZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMjIyNSw3ICsyMzczLDExIEBACiAgICogICAgICAgICAgICBAYXJnIFJDQ19JMkMzQ0xLU09VUkNFX0hTSTogSFNJIHNlbGVjdGVkIGFzIEkyQzMgY2xvY2sKICAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzNDTEtTT1VSQ0VfQ1NJOiBDU0kgc2VsZWN0ZWQgYXMgSTJDMyBjbG9jawogICAqLworI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgX19IQUxfUkNDX0dFVF9JMkMzX1NPVVJDRSBfX0hBTF9SQ0NfR0VUX0kyQzEyMzVfU09VUkNFCisjZWxzZQogI2RlZmluZSBfX0hBTF9SQ0NfR0VUX0kyQzNfU09VUkNFIF9fSEFMX1JDQ19HRVRfSTJDMTIzX1NPVVJDRQorI2VuZGlmIC8qSTJDNSovCiAKIC8qKiBAYnJpZWYgbWFjcm8gdG8gY29uZmlndXJlIHRoZSBJMkM0IGNsb2NrIChJMkM0Q0xLKS4KICAgKgpAQCAtMjI1Myw5ICsyNDA1LDMzIEBACiAgICovCiAjZGVmaW5lIF9fSEFMX1JDQ19HRVRfSTJDNF9TT1VSQ0UoKSAoKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkQzQ0NJUFIsIFJDQ19EM0NDSVBSX0kyQzRTRUwpKSkKIAorI2lmIGRlZmluZWQoSTJDNSkKKy8qKiBAYnJpZWYgbWFjcm8gdG8gY29uZmlndXJlIHRoZSBJMkM1IGNsb2NrIChJMkM1Q0xLKS4KKyAgKgorICAqIEBwYXJhbSAgX19JMkM1Q0xLU291cmNlX18gc3BlY2lmaWVzIHRoZSBJMkM1IGNsb2NrIHNvdXJjZS4KKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDNUNMS1NPVVJDRV9EMlBDTEsxOiBEMlBDTEsxIHNlbGVjdGVkIGFzIEkyQzUgY2xvY2sKKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzVDTEtTT1VSQ0VfUExMMzogUExMMyBzZWxlY3RlZCBhcyBJMkM1IGNsb2NrCisgICogICAgICAgICAgICBAYXJnIFJDQ19JMkM1Q0xLU09VUkNFX0hTSTogSFNJIHNlbGVjdGVkIGFzIEkyQzUgY2xvY2sKKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzVDTEtTT1VSQ0VfQ1NJOiBDU0kgc2VsZWN0ZWQgYXMgSTJDNSBjbG9jaworICAqLworI2RlZmluZSBfX0hBTF9SQ0NfSTJDNV9DT05GSUcgIF9fSEFMX1JDQ19JMkMxMjM1X0NPTkZJRworI2VuZGlmIC8qIEkyQzUgKi8KKworI2lmIGRlZmluZWQoSTJDNSkKKy8qKiBAYnJpZWYgIG1hY3JvIHRvIGdldCB0aGUgSTJDNSBjbG9jayBzb3VyY2UuCisgICogQHJldHZhbCBUaGUgY2xvY2sgc291cmNlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFJDQ19JMkM1Q0xLU09VUkNFX0QyUENMSzE6IEQyUENMSzUgc2VsZWN0ZWQgYXMgSTJDNSBjbG9jaworICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDNUNMS1NPVVJDRV9QTEwzOiBQTEwzIHNlbGVjdGVkIGFzIEkyQzUgY2xvY2sKKyAgKiAgICAgICAgICAgIEBhcmcgUkNDX0kyQzVDTEtTT1VSQ0VfSFNJOiBIU0kgc2VsZWN0ZWQgYXMgSTJDNSBjbG9jaworICAqICAgICAgICAgICAgQGFyZyBSQ0NfSTJDNUNMS1NPVVJDRV9DU0k6IENTSSBzZWxlY3RlZCBhcyBJMkM1IGNsb2NrCisgICovCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfSTJDNV9TT1VSQ0UgX19IQUxfUkNDX0dFVF9JMkMxMjM1X1NPVVJDRQorI2VuZGlmIC8qIEkyQzUgKi8KKwogLyoqIEBicmllZiBtYWNybyB0byBjb25maWd1cmUgdGhlIFVTQVJUMS82LzkqIC8xMCogY2xvY2sgKFVTQVJUMTZDTEspLgogICAqCi0gICogQHBhcmFtICBfX1VTQVJUMTZDTEtTb3VyY2VfXyBzcGVjaWZpZXMgdGhlIFVTQVJUMS82LzkqIC8xMCogY2xvY2sgc291cmNlLgorICAqIEBwYXJhbSAgX19VU0FSVDE2OTEwQ0xLU291cmNlX18gc3BlY2lmaWVzIHRoZSBVU0FSVDEvNi85KiAvMTAqIGNsb2NrIHNvdXJjZS4KICAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgICAgQGFyZyBSQ0NfVVNBUlQxNkNMS1NPVVJDRV9EMlBDTEsyOiBBUEIyIENsb2NrIHNlbGVjdGVkIGFzIFVTQVJUMS82LzkqIC8xMCogY2xvY2sKICAgKiAgICAgICAgICAgIEBhcmcgUkNDX1VTQVJUMTZDTEtTT1VSQ0VfUExMMjogUExMMl9RIENsb2NrIHNlbGVjdGVkIGFzIFVTQVJUMS82LzkqIC8xMCogY2xvY2sKQEAgLTIyNjcsMTMgKzI0NDMsMTggQEAKICAgKiAoKikgOiBBdmFpbGFibGUgb24gc29tZSBTVE0zMkg3IGxpbmVzIG9ubHkuCiAgICovCiAjaWYgZGVmaW5lZChSQ0NfRDJDQ0lQMlJfVVNBUlQxNlNFTCkKLSNkZWZpbmUgX19IQUxfUkNDX1VTQVJUMTZfQ09ORklHKF9fVVNBUlQxNkNMS1NvdXJjZV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+RDJDQ0lQMlIsIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMLCAodWludDMyX3QpKF9fVVNBUlQxNkNMS1NvdXJjZV9fKSkKLSNlbHNlCisjZGVmaW5lIF9fSEFMX1JDQ19VU0FSVDE2X0NPTkZJRyhfX1VTQVJUMTY5MTBDTEtTb3VyY2VfXykgXAorICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkQyQ0NJUDJSLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNlNFTCwgKHVpbnQzMl90KShfX1VTQVJUMTY5MTBDTEtTb3VyY2VfXykpCisjZWxpZiBkZWZpbmVkKFJDQ19DRENDSVAyUl9VU0FSVDE2OTEwU0VMKQogI2RlZmluZSBfX0hBTF9SQ0NfVVNBUlQxNjkxMF9DT05GSUcoX19VU0FSVDE2OTEwQ0xLU291cmNlX18pIFwKICAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5DRENDSVAyUiwgUkNDX0NEQ0NJUDJSX1VTQVJUMTY5MTBTRUwsICh1aW50MzJfdCkoX19VU0FSVDE2OTEwQ0xLU291cmNlX18pKQogLyogYWxpYXMgKi8KICNkZWZpbmUgX19IQUxfUkNDX1VTQVJUMTZfQ09ORklHICBfX0hBTF9SQ0NfVVNBUlQxNjkxMF9DT05GSUcKKyNlbHNlICAvKiBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTCAqLworI2RlZmluZSBfX0hBTF9SQ0NfVVNBUlQxNjkxMF9DT05GSUcoX19VU0FSVDE2OTEwQ0xLU291cmNlX18pIFwKKyAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5EMkNDSVAyUiwgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUwsICh1aW50MzJfdCkoX19VU0FSVDE2OTEwQ0xLU291cmNlX18pKQorLyogYWxpYXMgKi8KKyNkZWZpbmUgX19IQUxfUkNDX1VTQVJUMTZfQ09ORklHICBfX0hBTF9SQ0NfVVNBUlQxNjkxMF9DT05GSUcKICNlbmRpZiAvKiBSQ0NfRDJDQ0lQMlJfVVNBUlQxNlNFTCAqLwogCiAvKiogQGJyaWVmICBtYWNybyB0byBnZXQgdGhlIFVTQVJUMS82LzkqIC8xMCogY2xvY2sgc291cmNlLgpAQCAtMjI4OSwxMCArMjQ3MCwxNCBAQAogICAqLwogI2lmIGRlZmluZWQoUkNDX0QyQ0NJUDJSX1VTQVJUMTZTRUwpCiAjZGVmaW5lIF9fSEFMX1JDQ19HRVRfVVNBUlQxNl9TT1VSQ0UoKSAoKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkQyQ0NJUDJSLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNlNFTCkpKQotI2Vsc2UKKyNlbGlmIGRlZmluZWQoUkNDX0NEQ0NJUDJSX1VTQVJUMTY5MTBTRUwpCiAjZGVmaW5lIF9fSEFMX1JDQ19HRVRfVVNBUlQxNjkxMF9TT1VSQ0UoKSAoKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkNEQ0NJUDJSLCBSQ0NfQ0RDQ0lQMlJfVVNBUlQxNjkxMFNFTCkpKQogLyogYWxpYXMqLwogI2RlZmluZSAgX19IQUxfUkNDX0dFVF9VU0FSVDE2X1NPVVJDRSAgX19IQUxfUkNDX0dFVF9VU0FSVDE2OTEwX1NPVVJDRQorI2Vsc2UgIC8qIFJDQ19EMkNDSVAyUl9VU0FSVDE2OTEwU0VMICovCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfVVNBUlQxNjkxMF9TT1VSQ0UoKSAoKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkQyQ0NJUDJSLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTCkpKQorLyogYWxpYXMgKi8KKyNkZWZpbmUgX19IQUxfUkNDX0dFVF9VU0FSVDE2X1NPVVJDRSAgX19IQUxfUkNDX0dFVF9VU0FSVDE2OTEwX1NPVVJDRQogI2VuZGlmIC8qIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMICovCiAKIC8qKiBAYnJpZWYgbWFjcm8gdG8gY29uZmlndXJlIHRoZSBVU0FSVDIzNDU3OCBjbG9jayAoVVNBUlQyMzQ1NzhDTEspLgpAQCAtMjY4OSw4ICsyODc0LDggQEAKICNkZWZpbmUgX19IQUxfUkNDX0xQVElNMzQ1X0NPTkZJRyhfX0xQVElNMzQ1Q0xLU291cmNlX18pIFwKICAgICAgICAgICAgICAgICAgIE1PRElGWV9SRUcoUkNDLT5EM0NDSVBSLCBSQ0NfRDNDQ0lQUl9MUFRJTTM0NVNFTCwgKHVpbnQzMl90KShfX0xQVElNMzQ1Q0xLU291cmNlX18pKQogI2Vsc2UKLSNkZWZpbmUgX19IQUxfUkNDX0xQVElNMzQ1X0NPTkZJRyhfX0xQVElNM0NMS1NvdXJjZV9fKSBcCi0gICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+U1JEQ0NJUFIsIFJDQ19TUkRDQ0lQUl9MUFRJTTNTRUwsICh1aW50MzJfdCkoX19MUFRJTTNDTEtTb3VyY2VfXykpCisjZGVmaW5lIF9fSEFMX1JDQ19MUFRJTTM0NV9DT05GSUcoX19MUFRJTTM0NUNMS1NvdXJjZV9fKSBcCisgICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+U1JEQ0NJUFIsIFJDQ19TUkRDQ0lQUl9MUFRJTTNTRUwsICh1aW50MzJfdCkoX19MUFRJTTM0NUNMS1NvdXJjZV9fKSkKICNlbmRpZiAvKiBSQ0NfRDNDQ0lQUl9MUFRJTTM0NVNFTCAqLwogCiAvKiogQGJyaWVmICBtYWNybyB0byBnZXQgdGhlIExQVElNMy80LzUgY2xvY2sgc291cmNlLgpAQCAtMjgxNSw5ICszMDAwLDEzIEBACiAgICogICAgICAgICAgICBAYXJnIFJDQ19SQ0NfT1NQSUNMS1NPVVJDRV9QTEwyICA6IFBMTDJfUiBDbG9jayBzZWxlY3RlZCBhcyBPU1BJIGNsb2NrCiAgICogICAgICAgICAgICBAYXJnIFJDQ19SQ0NfT1NQSUNMS1NPVVJDRV9DTEtQICAgIENMS1Agc2VsZWN0ZWQgYXMgT1NQSSBjbG9jawogICAqLworI2lmIGRlZmluZWQoUkNDX0NEQ0NJUFJfT0NUT1NQSVNFTCkKICNkZWZpbmUgX19IQUxfUkNDX09TUElfQ09ORklHKF9fT1NQSUNMS1NvdXJjZV9fKSBcCiAgICAgICAgICAgICAgICAgICBNT0RJRllfUkVHKFJDQy0+Q0RDQ0lQUiwgUkNDX0NEQ0NJUFJfT0NUT1NQSVNFTCwgKHVpbnQzMl90KShfX09TUElDTEtTb3VyY2VfXykpCi0KKyNlbHNlCisjZGVmaW5lIF9fSEFMX1JDQ19PU1BJX0NPTkZJRyhfX09TUElDTEtTb3VyY2VfXykgXAorICAgICAgICAgICAgICAgICAgTU9ESUZZX1JFRyhSQ0MtPkQxQ0NJUFIsIFJDQ19EMUNDSVBSX09DVE9TUElTRUwsICh1aW50MzJfdCkoX19PU1BJQ0xLU291cmNlX18pKQorI2VuZGlmIC8qIFJDQ19DRENDSVBSX09DVE9TUElTRUwgKi8KIAogLyoqIEBicmllZiAgbWFjcm8gdG8gZ2V0IHRoZSBPU1BJIGNsb2NrIHNvdXJjZS4KICAgKiBAcmV0dmFsIFRoZSBjbG9jayBzb3VyY2UgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTI4MjYsNyArMzAxNSwxMSBAQAogICAqICAgICAgICAgICAgQGFyZyBSQ0NfUkNDX09TUElDTEtTT1VSQ0VfUExMMiAgOiBQTEwyX1IgQ2xvY2sgc2VsZWN0ZWQgYXMgT1NQSSBjbG9jawogICAqICAgICAgICAgICAgQGFyZyBSQ0NfUkNDX09TUElDTEtTT1VSQ0VfQ0xLUCAgICBDTEtQIHNlbGVjdGVkIGFzIE9TUEkgY2xvY2sKICAgKi8KKyNpZiBkZWZpbmVkKFJDQ19DRENDSVBSX09DVE9TUElTRUwpCiAjZGVmaW5lIF9fSEFMX1JDQ19HRVRfT1NQSV9TT1VSQ0UoKSAoKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkNEQ0NJUFIsIFJDQ19DRENDSVBSX09DVE9TUElTRUwpKSkKKyNlbHNlCisjZGVmaW5lIF9fSEFMX1JDQ19HRVRfT1NQSV9TT1VSQ0UoKSAoKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkQxQ0NJUFIsIFJDQ19EMUNDSVBSX09DVE9TUElTRUwpKSkKKyNlbmRpZiAvKiBSQ0NfQ0RDQ0lQUl9PQ1RPU1BJU0VMICovCiAjZW5kaWYgLyogZGVmaW5lZChPQ1RPU1BJMSkgfHwgZGVmaW5lZChPQ1RPU1BJMikgKi8KIAogCkBAIC0zMzc0LDkgKzM1NjcsNiBAQAogI2VuZGlmIC8qIFJDQ19EMkNDSVAyUl9STkdTRUwgKi8KIAogI2lmIGRlZmluZWQoSFJUSU0xKQotLyoqIEBkZWZncm91cCBSQ0NFeF9IUlRJTXhfQ2xvY2tfQ29uZmlnIFJDQyBFeHRlbmRlZCBIUlRJTXggQ2xvY2sgQ29uZmlnCi0gICogQHsKLSAgKi8KIC8qKiBAYnJpZWYgIE1hY3JvIHRvIGNvbmZpZ3VyZSB0aGUgSFJUSU0xIHByZXNjYWxlciBjbG9jayBzb3VyY2UuCiAgICogQHBhcmFtICBfX0hSVElNMUNMS1NvdXJjZV9fIHNwZWNpZmllcyB0aGUgSFJUSU0xIHByZXNjYWxlciBjbG9jayBzb3VyY2UuCiAgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgpAQCAtMzQwOSwxMCArMzU5OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9d2hpbGUoMCkKIAogLyoqCi0gICogQH0KLSAgKi8KLSAgICAKLS8qKgogICAqIEBicmllZiBFbmFibGUgdGhlIFJDQyBMU0UgQ1NTIEV4dGVuZGVkIEludGVycnVwdCBMaW5lLgogICAqIEByZXR2YWwgTm9uZQogICAqLwpAQCAtMzY5Niw2ICszODgyLDEwIEBACiAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAvKiogQGFkZHRvZ3JvdXAgUkNDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKwogLyoqIEBhZGR0b2dyb3VwIFJDQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKICAgKiBAewogICAqLwpAQCAtMzc1MSw2ICszOTQxLDEwIEBACiAgICogQH0KICAgKi8KIAorLyoqCisgICogQH0KKyAgKi8KKwogIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgUkNDRXhfUHJpdmF0ZV9NYWNyb3MgUkNDRXggUHJpdmF0ZSBNYWNyb3MKICAgKiBAewpAQCAtMzg4NCwxMCArNDA3OCwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX0xQVUFSVDFDTEtTT1VSQ0VfTFNFKSAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX0xQVUFSVDFDTEtTT1VSQ0VfSFNJKSkKIAorI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgSVNfUkNDX0kyQzEyMzVDTEtTT1VSQ0UoU09VUkNFKSAgICgoKFNPVVJDRSkgPT0gUkNDX0kyQzEyMzVDTEtTT1VSQ0VfUExMMykgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX0kyQzEyMzVDTEtTT1VSQ0VfSFNJKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19JMkMxMjM1Q0xLU09VUkNFX0QyUENMSzEpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfSTJDMTIzNUNMS1NPVVJDRV9DU0kpKQorCisjZGVmaW5lIElTX1JDQ19JMkMxMjNDTEtTT1VSQ0UgICAgSVNfUkNDX0kyQzEyMzVDTEtTT1VSQ0UgIC8qIEZvciAgQVBJIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNlbHNlCiAjZGVmaW5lIElTX1JDQ19JMkMxMjNDTEtTT1VSQ0UoU09VUkNFKSAgICgoKFNPVVJDRSkgPT0gUkNDX0kyQzEyM0NMS1NPVVJDRV9QTEwzKSAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfSTJDMTIzQ0xLU09VUkNFX0hTSSkgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19JMkMxMjNDTEtTT1VSQ0VfRDJQQ0xLMSl8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX0kyQzEyM0NMS1NPVVJDRV9DU0kpKQorI2VuZGlmIC8qSTJDNSovCiAKICNkZWZpbmUgSVNfUkNDX0kyQzFDTEtTT1VSQ0UoU09VUkNFKSAgICgoKFNPVVJDRSkgPT0gUkNDX0kyQzFDTEtTT1VSQ0VfUExMMykgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19JMkMxQ0xLU09VUkNFX0hTSSkgICAgfHwgXApAQCAtMzkwOSw2ICs0MTEyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19JMkM0Q0xLU09VUkNFX0QzUENMSzEpfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfSTJDM0NMS1NPVVJDRV9DU0kpKQogCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBJU19SQ0NfSTJDNUNMS1NPVVJDRShTT1VSQ0UpICAgKCgoU09VUkNFKSA9PSBSQ0NfSTJDNUNMS1NPVVJDRV9QTEwzKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gUkNDX0kyQzVDTEtTT1VSQ0VfSFNJKSAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19JMkM1Q0xLU09VUkNFX0QyUENMSzEpfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfSTJDNUNMS1NPVVJDRV9DU0kpKQorI2VuZGlmIC8qSTJDNSovCisKICNkZWZpbmUgSVNfUkNDX1JOR0NMS1NPVVJDRShTT1VSQ0UpICAgICgoKFNPVVJDRSkgPT0gUkNDX1JOR0NMS1NPVVJDRV9IU0k0OCl8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IFJDQ19STkdDTEtTT1VSQ0VfUExMKSAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBSQ0NfUk5HQ0xLU09VUkNFX0xTRSkgIHx8IFwKQEAgLTQyNTMsNiArNDQ2MywxMCBAQAogICAqIEB9CiAgICovCiAKKy8qKgorICAqIEB9CisgICovCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9ydGMuaCBiL0luYy9zdG0zMmg3eHhfaGFsX3J0Yy5oCmluZGV4IDQzNDRlMmQuLjk5YzBkZDEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsX3J0Yy5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX3J0Yy5oCkBAIC02MCw3ICs2MCw3IEBACiB0eXBlZGVmIHN0cnVjdAogewogICB1aW50MzJfdCBIb3VyRm9ybWF0OyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBSVEMgSG91ciBGb3JtYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFJUQ19Ib3VyX0Zvcm1hdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDX0hvdXJfRm9ybWF0c19EZWZpbml0aW9ucyAqLwogCiAgIHVpbnQzMl90IEFzeW5jaFByZWRpdjsgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJUQyBBc3luY2hyb25vdXMgUHJlZGl2aWRlciB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHg3RiAqLwpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIE1pbl9EYXRhID0gMHgwMCBhbmQgTWF4X0RhdGEgPSAweDdGRkYgKi8KIAogICB1aW50MzJfdCBPdXRQdXQ7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHdoaWNoIHNpZ25hbCB3aWxsIGJlIHJvdXRlZCB0byB0aGUgUlRDIG91dHB1dC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgUlRDRXhfT3V0cHV0X3NlbGVjdGlvbl9EZWZpbml0aW9ucyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBSVENfT3V0cHV0X3NlbGVjdGlvbl9EZWZpbml0aW9ucyAqLwogCiAgIHVpbnQzMl90IE91dFB1dFJlbWFwOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHJlbWFwIGZvciBSVEMgb3V0cHV0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiAgUlRDX091dHB1dF9BTEFSTV9PVVRfUmVtYXAgKi8KQEAgLTEyMTcsNiArMTIxNyw3IEBACiAgICogQHsKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmICBSVENfRW50ZXJJbml0TW9kZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CitIQUxfU3RhdHVzVHlwZURlZiAgUlRDX0V4aXRJbml0TW9kZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiB1aW50OF90ICAgICAgICAgICAgUlRDX0J5dGVUb0JjZDIodWludDhfdCBWYWx1ZSk7CiB1aW50OF90ICAgICAgICAgICAgUlRDX0JjZDJUb0J5dGUodWludDhfdCBWYWx1ZSk7CiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX3J0Y19leC5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfcnRjX2V4LmgKaW5kZXggOTFkOTY3ZC4uOTQ3NjcxOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfcnRjX2V4LmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfcnRjX2V4LmgKQEAgLTczMyw2ICs3MzMsMTQgQEAKICAgKiBAfQogICAqLwogCisvKiogQGRlZmdyb3VwIFJUQ0V4X01vbm90b25pY0NvdW50ZXJfSW5zdGFuY2UgIFJUQ0V4IE1vbm90b25pYyBDb3VudGVyIEluc3RhbmNlIERlZmluaXRpb24KKyAgKiBAeworICAqLworI2RlZmluZSBSVENfTU9OT1RPTklDX0NPVU5URVJfMSAgICAgICAgICAgMHUgICAvKiE8IE1vbm90b25pYyBjb3VudGVyIDEgKi8KKy8qKgorICAqIEB9CisgICovCisKIC8qKiBAZGVmZ3JvdXAgUlRDRXhfVGFtcGVyX1JlZ2lzdGVyc19PZmZzZXQgIFJUQyBUYW1wZXIgUmVnaXN0ZXJzIE9mZnNldAogICAqIEB7CiAgICovCkBAIC0xNDEyLDEwICsxNDIwLDYgQEAKICNkZWZpbmUgX19IQUxfUlRDX1NISUZUX0dFVF9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICgoKCgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JU1IpICAmIChfX0ZMQUdfXykpICE9IDBVKSA/IDFVIDogMFUpCiAjZW5kaWYgLyogUlRDX0lTUl9TSFBGICovCiAKLS8qKgotICAqIEB9Ci0gICovCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiAgICAgICAgICAgICAgICMjIyMjIFJUQyBXYWtlLXVwIEludGVycnVwdCBleHBvcnRlZCBtYWNyb3MgIyMjIyMgICAgICAgICAgICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KQEAgLTE2MzksMTAgKzE2NDMsNiBAQAogI2RlZmluZSBfX0hBTF9SVENfVEFNUEVSX1RJTUVTVEFNUF9FWFRJX0RJU0FCTEVfRVZFTlQoKSAgIChFWFRJLT5FTVIxICAgICY9IH4oUlRDX0VYVElfTElORV9UQU1QRVJfVElNRVNUQU1QX0VWRU5UKSkKICNlbmRpZiAvKiBFWFRJX0QxICovCiAKLS8qKgotICAqIEB9Ci0gICovCi0KICNpZiBkZWZpbmVkKERVQUxfQ09SRSkKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIGludGVycnVwdCBvbiB0aGUgUlRDIFRhbXBlciBhbmQgVGltZXN0YW1wIGFzc29jaWF0ZWQgRDIgRXh0aSBsaW5lLgpAQCAtMTg0MCw2ICsxODQwLDEwIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfRGVhY3RpdmF0ZUFjdGl2ZVRhbXBlcnMoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpOwogI2VuZGlmIC8qIFRBTVBfQVRDUjFfVEFNUDFBTSAqLwogCisvKioKKyAgKiBAfQorICAqLworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogICAgICAgICAgICAgICAgICAgIyMjIyMgUlRDIFdha2UtdXAgZXhwb3J0ZWQgZnVuY3Rpb25zICMjIyMjICAgICAgICAgICAgICAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC0xODkzLDggKzE4OTcsOCBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0VuYWJsZUJ5cGFzc1NoYWRvdyhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfRGlzYWJsZUJ5cGFzc1NoYWRvdyhSVENfSGFuZGxlVHlwZURlZiAqaHJ0Yyk7CiAjaWYgZGVmaW5lZChUQU1QX0NPVU5UUikKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9Nb25vdG9uaWNDb3VudGVySW5jcmVtZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjKTsKLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9Nb25vdG9uaWNDb3VudGVyR2V0KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCAqQ291bnRlcik7CitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfTW9ub3RvbmljQ291bnRlckluY3JlbWVudChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgIHVpbnQzMl90IEluc3RhbmNlKTsKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9Nb25vdG9uaWNDb3VudGVyR2V0KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCB1aW50MzJfdCAqQ291bnRlciwgIHVpbnQzMl90IEluc3RhbmNlKTsKICNlbmRpZiAvKiBUQU1QX0NPVU5UUiAqLwogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX3NhaS5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfc2FpLmgKaW5kZXggNTE4ZmE2NC4uN2RiN2ViOCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfc2FpLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfc2FpLmgKQEAgLTExNSw5ICsxMTUsMTAgQEAKICAgdWludDMyX3QgQXVkaW9GcmVxdWVuY3k7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGF1ZGlvIGZyZXF1ZW5jeSBzYW1wbGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNBSV9BdWRpb19GcmVxdWVuY3kgKi8KIAotICB1aW50MzJfdCBNY2tkaXY7ICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbWFzdGVyIGNsb2NrIGRpdmlkZXIsIHRoZSBwYXJhbWV0ZXIgd2lsbCBiZSB1c2VkIGlmIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvRnJlcXVlbmN5IHRoZSB1c2VyIGNob2ljZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDAgYW5kIE1heF9EYXRhID0gNjMuICovCisgIHVpbnQzMl90IE1ja2RpdjsgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBtYXN0ZXIgY2xvY2sgZGl2aWRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAwIGFuZCBNYXhfRGF0YSA9IDYzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBub3RlIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgb25seSBpZiBBdWRpb0ZyZXF1ZW5jeSBpcyBzZXQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQUlfQVVESU9fRlJFUVVFTkNZX01DS0RJViBvdGhlcndpc2UgaXQgaXMgaW50ZXJuYWxseSBjb21wdXRlZC4gKi8KIAogICB1aW50MzJfdCBNY2tPdmVyU2FtcGxpbmc7ICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbWFzdGVyIGNsb2NrIG92ZXJzYW1wbGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIFNBSV9CbG9ja19NY2tfT3ZlclNhbXBsaW5nICovCkBAIC0xNTQsNiArMTU1LDcgQEAKIAogLyoqIEBkZWZncm91cCBTQUlfRnJhbWVfU3RydWN0dXJlX2RlZmluaXRpb24gU0FJIEZyYW1lIFN0cnVjdHVyZSBkZWZpbml0aW9uCiAgICogQGJyaWVmICBTQUkgRnJhbWUgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgorICAqIEBub3RlICAgRm9yIFNQRElGIGFuZCBBQzk3IHByb3RvY29sLCB0aGVzZSBwYXJhbWV0ZXJzIGFyZSBub3QgdXNlZCAoc2V0IGJ5IGhhcmR3YXJlKS4KICAgKiBAewogICAqLwogdHlwZWRlZiBzdHJ1Y3QKQEAgLTE4Niw2ICsxODgsOCBAQAogCiAvKiogQGRlZmdyb3VwIFNBSV9TbG90X1N0cnVjdHVyZV9kZWZpbml0aW9uIFNBSSBTbG90IFN0cnVjdHVyZSBkZWZpbml0aW9uCiAgICogQGJyaWVmICAgU0FJIEJsb2NrIFNsb3QgSW5pdCBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgorICAqIEBub3RlICAgIEZvciBTUERJRiBwcm90b2NvbCwgdGhlc2UgcGFyYW1ldGVycyBhcmUgbm90IHVzZWQgKHNldCBieSBoYXJkd2FyZSkuCisgICogQG5vdGUgICAgRm9yIEFDOTcgcHJvdG9jb2wsIG9ubHkgU2xvdEFjdGl2ZSBwYXJhbWV0ZXIgaXMgdXNlZCAodGhlIG90aGVycyBhcmUgc2V0IGJ5IGhhcmR3YXJlKS4KICAgKiBAewogICAqLwogdHlwZWRlZiBzdHJ1Y3QKQEAgLTgyNCw3ICs4MjgsNyBAQAogICAqLwogCiAvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBhZGR0b2dyb3VwIFNBSV9Qcml2YXRlX01hY3JvcworLyoqIEBkZWZncm91cCBTQUlfUHJpdmF0ZV9NYWNyb3MgU0FJIFByaXZhdGUgTWFjcm9zCiAgICogQHsKICAgKi8KICNkZWZpbmUgSVNfU0FJX0JMT0NLX1NZTkNFWFQoU1RBVEUpICgoKFNUQVRFKSA9PSBTQUlfU1lOQ0VYVF9ESVNBQkxFKSB8fFwKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX3NkLmggYi9JbmMvc3RtMzJoN3h4X2hhbF9zZC5oCmluZGV4IDY2ZjVmNjUuLmRkMDY3ODggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsX3NkLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfc2QuaApAQCAtMTU2LDcgKzE1Niw2IEBACiAgIHZvaWQgKCogUmVhZF9ETUFEYmxCdWYxQ3BsdENhbGxiYWNrKSAgICAoc3RydWN0IF9fU0RfSGFuZGxlVHlwZURlZiAqaHNkKTsKICAgdm9pZCAoKiBXcml0ZV9ETUFEYmxCdWYwQ3BsdENhbGxiYWNrKSAgIChzdHJ1Y3QgX19TRF9IYW5kbGVUeXBlRGVmICpoc2QpOwogICB2b2lkICgqIFdyaXRlX0RNQURibEJ1ZjFDcGx0Q2FsbGJhY2spICAgKHN0cnVjdCBfX1NEX0hhbmRsZVR5cGVEZWYgKmhzZCk7Ci0KICNpZiAoVVNFX1NEX1RSQU5TQ0VJVkVSICE9IDBVKQogICB2b2lkICgqIERyaXZlVHJhbnNjZWl2ZXJfMV84Vl9DYWxsYmFjaykgKEZsYWdTdGF0dXMgc3RhdHVzKTsKICNlbmRpZiAvKiBVU0VfU0RfVFJBTlNDRUlWRVIgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX3NkX2V4LmggYi9JbmMvc3RtMzJoN3h4X2hhbF9zZF9leC5oCmluZGV4IGY3NDA0YTEuLjgwMDQzNGUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfaGFsX3NkX2V4LmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfc2RfZXguaApAQCAtMTUsNyArMTUsNyBAQAogICAqICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgKi8gCisgICovCiAKIC8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjaWZuZGVmIFNUTTMySDd4eF9IQUxfU0RfRVhfSApAQCAtMzUsNyArMzUsNyBAQAogLyoqIEBhZGR0b2dyb3VwIFNERXgKICAgKiBAYnJpZWYgU0QgSEFMIGV4dGVuZGVkIG1vZHVsZSBkcml2ZXIKICAgKiBAewotICAqLyAKKyAgKi8KIAogLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgU0RFeF9FeHBvcnRlZF9UeXBlcyBTREV4IEV4cG9ydGVkIFR5cGVzCkBAIC00NCw3ICs0NCw3IEBACiAKIC8qKiBAZGVmZ3JvdXAgU0RFeF9FeHBvcnRlZF9UeXBlc19Hcm91cDEgU0QgQ2FyZCBJbnRlcm5hbCBETUEgQnVmZmVyIHN0cnVjdHVyZQogICAqIEB7Ci0gICovIAorICAqLwogdHlwZWRlZiBlbnVtCiB7CiAgIFNEX0RNQV9CVUZGRVIwICAgICAgPSAweDAwVSwgICAgLyohPCBzZWxlY3RzIFNEIGludGVybmFsIERNQSBCdWZmZXIgMCAgICAgKi8KQEAgLTUyLDI0ICs1MiwyNCBAQAogCiB9SEFMX1NERXhfRE1BQnVmZmVyX01lbW9yeVR5cGVEZWY7CiAKLQotLyoqIAorLyoqCiAgICogQH0KICAgKi8KLSAgCi0vKiogCisKKy8qKgogICAqIEB9Ci0gICovICAKKyAgKi8KIC8qIEV4cG9ydGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBFeHBvcnRlZCBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qKiBAZGVmZ3JvdXAgU0RFeF9FeHBvcnRlZF9GdW5jdGlvbnMgU0RFeCBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewogICAqLwotICAKKwogLyoqIEBkZWZncm91cCBTREV4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgTXVsdGlCdWZmZXIgZnVuY3Rpb25zCiAgICogQHsKICAgKi8KKwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NERXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCAqIHBEYXRhQnVmZmVyMCwgdWludDMyX3QgKiBwRGF0YUJ1ZmZlcjEsIHVpbnQzMl90IEJ1ZmZlclNpemUpOwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NERXhfUmVhZEJsb2Nrc0RNQU11bHRpQnVmZmVyKFNEX0hhbmRsZVR5cGVEZWYgKmhzZCwgdWludDMyX3QgQmxvY2tBZGQsIHVpbnQzMl90IE51bWJlck9mQmxvY2tzKTsKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TREV4X1dyaXRlQmxvY2tzRE1BTXVsdGlCdWZmZXIoU0RfSGFuZGxlVHlwZURlZiAqaHNkLCB1aW50MzJfdCBCbG9ja0FkZCwgdWludDMyX3QgTnVtYmVyT2ZCbG9ja3MpOwpAQCAtODMsMTEgKzgzLDExIEBACiAvKioKICAgKiBAfQogICAqLwotICAKKwogLyoqCiAgICogQH0KICAgKi8KLSAgCisKIC8qIFByaXZhdGUgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTk1LDcgKzk1LDcgQEAKIC8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgCisKIC8qKgogICAqIEB9CiAgICovCkBAIC0xMDgsNiArMTA4LDYgQEAKICNlbmRpZgogCiAKLSNlbmRpZiAvKiBzdG0zMmg3eHhfSEFMX1NEX0VYX0ggKi8gCisjZW5kaWYgLyogc3RtMzJoN3h4X0hBTF9TRF9FWF9IICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF9zbWJ1cy5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfc21idXMuaAppbmRleCBmYTEzZGJlLi5jODJjNDRiIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2hhbF9zbWJ1cy5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX3NtYnVzLmgKQEAgLTEzMiw3ICsxMzIsMTEgQEAKICAgKiBAYnJpZWYgIFNNQlVTIGhhbmRsZSBTdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICAqIEB7CiAgICovCisjaWYgKFVTRV9IQUxfU01CVVNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiB0eXBlZGVmIHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYKKyNlbHNlCit0eXBlZGVmIHN0cnVjdAorI2VuZGlmICAvKiBVU0VfSEFMX1NNQlVTX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogewogICBJMkNfVHlwZURlZiAgICAgICAgICAgICAgICAgICpJbnN0YW5jZTsgICAgICAgLyohPCBTTUJVUyByZWdpc3RlcnMgYmFzZSBhZGRyZXNzICAgICAgICovCiAKQEAgLTMyNiw2ICszMzAsNyBAQAogI2RlZmluZSAgU01CVVNfTkVYVF9GUkFNRSAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoU01CVVNfUkVMT0FEX01PREUgfCBTTUJVU19TT0ZURU5EX01PREUpKQogI2RlZmluZSAgU01CVVNfRklSU1RfQU5EX0xBU1RfRlJBTUVfTk9fUEVDICAgICAgU01CVVNfQVVUT0VORF9NT0RFCiAjZGVmaW5lICBTTUJVU19MQVNUX0ZSQU1FX05PX1BFQyAgICAgICAgICAgICAgICBTTUJVU19BVVRPRU5EX01PREUKKyNkZWZpbmUgIFNNQlVTX0ZJUlNUX0ZSQU1FX1dJVEhfUEVDICAgICAgICAgICAgICgodWludDMyX3QpKFNNQlVTX1NPRlRFTkRfTU9ERSB8IFNNQlVTX1NFTkRQRUNfTU9ERSkpCiAjZGVmaW5lICBTTUJVU19GSVJTVF9BTkRfTEFTVF9GUkFNRV9XSVRIX1BFQyAgICAoKHVpbnQzMl90KShTTUJVU19BVVRPRU5EX01PREUgfCBTTUJVU19TRU5EUEVDX01PREUpKQogI2RlZmluZSAgU01CVVNfTEFTVF9GUkFNRV9XSVRIX1BFQyAgICAgICAgICAgICAgKCh1aW50MzJfdCkoU01CVVNfQVVUT0VORF9NT0RFIHwgU01CVVNfU0VORFBFQ19NT0RFKSkKIApAQCAtNTgyLDExICs1ODcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX05PX1NUQVJUU1RPUCkpCiAKIAotI2RlZmluZSBJU19TTUJVU19UUkFOU0ZFUl9PUFRJT05TX1JFUVVFU1QoUkVRVUVTVCkgICAgICAoSVNfU01CVVNfVFJBTlNGRVJfT1RIRVJfT1BUSU9OU19SRVFVRVNUKFJFUVVFU1QpICAgICAgIHx8IFwKKyNkZWZpbmUgSVNfU01CVVNfVFJBTlNGRVJfT1BUSU9OU19SRVFVRVNUKFJFUVVFU1QpICAgICAgKElTX1NNQlVTX1RSQU5TRkVSX09USEVSX09QVElPTlNfUkVRVUVTVChSRVFVRVNUKSAgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfRklSU1RfRlJBTUUpICAgICAgICAgICAgICAgICAgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19ORVhUX0ZSQU1FKSAgICAgICAgICAgICAgICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0ZJUlNUX0FORF9MQVNUX0ZSQU1FX05PX1BFQykgICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfTEFTVF9GUkFNRV9OT19QRUMpICAgICAgICAgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChSRVFVRVNUKSA9PSBTTUJVU19GSVJTVF9GUkFNRV9XSVRIX1BFQykgICAgICAgICAgICAgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFJFUVVFU1QpID09IFNNQlVTX0ZJUlNUX0FORF9MQVNUX0ZSQU1FX1dJVEhfUEVDKSAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUkVRVUVTVCkgPT0gU01CVVNfTEFTVF9GUkFNRV9XSVRIX1BFQykpCiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX3RpbS5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfdGltLmgKaW5kZXggMzFiNDJmZS4uYWVlOWY3NCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfdGltLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfdGltLmgKQEAgLTMwNSw2ICszMDUsMjYgQEAKIH0gSEFMX1RJTV9TdGF0ZVR5cGVEZWY7CiAKIC8qKgorICAqIEBicmllZiAgVElNIENoYW5uZWwgU3RhdGVzIGRlZmluaXRpb24KKyAgKi8KK3R5cGVkZWYgZW51bQoreworICBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQgICAgICAgICAgICAgPSAweDAwVSwgICAgLyohPCBUSU0gQ2hhbm5lbCBpbml0aWFsIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSAgICAgICAgICAgICA9IDB4MDFVLCAgICAvKiE8IFRJTSBDaGFubmVsIHJlYWR5IGZvciB1c2UgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kgICAgICAgICAgICAgID0gMHgwMlUsICAgIC8qITwgQW4gaW50ZXJuYWwgcHJvY2VzcyBpcyBvbmdvaW5nIG9uIHRoZSBUSU0gY2hhbm5lbCAqLworfSBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWY7CisKKy8qKgorICAqIEBicmllZiAgRE1BIEJ1cnN0IFN0YXRlcyBkZWZpbml0aW9uCisgICovCit0eXBlZGVmIGVudW0KK3sKKyAgSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVCAgICAgICAgICAgICA9IDB4MDBVLCAgICAvKiE8IERNQSBCdXJzdCBpbml0aWFsIHN0YXRlICovCisgIEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFkgICAgICAgICAgICAgPSAweDAxVSwgICAgLyohPCBETUEgQnVyc3QgcmVhZHkgZm9yIHVzZSAqLworICBIQUxfRE1BX0JVUlNUX1NUQVRFX0JVU1kgICAgICAgICAgICAgID0gMHgwMlUsICAgIC8qITwgT25nb2luZyBETUEgQnVyc3QgICAgICAgKi8KK30gSEFMX1RJTV9ETUFCdXJzdFN0YXRlVHlwZURlZjsKKworLyoqCiAgICogQGJyaWVmICBIQUwgQWN0aXZlIGNoYW5uZWwgc3RydWN0dXJlcyBkZWZpbml0aW9uCiAgICovCiB0eXBlZGVmIGVudW0KQEAgLTMyNywxMyArMzQ3LDE2IEBACiB0eXBlZGVmIHN0cnVjdAogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogewotICBUSU1fVHlwZURlZiAgICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgKi8KLSAgVElNX0Jhc2VfSW5pdFR5cGVEZWYgICAgICAgIEluaXQ7ICAgICAgICAgIC8qITwgVElNIFRpbWUgQmFzZSByZXF1aXJlZCBwYXJhbWV0ZXJzICovCi0gIEhBTF9USU1fQWN0aXZlQ2hhbm5lbCAgICAgICBDaGFubmVsOyAgICAgICAvKiE8IEFjdGl2ZSBjaGFubmVsICAgICAgICAgICAgICAgICAgICAqLwotICBETUFfSGFuZGxlVHlwZURlZiAgICAgICAgICAgKmhkbWFbN107ICAgICAgLyohPCBETUEgSGFuZGxlcnMgYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcnJheSBpcyBhY2Nlc3NlZCBieSBhIEByZWYgRE1BX0hhbmRsZV9pbmRleCAqLwotICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICAgTG9jazsgICAgICAgICAgLyohPCBMb2NraW5nIG9iamVjdCAgICAgICAgICAgICAgICAgICAgKi8KLSAgX19JTyBIQUxfVElNX1N0YXRlVHlwZURlZiAgIFN0YXRlOyAgICAgICAgIC8qITwgVElNIG9wZXJhdGlvbiBzdGF0ZSAgICAgICAgICAgICAgICovCisgIFRJTV9UeXBlRGVmICAgICAgICAgICAgICAgICAgICAgICAgKkluc3RhbmNlOyAgICAgICAgIC8qITwgUmVnaXN0ZXIgYmFzZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBUSU1fQmFzZV9Jbml0VHlwZURlZiAgICAgICAgICAgICAgIEluaXQ7ICAgICAgICAgICAgICAvKiE8IFRJTSBUaW1lIEJhc2UgcmVxdWlyZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgKi8KKyAgSEFMX1RJTV9BY3RpdmVDaGFubmVsICAgICAgICAgICAgICBDaGFubmVsOyAgICAgICAgICAgLyohPCBBY3RpdmUgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIERNQV9IYW5kbGVUeXBlRGVmICAgICAgICAgICAgICAgICAgKmhkbWFbN107ICAgICAgICAgIC8qITwgRE1BIEhhbmRsZXJzIGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhcnJheSBpcyBhY2Nlc3NlZCBieSBhIEByZWYgRE1BX0hhbmRsZV9pbmRleCAqLworICBIQUxfTG9ja1R5cGVEZWYgICAgICAgICAgICAgICAgICAgIExvY2s7ICAgICAgICAgICAgICAvKiE8IExvY2tpbmcgb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgX19JTyBIQUxfVElNX1N0YXRlVHlwZURlZiAgICAgICAgICBTdGF0ZTsgICAgICAgICAgICAgLyohPCBUSU0gb3BlcmF0aW9uIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIF9fSU8gSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmICAgQ2hhbm5lbFN0YXRlWzZdOyAgIC8qITwgVElNIGNoYW5uZWwgb3BlcmF0aW9uIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAqLworICBfX0lPIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiAgIENoYW5uZWxOU3RhdGVbNF07ICAvKiE8IFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgb3BlcmF0aW9uIHN0YXRlICAgICAgICAgKi8KKyAgX19JTyBIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmICBETUFCdXJzdFN0YXRlOyAgICAgLyohPCBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIHZvaWQgKCogQmFzZV9Nc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX1RJTV9IYW5kbGVUeXBlRGVmICpodGltKTsgICAgICAgICAgICAgIC8qITwgVElNIEJhc2UgTXNwIEluaXQgQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTExNiwyNSArMTEzOSw0OSBAQAogICAqIEByZXR2YWwgTm9uZQogICAqLwogI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKLSNkZWZpbmUgX19IQUxfVElNX1JFU0VUX0hBTkRMRV9TVEFURShfX0hBTkRMRV9fKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlICAgICAgICAgICAgID0gSEFMX1RJTV9TVEFURV9SRVNFVDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5CYXNlX01zcEluaXRDYWxsYmFjayAgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+QmFzZV9Nc3BEZUluaXRDYWxsYmFjayAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPklDX01zcEluaXRDYWxsYmFjayAgICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5JQ19Nc3BEZUluaXRDYWxsYmFjayAgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T0NfTXNwSW5pdENhbGxiYWNrICAgICAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9DX01zcERlSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5QV01fTXNwSW5pdENhbGxiYWNrICAgICAgICAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+UFdNX01zcERlSW5pdENhbGxiYWNrICAgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9uZVB1bHNlX01zcEluaXRDYWxsYmFjayAgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5PbmVQdWxzZV9Nc3BEZUluaXRDYWxsYmFjayAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+RW5jb2Rlcl9Nc3BJbml0Q2FsbGJhY2sgICAgICA9IE5VTEw7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkVuY29kZXJfTXNwRGVJbml0Q2FsbGJhY2sgICAgPSBOVUxMOyAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5IYWxsU2Vuc29yX01zcEluaXRDYWxsYmFjayAgID0gTlVMTDsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SGFsbFNlbnNvcl9Nc3BEZUluaXRDYWxsYmFjayA9IE5VTEw7ICAgICBcCisjZGVmaW5lIF9fSEFMX1RJTV9SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+U3RhdGUgICAgICAgICAgICA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMF0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsxXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzJdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs0XSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzVdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzBdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMV0gPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsyXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzNdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkRNQUJ1cnN0U3RhdGUgICAgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFU0VUOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+QmFzZV9Nc3BJbml0Q2FsbGJhY2sgICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5CYXNlX01zcERlSW5pdENhbGxiYWNrICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPklDX01zcEluaXRDYWxsYmFjayAgICAgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SUNfTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5PQ19Nc3BJbml0Q2FsbGJhY2sgICAgICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9DX01zcERlSW5pdENhbGxiYWNrICAgICAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+UFdNX01zcEluaXRDYWxsYmFjayAgICAgICAgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5QV01fTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk9uZVB1bHNlX01zcEluaXRDYWxsYmFjayAgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+T25lUHVsc2VfTXNwRGVJbml0Q2FsbGJhY2sgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5FbmNvZGVyX01zcEluaXRDYWxsYmFjayAgICAgID0gTlVMTDsgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkVuY29kZXJfTXNwRGVJbml0Q2FsbGJhY2sgICAgPSBOVUxMOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+SGFsbFNlbnNvcl9Nc3BJbml0Q2FsbGJhY2sgICA9IE5VTEw7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5IYWxsU2Vuc29yX01zcERlSW5pdENhbGxiYWNrID0gTlVMTDsgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbHNlCi0jZGVmaW5lIF9fSEFMX1RJTV9SRVNFVF9IQU5ETEVfU1RBVEUoX19IQU5ETEVfXykgKChfX0hBTkRMRV9fKS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUKQorI2RlZmluZSBfX0hBTF9USU1fUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPlN0YXRlICAgICAgICAgICAgPSBIQUxfVElNX1NUQVRFX1JFU0VUOyAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzBdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMV0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsyXSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzNdICA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNF0gID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs1XSAgPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzFdID0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQ7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5ETUFCdXJzdFN0YXRlICAgID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUoMCkKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAogLyoqCkBAIC0xOTUxLDE1ICsxOTk4LDE1IEBACiAjZGVmaW5lIElTX1RJTV9USTFTRUxFQ1RJT04oX19USTFTRUxFQ1RJT05fXykgICgoKF9fVEkxU0VMRUNUSU9OX18pID09IFRJTV9USTFTRUxFQ1RJT05fQ0gxKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVEkxU0VMRUNUSU9OX18pID09IFRJTV9USTFTRUxFQ1RJT05fWE9SQ09NQklOQVRJT04pKQogCi0jZGVmaW5lIElTX1RJTV9ETUFfTEVOR1RIKF9fTEVOR1RIX18pICAgICAgKCgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzFUUkFOU0ZFUikgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF8yVFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzNUUkFOU0ZFUlMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNFRSQU5TRkVSUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF81VFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzZUUkFOU0ZFUlMpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfN1RSQU5TRkVSUykgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fTEVOR1RIX18pID09IFRJTV9ETUFCVVJTVExFTkdUSF84VFJBTlNGRVJTKSB8fCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19MRU5HVEhfXykgPT0gVElNX0RNQUJVUlNUTEVOR1RIXzlUUkFOU0ZFUlMpIHx8IFwKKyNkZWZpbmUgSVNfVElNX0RNQV9MRU5HVEgoX19MRU5HVEhfXykgICAgICAoKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMVRSQU5TRkVSKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMlRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfM1RSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNFRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNVRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfNlRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfN1RSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfOFRSQU5TRkVSUykgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfOVRSQU5TRkVSUykgIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMTBUUkFOU0ZFUlMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMTFUUkFOU0ZFUlMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0xFTkdUSF9fKSA9PSBUSU1fRE1BQlVSU1RMRU5HVEhfMTJUUkFOU0ZFUlMpIHx8IFwKQEAgLTIwMDgsNiArMjA1NSw1MCBAQAogICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiAmPSB+KFRJTV9DQ0VSX0NDM1AgfCBUSU1fQ0NFUl9DQzNOUCkpIDpcCiAgICAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+Q0NFUiAmPSB+KFRJTV9DQ0VSX0NDNFAgfCBUSU1fQ0NFUl9DQzROUCkpKQogCisjZGVmaW5lIFRJTV9DSEFOTkVMX1NUQVRFX0dFVChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXylcCisgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzBdIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8yKSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzFdIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzJdIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF80KSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzNdIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF81KSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzRdIDpcCisgICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs1XSkKKyAgICAKKyNkZWZpbmUgVElNX0NIQU5ORUxfU1RBVEVfU0VUKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fLCBfX0NIQU5ORUxfU1RBVEVfXykgXAorICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMF0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMV0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMykgPyAoKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbMl0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfNCkgPyAoKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbM10gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfNSkgPyAoKF9fSEFORExFX18pLT5DaGFubmVsU3RhdGVbNF0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XAorICAgKChfX0hBTkRMRV9fKS0+Q2hhbm5lbFN0YXRlWzVdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkpCisKKyNkZWZpbmUgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChfX0hBTkRMRV9fLCAgX19DSEFOTkVMX1NUQVRFX18pIGRvIHsgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVswXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsxXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVsyXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVszXSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs0XSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxTdGF0ZVs1XSAgPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorIH0gd2hpbGUoMCkKKworI2RlZmluZSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChfX0hBTkRMRV9fLCBfX0NIQU5ORUxfXylcCisgICgoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8xKSA/IChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVswXSA6XAorICAgKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMikgPyAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMV0gOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzMpID8gKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzJdIDpcCisgICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbM10pCisgICAgCisjZGVmaW5lIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKF9fSEFORExFX18sIF9fQ0hBTk5FTF9fLCBfX0NIQU5ORUxfU1RBVEVfXykgXAorICAoKChfX0NIQU5ORUxfXykgPT0gVElNX0NIQU5ORUxfMSkgPyAoKF9fSEFORExFX18pLT5DaGFubmVsTlN0YXRlWzBdID0gKF9fQ0hBTk5FTF9TVEFURV9fKSkgOlwKKyAgICgoX19DSEFOTkVMX18pID09IFRJTV9DSEFOTkVMXzIpID8gKChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVsxXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpIDpcCisgICAoKF9fQ0hBTk5FTF9fKSA9PSBUSU1fQ0hBTk5FTF8zKSA/ICgoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gPSAoX19DSEFOTkVMX1NUQVRFX18pKSA6XAorICAgKChfX0hBTkRMRV9fKS0+Q2hhbm5lbE5TdGF0ZVszXSA9IChfX0NIQU5ORUxfU1RBVEVfXykpKQorCisjZGVmaW5lIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChfX0hBTkRMRV9fLCAgX19DSEFOTkVMX1NUQVRFX18pIGRvIHsgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMF0gPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMV0gPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbMl0gPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorICAoX19IQU5ETEVfXyktPkNoYW5uZWxOU3RhdGVbM10gPSAoX19DSEFOTkVMX1NUQVRFX18pOyAgXAorIH0gd2hpbGUoMCkKKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTIyMzMsNiArMjMyNCwxMSBAQAogSEFMX1RJTV9TdGF0ZVR5cGVEZWYgSEFMX1RJTV9JQ19HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CiBIQUxfVElNX1N0YXRlVHlwZURlZiBIQUxfVElNX09uZVB1bHNlX0dldFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKIEhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9HZXRTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CisKKy8qIFBlcmlwaGVyYWwgQ2hhbm5lbCBzdGF0ZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK0hBTF9USU1fQWN0aXZlQ2hhbm5lbCBIQUxfVElNX0dldEFjdGl2ZUNoYW5uZWwoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pOworSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIEhBTF9USU1fR2V0Q2hhbm5lbFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCAgdWludDMyX3QgQ2hhbm5lbCk7CitIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmIEhBTF9USU1fRE1BQnVyc3RTdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSk7CiAvKioKICAgKiBAfQogICAqLwpAQCAtMjI1Miw3ICsyMzQ4LDYgQEAKIHZvaWQgVElNX0VUUl9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IFRJTV9FeHRUUkdQcmVzY2FsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFRJTV9FeHRUUkdQb2xhcml0eSwgdWludDMyX3QgRXh0VFJHRmlsdGVyKTsKIAotdm9pZCBUSU1fRE1BRGVsYXlQdWxzZUNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogdm9pZCBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHZvaWQgVElNX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHZvaWQgVElNX0RNQUNhcHR1cmVDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfaGFsX3RpbV9leC5oIGIvSW5jL3N0bTMyaDd4eF9oYWxfdGltX2V4LmgKaW5kZXggZGQ2MTZhNy4uNmQxNWMwNSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfdGltX2V4LmgKKysrIGIvSW5jL3N0bTMyaDd4eF9oYWxfdGltX2V4LmgKQEAgLTQ5MSw2ICs0OTEsNyBAQAogICAqLwogLyogRXh0ZW5kZWQgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIEhBTF9USU1fU3RhdGVUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX0dldFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKTsKK0hBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBIQUxfVElNRXhfR2V0Q2hhbm5lbE5TdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIHVpbnQzMl90IENoYW5uZWxOKTsKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2hhbF91YXJ0LmggYi9JbmMvc3RtMzJoN3h4X2hhbF91YXJ0LmgKaW5kZXggZDIwNjU3ZS4uYTcwNzU4MyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9oYWxfdWFydC5oCisrKyBiL0luYy9zdG0zMmg3eHhfaGFsX3VhcnQuaApAQCAtMTE3MCwxMyArMTE3MCwxNCBAQAogICAgKChfX0NMT0NLUFJFU0NBTEVSX18pID09IFVBUlRfUFJFU0NBTEVSX0RJVjEyOCkgPyAxMjhVIDogICAgIFwKICAgICgoX19DTE9DS1BSRVNDQUxFUl9fKSA9PSBVQVJUX1BSRVNDQUxFUl9ESVYyNTYpID8gMjU2VSA6IDFVKQogCisKIC8qKiBAYnJpZWYgIEJSUiBkaXZpc2lvbiBvcGVyYXRpb24gdG8gc2V0IEJSUiByZWdpc3RlciB3aXRoIExQVUFSVC4KICAgKiBAcGFyYW0gIF9fUENMS19fIExQVUFSVCBjbG9jay4KICAgKiBAcGFyYW0gIF9fQkFVRF9fIEJhdWQgcmF0ZSBzZXQgYnkgdGhlIHVzZXIuCiAgICogQHBhcmFtICBfX0NMT0NLUFJFU0NBTEVSX18gVUFSVCBwcmVzY2FsZXIgdmFsdWUuCiAgICogQHJldHZhbCBEaXZpc2lvbiByZXN1bHQKICAgKi8KLSNkZWZpbmUgVUFSVF9ESVZfTFBVQVJUKF9fUENMS19fLCBfX0JBVURfXywgX19DTE9DS1BSRVNDQUxFUl9fKSAgICAgICgodWludDMyX3QpKCgoKCh1aW50NjRfdCkoX19QQ0xLX18pL1VBUlRfR0VUX0RJVl9GQUNUT1IoKF9fQ0xPQ0tQUkVTQ0FMRVJfXykpKSoyNTZVKVwKKyNkZWZpbmUgVUFSVF9ESVZfTFBVQVJUKF9fUENMS19fLCBfX0JBVURfXywgX19DTE9DS1BSRVNDQUxFUl9fKSAgICAgICgodWludDMyX3QpKCgoKCgodWludDY0X3QpKF9fUENMS19fKSkvKFVBUlRQcmVzY1RhYmxlWyhfX0NMT0NLUFJFU0NBTEVSX18pXSkpKjI1NlUpXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHVpbnQzMl90KSgoX19CQVVEX18pLzJVKSkgLyAoX19CQVVEX18pKSkKIAogLyoqIEBicmllZiAgQlJSIGRpdmlzaW9uIG9wZXJhdGlvbiB0byBzZXQgQlJSIHJlZ2lzdGVyIGluIDgtYml0IG92ZXJzYW1wbGluZyBtb2RlLgpAQCAtMTE4NSw3ICsxMTg2LDcgQEAKICAgKiBAcGFyYW0gIF9fQ0xPQ0tQUkVTQ0FMRVJfXyBVQVJUIHByZXNjYWxlciB2YWx1ZS4KICAgKiBAcmV0dmFsIERpdmlzaW9uIHJlc3VsdAogICAqLwotI2RlZmluZSBVQVJUX0RJVl9TQU1QTElORzgoX19QQ0xLX18sIF9fQkFVRF9fLCBfX0NMT0NLUFJFU0NBTEVSX18pICAgKCgoKChfX1BDTEtfXykvVUFSVF9HRVRfRElWX0ZBQ1RPUigoX19DTE9DS1BSRVNDQUxFUl9fKSkpKjJVKVwKKyNkZWZpbmUgVUFSVF9ESVZfU0FNUExJTkc4KF9fUENMS19fLCBfX0JBVURfXywgX19DTE9DS1BSRVNDQUxFUl9fKSAgICgoKCgoX19QQ0xLX18pL1VBUlRQcmVzY1RhYmxlWyhfX0NMT0NLUFJFU0NBTEVSX18pXSkqMlUpXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgoX19CQVVEX18pLzJVKSkgLyAoX19CQVVEX18pKQogCiAvKiogQGJyaWVmICBCUlIgZGl2aXNpb24gb3BlcmF0aW9uIHRvIHNldCBCUlIgcmVnaXN0ZXIgaW4gMTYtYml0IG92ZXJzYW1wbGluZyBtb2RlLgpAQCAtMTE5NCw3ICsxMTk1LDcgQEAKICAgKiBAcGFyYW0gIF9fQ0xPQ0tQUkVTQ0FMRVJfXyBVQVJUIHByZXNjYWxlciB2YWx1ZS4KICAgKiBAcmV0dmFsIERpdmlzaW9uIHJlc3VsdAogICAqLwotI2RlZmluZSBVQVJUX0RJVl9TQU1QTElORzE2KF9fUENMS19fLCBfX0JBVURfXywgX19DTE9DS1BSRVNDQUxFUl9fKSAgKCgoKF9fUENMS19fKS9VQVJUX0dFVF9ESVZfRkFDVE9SKChfX0NMT0NLUFJFU0NBTEVSX18pKSlcCisjZGVmaW5lIFVBUlRfRElWX1NBTVBMSU5HMTYoX19QQ0xLX18sIF9fQkFVRF9fLCBfX0NMT0NLUFJFU0NBTEVSX18pICAoKCgoX19QQ0xLX18pL1VBUlRQcmVzY1RhYmxlWyhfX0NMT0NLUFJFU0NBTEVSX18pXSlcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKChfX0JBVURfXykvMlUpKSAvIChfX0JBVURfXykpCiAKIC8qKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgb3Igbm90IFVBUlQgaW5zdGFuY2UgaXMgTG93IFBvd2VyIFVBUlQuCkBAIC0xNTE0LDYgKzE1MTUsMTEgQEAKICNpbmNsdWRlICJzdG0zMmg3eHhfaGFsX3VhcnRfZXguaCIKIAogCisvKiBQcmVzY2FsZXIgVGFibGUgdXNlZCBpbiBCUlIgY29tcHV0YXRpb24gbWFjcm9zLgorICAgRGVjbGFyZWQgYXMgZXh0ZXJuIGhlcmUgdG8gYWxsb3cgdXNlIG9mIHByaXZhdGUgVUFSVCBtYWNyb3MsIG91dHNpZGUgb2YgSEFMIFVBUlQgZm9uY3Rpb25zICovCitleHRlcm4gY29uc3QgdWludDE2X3QgVUFSVFByZXNjVGFibGVbMTJdOworCisKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgVUFSVF9FeHBvcnRlZF9GdW5jdGlvbnMgVUFSVCBFeHBvcnRlZCBGdW5jdGlvbnMKICAgKiBAewpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9sbF9hZGMuaCBiL0luYy9zdG0zMmg3eHhfbGxfYWRjLmgKaW5kZXggOTIwNDVkMy4uZjdlOGM5YyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9sbF9hZGMuaAorKysgYi9JbmMvc3RtMzJoN3h4X2xsX2FkYy5oCkBAIC0xNjAsMTAgKzE2MCwxMCBAQAogLyogTWFzayBjb250YWluaW5nIHRyaWdnZXIgc291cmNlIG1hc2tzIGZvciBlYWNoIG9mIHBvc3NpYmxlICAgICAgICAgICAgICAgICAgKi8KIC8qIHRyaWdnZXIgZWRnZSBzZWxlY3Rpb24gZHVwbGljYXRlZCB3aXRoIHNoaWZ0cyBbMDsgNDsgODsgMTJdICAgICAgICAgICAgICAgICovCiAvKiBjb3JyZXNwb25kaW5nIHRvIHtTVyBzdGFydDsgZXh0IHRyaWdnZXI7IGV4dCB0cmlnZ2VyOyBleHQgdHJpZ2dlcn0uICAgICAgICAqLwotI2RlZmluZSBBRENfSU5KX1RSSUdfU09VUkNFX01BU0sgICAgICAgICAgICAoKChMTF9BRENfSU5KX1RSSUdfU09GVFdBUkUgJiBBRENfSlNRUl9KRVhUU0VMKSAgPDwgKDRVICogMFVMKSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19KU1FSX0pFWFRTRUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAoNFUgKiAxVUwpKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX0pTUVJfSkVYVFNFTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICg0VSAqIDJVTCkpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRENfSlNRUl9KRVhUU0VMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKDRVICogM1VMKSkgICkKKyNkZWZpbmUgQURDX0lOSl9UUklHX1NPVVJDRV9NQVNLICAgICAgICAgICAgKCgoTExfQURDX0lOSl9UUklHX1NPRlRXQVJFICYgQURDX0pTUVJfSkVYVFNFTCkgPDwgKDRVICogMFVMKSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQURDX0pTUVJfSkVYVFNFTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICg0VSAqIDFVTCkpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFEQ19KU1FSX0pFWFRTRUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAoNFUgKiAyVUwpKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBRENfSlNRUl9KRVhUU0VMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKDRVICogM1VMKSkgICkKIAogLyogTWFzayBjb250YWluaW5nIHRyaWdnZXIgZWRnZSBtYXNrcyBmb3IgZWFjaCBvZiBwb3NzaWJsZSAgICAgICAgICAgICAgICAgICAgKi8KIC8qIHRyaWdnZXIgZWRnZSBzZWxlY3Rpb24gZHVwbGljYXRlZCB3aXRoIHNoaWZ0cyBbMDsgNDsgODsgMTJdICAgICAgICAgICAgICAgICovCkBAIC0zMjgsNiArMzI4LDExIEBACiAjZGVmaW5lIEFEQ19BV0RfVFIzX1JFR09GRlNFVCAgICAgICAgICAgICAgKEFEQ19BV0RfQ1IzX1JFR09GRlNFVCkKICNkZWZpbmUgQURDX0FXRF9UUlhfUkVHT0ZGU0VUX01BU0sgICAgICAgICAoQURDX0FXRF9UUjFfUkVHT0ZGU0VUIHwgQURDX0FXRF9UUjJfUkVHT0ZGU0VUIHwgQURDX0FXRF9UUjNfUkVHT0ZGU0VUKQogI2RlZmluZSBBRENfQVdEX1RSWF9SRUdPRkZTRVRfUE9TICAgICAgICAgIChBRENfQVdEX0NSWF9SRUdPRkZTRVRfUE9TKSAgICAgLyogUG9zaXRpb24gb2YgYml0cyBBRENfVFJ4X1JFR09GRlNFVCBpbiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSyAqLworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisjZGVmaW5lIEFEQ19BV0RfVFJYX0JJVF9ISUdIX01BU0sgICAgICAgICAgKDB4MDAwMTAwMDBVTCkgICAgICAgICAgICAgICAgICAgLyogU2VsZWN0aW9uIG9mIDEgYml0IHRvIGRpc2NyaW1pbmF0ZSB0aHJlc2hvbGQgaGlnaDogbWFzayBvZiBiaXQgKi8KKyNkZWZpbmUgQURDX0FXRF9UUlhfQklUX0hJR0hfUE9TICAgICAgICAgICAoMTZVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZWxlY3Rpb24gb2YgMSBiaXQgdG8gZGlzY3JpbWluYXRlIHRocmVzaG9sZCBoaWdoOiBwb3NpdGlvbiBvZiBiaXQgKi8KKyNkZWZpbmUgQURDX0FXRF9UUlhfQklUX0hJR0hfU0hJRlQ0ICAgICAgICAoQURDX0FXRF9UUlhfQklUX0hJR0hfUE9TIC0gNFVMKSAvKiBTaGlmdCBvZiBiaXQgQURDX0FXRF9UUlhfQklUX0hJR0ggdG8gcG9zaXRpb24gdG8gcGVyZm9ybSBhIHNoaWZ0IG9mIDQgcmFua3MgKi8KKyNlbmRpZiAgLyogQURDX1ZFUl9WNV9WOTAgKi8KIAogLyogUmVnaXN0ZXIgb2Zmc2V0IGdhcCBiZXR3ZWVuIEFXRDEgYW5kIEFXRDItQVdEMyB0aHJlc2hvbGRzIHJlZ2lzdGVycyAqLwogLyogKFNldCBzZXBhcmF0ZWx5IGFzIEFEQ19BV0RfVFJYX1JFR09GRlNFVCB0byBzcGFyZSAzMiBiaXRzIHNwYWNlICovCkBAIC0zNTMsNiArMzU4LDkgQEAKICNkZWZpbmUgQURDX0NGR1JfQVdEMVNHTF9CSVRPRkZTRVRfUE9TICAgICAoQURDX0NGR1JfQVdEMVNHTF9Qb3MpCiAjZGVmaW5lIEFEQ19DRkdSX0FXRDFFTl9CSVRPRkZTRVRfUE9TICAgICAgKEFEQ19DRkdSX0FXRDFFTl9Qb3MpCiAjZGVmaW5lIEFEQ19DRkdSX0pBV0QxRU5fQklUT0ZGU0VUX1BPUyAgICAgKEFEQ19DRkdSX0pBV0QxRU5fUG9zKQorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisjZGVmaW5lIEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TX0FEQzMgICAgKEFEQzNfQ0ZHUl9SRVNfUG9zKQorI2VuZGlmIC8qIEFEQ19WRVJfVjVfVjkwICovCiAKIAogLyogQURDIHJlZ2lzdGVycyBiaXRzIGdyb3VwcyAqLwpAQCAtMzYxLDE2ICszNjksMjcgQEAKIAogLyogQURDIGludGVybmFsIGNoYW5uZWxzIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8KIC8qIEludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlIFZyZWZJbnQgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfMykKKyNkZWZpbmUgVlJFRklOVF9DQUxfQUREUiAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KikgKDB4OGZmZjgxMFVMKSkgIC8qIEludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlLCBhZGRyZXNzIG9mIHBhcmFtZXRlciBWUkVGSU5UX0NBTDogVnJlZkludCBBREMgcmF3IGRhdGEgYWNxdWlyZWQgYXQgdGVtcGVyYXR1cmUgMzAgRGVnQyAodG9sZXJhbmNlOiArLTUgRGVnQyksIFZyZWYrID0gMy4zIFYgKHRvbGVyYW5jZTogKy0xMCBtVikuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZHJlc3MgcmVsYXRlZCB0byBTVE0zMkg3QTMgKi8KKyNlbHNlIC8qIEFEQ19WRVJfVjVfOTAgfHwgQURDX1ZFUl9WNV9YICovCiAjZGVmaW5lIFZSRUZJTlRfQ0FMX0FERFIgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdCopICgweDFGRjFFODYwVUwpKSAvKiBJbnRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSwgYWRkcmVzcyBvZiBwYXJhbWV0ZXIgVlJFRklOVF9DQUw6IFZyZWZJbnQgQURDIHJhdyBkYXRhIGFjcXVpcmVkIGF0IHRlbXBlcmF0dXJlIDMwIERlZ0MgKHRvbGVyYW5jZTogKy01IERlZ0MpLCBWcmVmKyA9IDMuMyBWICh0b2xlcmFuY2U6ICstMTAgbVYpLiAqLworI2VuZGlmIC8qIEFEQ19WRVJfVjVfMyAqLwogI2RlZmluZSBWUkVGSU5UX0NBTF9WUkVGICAgICAgICAgICAgICAgICAgICgzMzAwVUwpICAgICAgICAgICAgICAgICAgICAgLyogQW5hbG9nIHZvbHRhZ2UgcmVmZXJlbmNlIChWcmVmKykgdmFsdWUgd2l0aCB3aGljaCB0ZW1wZXJhdHVyZSBzZW5zb3IgaGFzIGJlZW4gY2FsaWJyYXRlZCBpbiBwcm9kdWN0aW9uICh0b2xlcmFuY2U6ICstMTAgbVYpICh1bml0OiBtVikuICovCiAvKiBUZW1wZXJhdHVyZSBzZW5zb3IgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfMykKKyNkZWZpbmUgVEVNUFNFTlNPUl9DQUwxX0FERFIgICAgICAgICAgICAgICAoKHVpbnQxNl90KikgKDB4OGZmZjgxNFVMKSkgIC8qIEludGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvciwgYWRkcmVzcyBvZiBwYXJhbWV0ZXIgVFNfQ0FMMTogT24gU1RNMzJINywgdGVtcGVyYXR1cmUgc2Vuc29yIEFEQyByYXcgZGF0YSBhY3F1aXJlZCBhdCB0ZW1wZXJhdHVyZSAgMzAgRGVnQyAodG9sZXJhbmNlOiArLTUgRGVnQyksIFZyZWYrID0gMy4zIFYgKHRvbGVyYW5jZTogKy0xMCBtVikuICovCisjZGVmaW5lIFRFTVBTRU5TT1JfQ0FMMl9BRERSICAgICAgICAgICAgICAgKCh1aW50MTZfdCopICgweDhmZmY4MThVTCkpICAvKiBJbnRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3IsIGFkZHJlc3Mgb2YgcGFyYW1ldGVyIFRTX0NBTDI6IE9uIFNUTTMySDcsIHRlbXBlcmF0dXJlIHNlbnNvciBBREMgcmF3IGRhdGEgYWNxdWlyZWQgYXQgdGVtcGVyYXR1cmUgMTEwIERlZ0MgKHRvbGVyYW5jZTogKy01IERlZ0MpLCBWcmVmKyA9IDMuMyBWICh0b2xlcmFuY2U6ICstMTAgbVYpLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRyZXNzZXMgcmVsYXRlZCB0byBTVE0zMkg3QTMgKi8KKyNlbHNlIC8qIEFEQ19WRVJfVjVfOTAgfHwgQURDX1ZFUl9WNV9YICovCiAjZGVmaW5lIFRFTVBTRU5TT1JfQ0FMMV9BRERSICAgICAgICAgICAgICAgKCh1aW50MTZfdCopICgweDFGRjFFODIwVUwpKSAvKiBJbnRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3IsIGFkZHJlc3Mgb2YgcGFyYW1ldGVyIFRTX0NBTDE6IE9uIFNUTTMySDcsIHRlbXBlcmF0dXJlIHNlbnNvciBBREMgcmF3IGRhdGEgYWNxdWlyZWQgYXQgdGVtcGVyYXR1cmUgIDMwIERlZ0MgKHRvbGVyYW5jZTogKy01IERlZ0MpLCBWcmVmKyA9IDMuMyBWICh0b2xlcmFuY2U6ICstMTAgbVYpLiAqLwogI2RlZmluZSBURU1QU0VOU09SX0NBTDJfQUREUiAgICAgICAgICAgICAgICgodWludDE2X3QqKSAoMHgxRkYxRTg0MFVMKSkgLyogSW50ZXJuYWwgdGVtcGVyYXR1cmUgc2Vuc29yLCBhZGRyZXNzIG9mIHBhcmFtZXRlciBUU19DQUwyOiBPbiBTVE0zMkg3LCB0ZW1wZXJhdHVyZSBzZW5zb3IgQURDIHJhdyBkYXRhIGFjcXVpcmVkIGF0IHRlbXBlcmF0dXJlIDExMCBEZWdDICh0b2xlcmFuY2U6ICstNSBEZWdDKSwgVnJlZisgPSAzLjMgViAodG9sZXJhbmNlOiArLTEwIG1WKS4gKi8KKyNlbmRpZiAvKiBBRENfVkVSX1Y1XzMgKi8KKwogI2RlZmluZSBURU1QU0VOU09SX0NBTDFfVEVNUCAgICAgICAgICAgICAgICgzMEwpICAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgdGVtcGVyYXR1cmUgc2Vuc29yLCB0ZW1wZXJhdHVyZSBhdCB3aGljaCB0ZW1wZXJhdHVyZSBzZW5zb3IgaGFzIGJlZW4gY2FsaWJyYXRlZCBpbiBwcm9kdWN0aW9uIGZvciBkYXRhIGludG8gVEVNUFNFTlNPUl9DQUwxX0FERFIgKHRvbGVyYW5jZTogKy01IERlZ0MpICh1bml0OiBEZWdDKS4gKi8KICNkZWZpbmUgVEVNUFNFTlNPUl9DQUwyX1RFTVAgICAgICAgICAgICAgICAoMTEwTCkgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvciwgdGVtcGVyYXR1cmUgYXQgd2hpY2ggdGVtcGVyYXR1cmUgc2Vuc29yIGhhcyBiZWVuIGNhbGlicmF0ZWQgaW4gcHJvZHVjdGlvbiBmb3IgZGF0YSBpbnRvIFRFTVBTRU5TT1JfQ0FMMl9BRERSICh0b2xlcmFuY2U6ICstNSBEZWdDKSAodW5pdDogRGVnQykuICovCiAjZGVmaW5lIFRFTVBTRU5TT1JfQ0FMX1ZSRUZBTkFMT0cgICAgICAgICAgKDMzMDBVTCkgICAgICAgICAgICAgICAgICAgICAvKiBBbmFsb2cgdm9sdGFnZSByZWZlcmVuY2UgKFZyZWYrKSB2b2x0YWdlIHdpdGggd2hpY2ggdGVtcGVyYXR1cmUgc2Vuc29yIGhhcyBiZWVuIGNhbGlicmF0ZWQgaW4gcHJvZHVjdGlvbiAoKy0xMCBtVikgKHVuaXQ6IG1WKS4gKi8KIAotCiAvKiBSZWdpc3RlcnMgYWRkcmVzc2VzIHdpdGggQURDIGxpbmVhcml0eSBjYWxpYnJhdGlvbiBjb250ZW50IChwcm9ncmFtbWVkIGR1cmluZyBkZXZpY2UgcHJvZHVjdGlvbiwgc3BlY2lmaWMgdG8gZWFjaCBkZXZpY2UpICovCiAjZGVmaW5lIEFEQ19MSU5FQVJfQ0FMSUJfUkVHXzFfQUREUiAoKHVpbnQzMl90KikgKDB4MUZGMUVDMDBVTCkpCiAjZGVmaW5lIEFEQ19MSU5FQVJfQ0FMSUJfUkVHXzJfQUREUiAoKHVpbnQzMl90KikgKDB4MUZGMUVDMDRVTCkpCkBAIC0zOTgsNyArNDE3LDcgQEAKICAgKiBAcmV0dmFsIFBvaW50ZXIgdG8gcmVnaXN0ZXIgYWRkcmVzcwogICAqLwogI2RlZmluZSBfX0FEQ19QVFJfUkVHX09GRlNFVChfX1JFR19fLCBfX1JFR19PRkZGU0VUX18pICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgKChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkgKCh1aW50MzJfdCkoJihfX1JFR19fKSkgKyAoKF9fUkVHX09GRkZTRVRfXykgPDwgMlVMKSkpKQorICgoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpICgodWludDMyX3QpKCYoX19SRUdfXykpICsgKChfX1JFR19PRkZGU0VUX18pIDw8IDJVTCkpKSkKIAogLyoqCiAgICogQH0KQEAgLTc1MiwxOSArNzcxLDQzIEBACiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19SRVNPTFVUSU9OICBBREMgaW5zdGFuY2UgLSBSZXNvbHV0aW9uCiAgICogQHsKICAgKi8KLSNkZWZpbmUgTExfQURDX1JFU09MVVRJT05fMTZCICAgICAgICAgICAgICAoMHgwMDAwMDAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgcmVzb2x1dGlvbiAxNiBiaXRzICovCi0jZGVmaW5lIExMX0FEQ19SRVNPTFVUSU9OXzE0QiAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfUkVTXzApIC8qITwgQURDIHJlc29sdXRpb24gMTIgYml0cyAqLwotI2RlZmluZSBMTF9BRENfUkVTT0xVVElPTl8xMkIgICAgICAgICAgICAgICggICAgICAgICAgICAgICBBRENfQ0ZHUl9SRVNfMSAgICAgICAgICAgICAgICAgKSAvKiE8IEFEQyByZXNvbHV0aW9uIDEyIGJpdHMgKi8KLSNkZWZpbmUgTExfQURDX1JFU09MVVRJT05fMTBCICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgQURDX0NGR1JfUkVTXzEgfCBBRENfQ0ZHUl9SRVNfMCkgLyohPCBBREMgcmVzb2x1dGlvbiAxMCBiaXRzICovCi0jaWYgZGVmaW5lZCAoQURDX1ZFUl9WNV8zKQorI2RlZmluZSBMTF9BRENfUkVTT0xVVElPTl8xNkIgICAgICAgICAgICAgICgweDAwMDAwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyByZXNvbHV0aW9uIDE2IGJpdHMgKi8KKyNkZWZpbmUgTExfQURDX1JFU09MVVRJT05fMTRCICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX1JFU18wKSAgLyohPCBBREMgcmVzb2x1dGlvbiAxMiBiaXRzICovCisjZGVmaW5lIExMX0FEQ19SRVNPTFVUSU9OXzEyQiAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgQURDX0NGR1JfUkVTXzEgICAgICAgICAgICAgICAgICkgIC8qITwgQURDIHJlc29sdXRpb24gMTIgYml0cyAqLworI2RlZmluZSBMTF9BRENfUkVTT0xVVElPTl8xMEIgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgIEFEQ19DRkdSX1JFU18xIHwgQURDX0NGR1JfUkVTXzApICAvKiE8IEFEQyByZXNvbHV0aW9uIDEwIGJpdHMgKi8KKworI2lmIGRlZmluZWQgKEFEQ19WRVJfVjVfWCkKKyNkZWZpbmUgTExfQURDX1JFU09MVVRJT05fMTRCX09QVCAgICAgICAgICAoQURDX0NGR1JfUkVTXzIgfCAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX1JFU18wKSAgLyohPCBBREMgcmVzb2x1dGlvbiAxNCBiaXRzIG9wdGltaXplZCBmb3IgcG93ZXIgY29uc3VtcHRpb24sIGF2YWlsYWJsZSBvbiBmb3IgZGV2aWNlcyByZXZpc2lvbiBWIG9ubHkgKi8KKyNkZWZpbmUgTExfQURDX1JFU09MVVRJT05fMTJCX09QVCAgICAgICAgICAoQURDX0NGR1JfUkVTXzIgfCBBRENfQ0ZHUl9SRVNfMSAgICAgICAgICAgICAgICAgKSAgLyohPCBBREMgcmVzb2x1dGlvbiAxMiBiaXRzIG9wdGltaXplZCBmb3IgcG93ZXIgY29uc3VtcHRpb24sIGF2YWlsYWJsZSBvbiBmb3IgZGV2aWNlcyByZXZpc2lvbiBWIG9ubHkgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQURDX1ZFUl9WNV8zKSB8fCBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQogI2RlZmluZSBMTF9BRENfUkVTT0xVVElPTl84QiAgICAgICAgICAgICAgIChBRENfQ0ZHUl9SRVNfMnxBRENfQ0ZHUl9SRVNfMSB8IEFEQ19DRkdSX1JFU18wKSAvKiE8IEFEQyByZXNvbHV0aW9uICA4IGJpdHMgKi8KICNlbHNlCiAjZGVmaW5lIExMX0FEQ19SRVNPTFVUSU9OXzhCICAgICAgICAgICAgICAgKEFEQ19DRkdSX1JFU18yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC8qITwgQURDIHJlc29sdXRpb24gIDggYml0cyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSByZXNvbHV0aW9uIHNldHRpbmcgaXMgbWFuYWdlZCBpbnRlcm5hbHkgaW4gdGhlIGRyaXZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTExfQURDX1JFU09MVVRJT05fOEIiIGRlZmluaXRpb246IGtlZXAgdXNpbmcgdGhlICIxMDBiIiB2YWx1ZSAoY29ycmVzcG9uZGluZyB0byBTVE0zMkg3NHgvNXggcmV2IFkpLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldi5WIHZhbHVlICIxMTFiIiBpcyBoYW5kbGVkIHRocm91Z2ggZnVuY3Rpb25zICJMTF9BRENfU2V0UmVzb2x1dGlvbi9MTF9BRENfR2V0UmVzb2x1dGlvbiIgIHdpdGggYSBkZWRpY2F0ZWQgY2hlY2sgb24gREJHTUNVIElEQ09ERSByZWdpc3RlciAqLwogI2VuZGlmCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyNkZWZpbmUgTExfQURDX1JFU09MVVRJT05fNkIgICAgICAgICAgICAgICAoQURDM19DRkdSX1JFU18xIHwgQURDM19DRkdSX1JFU18wKSAgIC8qITwgQURDIHJlc29sdXRpb24gIDYgYml0cy4gVmFsdWUgYXZhaWxhYmxlIGZvciBBREMzIG9uIFNUTTMySDcyeHgvM3h4IGRldmljZXMgb25seSovCisjZW5kaWYgIC8qIEFEQ19WRVJfVjVfVjkwICovCiAvKioKICAgKiBAfQogICAqLwogCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKy8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX0RBVEFfQUxJR04gIEFEQyBpbnN0YW5jZSAtIERhdGEgYWxpZ25tZW50CisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfQURDX0RBVEFfQUxJR05fUklHSFQgICAgICAgICAgICAoMHgwMDAwMDAwMFVMKSAgICAgICAgIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhbGlnbm1lbnQ6IHJpZ2h0IGFsaWduZWQgKGFsaWdubWVudCBvbiBkYXRhIHJlZ2lzdGVyIExTQiBiaXQgMCkqLworI2RlZmluZSBMTF9BRENfREFUQV9BTElHTl9MRUZUICAgICAgICAgICAgIChBREMzX0NGR1JfQUxJR04pICAgICAgIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhbGlnbm1lbnQ6IGxlZnQgYWxpZ25lZCAoYWxpZ21lbnQgb24gZGF0YSByZWdpc3RlciBNU0IgYml0IDE1KSovCisvKioKKyAgKiBAfQorICAqLworCisjZW5kaWYgIC8qIEFEQ19WRVJfVjVfVjkwICovCisKIC8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX0xFRlRfQklUX1NISUZUICAgQURDIGxlZnQgU2hpZnQKICAgKiBAewogICAqLwpAQCAtODI1LDYgKzg2OCwzNyBAQAogLyoqCiAgICogQH0KICAgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorLyoqIEBkZWZncm91cCBBRENfTExfRUNfT0ZGU0VUX1NBVFVSQVRJT04gQURDIGluc3RhbmNlIC0gT2Zmc2V0IHNhdHVyYXRpb24gbW9kZQorICAqIEB7CisgICovCisjZGVmaW5lIExMX0FEQ19PRkZTRVRfU0FUVVJBVElPTl9ESVNBQkxFICAgKDB4MDAwMDAwMDBVTCkgICAgICAgICAgIC8qITwgQURDIG9mZnNldCBzYXR1cmF0aW9uIGlzIGRpc2FibGVkIChhbW9uZyBBREMgc2VsZWN0ZWQgb2Zmc2V0IG51bWJlciAxLCAyLCAzIG9yIDQpLiBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNkZWZpbmUgTExfQURDX09GRlNFVF9TQVRVUkFUSU9OX0VOQUJMRSAgICAoQURDM19PRlIxX1NBVEVOKSAgICAgICAgLyohPCBBREMgb2Zmc2V0IHNhdHVyYXRpb24gaXMgZW5hYmxlZCAoYW1vbmcgQURDIHNlbGVjdGVkIG9mZnNldCBudW1iZXIgMSwgMiwgMyBvciA0KS4gT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19PRkZTRVRfU1RBVEUgQURDIGluc3RhbmNlIC0gT2Zmc2V0IHN0YXRlCisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfQURDX09GRlNFVF9ESVNBQkxFICAgICAgICAgICAgICAoMHgwMDAwMDAwMFVMKSAgICAgICAgIC8qITwgQURDIG9mZnNldCBkaXNhYmxlZCAoYW1vbmcgQURDIHNlbGVjdGVkIG9mZnNldCBudW1iZXIgMSwgMiwgMyBvciA0KSAqLworI2RlZmluZSBMTF9BRENfT0ZGU0VUX0VOQUJMRSAgICAgICAgICAgICAgIChBREMzX09GUjFfT0ZGU0VUMV9FTikgIC8qITwgQURDIG9mZnNldCBlbmFibGVkIChhbW9uZyBBREMgc2VsZWN0ZWQgb2Zmc2V0IG51bWJlciAxLCAyLCAzIG9yIDQpICovCisvKioKKyAgKiBAfQorICAqLworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19PRkZTRVRfU0lHTiBBREMgaW5zdGFuY2UgLSBPZmZzZXQgc2lnbgorICAqIEB7CisgICovCisjZGVmaW5lIExMX0FEQ19PRkZTRVRfU0lHTl9ORUdBVElWRSAgICAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgIC8qITwgQURDIG9mZnNldCBpcyBuZWdhdGl2ZSAoYW1vbmcgQURDIHNlbGVjdGVkIG9mZnNldCBudW1iZXIgMSwgMiwgMyBvciA0KS4gT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIExMX0FEQ19PRkZTRVRfU0lHTl9QT1NJVElWRSAgICAgICAgKEFEQzNfT0ZSMV9PRkZTRVRQT1MpIC8qITwgQURDIG9mZnNldCBpcyBwb3NpdGl2ZSAoYW1vbmcgQURDIHNlbGVjdGVkIG9mZnNldCBudW1iZXIgMSwgMiwgMyBvciA0KS4gT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCAqLworCiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19HUk9VUFMgIEFEQyBpbnN0YW5jZSAtIEdyb3VwcwogICAqIEB7CiAgICovCkBAIC04NTksMTAgKzkzMywxNSBAQAogI2RlZmluZSBMTF9BRENfQ0hBTk5FTF8xOCAgICAgICAgICAgICAgICAgIChBRENfQ0hBTk5FTF8xOF9OVU1CRVIgfCBBRENfQ0hBTk5FTF8xOF9TTVAgfCBBRENfQ0hBTk5FTF8xOF9CSVRGSUVMRCkgLyohPCBBREMgZXh0ZXJuYWwgY2hhbm5lbCAoY2hhbm5lbCBjb25uZWN0ZWQgdG8gR1BJTyBwaW4pIEFEQ3hfSU4xOCAqLwogI2RlZmluZSBMTF9BRENfQ0hBTk5FTF8xOSAgICAgICAgICAgICAgICAgIChBRENfQ0hBTk5FTF8xOV9OVU1CRVIgfCBBRENfQ0hBTk5FTF8xOV9TTVAgfCBBRENfQ0hBTk5FTF8xOV9CSVRGSUVMRCkgLyohPCBBREMgZXh0ZXJuYWwgY2hhbm5lbCAoY2hhbm5lbCBjb25uZWN0ZWQgdG8gR1BJTyBwaW4pIEFEQ3hfSU4xOSAqLwogI2lmIGRlZmluZWQoQURDMykKLS8qITwgQURDMyBpcyBkZWZpbmVkIG9ubHkgaW4gdGhlIGNhc2Ugb2YgU1RNMzJIN1hYICovCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyNkZWZpbmUgTExfQURDX0NIQU5ORUxfVlJFRklOVCAgICAgICAgICAgICAoTExfQURDX0NIQU5ORUxfMTggfCBBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSCkgLyohPCBBREMgaW50ZXJuYWwgY2hhbm5lbCBjb25uZWN0ZWQgdG8gVnJlZkludDogSW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2UuIE9uIFNUTTMySDcsIEFEQyBjaGFubmVsIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMy4gKi8KKyNkZWZpbmUgTExfQURDX0NIQU5ORUxfVEVNUFNFTlNPUiAgICAgICAgICAoTExfQURDX0NIQU5ORUxfMTcgfCBBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSCkgLyohPCBBREMgaW50ZXJuYWwgY2hhbm5lbCBjb25uZWN0ZWQgdG8gVGVtcGVyYXR1cmUgc2Vuc29yLiBPbiBTVE0zMkg3LCBBREMgY2hhbm5lbCBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzMuICovCisjZGVmaW5lIExMX0FEQ19DSEFOTkVMX1ZCQVQgICAgICAgICAgICAgICAgKExMX0FEQ19DSEFOTkVMXzE2IHwgQURDX0NIQU5ORUxfSURfSU5URVJOQUxfQ0gpIC8qITwgQURDIGludGVybmFsIGNoYW5uZWwgY29ubmVjdGVkIHRvIFZiYXQvMzogVmJhdCB2b2x0YWdlIHRocm91Z2ggYSBkaXZpZGVyIGxhZGRlciBvZiBmYWN0b3IgMS80IHRvIGhhdmUgVmJhdCBhbHdheXMgYmVsb3cgVmRkYS4gT24gU1RNMzJINywgQURDIGNoYW5uZWwgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMzLiAqLworI2Vsc2UKICNkZWZpbmUgTExfQURDX0NIQU5ORUxfVlJFRklOVCAgICAgICAgICAgICAoTExfQURDX0NIQU5ORUxfMTkgfCBBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSCkgLyohPCBBREMgaW50ZXJuYWwgY2hhbm5lbCBjb25uZWN0ZWQgdG8gVnJlZkludDogSW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2UuIE9uIFNUTTMySDcsIEFEQyBjaGFubmVsIGF2YWlsYWJsZSBvbmx5IG9uIEFEQyBpbnN0YW5jZTogQURDMy4gKi8KICNkZWZpbmUgTExfQURDX0NIQU5ORUxfVEVNUFNFTlNPUiAgICAgICAgICAoTExfQURDX0NIQU5ORUxfMTggfCBBRENfQ0hBTk5FTF9JRF9JTlRFUk5BTF9DSCkgLyohPCBBREMgaW50ZXJuYWwgY2hhbm5lbCBjb25uZWN0ZWQgdG8gVGVtcGVyYXR1cmUgc2Vuc29yLiBPbiBTVE0zMkg3LCBBREMgY2hhbm5lbCBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzMuICovCiAjZGVmaW5lIExMX0FEQ19DSEFOTkVMX1ZCQVQgICAgICAgICAgICAgICAgKExMX0FEQ19DSEFOTkVMXzE3IHwgQURDX0NIQU5ORUxfSURfSU5URVJOQUxfQ0gpIC8qITwgQURDIGludGVybmFsIGNoYW5uZWwgY29ubmVjdGVkIHRvIFZiYXQvMzogVmJhdCB2b2x0YWdlIHRocm91Z2ggYSBkaXZpZGVyIGxhZGRlciBvZiBmYWN0b3IgMS80IHRvIGhhdmUgVmJhdCBhbHdheXMgYmVsb3cgVmRkYS4gT24gU1RNMzJINywgQURDIGNoYW5uZWwgYXZhaWxhYmxlIG9ubHkgb24gQURDIGluc3RhbmNlOiBBREMzLiAqLworI2VuZGlmCiAjZWxzZQogLyohPCBTcGVjaWZpYyBkZWZpbmUgZm9yIFNUTTMySDdBM3h4IGFuZCBTVE0zMkhCM3h4IHZhcmlldGllcyBvZiBTVE0zMkg3WFhYICovCiAjZGVmaW5lIExMX0FEQ19DSEFOTkVMX1ZSRUZJTlQgICAgICAgICAgICAgKExMX0FEQ19DSEFOTkVMXzE5IHwgQURDX0NIQU5ORUxfSURfSU5URVJOQUxfQ0gpIC8qITwgQURDIGludGVybmFsIGNoYW5uZWwgY29ubmVjdGVkIHRvIFZyZWZJbnQ6IEludGVybmFsIHZvbHRhZ2UgcmVmZXJlbmNlLiBPbiBTVE0zMkg3LCBBREMgY2hhbm5lbCBhdmFpbGFibGUgb25seSBvbiBBREMgaW5zdGFuY2U6IEFEQzIuICovCkBAIC05MDIsOCArOTgxLDE0IEBACiAjZGVmaW5lIExMX0FEQ19SRUdfVFJJR19FWFRfSFJUSU1fVFJHMSAgICAoQURDX0NGR1JfRVhUU0VMXzQgfCBBRENfUkVHX1RSSUdfRVhUX0VER0VfREVGQVVMVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IEhSVElNIFRSRzEgZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCiAjZGVmaW5lIExMX0FEQ19SRUdfVFJJR19FWFRfSFJUSU1fVFJHMyAgICAoQURDX0NGR1JfRVhUU0VMXzQgfCBBRENfQ0ZHUl9FWFRTRUxfMCB8IEFEQ19SRUdfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IEhSVElNIFRSRzIgZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCiAjZGVmaW5lIExMX0FEQ19SRUdfVFJJR19FWFRfTFBUSU0xX09VVCAgICAoQURDX0NGR1JfRVhUU0VMXzQgfCBBRENfQ0ZHUl9FWFRTRUxfMSB8IEFEQ19SRUdfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IExQVElNMSBPVVQgZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCi0jZGVmaW5lIExMX0FEQ19SRUdfVFJJR19FWFRfTFBUSU0yX09VVCAgICAoQURDX0NGR1JfRVhUU0VMXzQgfCBBRENfQ0ZHUl9FWFRTRUxfMXwgQURDX0NGR1JfRVhUU0VMXzAgfCBBRENfUkVHX1RSSUdfRVhUX0VER0VfREVGQVVMVCkgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IExQVElNMiBPVVQgZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCisjZGVmaW5lIExMX0FEQ19SRUdfVFJJR19FWFRfTFBUSU0yX09VVCAgICAoQURDX0NGR1JfRVhUU0VMXzQgfCBBRENfQ0ZHUl9FWFRTRUxfMSB8IEFEQ19DRkdSX0VYVFNFTF8wIHwgQURDX1JFR19UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IExQVElNMiBPVVQgZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCiAjZGVmaW5lIExMX0FEQ19SRUdfVFJJR19FWFRfTFBUSU0zX09VVCAgICAoQURDX0NGR1JfRVhUU0VMXzQgfCBBRENfQ0ZHUl9FWFRTRUxfMiB8IEFEQ19SRUdfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IExQVElNMyBldmVudCBPVVQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCisjaWYgZGVmaW5lZCAoVElNMjMpCisjZGVmaW5lIExMX0FEQ19SRUdfVFJJR19FWFRfVElNMjNfVFJHTyAgICAoQURDX0NGR1JfRVhUU0VMXzQgfCBBRENfQ0ZHUl9FWFRTRUxfMiB8IEFEQ19DRkdSX0VYVFNFTF8wIHwgQURDX1JFR19UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IFRJTTIzIFRSR08gZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCisjZW5kaWYgLyogVElNMjMgKi8KKyNpZiBkZWZpbmVkIChUSU0yNCkKKyNkZWZpbmUgTExfQURDX1JFR19UUklHX0VYVF9USU0yNF9UUkdPICAgIChBRENfQ0ZHUl9FWFRTRUxfNCB8IEFEQ19DRkdSX0VYVFNFTF8yIHwgQURDX0NGR1JfRVhUU0VMXzEgfCBBRENfUkVHX1RSSUdfRVhUX0VER0VfREVGQVVMVCkgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGdyb3VwIHJlZ3VsYXIgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgcGVyaXBoZXJhbDogVElNMjQgVFJHTyBldmVudC4gVHJpZ2dlciBlZGdlIHNldCB0byByaXNpbmcgZWRnZSAoZGVmYXVsdCBzZXR0aW5nKS4gKi8KKyNlbmRpZiAvKiBUSU0yNCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTkxNywxMCArMTAwMiwyNCBAQAogLyoqCiAgICogQH0KICAgKi8KLQotLyoqIEBkZWZncm91cCBBRENfTExfRUNfUkVHX0NPTlRJTlVPVVNfTU9ERSAgQURDIGdyb3VwIHJlZ3VsYXIgLSBDb250aW51b3VzIG1vZGUKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorIC8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX1JFR19TQU1QTElOR19NT0RFICBBREMgZ3JvdXAgcmVndWxhciAtIFNhbXBsaW5nIG1vZGUKICAgKiBAewogICAqLworI2RlZmluZSBMTF9BRENfUkVHX1NBTVBMSU5HX01PREVfTk9STUFMICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgIC8qITwgQURDIGNvbnZlcnNpb25zIHNhbXBsaW5nIHBoYXNlIGR1cmF0aW9uIGlzIGRlZmluZWQgdXNpbmcgIEByZWYgQURDX0xMX0VDX0NIQU5ORUxfU0FNUExJTkdUSU1FLiBPbiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNkZWZpbmUgTExfQURDX1JFR19TQU1QTElOR19NT0RFX0JVTEIgICAgICAgICAgICAgICAgIChBREMzX0NGR1IyX0JVTEIpICAgICAvKiE8IEFEQyBjb252ZXJzaW9ucyBzYW1wbGluZyBwaGFzZSBzdGFydHMgaW1tZWRpYXRlbHkgYWZ0ZXIgZW5kIG9mIGNvbnZlcnNpb24sIGFuZCBzdG9wcyB1cG9uIHRyaWdnZXIgZXZlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RlOiBGaXJzdCBjb252ZXJzaW9uIGlzIHVzaW5nIG1pbmltYWwgc2FtcGxpbmcgdGltZSAoc2VlIEByZWYgQURDX0xMX0VDX0NIQU5ORUxfU0FNUExJTkdUSU1FKS4gT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIExMX0FEQ19SRUdfU0FNUExJTkdfTU9ERV9UUklHR0VSX0NPTlRST0xFRCAgICAoQURDM19DRkdSMl9TTVBUUklHKSAgLyohPCBBREMgY29udmVyc2lvbnMgc2FtcGxpbmcgcGhhc2UgaXMgY29udHJvbGxlZCBieSB0cmlnZ2VyIGV2ZW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyaWdnZXIgcmlzaW5nIGVkZ2UgID0gc3RhcnQgc2FtcGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyaWdnZXIgZmFsbGluZyBlZGdlID0gc3RvcCBzYW1wbGluZyBhbmQgc3RhcnQgY29udmVyc2lvbi4gT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisvKioKKyAgKiBAfQorICAqLyAKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCAqLworCisvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19SRUdfQ09OVElOVU9VU19NT0RFICBBREMgZ3JvdXAgcmVndWxhciAtIENvbnRpbnVvdXMgbW9kZQorKiBAeworKi8KICNkZWZpbmUgTExfQURDX1JFR19DT05WX1NJTkdMRSAgICAgICAgICAgICAoMHgwMDAwMDAwMFVMKSAgICAgICAgICAvKiE8IEFEQyBjb252ZXJzaW9ucyBhcmUgcGVyZm9ybWVkIGluIHNpbmdsZSBtb2RlOiBvbmUgY29udmVyc2lvbiBwZXIgdHJpZ2dlciAqLwogI2RlZmluZSBMTF9BRENfUkVHX0NPTlZfQ09OVElOVU9VUyAgICAgICAgIChBRENfQ0ZHUl9DT05UKSAgICAgICAgIC8qITwgQURDIGNvbnZlcnNpb25zIGFyZSBwZXJmb3JtZWQgaW4gY29udGludW91cyBtb2RlOiBhZnRlciB0aGUgZmlyc3QgdHJpZ2dlciwgZm9sbG93aW5nIGNvbnZlcnNpb25zIGxhdW5jaGVkIHN1Y2Nlc3NpdmVseSBhdXRvbWF0aWNhbGx5ICovCiAvKioKQEAgLTkzOCw5ICsxMDM3LDIyIEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBBRENfTExfRUNfUkVHX09WUl9EQVRBX0JFSEFWSU9SICBBREMgZ3JvdXAgcmVndWxhciAtIE92ZXJydW4gYmVoYXZpb3Igb24gY29udmVyc2lvbiBkYXRhCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKy8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX1JFR19ETUFfVFJBTlNGRVIgIEFEQyBncm91cCByZWd1bGFyIC0gRE1BIHRyYW5zZmVyIG9mIEFEQyBjb252ZXJzaW9uIGRhdGEKICAgKiBAewogICAqLworCisjZGVmaW5lIExMX0FEQzNfUkVHX0RNQV9UUkFOU0ZFUl9OT05FICAgICAgICgweDAwMDAwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgY29udmVyc2lvbnMgYXJlIG5vdCB0cmFuc2ZlcnJlZCBieSBETUEuIE9uIEFEQzMgb2YgZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIExMX0FEQzNfUkVHX0RNQV9UUkFOU0ZFUl9MSU1JVEVEICAgICggICAgICAgICAgICAgICAgICBBREMzX0NGR1JfRE1BRU4pICAgIC8qITwgQURDIGNvbnZlcnNpb24gZGF0YSBhcmUgdHJhbnNmZXJyZWQgYnkgRE1BLCBpbiBsaW1pdGVkIG1vZGUgKG9uZSBzaG90IG1vZGUpOiBETUEgdHJhbnNmZXIgcmVxdWVzdHMgYXJlIHN0b3BwZWQgd2hlbiBudW1iZXIgb2YgRE1BIGRhdGEgdHJhbnNmZXJzIChudW1iZXIgb2YgQURDIGNvbnZlcnNpb25zKSBpcyByZWFjaGVkLiBUaGlzIEFEQyBtb2RlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBETUEgbW9kZSBub24tY2lyY3VsYXIuIE9uIEFEQzMgb2YgZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIExMX0FEQzNfUkVHX0RNQV9UUkFOU0ZFUl9VTkxJTUlURUQgIChBREMzX0NGR1JfRE1BQ0ZHIHwgQURDM19DRkdSX0RNQUVOKSAgICAvKiE8IEFEQyBjb252ZXJzaW9uIGRhdGEgYXJlIHRyYW5zZmVycmVkIGJ5IERNQSwgaW4gdW5saW1pdGVkIG1vZGU6IERNQSB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgdW5saW1pdGVkLCB3aGF0ZXZlciBudW1iZXIgb2YgRE1BIGRhdGEgdHJhbnNmZXJyZWQgKG51bWJlciBvZiBBREMgY29udmVyc2lvbnMpLiBUaGlzIEFEQyBtb2RlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBETUEgbW9kZSBjaXJjdWxhci4gT24gQURDMyBvZiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHgqLworLyoqCisgICogQH0KKyAgKi8KKyNlbmRpZgorCisvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19SRUdfT1ZSX0RBVEFfQkVIQVZJT1IgIEFEQyBncm91cCByZWd1bGFyIC0gT3ZlcnJ1biBiZWhhdmlvciBvbiBjb252ZXJzaW9uIGRhdGEKKyogQHsKKyovCiAjZGVmaW5lIExMX0FEQ19SRUdfT1ZSX0RBVEFfUFJFU0VSVkVEICAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGJlaGF2aW9yIGluIGNhc2Ugb2Ygb3ZlcnJ1bjogZGF0YSBwcmVzZXJ2ZWQgKi8KICNkZWZpbmUgTExfQURDX1JFR19PVlJfREFUQV9PVkVSV1JJVFRFTiAgICAoQURDX0NGR1JfT1ZSTU9EKSAgICAgIC8qITwgQURDIGdyb3VwIHJlZ3VsYXIgYmVoYXZpb3IgaW4gY2FzZSBvZiBvdmVycnVuOiBkYXRhIG92ZXJ3cml0dGVuICovCiAvKioKQEAgLTEwMzQsNiArMTE0Niw4IEBACiAjZGVmaW5lIExMX0FEQ19JTkpfVFJJR19FWFRfTFBUSU0xX09VVCAgICAgKEFEQ19KU1FSX0pFWFRTRUxfNCB8IEFEQ19KU1FSX0pFWFRTRUxfMSB8IEFEQ19JTkpfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IExQVElNMSBPVVQgZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCiAjZGVmaW5lIExMX0FEQ19JTkpfVFJJR19FWFRfTFBUSU0yX09VVCAgICAgKEFEQ19KU1FSX0pFWFRTRUxfNCB8IEFEQ19KU1FSX0pFWFRTRUxfMSB8IEFEQ19KU1FSX0pFWFRTRUxfMCB8IEFEQ19JTkpfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCBpbmplY3RlZCBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBMUFRJTTIgT1VUIGV2ZW50LiBUcmlnZ2VyIGVkZ2Ugc2V0IHRvIHJpc2luZyBlZGdlIChkZWZhdWx0IHNldHRpbmcpLiAqLwogI2RlZmluZSBMTF9BRENfSU5KX1RSSUdfRVhUX0xQVElNM19PVVQgICAgIChBRENfSlNRUl9KRVhUU0VMXzQgfCBBRENfSlNRUl9KRVhUU0VMXzIgfCBBRENfSU5KX1RSSUdfRVhUX0VER0VfREVGQVVMVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gZXh0ZXJuYWwgcGVyaXBoZXJhbDogTFBUSU0zIE9VVCBldmVudC4gNCBldmVudCAoY2FwdHVyZSBjb21wYXJlOiBpbnB1dCBjYXB0dXJlIG9yIG91dHB1dCBjYXB0dXJlKS4gVHJpZ2dlciBlZGdlIHNldCB0byByaXNpbmcgZWRnZSAoZGVmYXVsdCBzZXR0aW5nKS4gKi8KKyNkZWZpbmUgTExfQURDX0lOSl9UUklHX0VYVF9USU0yM19UUkdPICAgICAoQURDX0pTUVJfSkVYVFNFTF80IHwgQURDX0pTUVJfSkVYVFNFTF8yIHwgQURDX0pTUVJfSkVYVFNFTF8wIHwgQURDX0lOSl9UUklHX0VYVF9FREdFX0RFRkFVTFQpICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gdHJpZ2dlciBmcm9tIGV4dGVybmFsIHBlcmlwaGVyYWw6IFRJTTIzIFRSR08gZXZlbnQuIFRyaWdnZXIgZWRnZSBzZXQgdG8gcmlzaW5nIGVkZ2UgKGRlZmF1bHQgc2V0dGluZykuICovCisjZGVmaW5lIExMX0FEQ19JTkpfVFJJR19FWFRfVElNMjRfVFJHTyAgICAgKEFEQ19KU1FSX0pFWFRTRUxfNCB8IEFEQ19KU1FSX0pFWFRTRUxfMiB8IEFEQ19KU1FSX0pFWFRTRUxfMSB8IEFEQ19JTkpfVFJJR19FWFRfRURHRV9ERUZBVUxUKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIHRyaWdnZXIgZnJvbSBleHRlcm5hbCBwZXJpcGhlcmFsOiBUSU0yNCBUUkdPIGV2ZW50LiBUcmlnZ2VyIGVkZ2Ugc2V0IHRvIHJpc2luZyBlZGdlIChkZWZhdWx0IHNldHRpbmcpLiAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTEwNDksOCArMTE2Myw4IEBACiAgICovCiAKIC8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX0lOSl9UUklHX0FVVE8gIEFEQyBncm91cCBpbmplY3RlZCAtIEF1dG9tYXRpYyB0cmlnZ2VyIG1vZGUKLSAgKiBAewotICAqLworKiBAeworKi8KICNkZWZpbmUgTExfQURDX0lOSl9UUklHX0lOREVQRU5ERU5UICAgICAgICAoMHgwMDAwMDAwMFVMKSAgICAgICAgIC8qITwgQURDIGdyb3VwIGluamVjdGVkIGNvbnZlcnNpb24gdHJpZ2dlciBpbmRlcGVuZGVudC4gU2V0dGluZyBtYW5kYXRvcnkgaWYgQURDIGdyb3VwIGluamVjdGVkIGluamVjdGVkIHRyaWdnZXIgc291cmNlIGlzIHNldCB0byBhbiBleHRlcm5hbCB0cmlnZ2VyLiAqLwogI2RlZmluZSBMTF9BRENfSU5KX1RSSUdfRlJPTV9HUlBfUkVHVUxBUiAgIChBRENfQ0ZHUl9KQVVUTykgICAgICAgLyohPCBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiB0cmlnZ2VyIGZyb20gQURDIGdyb3VwIHJlZ3VsYXIuIFNldHRpbmcgY29tcGxpYW50IG9ubHkgd2l0aCBncm91cCBpbmplY3RlZCB0cmlnZ2VyIHNvdXJjZSBzZXQgdG8gU1cgc3RhcnQsIHdpdGhvdXQgYW55IGZ1cnRoZXIgYWN0aW9uIG9uICBBREMgZ3JvdXAgaW5qZWN0ZWQgY29udmVyc2lvbiBzdGFydCBvciBzdG9wOiBpbiB0aGlzIGNhc2UsIEFEQyBncm91cCBpbmplY3RlZCBpcyBjb250cm9sbGVkIG9ubHkgZnJvbSBBREMgZ3JvdXAgcmVndWxhci4gKi8KIC8qKgpAQCAtMTExMiw2ICsxMjI2LDIyIEBACiAvKioKICAgKiBAfQogICAqLworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19DSEFOTkVMX1NBTVBMSU5HVElNRSAgQ2hhbm5lbCAtIFNhbXBsaW5nIHRpbWUKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9BRENfU0FNUExJTkdUSU1FX0FEQzNfMkNZQ0xFU181ICAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTYW1wbGluZyB0aW1lIDIuNSBBREMgY2xvY2sgY3ljbGVzLiBPbiBBREMzIG9mIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCAqLworI2RlZmluZSBMTF9BRENfU0FNUExJTkdUSU1FX0FEQzNfNkNZQ0xFU181ICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfU01QUjJfU01QMTBfMCkgLyohPCBTYW1wbGluZyB0aW1lIDYuNSBBREMgY2xvY2sgY3ljbGVzLiBPbiBBREMzIG9mIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCAqLworI2RlZmluZSBMTF9BRENfU0FNUExJTkdUSU1FX0FEQzNfMTJDWUNMRVNfNSAgICAgKCAgICAgICAgICAgICAgICAgICAgQURDX1NNUFIyX1NNUDEwXzEgICAgICAgICAgICAgICAgICAgICkgLyohPCBTYW1wbGluZyB0aW1lIDEyLjUgQURDIGNsb2NrIGN5Y2xlcy4gT24gQURDMyBvZiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNkZWZpbmUgTExfQURDX1NBTVBMSU5HVElNRV9BREMzXzI0Q1lDTEVTXzUgICAgICggICAgICAgICAgICAgICAgICAgIEFEQ19TTVBSMl9TTVAxMF8xIHwgQURDX1NNUFIyX1NNUDEwXzApIC8qITwgU2FtcGxpbmcgdGltZSAyNC41IEFEQyBjbG9jayBjeWNsZXMuIE9uIEFEQzMgb2YgZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIExMX0FEQ19TQU1QTElOR1RJTUVfQURDM180N0NZQ0xFU181ICAgICAoQURDX1NNUFIyX1NNUDEwXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAvKiE8IFNhbXBsaW5nIHRpbWUgNDcuNSBBREMgY2xvY2sgY3ljbGVzLiBPbiBBREMzIG9mIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCAqLworI2RlZmluZSBMTF9BRENfU0FNUExJTkdUSU1FX0FEQzNfOTJDWUNMRVNfNSAgICAgKEFEQ19TTVBSMl9TTVAxMF8yICAgICAgICAgICAgICAgICAgICAgfCBBRENfU01QUjJfU01QMTBfMCkgLyohPCBTYW1wbGluZyB0aW1lIDkyLjUgQURDIGNsb2NrIGN5Y2xlcy4gT24gQURDMyBvZiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNkZWZpbmUgTExfQURDX1NBTVBMSU5HVElNRV9BREMzXzI0N0NZQ0xFU181ICAgIChBRENfU01QUjJfU01QMTBfMiB8IEFEQ19TTVBSMl9TTVAxMF8xICAgICAgICAgICAgICAgICAgICApIC8qITwgU2FtcGxpbmcgdGltZSAyNDcuNSBBREMgY2xvY2sgY3ljbGVzLiBPbiBBREMzIG9mIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCAqLworI2RlZmluZSBMTF9BRENfU0FNUExJTkdUSU1FX0FEQzNfNjQwQ1lDTEVTXzUgICAgKEFEQ19TTVBSMl9TTVAxMF8yIHwgQURDX1NNUFIyX1NNUDEwXzEgfCBBRENfU01QUjJfU01QMTBfMCkgLyohPCBTYW1wbGluZyB0aW1lIDY0MC41IEFEQyBjbG9jayBjeWNsZXMuIE9uIEFEQzMgb2YgZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmICAvKiBBRENfVkVSX1Y1X1Y5MCAqLwogCiAvKiogQGRlZmdyb3VwIEFEQ19MTF9FQ19DSEFOTkVMX1NJTkdMRV9ESUZGX0VORElORyAgQ2hhbm5lbCAtIFNpbmdsZSBvciBkaWZmZXJlbnRpYWwgZW5kaW5nCiAgICogQHsKQEAgLTEyMjcsNiArMTM1NywyMiBAQAogLyoqCiAgICogQH0KICAgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorLyoqIEBkZWZncm91cCBBRENfTExfRUNfQVdEX0ZJTFRFUklOR19DT05GSUcgIEFuYWxvZyB3YXRjaGRvZyAtIGZpbHRlcmluZyBjb25maWcKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9BRENfQVdEX0ZJTFRFUklOR19OT05FICAgICAgICAgICgweDAwMDAwMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgbm8gZmlsdGVyaW5nLCBvbmUgb3V0LW9mLXdpbmRvdyBzYW1wbGUgaXMgbmVlZGVkIHRvIHJhaXNlIGZsYWcgb3IgaW50ZXJydXB0LiBPbiBBREMzIG9mIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCAqLworI2RlZmluZSBMTF9BRENfQVdEX0ZJTFRFUklOR18yU0FNUExFUyAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREMzX1RSMV9BV0RGSUxUXzApICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgMiBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIE9uIEFEQzMgb2YgZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIExMX0FEQ19BV0RfRklMVEVSSU5HXzNTQU1QTEVTICAgICAgKCAgICAgICAgICAgICAgICAgICAgIEFEQzNfVFIxX0FXREZJTFRfMSAgICAgICAgICAgICAgICAgICAgICkgICAvKiE8IEFEQyBhbmFsb2cgd2F0aGRvZyAzIGNvbnNlY3V0aXZlcyBvdXQtb2Ytd2luZG93IHNhbXBsZXMgYXJlIG5lZWRlZCB0byByYWlzZSBmbGFnIG9yIGludGVycnVwdC4gT24gQURDMyBvZiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNkZWZpbmUgTExfQURDX0FXRF9GSUxURVJJTkdfNFNBTVBMRVMgICAgICAoICAgICAgICAgICAgICAgICAgICAgQURDM19UUjFfQVdERklMVF8xIHwgQURDM19UUjFfQVdERklMVF8wKSAgIC8qITwgQURDIGFuYWxvZyB3YXRoZG9nIDQgY29uc2VjdXRpdmVzIG91dC1vZi13aW5kb3cgc2FtcGxlcyBhcmUgbmVlZGVkIHRvIHJhaXNlIGZsYWcgb3IgaW50ZXJydXB0LiBPbiBBREMzIG9mIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCAqLworI2RlZmluZSBMTF9BRENfQVdEX0ZJTFRFUklOR181U0FNUExFUyAgICAgIChBREMzX1RSMV9BV0RGSUxUXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgNSBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIE9uIEFEQzMgb2YgZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisjZGVmaW5lIExMX0FEQ19BV0RfRklMVEVSSU5HXzZTQU1QTEVTICAgICAgKEFEQzNfVFIxX0FXREZJTFRfMiB8ICAgICAgICAgICAgICAgICAgICAgIEFEQzNfVFIxX0FXREZJTFRfMCkgICAvKiE8IEFEQyBhbmFsb2cgd2F0aGRvZyA2IGNvbnNlY3V0aXZlcyBvdXQtb2Ytd2luZG93IHNhbXBsZXMgYXJlIG5lZWRlZCB0byByYWlzZSBmbGFnIG9yIGludGVycnVwdC4gT24gQURDMyBvZiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHggKi8KKyNkZWZpbmUgTExfQURDX0FXRF9GSUxURVJJTkdfN1NBTVBMRVMgICAgICAoQURDM19UUjFfQVdERklMVF8yIHwgQURDM19UUjFfQVdERklMVF8xICAgICAgICAgICAgICAgICAgICAgKSAgIC8qITwgQURDIGFuYWxvZyB3YXRoZG9nIDcgY29uc2VjdXRpdmVzIG91dC1vZi13aW5kb3cgc2FtcGxlcyBhcmUgbmVlZGVkIHRvIHJhaXNlIGZsYWcgb3IgaW50ZXJydXB0LiBPbiBBREMzIG9mIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eCAqLworI2RlZmluZSBMTF9BRENfQVdEX0ZJTFRFUklOR184U0FNUExFUyAgICAgIChBREMzX1RSMV9BV0RGSUxUXzIgfCBBREMzX1RSMV9BV0RGSUxUXzEgfCBBREMzX1RSMV9BV0RGSUxUXzApICAgLyohPCBBREMgYW5hbG9nIHdhdGhkb2cgOCBjb25zZWN1dGl2ZXMgb3V0LW9mLXdpbmRvdyBzYW1wbGVzIGFyZSBuZWVkZWQgdG8gcmFpc2UgZmxhZyBvciBpbnRlcnJ1cHQuIE9uIEFEQzMgb2YgZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4ICovCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qIEFEQ19WRVJfVjVfVjkwICovCiAKIC8qKiBAZGVmZ3JvdXAgQURDX0xMX0VDX09WU19TQ09QRSAgT3ZlcnNhbXBsaW5nIC0gT3ZlcnNhbXBsaW5nIHNjb3BlCiAgICogQHsKQEAgLTEyNDgsNiArMTM5NCwyMiBAQAogLyoqCiAgICogQH0KICAgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorLyoqIEBkZWZncm91cCBBRENfTExfRUNfT1ZTX1JBVElPICBPdmVyc2FtcGxpbmcgLSBSYXRpbworICAqIEB7CisgICovCisjZGVmaW5lIExMX0FEQ19PVlNfUkFUSU9fMiAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAyICgyIEFEQyBjb252ZXJzaW9ucyBhcmUgcGVyZm9ybWVkLCBzdW0gb2YgdGhlc2UgY29udmVyc2lvbnMgZGF0YSBpcyBjb21wdXRlZCB0byByZXN1bHQgYXMgdGhlIEFEQyBvdmVyc2FtcGxpbmcgY29udmVyc2lvbiBkYXRhIChiZWZvcmUgcG90ZW50aWFsIHNoaWZ0KSAqLworI2RlZmluZSBMTF9BRENfT1ZTX1JBVElPXzQgICAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDM19DRkdSMl9PVlNSXzApICAvKiE8IEFEQyBvdmVyc2FtcGxpbmcgcmF0aW8gb2YgNCAoNCBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCwgc3VtIG9mIHRoZXNlIGNvbnZlcnNpb25zIGRhdGEgaXMgY29tcHV0ZWQgdG8gcmVzdWx0IGFzIHRoZSBBREMgb3ZlcnNhbXBsaW5nIGNvbnZlcnNpb24gZGF0YSAoYmVmb3JlIHBvdGVudGlhbCBzaGlmdCkgKi8KKyNkZWZpbmUgTExfQURDX09WU19SQVRJT184ICAgICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICBBREMzX0NGR1IyX09WU1JfMSAgICAgICAgICAgICAgICAgICAgKSAgLyohPCBBREMgb3ZlcnNhbXBsaW5nIHJhdGlvIG9mIDggKDggQURDIGNvbnZlcnNpb25zIGFyZSBwZXJmb3JtZWQsIHN1bSBvZiB0aGVzZSBjb252ZXJzaW9ucyBkYXRhIGlzIGNvbXB1dGVkIHRvIHJlc3VsdCBhcyB0aGUgQURDIG92ZXJzYW1wbGluZyBjb252ZXJzaW9uIGRhdGEgKGJlZm9yZSBwb3RlbnRpYWwgc2hpZnQpICovCisjZGVmaW5lIExMX0FEQ19PVlNfUkFUSU9fMTYgICAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgQURDM19DRkdSMl9PVlNSXzEgfCBBREMzX0NGR1IyX09WU1JfMCkgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAxNiAoMTYgQURDIGNvbnZlcnNpb25zIGFyZSBwZXJmb3JtZWQsIHN1bSBvZiB0aGVzZSBjb252ZXJzaW9ucyBkYXRhIGlzIGNvbXB1dGVkIHRvIHJlc3VsdCBhcyB0aGUgQURDIG92ZXJzYW1wbGluZyBjb252ZXJzaW9uIGRhdGEgKGJlZm9yZSBwb3RlbnRpYWwgc2hpZnQpICovCisjZGVmaW5lIExMX0FEQ19PVlNfUkFUSU9fMzIgICAgICAgICAgICAgICAgKEFEQzNfQ0ZHUjJfT1ZTUl8yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAzMiAoMzIgQURDIGNvbnZlcnNpb25zIGFyZSBwZXJmb3JtZWQsIHN1bSBvZiB0aGVzZSBjb252ZXJzaW9ucyBkYXRhIGlzIGNvbXB1dGVkIHRvIHJlc3VsdCBhcyB0aGUgQURDIG92ZXJzYW1wbGluZyBjb252ZXJzaW9uIGRhdGEgKGJlZm9yZSBwb3RlbnRpYWwgc2hpZnQpICovCisjZGVmaW5lIExMX0FEQ19PVlNfUkFUSU9fNjQgICAgICAgICAgICAgICAgKEFEQzNfQ0ZHUjJfT1ZTUl8yICAgICAgICAgICAgICAgICAgICAgfCBBREMzX0NGR1IyX09WU1JfMCkgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiA2NCAoNjQgQURDIGNvbnZlcnNpb25zIGFyZSBwZXJmb3JtZWQsIHN1bSBvZiB0aGVzZSBjb252ZXJzaW9ucyBkYXRhIGlzIGNvbXB1dGVkIHRvIHJlc3VsdCBhcyB0aGUgQURDIG92ZXJzYW1wbGluZyBjb252ZXJzaW9uIGRhdGEgKGJlZm9yZSBwb3RlbnRpYWwgc2hpZnQpICovCisjZGVmaW5lIExMX0FEQ19PVlNfUkFUSU9fMTI4ICAgICAgICAgICAgICAgKEFEQzNfQ0ZHUjJfT1ZTUl8yIHwgQURDM19DRkdSMl9PVlNSXzEgICAgICAgICAgICAgICAgICAgICkgIC8qITwgQURDIG92ZXJzYW1wbGluZyByYXRpbyBvZiAxMjggKDEyOCBBREMgY29udmVyc2lvbnMgYXJlIHBlcmZvcm1lZCwgc3VtIG9mIHRoZXNlIGNvbnZlcnNpb25zIGRhdGEgaXMgY29tcHV0ZWQgdG8gcmVzdWx0IGFzIHRoZSBBREMgb3ZlcnNhbXBsaW5nIGNvbnZlcnNpb24gZGF0YSAoYmVmb3JlIHBvdGVudGlhbCBzaGlmdCkgKi8KKyNkZWZpbmUgTExfQURDX09WU19SQVRJT18yNTYgICAgICAgICAgICAgICAoQURDM19DRkdSMl9PVlNSXzIgfCBBREMzX0NGR1IyX09WU1JfMSB8IEFEQzNfQ0ZHUjJfT1ZTUl8wKSAgLyohPCBBREMgb3ZlcnNhbXBsaW5nIHJhdGlvIG9mIDI1NiAoMjU2IEFEQyBjb252ZXJzaW9ucyBhcmUgcGVyZm9ybWVkLCBzdW0gb2YgdGhlc2UgY29udmVyc2lvbnMgZGF0YSBpcyBjb21wdXRlZCB0byByZXN1bHQgYXMgdGhlIEFEQyBvdmVyc2FtcGxpbmcgY29udmVyc2lvbiBkYXRhIChiZWZvcmUgcG90ZW50aWFsIHNoaWZ0KSAqLworLyoqCisgICogQH0KKyAgKi8KKyNlbmRpZiAgLyogQURDX1ZFUl9WNV9WOTAgKi8KIAogLyoqIEBkZWZncm91cCBBRENfTExfRUNfT1ZTX1NISUZUICBPdmVyc2FtcGxpbmcgLSBEYXRhIHNoaWZ0CiAgICogQHsKQEAgLTE0MzAsNiArMTU5Miw0MSBAQAogICAqIEB7CiAgICovCiAKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorLyoqCisgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY29udmVydCB0aGUgcmVzb2x1dGlvbiBkZWZpbmVzIHRvIFNUTTMySDczeC8yeCBBREMzIHJlZ2lzdGVycyB2YWx1ZXMKKyAgKiAgICAgICAgIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFEQzMgcmVzb2x1dGlvbiBhY2NvcmRpbmcgdG8gdGhlIFNUTTMySDczeC8yeCBSZWZNYW4uCisgICogQG5vdGUgICBUaGUgaW5wdXQgY2FuIGJlIGEgdmFsdWUgZnJvbSBBREMzIHJlc29sdXRpb24gKDEyYiwgMTBiLCA4Yiw2YikKKyAgKiBAcGFyYW0gIF9fQURDX1JFU09MVVRJT05fXyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzEyQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzEwQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzhCCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fNkIKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIDB4MDAwMDAwMDBVTCAodmFsdWUgY29ycmVzcG9kbmluZyB0byBBREMzIDEyIGJpdHMpCisgICogICAgICAgICBAYXJnIEFEQ19DRkdSX1JFU18wID0gMHgwMDAwMDAwNCAgKHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gQURDMyAxMCBiaXRzKQorICAqICAgICAgICAgQGFyZyBBRENfQ0ZHUl9SRVNfMSA9IDB4MDAwMDAwMDggKHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gQURDMyA4IGJpdHMpCisgICogICAgICAgICBAYXJnIDB4MDAwMDAwMUMgKHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gQURDMyA2IGJpdHMpCisgICogQG5vdGUgICBUaGlzIGhlbHBlciBtYWNybyBpcyBhcHBsaWNhYmxlIGZvciBTVE0zMkg3M3gvMnggZGV2aWNlcyBvbmx5CisgICovCisjZGVmaW5lIF9fTExfQURDMTJfUkVTT0xVVElPTl9UT19BREMzKF9fQURDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKChfX0FEQ19SRVNPTFVUSU9OX18pID09IExMX0FEQ19SRVNPTFVUSU9OXzEyQikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICA/KDB4MDAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAoKF9fQURDX1JFU09MVVRJT05fXykgPT0gTExfQURDX1JFU09MVVRJT05fMTBCKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICA/KEFEQ19DRkdSX1JFU18wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoKF9fQURDX1JFU09MVVRJT05fXykgPT0gTExfQURDX1JFU09MVVRJT05fOEIpICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICA/KEFEQ19DRkdSX1JFU18xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAoKF9fQURDX1JFU09MVVRJT05fXykgPT0gTExfQURDX1JFU09MVVRJT05fNkIpICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICA/KChBRENfQ0ZHUl9SRVNfMnxBRENfQ0ZHUl9SRVNfMSB8IEFEQ19DRkdSX1JFU18wKSkgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICA6KDB4MDAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICkKKworI2VuZGlmIC8qIEFEQ19WRVJfVjVfVjkwICovCisKIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGdldCBBREMgY2hhbm5lbCBudW1iZXIgaW4gZGVjaW1hbCBmb3JtYXQKICAgKiAgICAgICAgIGZyb20gbGl0ZXJhbHMgTExfQURDX0NIQU5ORUxfeC4KQEAgLTE0NzQsMTMgKzE2NzEsMTMgQEAKICAgKi8KICNkZWZpbmUgX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKF9fQ0hBTk5FTF9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgoKChfX0NIQU5ORUxfXykgJiBBRENfQ0hBTk5FTF9JRF9CSVRGSUVMRF9NQVNLKSA9PSAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgPyAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA/ICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgKChfX0NIQU5ORUxfXykgJiBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSykgPj4gQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MgXAotICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICh1aW50MzJfdClQT1NJVElPTl9WQUwoKF9fQ0hBTk5FTF9fKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICApCiAKIC8qKgpAQCAtMTUyNywxNyArMTcyNCwxNyBAQAogICAqLwogI2RlZmluZSBfX0xMX0FEQ19ERUNJTUFMX05CX1RPX0NIQU5ORUwoX19ERUNJTUFMX05CX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgoKF9fREVDSU1BTF9OQl9fKSA8PSA5VUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgID8gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgID8gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgKChfX0RFQ0lNQUxfTkJfXykgPDwgQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIFwKICAgICAgICAoQURDX0FXRDJDUl9BV0QyQ0hfMCA8PCAoX19ERUNJTUFMX05CX18pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgXAogICAgICAgIChBRENfU01QUjFfUkVHT0ZGU0VUIHwgKCgoM1VMICogKF9fREVDSU1BTF9OQl9fKSkpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpICAgICAgICAgICBcCi0gICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgKChfX0RFQ0lNQUxfTkJfXykgPDwgQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwKICAgICAgICAoQURDX0FXRDJDUl9BV0QyQ0hfMCA8PCAoX19ERUNJTUFMX05CX18pKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAogICAgICAgIChBRENfU01QUjJfUkVHT0ZGU0VUIHwgKCgoM1VMICogKChfX0RFQ0lNQUxfTkJfXykgLSAxMFVMKSkpIDw8IEFEQ19DSEFOTkVMX1NNUHhfQklUT0ZGU0VUX1BPUykpICBcCi0gICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICApCiAKIC8qKgpAQCAtMTg1NCwxMiArMjA1MSwxMiBAQAogICAqLwogI2RlZmluZSBfX0xMX0FEQ19BTkFMT0dXRF9DSEFOTkVMX0dST1VQKF9fQ0hBTk5FTF9fLCBfX0dST1VQX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKCgoX19HUk9VUF9fKSA9PSBMTF9BRENfR1JPVVBfUkVHVUxBUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICA/ICgoKF9fQ0hBTk5FTF9fKSAmIEFEQ19DSEFOTkVMX0lEX01BU0spIHwgQURDX0NGR1JfQVdEMUVOIHwgQURDX0NGR1JfQVdEMVNHTCkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICgoX19HUk9VUF9fKSA9PSBMTF9BRENfR1JPVVBfSU5KRUNURUQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICA/ICgoKF9fQ0hBTk5FTF9fKSAmIEFEQ19DSEFOTkVMX0lEX01BU0spIHwgQURDX0NGR1JfSkFXRDFFTiB8IEFEQ19DRkdSX0FXRDFTR0wpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICgoKF9fQ0hBTk5FTF9fKSAmIEFEQ19DSEFOTkVMX0lEX01BU0spIHwgQURDX0NGR1JfSkFXRDFFTiB8IEFEQ19DRkdSX0FXRDFFTiB8IEFEQ19DRkdSX0FXRDFTR0wpICAgICAgICBcCisgICAgPyAoKChfX0NIQU5ORUxfXykgJiBBRENfQ0hBTk5FTF9JRF9NQVNLKSB8IEFEQ19DRkdSX0FXRDFFTiB8IEFEQ19DRkdSX0FXRDFTR0wpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICgoX19HUk9VUF9fKSA9PSBMTF9BRENfR1JPVVBfSU5KRUNURUQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgPyAoKChfX0NIQU5ORUxfXykgJiBBRENfQ0hBTk5FTF9JRF9NQVNLKSB8IEFEQ19DRkdSX0pBV0QxRU4gfCBBRENfQ0ZHUl9BV0QxU0dMKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICgoKF9fQ0hBTk5FTF9fKSAmIEFEQ19DSEFOTkVMX0lEX01BU0spIHwgQURDX0NGR1JfSkFXRDFFTiB8IEFEQ19DRkdSX0FXRDFFTiB8IEFEQ19DRkdSX0FXRDFTR0wpICBcCiAgICkKIAogLyoqCkBAIC0yMDM2LDYgKzIyMzMsMjMgQEAKICNkZWZpbmUgX19MTF9BRENfRElHSVRBTF9TQ0FMRShfX0FEQ19SRVNPTFVUSU9OX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICgweEZGRkZVTCA+PiAoKF9fQURDX1JFU09MVVRJT05fXykgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkpCiAKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorLyoqCisgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gZGVmaW5lIHRoZSBBREMgY29udmVyc2lvbiBkYXRhIGZ1bGwtc2NhbGUgZGlnaXRhbAorICAqICAgICAgICAgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgc2VsZWN0ZWQgQURDIHJlc29sdXRpb24uCisgICogQG5vdGUgICBBREMgY29udmVyc2lvbiBkYXRhIGZ1bGwtc2NhbGUgY29ycmVzcG9uZHMgdG8gdm9sdGFnZSByYW5nZQorICAqICAgICAgICAgZGV0ZXJtaW5lZCBieSBhbmFsb2cgdm9sdGFnZSByZWZlcmVuY2VzIFZyZWYrIGFuZCBWcmVmLQorICAqICAgICAgICAgKHJlZmVyIHRvIHJlZmVyZW5jZSBtYW51YWwpLgorICAqIEBwYXJhbSAgX19BRENfUkVTT0xVVElPTl9fIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fMTJCCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fMTBCCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fOEIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfUkVTT0xVVElPTl82QgorICAqIEByZXR2YWwgQURDIGNvbnZlcnNpb24gZGF0YSBlcXVpdmFsZW50IHZvbHRhZ2UgdmFsdWUgKHVuaXQ6IGRpZ2l0YWwgdmFsdWUgb2YgQURDIGNvbnZlcnNpb24gYml0ZmllbGQpCisgICovCisjZGVmaW5lIF9fTExfQURDM19ESUdJVEFMX1NDQUxFKF9fQURDX1JFU09MVVRJT05fXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoMHhGRkZVTCA+PiAoKF9fQURDX1JFU09MVVRJT05fXykgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TX0FEQzMgLSAxVUwpKSkKKyNlbmRpZiAgLyogQURDX1ZFUl9WNV9WOTAgKi8KIC8qKgogICAqIEBicmllZiAgSGVscGVyIG1hY3JvIHRvIGNvbnZlcnQgdGhlIEFEQyBjb252ZXJzaW9uIGRhdGEgZnJvbQogICAqICAgICAgICAgYSByZXNvbHV0aW9uIHRvIGFub3RoZXIgcmVzb2x1dGlvbi4KQEAgLTIwNTYsMTQgKzIyNzAsOTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfUkVTT0xVVElPTl84QgogICAqIEByZXR2YWwgQURDIGNvbnZlcnNpb24gZGF0YSB0byB0aGUgcmVxdWVzdGVkIHJlc29sdXRpb24KICAgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfWCkgfHwgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKICNkZWZpbmUgX19MTF9BRENfQ09OVkVSVF9EQVRBX1JFU09MVVRJT04oX19EQVRBX18sXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pIFwKKyggKF9fQURDX1JFU09MVVRJT05fQ1VSUkVOVF9fID09IExMX0FEQ19SRVNPTFVUSU9OXzhCKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgPyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9fREFUQV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA8PCAoKChfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXykgJiB+KEFEQ19DRkdSX1JFU18xIHwgQURDX0NGR1JfUkVTXzApICkgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkpICBcCisgICA+PiAoKF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pID4+IChBRENfQ0ZHUl9SRVNfQklUT0ZGU0VUX1BPUyAtIDFVTCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChfX0FEQ19SRVNPTFVUSU9OX1RBUkdFVF9fID09IExMX0FEQ19SRVNPTFVUSU9OXzhCKSBcCisgICAgICAgPyAoIFwKKyAgICAgICAgICAgKChfX0RBVEFfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICA8PCAoKF9fQURDX1JFU09MVVRJT05fQ1VSUkVOVF9fKSA+PiAoQURDX0NGR1JfUkVTX0JJVE9GRlNFVF9QT1MgLSAxVUwpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgPj4gKCgoX19BRENfUkVTT0xVVElPTl9UQVJHRVRfXykgJiB+KEFEQ19DRkdSX1JFU18xIHwgQURDX0NGR1JfUkVTXzApICkgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkgICAgXAorICAgICAgICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICA6XAorICAgICAgICAgIChcCisgICAgKChfX0RBVEFfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgPDwgKChfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXykgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgPj4gKChfX0FEQ19SRVNPTFVUSU9OX1RBUkdFVF9fKSA+PiAoQURDX0NGR1JfUkVTX0JJVE9GRlNFVF9QT1MgLSAxVUwpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICApXAorICkKKworCisjZWxzZSAvKiBkZWZpbmVkKEFEQ19WRVJfVjVfMykgKi8KKyNkZWZpbmUgX19MTF9BRENfQ09OVkVSVF9EQVRBX1JFU09MVVRJT04oX19EQVRBX18sXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXyxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pIFwKKyggKF9fQURDX1JFU09MVVRJT05fQ1VSUkVOVF9fID09IExMX0FEQ19SRVNPTFVUSU9OXzhCKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgPyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9fREFUQV9fKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA8PCAoKChfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXykgJiB+KEFEQ19DRkdSX1JFU18xIHwgQURDX0NGR1JfUkVTXzApICkgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkpICBcCisgICA+PiAoKF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pID4+IChBRENfQ0ZHUl9SRVNfQklUT0ZGU0VUX1BPUyAtIDFVTCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIChfX0FEQ19SRVNPTFVUSU9OX1RBUkdFVF9fID09IExMX0FEQ19SRVNPTFVUSU9OXzhCKSBcCisgICAgICAgPyAoIFwKKyAgICAgICAgICAgKChfX0RBVEFfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICA8PCAoKF9fQURDX1JFU09MVVRJT05fQ1VSUkVOVF9fKSA+PiAoQURDX0NGR1JfUkVTX0JJVE9GRlNFVF9QT1MgLSAxVUwpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgPj4gKCgoX19BRENfUkVTT0xVVElPTl9UQVJHRVRfXykgJiB+KEFEQ19DRkdSX1JFU18xIHwgQURDX0NGR1JfUkVTXzApICkgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgOlwKKyAgICAgICAgICAoXAorICAgICgoX19EQVRBX18pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIDw8ICgoX19BRENfUkVTT0xVVElPTl9DVVJSRU5UX18pID4+IChBRENfQ0ZHUl9SRVNfQklUT0ZGU0VUX1BPUyAtIDFVTCkpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgID4+ICgoX19BRENfUkVTT0xVVElPTl9UQVJHRVRfXykgPj4gKEFEQ19DRkdSX1JFU19CSVRPRkZTRVRfUE9TIC0gMVVMKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgKVwKKyApCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKy8qKgorKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjb252ZXJ0IHRoZSBBREMgY29udmVyc2lvbiBkYXRhIGZyb20KKyogICAgICAgICBhIHJlc29sdXRpb24gdG8gYW5vdGhlciByZXNvbHV0aW9uLgorKiBAcGFyYW0gIF9fREFUQV9fIEFEQyBjb252ZXJzaW9uIGRhdGEgdG8gYmUgY29udmVydGVkCisqIEBwYXJhbSAgX19BRENfUkVTT0xVVElPTl9DVVJSRU5UX18gUmVzb2x1dGlvbiBvZiB0aGUgZGF0YSB0byBiZSBjb252ZXJ0ZWQKKyogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfUkVTT0xVVElPTl8xMkIKKyogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fMTBCCisqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzhCCisqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzZCCisqIEBwYXJhbSAgX19BRENfUkVTT0xVVElPTl9UQVJHRVRfXyBSZXNvbHV0aW9uIG9mIHRoZSBkYXRhIGFmdGVyIGNvbnZlcnNpb24KKyogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfUkVTT0xVVElPTl8xMkIKKyogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fMTBCCisqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzhCCisqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRVNPTFVUSU9OXzZCCisqIEByZXR2YWwgQURDIGNvbnZlcnNpb24gZGF0YSB0byB0aGUgcmVxdWVzdGVkIHJlc29sdXRpb24KKyovCisjZGVmaW5lIF9fTExfQURDX0NPTlZFUlRfREFUQV9SRVNPTFVUSU9OX0FEQzMoX19EQVRBX18sXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FEQ19SRVNPTFVUSU9OX0NVUlJFTlRfXyxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pICAgICAgICAgICAgXAogICAoKChfX0RBVEFfXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICA8PCAoKF9fQURDX1JFU09MVVRJT05fQ1VSUkVOVF9fKSA+PiAoQURDX0NGR1JfUkVTX0JJVE9GRlNFVF9QT1MgLSAxVUwpKSkgICBcCi0gICA+PiAoKF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pID4+IChBRENfQ0ZHUl9SRVNfQklUT0ZGU0VUX1BPUyAtIDFVTCkpICAgICAgXAorICAgIDw8ICgoX19BRENfUkVTT0xVVElPTl9DVVJSRU5UX18pID4+IChBRENfQ0ZHUl9SRVNfQklUT0ZGU0VUX1BPU19BREMzIC0gMVVMKSkpICBcCisgICA+PiAoKF9fQURDX1JFU09MVVRJT05fVEFSR0VUX18pID4+IChBRENfQ0ZHUl9SRVNfQklUT0ZGU0VUX1BPU19BREMzIC0gMVVMKSkgICAgIFwKICAgKQotCisjZW5kaWYgIC8qIEFEQ19WRVJfVjVfVjkwICovCiAvKioKICAgKiBAYnJpZWYgIEhlbHBlciBtYWNybyB0byBjYWxjdWxhdGUgdGhlIHZvbHRhZ2UgKHVuaXQ6IG1Wb2x0KQogICAqICAgICAgICAgY29ycmVzcG9uZGluZyB0byBhIEFEQyBjb252ZXJzaW9uIGRhdGEgKHVuaXQ6IGRpZ2l0YWwgdmFsdWUpLgpAQCAtMjExNyw5ICsyNDA3LDEwIEBACiAjZGVmaW5lIF9fTExfQURDX0NBTENfVlJFRkFOQUxPR19WT0xUQUdFKF9fVlJFRklOVF9BRENfREFUQV9fLFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19BRENfUkVTT0xVVElPTl9fKSAgICAgICAgICAgICAgICAgICBcCiAgICgoKHVpbnQzMl90KSgqVlJFRklOVF9DQUxfQUREUikgKiBWUkVGSU5UX0NBTF9WUkVGKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgLyBfX0xMX0FEQ19DT05WRVJUX0RBVEFfUkVTT0xVVElPTigoX19WUkVGSU5UX0FEQ19EQVRBX18pLCAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXyksICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX0FEQ19SRVNPTFVUSU9OXzE2QikpCisgICAgLyBfX0xMX0FEQ19DT05WRVJUX0RBVEFfUkVTT0xVVElPTigoX19WUkVGSU5UX0FEQ19EQVRBX18pLCAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fQURDX1JFU09MVVRJT05fXyksICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExMX0FEQ19SRVNPTFVUSU9OXzE2QikgICAgICAgICAgICAgICAgICBcCisgICkKIAogLyoqCiAgICogQGJyaWVmICBIZWxwZXIgbWFjcm8gdG8gY2FsY3VsYXRlIHRoZSB0ZW1wZXJhdHVyZSAodW5pdDogZGVncmVlIENlbHNpdXMpCkBAIC0yMjk0LDE3ICsyNTg1LDE3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0RNQV9HZXRSZWdBZGRyKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBSZWdpc3RlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZGF0YV9yZWdfYWRkcjsKKyAgdWludDMyX3QgZGF0YV9yZWdfYWRkcjsKIAogICBpZiAoUmVnaXN0ZXIgPT0gTExfQURDX0RNQV9SRUdfUkVHVUxBUl9EQVRBKQogICB7CiAgICAgLyogUmV0cmlldmUgYWRkcmVzcyBvZiByZWdpc3RlciBEUiAqLwotICAgIGRhdGFfcmVnX2FkZHIgPSAodWludDMyX3QpICYoQURDeC0+RFIpOworICAgIGRhdGFfcmVnX2FkZHIgPSAodWludDMyX3QpICYgKEFEQ3gtPkRSKTsKICAgfQogICBlbHNlIC8qIChSZWdpc3RlciA9PSBMTF9BRENfRE1BX1JFR19SRUdVTEFSX0RBVEFfTVVMVEkpICovCiAgIHsKICAgICAvKiBSZXRyaWV2ZSBhZGRyZXNzIG9mIHJlZ2lzdGVyIENEUiAqLwotICAgIGRhdGFfcmVnX2FkZHIgPSAodWludDMyX3QpICYoKF9fTExfQURDX0NPTU1PTl9JTlNUQU5DRShBREN4KSktPkNEUik7CisgICAgZGF0YV9yZWdfYWRkciA9ICh1aW50MzJfdCkgJiAoKF9fTExfQURDX0NPTU1PTl9JTlNUQU5DRShBREN4KSktPkNEUik7CiAgIH0KIAogICByZXR1cm4gZGF0YV9yZWdfYWRkcjsKQEAgLTI0OTEsOSArMjc4MiwxNSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX1NldENhbGlicmF0aW9uT2Zmc2V0RmFjdG9yKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBTaW5nbGVEaWZmLCB1aW50MzJfdCBDYWxpYnJhdGlvbkZhY3RvcikKIHsKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKSAgCisgIE1PRElGWV9SRUcoQURDeC0+Q0FMRkFDVF9SRVMxMywKKyAgICAgICAgICAgICBTaW5nbGVEaWZmICYgQURDX1NJTkdMRURJRkZfQ0FMSUJfRkFDVE9SX01BU0ssCisgICAgICAgICAgICAgQ2FsaWJyYXRpb25GYWN0b3IgPDwgKCgoU2luZ2xlRGlmZiAmIEFEQ19TSU5HTEVESUZGX0NBTElCX0ZfQklUX0RfTUFTSykgPj4gQURDX1NJTkdMRURJRkZfQ0FMSUJfRl9CSVRfRF9TSElGVDQpICYgfihTaW5nbGVEaWZmICYgQURDX0NBTEZBQ1RfQ0FMRkFDVF9TKSkpOworI2Vsc2UKICAgTU9ESUZZX1JFRyhBREN4LT5DQUxGQUNULAogICAgICAgICAgICAgIFNpbmdsZURpZmYgJiBBRENfU0lOR0xFRElGRl9DQUxJQl9GQUNUT1JfTUFTSywKICAgICAgICAgICAgICBDYWxpYnJhdGlvbkZhY3RvciA8PCAoKChTaW5nbGVEaWZmICYgQURDX1NJTkdMRURJRkZfQ0FMSUJfRl9CSVRfRF9NQVNLKSA+PiBBRENfU0lOR0xFRElGRl9DQUxJQl9GX0JJVF9EX1NISUZUNCkgJiB+KFNpbmdsZURpZmYgJiBBRENfQ0FMRkFDVF9DQUxGQUNUX1MpKSk7CisjZW5kaWYKIH0KIAogLyoqCkBAIC0yNTIwLDcgKzI4MTcsMTEgQEAKICAgLyogIlNpbmdsZURpZmYiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFBhcmFtZXRlciB1c2VkIHdpdGggbWFzayAiQURDX1NJTkdMRURJRkZfQ0FMSUJfRkFDVE9SX01BU0siIGJlY2F1c2UgICAgICAqLwogICAvKiBjb250YWluaW5nIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG90aGVyIHB1cnBvc2UuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5DQUxGQUNUX1JFUzEzLCAoU2luZ2xlRGlmZiAmIEFEQ19TSU5HTEVESUZGX0NBTElCX0ZBQ1RPUl9NQVNLKSkgPj4gKChTaW5nbGVEaWZmICYgQURDX1NJTkdMRURJRkZfQ0FMSUJfRl9CSVRfRF9NQVNLKSA+PiBBRENfU0lOR0xFRElGRl9DQUxJQl9GX0JJVF9EX1NISUZUNCkpOworI2Vsc2UKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoQURDeC0+Q0FMRkFDVCwgKFNpbmdsZURpZmYgJiBBRENfU0lOR0xFRElGRl9DQUxJQl9GQUNUT1JfTUFTSykpID4+ICgoU2luZ2xlRGlmZiAmIEFEQ19TSU5HTEVESUZGX0NBTElCX0ZfQklUX0RfTUFTSykgPj4gQURDX1NJTkdMRURJRkZfQ0FMSUJfRl9CSVRfRF9TSElGVDQpKTsKKyNlbmRpZgogfQogCiAvKioKQEAgLTI1NDcsMTMgKzI4NDgsMjYgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19TZXRDYWxpYnJhdGlvbkxpbmVhckZhY3RvcihBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgTGluZWFyaXR5V29yZCwgdWludDMyX3QgQ2FsaWJyYXRpb25GYWN0b3IpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRpbWVvdXRfY3B1X2N5Y2xlcyA9IEFEQ19MSU5FQVJJVFlfQklUX1RPR0dMRV9USU1FT1VUOworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgIGlmIChBREN4ICE9IEFEQzMpCisgIHsKKyAgICB1aW50MzJfdCB0aW1lb3V0X2NwdV9jeWNsZXMgPSBBRENfTElORUFSSVRZX0JJVF9UT0dHTEVfVElNRU9VVDsKKyAgICBNT0RJRllfUkVHKEFEQ3gtPkNBTEZBQ1QyX1JFUzE0LCBBRENfQ0FMRkFDVDJfTElOQ0FMRkFDVCwgQ2FsaWJyYXRpb25GYWN0b3IpOworICAgIE1PRElGWV9SRUcoQURDeC0+Q1IsIEFEQ19DUl9BRENBTExJTiwgTGluZWFyaXR5V29yZCk7CisgICAgd2hpbGUgKChSRUFEX0JJVChBREN4LT5DUiwgTGluZWFyaXR5V29yZCkgPT0gMFVMKSAmJiAodGltZW91dF9jcHVfY3ljbGVzID4gMFVMKSkKKyAgICB7CisgICAgICB0aW1lb3V0X2NwdV9jeWNsZXMtLTsKKyAgICB9CisgIH0KKyNlbHNlIC8qIEFEQ19WRVJfVjVfVjkwICovCisgIHVpbnQzMl90IHRpbWVvdXRfY3B1X2N5Y2xlcyA9IEFEQ19MSU5FQVJJVFlfQklUX1RPR0dMRV9USU1FT1VUOwogICBNT0RJRllfUkVHKEFEQ3gtPkNBTEZBQ1QyLCBBRENfQ0FMRkFDVDJfTElOQ0FMRkFDVCwgQ2FsaWJyYXRpb25GYWN0b3IpOwogICBNT0RJRllfUkVHKEFEQ3gtPkNSLCBBRENfQ1JfQURDQUxMSU4sIExpbmVhcml0eVdvcmQpOwotICB3aGlsZSAoKFJFQURfQklUKEFEQ3gtPkNSLCBMaW5lYXJpdHlXb3JkKT09MFVMKSAmJiAodGltZW91dF9jcHVfY3ljbGVzID4gMFVMKSkKKyAgd2hpbGUgKChSRUFEX0JJVChBREN4LT5DUiwgTGluZWFyaXR5V29yZCkgPT0gMFVMKSAmJiAodGltZW91dF9jcHVfY3ljbGVzID4gMFVMKSkKICAgewogICAgIHRpbWVvdXRfY3B1X2N5Y2xlcy0tOwogICB9CisjZW5kaWYKIH0KIAogLyoqCkBAIC0yNTc0LDEzICsyODg4LDE3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0dldENhbGlicmF0aW9uTGluZWFyRmFjdG9yKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBMaW5lYXJpdHlXb3JkKQogewotICByZWdpc3RlciB1aW50MzJfdCB0aW1lb3V0X2NwdV9jeWNsZXMgPSBBRENfTElORUFSSVRZX0JJVF9UT0dHTEVfVElNRU9VVDsKKyAgdWludDMyX3QgdGltZW91dF9jcHVfY3ljbGVzID0gQURDX0xJTkVBUklUWV9CSVRfVE9HR0xFX1RJTUVPVVQ7CiAgIENMRUFSX0JJVChBREN4LT5DUiwgTGluZWFyaXR5V29yZCk7Ci0gIHdoaWxlICgoUkVBRF9CSVQoQURDeC0+Q1IsIExpbmVhcml0eVdvcmQpIT0wVUwpICYmICh0aW1lb3V0X2NwdV9jeWNsZXMgPiAwVUwpKQorICB3aGlsZSAoKFJFQURfQklUKEFEQ3gtPkNSLCBMaW5lYXJpdHlXb3JkKSAhPSAwVUwpICYmICh0aW1lb3V0X2NwdV9jeWNsZXMgPiAwVUwpKQogICB7CiAgICAgdGltZW91dF9jcHVfY3ljbGVzLS07CiAgIH0KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5DQUxGQUNUMl9SRVMxNCwgQURDX0NBTEZBQ1QyX0xJTkNBTEZBQ1QpKTsKKyNlbHNlCiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEFEQ3gtPkNBTEZBQ1QyLCBBRENfQ0FMRkFDVDJfTElOQ0FMRkFDVCkpOworI2VuZGlmCiB9CiAvKioKICAgKiBAYnJpZWYgIFNldCBBREMgcmVzb2x1dGlvbi4KQEAgLTI2MDIsMTYgKzI5MjAsNDEgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19TZXRSZXNvbHV0aW9uKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBSZXNvbHV0aW9uKQogewotI2lmIGRlZmluZWQgKEFEQ19WRVJfVjVfMykKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfMykKKwogICBNT0RJRllfUkVHKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX1JFUywgUmVzb2x1dGlvbik7Ci0jZWxzZQotICBpZigoREJHTUNVLT5JRENPREUgJiAweDMwMDAwMDAwVUwpID09IDB4MTAwMDAwMDBVTCkgLyogUmV2LlkgKi8KKworI2VsaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIE1PRElGWV9SRUcoQURDeC0+Q0ZHUiwgQURDM19DRkdSX1JFUywgKCgoUmVzb2x1dGlvbiAmIDB4MTBVTCkgfCAweDA4VUwgfCAoUmVzb2x1dGlvbiAmIDB4MDRVTCkpICAmIDB4MDAwMDAwMThVTCkpOworICB9CisgIGVsc2UKKyAgeworICAgIGlmICgoREJHTUNVLT5JRENPREUgJiAweDMwMDAwMDAwVUwpID09IDB4MTAwMDAwMDBVTCkgLyogUmV2LlkgKi8KKyAgICB7CisgICAgICBNT0RJRllfUkVHKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX1JFUywgUmVzb2x1dGlvbik7CisgICAgfQorICAgIGVsc2UgLyogUmV2LlYgKi8KKyAgICB7CisgICAgICBpZiAoTExfQURDX1JFU09MVVRJT05fOEIgPT0gUmVzb2x1dGlvbikKKyAgICAgIHsKKyAgICAgICAgTU9ESUZZX1JFRyhBREN4LT5DRkdSLCBBRENfQ0ZHUl9SRVMsIFJlc29sdXRpb24gfCAweDAwMDAwMDBDVUwpOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBNT0RJRllfUkVHKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX1JFUywgUmVzb2x1dGlvbik7CisgICAgICB9CisgICAgfQorICB9CisjZWxzZSAvKiBBRENfVkVSX1Y1X1Y5MCAqLworICBpZiAoKERCR01DVS0+SURDT0RFICYgMHgzMDAwMDAwMFVMKSA9PSAweDEwMDAwMDAwVUwpIC8qIFJldi5ZICovCiAgIHsKICAgICBNT0RJRllfUkVHKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX1JFUywgUmVzb2x1dGlvbik7CiAgIH0KICAgZWxzZSAvKiBSZXYuViAqLwogICB7Ci0gICAgaWYoTExfQURDX1JFU09MVVRJT05fOEIgPT0gUmVzb2x1dGlvbikKKyAgICBpZiAoTExfQURDX1JFU09MVVRJT05fOEIgPT0gUmVzb2x1dGlvbikKICAgICB7CiAgICAgICBNT0RJRllfUkVHKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX1JFUywgUmVzb2x1dGlvbiB8IDB4MDAwMDAwMENVTCk7CiAgICAgfQpAQCAtMjYyMCw3ICsyOTYzLDggQEAKICAgICAgIE1PRElGWV9SRUcoQURDeC0+Q0ZHUiwgQURDX0NGR1JfUkVTLCBSZXNvbHV0aW9uKTsKICAgICB9CiAgIH0KLSNlbmRpZiAvKiBBRENfVkVSX1Y1XzMqLworCisjZW5kaWYgLyogQURDX1ZFUl9WNV9YKi8KIH0KIAogLyoqCkBAIC0yNjM1LDEzICsyOTc5LDMzIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fMTJCCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fMTBCCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fOEIKKyAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFU09MVVRJT05fNkIgICAqKlZhbHVlIGF2YWlsYWJsZSBmb3IgQURDMyBvbiBTVE0zMkg3MngvM3ggZGV2aWNlcyBvbmx5ICoqCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0dldFJlc29sdXRpb24oQURDX1R5cGVEZWYgKkFEQ3gpCiB7CiAjaWYgZGVmaW5lZCAoQURDX1ZFUl9WNV8zKQotICAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX1JFUykpOwotI2Vsc2UKLSAgaWYoKERCR01DVS0+SURDT0RFICYgMHgzMDAwMDAwMFVMKSA9PSAweDEwMDAwMDAwVUwpIC8qIFJldi5ZICovCisKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoQURDeC0+Q0ZHUiwgQURDX0NGR1JfUkVTKSk7CisKKyNlbGlmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgIGlmIChBREN4ID09IEFEQzMpCisgIHsKKyAgICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5DRkdSLCBBREMzX0NGR1JfUkVTKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgaWYgKCh1aW50MzJfdCkoUkVBRF9CSVQoQURDeC0+Q0ZHUiwgQURDX0NGR1JfUkVTKSkgPT0gMHgwMDAwMDAxQ1VMKQorICAgIHsKKyAgICAgIHJldHVybiAoTExfQURDX1JFU09MVVRJT05fOEIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoQURDeC0+Q0ZHUiwgQURDX0NGR1JfUkVTKSk7CisgICAgfQorICB9CisKKyNlbHNlICAvKiBBRENfVkVSX1Y1X1Y5MCAqLworICBpZiAoKERCR01DVS0+SURDT0RFICYgMHgzMDAwMDAwMFVMKSA9PSAweDEwMDAwMDAwVUwpIC8qIFJldi5ZICovCiAgIHsKICAgICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5DRkdSLCBBRENfQ0ZHUl9SRVMpKTsKICAgfQpAQCAtMjY1Niw3ICszMDIwLDggQEAKICAgICAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX1JFUykpOwogICAgIH0KICAgfQotI2VuZGlmIC8qIEFEQ19WRVJfVjVfMyAqLworCisjZW5kaWYgLyogQURDX1ZFUl9WNV9YICovCiB9CiAKIC8qKgpAQCAtMjc2MSw2ICszMTI2LDUxIEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgU2V0IEFEQyBzZWxlY3RlZCBDaGFubmVsLgorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBzZXQgdGhlIHByZS1zZWxlY3Rpb24gb2YgY2hhbm5lbCBjb25maWd1cmF0aW9uLgorICAqIEBub3RlICAgQ2F1dGlvbjogQ2hhbm5lbCBzZWxlY3Rpb25zIGlzIGRlcGVuZGVudCB0byBBREMgaW5zdGFuY2UgYW5kIElQIHZlcnNpb246CisgICogICAgICAgICBGb3IgU1RNMzJINzJ4LzN4IFRoaXMgaXMgYXBwbGljYWJsZSBvbmx5IGZvciBBREMxL0FEQzIKKyAgKiAgICAgICAgIEZvciBSZXN0IG9mIFNUTTMySDd4eHggVGhpcyBpcyBhcHBsaWNhYmxlIG9ubHkgYWxsIHRoZSBBRENzIGluc3RhbmNlcy4KKyAgKiAKKyAgKiBAcGFyYW0gIEFEQ3ggQURDIGluc3RhbmNlCisgICogQHBhcmFtICBDaGFubmVsIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMCAgICAgICAgICAgCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMSAgICAgICAgICAgCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMiAgICAgICAgICAgCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMyAgICAgICAgICAgCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfNCAgICAgICAgICAgCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfNSAgICAgICAgICAgCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzcKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF84CisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfOQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzEwCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMTEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF8xMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzEzCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMTQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF8xNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzE2CisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0NIQU5ORUxfMTcKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQ0hBTk5FTF8xOAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19DSEFOTkVMXzE5CisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfU2V0Q2hhbm5lbFByZVNlbGVjdGlvbihBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgQ2hhbm5lbCkKK3sKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICAgIGlmIChBREN4ICE9IEFEQzMpCisgICAgeworICAgICAgLyogQURDIGNoYW5uZWxzIHByZXNlbGVjdGlvbiAqLworICAgICAgQURDeC0+UENTRUxfUkVTMCB8PSAoMVVMIDw8IChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoQ2hhbm5lbCkgJiAweDFGVUwpKTsKKyAgICB9CisjZWxzZQorICAgIC8qIEFEQyBjaGFubmVscyBwcmVzZWxlY3Rpb24gKi8KKyAgICBBREN4LT5QQ1NFTCB8PSAoMVVMIDw8IChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoQ2hhbm5lbCkgJiAweDFGVUwpKTsKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCAqLworfQorCisvKioKICAgKiBAYnJpZWYgIFNldCBBREMgc2VsZWN0ZWQgb2Zmc2V0IG51bWJlciAxLCAyLCAzIG9yIDQuCiAgICogQG5vdGUgICBUaGlzIGZ1bmN0aW9uIHNldCB0aGUgMiBpdGVtcyBvZiBvZmZzZXQgY29uZmlndXJhdGlvbjoKICAgKiAgICAgICAgIC0gQURDIGNoYW5uZWwgdG8gd2hpY2ggdGhlIG9mZnNldCBwcm9ncmFtbWVkIHdpbGwgYmUgYXBwbGllZApAQCAtMjgzNSwxMSArMzI0NSwyMSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX1NldE9mZnNldChBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgT2Zmc2V0eSwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgT2Zmc2V0TGV2ZWwpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5PRlIxLCBPZmZzZXR5KTsKLQotICBNT0RJRllfUkVHKCpwcmVnLAotICAgICAgICAgICAgIEFEQ19PRlIxX09GRlNFVDFfQ0ggfCBBRENfT0ZSMV9PRkZTRVQxLAotICAgICAgICAgICAgIChDaGFubmVsICYgQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0spIHwgT2Zmc2V0TGV2ZWwpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+T0ZSMSwgT2Zmc2V0eSk7CisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIE1PRElGWV9SRUcoKnByZWcsCisgICAgICAgICAgICAgICBBREMzX09GUjFfT0ZGU0VUMV9FTiB8IEFEQ19PRlIxX09GRlNFVDFfQ0ggfCBBRENfT0ZSMV9PRkZTRVQxLAorICAgICAgICAgICAgICAgQURDM19PRlIxX09GRlNFVDFfRU4gfCAoQ2hhbm5lbCAmIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLKSB8IE9mZnNldExldmVsKTsKKyAgfQorICBlbHNlCisjZW5kaWYgLyogQURDX1ZFUl9WNV9WOTAgKi8KKyAgeworICAgIE1PRElGWV9SRUcoKnByZWcsCisgICAgICAgICAgICAgICBBRENfT0ZSMV9PRkZTRVQxX0NIIHwgQURDX09GUjFfT0ZGU0VUMSwKKyAgICAgICAgICAgICAgIChDaGFubmVsICYgQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0spIHwgT2Zmc2V0TGV2ZWwpOworICB9CiB9CiAKIC8qKgpAQCAtMjkwNyw3ICszMzI3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgT2Zmc2V0eSkKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPk9GUjEsIE9mZnNldHkpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+T0ZSMSwgT2Zmc2V0eSk7CiAKICAgcmV0dXJuICh1aW50MzJfdCkgUkVBRF9CSVQoKnByZWcsIEFEQ19PRlIxX09GRlNFVDFfQ0gpOwogfQpAQCAtMjkzMyw3ICszMzUzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfR2V0T2Zmc2V0TGV2ZWwoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IE9mZnNldHkpCiB7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5PRlIxLCBPZmZzZXR5KTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPk9GUjEsIE9mZnNldHkpOwogCiAgIHJldHVybiAodWludDMyX3QpIFJFQURfQklUKCpwcmVnLCBBRENfT0ZSMV9PRkZTRVQxKTsKIH0KQEAgLTI5NzUsNyArMzM5NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0dldERhdGFSaWdodFNoaWZ0KEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBPZmZzZXR5KQogewotICByZXR1cm4gKHVpbnQzMl90KSAoKFJFQURfQklUKEFEQ3gtPkNGR1IyLCAoQURDX0NGR1IyX1JTSElGVDEgPDwgKE9mZnNldHkgJiAweDFGVUwpKSkpID4+IChPZmZzZXR5ICYgMHgxRlVMKSk7CisgIHJldHVybiAodWludDMyX3QpKChSRUFEX0JJVChBREN4LT5DRkdSMiwgKEFEQ19DRkdSMl9SU0hJRlQxIDw8IChPZmZzZXR5ICYgMHgxRlVMKSkpKSA+PiAoT2Zmc2V0eSAmIDB4MUZVTCkpOwogfQogCiAvKioKQEAgLTI5OTgsOCArMzQxOCwxNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX1NldE9mZnNldFNpZ25lZFNhdHVyYXRpb24oQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IE9mZnNldHksIHVpbnQzMl90IE9mZnNldFNpZ25lZFNhdHVyYXRpb24pCiB7Ci0gICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+T0ZSMSwgT2Zmc2V0eSk7Ci0gICBNT0RJRllfUkVHKCpwcmVnLCBBRENfT0ZSMV9TU0FURSwgT2Zmc2V0U2lnbmVkU2F0dXJhdGlvbik7CisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIC8qIEZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgb24gdGhpcyBpbnN0YW5jZSAqLworICB9CisgIGVsc2UKKyNlbmRpZiAgLyogQURDX1ZFUl9WNV9WOTAgKi8KKyAgeworICAgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5PRlIxLCBPZmZzZXR5KTsKKyAgICBNT0RJRllfUkVHKCpwcmVnLCBBRENfT0ZSMV9TU0FURSwgT2Zmc2V0U2lnbmVkU2F0dXJhdGlvbik7CisgIH0KIH0KIAogLyoqCkBAIC0zMDIxLDEwICszNDUwLDIyNSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19HZXRPZmZzZXRTaWduZWRTYXR1cmF0aW9uKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBPZmZzZXR5KQogewotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+T0ZSMSwgT2Zmc2V0eSk7Ci0gIHJldHVybiAodWludDMyX3QpIFJFQURfQklUKCpwcmVnLCBBRENfT0ZSMV9TU0FURSk7CisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIC8qIEZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgb24gdGhpcyBpbnN0YW5jZSAqLworICAgIHJldHVybiAwVUw7CisgIH0KKyAgZWxzZQorI2VuZGlmICAvKiBBRENfVkVSX1Y1X1Y5MCAqLworICB7CisgICAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPk9GUjEsIE9mZnNldHkpOworICAgIHJldHVybiAodWludDMyX3QpIFJFQURfQklUKCpwcmVnLCBBRENfT0ZSMV9TU0FURSk7CisgIH0KIH0KIAorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKioKKyAgKiBAYnJpZWYgIFNldCBmb3IgdGhlIEFEQyBzZWxlY3RlZCBvZmZzZXQgbnVtYmVyIDEsIDIsIDMgb3IgNDoKKyAgKiAgICAgICAgIGNob29zZSBvZmZzZXQgc2F0dXJhdGlvbiBtb2RlLgorICAqIEBub3RlICAgT24gdGhpcyBTVE0zMiBzZXJpZSwgc2V0dGluZyBvZiB0aGlzIGZlYXR1cmUgaXMgY29uZGl0aW9uZWQgdG8KKyAgKiAgICAgICAgIEFEQyBzdGF0ZToKKyAgKiAgICAgICAgIEFEQyBtdXN0IGJlIGRpc2FibGVkIG9yIGVuYWJsZWQgd2l0aG91dCBjb252ZXJzaW9uIG9uIGdvaW5nCisgICogICAgICAgICBvbiBlaXRoZXIgZ3JvdXBzIHJlZ3VsYXIgb3IgaW5qZWN0ZWQuCisgICogQHJtdG9sbCBPRlIxICAgICBTQVRFTiAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U2F0dXJhdGlvblxuCisgICogICAgICAgICBPRlIyICAgICBTQVRFTiAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U2F0dXJhdGlvblxuCisgICogICAgICAgICBPRlIzICAgICBTQVRFTiAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U2F0dXJhdGlvblxuCisgICogICAgICAgICBPRlI0ICAgICBTQVRFTiAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U2F0dXJhdGlvbgorICAqIEBwYXJhbSAgQURDeCBBREMgaW5zdGFuY2UKKyAgKiBAcGFyYW0gIE9mZnNldHkgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUXzMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUXzQKKyAgKiBAcGFyYW0gIE9mZnNldFNhdHVyYXRpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUX1NBVFVSQVRJT05fRU5BQkxFCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09GRlNFVF9TQVRVUkFUSU9OX0RJU0FCTEUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19TZXRPZmZzZXRTYXR1cmF0aW9uKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBPZmZzZXR5LCB1aW50MzJfdCBPZmZzZXRTYXR1cmF0aW9uKQoreworICBpZiAoQURDeCA9PSBBREMzKQorICB7CisgICAgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPk9GUjEsIE9mZnNldHkpOworCisgICAgTU9ESUZZX1JFRygqcHJlZywKKyAgICAgICAgICAgICAgIEFEQzNfT0ZSMV9TQVRFTiwKKyAgICAgICAgICAgICAgIE9mZnNldFNhdHVyYXRpb24pOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IGZvciB0aGUgQURDIHNlbGVjdGVkIG9mZnNldCBudW1iZXIgMSwgMiwgMyBvciA0OgorICAqICAgICAgICAgb2Zmc2V0IHNhdHVyYXRpb24gaWYgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAgKiBAcm10b2xsIE9GUjEgICAgIFNBVEVOICAgICAgICAgIExMX0FEQ19HZXRPZmZzZXRTYXR1cmF0aW9uXG4KKyAgKiAgICAgICAgIE9GUjIgICAgIFNBVEVOICAgICAgICAgIExMX0FEQ19HZXRPZmZzZXRTYXR1cmF0aW9uXG4KKyAgKiAgICAgICAgIE9GUjMgICAgIFNBVEVOICAgICAgICAgIExMX0FEQ19HZXRPZmZzZXRTYXR1cmF0aW9uXG4KKyAgKiAgICAgICAgIE9GUjQgICAgIFNBVEVOICAgICAgICAgIExMX0FEQ19HZXRPZmZzZXRTYXR1cmF0aW9uCisgICogQHBhcmFtICBBREN4IEFEQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgT2Zmc2V0eSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfNAorICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUX1NBVFVSQVRJT05fRU5BQkxFCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09GRlNFVF9TQVRVUkFUSU9OX0RJU0FCTEUKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfR2V0T2Zmc2V0U2F0dXJhdGlvbihBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgT2Zmc2V0eSkKK3sKKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5PRlIxLCBPZmZzZXR5KTsKKworICAgIHJldHVybiAodWludDMyX3QpIFJFQURfQklUKCpwcmVnLCBBREMzX09GUjFfU0FURU4pOworICB9ZWxzZQorICB7CisgICAgcmV0dXJuIDBVTDsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIFNldCBmb3IgdGhlIEFEQyBzZWxlY3RlZCBvZmZzZXQgbnVtYmVyIDEsIDIsIDMgb3IgNDoKKyAgKiAgICAgICAgIGNob29zZSBvZmZzZXQgc2lnbi4KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogICAgICAgICBBREMgc3RhdGU6CisgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZworICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgorICAqIEBybXRvbGwgT0ZSMSAgICAgT0ZGU0VUUE9TICAgICAgTExfQURDX1NldE9mZnNldFNpZ25cbgorICAqICAgICAgICAgT0ZSMiAgICAgT0ZGU0VUUE9TICAgICAgTExfQURDX1NldE9mZnNldFNpZ25cbgorICAqICAgICAgICAgT0ZSMyAgICAgT0ZGU0VUUE9TICAgICAgTExfQURDX1NldE9mZnNldFNpZ25cbgorICAqICAgICAgICAgT0ZSNCAgICAgT0ZGU0VUUE9TICAgICAgTExfQURDX1NldE9mZnNldFNpZ24KKyAgKiBAcGFyYW0gIEFEQ3ggQURDIGluc3RhbmNlCisgICogQHBhcmFtICBPZmZzZXR5IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09GRlNFVF8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09GRlNFVF8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09GRlNFVF8zCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09GRlNFVF80CisgICogQHBhcmFtICBPZmZzZXRTaWduIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09GRlNFVF9TSUdOX05FR0FUSVZFCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09GRlNFVF9TSUdOX1BPU0lUSVZFCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfU2V0T2Zmc2V0U2lnbihBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgT2Zmc2V0eSwgdWludDMyX3QgT2Zmc2V0U2lnbikKK3sKKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5PRlIxLCBPZmZzZXR5KTsKKworICAgIE1PRElGWV9SRUcoKnByZWcsCisgICAgICAgICAgICAgICBBREMzX09GUjFfT0ZGU0VUUE9TLAorICAgICAgICAgICAgICAgT2Zmc2V0U2lnbik7CisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBHZXQgZm9yIHRoZSBBREMgc2VsZWN0ZWQgb2Zmc2V0IG51bWJlciAxLCAyLCAzIG9yIDQ6CisgICogICAgICAgICBvZmZzZXQgc2lnbiBpZiBwb3NpdGl2ZSBvciBuZWdhdGl2ZS4KKyAgKiBAcm10b2xsIE9GUjEgICAgIE9GRlNFVFBPUyAgICAgIExMX0FEQ19HZXRPZmZzZXRTaWduXG4KKyAgKiAgICAgICAgIE9GUjIgICAgIE9GRlNFVFBPUyAgICAgIExMX0FEQ19HZXRPZmZzZXRTaWduXG4KKyAgKiAgICAgICAgIE9GUjMgICAgIE9GRlNFVFBPUyAgICAgIExMX0FEQ19HZXRPZmZzZXRTaWduXG4KKyAgKiAgICAgICAgIE9GUjQgICAgIE9GRlNFVFBPUyAgICAgIExMX0FEQ19HZXRPZmZzZXRTaWduCisgICogQHBhcmFtICBBREN4IEFEQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgT2Zmc2V0eSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfNAorICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUX1NJR05fTkVHQVRJVkUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUX1NJR05fUE9TSVRJVkUKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfR2V0T2Zmc2V0U2lnbihBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgT2Zmc2V0eSkKK3sKKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5PRlIxLCBPZmZzZXR5KTsKKworICAgIHJldHVybiAodWludDMyX3QpIFJFQURfQklUKCpwcmVnLCBBREMzX09GUjFfT0ZGU0VUUE9TKTsKKyAgfQorICBlbHNlCisgIHsgCisgICAgcmV0dXJuIDBVTDsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIFNldCBmb3IgdGhlIEFEQyBzZWxlY3RlZCBvZmZzZXQgbnVtYmVyIDEsIDIsIDMgb3IgNDoKKyAgKiAgICAgICAgIGZvcmNlIG9mZnNldCBzdGF0ZSBkaXNhYmxlIG9yIGVuYWJsZQorICAqICAgICAgICAgd2l0aG91dCBtb2RpZnlpbmcgb2Zmc2V0IGNoYW5uZWwgb3Igb2Zmc2V0IHZhbHVlLgorICAqIEBub3RlICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgbmVlZGVkIG9ubHkgaW4gY2FzZSBvZiBvZmZzZXQgdG8gYmUKKyAgKiAgICAgICAgIGVuYWJsZWQtZGlzYWJsZWQgZHluYW1pY2FsbHksIGFuZCBzaG91bGQgbm90IGJlIG5lZWRlZCBpbiBvdGhlciBjYXNlczoKKyAgKiAgICAgICAgIGZ1bmN0aW9uIExMX0FEQ19TZXRPZmZzZXQoKSBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgdGhlIG9mZnNldC4KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogICAgICAgICBBREMgc3RhdGU6CisgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZworICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgorICAqIEBybXRvbGwgT0ZSMSAgICAgT0ZGU0VUMV9FTiAgICAgTExfQURDX1NldE9mZnNldFN0YXRlXG4KKyAgKiAgICAgICAgIE9GUjIgICAgIE9GRlNFVDJfRU4gICAgIExMX0FEQ19TZXRPZmZzZXRTdGF0ZVxuCisgICogICAgICAgICBPRlIzICAgICBPRkZTRVQzX0VOICAgICBMTF9BRENfU2V0T2Zmc2V0U3RhdGVcbgorICAqICAgICAgICAgT0ZSNCAgICAgT0ZGU0VUNF9FTiAgICAgTExfQURDX1NldE9mZnNldFN0YXRlCisgICogQHBhcmFtICBBREN4IEFEQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgT2Zmc2V0eSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfNAorICAqIEBwYXJhbSAgT2Zmc2V0U3RhdGUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUX0RJU0FCTEUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUX0VOQUJMRQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX1NldE9mZnNldFN0YXRlKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBPZmZzZXR5LCB1aW50MzJfdCBPZmZzZXRTdGF0ZSkKK3sKKyAgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPk9GUjEsIE9mZnNldHkpOworICBpZiAoQURDeCA9PSBBREMzKQorICB7CisgICAgTU9ESUZZX1JFRygqcHJlZywKKyAgICAgICAgICAgICAgIEFEQzNfT0ZSMV9PRkZTRVQxX0VOLAorICAgICAgICAgICAgICAgT2Zmc2V0U3RhdGUpOworICB9CisgIGVsc2UKKyAgeworICAgIE1PRElGWV9SRUcoKnByZWcsCisgICAgICAgICAgICAgICBBRENfT0ZSMV9TU0FURSwKKyAgICAgICAgICAgICAgIE9mZnNldFN0YXRlKTsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBmb3IgdGhlIEFEQyBzZWxlY3RlZCBvZmZzZXQgbnVtYmVyIDEsIDIsIDMgb3IgNDoKKyAgKiAgICAgICAgIG9mZnNldCBzdGF0ZSBkaXNhYmxlZCBvciBlbmFibGVkLgorICAqIEBybXRvbGwgT0ZSMSAgICAgT0ZGU0VUMV9FTiAgICAgTExfQURDX0dldE9mZnNldFN0YXRlXG4KKyAgKiAgICAgICAgIE9GUjIgICAgIE9GRlNFVDJfRU4gICAgIExMX0FEQ19HZXRPZmZzZXRTdGF0ZVxuCisgICogICAgICAgICBPRlIzICAgICBPRkZTRVQzX0VOICAgICBMTF9BRENfR2V0T2Zmc2V0U3RhdGVcbgorICAqICAgICAgICAgT0ZSNCAgICAgT0ZGU0VUNF9FTiAgICAgTExfQURDX0dldE9mZnNldFN0YXRlCisgICogQHBhcmFtICBBREN4IEFEQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgT2Zmc2V0eSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PRkZTRVRfNAorICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUX0RJU0FCTEUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfT0ZGU0VUX0VOQUJMRQorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19HZXRPZmZzZXRTdGF0ZShBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgT2Zmc2V0eSkKK3sKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPk9GUjEsIE9mZnNldHkpOworICBpZiAoQURDeCA9PSBBREMzKQorICB7CisgICAgcmV0dXJuICh1aW50MzJfdCkgUkVBRF9CSVQoKnByZWcsIEFEQzNfT0ZSMV9PRkZTRVQxX0VOKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gKHVpbnQzMl90KSBSRUFEX0JJVCgqcHJlZywgQURDX09GUjFfU1NBVEUpOworICB9Cit9CisKKyNlbmRpZiAgLyogQURDX1ZFUl9WNV9WOTAgKi8KKwogLyoqCiAgICogQH0KICAgKi8KQEAgLTMxMjMsMTEgKzM3NjcsMTEgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfUkVHX0dldFRyaWdnZXJTb3VyY2UoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgVHJpZ2dlclNvdXJjZSA9IFJFQURfQklUKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX0VYVFNFTCB8IEFEQ19DRkdSX0VYVEVOKTsKKyAgX19JTyB1aW50MzJfdCBUcmlnZ2VyU291cmNlID0gUkVBRF9CSVQoQURDeC0+Q0ZHUiwgQURDX0NGR1JfRVhUU0VMIHwgQURDX0NGR1JfRVhURU4pOwogCiAgIC8qIFZhbHVlIGZvciBzaGlmdCBvZiB7MDsgNDsgODsgMTJ9IGRlcGVuZGluZyBvbiB2YWx1ZSBvZiBiaXRmaWVsZCAgICAgICAgICAqLwogICAvKiBjb3JyZXNwb25kaW5nIHRvIEFEQ19DRkdSX0VYVEVOIHswOyAxOyAyOyAzfS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgdWludDMyX3QgU2hpZnRFeHRlbiA9ICgoVHJpZ2dlclNvdXJjZSAmIEFEQ19DRkdSX0VYVEVOKSA+PiAoQURDX1JFR19UUklHX0VYVEVOX0JJVE9GRlNFVF9QT1MgLSAyVUwpKTsKKyAgdWludDMyX3QgU2hpZnRFeHRlbiA9ICgoVHJpZ2dlclNvdXJjZSAmIEFEQ19DRkdSX0VYVEVOKSA+PiAoQURDX1JFR19UUklHX0VYVEVOX0JJVE9GRlNFVF9QT1MgLSAyVUwpKTsKIAogICAvKiBTZXQgYml0ZmllbGQgY29ycmVzcG9uZGluZyB0byBBRENfQ0ZHUl9FWFRFTiBhbmQgQURDX0NGR1JfRVhUU0VMICAgICAgICAgKi8KICAgLyogdG8gbWF0Y2ggd2l0aCB0cmlnZ2VycyBsaXRlcmFscyBkZWZpbml0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0zMTg4LDYgKzM4MzIsMzggQEAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoQURDeC0+Q0ZHUiwgQURDX0NGR1JfRVhURU4pKTsKIH0KIAorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKioKKyAgKiBAYnJpZWYgIFNldCBBREMgc2FtcGxpbmcgbW9kZS4KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gc2V0IHRoZSBBREMgY29udmVyc2lvbiBzYW1wbGluZyBtb2RlCisgICogQG5vdGUgICBUaGlzIG1vZGUgYXBwbGllcyB0byByZWd1bGFyIGdyb3VwIG9ubHkuCisgICogQG5vdGUgICBTZXQgc2FtcGxpbmcgbW9kZSBpcyBhcHBpZWQgdG8gYWxsIGNvbnZlcnNpb24gb2YgcmVndWxhciBncm91cC4KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogICAgICAgICBBREMgc3RhdGU6CisgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZworICAqICAgICAgICAgb24gZ3JvdXAgcmVndWxhci4KKyAgKiBAcm10b2xsIENGR1IyICAgIEJVTEIgICAgICAgICAgIExMX0FEQ19SRUdfU2V0U2FtcGxpbmdNb2RlXG4KKyAgKiAgICAgICAgIENGR1IyICAgIFNNUFRSSUcgICAgICAgIExMX0FEQ19SRUdfU2V0U2FtcGxpbmdNb2RlCisgICogQHBhcmFtICBBREN4IEFEQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgU2FtcGxpbmdNb2RlIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFR19TQU1QTElOR19NT0RFX05PUk1BTAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRUdfU0FNUExJTkdfTU9ERV9CVUxCCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFR19TQU1QTElOR19NT0RFX1RSSUdHRVJfQ09OVFJPTEVECisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfUkVHX1NldFNhbXBsaW5nTW9kZShBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgU2FtcGxpbmdNb2RlKQoreworICBpZiAoQURDeCAhPSBBREMzKQorICB7CisgICAgLyogRnVuY3Rpb24gbm90IGF2YWlsYWJsZSBvbiB0aGlzIGluc3RhbmNlICovCisgIH0KKyAgZWxzZQorICB7CisgICAgTU9ESUZZX1JFRyhBREN4LT5DRkdSMiwgQURDM19DRkdSMl9CVUxCIHwgQURDM19DRkdSMl9TTVBUUklHLCBTYW1wbGluZ01vZGUpOworICB9Cit9CisjZW5kaWYgIC8qIEFEQ19WRVJfVjVfVjkwICovCisKIC8qKgogICAqIEBicmllZiAgU2V0IEFEQyBncm91cCByZWd1bGFyIHNlcXVlbmNlciBsZW5ndGggYW5kIHNjYW4gZGlyZWN0aW9uLgogICAqIEBub3RlICAgRGVzY3JpcHRpb24gb2YgQURDIGdyb3VwIHJlZ3VsYXIgc2VxdWVuY2VyIGZlYXR1cmVzOgpAQCAtMzQ0OSw3ICs0MTI1LDcgQEAKICAgLyogaW4gcmVnaXN0ZXIgYW5kIHJlZ2lzdGVyIHBvc2l0aW9uIGRlcGVuZGluZyBvbiBwYXJhbWV0ZXIgIlJhbmsiLiAgICAgICAgICovCiAgIC8qIFBhcmFtZXRlcnMgIlJhbmsiIGFuZCAiQ2hhbm5lbCIgYXJlIHVzZWQgd2l0aCBtYXNrcyBiZWNhdXNlIGNvbnRhaW5pbmcgICAqLwogICAvKiBvdGhlciBiaXRzIHJlc2VydmVkIGZvciBvdGhlciBwdXJwb3NlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPlNRUjEsICgoUmFuayAmIEFEQ19SRUdfU1FSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX1NRUlhfUkVHT0ZGU0VUX1BPUykpOworICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+U1FSMSwgKChSYW5rICYgQURDX1JFR19TUVJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfU1FSWF9SRUdPRkZTRVRfUE9TKSk7CiAKICAgTU9ESUZZX1JFRygqcHJlZywKICAgICAgICAgICAgICBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTS19QT1NCSVQwIDw8IChSYW5rICYgQURDX1JFR19SQU5LX0lEX1NRUlhfTUFTSyksCkBAIC0zNTQ3LDcgKzQyMjMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19SRUdfR2V0U2VxdWVuY2VyUmFua3MoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJhbmspCiB7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5TUVIxLCAoKFJhbmsgJiBBRENfUkVHX1NRUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19TUVJYX1JFR09GRlNFVF9QT1MpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPlNRUjEsICgoUmFuayAmIEFEQ19SRUdfU1FSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX1NRUlhfUkVHT0ZGU0VUX1BPUykpOwogCiAgIHJldHVybiAodWludDMyX3QpKChSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLX1BPU0JJVDAgPDwgKFJhbmsgJiBBRENfUkVHX1JBTktfSURfU1FSWF9NQVNLKSkKQEAgLTM2MDQsMTEgKzQyODAsNyBAQAogICAqICAgICAgICAgICAgLSBUcmFuc2ZlcmVkIHRvIERGU0RNIGRhdGEgcmVnaXN0ZXIKICAgKiBAcm10b2xsIENGR1IgICAgIERNTkdUICAgICAgICAgICBMTF9BRENfUkVHX1NldERhdGFUcmFuc2Zlck1vZGUKICAgKiBAcGFyYW0gIEFEQ3ggQURDIGluc3RhbmNlCi0gICogQHBhcmFtICBEYXRhVHJhbnNmZXJNb2RlIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQURDX1JFR19EUl9UUkFOU0ZFUgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19SRUdfRE1BX1RSQU5TRkVSX0xJTUlURUQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfUkVHX0RNQV9UUkFOU0ZFUl9VTkxJTUlURUQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfUkVHX0RGU0RNX1RSQU5TRkVSCisgICogQHBhcmFtICBEYXRhVHJhbnNmZXJNb2RlIFNlbGVjdCBEYXRhIE1hbmFnZW1lbnQgY29uZmlndXJhdGlvbgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX1JFR19TZXREYXRhVHJhbnNmZXJNb2RlKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBEYXRhVHJhbnNmZXJNb2RlKQpAQCAtMzYxNiw2ICs0Mjg4LDExMyBAQAogICBNT0RJRllfUkVHKEFEQ3gtPkNGR1IsIEFEQ19DRkdSX0RNTkdULCBEYXRhVHJhbnNmZXJNb2RlKTsKIH0KIAorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBETUEgcmVxdWVzdHMgZm9yIEFEQzMuCisgICogQHJtdG9sbCBDRkdSICAgICBETUFFTiAgICAgICAgICBMTF9BRENfUkVHX1NldERNQVRyYW5zZmVyXG4KKyAgKiBAcGFyYW0gIEFEQ3ggQURDIGluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfRW5hYmxlRE1BUmVxIChBRENfVHlwZURlZiAqQURDeCkKK3sKKyAgU0VUX0JJVChBREN4LT5DRkdSLCBBREMzX0NGR1JfRE1BRU4pOworfQorCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfRGlzYWJsZURNQVJlcShBRENfVHlwZURlZiAqQURDeCkKK3sKKyAgQ0xFQVJfQklUIChBREN4LT5DRkdSLCBBREMzX0NGR1JfRE1BRU4pOworfQorCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0lzRW5hYmxlZERNQVJlcSAoQURDX1R5cGVEZWYgKkFEQ3gpCit7CisgIHJldHVybiAoKFJFQURfQklUKEFEQ3gtPkNGR1IsIEFEQzNfQ0ZHUl9ETUFFTikgPT0gKEFEQzNfQ0ZHUl9ETUFFTikpID8gMVVMIDogMFVMKTsKK30KKy8qKgorICAqIEBicmllZiAgU2V0IEFEQyBncm91cCByZWd1bGFyIGNvbnZlcnNpb24gZGF0YSB0cmFuc2Zlcjogbm8gdHJhbnNmZXIgb3IKKyAgKiAgICAgICAgIHRyYW5zZmVyIGJ5IERNQSwgYW5kIERNQSByZXF1ZXN0cyBtb2RlLgorICAqIEBub3RlICAgSWYgdHJhbnNmZXIgYnkgRE1BIHNlbGVjdGVkLCBzcGVjaWZpZXMgdGhlIERNQSByZXF1ZXN0cworICAqICAgICAgICAgbW9kZToKKyAgKiAgICAgICAgIC0gTGltaXRlZCBtb2RlIChPbmUgc2hvdCBtb2RlKTogRE1BIHRyYW5zZmVyIHJlcXVlc3RzIGFyZSBzdG9wcGVkCisgICogICAgICAgICAgIHdoZW4gbnVtYmVyIG9mIERNQSBkYXRhIHRyYW5zZmVycyAobnVtYmVyIG9mCisgICogICAgICAgICAgIEFEQyBjb252ZXJzaW9ucykgaXMgcmVhY2hlZC4KKyAgKiAgICAgICAgICAgVGhpcyBBREMgbW9kZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggRE1BIG1vZGUgbm9uLWNpcmN1bGFyLgorICAqICAgICAgICAgLSBVbmxpbWl0ZWQgbW9kZTogRE1BIHRyYW5zZmVyIHJlcXVlc3RzIGFyZSB1bmxpbWl0ZWQsCisgICogICAgICAgICAgIHdoYXRldmVyIG51bWJlciBvZiBETUEgZGF0YSB0cmFuc2ZlcnMgKG51bWJlciBvZgorICAqICAgICAgICAgICBBREMgY29udmVyc2lvbnMpLgorICAqICAgICAgICAgICBUaGlzIEFEQyBtb2RlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBETUEgbW9kZSBjaXJjdWxhci4KKyAgKiBAbm90ZSAgIElmIEFEQyBETUEgcmVxdWVzdHMgbW9kZSBpcyBzZXQgdG8gdW5saW1pdGVkIGFuZCBETUEgaXMgc2V0IHRvCisgICogICAgICAgICBtb2RlIG5vbi1jaXJjdWxhcjoKKyAgKiAgICAgICAgIHdoZW4gRE1BIHRyYW5zZmVycyBzaXplIHdpbGwgYmUgcmVhY2hlZCwgRE1BIHdpbGwgc3RvcCB0cmFuc2ZlcnMgb2YKKyAgKiAgICAgICAgIEFEQyBjb252ZXJzaW9ucyBkYXRhIEFEQyB3aWxsIHJhaXNlIGFuIG92ZXJydW4gZXJyb3IKKyAgKiAgICAgICAgKG92ZXJydW4gZmxhZyBhbmQgaW50ZXJydXB0aW9uIGlmIGVuYWJsZWQpLgorICAqIEBub3RlICAgRm9yIGRldmljZXMgd2l0aCBzZXZlcmFsIEFEQyBpbnN0YW5jZXM6IEFEQyBtdWx0aW1vZGUgRE1BCisgICogICAgICAgICBzZXR0aW5ncyBhcmUgYXZhaWxhYmxlIHVzaW5nIGZ1bmN0aW9uIEByZWYgTExfQURDX1NldE11bHRpRE1BVHJhbnNmZXIoKS4KKyAgKiBAbm90ZSAgIFRvIGNvbmZpZ3VyZSBETUEgc291cmNlIGFkZHJlc3MgKHBlcmlwaGVyYWwgYWRkcmVzcyksCisgICogICAgICAgICB1c2UgZnVuY3Rpb24gQHJlZiBMTF9BRENfRE1BX0dldFJlZ0FkZHIoKS4KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogICAgICAgICBBREMgc3RhdGU6CisgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZworICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgorICAqIEBybXRvbGwgQ0ZHUiAgICAgRE1BRU4gICAgICAgICAgTExfQURDX1JFR19TZXRETUFUcmFuc2Zlck1vZGVcbgorICAqICAgICAgICAgQ0ZHUiAgICAgRE1BQ0ZHICAgICAgICAgTExfQURDX1JFR19TZXRETUFUcmFuc2Zlck1vZGUKKyAgKiBAcGFyYW0gIEFEQ3ggQURDIGluc3RhbmNlCisgICogQHBhcmFtICBETUFUcmFuc2ZlciBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQzNfUkVHX0RNQV9UUkFOU0ZFUl9OT05FCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDM19SRUdfRE1BX1RSQU5TRkVSX0xJTUlURUQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BREMzX1JFR19ETUFfVFJBTlNGRVJfVU5MSU1JVEVECisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfUkVHX1NldERNQVRyYW5zZmVyTW9kZShBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgRE1BVHJhbnNmZXIpCit7CisgIGlmIChBREN4ID09IEFEQzMpCisgIHsKKyAgICBNT0RJRllfUkVHKEFEQ3gtPkNGR1IsIEFEQzNfQ0ZHUl9ETUFFTiB8IEFEQzNfQ0ZHUl9ETUFDRkcsIERNQVRyYW5zZmVyKTsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBBREMgZ3JvdXAgcmVndWxhciBjb252ZXJzaW9uIGRhdGEgdHJhbnNmZXI6IG5vIHRyYW5zZmVyIG9yCisgICogICAgICAgICB0cmFuc2ZlciBieSBETUEsIGFuZCBETUEgcmVxdWVzdHMgbW9kZS4KKyAgKiBAbm90ZSAgIElmIHRyYW5zZmVyIGJ5IERNQSBzZWxlY3RlZCwgc3BlY2lmaWVzIHRoZSBETUEgcmVxdWVzdHMKKyAgKiAgICAgICAgIG1vZGU6CisgICogICAgICAgICAtIExpbWl0ZWQgbW9kZSAoT25lIHNob3QgbW9kZSk6IERNQSB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgc3RvcHBlZAorICAqICAgICAgICAgICB3aGVuIG51bWJlciBvZiBETUEgZGF0YSB0cmFuc2ZlcnMgKG51bWJlciBvZgorICAqICAgICAgICAgICBBREMgY29udmVyc2lvbnMpIGlzIHJlYWNoZWQuCisgICogICAgICAgICAgIFRoaXMgQURDIG1vZGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIERNQSBtb2RlIG5vbi1jaXJjdWxhci4KKyAgKiAgICAgICAgIC0gVW5saW1pdGVkIG1vZGU6IERNQSB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgdW5saW1pdGVkLAorICAqICAgICAgICAgICB3aGF0ZXZlciBudW1iZXIgb2YgRE1BIGRhdGEgdHJhbnNmZXJzIChudW1iZXIgb2YKKyAgKiAgICAgICAgICAgQURDIGNvbnZlcnNpb25zKS4KKyAgKiAgICAgICAgICAgVGhpcyBBREMgbW9kZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggRE1BIG1vZGUgY2lyY3VsYXIuCisgICogQG5vdGUgICBJZiBBREMgRE1BIHJlcXVlc3RzIG1vZGUgaXMgc2V0IHRvIHVubGltaXRlZCBhbmQgRE1BIGlzIHNldCB0bworICAqICAgICAgICAgbW9kZSBub24tY2lyY3VsYXI6CisgICogICAgICAgICB3aGVuIERNQSB0cmFuc2ZlcnMgc2l6ZSB3aWxsIGJlIHJlYWNoZWQsIERNQSB3aWxsIHN0b3AgdHJhbnNmZXJzIG9mCisgICogICAgICAgICBBREMgY29udmVyc2lvbnMgZGF0YSBBREMgd2lsbCByYWlzZSBhbiBvdmVycnVuIGVycm9yCisgICogICAgICAgICAob3ZlcnJ1biBmbGFnIGFuZCBpbnRlcnJ1cHRpb24gaWYgZW5hYmxlZCkuCisgICogQG5vdGUgICBGb3IgZGV2aWNlcyB3aXRoIHNldmVyYWwgQURDIGluc3RhbmNlczogQURDIG11bHRpbW9kZSBETUEKKyAgKiAgICAgICAgIHNldHRpbmdzIGFyZSBhdmFpbGFibGUgdXNpbmcgZnVuY3Rpb24gQHJlZiBMTF9BRENfR2V0TXVsdGlETUFUcmFuc2ZlcigpLgorICAqIEBub3RlICAgVG8gY29uZmlndXJlIERNQSBzb3VyY2UgYWRkcmVzcyAocGVyaXBoZXJhbCBhZGRyZXNzKSwKKyAgKiAgICAgICAgIHVzZSBmdW5jdGlvbiBAcmVmIExMX0FEQ19ETUFfR2V0UmVnQWRkcigpLgorICAqIEBybXRvbGwgQ0ZHUiAgICAgRE1BRU4gICAgICAgICAgTExfQURDX1JFR19HZXRETUFUcmFuc2ZlclxuCisgICogICAgICAgICBDRkdSICAgICBETUFDRkcgICAgICAgICBMTF9BRENfUkVHX0dldERNQVRyYW5zZmVyCisgICogQHBhcmFtICBBREN4IEFEQyBpbnN0YW5jZQorICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BREMzX1JFR19ETUFfVFJBTlNGRVJfTk9ORQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQzNfUkVHX0RNQV9UUkFOU0ZFUl9MSU1JVEVECisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDM19SRUdfRE1BX1RSQU5TRkVSX1VOTElNSVRFRAorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19SRUdfR2V0RE1BVHJhbnNmZXJNb2RlKEFEQ19UeXBlRGVmICpBREN4KQoreworICBpZiAoQURDeCA9PSBBREMzKQorICB7CisgICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoQURDeC0+Q0ZHUiwgQURDM19DRkdSX0RNQUVOIHwgQURDM19DRkdSX0RNQUNGRykpOworICB9CisgICBlbHNlCisgIHsgCisgICAgcmV0dXJuIDBVTDsKKyAgfQorfQorCisjZW5kaWYgIC8qIEFEQ19WRVJfVjVfVjkwICovCiAKIC8qKgogICAqIEBicmllZiAgR2V0IEFEQyBkYXRhIHRyYW5zZmVyIG1vZGUKQEAgLTM3NzUsMTEgKzQ1NTQsMTEgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfSU5KX0dldFRyaWdnZXJTb3VyY2UoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgVHJpZ2dlclNvdXJjZSA9IFJFQURfQklUKEFEQ3gtPkpTUVIsIEFEQ19KU1FSX0pFWFRTRUwgfCBBRENfSlNRUl9KRVhURU4pOworICBfX0lPIHVpbnQzMl90IFRyaWdnZXJTb3VyY2UgPSBSRUFEX0JJVChBREN4LT5KU1FSLCBBRENfSlNRUl9KRVhUU0VMIHwgQURDX0pTUVJfSkVYVEVOKTsKIAogICAvKiBWYWx1ZSBmb3Igc2hpZnQgb2YgezA7IDQ7IDg7IDEyfSBkZXBlbmRpbmcgb24gdmFsdWUgb2YgYml0ZmllbGQgICAgICAgICAgKi8KICAgLyogY29ycmVzcG9uZGluZyB0byBBRENfSlNRUl9KRVhURU4gezA7IDE7IDI7IDN9LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IFNoaWZ0SmV4dGVuID0gKChUcmlnZ2VyU291cmNlICYgQURDX0pTUVJfSkVYVEVOKSA+PiAoQURDX0lOSl9UUklHX0VYVEVOX0JJVE9GRlNFVF9QT1MgLSAyVUwpKTsKKyAgdWludDMyX3QgU2hpZnRKZXh0ZW4gPSAoKFRyaWdnZXJTb3VyY2UgJiBBRENfSlNRUl9KRVhURU4pID4+IChBRENfSU5KX1RSSUdfRVhURU5fQklUT0ZGU0VUX1BPUyAtIDJVTCkpOwogCiAgIC8qIFNldCBiaXRmaWVsZCBjb3JyZXNwb25kaW5nIHRvIEFEQ19KU1FSX0pFWFRFTiBhbmQgQURDX0pTUVJfSkVYVFNFTCAgICAgICAqLwogICAvKiB0byBtYXRjaCB3aXRoIHRyaWdnZXJzIGxpdGVyYWxzIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQwNTMsOCArNDgzMiw4IEBACiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0lOSl9HZXRTZXF1ZW5jZXJSYW5rcyhBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgUmFuaykKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoKFJFQURfQklUKEFEQ3gtPkpTUVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0sgPj4gQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MpIDw8IChSYW5rICYgQURDX0lOSl9SQU5LX0lEX0pTUVJfTUFTSykpCi0gICAgICAgICAgICAgICAgICAgICA+PiAoUmFuayAmIEFEQ19JTkpfUkFOS19JRF9KU1FSX01BU0spKSA8PCBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfQklUT0ZGU0VUX1BPUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQURDX0NIQU5ORUxfSURfTlVNQkVSX01BU0sgPj4gQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MpIDw8IChSYW5rICYgQURDX0lOSl9SQU5LX0lEX0pTUVJfTUFTSykpCisgICAgICAgICAgICAgICAgICAgID4+IChSYW5rICYgQURDX0lOSl9SQU5LX0lEX0pTUVJfTUFTSykpIDw8IEFEQ19DSEFOTkVMX0lEX05VTUJFUl9CSVRPRkZTRVRfUE9TCiAgICAgICAgICAgICAgICAgICAgKTsKIH0KIApAQCAtNDM3OSw3ICs1MTU4LDcgQEAKICAgLyogYmVjYXVzZSBjb250YWluaW5nIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG90aGVyIHB1cnBvc2UuICAgICAgICAgICAgICAgICovCiAgIC8qIElmIHBhcmFtZXRlciAiVHJpZ2dlclNvdXJjZSIgaXMgc2V0IHRvIFNXIHN0YXJ0LCB0aGVuIHBhcmFtZXRlciAgICAgICAgICAqLwogICAvKiAiRXh0ZXJuYWxUcmlnZ2VyRWRnZSIgaXMgZGlzY2FyZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgdWludDMyX3QgaXNfdHJpZ2dlcl9ub3Rfc3cgPSAodWludDMyX3QpKChUcmlnZ2VyU291cmNlICE9IExMX0FEQ19JTkpfVFJJR19TT0ZUV0FSRSkgPyAxVUwgOiAwVUwpOworICB1aW50MzJfdCBpc190cmlnZ2VyX25vdF9zdyA9ICh1aW50MzJfdCkoKFRyaWdnZXJTb3VyY2UgIT0gTExfQURDX0lOSl9UUklHX1NPRlRXQVJFKSA/IDFVTCA6IDBVTCk7CiAgIE1PRElGWV9SRUcoQURDeC0+SlNRUiwKICAgICAgICAgICAgICBBRENfSlNRUl9KRVhUU0VMIHwKICAgICAgICAgICAgICBBRENfSlNRUl9KRVhURU4gIHwKQEAgLTQzODgsNyArNTE2Nyw3IEBACiAgICAgICAgICAgICAgQURDX0pTUVJfSlNRMiAgICB8CiAgICAgICAgICAgICAgQURDX0pTUVJfSlNRMSAgICB8CiAgICAgICAgICAgICAgQURDX0pTUVJfSkwsCi0gICAgICAgICAgICAgKFRyaWdnZXJTb3VyY2UgJiBBRENfSlNRUl9KRVhUU0VMKSAgICAgICAgICB8CisgICAgICAgICAgICAgKFRyaWdnZXJTb3VyY2UgJiBBRENfSlNRUl9KRVhUU0VMKSAgICAgICAgfAogICAgICAgICAgICAgIChFeHRlcm5hbFRyaWdnZXJFZGdlICogKGlzX3RyaWdnZXJfbm90X3N3KSkgfAogICAgICAgICAgICAgICgoKFJhbms0X0NoYW5uZWwgJiBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfTUFTSykgPj4gQURDX0NIQU5ORUxfSURfTlVNQkVSX0JJVE9GRlNFVF9QT1MpIDw8IChMTF9BRENfSU5KX1JBTktfNCAmIEFEQ19JTkpfUkFOS19JRF9KU1FSX01BU0spKSB8CiAgICAgICAgICAgICAgKCgoUmFuazNfQ2hhbm5lbCAmIEFEQ19DSEFOTkVMX0lEX05VTUJFUl9NQVNLKSA+PiBBRENfQ0hBTk5FTF9JRF9OVU1CRVJfQklUT0ZGU0VUX1BPUykgPDwgKExMX0FEQ19JTkpfUkFOS18zICYgQURDX0lOSl9SQU5LX0lEX0pTUVJfTUFTSykpIHwKQEAgLTQ1MDAsNyArNTI3OSw3IEBACiAgIC8qIGluIHJlZ2lzdGVyIGFuZCByZWdpc3RlciBwb3NpdGlvbiBkZXBlbmRpbmcgb24gcGFyYW1ldGVyICJDaGFubmVsIi4gICAgICAqLwogICAvKiBQYXJhbWV0ZXIgIkNoYW5uZWwiIGlzIHVzZWQgd2l0aCBtYXNrcyBiZWNhdXNlIGNvbnRhaW5pbmcgICAgICAgICAgICAgICAgKi8KICAgLyogb3RoZXIgYml0cyByZXNlcnZlZCBmb3Igb3RoZXIgcHVycG9zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5TTVBSMSwgKChDaGFubmVsICYgQURDX0NIQU5ORUxfU01QUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19TTVBSWF9SRUdPRkZTRVRfUE9TKSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5TTVBSMSwgKChDaGFubmVsICYgQURDX0NIQU5ORUxfU01QUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19TTVBSWF9SRUdPRkZTRVRfUE9TKSk7CiAKICAgTU9ESUZZX1JFRygqcHJlZywKICAgICAgICAgICAgICBBRENfU01QUjFfU01QMCA8PCAoKENoYW5uZWwgJiBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9NQVNLKSA+PiBBRENfQ0hBTk5FTF9TTVB4X0JJVE9GRlNFVF9QT1MpLApAQCAtNDU4MSw3ICs1MzYwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfR2V0Q2hhbm5lbFNhbXBsaW5nVGltZShBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPlNNUFIxLCAoKENoYW5uZWwgJiBBRENfQ0hBTk5FTF9TTVBSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX1NNUFJYX1JFR09GRlNFVF9QT1MpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPlNNUFIxLCAoKENoYW5uZWwgJiBBRENfQ0hBTk5FTF9TTVBSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX1NNUFJYX1JFR09GRlNFVF9QT1MpKTsKIAogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX1NNUFIxX1NNUDAgPDwgKChDaGFubmVsICYgQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfTUFTSykgPj4gQURDX0NIQU5ORUxfU01QeF9CSVRPRkZTRVRfUE9TKSkKQEAgLTQ2NDIsMTIgKzU0MjEsMzAgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19TZXRDaGFubmVsU2luZ2xlRGlmZihBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgU2luZ2xlRGlmZikKIHsKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICAvKiBCaXRzIG9mIGNoYW5uZWxzIGluIHNpbmdsZSBvciBkaWZmZXJlbnRpYWwgbW9kZSBhcmUgc2V0IG9ubHkgZm9yICAgICAgICAgKi8KKyAgLyogZGlmZmVyZW50aWFsIG1vZGUgKGZvciBzaW5nbGUgbW9kZSwgbWFzayBvZiBiaXRzIGFsbG93ZWQgdG8gYmUgc2V0IGlzICAgICovCisgIC8qIHNoaWZ0ZWQgb3V0IG9mIHJhbmdlIG9mIGJpdHMgb2YgY2hhbm5lbHMgaW4gc2luZ2xlIG9yIGRpZmZlcmVudGlhbCBtb2RlLiAqLworICBpZiAoQURDeCA9PSBBREMzKQorICB7CisgICAgTU9ESUZZX1JFRyhBREN4LT5MVFIyX0RJRlNFTCwKKyAgICAgICAgICAgICAgIENoYW5uZWwgJiBBRENfU0lOR0xFRElGRl9DSEFOTkVMX01BU0ssCisgICAgICAgICAgICAgICAoQ2hhbm5lbCAmIEFEQ19TSU5HTEVESUZGX0NIQU5ORUxfTUFTSykgJiAoQURDX0RJRlNFTF9ESUZTRUwgPj4gKFNpbmdsZURpZmYgJiBBRENfU0lOR0xFRElGRl9DSEFOTkVMX1NISUZUX01BU0spKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgTU9ESUZZX1JFRyhBREN4LT5ESUZTRUxfUkVTMTIsCisgICAgICAgICAgICAgICBDaGFubmVsICYgQURDX1NJTkdMRURJRkZfQ0hBTk5FTF9NQVNLLAorICAgICAgICAgICAgICAgKENoYW5uZWwgJiBBRENfU0lOR0xFRElGRl9DSEFOTkVMX01BU0spICYgKEFEQ19ESUZTRUxfRElGU0VMID4+IChTaW5nbGVEaWZmICYgQURDX1NJTkdMRURJRkZfQ0hBTk5FTF9TSElGVF9NQVNLKSkpOworICB9CisjZWxzZSAgLyogQURDX1ZFUl9WNV9WOTAgKi8KICAgLyogQml0cyBvZiBjaGFubmVscyBpbiBzaW5nbGUgb3IgZGlmZmVyZW50aWFsIG1vZGUgYXJlIHNldCBvbmx5IGZvciAgICAgICAgICovCiAgIC8qIGRpZmZlcmVudGlhbCBtb2RlIChmb3Igc2luZ2xlIG1vZGUsIG1hc2sgb2YgYml0cyBhbGxvd2VkIHRvIGJlIHNldCBpcyAgICAqLwogICAvKiBzaGlmdGVkIG91dCBvZiByYW5nZSBvZiBiaXRzIG9mIGNoYW5uZWxzIGluIHNpbmdsZSBvciBkaWZmZXJlbnRpYWwgbW9kZS4gKi8KICAgTU9ESUZZX1JFRyhBREN4LT5ESUZTRUwsCiAgICAgICAgICAgICAgQ2hhbm5lbCAmIEFEQ19TSU5HTEVESUZGX0NIQU5ORUxfTUFTSywKICAgICAgICAgICAgICAoQ2hhbm5lbCAmIEFEQ19TSU5HTEVESUZGX0NIQU5ORUxfTUFTSykgJiAoQURDX0RJRlNFTF9ESUZTRUwgPj4gKFNpbmdsZURpZmYgJiBBRENfU0lOR0xFRElGRl9DSEFOTkVMX1NISUZUX01BU0spKSk7CisjZW5kaWYKIH0KIAogLyoqCkBAIC00Njk1LDcgKzU0OTIsMTEgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfR2V0Q2hhbm5lbFNpbmdsZURpZmYoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IENoYW5uZWwpCiB7CisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkgIAorICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5ESUZTRUxfUkVTMTIsIChDaGFubmVsICYgQURDX1NJTkdMRURJRkZfQ0hBTk5FTF9NQVNLKSkpOworI2Vsc2UgIAogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5ESUZTRUwsIChDaGFubmVsICYgQURDX1NJTkdMRURJRkZfQ0hBTk5FTF9NQVNLKSkpOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtNDg0Myw3ICs1NjQ0LDcgQEAKICAgLyogaW4gcmVnaXN0ZXIgYW5kIHJlZ2lzdGVyIHBvc2l0aW9uIGRlcGVuZGluZyBvbiBwYXJhbWV0ZXIgIkFXRHkiLiAgICAgICAgICovCiAgIC8qIFBhcmFtZXRlcnMgIkFXRENoYW5uZWxHcm91cCIgYW5kICJBV0R5IiBhcmUgdXNlZCB3aXRoIG1hc2tzIGJlY2F1c2UgICAgICAqLwogICAvKiBjb250YWluaW5nIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG90aGVyIHB1cnBvc2UuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkNGR1IsICgoQVdEeSAmIEFEQ19BV0RfQ1JYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfQVdEX0NSWF9SRUdPRkZTRVRfUE9TKQorICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+Q0ZHUiwgKChBV0R5ICYgQURDX0FXRF9DUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19BV0RfQ1JYX1JFR09GRlNFVF9QT1MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgoQVdEeSAmIEFEQ19BV0RfQ1IxMl9SRUdPRkZTRVRHQVBfTUFTSykgKiBBRENfQVdEX0NSMTJfUkVHT0ZGU0VUR0FQX1ZBTCkpOwogCiAgIE1PRElGWV9SRUcoKnByZWcsCkBAIC00OTc4LDEwICs1Nzc5LDEwIEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0dldEFuYWxvZ1dETW9uaXRDaGFubmVscyhBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgQVdEeSkKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkNGR1IsICgoQVdEeSAmIEFEQ19BV0RfQ1JYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfQVdEX0NSWF9SRUdPRkZTRVRfUE9TKQorICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+Q0ZHUiwgKChBV0R5ICYgQURDX0FXRF9DUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19BV0RfQ1JYX1JFR09GRlNFVF9QT1MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgoQVdEeSAmIEFEQ19BV0RfQ1IxMl9SRUdPRkZTRVRHQVBfTUFTSykgKiBBRENfQVdEX0NSMTJfUkVHT0ZGU0VUR0FQX1ZBTCkpOwogCi0gIHJlZ2lzdGVyIHVpbnQzMl90IEFuYWxvZ1dETW9uaXRDaGFubmVscyA9IChSRUFEX0JJVCgqcHJlZywgQVdEeSkgJiBBV0R5ICYgQURDX0FXRF9DUl9BTExfQ0hBTk5FTF9NQVNLKTsKKyAgdWludDMyX3QgQW5hbG9nV0RNb25pdENoYW5uZWxzID0gKFJFQURfQklUKCpwcmVnLCBBV0R5KSAmIEFXRHkgJiBBRENfQVdEX0NSX0FMTF9DSEFOTkVMX01BU0spOwogCiAgIC8qIElmICJBbmFsb2dXRE1vbml0Q2hhbm5lbHMiID09IDAsIHRoZW4gdGhlIHNlbGVjdGVkIEFXRCBpcyBkaXNhYmxlZCAgICAgICAqLwogICAvKiAocGFyYW1ldGVyIHZhbHVlIExMX0FEQ19BV0RfRElTQUJMRSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTUwODUsMTkgKzU4ODYsNDcgQEAKICAgKiBAcGFyYW0gIEFXRFRocmVzaG9sZFZhbHVlIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMDAgYW5kIE1heF9EYXRhPTB4RkZGCiAgICogQHJldHZhbCBOb25lCiAgICovCi1fX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfU2V0QW5hbG9nV0RUaHJlc2hvbGRzKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBBV0R5LCB1aW50MzJfdCBBV0RUaHJlc2hvbGRzSGlnaExvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQVdEVGhyZXNob2xkVmFsdWUpCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BRENfU2V0QW5hbG9nV0RUaHJlc2hvbGRzKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBBV0R5LCB1aW50MzJfdCBBV0RUaHJlc2hvbGRzSGlnaExvdywgdWludDMyX3QgQVdEVGhyZXNob2xkVmFsdWUpCiB7CisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIC8qIFNldCBiaXRzIHdpdGggY29udGVudCBvZiBwYXJhbWV0ZXIgIkFXRFRocmVzaG9sZFZhbHVlIiB3aXRoIGJpdHMgICAgICAgICAqLworICAgIC8qIHBvc2l0aW9uIGluIHJlZ2lzdGVyIGFuZCByZWdpc3RlciBwb3NpdGlvbiBkZXBlbmRpbmcgb24gcGFyYW1ldGVycyAgICAgICAqLworICAgIC8qICJBV0RUaHJlc2hvbGRzSGlnaExvdyIgYW5kICJBV0R5Ii4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIFBhcmFtZXRlcnMgIkFXRHkiIGFuZCAiQVdEVGhyZXNob2xkVmFsdWUiIGFyZSB1c2VkIHdpdGggbWFza3MgYmVjYXVzZSAgICAqLworICAgIC8qIGNvbnRhaW5pbmcgb3RoZXIgYml0cyByZXNlcnZlZCBmb3Igb3RoZXIgcHVycG9zZS4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5MVFIxX1RSMSwgKChBV0R5ICYgQURDX0FXRF9UUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19BV0RfVFJYX1JFR09GRlNFVF9QT1MpKTsKKworICAgIE1PRElGWV9SRUcoKnByZWcsCisgICAgICAgICAgICAgICBBV0RUaHJlc2hvbGRzSGlnaExvdywKKyAgICAgICAgICAgICAgIEFXRFRocmVzaG9sZFZhbHVlIDw8ICgoQVdEVGhyZXNob2xkc0hpZ2hMb3cgJiBBRENfQVdEX1RSWF9CSVRfSElHSF9NQVNLKSA+PiBBRENfQVdEX1RSWF9CSVRfSElHSF9TSElGVDQpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBTZXQgYml0cyB3aXRoIGNvbnRlbnQgb2YgcGFyYW1ldGVyICJBV0RUaHJlc2hvbGRWYWx1ZSIgd2l0aCBiaXRzICAgICAgICAgKi8KKyAgICAvKiBwb3NpdGlvbiBpbiByZWdpc3RlciBhbmQgcmVnaXN0ZXIgcG9zaXRpb24gZGVwZW5kaW5nIG9uIHBhcmFtZXRlcnMgICAgICAgKi8KKyAgICAvKiAiQVdEVGhyZXNob2xkc0hpZ2hMb3ciIGFuZCAiQVdEeSIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBQYXJhbWV0ZXJzICJBV0R5IiBhbmQgIkFXRFRocmVzaG9sZFZhbHVlIiBhcmUgdXNlZCB3aXRoIG1hc2tzIGJlY2F1c2UgICAgKi8KKyAgICAvKiBjb250YWluaW5nIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG90aGVyIHB1cnBvc2UuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+TFRSMV9UUjEsICgoKEFXRHkgJiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0FXRF9UUlhfUkVHT0ZGU0VUX1BPUykgKiAyVUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKChBV0R5ICYgQURDX0FXRF9UUjEyX1JFR09GRlNFVEdBUF9NQVNLKSAqIEFEQ19BV0RfVFIxMl9SRUdPRkZTRVRHQVBfVkFMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChBV0RUaHJlc2hvbGRzSGlnaExvdykpOworCisgICAgTU9ESUZZX1JFRygqcHJlZywgQURDX0xUUl9MVCwgQVdEVGhyZXNob2xkVmFsdWUpOworICB9CisjZWxzZQogICAvKiBTZXQgYml0cyB3aXRoIGNvbnRlbnQgb2YgcGFyYW1ldGVyICJBV0RUaHJlc2hvbGRWYWx1ZSIgd2l0aCBiaXRzICAgICAgICAgKi8KICAgLyogcG9zaXRpb24gaW4gcmVnaXN0ZXIgYW5kIHJlZ2lzdGVyIHBvc2l0aW9uIGRlcGVuZGluZyBvbiBwYXJhbWV0ZXJzICAgICAgICovCiAgIC8qICJBV0RUaHJlc2hvbGRzSGlnaExvdyIgYW5kICJBV0R5Ii4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBQYXJhbWV0ZXJzICJBV0R5IiBhbmQgIkFXRFRocmVzaG9sZFZhbHVlIiBhcmUgdXNlZCB3aXRoIG1hc2tzIGJlY2F1c2UgICAgKi8KICAgLyogY29udGFpbmluZyBvdGhlciBiaXRzIHJlc2VydmVkIGZvciBvdGhlciBwdXJwb3NlLiAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5MVFIxLCAoKChBV0R5ICYgQURDX0FXRF9UUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19BV0RfVFJYX1JFR09GRlNFVF9QT1MpICogMlVMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKChBV0R5ICYgQURDX0FXRF9UUjEyX1JFR09GRlNFVEdBUF9NQVNLKSAqIEFEQ19BV0RfVFIxMl9SRUdPRkZTRVRHQVBfVkFMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKEFXRFRocmVzaG9sZHNIaWdoTG93KSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5MVFIxLCAoKChBV0R5ICYgQURDX0FXRF9UUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19BV0RfVFJYX1JFR09GRlNFVF9QT1MpICogMlVMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKEFXRHkgJiBBRENfQVdEX1RSMTJfUkVHT0ZGU0VUR0FQX01BU0spICogQURDX0FXRF9UUjEyX1JFR09GRlNFVEdBUF9WQUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChBV0RUaHJlc2hvbGRzSGlnaExvdykpOwogCiAgIE1PRElGWV9SRUcoKnByZWcsIEFEQ19MVFJfTFQsIEFXRFRocmVzaG9sZFZhbHVlKTsKKyNlbmRpZiAgLyogQURDX1ZFUl9WNV9WOTAgKi8KIH0KIAogLyoqCkBAIC01MTIyLDE2ICs1OTUxLDE2OCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19BV0RfVEhSRVNIT0xEX0hJR0gKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQVdEX1RIUkVTSE9MRF9MT1cKICAgKiBAcmV0dmFsIFZhbHVlIGJldHdlZW4gTWluX0RhdGE9MHgwMDAgYW5kIE1heF9EYXRhPTB4M0ZGRkZGRgotICAqLworKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfR2V0QW5hbG9nV0RUaHJlc2hvbGRzKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBBV0R5LCB1aW50MzJfdCBBV0RUaHJlc2hvbGRzSGlnaExvdykKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkxUUjEsICgoKEFXRHkgJiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0FXRF9UUlhfUkVHT0ZGU0VUX1BPUykgKiAyVUwpCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkxUUjFfVFIxLCAoKChBV0R5ICYgQURDX0FXRF9UUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19BV0RfVFJYX1JFR09GRlNFVF9QT1MpICogMlVMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKEFXRHkgJiBBRENfQVdEX1RSMTJfUkVHT0ZGU0VUR0FQX01BU0spICogQURDX0FXRF9UUjEyX1JFR09GRlNFVEdBUF9WQUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChBV0RUaHJlc2hvbGRzSGlnaExvdykpOworCisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKCpwcmVnLCBBRENfTFRSX0xUKSk7CisjZWxzZQorICAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkxUUjEsICgoKEFXRHkgJiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0FXRF9UUlhfUkVHT0ZGU0VUX1BPUykgKiAyVUwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKEFXRHkgJiBBRENfQVdEX1RSMTJfUkVHT0ZGU0VUR0FQX01BU0spICogQURDX0FXRF9UUjEyX1JFR09GRlNFVEdBUF9WQUwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoQVdEVGhyZXNob2xkc0hpZ2hMb3cpKTsKIAogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVCgqcHJlZywgQURDX0xUUl9MVCkpOworI2VuZGlmCiB9CiAKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorCisvKioKKyAgKiBAYnJpZWYgIFNldCBBREMgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZHMgdmFsdWUgb2YgYm90aCB0aHJlc2hvbGRzCisgICogICAgICAgICBoaWdoIGFuZCBsb3cuIEFwcGxpY2FibGUgZm9yIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eC4KKyAgKiBAbm90ZSAgIElmIHZhbHVlIG9mIG9ubHkgb25lIHRocmVzaG9sZCBoaWdoIG9yIGxvdyBtdXN0IGJlIHNldCwKKyAgKiAgICAgICAgIHVzZSBmdW5jdGlvbiBAcmVmIExMX0FEQ19TZXRBbmFsb2dXRFRocmVzaG9sZHMoKS4KKyAgKiBAbm90ZSAgIEluIGNhc2Ugb2YgQURDIHJlc29sdXRpb24gZGlmZmVyZW50IG9mIDEyIGJpdHMsCisgICogICAgICAgICBhbmFsb2cgd2F0Y2hkb2cgdGhyZXNob2xkcyBkYXRhIHJlcXVpcmUgYSBzcGVjaWZpYyBzaGlmdC4KKyAgKiAgICAgICAgIFVzZSBoZWxwZXIgbWFjcm8gQHJlZiBfX0xMX0FEQ19BTkFMT0dXRF9TRVRfVEhSRVNIT0xEX1JFU09MVVRJT04oKS4KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoZXJlIGFyZSAyIGtpbmRzIG9mIGFuYWxvZyB3YXRjaGRvZworICAqICAgICAgICAgaW5zdGFuY2U6CisgICogICAgICAgICAtIEFXRCBzdGFuZGFyZCAoaW5zdGFuY2UgQVdEMSk6CisgICogICAgICAgICAgIC0gY2hhbm5lbHMgbW9uaXRvcmVkOiBjYW4gbW9uaXRvciAxIGNoYW5uZWwgb3IgYWxsIGNoYW5uZWxzLgorICAqICAgICAgICAgICAtIGdyb3VwcyBtb25pdG9yZWQ6IEFEQyBncm91cHMgcmVndWxhciBhbmQtb3IgaW5qZWN0ZWQuCisgICogICAgICAgICAgIC0gcmVzb2x1dGlvbjogcmVzb2x1dGlvbiBpcyBub3QgbGltaXRlZCAoY29ycmVzcG9uZHMgdG8KKyAgKiAgICAgICAgICAgICBBREMgcmVzb2x1dGlvbiBjb25maWd1cmVkKS4KKyAgKiAgICAgICAgIC0gQVdEIGZsZXhpYmxlIChpbnN0YW5jZXMgQVdEMiwgQVdEMyk6CisgICogICAgICAgICAgIC0gY2hhbm5lbHMgbW9uaXRvcmVkOiBmbGV4aWJsZSBvbiBjaGFubmVscyBtb25pdG9yZWQsIHNlbGVjdGlvbiBpcworICAqICAgICAgICAgICAgIGNoYW5uZWwgd2lzZSwgZnJvbSBmcm9tIDEgdG8gYWxsIGNoYW5uZWxzLgorICAqICAgICAgICAgICAgIFNwZWNpZmljaXR5IG9mIHRoaXMgYW5hbG9nIHdhdGNoZG9nOiBNdWx0aXBsZSBjaGFubmVscyBjYW4KKyAgKiAgICAgICAgICAgICBiZSBzZWxlY3RlZC4gRm9yIGV4YW1wbGU6CisgICogICAgICAgICAgICAgKExMX0FEQ19BV0RfQ0hBTk5FTDRfUkVHX0lOSiB8IExMX0FEQ19BV0RfQ0hBTk5FTDVfUkVHX0lOSiB8IC4uLikKKyAgKiAgICAgICAgICAgLSBncm91cHMgbW9uaXRvcmVkOiBub3Qgc2VsZWN0aW9uIHBvc3NpYmxlIChtb25pdG9yaW5nIG9uIGJvdGgKKyAgKiAgICAgICAgICAgICBncm91cHMgcmVndWxhciBhbmQgaW5qZWN0ZWQpLgorICAqICAgICAgICAgICAgIENoYW5uZWxzIHNlbGVjdGVkIGFyZSBtb25pdG9yZWQgb24gZ3JvdXBzIHJlZ3VsYXIgYW5kIGluamVjdGVkOgorICAqICAgICAgICAgICAgIExMX0FEQ19BV0RfQ0hBTk5FTHh4X1JFR19JTkogKGRvIG5vdCB1c2UgcGFyYW1ldGVycworICAqICAgICAgICAgICAgIExMX0FEQ19BV0RfQ0hBTk5FTHh4X1JFRyBhbmQgTExfQURDX0FXRF9DSEFOTkVMeHhfSU5KKQorICAqICAgICAgICAgICAtIHJlc29sdXRpb246IHJlc29sdXRpb24gaXMgbGltaXRlZCB0byA4IGJpdHM6IGlmIEFEQyByZXNvbHV0aW9uIGlzCisgICogICAgICAgICAgICAgMTIgYml0cyB0aGUgNCBMU0IgYXJlIGlnbm9yZWQsIGlmIEFEQyByZXNvbHV0aW9uIGlzIDEwIGJpdHMKKyAgKiAgICAgICAgICAgICB0aGUgMiBMU0IgYXJlIGlnbm9yZWQuCisgICogQHJtdG9sbCBUUjEgICAgICBIVDEgICAgICAgICAgICBMTF9BRENfQ29uZmlnQW5hbG9nV0RUaHJlc2hvbGRzXG4KKyAgKiAgICAgICAgIFRSMiAgICAgIEhUMiAgICAgICAgICAgIExMX0FEQ19Db25maWdBbmFsb2dXRFRocmVzaG9sZHNcbgorICAqICAgICAgICAgVFIzICAgICAgSFQzICAgICAgICAgICAgTExfQURDX0NvbmZpZ0FuYWxvZ1dEVGhyZXNob2xkc1xuCisgICogICAgICAgICBUUjEgICAgICBMVDEgICAgICAgICAgICBMTF9BRENfQ29uZmlnQW5hbG9nV0RUaHJlc2hvbGRzXG4KKyAgKiAgICAgICAgIFRSMiAgICAgIExUMiAgICAgICAgICAgIExMX0FEQ19Db25maWdBbmFsb2dXRFRocmVzaG9sZHNcbgorICAqICAgICAgICAgVFIzICAgICAgTFQzICAgICAgICAgICAgTExfQURDX0NvbmZpZ0FuYWxvZ1dEVGhyZXNob2xkcworICAqIEBwYXJhbSAgQURDeCBBREMgaW5zdGFuY2UKKyAgKiBAcGFyYW0gIEFXRHkgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQVdEMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19BV0QyCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0FXRDMKKyAgKiBAcGFyYW0gIEFXRFRocmVzaG9sZEhpZ2hWYWx1ZSBWYWx1ZSBiZXR3ZWVuIE1pbl9EYXRhPTB4MDAwIGFuZCBNYXhfRGF0YT0weEZGRgorICAqIEBwYXJhbSAgQVdEVGhyZXNob2xkTG93VmFsdWUgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0weDAwMCBhbmQgTWF4X0RhdGE9MHhGRkYKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0FEQ19Db25maWdBbmFsb2dXRFRocmVzaG9sZHMoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IEFXRHksIHVpbnQzMl90IEFXRFRocmVzaG9sZEhpZ2hWYWx1ZSwgdWludDMyX3QgQVdEVGhyZXNob2xkTG93VmFsdWUpCit7CisgIC8qIFNldCBiaXRzIHdpdGggY29udGVudCBvZiBwYXJhbWV0ZXIgIkFXRFRocmVzaG9sZHh4eFZhbHVlIiB3aXRoIGJpdHMgICAgICAqLworICAvKiBwb3NpdGlvbiBpbiByZWdpc3RlciBhbmQgcmVnaXN0ZXIgcG9zaXRpb24gZGVwZW5kaW5nIG9uIHBhcmFtZXRlciAgICAgICAgKi8KKyAgLyogIkFXRHkiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFBhcmFtZXRlcnMgIkFXRHkiIGFuZCAiQVdEVGhyZXNob2xkeHh4VmFsdWUiIGFyZSB1c2VkIHdpdGggbWFza3MgYmVjYXVzZSAqLworICAvKiBjb250YWluaW5nIG90aGVyIGJpdHMgcmVzZXJ2ZWQgZm9yIG90aGVyIHB1cnBvc2UuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIHVpbnQzMl90IF9fSU8gKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5MVFIxX1RSMSwgKChBV0R5ICYgQURDX0FXRF9UUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19BV0RfVFJYX1JFR09GRlNFVF9QT1MpKTsKKworICAgIE1PRElGWV9SRUcoKnByZWcsCisgICAgICAgICAgICAgICBBREMzX1RSMV9IVDEgfCBBREMzX1RSMV9MVDEsCisgICAgICAgICAgICAgICAoQVdEVGhyZXNob2xkSGlnaFZhbHVlIDw8IEFEQzNfVFIxX0hUMV9Qb3MpIHwgQVdEVGhyZXNob2xkTG93VmFsdWUpOworICB9CisgIGVsc2UKKyAgeworICAgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5MVFIxX1RSMSwgKCgoQVdEeSAmIEFEQ19BV0RfVFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfUE9TKSAqIDJVTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKEFXRHkgJiBBRENfQVdEX1RSMTJfUkVHT0ZGU0VUR0FQX01BU0spICogQURDX0FXRF9UUjEyX1JFR09GRlNFVEdBUF9WQUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKExMX0FEQ19BV0RfVEhSRVNIT0xEX0xPVykpOworICAgIF9fSU8gdWludDMyX3QgKnByZWcyID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+TFRSMV9UUjEsICgoKEFXRHkgJiBBRENfQVdEX1RSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0FXRF9UUlhfUkVHT0ZGU0VUX1BPUykgKiAyVUwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgoQVdEeSAmIEFEQ19BV0RfVFIxMl9SRUdPRkZTRVRHQVBfTUFTSykgKiBBRENfQVdEX1RSMTJfUkVHT0ZGU0VUR0FQX1ZBTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKExMX0FEQ19BV0RfVEhSRVNIT0xEX0hJR0gpKTsKKworICAgIE1PRElGWV9SRUcoKnByZWcsIEFEQ19MVFJfTFQsIEFXRFRocmVzaG9sZExvd1ZhbHVlKTsKKyAgICBNT0RJRllfUkVHKCpwcmVnMiwgQURDX0hUUl9IVCwgQVdEVGhyZXNob2xkSGlnaFZhbHVlKTsKKyAgfQorfQorCisKKy8qKgorICAqIEBicmllZiAgU2V0IEFEQyBhbmFsb2cgd2F0Y2hkb2cgZmlsdGVyaW5nIGNvbmZpZ3VyYXRpb24KKyAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCisgICogICAgICAgICBBREMgc3RhdGU6CisgICogICAgICAgICBBREMgbXVzdCBiZSBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgY29udmVyc2lvbiBvbiBnb2luZworICAqICAgICAgICAgb24gZWl0aGVyIGdyb3VwcyByZWd1bGFyIG9yIGluamVjdGVkLgorICAqICAgICAgICAgQXBwbGljYWJsZSBvbiBBREMzIG9mIGRldmljZXMgU1RNMzJINzJ4eCBhbmQgU1RNMzJINzN4eC4KKyAgKiAgQG5vdGUgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBvbiBmaXJzdAorICAqICAgICAgICAgYW5hbG9nIHdhdGNoZG9nIChBV0QxKQorICAqIEBybXRvbGwgVFIxICAgICAgQVdERklMVCAgICAgICAgTExfQURDX1NldEFXREZpbHRlcmluZ0NvbmZpZ3VyYXRpb24KKyAgKiBAcGFyYW0gIEFEQ3ggQURDIGluc3RhbmNlCisgICogQHBhcmFtICBBV0R5IFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0FXRDEKKyAgKiBAcGFyYW0gIEZpbHRlcmluZ0NvbmZpZyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19BV0RfRklMVEVSSU5HX05PTkUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQVdEX0ZJTFRFUklOR18yU0FNUExFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19BV0RfRklMVEVSSU5HXzNTQU1QTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0FXRF9GSUxURVJJTkdfNFNBTVBMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQVdEX0ZJTFRFUklOR181U0FNUExFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19BV0RfRklMVEVSSU5HXzZTQU1QTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0FXRF9GSUxURVJJTkdfN1NBTVBMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQVdEX0ZJTFRFUklOR184U0FNUExFUworICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX1NldEFXREZpbHRlcmluZ0NvbmZpZ3VyYXRpb24oQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IEFXRHksIHVpbnQzMl90IEZpbHRlcmluZ0NvbmZpZykKK3sKKyAgaWYgKEFEQ3ggPT0gQURDMykKKyAgeworICAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgICAodm9pZCkoQVdEeSk7CisgICAgTU9ESUZZX1JFRyhBREN4LT5MVFIxX1RSMSwgQURDM19UUjFfQVdERklMVCwgRmlsdGVyaW5nQ29uZmlnKTsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEdldCBBREMgYW5hbG9nIHdhdGNoZG9nIGZpbHRlcmluZyBjb25maWd1cmF0aW9uCisgICogIEBub3RlICBPbiB0aGlzIFNUTTMyIHNlcmllLCB0aGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgb24gZmlyc3QKKyAgKiAgICAgICAgIGFuYWxvZyB3YXRjaGRvZyAoQVdEMSkKKyAgKiAgICAgICAgIEFwcGxpY2FibGUgb24gQURDMyBvZiBkZXZpY2VzIFNUTTMySDcyeHggYW5kIFNUTTMySDczeHguCisgICogQHJtdG9sbCBUUjEgICAgICBBV0RGSUxUICAgICAgICBMTF9BRENfR2V0QVdERmlsdGVyaW5nQ29uZmlndXJhdGlvbgorICAqIEBwYXJhbSAgQURDeCBBREMgaW5zdGFuY2UKKyAgKiBAcGFyYW0gIEFXRHkgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQVdEMQorICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19BV0RfRklMVEVSSU5HX05PTkUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQVdEX0ZJTFRFUklOR18yU0FNUExFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19BV0RfRklMVEVSSU5HXzNTQU1QTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0FXRF9GSUxURVJJTkdfNFNBTVBMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQVdEX0ZJTFRFUklOR181U0FNUExFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19BV0RfRklMVEVSSU5HXzZTQU1QTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX0FXRF9GSUxURVJJTkdfN1NBTVBMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BRENfQVdEX0ZJTFRFUklOR184U0FNUExFUworICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19HZXRBV0RGaWx0ZXJpbmdDb25maWd1cmF0aW9uKEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBBV0R5KQoreworICBpZiAoQURDeCA9PSBBREMzKQorICB7CisgICAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICAgICh2b2lkKShBV0R5KTsKKyAgICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5MVFIxX1RSMSwgQURDM19UUjFfQVdERklMVCkpOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIEZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgb24gdGhpcyBpbnN0YW5jZSwgcmV0dXJuIDAgKi8KKyAgICByZXR1cm4gMFVMOworICB9Cit9CisjZW5kaWYgLyogQURDX1ZFUl9WNV9WOTAgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC01MjgxLDEwICs2MjYyLDEwIEBACiAgICogQHJtdG9sbCBDRkdSMiAgICBPVlNSICAgICAgICAgICBMTF9BRENfR2V0T3ZlclNhbXBsaW5nUmF0aW8KICAgKiBAcGFyYW0gIEFEQ3ggQURDIGluc3RhbmNlCiAgICogQHJldHZhbCBSYXRpbyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgaW4gdGhlIGZyb20gMSB0byAxMDI0LgotICAqLworKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BRENfR2V0T3ZlclNhbXBsaW5nUmF0aW8oQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIHJldHVybiAoKCh1aW50MzJfdCkoUkVBRF9CSVQoQURDeC0+Q0ZHUjIsIEFEQ19DRkdSMl9PVlNSKSkrKDFVTCA8PCBBRENfQ0ZHUjJfT1ZTUl9Qb3MpKSA+PiBBRENfQ0ZHUjJfT1ZTUl9Qb3MpOworICByZXR1cm4gKCgodWludDMyX3QpKFJFQURfQklUKEFEQ3gtPkNGR1IyLCBBRENfQ0ZHUjJfT1ZTUikpICsgKDFVTCA8PCBBRENfQ0ZHUjJfT1ZTUl9Qb3MpKSA+PiBBRENfQ0ZHUjJfT1ZTUl9Qb3MpOwogfQogCiAvKioKQEAgLTUzMDUsNyArNjI4Niw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09WU19TSElGVF9SSUdIVF85CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQURDX09WU19TSElGVF9SSUdIVF8xMAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FEQ19PVlNfU0hJRlRfUklHSFRfMTEKLSAgKi8KKyovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQURDX0dldE92ZXJTYW1wbGluZ1NoaWZ0KEFEQ19UeXBlRGVmICpBREN4KQogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChBREN4LT5DRkdSMiwgQURDX0NGR1IyX09WU1MpKTsKQEAgLTUzMzYsNyArNjMxNywxMyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQURDX1NldEJvb3N0TW9kZShBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgQm9vc3RNb2RlKQogewotICBpZigoREJHTUNVLT5JRENPREUgJiAweDMwMDAwMDAwVUwpID09IDB4MTAwMDAwMDBVTCkgLyogQ3V0IDEueCAqLworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgIGlmIChBREN4ICE9IEFEQzMpCisgIHsKKyAgICBNT0RJRllfUkVHKEFEQ3gtPkNSLCBBRENfQ1JfQk9PU1QsIChCb29zdE1vZGUgJiBBRENfQ1JfQk9PU1QpKTsKKyAgfQorI2Vsc2UgICAvKiBBRENfVkVSX1Y1X1Y5MCAqLworICBpZiAoKERCR01DVS0+SURDT0RFICYgMHgzMDAwMDAwMFVMKSA9PSAweDEwMDAwMDAwVUwpIC8qIEN1dCAxLnggKi8KICAgewogICAgIE1PRElGWV9SRUcoQURDeC0+Q1IsIEFEQ19DUl9CT09TVF8wLCAoQm9vc3RNb2RlID4+IDJVTCkpOwogICB9CkBAIC01MzQ0LDggKzYzMzEsMTAgQEAKICAgewogICAgIE1PRElGWV9SRUcoQURDeC0+Q1IsIEFEQ19DUl9CT09TVCwgKEJvb3N0TW9kZSAmIEFEQ19DUl9CT09TVCkpOwogICB9CisjZW5kaWYKIH0KIAorCiAvKioKICAgKiBAYnJpZWYgIEdldCBBREMgYm9vc3QgbW9kZS4KICAgKiBAbm90ZSAgIE9uIHRoaXMgU1RNMzIgc2VyaWUsIHNldHRpbmcgb2YgdGhpcyBmZWF0dXJlIGlzIGNvbmRpdGlvbmVkIHRvCkBAIC01MzU4LDcgKzYzNDcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19HZXRCb29zdE1vZGUoQURDX1R5cGVEZWYgKkFEQ3gpCiB7Ci0gIGlmKChEQkdNQ1UtPklEQ09ERSAmIDB4MzAwMDAwMDBVTCkgPT0gMHgxMDAwMDAwMFVMKSAvKiBDdXQgMS54ICovCisgIGlmICgoREJHTUNVLT5JRENPREUgJiAweDMwMDAwMDAwVUwpID09IDB4MTAwMDAwMDBVTCkgLyogQ3V0IDEueCAqLwogICB7CiAgICAgcmV0dXJuICh1aW50MzJfdClSRUFEX0JJVChBREN4LT5DUiwgQURDX0NSX0JPT1NUXzApOwogICB9CkBAIC02MTIwLDcgKzcxMDksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0FEQ19JTkpfUmVhZENvbnZlcnNpb25EYXRhMzIoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJhbmspCiB7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCAoKFJhbmsgJiBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19KRFJYX1JFR09GRlNFVF9QT1MpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsICgoUmFuayAmIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0pEUlhfUkVHT0ZGU0VUX1BPUykpOwogCiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKCpwcmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfSkRSMV9KREFUQSkKQEAgLTYxNDcsNyArNzEzNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgTExfQURDX0lOSl9SZWFkQ29udmVyc2lvbkRhdGExNihBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgUmFuaykKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsICgoUmFuayAmIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0pEUlhfUkVHT0ZGU0VUX1BPUykpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgKChSYW5rICYgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfSkRSWF9SRUdPRkZTRVRfUE9TKSk7CiAKICAgcmV0dXJuICh1aW50MTZfdCkoUkVBRF9CSVQoKnByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19KRFIxX0pEQVRBKQpAQCAtNjE3NCw3ICs3MTYzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MTZfdCBMTF9BRENfSU5KX1JlYWRDb252ZXJzaW9uRGF0YTE0KEFEQ19UeXBlRGVmICpBREN4LCB1aW50MzJfdCBSYW5rKQogewotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgKChSYW5rICYgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfSkRSWF9SRUdPRkZTRVRfUE9TKSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCAoKFJhbmsgJiBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19KRFJYX1JFR09GRlNFVF9QT1MpKTsKIAogICByZXR1cm4gKHVpbnQxNl90KShSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0pEUjFfSkRBVEEpCkBAIC02MjAxLDcgKzcxOTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IExMX0FEQ19JTkpfUmVhZENvbnZlcnNpb25EYXRhMTIoQURDX1R5cGVEZWYgKkFEQ3gsIHVpbnQzMl90IFJhbmspCiB7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX0FEQ19QVFJfUkVHX09GRlNFVChBREN4LT5KRFIxLCAoKFJhbmsgJiBBRENfSU5KX0pEUlhfUkVHT0ZGU0VUX01BU0spID4+IEFEQ19KRFJYX1JFR09GRlNFVF9QT1MpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsICgoUmFuayAmIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0pEUlhfUkVHT0ZGU0VUX1BPUykpOwogCiAgIHJldHVybiAodWludDE2X3QpKFJFQURfQklUKCpwcmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfSkRSMV9KREFUQSkKQEAgLTYyMjgsNyArNzIxNyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDE2X3QgTExfQURDX0lOSl9SZWFkQ29udmVyc2lvbkRhdGExMChBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgUmFuaykKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsICgoUmFuayAmIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0pEUlhfUkVHT0ZGU0VUX1BPUykpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgKChSYW5rICYgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfSkRSWF9SRUdPRkZTRVRfUE9TKSk7CiAKICAgcmV0dXJuICh1aW50MTZfdCkoUkVBRF9CSVQoKnByZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19KRFIxX0pEQVRBKQpAQCAtNjI1NSw3ICs3MjQ0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50OF90IExMX0FEQ19JTkpfUmVhZENvbnZlcnNpb25EYXRhOChBRENfVHlwZURlZiAqQURDeCwgdWludDMyX3QgUmFuaykKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fQURDX1BUUl9SRUdfT0ZGU0VUKEFEQ3gtPkpEUjEsICgoUmFuayAmIEFEQ19JTkpfSkRSWF9SRUdPRkZTRVRfTUFTSykgPj4gQURDX0pEUlhfUkVHT0ZGU0VUX1BPUykpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19BRENfUFRSX1JFR19PRkZTRVQoQURDeC0+SkRSMSwgKChSYW5rICYgQURDX0lOSl9KRFJYX1JFR09GRlNFVF9NQVNLKSA+PiBBRENfSkRSWF9SRUdPRkZTRVRfUE9TKSk7CiAKICAgcmV0dXJuICh1aW50OF90KShSRUFEX0JJVCgqcHJlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfSkRSMV9KREFUQSkKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfbGxfYmRtYS5oIGIvSW5jL3N0bTMyaDd4eF9sbF9iZG1hLmgKaW5kZXggMDc0OGIzNS4uOWZhYTkwMCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9sbF9iZG1hLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9sbF9iZG1hLmgKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfQkRNQV9TZXREYXRhTGVuZ3RoKCkuICovCiAKICAgdWludDMyX3QgUGVyaXBoUmVxdWVzdDsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHBlcmlwaGVyYWwgcmVxdWVzdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERNQU1VWF9MTF9FQ19SRVFVRVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBETUFNVVgyX1JlcXVlc3Rfc2VsZWN0aW9uCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0JETUFfU2V0UGVyaXBoUmVxdWVzdCgpLiAqLwogCkBAIC00ODQsNyArNDg0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfRW5hYmxlQ2hhbm5lbChCRE1BX1R5cGVEZWYgKkJETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgU0VUX0JJVCgoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgQkRNQV9DQ1JfRU4pOwogfQpAQCAtNTA2LDcgKzUwNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX0Rpc2FibGVDaGFubmVsKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICBDTEVBUl9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX0VOKTsKIH0KQEAgLTUyOCw3ICs1MjgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0JETUFfSXNFbmFibGVkQ2hhbm5lbChCRE1BX1R5cGVEZWYgKkJETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX0VOKSA9PSAoQkRNQV9DQ1JfRU4pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC01NjUsNyArNTY1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfQ29uZmlnVHJhbnNmZXIoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQ29uZmlndXJhdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIE1PRElGWV9SRUcoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsCiAgICAgICAgICAgICAgQkRNQV9DQ1JfRElSIHwgQkRNQV9DQ1JfTUVNMk1FTSB8IEJETUFfQ0NSX0NJUkMgfCBCRE1BX0NDUl9QSU5DIHwgQkRNQV9DQ1JfTUlOQyB8IEJETUFfQ0NSX1BTSVpFIHwgQkRNQV9DQ1JfTVNJWkUgfCBCRE1BX0NDUl9QTCwKQEAgLTU5NCw3ICs1OTQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQkRNQV9TZXREYXRhVHJhbnNmZXJEaXJlY3Rpb24oQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgRGlyZWN0aW9uKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgTU9ESUZZX1JFRygoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwKICAgICAgICAgICAgICBCRE1BX0NDUl9ESVIgfCBCRE1BX0NDUl9NRU0yTUVNLCBEaXJlY3Rpb24pOwpAQCAtNjIxLDcgKzYyMSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQkRNQV9HZXREYXRhVHJhbnNmZXJEaXJlY3Rpb24oQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsCiAgICAgICAgICAgICAgICAgICAgQkRNQV9DQ1JfRElSIHwgQkRNQV9DQ1JfTUVNMk1FTSkpOwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX1NldE1vZGUoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgTW9kZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIE1PRElGWV9SRUcoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX0NJUkMsCiAgICAgICAgICAgICAgTW9kZSk7CkBAIC02NzQsNyArNjc0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9CRE1BX0dldE1vZGUoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsCiAgICAgICAgICAgICAgICAgICAgQkRNQV9DQ1JfQ0lSQykpOwpAQCAtNzAwLDcgKzcwMCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX1NldFBlcmlwaEluY01vZGUoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgUGVyaXBoT3JNMk1TcmNJbmNNb2RlKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgTU9ESUZZX1JFRygoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgQkRNQV9DQ1JfUElOQywKICAgICAgICAgICAgICBQZXJpcGhPck0yTVNyY0luY01vZGUpOwpAQCAtNzI1LDcgKzcyNSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQkRNQV9HZXRQZXJpcGhJbmNNb2RlKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoQkRNQV9DaGFubmVsX1R5cGVEZWYgKikoYmRtYV9iYXNlX2FkZHIgKyBMTF9CRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0NSLAogICAgICAgICAgICAgICAgICAgIEJETUFfQ0NSX1BJTkMpKTsKQEAgLTc1MSw3ICs3NTEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQkRNQV9TZXRNZW1vcnlJbmNNb2RlKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IE1lbW9yeU9yTTJNRHN0SW5jTW9kZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIE1PRElGWV9SRUcoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX01JTkMsCiAgICAgICAgICAgICAgTWVtb3J5T3JNMk1Ec3RJbmNNb2RlKTsKQEAgLTc3Niw3ICs3NzYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0JETUFfR2V0TWVtb3J5SW5jTW9kZShCRE1BX1R5cGVEZWYgKkJETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwKICAgICAgICAgICAgICAgICAgICBCRE1BX0NDUl9NSU5DKSk7CkBAIC04MDMsNyArODAzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfU2V0UGVyaXBoU2l6ZShCRE1BX1R5cGVEZWYgKkJETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBQZXJpcGhPck0yTVNyY0RhdGFTaXplKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgTU9ESUZZX1JFRygoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgQkRNQV9DQ1JfUFNJWkUsCiAgICAgICAgICAgICAgUGVyaXBoT3JNMk1TcmNEYXRhU2l6ZSk7CkBAIC04MjksNyArODI5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9CRE1BX0dldFBlcmlwaFNpemUoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsCiAgICAgICAgICAgICAgICAgICAgQkRNQV9DQ1JfUFNJWkUpKTsKQEAgLTg1Niw3ICs4NTYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQkRNQV9TZXRNZW1vcnlTaXplKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IE1lbW9yeU9yTTJNRHN0RGF0YVNpemUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICBNT0RJRllfUkVHKCgoQkRNQV9DaGFubmVsX1R5cGVEZWYgKikoYmRtYV9iYXNlX2FkZHIgKyBMTF9CRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0NSLCBCRE1BX0NDUl9NU0laRSwKICAgICAgICAgICAgICBNZW1vcnlPck0yTURzdERhdGFTaXplKTsKQEAgLTg4Miw3ICs4ODIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0JETUFfR2V0TWVtb3J5U2l6ZShCRE1BX1R5cGVEZWYgKkJETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwKICAgICAgICAgICAgICAgICAgICBCRE1BX0NDUl9NU0laRSkpOwpAQCAtOTEwLDcgKzkxMCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX1NldENoYW5uZWxQcmlvcml0eUxldmVsKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFByaW9yaXR5KQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgTU9ESUZZX1JFRygoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgQkRNQV9DQ1JfUEwsCiAgICAgICAgICAgICAgUHJpb3JpdHkpOwpAQCAtOTM3LDcgKzkzNyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQkRNQV9HZXRDaGFubmVsUHJpb3JpdHlMZXZlbChCRE1BX1R5cGVEZWYgKkJETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwKICAgICAgICAgICAgICAgICAgICBCRE1BX0NDUl9QTCkpOwpAQCAtOTYzLDcgKzk2Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX1NldERhdGFMZW5ndGgoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgTmJEYXRhKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgTU9ESUZZX1JFRygoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNORFRSLAogICAgICAgICAgICAgIEJETUFfQ05EVFJfTkRULCBOYkRhdGEpOwpAQCAtOTg4LDcgKzk4OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQkRNQV9HZXREYXRhTGVuZ3RoKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoQkRNQV9DaGFubmVsX1R5cGVEZWYgKikoYmRtYV9iYXNlX2FkZHIgKyBMTF9CRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q05EVFIsCiAgICAgICAgICAgICAgICAgICAgQkRNQV9DTkRUUl9ORFQpKTsKQEAgLTEwMTQsNyArMTAxNCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX1NldEN1cnJlbnRUYXJnZXRNZW0oQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQ3VycmVudE1lbW9yeSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIE1PRElGWV9SRUcoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX0NULCBDdXJyZW50TWVtb3J5KTsKIH0KQEAgLTEwMzgsNyArMTAzOCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQkRNQV9HZXRDdXJyZW50VGFyZ2V0TWVtKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoQkRNQV9DaGFubmVsX1R5cGVEZWYgKikoYmRtYV9iYXNlX2FkZHIgKyBMTF9CRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0NSLCBCRE1BX0NDUl9DVCkpOwogfQpAQCAtMTA2MCw3ICsxMDYwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfRW5hYmxlRG91YmxlQnVmZmVyTW9kZShCRE1BX1R5cGVEZWYgKkJETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgU0VUX0JJVCgoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgQkRNQV9DQ1JfREJNKTsKIH0KQEAgLTEwODIsNyArMTA4Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX0Rpc2FibGVEb3VibGVCdWZmZXJNb2RlKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICBDTEVBUl9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX0RCTSk7CiB9CkBAIC0xMTE0LDcgKzExMTQsNyBAQAogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQkRNQV9Db25maWdBZGRyZXNzZXMoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgU3JjQWRkcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IERzdEFkZHJlc3MsIHVpbnQzMl90IERpcmVjdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIC8qIERpcmVjdGlvbiBNZW1vcnkgdG8gUGVyaXBoICovCiAgIGlmIChEaXJlY3Rpb24gPT0gTExfQkRNQV9ESVJFQ1RJT05fTUVNT1JZX1RPX1BFUklQSCkKQEAgLTExNTAsNyArMTE1MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX1NldE1lbW9yeUFkZHJlc3MoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgTWVtb3J5QWRkcmVzcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIFdSSVRFX1JFRygoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNNMEFSLCBNZW1vcnlBZGRyZXNzKTsKIH0KQEAgLTExNzUsNyArMTE3NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX1NldFBlcmlwaEFkZHJlc3MoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgUGVyaXBoQWRkcmVzcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIFdSSVRFX1JFRygoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNQQVIsIFBlcmlwaEFkZHJlc3MpOwogfQpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9CRE1BX0dldE1lbW9yeUFkZHJlc3MoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIHJldHVybiAoUkVBRF9SRUcoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DTTBBUikpOwogfQpAQCAtMTIyMSw3ICsxMjIxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9CRE1BX0dldFBlcmlwaEFkZHJlc3MoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIHJldHVybiAoUkVBRF9SRUcoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DUEFSKSk7CiB9CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQkRNQV9TZXRNMk1TcmNBZGRyZXNzKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IE1lbW9yeUFkZHJlc3MpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICBXUklURV9SRUcoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DUEFSLCBNZW1vcnlBZGRyZXNzKTsKIH0KQEAgLTEyNzEsNyArMTI3MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9CRE1BX1NldE0yTURzdEFkZHJlc3MoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgTWVtb3J5QWRkcmVzcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIFdSSVRFX1JFRygoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNNMEFSLCBNZW1vcnlBZGRyZXNzKTsKIH0KQEAgLTEyOTQsNyArMTI5NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQkRNQV9HZXRNMk1TcmNBZGRyZXNzKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICByZXR1cm4gKFJFQURfUkVHKCgoQkRNQV9DaGFubmVsX1R5cGVEZWYgKikoYmRtYV9iYXNlX2FkZHIgKyBMTF9CRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1BBUikpOwogfQpAQCAtMTMxNyw3ICsxMzE3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9CRE1BX0dldE0yTURzdEFkZHJlc3MoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIHJldHVybiAoUkVBRF9SRUcoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DTTBBUikpOwogfQpAQCAtMTM0MCw3ICsxMzQwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfU2V0TWVtb3J5MUFkZHJlc3MoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQWRkcmVzcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIE1PRElGWV9SRUcoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DTTFBUiwgQkRNQV9DTTFBUl9NQSwgQWRkcmVzcyk7CiB9CkBAIC0xMzYyLDcgKzEzNjIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0JETUFfR2V0TWVtb3J5MUFkZHJlc3MoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIHJldHVybiAoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DTTFBUik7CiB9CkBAIC0xNDAwLDggKzE0MDAsOSBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX1NBSTRfQSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgyX1JFUV9TQUk0X0IgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMl9SRVFfQURDMyAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgyX1JFUV9EQUMzICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX0RBQzJfQ0gxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX0RGU0RNMl9GTFQwICgqKQorICAqCiAgICogQG5vdGUgICAoKikgQXZhaWxhYmlsaXR5IGRlcGVuZHMgb24gZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTE0NDQsOCArMTQ0NSw5IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMl9SRVFfU0FJNF9BICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX1NBSTRfQiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgyX1JFUV9BREMzICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX0RBQzMgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMl9SRVFfREFDMl9DSDEgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMl9SRVFfREZTRE0yX0ZMVDAgKCopCisgICoKICAgKiBAbm90ZSAgICgqKSBBdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiBkZXZpY2VzLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0JETUFfR2V0UGVyaXBoUmVxdWVzdChCRE1BX1R5cGVEZWYgKkJETUF4LCB1aW50MzJfdCBDaGFubmVsKQpAQCAtMjE4OSw3ICsyMTkxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfRW5hYmxlSVRfVEMoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIFNFVF9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX1RDSUUpOwogfQpAQCAtMjIxMSw3ICsyMjEzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfRW5hYmxlSVRfSFQoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIFNFVF9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX0hUSUUpOwogfQpAQCAtMjIzMyw3ICsyMjM1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfRW5hYmxlSVRfVEUoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIFNFVF9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX1RFSUUpOwogfQpAQCAtMjI1NSw3ICsyMjU3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfRGlzYWJsZUlUX1RDKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICBDTEVBUl9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX1RDSUUpOwogfQpAQCAtMjI3Nyw3ICsyMjc5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfRGlzYWJsZUlUX0hUKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICBDTEVBUl9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX0hUSUUpOwogfQpAQCAtMjI5OSw3ICsyMzAxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0JETUFfRGlzYWJsZUlUX1RFKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICBDTEVBUl9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX1RFSUUpOwogfQpAQCAtMjMyMSw3ICsyMzIzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9CRE1BX0lzRW5hYmxlZElUX1RDKEJETUFfVHlwZURlZiAqQkRNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OworICB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKEJETUFfQ2hhbm5lbF9UeXBlRGVmICopKGJkbWFfYmFzZV9hZGRyICsgTExfQkRNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgQkRNQV9DQ1JfVENJRSkgPT0gKEJETUFfQ0NSX1RDSUUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yMzQzLDcgKzIzNDUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0JETUFfSXNFbmFibGVkSVRfSFQoQkRNQV9UeXBlRGVmICpCRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CisgIHVpbnQzMl90IGJkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KUJETUF4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoQkRNQV9DaGFubmVsX1R5cGVEZWYgKikoYmRtYV9iYXNlX2FkZHIgKyBMTF9CRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0NSLCBCRE1BX0NDUl9IVElFKSA9PSAoQkRNQV9DQ1JfSFRJRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTIzNjUsNyArMjM2Nyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQkRNQV9Jc0VuYWJsZWRJVF9URShCRE1BX1R5cGVEZWYgKkJETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBiZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClCRE1BeDsKKyAgdWludDMyX3QgYmRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpQkRNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChCRE1BX0NoYW5uZWxfVHlwZURlZiAqKShiZG1hX2Jhc2VfYWRkciArIExMX0JETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIEJETUFfQ0NSX1RFSUUpID09IChCRE1BX0NDUl9URUlFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjM5Nyw2ICsyMzk5LDkgQEAKICAgKi8KIAogI2VuZGlmIC8qIEJETUEgfHwgQkRNQTEgfHwgQkRNQTIgKi8KKy8qKgorICAqIEB9CisgICovCiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX2J1cy5oIGIvSW5jL3N0bTMyaDd4eF9sbF9idXMuaAppbmRleCBhN2I3MzllLi4wMjJjZjZkIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2xsX2J1cy5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfYnVzLmgKQEAgLTE2Myw2ICsxNjMsMTIgQEAKICNlbmRpZiAvKiBIQVNIICovCiAjZGVmaW5lIExMX0FIQjJfR1JQMV9QRVJJUEhfUk5HICAgICAgICAgICAgUkNDX0FIQjJFTlJfUk5HRU4KICNkZWZpbmUgTExfQUhCMl9HUlAxX1BFUklQSF9TRE1NQzIgICAgICAgICBSQ0NfQUhCMkVOUl9TRE1NQzJFTgorI2lmIGRlZmluZWQoRk1BQykKKyNkZWZpbmUgTExfQUhCMl9HUlAxX1BFUklQSF9GTUFDICAgICAgICAgICBSQ0NfQUhCMkVOUl9GTUFDRU4KKyNlbmRpZiAvKiBGTUFDICovCisjaWYgZGVmaW5lZChDT1JESUMpCisjZGVmaW5lIExMX0FIQjJfR1JQMV9QRVJJUEhfQ09SRElDICAgICAgICAgUkNDX0FIQjJFTlJfQ09SRElDRU4KKyNlbmRpZiAvKiBDT1JESUMgKi8KICNpZiBkZWZpbmVkKEJETUExKQogI2RlZmluZSBMTF9BSEIyX0dSUDFfUEVSSVBIX0JETUExICAgICAgICAgIFJDQ19BSEIyRU5SX0JETUExRU4KICNlbmRpZiAvKiBCRE1BMSAqLwpAQCAtMTk3LDcgKzIwMyw5IEBACiAjZGVmaW5lIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YgICAgICAgICAgUkNDX0FIQjRFTlJfR1BJT0ZFTgogI2RlZmluZSBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HICAgICAgICAgIFJDQ19BSEI0RU5SX0dQSU9HRU4KICNkZWZpbmUgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSCAgICAgICAgICBSQ0NfQUhCNEVOUl9HUElPSEVOCisjaWYgZGVmaW5lZChHUElPSSkKICNkZWZpbmUgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSSAgICAgICAgICBSQ0NfQUhCNEVOUl9HUElPSUVOCisjZW5kaWYgLyogR1BJT0kgKi8KICNkZWZpbmUgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSiAgICAgICAgICBSQ0NfQUhCNEVOUl9HUElPSkVOCiAjZGVmaW5lIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0sgICAgICAgICAgUkNDX0FIQjRFTlJfR1BJT0tFTgogI2lmIGRlZmluZWQoUkNDX0FIQjRFTlJfQ1JDRU4pCkBAIC0yMzIsNyArMjQwLDkgQEAKIC8qKiBAZGVmZ3JvdXAgQlVTX0xMX0VDX0FQQjNfR1JQMV9QRVJJUEggIEFQQjMgR1JQMSBQRVJJUEgKICAgKiBAewogICAqLworI2lmIGRlZmluZWQoTFREQykKICNkZWZpbmUgTExfQVBCM19HUlAxX1BFUklQSF9MVERDICAgICAgICAgICBSQ0NfQVBCM0VOUl9MVERDRU4KKyNlbmRpZiAvKiBMVERDICovCiAjaWYgZGVmaW5lZChEU0kpCiAjZGVmaW5lIExMX0FQQjNfR1JQMV9QRVJJUEhfRFNJICAgICAgICAgICAgUkNDX0FQQjNFTlJfRFNJRU4KICNlbmRpZiAvKiBEU0kgKi8KQEAgLTI3MSw3ICsyODEsMTUgQEAKICNkZWZpbmUgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMxICAgICAgICAgICBSQ0NfQVBCMUxFTlJfSTJDMUVOCiAjZGVmaW5lIExMX0FQQjFfR1JQMV9QRVJJUEhfSTJDMiAgICAgICAgICAgUkNDX0FQQjFMRU5SX0kyQzJFTgogI2RlZmluZSBMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzMgICAgICAgICAgIFJDQ19BUEIxTEVOUl9JMkMzRU4KKyNpZiBkZWZpbmVkKEkyQzUpCisjZGVmaW5lIExMX0FQQjFfR1JQMV9QRVJJUEhfSTJDNSAgICAgICAgICAgUkNDX0FQQjFMRU5SX0kyQzVFTgorI2VuZGlmIC8qIEkyQzUgKi8KKyNpZiBkZWZpbmVkKFJDQ19BUEIxTEVOUl9DRUNFTikKICNkZWZpbmUgTExfQVBCMV9HUlAxX1BFUklQSF9DRUMgICAgICAgICAgICBSQ0NfQVBCMUxFTlJfQ0VDRU4KKyNlbHNlCisjZGVmaW5lIExMX0FQQjFfR1JQMV9QRVJJUEhfSERNSUNFQyAgICAgICAgUkNDX0FQQjFMRU5SX0hETUlDRUNFTgorI2RlZmluZSBMTF9BUEIxX0dSUDFfUEVSSVBIX0NFQyAgICAgICAgICAgIExMX0FQQjFfR1JQMV9QRVJJUEhfSERNSUNFQyAgIC8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Ki8KKyNlbmRpZiAvKiBSQ0NfQVBCMUxFTlJfQ0VDRU4gKi8KICNkZWZpbmUgTExfQVBCMV9HUlAxX1BFUklQSF9EQUMxMiAgICAgICAgICBSQ0NfQVBCMUxFTlJfREFDMTJFTgogI2RlZmluZSBMTF9BUEIxX0dSUDFfUEVSSVBIX1VBUlQ3ICAgICAgICAgIFJDQ19BUEIxTEVOUl9VQVJUN0VOCiAjZGVmaW5lIExMX0FQQjFfR1JQMV9QRVJJUEhfVUFSVDggICAgICAgICAgUkNDX0FQQjFMRU5SX1VBUlQ4RU4KQEAgLTI4OCw2ICszMDYsMTIgQEAKICNkZWZpbmUgTExfQVBCMV9HUlAyX1BFUklQSF9PUEFNUCAgICAgICAgICBSQ0NfQVBCMUhFTlJfT1BBTVBFTgogI2RlZmluZSBMTF9BUEIxX0dSUDJfUEVSSVBIX01ESU9TICAgICAgICAgIFJDQ19BUEIxSEVOUl9NRElPU0VOCiAjZGVmaW5lIExMX0FQQjFfR1JQMl9QRVJJUEhfRkRDQU4gICAgICAgICAgUkNDX0FQQjFIRU5SX0ZEQ0FORU4KKyNpZiBkZWZpbmVkKFRJTTIzKQorI2RlZmluZSBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTIzICAgICAgICAgIFJDQ19BUEIxSEVOUl9USU0yM0VOCisjZW5kaWYgLyogVElNMjMgKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTI0ICAgICAgICAgIFJDQ19BUEIxSEVOUl9USU0yNEVOCisjZW5kaWYgLyogVElNMjQgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0zMTMsNyArMzM3LDkgQEAKICNkZWZpbmUgTExfQVBCMl9HUlAxX1BFUklQSF9USU0xNyAgICAgICAgICBSQ0NfQVBCMkVOUl9USU0xN0VOCiAjZGVmaW5lIExMX0FQQjJfR1JQMV9QRVJJUEhfU1BJNSAgICAgICAgICAgUkNDX0FQQjJFTlJfU1BJNUVOCiAjZGVmaW5lIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMSAgICAgICAgICAgUkNDX0FQQjJFTlJfU0FJMUVOCisjaWYgZGVmaW5lZChTQUkyKQogI2RlZmluZSBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIgICAgICAgICAgIFJDQ19BUEIyRU5SX1NBSTJFTgorI2VuZGlmIC8qIFNBSTIgKi8KICNpZiBkZWZpbmVkKFNBSTMpCiAjZGVmaW5lIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAgICAgICAgICAgUkNDX0FQQjJFTlJfU0FJM0VOCiAjZW5kaWYgLyogU0FJMyAqLwpAQCAtMzY3LDcgKzM5Myw3IEBACiAjZGVmaW5lIExMX0NMS0FNX1BFUklQSF9CRE1BICAgICAgICAgIFJDQ19EM0FNUl9CRE1BQU1FTgogI2Vsc2UKICNkZWZpbmUgTExfQ0xLQU1fUEVSSVBIX0JETUEyICAgICAgICAgUkNDX1NSREFNUl9CRE1BMkFNRU4KLSNkZWZpbmUgTExfQ0xLQU1fUEVSSVBIX0JETUEgICAgICAgICAgTExfQ0xLQU1fUEVSSVBIX0JETUEyIC8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Ki8KKyNkZWZpbmUgTExfQ0xLQU1fUEVSSVBIX0JETUEgICBMTF9DTEtBTV9QRVJJUEhfQkRNQTIgLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkqLwogI2VuZGlmIC8qIFJDQ19EM0FNUl9CRE1BQU1FTiAqLwogI2lmIGRlZmluZWQoUkNDX1NSREFNUl9HUElPQU1FTikKICNkZWZpbmUgTExfQ0xLQU1fUEVSSVBIX0dQSU8gICAgICAgICAgUkNDX1NSREFNUl9HUElPQU1FTgpAQCAtNDMwLDkgKzQ1NiwxMiBAQAogI2lmIGRlZmluZWQoQURDMykKICNkZWZpbmUgTExfQ0xLQU1fUEVSSVBIX0FEQzMgICAgICAgICAgUkNDX0QzQU1SX0FEQzNBTUVOCiAjZW5kaWYgLyogQURDMyAqLwotI2lmIGRlZmluZWQoRFRTKQorI2lmIGRlZmluZWQoUkNDX1NSREFNUl9EVFNBTUVOKQogI2RlZmluZSBMTF9DTEtBTV9QRVJJUEhfRFRTICAgICAgICAgICBSQ0NfU1JEQU1SX0RUU0FNRU4KLSNlbmRpZiAvKiBEVFMgKi8KKyNlbmRpZiAvKiBSQ0NfU1JEQU1SX0RUU0FNRU4gKi8KKyNpZiBkZWZpbmVkKFJDQ19EM0FNUl9EVFNBTUVOKQorI2RlZmluZSBMTF9DTEtBTV9QRVJJUEhfRFRTICAgICAgICAgICBSQ0NfRDNBTVJfRFRTQU1FTgorI2VuZGlmIC8qIFJDQ19EM0FNUl9EVFNBTUVOICovCiAjaWYgZGVmaW5lZChERlNETTJfQkFTRSkKICNkZWZpbmUgTExfQ0xLQU1fUEVSSVBIX0RGU0RNMiAgICAgICAgUkNDX1NSREFNUl9ERlNETTJBTUVOCiAjZW5kaWYgLyogREZTRE0yX0JBU0UgKi8KQEAgLTQ4MSw2ICs1MTAsMTAgQEAKICAgKi8KICNlbmRpZiAvKiBSQ0NfQ0tHQUVOUl9BWElDS0cgKi8KIAorLyoqCisgICogQH0KKyAgKi8KKwogLyogRXhwb3J0ZWQgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTUyOSw3ICs1NjIsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRFRDTTEgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9EVENNMiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0lUQ00gKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9BWElTUkFNICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfQVhJU1JBTQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCkBAIC01NzAsNyArNjAzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PU1BJMSAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTIgICAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0lPTU5HUiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PQ1RPU1BJTSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0dGWE1NVSAgKCopCkBAIC01NzksNyArNjEyLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RUQ00xICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRFRDTTIgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9JVENNICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfQVhJU1JBTSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0FYSVNSQU0KICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgdWludDMyX3QKQEAgLTYxMywxMCArNjQ2LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9ETUEyRAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfSlBHREVDICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRk1DCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9RU1BJICAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfUVNQSSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PU1BJMSAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTIgICAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0lPTU5HUiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PQ1RPU1BJTSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0dGWE1NVSAgKCopCkBAIC02MjUsNyArNjU4LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RUQ00xICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRFRDTTIgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9JVENNICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfQVhJU1JBTSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0FYSVNSQU0KICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQpAQCAtNjQwLDcgKzY3Myw3IEBACiAgICogQHJtdG9sbCBBSEIzUlNUUiAgICAgTURNQVJTVCAgICAgICBMTF9BSEIzX0dSUDFfRm9yY2VSZXNldFxuCiAgICogICAgICAgICBBSEIzUlNUUiAgICAgRE1BMkRSU1QgICAgICBMTF9BSEIzX0dSUDFfRm9yY2VSZXNldFxuCiAgICogICAgICAgICBBSEIzUlNUUiAgICAgSlBHREVDUlNUICAgICBMTF9BSEIzX0dSUDFfRm9yY2VSZXNldFxuCi0gICogICAgICAgICBBSEIzUlNUUiAgICAgRk1DUlNUICAgICAgICBMTF9BSEIzX0dSUDFfRm9yY2VSZXNldFxuCisgICogICAgICAgICBBSEIzUlNUUiAgICAgRk1DUlNUICAgICAgICBMTF9BSEIzX0dSUDFfRm9yY2VSZXNldFxuIAogICAqICAgICAgICAgQUhCM1JTVFIgICAgIFFTUElSU1QgICAgICAgTExfQUhCM19HUlAxX0ZvcmNlUmVzZXRcbiAoKikKICAgKiAgICAgICAgIEFIQjNSU1RSICAgICBPU1BJMVJTVCAgICAgIExMX0FIQjNfR1JQMV9Gb3JjZVJlc2V0XG4gKCopCiAgICogICAgICAgICBBSEIzUlNUUiAgICAgT1NQSTJSU1QgICAgICBMTF9BSEIzX0dSUDFfRm9yY2VSZXNldFxuICgqKQpAQCAtNjU0LDEzICs2ODcsMTMgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RNQTJECiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9KUEdERUMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkgICAgICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTEgICAgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PU1BJMiAgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PU1BJMSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkyICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT0NUT1NQSU0gKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMxICAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzIgICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfR0ZYTU1VICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMxICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0dGWE1NVSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9TRE1NQzEKICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgpAQCAtNjkwLDEzICs3MjMsMTMgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RNQTJECiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9KUEdERUMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkgICAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfUVNQSSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTIgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PQ1RPU1BJTSAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzEgICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMiAgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9HRlhNTVUgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMyICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfR0ZYTU1VICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1NETU1DMQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCkBAIC03MzQsOSArNzY3LDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTIgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PQ1RPU1BJTSAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzEgICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMiAgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9HRlhNTVUgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMyICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfR0ZYTU1VICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1NETU1DMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRkxBU0gKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RUQ00xCkBAIC03ODMsOSArODE2LDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTIgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PQ1RPU1BJTSAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzEgICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMiAgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9HRlhNTVUgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMyICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfR0ZYTU1VICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1NETU1DMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRkxBU0gKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RUQ00xCkBAIC0xMDY3LDYgKzExMDAsOCBAQAogICAqICAgICAgICAgQUhCMkVOUiAgICAgIFJOR0VOICAgICAgICAgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrXG4KICAgKiAgICAgICAgIEFIQjJFTlIgICAgICBTRE1NQzJFTiAgICAgIExMX0FIQjJfR1JQMV9FbmFibGVDbG9ja1xuCiAgICogICAgICAgICBBSEIyRU5SICAgICAgQkRNQTFFTiAgICAgICBMTF9BSEIyX0dSUDFfRW5hYmxlQ2xvY2tcbiAoKikKKyAgKiAgICAgICAgIEFIQjJFTlIgICAgICBGTUFDRU4gICAgICAgIExMX0FIQjJfR1JQMV9FbmFibGVDbG9ja1xuCisgICogICAgICAgICBBSEIyRU5SICAgICAgQ09SRElDRU4gICAgICBMTF9BSEIyX0dSUDFfRW5hYmxlQ2xvY2tcbgogICAqICAgICAgICAgQUhCMkVOUiAgICAgIEQyU1JBTTFFTiAgICAgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrXG4KICAgKiAgICAgICAgIEFIQjJFTlIgICAgICBEMlNSQU0yRU4gICAgIExMX0FIQjJfR1JQMV9FbmFibGVDbG9ja1xuCiAgICogICAgICAgICBBSEIyRU5SICAgICAgRDJTUkFNM0VOICAgICBMTF9BSEIyX0dSUDFfRW5hYmxlQ2xvY2sgICAoKikKQEAgLTEwNzcsNyArMTExMiw5IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9IQVNIICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfUk5HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9TRE1NQzIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0JETUExICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CRE1BMSAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9GTUFDICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9DT1JESUMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0zICgqKQpAQCAtMTEwMywxNyArMTE0MCwyMSBAQAogICAqICAgICAgICAgQUhCMkVOUiAgICAgIFJOR0VOICAgICAgICAgTExfQUhCMl9HUlAxX0lzRW5hYmxlZENsb2NrXG4KICAgKiAgICAgICAgIEFIQjJFTlIgICAgICBTRE1NQzJFTiAgICAgIExMX0FIQjJfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuCiAgICogICAgICAgICBBSEIyRU5SICAgICAgQkRNQTFFTiAgICAgICBMTF9BSEIyX0dSUDFfSXNFbmFibGVkQ2xvY2tcbiAoKikKKyAgKiAgICAgICAgIEFIQjJFTlIgICAgICBGTUFDRU4gICAgICAgIExMX0FIQjJfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuCisgICogICAgICAgICBBSEIyRU5SICAgICAgQ09SRElDRU4gICAgICBMTF9BSEIyX0dSUDFfSXNFbmFibGVkQ2xvY2tcbgogICAqICAgICAgICAgQUhCMkVOUiAgICAgIEQyU1JBTTFFTiAgICAgTExfQUhCMl9HUlAxX0lzRW5hYmxlZENsb2NrXG4KICAgKiAgICAgICAgIEFIQjJFTlIgICAgICBEMlNSQU0yRU4gICAgIExMX0FIQjJfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuCiAgICogICAgICAgICBBSEIyRU5SICAgICAgRDJTUkFNM0VOICAgICBMTF9BSEIyX0dSUDFfSXNFbmFibGVkQ2xvY2sgICAoKikKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EQ01JCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9IU0VNRU4gKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9IU0VNICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQ1JZUCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0hBU0ggKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9STkcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX1NETU1DMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQkRNQTEgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0JETUExICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0ZNQUMgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0NPUkRJQyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0QyU1JBTTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0QyU1JBTTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0QyU1JBTTMgKCopCkBAIC0xMTM1LDE3ICsxMTc2LDIxIEBACiAgICogICAgICAgICBBSEIyRU5SICAgICAgUk5HRU4gICAgICAgICBMTF9BSEIyX0dSUDFfRGlzYWJsZUNsb2NrXG4KICAgKiAgICAgICAgIEFIQjJFTlIgICAgICBTRE1NQzJFTiAgICAgIExMX0FIQjJfR1JQMV9EaXNhYmxlQ2xvY2tcbgogICAqICAgICAgICAgQUhCMkVOUiAgICAgIEJETUExRU4gICAgICAgTExfQUhCMl9HUlAxX0Rpc2FibGVDbG9ja1xuICgqKQorICAqICAgICAgICAgQUhCMkVOUiAgICAgIEZNQUNFTiAgICAgICAgTExfQUhCMl9HUlAxX0Rpc2FibGVDbG9ja1xuCisgICogICAgICAgICBBSEIyRU5SICAgICAgQ09SRElDRU4gICAgICBMTF9BSEIyX0dSUDFfRGlzYWJsZUNsb2NrXG4KICAgKiAgICAgICAgIEFIQjJFTlIgICAgICBEMlNSQU0xRU4gICAgIExMX0FIQjJfR1JQMV9EaXNhYmxlQ2xvY2tcbgogICAqICAgICAgICAgQUhCMkVOUiAgICAgIEQyU1JBTTJFTiAgICAgTExfQUhCMl9HUlAxX0Rpc2FibGVDbG9ja1xuCiAgICogICAgICAgICBBSEIyRU5SICAgICAgRDJTUkFNM0VOICAgICBMTF9BSEIyX0dSUDFfRGlzYWJsZUNsb2NrICAgKCopCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfRENNSQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfSFNFTUVOICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfSFNFTSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0NSWVAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9IQVNIICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfUk5HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9TRE1NQzIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0JETUExICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CRE1BMSAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9GTUFDICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9DT1JESUMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0zICgqKQpAQCAtMTE2Nyw2ICsxMjEyLDggQEAKICAgKiAgICAgICAgIEFIQjJSU1RSICAgICBSTkdSU1QgICAgICAgIExMX0FIQjJfR1JQMV9Gb3JjZVJlc2V0XG4KICAgKiAgICAgICAgIEFIQjJSU1RSICAgICBTRE1NQzJSU1QgICAgIExMX0FIQjJfR1JQMV9Gb3JjZVJlc2V0XG4KICAgKiAgICAgICAgIEFIQjJSU1RSICAgICBCRE1BMVJTVCAgICAgIExMX0FIQjJfR1JQMV9Gb3JjZVJlc2V0ICAgKCopCisgICogICAgICAgICBBSEIyUlNUUiAgICAgRk1BQ1JTVCAgICAgICBMTF9BSEIyX0dSUDFfRm9yY2VSZXNldFxuCisgICogICAgICAgICBBSEIyUlNUUiAgICAgQ09SRElDUlNUICAgICBMTF9BSEIyX0dSUDFfRm9yY2VSZXNldCAKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EQ01JCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9IU0VNICgqKQpAQCAtMTE3NCw3ICsxMjIxLDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0hBU0ggKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9STkcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX1NETU1DMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQkRNQTEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CRE1BMSAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9GTUFDICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9DT1JESUMgKCopCiAgICoKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTExOTMsMTMgKzEyNDIsMTggQEAKICAgKiAgICAgICAgIEFIQjJSU1RSICAgICBSTkdSU1QgICAgICAgIExMX0FIQjJfR1JQMV9SZWxlYXNlUmVzZXRcbgogICAqICAgICAgICAgQUhCMlJTVFIgICAgIFNETU1DMlJTVCAgICAgTExfQUhCMl9HUlAxX1JlbGVhc2VSZXNldFxuCiAgICogICAgICAgICBBSEIyUlNUUiAgICAgQkRNQTFSU1QgICAgICBMTF9BSEIyX0dSUDFfUmVsZWFzZVJlc2V0ICAgKCopCisgICogICAgICAgICBBSEIyUlNUUiAgICAgRk1BQ1JTVCAgICAgICBMTF9BSEIyX0dSUDFfUmVsZWFzZVJlc2V0XG4KKyAgKiAgICAgICAgIEFIQjJSU1RSICAgICBDT1JESUNSU1QgICAgIExMX0FIQjJfR1JQMV9SZWxlYXNlUmVzZXQKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EQ01JCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9IU0VNICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQ1JZUCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0hBU0ggKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9STkcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX1NETU1DMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQkRNQTEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CRE1BMSAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9GTUFDICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9DT1JESUMgKCopCiAgICoKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTEyMTIsMjEgKzEyNjYsMjUgQEAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIEFIQjIgcGVyaXBoZXJhbHMgY2xvY2sgZHVyaW5nIExvdyBQb3dlciAoU2xlZXApIG1vZGUuCiAgICogQHJtdG9sbCBBSEIyTFBFTlIgICAgRENNSUxQRU4gICAgICBMTF9BSEIyX0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCi0gICogICAgICAgICBBSEIyTFBFTlIgICAgQ1JZUExQRU4gICAgICBMTF9BSEIyX0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuICgqKQotICAqICAgICAgICAgQUhCMkxQRU5SICAgIEhBU0hMUEVOICAgICAgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbiAoKikKKyAgKiAgICAgICAgIEFIQjJMUEVOUiAgICBDUllQTFBFTiAgICAgIExMX0FIQjJfR1JQMV9FbmFibGVDbG9ja1NsZWVwXG4gICgqKQorICAqICAgICAgICAgQUhCMkxQRU5SICAgIEhBU0hMUEVOICAgICAgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbiAgKCopCiAgICogICAgICAgICBBSEIyTFBFTlIgICAgUk5HTFBFTiAgICAgICBMTF9BSEIyX0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCiAgICogICAgICAgICBBSEIyTFBFTlIgICAgU0RNTUMyTFBFTiAgICBMTF9BSEIyX0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCiAgICogICAgICAgICBBSEIyTFBFTlIgICAgQkRNQTFMUEVOICAgICBMTF9BSEIyX0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuICgqKQorICAqICAgICAgICAgQUhCMkxQRU5SICAgIEZNQUNMUEVOICAgICAgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgorICAqICAgICAgICAgQUhCMkxQRU5SICAgIENPUkRJQ0xQRU4gICAgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQUhCMkxQRU5SICAgIEQyU1JBTTFMUEVOICAgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQUhCMkxQRU5SICAgIEQyU1JBTTJMUEVOICAgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgotICAqICAgICAgICAgQUhCMkxQRU5SICAgIEQyU1JBTTNMUEVOICAgTExfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXAgICAoKikKKyAgKiAgICAgICAgIEFIQjJMUEVOUiAgICBEMlNSQU0zTFBFTiAgIExMX0FIQjJfR1JQMV9FbmFibGVDbG9ja1NsZWVwICAgICgqKQogICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0RDTUkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0NSWVAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9IQVNIICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfUk5HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9TRE1NQzIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0JETUExICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CRE1BMSAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9GTUFDICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9DT1JESUMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0zICgqKQpAQCAtMTI2MCw3ICsxMzE4LDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0hBU0ggKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9STkcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX1NETU1DMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQkRNQTEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CRE1BMSAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9GTUFDICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9DT1JESUMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0zICgqKQpAQCAtMTI5MSw3ICsxMzUxLDcgQEAKICAgKiAgICAgICAgIEFIQjRFTlIgICAgICBHUElPRkVOICAgICAgIExMX0FIQjRfR1JQMV9FbmFibGVDbG9ja1xuCiAgICogICAgICAgICBBSEI0RU5SICAgICAgR1BJT0dFTiAgICAgICBMTF9BSEI0X0dSUDFfRW5hYmxlQ2xvY2tcbgogICAqICAgICAgICAgQUhCNEVOUiAgICAgIEdQSU9IRU4gICAgICAgTExfQUhCNF9HUlAxX0VuYWJsZUNsb2NrXG4KLSAgKiAgICAgICAgIEFIQjRFTlIgICAgICBHUElPSUVOICAgICAgIExMX0FIQjRfR1JQMV9FbmFibGVDbG9ja1xuCisgICogICAgICAgICBBSEI0RU5SICAgICAgR1BJT0lFTiAgICAgICBMTF9BSEI0X0dSUDFfRW5hYmxlQ2xvY2tcbiAoKikKICAgKiAgICAgICAgIEFIQjRFTlIgICAgICBHUElPSkVOICAgICAgIExMX0FIQjRfR1JQMV9FbmFibGVDbG9ja1xuCiAgICogICAgICAgICBBSEI0RU5SICAgICAgR1BJT0tFTiAgICAgICBMTF9BSEI0X0dSUDFfRW5hYmxlQ2xvY2tcbgogICAqICAgICAgICAgQUhCNEVOUiAgICAgIENSQ0VOICAgICAgICAgTExfQUhCNF9HUlAxX0VuYWJsZUNsb2NrXG4gKCopCkBAIC0xMzA5LDcgKzEzNjksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAgKCopCkBAIC0xMzQxLDcgKzE0MDEsNyBAQAogICAqICAgICAgICAgQUhCNEVOUiAgICAgIEdQSU9GRU4gICAgICAgTExfQUhCNF9HUlAxX0lzRW5hYmxlZENsb2NrXG4KICAgKiAgICAgICAgIEFIQjRFTlIgICAgICBHUElPR0VOICAgICAgIExMX0FIQjRfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuCiAgICogICAgICAgICBBSEI0RU5SICAgICAgR1BJT0hFTiAgICAgICBMTF9BSEI0X0dSUDFfSXNFbmFibGVkQ2xvY2tcbgotICAqICAgICAgICAgQUhCNEVOUiAgICAgIEdQSU9JRU4gICAgICAgTExfQUhCNF9HUlAxX0lzRW5hYmxlZENsb2NrXG4KKyAgKiAgICAgICAgIEFIQjRFTlIgICAgICBHUElPSUVOICAgICAgIExMX0FIQjRfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuICgqKQogICAqICAgICAgICAgQUhCNEVOUiAgICAgIEdQSU9KRU4gICAgICAgTExfQUhCNF9HUlAxX0lzRW5hYmxlZENsb2NrXG4KICAgKiAgICAgICAgIEFIQjRFTlIgICAgICBHUElPS0VOICAgICAgIExMX0FIQjRfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuCiAgICogICAgICAgICBBSEI0RU5SICAgICAgQ1JDRU4gICAgICAgICBMTF9BSEI0X0dSUDFfSXNFbmFibGVkQ2xvY2tcbiAoKikKQEAgLTEzNTksMTMgKzE0MTksMTMgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9GCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPRwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0gKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0sKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9DUkMgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JETUEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0FEQzMgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9IU0VNICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfSFNFTSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9CS1BSQU0KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX1NSQU00CiAgICoKQEAgLTEzODcsNyArMTQ0Nyw3IEBACiAgICogICAgICAgICBBSEI0RU5SICAgICAgR1BJT0ZFTiAgICAgICBMTF9BSEI0X0dSUDFfRGlzYWJsZUNsb2NrXG4KICAgKiAgICAgICAgIEFIQjRFTlIgICAgICBHUElPR0VOICAgICAgIExMX0FIQjRfR1JQMV9EaXNhYmxlQ2xvY2tcbgogICAqICAgICAgICAgQUhCNEVOUiAgICAgIEdQSU9IRU4gICAgICAgTExfQUhCNF9HUlAxX0Rpc2FibGVDbG9ja1xuCi0gICogICAgICAgICBBSEI0RU5SICAgICAgR1BJT0lFTiAgICAgICBMTF9BSEI0X0dSUDFfRGlzYWJsZUNsb2NrXG4KKyAgKiAgICAgICAgIEFIQjRFTlIgICAgICBHUElPSUVOICAgICAgIExMX0FIQjRfR1JQMV9EaXNhYmxlQ2xvY2tcbiAgKCopCiAgICogICAgICAgICBBSEI0RU5SICAgICAgR1BJT0pFTiAgICAgICBMTF9BSEI0X0dSUDFfRGlzYWJsZUNsb2NrXG4KICAgKiAgICAgICAgIEFIQjRFTlIgICAgICBHUElPS0VOICAgICAgIExMX0FIQjRfR1JQMV9EaXNhYmxlQ2xvY2tcbgogICAqICAgICAgICAgQUhCNEVOUiAgICAgIENSQ0VOICAgICAgICAgTExfQUhCNF9HUlAxX0Rpc2FibGVDbG9ja1xuICgqKQpAQCAtMTQwNSwxMyArMTQ2NSwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0hTRU0gKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9IU0VNICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JLUFJBTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfU1JBTTQKICAgKgpAQCAtMTQzMyw3ICsxNDkzLDcgQEAKICAgKiAgICAgICAgIEFIQjRSU1RSICAgICBHUElPRlJTVCAgICAgIExMX0FIQjRfR1JQMV9Gb3JjZVJlc2V0XG4KICAgKiAgICAgICAgIEFIQjRSU1RSICAgICBHUElPR1JTVCAgICAgIExMX0FIQjRfR1JQMV9Gb3JjZVJlc2V0XG4KICAgKiAgICAgICAgIEFIQjRSU1RSICAgICBHUElPSFJTVCAgICAgIExMX0FIQjRfR1JQMV9Gb3JjZVJlc2V0XG4KLSAgKiAgICAgICAgIEFIQjRSU1RSICAgICBHUElPSVJTVCAgICAgIExMX0FIQjRfR1JQMV9Gb3JjZVJlc2V0XG4KKyAgKiAgICAgICAgIEFIQjRSU1RSICAgICBHUElPSVJTVCAgICAgIExMX0FIQjRfR1JQMV9Gb3JjZVJlc2V0XG4gKCopCiAgICogICAgICAgICBBSEI0UlNUUiAgICAgR1BJT0pSU1QgICAgICBMTF9BSEI0X0dSUDFfRm9yY2VSZXNldFxuCiAgICogICAgICAgICBBSEI0UlNUUiAgICAgR1BJT0tSU1QgICAgICBMTF9BSEI0X0dSUDFfRm9yY2VSZXNldFxuCiAgICogICAgICAgICBBSEI0UlNUUiAgICAgQ1JDUlNUICAgICAgICBMTF9BSEI0X0dSUDFfRm9yY2VSZXNldFxuICgqKQpAQCAtMTQ0OSwxMyArMTUwOSwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0hTRU0gKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9IU0VNICAoKikKICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQpAQCAtMTQ3NSw3ICsxNTM1LDcgQEAKICAgKiAgICAgICAgIEFIQjRSU1RSICAgICBHUElPRlJTVCAgICAgIExMX0FIQjRfR1JQMV9SZWxlYXNlUmVzZXRcbgogICAqICAgICAgICAgQUhCNFJTVFIgICAgIEdQSU9HUlNUICAgICAgTExfQUhCNF9HUlAxX1JlbGVhc2VSZXNldFxuCiAgICogICAgICAgICBBSEI0UlNUUiAgICAgR1BJT0hSU1QgICAgICBMTF9BSEI0X0dSUDFfUmVsZWFzZVJlc2V0XG4KLSAgKiAgICAgICAgIEFIQjRSU1RSICAgICBHUElPSVJTVCAgICAgIExMX0FIQjRfR1JQMV9SZWxlYXNlUmVzZXRcbgorICAqICAgICAgICAgQUhCNFJTVFIgICAgIEdQSU9JUlNUICAgICAgTExfQUhCNF9HUlAxX1JlbGVhc2VSZXNldFxuICgqKQogICAqICAgICAgICAgQUhCNFJTVFIgICAgIEdQSU9KUlNUICAgICAgTExfQUhCNF9HUlAxX1JlbGVhc2VSZXNldFxuCiAgICogICAgICAgICBBSEI0UlNUUiAgICAgR1BJT0tSU1QgICAgICBMTF9BSEI0X0dSUDFfUmVsZWFzZVJlc2V0XG4KICAgKiAgICAgICAgIEFIQjRSU1RSICAgICBDUkNSU1QgICAgICAgIExMX0FIQjRfR1JQMV9SZWxlYXNlUmVzZXRcbiAoKikKQEAgLTE0OTEsMTMgKzE1NTEsMTMgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9GCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPRwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0gKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0sKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9DUkMgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JETUEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0FEQzMgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9IU0VNICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfSFNFTSAgKCopCiAgICoKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKQEAgLTE1MTcsNyArMTU3Nyw3IEBACiAgICogICAgICAgICBBSEI0TFBFTlIgICAgR1BJT0ZMUEVOICAgICBMTF9BSEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCiAgICogICAgICAgICBBSEI0TFBFTlIgICAgR1BJT0dMUEVOICAgICBMTF9BSEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCiAgICogICAgICAgICBBSEI0TFBFTlIgICAgR1BJT0hMUEVOICAgICBMTF9BSEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCi0gICogICAgICAgICBBSEI0TFBFTlIgICAgR1BJT0lMUEVOICAgICBMTF9BSEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCisgICogICAgICAgICBBSEI0TFBFTlIgICAgR1BJT0lMUEVOICAgICBMTF9BSEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuICgqKQogICAqICAgICAgICAgQUhCNExQRU5SICAgIEdQSU9KTFBFTiAgICAgTExfQUhCNF9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQUhCNExQRU5SICAgIEdQSU9LTFBFTiAgICAgTExfQUhCNF9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQUhCNExQRU5SICAgIENSQ0xQRU4gICAgICAgTExfQUhCNF9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbiAoKikKQEAgLTE1MzQsMTAgKzE1OTQsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9GCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPRwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0gKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0sKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9DUkMgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JETUEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0FEQzMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9CS1BSQU0KQEAgLTE1NjMsNyArMTYyMyw3IEBACiAgICogICAgICAgICBBSEI0TFBFTlIgICAgR1BJT0ZMUEVOICAgICBMTF9BSEI0X0dSUDFfRGlzYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQUhCNExQRU5SICAgIEdQSU9HTFBFTiAgICAgTExfQUhCNF9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwXG4KICAgKiAgICAgICAgIEFIQjRMUEVOUiAgICBHUElPSExQRU4gICAgIExMX0FIQjRfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcFxuCi0gICogICAgICAgICBBSEI0TFBFTlIgICAgR1BJT0lMUEVOICAgICBMTF9BSEI0X0dSUDFfRGlzYWJsZUNsb2NrU2xlZXBcbgorICAqICAgICAgICAgQUhCNExQRU5SICAgIEdQSU9JTFBFTiAgICAgTExfQUhCNF9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwXG4gKCopCiAgICogICAgICAgICBBSEI0TFBFTlIgICAgR1BJT0pMUEVOICAgICBMTF9BSEI0X0dSUDFfRGlzYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQUhCNExQRU5SICAgIEdQSU9LTFBFTiAgICAgTExfQUhCNF9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwXG4KICAgKiAgICAgICAgIEFIQjRMUEVOUiAgICBDUkNMUEVOICAgICAgIExMX0FIQjRfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcFxuICgqKQpAQCAtMTU4MCwxMCArMTY0MCwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JLUFJBTQpAQCAtMTc2NCw2ICsxODI0LDcgQEAKICAgKiAgICAgICAgIEFQQjFMRU5SICAgICBJMkMxRU4gICAgICAgIExMX0FQQjFfR1JQMV9FbmFibGVDbG9ja1xuCiAgICogICAgICAgICBBUEIxTEVOUiAgICAgSTJDMkVOICAgICAgICBMTF9BUEIxX0dSUDFfRW5hYmxlQ2xvY2tcbgogICAqICAgICAgICAgQVBCMUxFTlIgICAgIEkyQzNFTiAgICAgICAgTExfQVBCMV9HUlAxX0VuYWJsZUNsb2NrXG4KKyAgKiAgICAgICAgIEFQQjFMRU5SICAgICBJMkM1RU4gICAgICAgIExMX0FQQjFfR1JQMV9FbmFibGVDbG9ja1xuICgqKQogICAqICAgICAgICAgQVBCMUxFTlIgICAgIENFQ0VOICAgICAgICAgTExfQVBCMV9HUlAxX0VuYWJsZUNsb2NrXG4KICAgKiAgICAgICAgIEFQQjFMRU5SICAgICBEQUMxMkVOICAgICAgIExMX0FQQjFfR1JQMV9FbmFibGVDbG9ja1xuCiAgICogICAgICAgICBBUEIxTEVOUiAgICAgVUFSVDdFTiAgICAgICBMTF9BUEIxX0dSUDFfRW5hYmxlQ2xvY2tcbgpAQCAtMTc5MCw2ICsxODUxLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzUgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9DRUMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0RBQzEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9VQVJUNwpAQCAtMTgzMCw2ICsxODkyLDcgQEAKICAgKiAgICAgICAgIEFQQjFMRU5SICAgICBJMkMxRU4gICAgICAgIExMX0FQQjFfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuCiAgICogICAgICAgICBBUEIxTEVOUiAgICAgSTJDMkVOICAgICAgICBMTF9BUEIxX0dSUDFfSXNFbmFibGVkQ2xvY2tcbgogICAqICAgICAgICAgQVBCMUxFTlIgICAgIEkyQzNFTiAgICAgICAgTExfQVBCMV9HUlAxX0lzRW5hYmxlZENsb2NrXG4KKyAgKiAgICAgICAgIEFQQjFMRU5SICAgICBJMkM1RU4gICAgICAgIExMX0FQQjFfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuICgqKQogICAqICAgICAgICAgQVBCMUxFTlIgICAgIENFQ0VOICAgICAgICAgTExfQVBCMV9HUlAxX0lzRW5hYmxlZENsb2NrXG4KICAgKiAgICAgICAgIEFQQjFMRU5SICAgICBEQUMxMkVOICAgICAgIExMX0FQQjFfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuCiAgICogICAgICAgICBBUEIxTEVOUiAgICAgVUFSVDdFTiAgICAgICBMTF9BUEIxX0dSUDFfSXNFbmFibGVkQ2xvY2tcbgpAQCAtMTg1Niw2ICsxOTE5LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzUgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9DRUMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0RBQzEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9VQVJUNwpAQCAtMTg5Miw2ICsxOTU2LDcgQEAKICAgKiAgICAgICAgIEFQQjFMRU5SICAgICBJMkMxRU4gICAgICAgIExMX0FQQjFfR1JQMV9EaXNhYmxlQ2xvY2tcbgogICAqICAgICAgICAgQVBCMUxFTlIgICAgIEkyQzJFTiAgICAgICAgTExfQVBCMV9HUlAxX0Rpc2FibGVDbG9ja1xuCiAgICogICAgICAgICBBUEIxTEVOUiAgICAgSTJDM0VOICAgICAgICBMTF9BUEIxX0dSUDFfRGlzYWJsZUNsb2NrXG4KKyAgKiAgICAgICAgIEFQQjFMRU5SICAgICBJMkM1RU4gICAgICAgIExMX0FQQjFfR1JQMV9EaXNhYmxlQ2xvY2tcbiAoKikKICAgKiAgICAgICAgIEFQQjFMRU5SICAgICBDRUNFTiAgICAgICAgIExMX0FQQjFfR1JQMV9EaXNhYmxlQ2xvY2tcbgogICAqICAgICAgICAgQVBCMUxFTlIgICAgIERBQzEyRU4gICAgICAgTExfQVBCMV9HUlAxX0Rpc2FibGVDbG9ja1xuCiAgICogICAgICAgICBBUEIxTEVOUiAgICAgVUFSVDdFTiAgICAgICBMTF9BUEIxX0dSUDFfRGlzYWJsZUNsb2NrXG4KQEAgLTE5MTgsNiArMTk4Myw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMzCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkM1ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfQ0VDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9EQUMxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfVUFSVDcKQEAgLTE5NTMsNiArMjAxOSw3IEBACiAgICogICAgICAgICBBUEIxTFJTVFIgICAgSTJDMVJTVCAgICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldFxuCiAgICogICAgICAgICBBUEIxTFJTVFIgICAgSTJDMlJTVCAgICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldFxuCiAgICogICAgICAgICBBUEIxTFJTVFIgICAgSTJDM1JTVCAgICAgICBMTF9BUEIxX0dSUDFfRm9yY2VSZXNldFxuCisgICogICAgICAgICBBUEIxTFJTVFIgICAgSTJDNVJTVCAgICAgICBMTF9BUEIxX0dSUDVfRm9yY2VSZXNldFxuICgqKQogICAqICAgICAgICAgQVBCMUxSU1RSICAgIENFQ1JTVCAgICAgICAgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXRcbgogICAqICAgICAgICAgQVBCMUxSU1RSICAgIERBQzEyUlNUICAgICAgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXRcbgogICAqICAgICAgICAgQVBCMUxSU1RSICAgIFVBUlQ3UlNUICAgICAgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXRcbgpAQCAtMTk3OCwxMCArMjA0NSwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfSTJDMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfSTJDMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfSTJDMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfSTJDNSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0NFQwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfREFDMTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1VBUlQ3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9VQVJUOAorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXQodWludDMyX3QgUGVyaXBocykKQEAgLTIwMTEsNiArMjA4MSw3IEBACiAgICogICAgICAgICBBUEIxTFJTVFIgICAgSTJDMVJTVCAgICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0XG4KICAgKiAgICAgICAgIEFQQjFMUlNUUiAgICBJMkMyUlNUICAgICAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXRcbgogICAqICAgICAgICAgQVBCMUxSU1RSICAgIEkyQzNSU1QgICAgICAgTExfQVBCMV9HUlAxX1JlbGVhc2VSZXNldFxuCisgICogICAgICAgICBBUEIxTFJTVFIgICAgSTJDNVJTVCAgICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0XG4gKCopCiAgICogICAgICAgICBBUEIxTFJTVFIgICAgQ0VDUlNUICAgICAgICBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0XG4KICAgKiAgICAgICAgIEFQQjFMUlNUUiAgICBEQUMxMlJTVCAgICAgIExMX0FQQjFfR1JQMV9SZWxlYXNlUmVzZXRcbgogICAqICAgICAgICAgQVBCMUxSU1RSICAgIFVBUlQ3UlNUICAgICAgTExfQVBCMV9HUlAxX1JlbGVhc2VSZXNldFxuCkBAIC0yMDM2LDEwICsyMTA3LDEzIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMzCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkM1ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfQ0VDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9EQUMxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfVUFSVDcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1VBUlQ4CisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BUEIxX0dSUDFfUmVsZWFzZVJlc2V0KHVpbnQzMl90IFBlcmlwaHMpCkBAIC0yMDcwLDYgKzIxNDQsNyBAQAogICAqICAgICAgICAgQVBCMUxMUEVOUiAgIEkyQzFMUEVOICAgICAgTExfQVBCMV9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQVBCMUxMUEVOUiAgIEkyQzJMUEVOICAgICAgTExfQVBCMV9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQVBCMUxMUEVOUiAgIEkyQzNMUEVOICAgICAgTExfQVBCMV9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgorICAqICAgICAgICAgQVBCMUxMUEVOUiAgIEkyQzVMUEVOICAgICAgTExfQVBCMV9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbiAoKikKICAgKiAgICAgICAgIEFQQjFMTFBFTlIgICBDRUNMUEVOICAgICAgIExMX0FQQjFfR1JQMV9FbmFibGVDbG9ja1NsZWVwXG4KICAgKiAgICAgICAgIEFQQjFMTFBFTlIgICBEQUMxMkxQRU4gICAgIExMX0FQQjFfR1JQMV9FbmFibGVDbG9ja1NsZWVwXG4KICAgKiAgICAgICAgIEFQQjFMTFBFTlIgICBVQVJUN0xQRU4gICAgIExMX0FQQjFfR1JQMV9FbmFibGVDbG9ja1NsZWVwXG4KQEAgLTIwOTYsNiArMjE3MSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMzCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkM1ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfQ0VDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9EQUMxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfVUFSVDcKQEAgLTIxMzYsNiArMjIxMiw3IEBACiAgICogICAgICAgICBBUEIxTExQRU5SICAgSTJDMUxQRU4gICAgICBMTF9BUEIxX0dSUDFfRGlzYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQVBCMUxMUEVOUiAgIEkyQzJMUEVOICAgICAgTExfQVBCMV9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwXG4KICAgKiAgICAgICAgIEFQQjFMTFBFTlIgICBJMkMzTFBFTiAgICAgIExMX0FQQjFfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcFxuCisgICogICAgICAgICBBUEIxTExQRU5SICAgSTJDNUxQRU4gICAgICBMTF9BUEIxX0dSUDFfRGlzYWJsZUNsb2NrU2xlZXBcbiAoKikKICAgKiAgICAgICAgIEFQQjFMTFBFTlIgICBDRUNMUEVOICAgICAgIExMX0FQQjFfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcFxuCiAgICogICAgICAgICBBUEIxTExQRU5SICAgREFDMTJMUEVOICAgICBMTF9BUEIxX0dSUDFfRGlzYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQVBCMUxMUEVOUiAgIFVBUlQ3TFBFTiAgICAgTExfQVBCMV9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwXG4KQEAgLTIxNjIsNiArMjIzOSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkMzCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9JMkM1ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfQ0VDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9EQUMxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfVUFSVDcKQEAgLTIxODgsNiArMjI2NiwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfT1BBTVAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX01ESU9TCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9GRENBTgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjMgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yNCAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FQQjFfR1JQMl9FbmFibGVDbG9jayh1aW50MzJfdCBQZXJpcGhzKQpAQCAtMjIxMiw2ICsyMjk0LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9PUEFNUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfTURJT1MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX0ZEQ0FOCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yMyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTI0ICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCB1aW50MzJfdAogKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9BUEIxX0dSUDJfSXNFbmFibGVkQ2xvY2sodWludDMyX3QgUGVyaXBocykKQEAgLTIyMzIsNiArMjMxOCwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfT1BBTVAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX01ESU9TCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9GRENBTgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjMgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yNCAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FQQjFfR1JQMl9EaXNhYmxlQ2xvY2sodWludDMyX3QgUGVyaXBocykKQEAgLTIyNTIsNiArMjM0MiwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfT1BBTVAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX01ESU9TCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9GRENBTgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjMgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yNCAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FQQjFfR1JQMl9Gb3JjZVJlc2V0KHVpbnQzMl90IFBlcmlwaHMpCkBAIC0yMjcyLDYgKzIzNjYsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX09QQU1QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9NRElPUwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfRkRDQU4KKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTIzICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjQgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BUEIxX0dSUDJfUmVsZWFzZVJlc2V0KHVpbnQzMl90IFBlcmlwaHMpCkBAIC0yMjkyLDYgKzIzOTAsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX09QQU1QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9NRElPUwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfRkRDQU4KKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTIzICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjQgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9BUEIxX0dSUDJfRW5hYmxlQ2xvY2tTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtMjMxNiw2ICsyNDE4LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9PUEFNUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfTURJT1MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX0ZEQ0FOCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yMyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTI0ICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMV9HUlAyX0Rpc2FibGVDbG9ja1NsZWVwKHVpbnQzMl90IFBlcmlwaHMpCkBAIC0yMzY0LDcgKzI0NzAsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NQSTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0RGU0RNMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfSFJUSU0gKCopCkBAIC0yNDE0LDggKzI1MjAsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NQSTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9IUlRJTSAoKikKICAgKgpAQCAtMjQ2MCw4ICsyNTY2LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TUEk1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0RGU0RNMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfSFJUSU0gKCopCiAgICoKQEAgLTI1MDYsMTAgKzI2MTIsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TUEk1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9ERlNETTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0hSVElNICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0hSVElNICgqKQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCkBAIC0yNTUyLDEwICsyNjU4LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9USU0xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU1BJNQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9IUlRJTSAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9IUlRJTSAoKikKICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQpAQCAtMjU5OCwxMCArMjcwNCwxMiBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NQSTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9IUlRJTSAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0FQQjJfR1JQMV9FbmFibGVDbG9ja1NsZWVwKHVpbnQzMl90IFBlcmlwaHMpCkBAIC0yNjQ2LDEwICsyNzU0LDEyIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9USU0xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU1BJNQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9ERlNETTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0hSVElNICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQVBCMl9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwKHVpbnQzMl90IFBlcmlwaHMpCkBAIC0yNjk1LDcgKzI4MDUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfQ09NUDEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9WUkVGCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9SVENBUEIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9EVFMgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9ERlNETTIgKCopCiAgICoKQEAgLTI3NDEsNyArMjg1MSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9DT01QMTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1ZSRUYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1JUQ0FQQgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU0FJNCAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU0FJNCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0RUUyAgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0RGU0RNMiAoKikKICAgKgpAQCAtMjc4Myw3ICsyODkzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0NPTVAxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfVlJFRgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfUlRDQVBCCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfRFRTICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfREZTRE0yICgqKQogICAqCkBAIC0yODEwLDcgKzI5MjAsNyBAQAogICAqICAgICAgICAgQVBCNFJTVFIgICAgIFZSRUZSU1QgICAgICAgTExfQVBCNF9HUlAxX0ZvcmNlUmVzZXRcbgogICAqICAgICAgICAgQVBCNFJTVFIgICAgIFNBSTRSU1QgICAgICAgTExfQVBCNF9HUlAxX0ZvcmNlUmVzZXRcbiAgKCopCiAgICogICAgICAgICBBUEI0UlNUUiAgICAgRFRTUlNUICAgICAgICBMTF9BUEI0X0dSUDFfRm9yY2VSZXNldFxuICAoKikKLSAgKiAgICAgICAgIEFQQjRSU1RSICAgICAgREZTRE0yUlNUICAgIExMX0FQQjRfR1JQMV9Gb3JjZVJlc2V0ICAgICgqKQorICAqICAgICAgICAgQVBCNFJTVFIgICAgIERGU0RNMlJTVCAgICAgTExfQVBCNF9HUlAxX0ZvcmNlUmVzZXQgICAgKCopCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU1lTQ0ZHCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFVBUlQxCkBAIC0yODIzLDcgKzI5MzMsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfREFDMiAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfQ09NUDEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9WUkVGCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfRFRTICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfREZTRE0yICgqKQogICAqCkBAIC0yODYzLDcgKzI5NzMsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfREFDMiAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfQ09NUDEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9WUkVGCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfRFRTICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfREZTRE0yICgqKQogICAqCkBAIC0yOTA1LDcgKzMwMTUsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfQ09NUDEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9WUkVGCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9SVENBUEIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9EVFMgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9ERlNETTIgKCopCiAgICoKQEAgLTI5NTEsNyArMzA2MSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9DT01QMTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1ZSRUYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1JUQ0FQQgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU0FJNCAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU0FJNCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0RUUyAgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0RGU0RNMiAoKikKICAgKgpAQCAtMjk2Nyw3ICszMDc3LDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIEJVU19MTF9FRl9DTEtBTQorLyoqIEBkZWZncm91cCBCVVNfTExfRUZfQ0xLQU0gQ0xLQU0KICAgKiBAewogICAqLwogCkBAIC0yOTk0LDYgKzMxMDQsNyBAQAogICAqICAgICAgICAgRDNBTVIgLyBTUkRBTVIgICAgICAgICBTUkFNNCAgICAgICAgIExMX0NMS0FNX0VuYWJsZQogICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfQkRNQQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9HUElPICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ0xLQU1fUEVSSVBIX0xQVUFSVDEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfU1BJNgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9JMkM0CkBAIC0zMDA1LDkgKzMxMTYsOSBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9DT01QMTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfVlJFRgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9SVEMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfQ1JDCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQ0xLQU1fUEVSSVBIX1NBSTQgICAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfQURDMyAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9DUkMgKCopIAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9TQUk0ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9BREMzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9EVFMgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ0xLQU1fUEVSSVBIX0RGU0RNMiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfQktQUkFNCkBAIC0zMDU1LDYgKzMxNjYsNyBAQAogICAqICAgICAgICAgRDNBTVIgLyBTUkRBTVIgICAgICAgIFNSQU00ICAgICAgICAgTExfQ0xLQU1fRGlzYWJsZQogICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfQkRNQQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9HUElPICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ0xLQU1fUEVSSVBIX0xQVUFSVDEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfU1BJNgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9JMkM0CkBAIC0zMDY2LDEwICszMTc4LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ0xLQU1fUEVSSVBIX0NPTVAxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9WUkVGCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ0xLQU1fUEVSSVBIX1JUQwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9DUkMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfQ1JDICgqKSAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfU0FJNCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfQURDMyAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfRFRTICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfRFRTICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9ERlNETTIgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NMS0FNX1BFUklQSF9CS1BSQU0KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DTEtBTV9QRVJJUEhfU1JBTTQKQEAgLTMwODYsMTEgKzMxOTgsMTcgQEAKICNlbmRpZiAvKiBSQ0NfRDNBTVJfQkRNQUFNRU4gKi8KIH0KIAotI2lmIGRlZmluZWQoUkNDX0NLR0FFTlJfQVhJQ0tHKQogLyoqCiAgICogQH0KICAgKi8KIAorLyoqIEBkZWZncm91cCBCVVNfTExfRUZfQ0tHQSBDS0dBCisgICogQHsKKyAgKi8KKworI2lmIGRlZmluZWQoUkNDX0NLR0FFTlJfQVhJQ0tHKQorCisKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIGNsb2NrIGdhdGluZyBmb3IgQVhJIGJ1cyBwZXJpcGhlcmFscy4KICAgKiBAcm10b2xsCkBAIC0zMTA1LDE1ICszMjIzLDEwIEBACiAgIHRtcHJlZyA9IFJFQURfQklUKFJDQy0+Q0tHQUVOUiwgUGVyaXBocyk7CiAgICh2b2lkKXRtcHJlZzsKIH0KLS8qKgotICAqIEB9Ci0gICovCisKICNlbmRpZiAvKiBSQ0NfQ0tHQUVOUl9BWElDS0cgKi8KIAogI2lmIGRlZmluZWQoUkNDX0NLR0FFTlJfQVhJQ0tHKQotLyoqCi0gICogQH0KLSAgKi8KIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlICBjbG9jayBnYXRpbmcgZm9yIEFYSSBidXMgcGVyaXBoZXJhbHMuCkBAIC0zMTI1LDE0ICszMjM4LDE1IEBACiB7CiAgIENMRUFSX0JJVChSQ0MtPkNLR0FFTlIsIFBlcmlwaHMpOwogfQorCisjZW5kaWYgLyogUkNDX0NLR0FFTlJfQVhJQ0tHICovCisKIC8qKgogICAqIEB9CiAgICovCi0jZW5kaWYgLyogUkNDX0NLR0FFTlJfQVhJQ0tHICovCi0KIAogI2lmIGRlZmluZWQoRFVBTF9DT1JFKQotLyoqIEBkZWZncm91cCBCVVNfTExfRUZfQUhCMyBBSEIzCisvKiogQGFkZHRvZ3JvdXAgQlVTX0xMX0VGX0FIQjMgQUhCMwogICAqIEB7CiAgICovCiAKQEAgLTMxNTgsNyArMzI3Miw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9RU1BJICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTEgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkyICAgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9JT01OR1IgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT0NUT1NQSU0gICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzIgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9HRlhNTVUgICgqKQpAQCAtMzE5OCw3ICszMzEyLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PU1BJMSAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTIgICAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0lPTU5HUiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PQ1RPU1BJTSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0dGWE1NVSAgKCopCkBAIC0zMjI5LDEyICszMzQzLDEyIEBACiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfTURNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRE1BMkQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0pQR0RFQworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfSlBHREVDICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0ZNQwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfUVNQSSAgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PU1BJMiAgICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfSU9NTkdSICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09DVE9TUElNICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzEgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMyICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfR0ZYTU1VICAoKikKQEAgLTMyNjksMTUgKzMzODMsMTUgQEAKICAgKiAgICAgICAgIEFIQjNMUEVOUiAgICBBWElTUkFNTFBFTiAgIExMX0MxX0FIQjNfR1JQMV9FbmFibGVDbG9ja1NsZWVwCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRE1BMkQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0pQR0RFQworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfSlBHREVDICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkgICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTEgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PU1BJMiAgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09DVE9TUElNICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMSAgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMyICAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0dGWE1NVSAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzIgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9HRlhNTVUgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfU0RNTUMxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTEFTSAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRFRDTTEKQEAgLTMzMTgsMTUgKzM0MzIsMTUgQEAKICAgKiAgICAgICAgIEFIQjNMUEVOUiAgICBBWElTUkFNTFBFTiAgIExMX0MxX0FIQjNfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcAogICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RNQTJECi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9KUEdERUMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0pQR0RFQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRk1DCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9RU1BJICAgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09TUEkxICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1NQSTIgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PQ1RPU1BJTSAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzEgICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfT1RGREVDMiAgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9HRlhNTVUgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX09URkRFQzEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9PVEZERUMyICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfR0ZYTU1VICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1NETU1DMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRkxBU0gKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RUQ00xCkBAIC0zMzQ2LDcgKzM0NjAsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgQlVTX0xMX0VGX0FIQjEgQUhCMQorLyoqIEBhZGR0b2dyb3VwIEJVU19MTF9FRl9BSEIxIEFIQjEKICAgKiBAewogICAqLwogCkBAIC0zMzY4LDggKzM0ODIsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRE1BMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRE1BMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQURDMTIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0NSQyAgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9BUlQgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQ1JDICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMU1BQyAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxVFggICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFSWCAgICgqKQpAQCAtMzQwOCw4ICszNTIyLDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0RNQTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0RNQTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0FEQzEyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9DUkMgICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0NSQyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0FSVCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFNQUMgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMVRYICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxUlggICAoKikKQEAgLTM0NDQsOCArMzU1OCw4IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9ETUExCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9ETUEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9BREMxMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQ1JDICAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0FSVCAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9DUkMgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9BUlQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxTUFDICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFUWCAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMVJYICAgKCopCkBAIC0zNDgwLDggKzM1OTQsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRE1BMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRE1BMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQURDMTIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0NSQyAgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9BUlQgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQ1JDICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMU1BQyAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxVFggICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFSWCAgICgqKQpAQCAtMzUyMCw4ICszNjM0LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0RNQTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0RNQTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0FEQzEyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9DUkMgICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0NSQyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0FSVCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFNQUMgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMVRYICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxUlggICAoKikKQEAgLTM1NDIsNyArMzY1Niw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBCVVNfTExfRUZfQUhCMiBBSEIyCisvKiogQGFkZHRvZ3JvdXAgQlVTX0xMX0VGX0FIQjIgQUhCMgogICAqIEB7CiAgICovCiAKQEAgLTM1NjQsNyArMzY3OCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9DUllQICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfSEFTSCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX1JORwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQkRNQTEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CRE1BMSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9TRE1NQzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0QyU1JBTTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0QyU1JBTTIKQEAgLTM2MDAsNyArMzcxNCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9DUllQICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfSEFTSCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX1JORwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQkRNQTEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CRE1BMSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9TRE1NQzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0QyU1JBTTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0QyU1JBTTIKQEAgLTM2MzIsNyArMzc0Niw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9DUllQICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfSEFTSCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX1JORwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQkRNQTEgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CRE1BMSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9TRE1NQzIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0QyU1JBTTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0QyU1JBTTIKQEAgLTM2NTMsNyArMzc2Nyw3IEBACiAgICogICAgICAgICBBSEIyTFBFTlIgICAgSEFTSExQRU4gICAgICBMTF9DMV9BSEIyX0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuICgqKQogICAqICAgICAgICAgQUhCMkxQRU5SICAgIFJOR0xQRU4gICAgICAgTExfQzFfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQUhCMkxQRU5SICAgIFNETU1DMkxQRU4gICAgTExfQzFfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgotICAqICAgICAgICAgQUhCMkxQRU5SICAgIFNETU1DMkxQRU4gICAgTExfQzFfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgorICAqICAgICAgICAgQUhCMkxQRU5SICAgIEQyU1JBTTFMUEVOICAgTExfQzFfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQUhCMkxQRU5SICAgIEJEQU0xTFBFTiAgICAgTExfQzFfQUhCMl9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbiAoKikKICAgKiAgICAgICAgIEFIQjJMUEVOUiAgICBEMlNSQU0yTFBFTiAgIExMX0MxX0FIQjJfR1JQMV9FbmFibGVDbG9ja1NsZWVwXG4KICAgKiAgICAgICAgIEFIQjJMUEVOUiAgICBEMlNSQU0zTFBFTiAgIExMX0MxX0FIQjJfR1JQMV9FbmFibGVDbG9ja1NsZWVwICAgKCopCkBAIC0zNjYzLDcgKzM3NzcsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfSEFTSCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX1JORwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfU0RNTUMyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9CREFNMSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0JETUExICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfRDJTUkFNMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfRDJTUkFNMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfRDJTUkFNMyAoKikKQEAgLTM2OTcsNyArMzgxMSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9IQVNIICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfUk5HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9TRE1NQzIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIyX0dSUDFfUEVSSVBIX0JEQU0xICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfQkRNQTEgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0zICgqKQpAQCAtMzcxNCw3ICszODI4LDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIEJVU19MTF9FRl9BSEI0IEFIQjQKKy8qKiBAYWRkdG9ncm91cCBCVVNfTExfRUZfQUhCNCBBSEI0CiAgICogQHsKICAgKi8KIApAQCAtMzc0NiwxMyArMzg2MCwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0hTRU0gKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9IU0VNICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JLUFJBTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfU1JBTTQKICAgKgpAQCAtMzc5NiwxMyArMzkxMCwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0hTRU0gKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9IU0VNICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JLUFJBTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfU1JBTTQKICAgKgpAQCAtMzg0MiwxMyArMzk1NiwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0hTRU0gKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9IU0VNICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JLUFJBTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfU1JBTTQKICAgKgpAQCAtMzg4NywxMCArNDAwMSwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JLUFJBTQpAQCAtMzkzMywxMCArNDA0NywxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JLUFJBTQpAQCAtMzk1Miw3ICs0MDY2LDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIEJVU19MTF9FRl9BUEIzIEFQQjMKKy8qKiBAYWRkdG9ncm91cCBCVVNfTExfRUZfQVBCMyBBUEIzCiAgICogQHsKICAgKi8KIApAQCAtMzk2Myw3ICs0MDc3LDcgQEAKICAgKiAgICAgICAgIEFQQjNFTlIgICAgICBXV0RHMUVOICAgICAgIExMX0MxX0FQQjNfR1JQMV9FbmFibGVDbG9jawogICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIzX0dSUDFfUEVSSVBIX0xUREMgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9EU0kgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfRFNJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfV1dERzEKICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgpAQCAtMzk4NSw3ICs0MDk5LDcgQEAKICAgKiAgICAgICAgIEFQQjNFTlIgICAgICBXV0RHMUVOICAgICAgIExMX0MxX0FQQjNfR1JQMV9Jc0VuYWJsZWRDbG9jawogICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIzX0dSUDFfUEVSSVBIX0xUREMgKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9EU0kgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfRFNJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfV1dERzEKICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgpAQCAtNDAwMyw3ICs0MTE3LDggQEAKICAgKiAgICAgICAgIEFQQjNFTlIgICAgICBXV0RHMUVOICAgICAgIExMX0MxX0FQQjNfR1JQMV9EaXNhYmxlQ2xvY2sKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9MVERDICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfRFNJICAoKikKKworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfRFNJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfV1dERzEKICAgKgogICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgpAQCAtNDAyMSw3ICs0MTM2LDcgQEAKICAgKiAgICAgICAgIEFQQjNMUEVOUiAgICBXV0RHMUxQRU4gICAgIExMX0MxX0FQQjNfR1JQMV9FbmFibGVDbG9ja1NsZWVwCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfTFREQyAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIzX0dSUDFfUEVSSVBIX0RTSSAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9EU0kgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9XV0RHMQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCkBAIC00MDQzLDcgKzQxNTgsNyBAQAogICAqICAgICAgICAgQVBCM0xQRU5SICAgIFdXREcxTFBFTiAgICAgTExfQzFfQVBCM19HUlAxX0Rpc2FibGVDbG9ja1NsZWVwCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfTFREQyAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIzX0dSUDFfUEVSSVBIX0RTSSAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9EU0kgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9XV0RHMQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCkBAIC00MDU4LDcgKzQxNzMsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgQlVTX0xMX0VGX0FQQjEgQVBCMQorLyoqIEBhZGR0b2dyb3VwIEJVU19MTF9FRl9BUEIxIEFQQjEKICAgKiBAewogICAqLwogCkBAIC00MzkzLDYgKzQ1MDgsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX09QQU1QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9NRElPUwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfRkRDQU4KKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTIzICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjQgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMV9BUEIxX0dSUDJfRW5hYmxlQ2xvY2sodWludDMyX3QgUGVyaXBocykKQEAgLTQ0MTcsNiArNDUzNiwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfT1BBTVAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX01ESU9TCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9GRENBTgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjMgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yNCAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgdWludDMyX3QKICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQzFfQVBCMV9HUlAyX0lzRW5hYmxlZENsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC00NDM3LDYgKzQ1NjAsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX09QQU1QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9NRElPUwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfRkRDQU4KKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTIzICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjQgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMV9BUEIxX0dSUDJfRGlzYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC00NDU3LDYgKzQ1ODQsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX09QQU1QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9NRElPUwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfRkRDQU4KKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTIzICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjQgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMV9BUEIxX0dSUDJfRW5hYmxlQ2xvY2tTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNDQ4MSw2ICs0NjEyLDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9PUEFNUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfTURJT1MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX0ZEQ0FOCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yMyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTI0ICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzFfQVBCMV9HUlAyX0Rpc2FibGVDbG9ja1NsZWVwKHVpbnQzMl90IFBlcmlwaHMpCkBAIC00NDkyLDcgKzQ2MjcsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgQlVTX0xMX0VGX0FQQjIgQVBCMgorLyoqIEBhZGR0b2dyb3VwIEJVU19MTF9FRl9BUEIyIEFQQjIKICAgKiBAewogICAqLwogCkBAIC00NTI5LDggKzQ2NjQsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NQSTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9IUlRJTSAoKikKICAgKgpAQCAtNDU3OSw4ICs0NzE0LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TUEk1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0RGU0RNMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfSFJUSU0gKCopCiAgICoKQEAgLTQ2MTUsNiArNDc1MCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9USU0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9USU04CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9VU0FSVDEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1VTQVJUNgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVUFSVDkgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1VTQVJUMTAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TUEkxCkBAIC00NjI0LDggKzQ3NjAsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NQSTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9IUlRJTSAoKikKICAgKgpAQCAtNDY2MCw2ICs0Nzk2LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1VTQVJUMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVVNBUlQ2CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9VQVJUOSAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVVNBUlQxMCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NQSTEKQEAgLTQ2NjksOCArNDgwNiw4IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9USU0xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU1BJNQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9ERlNETTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0hSVElNICgqKQogICAqCkBAIC00NzA5LDYgKzQ4NDYsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVElNOAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVVNBUlQxCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9VU0FSVDYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1VBUlQ5ICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9VU0FSVDEwICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU1BJMQpAQCAtNDcxOCw4ICs0ODU2LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TUEk1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0RGU0RNMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfSFJUSU0gKCopCiAgICoKQEAgLTQ3MzUsNyArNDg3Myw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBCVVNfTExfRUZfQVBCNCBBUEI0CisvKiogQGFkZHRvZ3JvdXAgQlVTX0xMX0VGX0FQQjQgQVBCNAogICAqIEB7CiAgICovCiAKQEAgLTQ3NjgsNyArNDkwNiw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9DT01QMTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1ZSRUYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1JUQ0FQQgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU0FJNCAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU0FJNCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0RUUyAgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0RGU0RNMiAoKikKICAgKgpAQCAtNDgxMSw4ICs0OTQ5LDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNNSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0NPTVAxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfVlJFRgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfUlRDQVBCCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfRFRTICAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfREZTRE0yICgqKQogICAqCkBAIC00ODUyLDcgKzQ5ODksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfQ09NUDEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9WUkVGCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9SVENBUEIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9EVFMgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9ERlNETTIgKCopCiAgICoKQEAgLTQ4NzcsOSArNTAxNCw5IEBACiAgICogICAgICAgICBBUEI0TFBFTlIgICAgQ09NUDEyTFBFTiAgICBMTF9DMV9BUEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCiAgICogICAgICAgICBBUEI0TFBFTlIgICAgVlJFRkxQRU4gICAgICBMTF9DMV9BUEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCiAgICogICAgICAgICBBUEI0TFBFTlIgICAgUlRDQVBCTFBFTiAgICBMTF9DMV9BUEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuCi0gICogICAgICAgICBBUEI0RU5SICAgICAgU0FJNEVOICAgICAgICBMTF9DMV9BUEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuICgqKQotICAqICAgICAgICAgQVBCNEVOUiAgICAgIERUU0VOICAgICAgICAgTExfQzFfQVBCNF9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbiAoKikKLSAgKiAgICAgICAgIEFQQjRFTlIgICAgICBERlNETTJFTiAgICAgIExMX0MxX0FQQjRfR1JQMV9FbmFibGVDbG9ja1NsZWVwICAgKCopCisgICogICAgICAgICBBUEI0TFBFTlIgICAgU0FJNExQRU4gICAgICBMTF9DMV9BUEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcFxuICgqKQorICAqICAgICAgICAgQVBCNEVOUiAgICAgIERUU0xQRU4gICAgICAgTExfQzFfQVBCNF9HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbiAoKikKKyAgKiAgICAgICAgIEFQQjRFTlIgICAgICBERlNETTJMUEVOICAgIExMX0MxX0FQQjRfR1JQMV9FbmFibGVDbG9ja1NsZWVwICAgKCopCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU1lTQ0ZHCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFVBUlQxCkBAIC00ODkyLDcgKzUwMjksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfQ09NUDEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9WUkVGCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9SVENBUEIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9EVFMgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9ERlNETTIgKCopCiAgICoKQEAgLTQ5MjEsOSArNTA1OCw5IEBACiAgICogICAgICAgICBBUEI0TFBFTlIgICAgQ09NUDEyTFBFTiAgICBMTF9DMV9BUEI0X0dSUDFfRGlzYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQVBCNExQRU5SICAgIFZSRUZMUEVOICAgICAgTExfQzFfQVBCNF9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwXG4KICAgKiAgICAgICAgIEFQQjRMUEVOUiAgICBSVENBUEJMUEVOICAgIExMX0MxX0FQQjRfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcFxuCi0gICogICAgICAgICBBUEI0RU5SICAgICAgU0FJNEVOICAgICAgICBMTF9DMV9BUEI0X0dSUDFfRGlzYWJsZUNsb2NrU2xlZXBcbiAoKikKLSAgKiAgICAgICAgIEFQQjRFTlIgICAgICBEVFNFTiAgICAgICAgIExMX0MxX0FQQjRfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcFxuICgqKQotICAqICAgICAgICAgQVBCNEVOUiAgICAgIERGU0RNMkVOICAgICAgTExfQzFfQVBCNF9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwICAgKCopCisgICogICAgICAgICBBUEI0TFBFTlIgICAgU0FJNExQRU4gICAgICBMTF9DMV9BUEI0X0dSUDFfRGlzYWJsZUNsb2NrU2xlZXBcbiAoKikKKyAgKiAgICAgICAgIEFQQjRFTlIgICAgICBEVFNMUEVOICAgICAgIExMX0MxX0FQQjRfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcFxuICgqKQorICAqICAgICAgICAgQVBCNEVOUiAgICAgIERGU0RNMkxQRU4gICAgTExfQzFfQVBCNF9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwICAgKCopCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU1lTQ0ZHCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFVBUlQxCkBAIC00OTM2LDcgKzUwNzMsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfQ09NUDEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9WUkVGCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9SVENBUEIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9EVFMgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9ERlNETTIgKCopCiAgICoKQEAgLTQ5NTIsNyArNTA4OSw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBCVVNfTExfRUZfQUhCMyBBSEIzCisvKiogQGFkZHRvZ3JvdXAgQlVTX0xMX0VGX0FIQjMgQUhCMwogICAqIEB7CiAgICovCiAKQEAgLTQ5NzIsOSArNTEwOSw5IEBACiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfTURNQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRE1BMkQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0pQR0RFQworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfSlBHREVDICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0ZNQwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfUVNQSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfUVNQSSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1NETU1DMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRkxBU0gKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RUQ00xCkBAIC01MDA4LDkgKzUxNDUsOSBAQAogICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX01ETUEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RNQTJECi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9KUEdERUMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0pQR0RFQyAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkgICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9TRE1NQzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0ZMQVNICiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9EVENNMQpAQCAtNTA0MCw5ICs1MTc3LDkgQEAKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9NRE1BCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9ETUEyRAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfSlBHREVDCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9KUEdERUMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9GTUMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1FTUEkgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9TRE1NQzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0ZMQVNICiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCM19HUlAxX1BFUklQSF9EVENNMQpAQCAtNTA3MSw5ICs1MjA4LDkgQEAKICAgKiAgICAgICAgIEFIQjNMUEVOUiAgICBBWElTUkFNTFBFTiAgIExMX0MyX0FIQjNfR1JQMV9FbmFibGVDbG9ja1NsZWVwCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRE1BMkQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0pQR0RFQworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfSlBHREVDICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0ZNQwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfUVNQSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfUVNQSSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1NETU1DMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRkxBU0gKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RUQ00xCkBAIC01MTA2LDkgKzUyNDMsOSBAQAogICAqICAgICAgICAgQUhCM0xQRU5SICAgIEFYSVNSQU1MUEVOICAgTExfQzJfQUhCM19HUlAxX0Rpc2FibGVDbG9ja1NsZWVwCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRE1BMkQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0pQR0RFQworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfSlBHREVDICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0ZNQwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfUVNQSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfUVNQSSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX1NETU1DMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjNfR1JQMV9QRVJJUEhfRkxBU0gKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIzX0dSUDFfUEVSSVBIX0RUQ00xCkBAIC01MTI2LDcgKzUyNjMsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgQlVTX0xMX0VGX0FIQjEgQUhCMQorLyoqIEBhZGR0b2dyb3VwIEJVU19MTF9FRl9BSEIxIEFIQjEKICAgKiBAewogICAqLwogCkBAIC01MTQ3LDE0ICs1Mjg0LDE2IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9ETUExCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9ETUEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9BREMxMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxTUFDCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxVFgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFSWAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMU1BQyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFUWCAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxUlggICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVVNCMU9UR0hTCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IxT1RHSFNVTFBJCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IyT1RHSFMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjJPVEdIU1VMUEkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjJPVEdIUyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IyT1RHSFNVTFBJICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuICAKICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9BSEIxX0dSUDFfRW5hYmxlQ2xvY2sodWludDMyX3QgUGVyaXBocykKQEAgLTUxODMsMTQgKzUzMjIsMTYgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0RNQTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0RNQTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0FEQzEyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9BUlQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFNQUMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFUWAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMVJYCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9BUlQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxTUFDICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMVRYICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFSWCAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IxT1RHSFMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjFPVEdIU1VMUEkKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjJPVEdIUwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVVNCMk9UR0hTVUxQSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVVNCMk9UR0hTICAgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjJPVEdIU1VMUEkgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4gIAogICAqIEByZXR2YWwgdWludDMyX3QKICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQzJfQUhCMV9HUlAxX0lzRW5hYmxlZENsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC01MjE1LDE0ICs1MzU2LDE2IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9ETUExCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9ETUEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9BREMxMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxTUFDCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxVFgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFSWAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMU1BQyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxVFggICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFSWCAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVVNCMU9UR0hTCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IxT1RHSFNVTFBJCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IyT1RHSFMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjJPVEdIU1VMUEkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjJPVEdIUyAgICAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVVNCMk9UR0hTVUxQSSAgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9BSEIxX0dSUDFfRGlzYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC01MjQ3LDE0ICs1MzkwLDE2IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9ETUExCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9ETUEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9BREMxMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxTUFDCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxVFgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFSWAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQVJUICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMU1BQyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxVFggICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFSWCAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVVNCMU9UR0hTCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IxT1RHSFNVTFBJCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IyT1RHSFMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjJPVEdIU1VMUEkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjJPVEdIUyAgICAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVVNCMk9UR0hTVUxQSSAgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9BSEIxX0dSUDFfRW5hYmxlQ2xvY2tTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNTI4MywxNCArNTQyOCwxNiBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRE1BMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRE1BMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfQURDMTIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0FSVAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMU1BQwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMVRYCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxUlgKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0FSVCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX0VUSDFNQUMgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfRVRIMVRYICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9FVEgxUlggICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjFPVEdIUwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVVNCMU9UR0hTVUxQSQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjFfR1JQMV9QRVJJUEhfVVNCMk9UR0hTCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IyT1RHSFNVTFBJCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMV9HUlAxX1BFUklQSF9VU0IyT1RHSFMgICAgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEIxX0dSUDFfUEVSSVBIX1VTQjJPVEdIU1VMUEkgICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfQUhCMV9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwKHVpbnQzMl90IFBlcmlwaHMpCkBAIC01MzAyLDcgKzU0NDksNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgQlVTX0xMX0VGX0FIQjIgQUhCMgorLyoqIEBhZGR0b2dyb3VwIEJVU19MTF9FRl9BSEIyIEFIQjIKICAgKiBAewogICAqLwogCkBAIC01Mzk0LDcgKzU1NDEsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfU0RNTUMyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0yCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0zCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0zICgqKQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCkBAIC01NDI2LDcgKzU1NzMsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjJfR1JQMV9QRVJJUEhfU0RNTUMyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0yCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0zCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCMl9HUlAxX1BFUklQSF9EMlNSQU0zICgqKQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCkBAIC01NDQwLDcgKzU1ODcsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgQlVTX0xMX0VGX0FIQjQgQUhCNAorLyoqIEBhZGR0b2dyb3VwIEJVU19MTF9FRl9BSEI0IEFIQjQKICAgKiBAewogICAqLwogCkBAIC01NDcyLDEzICs1NjE5LDEzIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPRgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0cKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9ICi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0oKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9LCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9DUkMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfSFNFTSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0FEQzMgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9IU0VNICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JLUFJBTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfU1JBTTQKICAgKgpAQCAtNTUyMiwxMyArNTY2OSwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0YKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9HCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9KCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9DUkMgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JETUEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0FEQzMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0hTRU0gKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9BREMzICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfSFNFTSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9CS1BSQU0KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX1NSQU00CiAgICoKQEAgLTU1NjgsMTMgKzU3MTUsMTMgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9GCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPRwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0gKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0sKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9CRE1BCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9BREMzCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9IU0VNICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0hTRU0gICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQktQUkFNCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9TUkFNNAogICAqCkBAIC01NjEzLDEyICs1NzYwLDEyIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPRgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0cKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9ICi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0kgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0oKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9LCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9DUkMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQyAgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQkRNQQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQURDMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0JLUFJBTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfU1JBTTQKICAgKiBAcmV0dmFsIE5vbmUKQEAgLTU2NTksMTIgKzU4MDYsMTIgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9GCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPRwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0gKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0dQSU9JCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9HUElPSgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfR1BJT0sKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BSEI0X0dSUDFfUEVSSVBIX0NSQworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQ1JDICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9CRE1BCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9BREMzCisgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9BREMzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FIQjRfR1JQMV9QRVJJUEhfQktQUkFNCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQUhCNF9HUlAxX1BFUklQSF9TUkFNNAogICAqIEByZXR2YWwgTm9uZQpAQCAtNTY3OCw3ICs1ODI1LDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIEJVU19MTF9FRl9BUEIzIEFQQjMKKy8qKiBAYWRkdG9ncm91cCBCVVNfTExfRUZfQVBCMyBBUEIzCiAgICogQHsKICAgKi8KIApAQCAtNTY4OCw3ICs1ODM1LDcgQEAKICAgKiAgICAgICAgIEFQQjNFTlIgICAgICBEU0lFTiAgICAgICAgIExMX0MyX0FQQjNfR1JQMV9FbmFibGVDbG9ja1xuCiAgICogICAgICAgICBBUEIzRU5SICAgICAgV1dERzFFTiAgICAgICBMTF9DMl9BUEIzX0dSUDFfRW5hYmxlQ2xvY2sKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9MVERDCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9MVERDICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfRFNJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfV1dERzEKICAgKgpAQCAtNTcxMCw3ICs1ODU3LDcgQEAKICAgKiAgICAgICAgIEFQQjNFTlIgICAgICBEU0lFTiAgICAgICAgIExMX0MyX0FQQjNfR1JQMV9Jc0VuYWJsZWRDbG9ja1xuCiAgICogICAgICAgICBBUEIzRU5SICAgICAgV1dERzFFTiAgICAgICBMTF9DMl9BUEIzX0dSUDFfSXNFbmFibGVkQ2xvY2sKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9MVERDCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9MVERDICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfRFNJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfV1dERzEKICAgKgpAQCAtNTcyOCw3ICs1ODc1LDcgQEAKICAgKiAgICAgICAgIEFQQjNFTlIgICAgICBEU0lFTiAgICAgICAgIExMX0MyX0FQQjNfR1JQMV9EaXNhYmxlQ2xvY2tcbgogICAqICAgICAgICAgQVBCM0VOUiAgICAgIFdXREcxRU4gICAgICAgTExfQzJfQVBCM19HUlAxX0Rpc2FibGVDbG9jawogICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIzX0dSUDFfUEVSSVBIX0xUREMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIzX0dSUDFfUEVSSVBIX0xUREMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9EU0kgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9XV0RHMQogICAqCkBAIC01NzQ2LDcgKzU4OTMsNyBAQAogICAqICAgICAgICAgQVBCM0xQRU5SICAgIERTSUxQRU4gICAgICAgTExfQzJfQVBCM19HUlAxX0VuYWJsZUNsb2NrU2xlZXBcbgogICAqICAgICAgICAgQVBCM0xQRU5SICAgIFdXREcxTFBFTiAgICAgTExfQzJfQVBCM19HUlAxX0VuYWJsZUNsb2NrU2xlZXAKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9MVERDCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9MVERDICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfRFNJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfV1dERzEKICAgKgpAQCAtNTc2OCw3ICs1OTE1LDcgQEAKICAgKiAgICAgICAgIEFQQjNMUEVOUiAgICBEU0lMUEVOICAgICAgIExMX0MyX0FQQjNfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcFxuCiAgICogICAgICAgICBBUEIzTFBFTlIgICAgV1dERzFMUEVOICAgICBMTF9DMl9BUEIzX0dSUDFfRGlzYWJsZUNsb2NrU2xlZXAKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9MVERDCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCM19HUlAxX1BFUklQSF9MVERDICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfRFNJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjNfR1JQMV9QRVJJUEhfV1dERzEKICAgKgpAQCAtNTc4NCw3ICs1OTMxLDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIEJVU19MTF9FRl9BUEIxIEFQQjEKKy8qKiBAYWRkdG9ncm91cCBCVVNfTExfRUZfQVBCMSBBUEIxCiAgICogQHsKICAgKi8KIApAQCAtNTgyNiw3ICs1OTczLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTEzCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9USU0xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfTFBUSU0xCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9XV0RHMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfV1dERzIgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9TUEkyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9TUEkzCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9TUERJRlJYCkBAIC01ODQxLDYgKzU5ODgsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfREFDMTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1VBUlQ3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9VQVJUOAorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfQVBCMV9HUlAxX0VuYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC01ODkwLDcgKzYwMzksNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMTMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTE0CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9MUFRJTTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1dXREcyCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9XV0RHMiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1NQSTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1NQSTMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1NQRElGUlgKQEAgLTU5MDUsNiArNjA1NCw4IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9EQUMxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfVUFSVDcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1VBUlQ4CisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIHVpbnQzMl90CiAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0MyX0FQQjFfR1JQMV9Jc0VuYWJsZWRDbG9jayh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNTk1MCw3ICs2MTAxLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTEzCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9USU0xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfTFBUSU0xCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9XV0RHMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfV1dERzIgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9TUEkyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9TUEkzCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9TUERJRlJYCkBAIC01OTY1LDYgKzYxMTYsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfREFDMTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1VBUlQ3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9VQVJUOAorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfQVBCMV9HUlAxX0Rpc2FibGVDbG9jayh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNjAxMCw3ICs2MTYzLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1RJTTEzCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9USU0xNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfTFBUSU0xCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9XV0RHMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfV1dERzIgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9TUEkyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9TUEkzCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9TUERJRlJYCkBAIC02MDI1LDYgKzYxNzgsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfREFDMTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1VBUlQ3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9VQVJUOAorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfQVBCMV9HUlAxX0VuYWJsZUNsb2NrU2xlZXAodWludDMyX3QgUGVyaXBocykKQEAgLTYwNzQsNyArNjIyOSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9USU0xMwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfVElNMTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0xQVElNMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfV1dERzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX1dXREcyICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfU1BJMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfU1BJMwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfU1BESUZSWApAQCAtNjA4OSw2ICs2MjQ0LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDFfUEVSSVBIX0RBQzEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAxX1BFUklQSF9VQVJUNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMV9QRVJJUEhfVUFSVDgKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0MyX0FQQjFfR1JQMV9EaXNhYmxlQ2xvY2tTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNjEwOSw2ICs2MjY2LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9PUEFNUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfTURJT1MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX0ZEQ0FOCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yMyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTI0ICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfQVBCMV9HUlAyX0VuYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC02MTMzLDYgKzYyOTQsMTAgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX09QQU1QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9NRElPUwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfRkRDQU4KKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTIzICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjQgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIHVpbnQzMl90CiAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0MyX0FQQjFfR1JQMl9Jc0VuYWJsZWRDbG9jayh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNjE1Myw2ICs2MzE4LDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9PUEFNUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfTURJT1MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX0ZEQ0FOCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yMyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTI0ICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfQVBCMV9HUlAyX0Rpc2FibGVDbG9jayh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNjE3Myw2ICs2MzQyLDEwIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9PUEFNUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfTURJT1MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX0ZEQ0FOCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yMyAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX1RJTTI0ICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfQVBCMV9HUlAyX0VuYWJsZUNsb2NrU2xlZXAodWludDMyX3QgUGVyaXBocykKQEAgLTYxOTcsNiArNjM3MCwxMCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfT1BBTVAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIxX0dSUDJfUEVSSVBIX01ESU9TCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9GRENBTgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjFfR1JQMl9QRVJJUEhfVElNMjMgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMV9HUlAyX1BFUklQSF9USU0yNCAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0MyX0FQQjFfR1JQMl9EaXNhYmxlQ2xvY2tTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNjIwOCw3ICs2Mzg1LDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIEJVU19MTF9FRl9BUEIyIEFQQjIKKy8qKiBAYWRkdG9ncm91cCBCVVNfTExfRUZfQVBCMiBBUEIyCiAgICogQHsKICAgKi8KIApAQCAtNjI0MSwxMCArNjQxOCwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NQSTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0RGU0RNMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfSFJUSU0KKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0hSVElNICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCisKICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9BUEIyX0dSUDFfRW5hYmxlQ2xvY2sodWludDMyX3QgUGVyaXBocykKQEAgLTYyODUsMTAgKzY0NjUsMTIgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1RJTTE3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TUEk1CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkxCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkyICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9ERlNETTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0hSVElNCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9IUlRJTSAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgdWludDMyX3QKICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQzJfQVBCMl9HUlAxX0lzRW5hYmxlZENsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC02MzI1LDEwICs2NTA3LDEyIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9USU0xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU1BJNQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9IUlRJTQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfSFJUSU0gKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9BUEIyX0dSUDFfRGlzYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC02MzY1LDEwICs2NTQ5LDEyIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9USU0xNwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU1BJNQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9TQUkzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfREZTRE0xCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCMl9HUlAxX1BFUklQSF9IUlRJTQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfSFJUSU0gKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9BUEIyX0dSUDFfRW5hYmxlQ2xvY2tTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNjQwOSwxMCArNjU5NSwxMiBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfVElNMTcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NQSTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX1NBSTIgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfU0FJMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0RGU0RNMQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjJfR1JQMV9QRVJJUEhfSFJUSU0KKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEIyX0dSUDFfUEVSSVBIX0hSVElNICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfQVBCMl9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwKHVpbnQzMl90IFBlcmlwaHMpCkBAIC02NDI0LDcgKzY2MTIsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgQlVTX0xMX0VGX0FQQjQgQVBCNAorLyoqIEBhZGR0b2dyb3VwIEJVU19MTF9FRl9BUEI0IEFQQjQKICAgKiBAewogICAqLwogCkBAIC02NDQ5LDEyICs2NjM3LDE0IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9JMkM0CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNMwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfTFBUSU00Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNNCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNNSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0NPTVAxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfVlJFRgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfUlRDQVBCCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0CisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9BUEI0X0dSUDFfRW5hYmxlQ2xvY2sodWludDMyX3QgUGVyaXBocykKQEAgLTY0ODcsMTIgKzY2NzcsMTQgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0kyQzQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfTFBUSU0zCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfTFBUSU00ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfTFBUSU01ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfQ09NUDEyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9WUkVGCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9SVENBUEIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1NBSTQgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgdWludDMyX3QKICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQzJfQVBCNF9HUlAxX0lzRW5hYmxlZENsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC02NTIxLDEyICs2NzEzLDE0IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9JMkM0CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNMwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfTFBUSU00Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNNCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNNSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0NPTVAxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfVlJFRgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfUlRDQVBCCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0CisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9BUEI0X0dSUDFfRGlzYWJsZUNsb2NrKHVpbnQzMl90IFBlcmlwaHMpCkBAIC02NTU1LDEyICs2NzQ5LDE0IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9JMkM0CiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNMwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfTFBUSU00Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNNCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNNSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0NPTVAxMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfVlJFRgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfUlRDQVBCCi0gICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0CisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9TQUk0ICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DMl9BUEI0X0dSUDFfRW5hYmxlQ2xvY2tTbGVlcCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtNjU5MywxMiArNjc4OSwxNCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfSTJDNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfTFBUSU0yCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX0xQVElNNAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfTFBUSU01CisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9MUFRJTTUgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQVBCNF9HUlAxX1BFUklQSF9DT01QMTIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1ZSRUYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9BUEI0X0dSUDFfUEVSSVBIX1JUQ0FQQgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU0FJNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0FQQjRfR1JQMV9QRVJJUEhfU0FJNCAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQzJfQVBCNF9HUlAxX0Rpc2FibGVDbG9ja1NsZWVwKHVpbnQzMl90IFBlcmlwaHMpCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX2NvbXAuaCBiL0luYy9zdG0zMmg3eHhfbGxfY29tcC5oCmluZGV4IDI0M2M4OWQuLmU3NWMwYmQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfY29tcC5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfY29tcC5oCkBAIC00MTcsMTYgKzQxNywxMiBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPTVBfSU5QVVRfTUlOVVNfREFDMV9DSDIgCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ09NUF9JTlBVVF9NSU5VU19JTzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX01JTlVTX0lPMgotI2lmIGRlZmluZWQgKENPTVBfQ0ZHUnhfSU5NU0VMXzMpCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ09NUF9JTlBVVF9NSU5VU19UUFNFTlNfREFDMkNIMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPTVBfSU5QVVRfTUlOVVNfVkJBVF9WRERBUAotI2VuZGlmCiAgICogQHBhcmFtICBJbnB1dFBsdXMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX1BMVVNfSU8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ09NUF9JTlBVVF9QTFVTX0lPMgotI2lmIGRlZmluZWQgKENPTVBfQ0ZHUnhfSU5QMlNFTCkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX1BMVVNfREFDMl9DSDEKLSNlbmRpZgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQ09NUF9Db25maWdJbnB1dHMoQ09NUF9UeXBlRGVmICpDT01QeCwgdWludDMyX3QgSW5wdXRNaW51cywgdWludDMyX3QgSW5wdXRQbHVzKQpAQCAtNDU1LDkgKzQ1MSw3IEBACiAgICogQHBhcmFtICBJbnB1dFBsdXMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX1BMVVNfSU8xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ09NUF9JTlBVVF9QTFVTX0lPMgotI2lmIGRlZmluZWQgKENPTVBfQ0ZHUnhfSU5QMlNFTCkKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX1BMVVNfREFDMl9DSDEKLSNlbmRpZgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQ09NUF9TZXRJbnB1dFBsdXMoQ09NUF9UeXBlRGVmICpDT01QeCwgdWludDMyX3QgSW5wdXRQbHVzKQpAQCAtNDc5LDkgKzQ3Myw3IEBACiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPTVBfSU5QVVRfUExVU19JTzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX1BMVVNfSU8yCi0jaWYgZGVmaW5lZCAoQ09NUF9DRkdSeF9JTlAyU0VMKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPTVBfSU5QVVRfUExVU19EQUMyX0NIMQotI2VuZGlmCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQ09NUF9HZXRJbnB1dFBsdXMoQ09NUF9UeXBlRGVmICpDT01QeCkKIHsKQEAgLTUyMiwxMCArNTE0LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX01JTlVTX0RBQzFfQ0gyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ09NUF9JTlBVVF9NSU5VU19JTzEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX01JTlVTX0lPMgotI2lmIGRlZmluZWQgKENPTVBfQ0ZHUnhfSU5NU0VMXzMpCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ09NUF9JTlBVVF9NSU5VU19UUFNFTlNfREFDMkNIMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPTVBfSU5QVVRfTUlOVVNfVkJBVF9WRERBUAotI2VuZGlmCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DT01QX1NldElucHV0TWludXMoQ09NUF9UeXBlRGVmICpDT01QeCwgdWludDMyX3QgSW5wdXRNaW51cykKQEAgLTU1MSwxMCArNTQxLDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX01JTlVTX0RBQzFfQ0gyICAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX01JTlVTX0lPMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPTVBfSU5QVVRfTUlOVVNfSU8yCi0jaWYgZGVmaW5lZCAoQ09NUF9DRkdSeF9JTk1TRUxfMykKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT01QX0lOUFVUX01JTlVTX1RQU0VOU19EQUMyQ0gxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfQ09NUF9JTlBVVF9NSU5VU19WQkFUX1ZEREFQCi0jZW5kaWYKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9DT01QX0dldElucHV0TWludXMoQ09NUF9UeXBlRGVmICpDT01QeCkKIHsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfbGxfY29yZGljLmggYi9JbmMvc3RtMzJoN3h4X2xsX2NvcmRpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NjcwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9JbmMvc3RtMzJoN3h4X2xsX2NvcmRpYy5oCkBAIC0wLDAgKzEsNzc3IEBACisvKioKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGZpbGUgICAgc3RtMzJoN3h4X2xsX2NvcmRpYy5oCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBIZWFkZXIgZmlsZSBvZiBDT1JESUMgTEwgbW9kdWxlLgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKKyAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovCisKKy8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZuZGVmIFNUTTMySDd4eF9MTF9DT1JESUNfSAorI2RlZmluZSBTVE0zMkg3eHhfTExfQ09SRElDX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgInN0bTMyaDd4eC5oIgorCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJIN3h4X0xMX0RyaXZlcgorICAqIEB7CisgICovCisKKyNpZiBkZWZpbmVkKENPUkRJQykKKworLyoqIEBkZWZncm91cCBDT1JESUNfTEwgQ09SRElDCisgICogQHsKKyAgKi8KKworLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0V4cG9ydGVkX0NvbnN0YW50cyBDT1JESUMgRXhwb3J0ZWQgQ29uc3RhbnRzCisgICogQHsKKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfTExfRUNfR0VUX0ZMQUcgR2V0IEZsYWdzIERlZmluZXMKKyAgKiBAYnJpZWYgICAgRmxhZ3MgZGVmaW5lcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIExMX0NPUkRJQ19SZWFkUmVnIGZ1bmN0aW9uLgorICAqIEB7CisgICovCisjZGVmaW5lIExMX0NPUkRJQ19GTEFHX1JSRFkgICAgICAgICAgICAgICAgQ09SRElDX0NTUl9SUkRZCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIENPUkRJQ19MTF9FQ19JVCBJVCBEZWZpbmVzCisgICogQGJyaWVmICAgIElUIGRlZmluZXMgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCBMTF9DT1JESUNfUmVhZFJlZyBhbmQgTExfQ09SRElDX1dyaXRlUmVnIGZ1bmN0aW9ucy4KKyAgKiBAeworICAqLworI2RlZmluZSBMTF9DT1JESUNfSVRfSUVOICAgICAgICAgICAgICAgICAgIENPUkRJQ19DU1JfSUVOICAgICAgICAgICAgLyohPCBSZXN1bHQgUmVhZHkgaW50ZXJydXB0IGVuYWJsZSAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfTExfRUNfRlVOQ1RJT04gRlVOQ1RJT04KKyAgKiBAeworICAqLworI2RlZmluZSBMTF9DT1JESUNfRlVOQ1RJT05fQ09TSU5FICAgICAgICAgICgweDAwMDAwMDAwVSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3NpbmUgKi8KKyNkZWZpbmUgTExfQ09SRElDX0ZVTkNUSU9OX1NJTkUgICAgICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX0ZVTkNfMCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2luZSAqLworI2RlZmluZSBMTF9DT1JESUNfRlVOQ1RJT05fUEhBU0UgICAgICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfRlVOQ18xKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBQaGFzZSAqLworI2RlZmluZSBMTF9DT1JESUNfRlVOQ1RJT05fTU9EVUxVUyAgICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfRlVOQ18xIHwgQ09SRElDX0NTUl9GVU5DXzApKSAgICAgICAgICAgICAgICAgICAgLyohPCBNb2R1bHVzICovCisjZGVmaW5lIExMX0NPUkRJQ19GVU5DVElPTl9BUkNUQU5HRU5UICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9GVU5DXzIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFyY3RhbmdlbnQgKi8KKyNkZWZpbmUgTExfQ09SRElDX0ZVTkNUSU9OX0hDT1NJTkUgICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX0ZVTkNfMiB8IENPUkRJQ19DU1JfRlVOQ18wKSkgICAgICAgICAgICAgICAgICAgIC8qITwgSHlwZXJib2xpYyBDb3NpbmUgKi8KKyNkZWZpbmUgTExfQ09SRElDX0ZVTkNUSU9OX0hTSU5FICAgICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX0ZVTkNfMiB8IENPUkRJQ19DU1JfRlVOQ18xKSkgICAgICAgICAgICAgICAgICAgIC8qITwgSHlwZXJib2xpYyBTaW5lICovCisjZGVmaW5lIExMX0NPUkRJQ19GVU5DVElPTl9IQVJDVEFOR0VOVCAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9GVU5DXzIgfCBDT1JESUNfQ1NSX0ZVTkNfMSB8IENPUkRJQ19DU1JfRlVOQ18wKSkvKiE8IEh5cGVyYm9saWMgQXJjdGFuZ2VudCAqLworI2RlZmluZSBMTF9DT1JESUNfRlVOQ1RJT05fTkFUVVJBTExPRyAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfRlVOQ18zKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBOYXR1cmFsIExvZ2FyaXRobSAqLworI2RlZmluZSBMTF9DT1JESUNfRlVOQ1RJT05fU1FVQVJFUk9PVCAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfRlVOQ18zIHwgQ09SRElDX0NTUl9GVU5DXzApKSAgICAgICAgICAgICAgICAgICAgLyohPCBTcXVhcmUgUm9vdCAqLworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfTExfRUNfUFJFQ0lTSU9OIFBSRUNJU0lPTgorICAqIEB7CisgICovCisjZGVmaW5lIExMX0NPUkRJQ19QUkVDSVNJT05fMUNZQ0xFICAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMCkpCisjZGVmaW5lIExMX0NPUkRJQ19QUkVDSVNJT05fMkNZQ0xFUyAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMSkpCisjZGVmaW5lIExMX0NPUkRJQ19QUkVDSVNJT05fM0NZQ0xFUyAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMSB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzApKQorI2RlZmluZSBMTF9DT1JESUNfUFJFQ0lTSU9OXzRDWUNMRVMgICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfUFJFQ0lTSU9OXzIpKQorI2RlZmluZSBMTF9DT1JESUNfUFJFQ0lTSU9OXzVDWUNMRVMgICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfUFJFQ0lTSU9OXzIgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8wKSkKKyNkZWZpbmUgTExfQ09SRElDX1BSRUNJU0lPTl82Q1lDTEVTICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1BSRUNJU0lPTl8yIHwgQ09SRElDX0NTUl9QUkVDSVNJT05fMSkpCisjZGVmaW5lIExMX0NPUkRJQ19QUkVDSVNJT05fN0NZQ0xFUyAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMiB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzEgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8wKSkKKyNkZWZpbmUgTExfQ09SRElDX1BSRUNJU0lPTl84Q1lDTEVTICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1BSRUNJU0lPTl8zKSkKKyNkZWZpbmUgTExfQ09SRElDX1BSRUNJU0lPTl85Q1lDTEVTICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1BSRUNJU0lPTl8zIHwgQ09SRElDX0NTUl9QUkVDSVNJT05fMCkpCisjZGVmaW5lIExMX0NPUkRJQ19QUkVDSVNJT05fMTBDWUNMRVMgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMyB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzEpKQorI2RlZmluZSBMTF9DT1JESUNfUFJFQ0lTSU9OXzExQ1lDTEVTICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfUFJFQ0lTSU9OXzMgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8xIHwgQ09SRElDX0NTUl9QUkVDSVNJT05fMCkpCisjZGVmaW5lIExMX0NPUkRJQ19QUkVDSVNJT05fMTJDWUNMRVMgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMyB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzIpKQorI2RlZmluZSBMTF9DT1JESUNfUFJFQ0lTSU9OXzEzQ1lDTEVTICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfUFJFQ0lTSU9OXzMgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8yIHwgQ09SRElDX0NTUl9QUkVDSVNJT05fMCkpCisjZGVmaW5lIExMX0NPUkRJQ19QUkVDSVNJT05fMTRDWUNMRVMgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9QUkVDSVNJT05fMyB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzIgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8xKSkKKyNkZWZpbmUgTExfQ09SRElDX1BSRUNJU0lPTl8xNUNZQ0xFUyAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1BSRUNJU0lPTl8zIHwgQ09SRElDX0NTUl9QUkVDSVNJT05fMiB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OXzEgfCBDT1JESUNfQ1NSX1BSRUNJU0lPTl8wKSkKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0VDX1NDQUxFIFNDQUxFCisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfQ09SRElDX1NDQUxFXzAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMFUpCisjZGVmaW5lIExMX0NPUkRJQ19TQ0FMRV8xICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9TQ0FMRV8wKSkKKyNkZWZpbmUgTExfQ09SRElDX1NDQUxFXzIgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1NDQUxFXzEpKQorI2RlZmluZSBMTF9DT1JESUNfU0NBTEVfMyAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfU0NBTEVfMSB8IENPUkRJQ19DU1JfU0NBTEVfMCkpCisjZGVmaW5lIExMX0NPUkRJQ19TQ0FMRV80ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9TQ0FMRV8yKSkKKyNkZWZpbmUgTExfQ09SRElDX1NDQUxFXzUgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShDT1JESUNfQ1NSX1NDQUxFXzIgfCBDT1JESUNfQ1NSX1NDQUxFXzApKQorI2RlZmluZSBMTF9DT1JESUNfU0NBTEVfNiAgICAgICAgICAgICAgICAgICgodWludDMyX3QpKENPUkRJQ19DU1JfU0NBTEVfMiB8IENPUkRJQ19DU1JfU0NBTEVfMSkpCisjZGVmaW5lIExMX0NPUkRJQ19TQ0FMRV83ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoQ09SRElDX0NTUl9TQ0FMRV8yIHwgQ09SRElDX0NTUl9TQ0FMRV8xIHwgQ09SRElDX0NTUl9TQ0FMRV8wKSkKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0VDX05CV1JJVEUgTkJXUklURQorICAqIEB7CisgICovCisjZGVmaW5lIExMX0NPUkRJQ19OQldSSVRFXzEgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAgICAgICAvKiE8IE9uZSAzMi1iaXRzIHdyaXRlIGNvbnRhaW5pbmcgZWl0aGVyIG9ubHkgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBkYXRhIGlucHV0IChRMS4zMSBmb3JtYXQpLCBvciB0d28gMTYtYml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgaW5wdXQgKFExLjE1IGZvcm1hdCkgcGFja2VkIGluIG9uZSAzMiBiaXRzIERhdGEgKi8KKyNkZWZpbmUgTExfQ09SRElDX05CV1JJVEVfMiAgICAgICAgICAgICAgICBDT1JESUNfQ1NSX05BUkdTICAgICAgICAgIC8qITwgVHdvIDMyLWJpdCB3cml0ZSBjb250YWluaW5nIHR3byAzMi1iaXRzIGRhdGEgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFExLjMxIGZvcm1hdCkgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0VDX05CUkVBRCBOQlJFQUQKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9DT1JESUNfTkJSRUFEXzEgICAgICAgICAgICAgICAgICgweDAwMDAwMDAwVSkgICAgICAgICAgICAgLyohPCBPbmUgMzItYml0cyByZWFkIGNvbnRhaW5pbmcgZWl0aGVyIG9ubHkgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBkYXRhIG91cHV0IChRMS4zMSBmb3JtYXQpLCBvciB0d28gMTYtYml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgb3V0cHV0IChRMS4xNSBmb3JtYXQpIHBhY2tlZCBpbiBvbmUgMzIgYml0cyBEYXRhICovCisjZGVmaW5lIExMX0NPUkRJQ19OQlJFQURfMiAgICAgICAgICAgICAgICAgQ09SRElDX0NTUl9OUkVTICAgICAgICAgICAvKiE8IFR3byAzMi1iaXQgRGF0YSBjb250YWluaW5nIHR3byAzMi1iaXRzIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChRMS4zMSBmb3JtYXQpICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIENPUkRJQ19MTF9FQ19JTlNJWkUgSU5TSVpFCisgICogQHsKKyAgKi8KKyNkZWZpbmUgTExfQ09SRElDX0lOU0laRV8zMkJJVFMgICAgICAgICAgICAoMHgwMDAwMDAwMFUpICAgICAgICAgICAgIC8qITwgMzIgYml0cyBpbnB1dCBkYXRhIHNpemUgKFExLjMxIGZvcm1hdCkgKi8KKyNkZWZpbmUgTExfQ09SRElDX0lOU0laRV8xNkJJVFMgICAgICAgICAgICBDT1JESUNfQ1NSX0FSR1NJWkUgICAgICAgIC8qITwgMTYgYml0cyBpbnB1dCBkYXRhIHNpemUgKFExLjE1IGZvcm1hdCkgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0VDX09VVFNJWkUgT1VUU0laRQorICAqIEB7CisgICovCisjZGVmaW5lIExMX0NPUkRJQ19PVVRTSVpFXzMyQklUUyAgICAgICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAgICAgICAvKiE8IDMyIGJpdHMgb3V0cHV0IGRhdGEgc2l6ZSAoUTEuMzEgZm9ybWF0KSAqLworI2RlZmluZSBMTF9DT1JESUNfT1VUU0laRV8xNkJJVFMgICAgICAgICAgIENPUkRJQ19DU1JfUkVTU0laRSAgICAgICAgLyohPCAxNiBiaXRzIG91dHB1dCBkYXRhIHNpemUgKFExLjE1IGZvcm1hdCkgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0VDX0RNQV9SRUdfREFUQSBETUEgcmVnaXN0ZXIgZGF0YQorICAqIEB7CisgICovCisjZGVmaW5lIExMX0NPUkRJQ19ETUFfUkVHX0RBVEFfSU4gICAgICAgICAgKDB4MDAwMDAwMDBVKSAgICAgICAgICAgICAvKiE8IEdldCBhZGRyZXNzIG9mIGlucHV0IGRhdGEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTExfQ09SRElDX0RNQV9SRUdfREFUQV9PVVQgICAgICAgICAoMHgwMDAwMDAwMVUpICAgICAgICAgICAgIC8qITwgR2V0IGFkZHJlc3Mgb2Ygb3V0cHV0IGRhdGEgcmVnaXN0ZXIgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIENPUkRJQ19MTF9FeHBvcnRlZF9NYWNyb3MgQ09SRElDIEV4cG9ydGVkIE1hY3JvcworICAqIEB7CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0VNX1dSSVRFX1JFQUQgQ29tbW9uIFdyaXRlIGFuZCByZWFkIHJlZ2lzdGVycyBNYWNyb3MKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIFdyaXRlIGEgdmFsdWUgaW4gQ09SRElDIHJlZ2lzdGVyLgorICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fIENPUkRJQyBJbnN0YW5jZQorICAqIEBwYXJhbSAgX19SRUdfXyBSZWdpc3RlciB0byBiZSB3cml0dGVuCisgICogQHBhcmFtICBfX1ZBTFVFX18gVmFsdWUgdG8gYmUgd3JpdHRlbiBpbiB0aGUgcmVnaXN0ZXIKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KKyNkZWZpbmUgTExfQ09SRElDX1dyaXRlUmVnKF9fSU5TVEFOQ0VfXywgX19SRUdfXywgX19WQUxVRV9fKSBXUklURV9SRUcoX19JTlNUQU5DRV9fLT5fX1JFR19fLCAoX19WQUxVRV9fKSkKKworLyoqCisgICogQGJyaWVmICBSZWFkIGEgdmFsdWUgaW4gQ09SRElDIHJlZ2lzdGVyLgorICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fIENPUkRJQyBJbnN0YW5jZQorICAqIEBwYXJhbSAgX19SRUdfXyBSZWdpc3RlciB0byBiZSByZWFkCisgICogQHJldHZhbCBSZWdpc3RlciB2YWx1ZQorICAqLworI2RlZmluZSBMTF9DT1JESUNfUmVhZFJlZyhfX0lOU1RBTkNFX18sIF9fUkVHX18pIFJFQURfUkVHKF9fSU5TVEFOQ0VfXy0+X19SRUdfXykKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKworLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfTExfRXhwb3J0ZWRfRnVuY3Rpb25zIENPUkRJQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKiogQGRlZmdyb3VwIENPUkRJQ19MTF9FRl9Db25maWd1cmF0aW9uIENPUkRJQyBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBDT1JESUMgcHJvY2Vzc2luZy4KKyAgKiBAbm90ZSAgIFRoaXMgZnVuY3Rpb24gc2V0IGFsbCBwYXJhbWV0ZXJzIG9mIENPUkRJQyBwcm9jZXNzaW5nLgorICAqICAgICAgICAgVGhlc2UgcGFyYW1ldGVycyBjYW4gYWxzbyBiZSBzZXQgaW5kaXZpZHVhbGx5IHVzaW5nCisgICogICAgICAgICBkZWRpY2F0ZWQgZnVuY3Rpb25zOgorICAqICAgICAgICAgLSBAcmVmIExMX0NPUkRJQ19TZXRGdW5jdGlvbigpCisgICogICAgICAgICAtIEByZWYgTExfQ09SRElDX1NldFByZWNpc2lvbigpCisgICogICAgICAgICAtIEByZWYgTExfQ09SRElDX1NldFNjYWxlKCkKKyAgKiAgICAgICAgIC0gQHJlZiBMTF9DT1JESUNfU2V0TmJXcml0ZSgpCisgICogICAgICAgICAtIEByZWYgTExfQ09SRElDX1NldE5iUmVhZCgpCisgICogICAgICAgICAtIEByZWYgTExfQ09SRElDX1NldEluU2l6ZSgpCisgICogICAgICAgICAtIEByZWYgTExfQ09SRElDX1NldE91dFNpemUoKQorICAqIEBybXRvbGwgQ1NSICAgICAgICAgIEZVTkMgICAgICAgICAgTExfQ09SRElDX0NvbmZpZ3VyZVxuCisgICogICAgICAgICBDU1IgICAgICAgICAgUFJFQ0lTSU9OICAgICBMTF9DT1JESUNfQ29uZmlndXJlXG4KKyAgKiAgICAgICAgIENTUiAgICAgICAgICBTQ0FMRSAgICAgICAgIExMX0NPUkRJQ19Db25maWd1cmVcbgorICAqICAgICAgICAgQ1NSICAgICAgICAgIE5BUkdTICAgICAgICAgTExfQ09SRElDX0NvbmZpZ3VyZVxuCisgICogICAgICAgICBDU1IgICAgICAgICAgTlJFUyAgICAgICAgICBMTF9DT1JESUNfQ29uZmlndXJlXG4KKyAgKiAgICAgICAgIENTUiAgICAgICAgICBBUkdTSVpFICAgICAgIExMX0NPUkRJQ19Db25maWd1cmVcbgorICAqICAgICAgICAgQ1NSICAgICAgICAgIFJFU1NJWkUgICAgICAgTExfQ09SRElDX0NvbmZpZ3VyZQorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgaW5zdGFuY2UKKyAgKiBAcGFyYW0gIEZ1bmN0aW9uIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9DT1NJTkUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfRlVOQ1RJT05fU0lORQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9QSEFTRQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9NT0RVTFVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX0FSQ1RBTkdFTlQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfRlVOQ1RJT05fSENPU0lORQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9IU0lORQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9IQVJDVEFOR0VOVAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9OQVRVUkFMTE9HCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX1NRVUFSRVJPT1QKKyAgKiBAcGFyYW0gIFByZWNpc2lvbiBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfUFJFQ0lTSU9OXzFDWUNMRQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fMkNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fM0NZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fNENZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fNUNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fNkNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fN0NZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fOENZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fOUNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fMTBDWUNMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfUFJFQ0lTSU9OXzExQ1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl8xMkNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fMTNDWUNMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfUFJFQ0lTSU9OXzE0Q1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl8xNUNZQ0xFUworICAqIEBwYXJhbSAgU2NhbGUgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1NDQUxFXzAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfU0NBTEVfMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19TQ0FMRV8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1NDQUxFXzMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfU0NBTEVfNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19TQ0FMRV81CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1NDQUxFXzYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfU0NBTEVfNworICAqIEBwYXJhbSAgTmJXcml0ZSBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfTkJXUklURV8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX05CV1JJVEVfMgorICAqIEBwYXJhbSAgTmJSZWFkIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19OQlJFQURfMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19OQlJFQURfMgorICAqIEBwYXJhbSAgSW5TaXplIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19JTlNJWkVfMzJCSVRTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0lOU0laRV8xNkJJVFMKKyAgKiBAcGFyYW0gIE91dFNpemUgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX09VVFNJWkVfMzJCSVRTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX09VVFNJWkVfMTZCSVRTCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DT1JESUNfQ29uZmlnKENPUkRJQ19UeXBlRGVmICpDT1JESUN4LCB1aW50MzJfdCBGdW5jdGlvbiwgdWludDMyX3QgUHJlY2lzaW9uLCB1aW50MzJfdCBTY2FsZSwgdWludDMyX3QgTmJXcml0ZSwgdWludDMyX3QgTmJSZWFkLCB1aW50MzJfdCBJblNpemUsIHVpbnQzMl90IE91dFNpemUpCit7CisgIE1PRElGWV9SRUcoQ09SRElDeC0+Q1NSLAorICAgICAgICAgICAgIENPUkRJQ19DU1JfRlVOQyB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OIHwgQ09SRElDX0NTUl9TQ0FMRSB8CisgICAgICAgICAgICAgQ09SRElDX0NTUl9OQVJHUyB8IENPUkRJQ19DU1JfTlJFUyB8IENPUkRJQ19DU1JfQVJHU0laRSB8IENPUkRJQ19DU1JfUkVTU0laRSwKKyAgICAgICAgICAgICBGdW5jdGlvbiB8IFByZWNpc2lvbiB8IFNjYWxlIHwKKyAgICAgICAgICAgICBOYldyaXRlIHwgTmJSZWFkIHwgSW5TaXplIHwgT3V0U2l6ZSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIGZ1bmN0aW9uLgorICAqIEBybXRvbGwgQ1NSICAgICAgICAgIEZVTkMgICAgICAgICAgTExfQ09SRElDX1NldEZ1bmN0aW9uCisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEBwYXJhbSAgRnVuY3Rpb24gcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX0NPU0lORQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9TSU5FCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX1BIQVNFCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX01PRFVMVVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfRlVOQ1RJT05fQVJDVEFOR0VOVAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9IQ09TSU5FCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX0hTSU5FCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX0hBUkNUQU5HRU5UCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX05BVFVSQUxMT0cKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfRlVOQ1RJT05fU1FVQVJFUk9PVAorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQ09SRElDX1NldEZ1bmN0aW9uKENPUkRJQ19UeXBlRGVmICpDT1JESUN4LCB1aW50MzJfdCBGdW5jdGlvbikKK3sKKyAgTU9ESUZZX1JFRyhDT1JESUN4LT5DU1IsIENPUkRJQ19DU1JfRlVOQywgRnVuY3Rpb24pOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiBmdW5jdGlvbi4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBGVU5DICAgICAgICAgIExMX0NPUkRJQ19HZXRGdW5jdGlvbgorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX0NPU0lORQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9TSU5FCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX1BIQVNFCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX01PRFVMVVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfRlVOQ1RJT05fQVJDVEFOR0VOVAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19GVU5DVElPTl9IQ09TSU5FCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX0hTSU5FCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX0hBUkNUQU5HRU5UCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0ZVTkNUSU9OX05BVFVSQUxMT0cKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfRlVOQ1RJT05fU1FVQVJFUk9PVAorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0NPUkRJQ19HZXRGdW5jdGlvbihDT1JESUNfVHlwZURlZiAqQ09SRElDeCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoQ09SRElDeC0+Q1NSLCBDT1JESUNfQ1NSX0ZVTkMpKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgcHJlY2lzaW9uIGluIGN5Y2xlcyBudW1iZXIuCisgICogQHJtdG9sbCBDU1IgICAgICAgICAgUFJFQ0lTSU9OICAgICBMTF9DT1JESUNfU2V0UHJlY2lzaW9uCisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEBwYXJhbSAgUHJlY2lzaW9uIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fMUNZQ0xFCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl8yQ1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl8zQ1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl80Q1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl81Q1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl82Q1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl83Q1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl84Q1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl85Q1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl8xMENZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fMTFDWUNMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfUFJFQ0lTSU9OXzEyQ1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl8xM0NZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fMTRDWUNMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfUFJFQ0lTSU9OXzE1Q1lDTEVTCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DT1JESUNfU2V0UHJlY2lzaW9uKENPUkRJQ19UeXBlRGVmICpDT1JESUN4LCB1aW50MzJfdCBQcmVjaXNpb24pCit7CisgIE1PRElGWV9SRUcoQ09SRElDeC0+Q1NSLCBDT1JESUNfQ1NSX1BSRUNJU0lPTiwgUHJlY2lzaW9uKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gcHJlY2lzaW9uIGluIGN5Y2xlcyBudW1iZXIuCisgICogQHJtdG9sbCBDU1IgICAgICAgICAgUFJFQ0lTSU9OICAgICBMTF9DT1JESUNfR2V0UHJlY2lzaW9uCisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfUFJFQ0lTSU9OXzFDWUNMRQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fMkNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fM0NZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fNENZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fNUNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fNkNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fN0NZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fOENZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fOUNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fMTBDWUNMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfUFJFQ0lTSU9OXzExQ1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl8xMkNZQ0xFUworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19QUkVDSVNJT05fMTNDWUNMRVMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfUFJFQ0lTSU9OXzE0Q1lDTEVTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1BSRUNJU0lPTl8xNUNZQ0xFUworICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0NPUkRJQ19HZXRQcmVjaXNpb24oQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9QUkVDSVNJT04pKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgc2NhbGluZyBmYWN0b3IuCisgICogQHJtdG9sbCBDU1IgICAgICAgICAgU0NBTEUgICAgICAgICBMTF9DT1JESUNfU2V0U2NhbGUKKyAgKiBAcGFyYW0gIENPUkRJQ3ggQ09SRElDIEluc3RhbmNlCisgICogQHBhcmFtICBTY2FsZSBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfU0NBTEVfMAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19TQ0FMRV8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1NDQUxFXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfU0NBTEVfMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19TQ0FMRV80CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1NDQUxFXzUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfU0NBTEVfNgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19TQ0FMRV83CisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DT1JESUNfU2V0U2NhbGUoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gsIHVpbnQzMl90IFNjYWxlKQoreworICBNT0RJRllfUkVHKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9TQ0FMRSwgU2NhbGUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiBzY2FsaW5nIGZhY3Rvci4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBTQ0FMRSAgICAgICAgIExMX0NPUkRJQ19HZXRTY2FsZQorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1NDQUxFXzAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfU0NBTEVfMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19TQ0FMRV8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1NDQUxFXzMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfU0NBTEVfNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19TQ0FMRV81CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX1NDQUxFXzYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfU0NBTEVfNworICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0NPUkRJQ19HZXRTY2FsZShDT1JESUNfVHlwZURlZiAqQ09SRElDeCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoQ09SRElDeC0+Q1NSLCBDT1JESUNfQ1NSX1NDQUxFKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIG51bWJlciBvZiAzMi1iaXQgd3JpdGUgZXhwZWN0ZWQgZm9yIG9uZSBjYWxjdWxhdGlvbi4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBOQVJHUyAgICAgICAgIExMX0NPUkRJQ19TZXROYldyaXRlCisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEBwYXJhbSAgTmJXcml0ZSBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfTkJXUklURV8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX05CV1JJVEVfMgorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQ09SRElDX1NldE5iV3JpdGUoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gsIHVpbnQzMl90IE5iV3JpdGUpCit7CisgIE1PRElGWV9SRUcoQ09SRElDeC0+Q1NSLCBDT1JESUNfQ1NSX05BUkdTLCBOYldyaXRlKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gbnVtYmVyIG9mIDMyLWJpdCB3cml0ZSBleHBlY3RlZCBmb3Igb25lIGNhbGN1bGF0aW9uLgorICAqIEBybXRvbGwgQ1NSICAgICAgICAgIE5BUkdTICAgICAgICAgTExfQ09SRElDX0dldE5iV3JpdGUKKyAgKiBAcGFyYW0gIENPUkRJQ3ggQ09SRElDIEluc3RhbmNlCisgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19OQldSSVRFXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfTkJXUklURV8yCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQ09SRElDX0dldE5iV3JpdGUoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9OQVJHUykpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBudW1iZXIgb2YgMzItYml0IHJlYWQgZXhwZWN0ZWQgYWZ0ZXIgb25lIGNhbGN1bGF0aW9uLgorICAqIEBybXRvbGwgQ1NSICAgICAgICAgIE5SRVMgICAgICAgICAgTExfQ09SRElDX1NldE5iUmVhZAorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcGFyYW0gIE5iUmVhZCBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfTkJSRUFEXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfTkJSRUFEXzIKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0NPUkRJQ19TZXROYlJlYWQoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gsIHVpbnQzMl90IE5iUmVhZCkKK3sKKyAgTU9ESUZZX1JFRyhDT1JESUN4LT5DU1IsIENPUkRJQ19DU1JfTlJFUywgTmJSZWFkKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gbnVtYmVyIG9mIDMyLWJpdCByZWFkIGV4cGVjdGVkIGFmdGVyIG9uZSBjYWxjdWxhdGlvbi4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBOUkVTICAgICAgICAgIExMX0NPUkRJQ19HZXROYlJlYWQKKyAgKiBAcGFyYW0gIENPUkRJQ3ggQ09SRElDIEluc3RhbmNlCisgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19OQlJFQURfMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19OQlJFQURfMgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0NPUkRJQ19HZXROYlJlYWQoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9OUkVTKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHdpZHRoIG9mIGlucHV0IGRhdGEuCisgICogQHJtdG9sbCBDU1IgICAgICAgICAgQVJHU0laRSAgICAgICBMTF9DT1JESUNfU2V0SW5TaXplCisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEBwYXJhbSAgSW5TaXplIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19JTlNJWkVfMzJCSVRTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0lOU0laRV8xNkJJVFMKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0NPUkRJQ19TZXRJblNpemUoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gsIHVpbnQzMl90IEluU2l6ZSkKK3sKKyAgTU9ESUZZX1JFRyhDT1JESUN4LT5DU1IsIENPUkRJQ19DU1JfQVJHU0laRSwgSW5TaXplKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gd2lkdGggb2YgaW5wdXQgZGF0YS4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBBUkdTSVpFICAgICAgIExMX0NPUkRJQ19HZXRJblNpemUKKyAgKiBAcGFyYW0gIENPUkRJQ3ggQ09SRElDIEluc3RhbmNlCisgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19JTlNJWkVfMzJCSVRTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0lOU0laRV8xNkJJVFMKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9DT1JESUNfR2V0SW5TaXplKENPUkRJQ19UeXBlRGVmICpDT1JESUN4KQoreworICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChDT1JESUN4LT5DU1IsIENPUkRJQ19DU1JfQVJHU0laRSkpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB3aWR0aCBvZiBvdXRwdXQgZGF0YS4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBSRVNTSVpFICAgICAgIExMX0NPUkRJQ19TZXRPdXRTaXplCisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEBwYXJhbSAgT3V0U2l6ZSBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfT1VUU0laRV8zMkJJVFMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9DT1JESUNfT1VUU0laRV8xNkJJVFMKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0NPUkRJQ19TZXRPdXRTaXplKENPUkRJQ19UeXBlRGVmICpDT1JESUN4LCB1aW50MzJfdCBPdXRTaXplKQoreworICBNT0RJRllfUkVHKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9SRVNTSVpFLCBPdXRTaXplKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gd2lkdGggb2Ygb3V0cHV0IGRhdGEuCisgICogQHJtdG9sbCBDU1IgICAgICAgICAgUkVTU0laRSAgICAgICBMTF9DT1JESUNfR2V0T3V0U2l6ZQorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX09VVFNJWkVfMzJCSVRTCisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX09VVFNJWkVfMTZCSVRTCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfQ09SRElDX0dldE91dFNpemUoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9SRVNTSVpFKSk7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0VGX0lUX01hbmFnZW1lbnQgSVRfTWFuYWdlbWVudAorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIENPUkRJQyByZXN1bHQgcmVhZHkgaW50ZXJydXB0CisgICogQHJtdG9sbCBDU1IgICAgICAgICAgSUVOICAgICAgICAgICBMTF9DT1JESUNfRW5hYmxlSVQKKyAgKiBAcGFyYW0gIENPUkRJQ3ggQ09SRElDIEluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DT1JESUNfRW5hYmxlSVQoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIFNFVF9CSVQoQ09SRElDeC0+Q1NSLCBDT1JESUNfQ1NSX0lFTik7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBDT1JESUMgcmVzdWx0IHJlYWR5IGludGVycnVwdAorICAqIEBybXRvbGwgQ1NSICAgICAgICAgIElFTiAgICAgICAgICAgTExfQ09SRElDX0Rpc2FibGVJVAorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0NPUkRJQ19EaXNhYmxlSVQoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIENMRUFSX0JJVChDT1JESUN4LT5DU1IsIENPUkRJQ19DU1JfSUVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBDT1JESUMgcmVzdWx0IHJlYWR5IGludGVycnVwdCBzdGF0ZS4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBJRU4gICAgICAgICAgIExMX0NPUkRJQ19Jc0VuYWJsZWRJVAorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9DT1JESUNfSXNFbmFibGVkSVQoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIHJldHVybiAoKFJFQURfQklUKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9JRU4pID09IChDT1JESUNfQ1NSX0lFTikpID8gMVUgOiAwVSk7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0VGX0RNQV9NYW5hZ2VtZW50IERNQV9NYW5hZ2VtZW50CisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgQ09SRElDIERNQSByZWFkIGNoYW5uZWwgcmVxdWVzdC4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBETUFSRU4gICAgICAgIExMX0NPUkRJQ19FbmFibGVETUFSZXFfUkQKKyAgKiBAcGFyYW0gIENPUkRJQ3ggQ09SRElDIEluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DT1JESUNfRW5hYmxlRE1BUmVxX1JEKENPUkRJQ19UeXBlRGVmICpDT1JESUN4KQoreworICBTRVRfQklUKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9ETUFSRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgQ09SRElDIERNQSByZWFkIGNoYW5uZWwgcmVxdWVzdC4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBETUFSRU4gICAgICAgIExMX0NPUkRJQ19EaXNhYmxlRE1BUmVxX1JECisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfQ09SRElDX0Rpc2FibGVETUFSZXFfUkQoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIENMRUFSX0JJVChDT1JESUN4LT5DU1IsIENPUkRJQ19DU1JfRE1BUkVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBDT1JESUMgRE1BIHJlYWQgY2hhbm5lbCByZXF1ZXN0IHN0YXRlLgorICAqIEBybXRvbGwgQ1NSICAgICAgICAgIERNQVJFTiAgICAgICAgTExfQ09SRElDX0lzRW5hYmxlZERNQVJlcV9SRAorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9DT1JESUNfSXNFbmFibGVkRE1BUmVxX1JEKENPUkRJQ19UeXBlRGVmICpDT1JESUN4KQoreworICByZXR1cm4gKChSRUFEX0JJVChDT1JESUN4LT5DU1IsIENPUkRJQ19DU1JfRE1BUkVOKSA9PSAoQ09SRElDX0NTUl9ETUFSRU4pKSA/IDFVIDogMFUpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBDT1JESUMgRE1BIHdyaXRlIGNoYW5uZWwgcmVxdWVzdC4KKyAgKiBAcm10b2xsIENTUiAgICAgICAgICBETUFXRU4gICAgICAgIExMX0NPUkRJQ19FbmFibGVETUFSZXFfV1IKKyAgKiBAcGFyYW0gIENPUkRJQ3ggQ09SRElDIEluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DT1JESUNfRW5hYmxlRE1BUmVxX1dSKENPUkRJQ19UeXBlRGVmICpDT1JESUN4KQoreworICBTRVRfQklUKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9ETUFXRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgQ09SRElDIERNQSB3cml0ZSBjaGFubmVsIHJlcXVlc3QuCisgICogQHJtdG9sbCBDU1IgICAgICAgICAgRE1BV0VOICAgICAgICBMTF9DT1JESUNfRGlzYWJsZURNQVJlcV9XUgorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0NPUkRJQ19EaXNhYmxlRE1BUmVxX1dSKENPUkRJQ19UeXBlRGVmICpDT1JESUN4KQoreworICBDTEVBUl9CSVQoQ09SRElDeC0+Q1NSLCBDT1JESUNfQ1NSX0RNQVdFTik7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgQ09SRElDIERNQSB3cml0ZSBjaGFubmVsIHJlcXVlc3Qgc3RhdGUuCisgICogQHJtdG9sbCBDU1IgICAgICAgICAgRE1BV0VOICAgICAgICBMTF9DT1JESUNfSXNFbmFibGVkRE1BUmVxX1dSCisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0NPUkRJQ19Jc0VuYWJsZWRETUFSZXFfV1IoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIHJldHVybiAoKFJFQURfQklUKENPUkRJQ3gtPkNTUiwgQ09SRElDX0NTUl9ETUFXRU4pID09IChDT1JESUNfQ1NSX0RNQVdFTikpID8gMVUgOiAwVSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBDT1JESUMgZGF0YSByZWdpc3RlciBhZGRyZXNzIHVzZWQgZm9yIERNQSB0cmFuc2Zlci4KKyAgKiBAcm10b2xsIFJEQVRBICAgICAgICBSRVMgICAgICAgICAgIExMX0NPUkRJQ19ETUFfR2V0UmVnQWRkclxuCisgICogQHJtdG9sbCBXREFUQSAgICAgICAgQVJHICAgICAgICAgICBMTF9DT1JESUNfRE1BX0dldFJlZ0FkZHIKKyAgKiBAcGFyYW0gIENPUkRJQ3ggQ09SRElDIEluc3RhbmNlCisgICogQHBhcmFtICBEaXJlY3Rpb24gcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfQ09SRElDX0RNQV9SRUdfREFUQV9JTgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0NPUkRJQ19ETUFfUkVHX0RBVEFfT1VUCisgICogQHJldHZhbCBBZGRyZXNzIG9mIGRhdGEgcmVnaXN0ZXIKKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9DT1JESUNfRE1BX0dldFJlZ0FkZHIoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gsIHVpbnQzMl90IERpcmVjdGlvbikKK3sKKyAgdWludDMyX3QgZGF0YV9yZWdfYWRkcjsKKworICBpZiAoRGlyZWN0aW9uID09IExMX0NPUkRJQ19ETUFfUkVHX0RBVEFfT1VUKQorICB7CisgICAgLyogcmV0dXJuIGFkZHJlc3Mgb2YgUkRBVEEgcmVnaXN0ZXIgKi8KKyAgICBkYXRhX3JlZ19hZGRyID0gKHVpbnQzMl90KSAmIChDT1JESUN4LT5SREFUQSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogcmV0dXJuIGFkZHJlc3Mgb2YgV0RBVEEgcmVnaXN0ZXIgKi8KKyAgICBkYXRhX3JlZ19hZGRyID0gKHVpbnQzMl90KSAmIChDT1JESUN4LT5XREFUQSk7CisgIH0KKworICByZXR1cm4gZGF0YV9yZWdfYWRkcjsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfTExfRUZfRkxBR19NYW5hZ2VtZW50IEZMQUdfTWFuYWdlbWVudAorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgQ09SRElDIHJlc3VsdCByZWFkeSBmbGFnIHN0YXRlLgorICAqIEBybXRvbGwgQ1NSICAgICAgICAgIFJSRFkgICAgICAgICAgTExfQ09SRElDX0lzQWN0aXZlRmxhZ19SUkRZCisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0NPUkRJQ19Jc0FjdGl2ZUZsYWdfUlJEWShDT1JESUNfVHlwZURlZiAqQ09SRElDeCkKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoQ09SRElDeC0+Q1NSLCBDT1JESUNfQ1NSX1JSRFkpID09IChDT1JESUNfQ1NSX1JSRFkpKSA/IDFVIDogMFUpOworfQorCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIENPUkRJQ19MTF9FRl9EYXRhX01hbmFnZW1lbnQgRGF0YV9NYW5hZ2VtZW50CisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBXcml0ZSAzMi1iaXQgaW5wdXQgZGF0YSBmb3IgdGhlIENPUkRJQyBwcm9jZXNzaW5nLgorICAqIEBybXRvbGwgV0RBVEEgICAgICAgIEFSRyAgICAgICAgICAgTExfQ09SRElDX1dyaXRlRGF0YQorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcGFyYW0gIEluRGF0YSAwIC4uIDB4RkZGRkZGRkYgOiAzMi1iaXQgdmFsdWUgdG8gYmUgcHJvdmlkZWQgYXMgaW5wdXQgZGF0YSBmb3IgQ09SRElDIHByb2Nlc3NpbmcuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9DT1JESUNfV3JpdGVEYXRhKENPUkRJQ19UeXBlRGVmICpDT1JESUN4LCB1aW50MzJfdCBJbkRhdGEpCit7CisgIFdSSVRFX1JFRyhDT1JESUN4LT5XREFUQSwgSW5EYXRhKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gMzItYml0IG91dHB1dCBkYXRhIG9mIENPUkRJQyBwcm9jZXNzaW5nLgorICAqIEBybXRvbGwgUkRBVEEgICAgICAgIFJFUyAgICAgICAgICAgTExfQ09SRElDX1JlYWREYXRhCisgICogQHBhcmFtICBDT1JESUN4IENPUkRJQyBJbnN0YW5jZQorICAqIEByZXR2YWwgMzItYml0IG91dHB1dCBkYXRhIG9mIENPUkRJQyBwcm9jZXNzaW5nLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0NPUkRJQ19SZWFkRGF0YShDT1JESUNfVHlwZURlZiAqQ09SRElDeCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9SRUcoQ09SRElDeC0+UkRBVEEpKTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworCisKKyNpZiBkZWZpbmVkKFVTRV9GVUxMX0xMX0RSSVZFUikKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0xMX0VGX0luaXQgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICAqIEB7CisgICovCitFcnJvclN0YXR1cyBMTF9DT1JESUNfRGVJbml0KENPUkRJQ19UeXBlRGVmICpDT1JESUN4KTsKKworLyoqCisgICogQH0KKyAgKi8KKyNlbmRpZiAvKiBVU0VfRlVMTF9MTF9EUklWRVIgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIGRlZmluZWQoQ09SRElDKSAqLworCisvKioKKyAgKiBAfQorICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU1RNMzJIN3h4X0xMX0NPUkRJQ19IICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX2RtYS5oIGIvSW5jL3N0bTMyaDd4eF9sbF9kbWEuaAppbmRleCAwOTUyMDJkLi41ZGFlOWUxIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2xsX2RtYS5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfZG1hLmgKQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BX1NldERhdGFMZW5ndGgoKS4gKi8KIAogICB1aW50MzJfdCBQZXJpcGhSZXF1ZXN0OyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgcGVyaXBoZXJhbCByZXF1ZXN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRE1BTVVYX0xMX0VDX1JFUVVFU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIERNQU1VWDFfUmVxdWVzdF9zZWxlY3Rpb24KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfRE1BX1NldFBlcmlwaFJlcXVlc3QoKS4gKi8KIApAQCAtNDc1LDcgKzQ3NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRW5hYmxlU3RyZWFtKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIFNFVF9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9FTik7CiB9CkBAIC00OTcsNyArNDk3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9EaXNhYmxlU3RyZWFtKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIENMRUFSX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX0VOKTsKIH0KQEAgLTUxOSw3ICs1MTksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQV9Jc0VuYWJsZWRTdHJlYW0oRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9FTikgPT0gKERNQV9TeENSX0VOKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNTU2LDcgKzU1Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfQ29uZmlnVHJhbnNmZXIoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgQ29uZmlndXJhdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsCiAgICAgICAgICAgICAgRE1BX1N4Q1JfRElSIHwgRE1BX1N4Q1JfQ0lSQyB8IERNQV9TeENSX1BJTkMgfCBETUFfU3hDUl9NSU5DIHwgRE1BX1N4Q1JfUFNJWkUgfCBETUFfU3hDUl9NU0laRSB8IERNQV9TeENSX1BMIHwgRE1BX1N4Q1JfUEZDVFJMLApAQCAtNTg0LDcgKzU4NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0RGF0YVRyYW5zZmVyRGlyZWN0aW9uKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0sIHVpbnQzMl90ICBEaXJlY3Rpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIE1PRElGWV9SRUcoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9ESVIsIERpcmVjdGlvbik7CiB9CkBAIC02MDksNyArNjA5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0RGF0YVRyYW5zZmVyRGlyZWN0aW9uKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9ESVIpKTsKIH0KQEAgLTYzNiw3ICs2MzYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldE1vZGUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgTW9kZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX0NJUkMgfCBETUFfU3hDUl9QRkNUUkwsIE1vZGUpOwogfQpAQCAtNjYyLDcgKzY2Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldE1vZGUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX0NJUkMgfCBETUFfU3hDUl9QRkNUUkwpKTsKIH0KQEAgLTY4Nyw3ICs2ODcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldFBlcmlwaEluY01vZGUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgSW5jcmVtZW50TW9kZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX1BJTkMsIEluY3JlbWVudE1vZGUpOwogfQpAQCAtNzExLDcgKzcxMSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldFBlcmlwaEluY01vZGUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX1BJTkMpKTsKIH0KQEAgLTczNiw3ICs3MzYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldE1lbW9yeUluY01vZGUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgSW5jcmVtZW50TW9kZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX01JTkMsIEluY3JlbWVudE1vZGUpOwogfQpAQCAtNzYwLDcgKzc2MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldE1lbW9yeUluY01vZGUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX01JTkMpKTsKIH0KQEAgLTc4Niw3ICs3ODYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldFBlcmlwaFNpemUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgIFNpemUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIE1PRElGWV9SRUcoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9QU0laRSwgU2l6ZSk7CiB9CkBAIC04MTEsNyArODExLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0UGVyaXBoU2l6ZShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfUFNJWkUpKTsKIH0KQEAgLTgzNyw3ICs4MzcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldE1lbW9yeVNpemUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgIFNpemUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIE1PRElGWV9SRUcoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9NU0laRSwgU2l6ZSk7CiB9CkBAIC04NjIsNyArODYyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0TWVtb3J5U2l6ZShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfTVNJWkUpKTsKIH0KQEAgLTg4Nyw3ICs4ODcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldEluY09mZnNldFNpemUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgT2Zmc2V0U2l6ZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX1BJTkNPUywgT2Zmc2V0U2l6ZSk7CiB9CkBAIC05MTEsNyArOTExLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0SW5jT2Zmc2V0U2l6ZShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfUElOQ09TKSk7CiB9CkBAIC05MzgsNyArOTM4LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXRTdHJlYW1Qcmlvcml0eUxldmVsKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0sIHVpbnQzMl90ICBQcmlvcml0eSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX1BMLCBQcmlvcml0eSk7CiB9CkBAIC05NjQsNyArOTY0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0U3RyZWFtUHJpb3JpdHlMZXZlbChETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfUEwpKTsKIH0KQEAgLTk4Niw3ICs5ODYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0VuYWJsZUJ1ZmZlcmFibGVUcmFuc2ZlcihETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBTRVRfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfVFJCVUZGKTsKIH0KQEAgLTEwMDgsNyArMTAwOCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRGlzYWJsZUJ1ZmZlcmFibGVUcmFuc2ZlcihETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBDTEVBUl9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9UUkJVRkYpOwogfQpAQCAtMTAzMyw3ICsxMDMzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXREYXRhTGVuZ3RoKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0sIHVpbnQzMl90IE5iRGF0YSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+TkRUUiwgRE1BX1N4TkRULCBOYkRhdGEpOwogfQpAQCAtMTA1Nyw3ICsxMDU3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0RGF0YUxlbmd0aChETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5ORFRSLCBETUFfU3hORFQpKTsKIH0KQEAgLTExNTEsNyArMTE1MSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVVNBUlQ2X1RYCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfSTJDM19SWAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0kyQzNfVFgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9EQ01JX1BTU0kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9EQ01JX1BTU0kgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfQ1JZUF9JTgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0NSWVBfT1VUCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfSEFTSF9JTgpAQCAtMTE2NSw4ICsxMTY1LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TUEk1X1RYCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMV9BCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMV9CCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMl9BCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMl9CCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMl9BICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NBSTJfQiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TV1BNSV9SWAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NXUE1JX1RYCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU1BESUZfUlhfRFQKQEAgLTExOTMsOSArMTE5MywyOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NBSTNfQiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9BREMzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VBUlQ5X1JYICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VBUlQ5X1JYICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VBUlQ5X1RYICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VTQVJUMTBfUlggKCopCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVVNBUlQxMF9SWCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9VU0FSVDEwX1RYICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0ZNQUNfUkVBRCAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfRk1BQ19XUklURSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9DT1JESUNfUkVBRCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9DT1JESUNfV1JJVEUoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9JMkM1X1JYICAgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9JMkM1X1RYICAgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yM19DSDEgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yM19DSDIgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yM19DSDMgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yM19DSDQgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yM19VUCAgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yM19UUklHICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yNF9DSDEgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yNF9DSDIgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yNF9DSDMgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yNF9DSDQgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yNF9VUCAgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9USU0yNF9UUklHICAoKikKKyAgKgogICAqIEBub3RlICAgKCopIEF2YWlsYWJpbGl0eSBkZXBlbmRzIG9uIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCkBAIC0xMjk0LDcgKzEzMTMsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VTQVJUNl9UWAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0kyQzNfUlgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9JMkMzX1RYCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfRENNSV9QU1NJCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfRENNSV9QU1NJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0NSWVBfSU4KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9DUllQX09VVAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0hBU0hfSU4KQEAgLTEzMDgsOCArMTMyNyw4IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU1BJNV9UWAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NBSTFfQQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NBSTFfQgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NBSTJfQQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NBSTJfQgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NBSTJfQSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TQUkyX0IgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU1dQTUlfUlgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TV1BNSV9UWAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NQRElGX1JYX0RUCkBAIC0xMzM2LDkgKzEzNTUsMjggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TQUkzX0IgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfQURDMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9VQVJUOV9SWCAoKikKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9VQVJUOV9SWCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9VQVJUOV9UWCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9VU0FSVDEwX1JYICgqKQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VTQVJUMTBfUlggKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVVNBUlQxMF9UWCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9GTUFDX1JFQUQgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0ZNQUNfV1JJVEUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfQ09SRElDX1JFQUQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfQ09SRElDX1dSSVRFKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfSTJDNV9SWCAgICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfSTJDNV9UWCAgICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfQ0gxICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfQ0gyICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfQ0gzICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfQ0g0ICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfVVAgICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfVFJJRyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfQ0gxICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfQ0gyICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfQ0gzICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfQ0g0ICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfVVAgICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfVFJJRyAgKCopCisgICoKICAgKiBAbm90ZSAgICgqKSBBdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiBkZXZpY2VzLgogICAqLwogX19TVEFUSUNfSU5MSU5FICB1aW50MzJfdCBMTF9ETUFfR2V0UGVyaXBoUmVxdWVzdChETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQpAQCAtMTM2OCw3ICsxNDA2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXRNZW1vcnlCdXJzdHhmZXIoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgTWJ1cnN0KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBNT0RJRllfUkVHKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfTUJVUlNULCBNYnVyc3QpOwogfQpAQCAtMTM5NCw3ICsxNDMyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0TWVtb3J5QnVyc3R4ZmVyKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9NQlVSU1QpKTsKIH0KQEAgLTE0MjEsNyArMTQ1OSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0UGVyaXBoQnVyc3R4ZmVyKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0sIHVpbnQzMl90IFBidXJzdCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX1BCVVJTVCwgUGJ1cnN0KTsKIH0KQEAgLTE0NDcsNyArMTQ4NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldFBlcmlwaEJ1cnN0eGZlcihETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfUEJVUlNUKSk7CiB9CkBAIC0xNDcyLDcgKzE1MTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldEN1cnJlbnRUYXJnZXRNZW0oRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgQ3VycmVudE1lbW9yeSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX0NULCBDdXJyZW50TWVtb3J5KTsKIH0KQEAgLTE0OTYsNyArMTUzNCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldEN1cnJlbnRUYXJnZXRNZW0oRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX0NUKSk7CiB9CkBAIC0xNTE4LDcgKzE1NTYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0VuYWJsZURvdWJsZUJ1ZmZlck1vZGUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgU0VUX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX0RCTSk7CiB9CkBAIC0xNTQwLDcgKzE1NzgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0Rpc2FibGVEb3VibGVCdWZmZXJNb2RlKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIENMRUFSX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX0RCTSk7CiB9CkBAIC0xNTY4LDcgKzE2MDYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQV9HZXRGSUZPU3RhdHVzKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkZDUiwgRE1BX1N4RkNSX0ZTKSk7CiB9CkBAIC0xNTkwLDcgKzE2MjgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0Rpc2FibGVGaWZvTW9kZShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBDTEVBUl9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkZDUiwgRE1BX1N4RkNSX0RNRElTKTsKIH0KQEAgLTE2MTIsNyArMTY1MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRW5hYmxlRmlmb01vZGUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgU0VUX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+RkNSLCBETUFfU3hGQ1JfRE1ESVMpOwogfQpAQCAtMTYzOSw3ICsxNjc3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXRGSUZPVGhyZXNob2xkKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0sIHVpbnQzMl90IFRocmVzaG9sZCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+RkNSLCBETUFfU3hGQ1JfRlRILCBUaHJlc2hvbGQpOwogfQpAQCAtMTY2NSw3ICsxNzAzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0RklGT1RocmVzaG9sZChETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5GQ1IsIERNQV9TeEZDUl9GVEgpKTsKIH0KQEAgLTE2OTYsNyArMTczNCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfQ29uZmlnRmlmbyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtLCB1aW50MzJfdCBGaWZvTW9kZSwgdWludDMyX3QgRmlmb1RocmVzaG9sZCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+RkNSLCBETUFfU3hGQ1JfRlRIIHwgRE1BX1N4RkNSX0RNRElTLCBGaWZvTW9kZSB8IEZpZm9UaHJlc2hvbGQpOwogfQpAQCAtMTcyNiw3ICsxNzY0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9Db25maWdBZGRyZXNzZXMoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgU3JjQWRkcmVzcywgdWludDMyX3QgRHN0QWRkcmVzcywgdWludDMyX3QgRGlyZWN0aW9uKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICAvKiBEaXJlY3Rpb24gTWVtb3J5IHRvIFBlcmlwaCAqLwogICBpZiAoRGlyZWN0aW9uID09IExMX0RNQV9ESVJFQ1RJT05fTUVNT1JZX1RPX1BFUklQSCkKQEAgLTE3NjIsNyArMTgwMCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0TWVtb3J5QWRkcmVzcyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtLCB1aW50MzJfdCBNZW1vcnlBZGRyZXNzKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBXUklURV9SRUcoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPk0wQVIsIE1lbW9yeUFkZHJlc3MpOwogfQpAQCAtMTc4Nyw3ICsxODI1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9TZXRQZXJpcGhBZGRyZXNzKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0sIHVpbnQzMl90IFBlcmlwaEFkZHJlc3MpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIFdSSVRFX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+UEFSLCBQZXJpcGhBZGRyZXNzKTsKIH0KQEAgLTE4MTAsNyArMTg0OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldE1lbW9yeUFkZHJlc3MoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgcmV0dXJuIChSRUFEX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+TTBBUikpOwogfQpAQCAtMTgzMyw3ICsxODcxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0UGVyaXBoQWRkcmVzcyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKFJFQURfUkVHKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5QQVIpKTsKIH0KQEAgLTE4NTgsNyArMTg5Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0TTJNU3JjQWRkcmVzcyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtLCB1aW50MzJfdCBNZW1vcnlBZGRyZXNzKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBXUklURV9SRUcoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPlBBUiwgTWVtb3J5QWRkcmVzcyk7CiB9CkBAIC0xODgzLDcgKzE5MjEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX1NldE0yTURzdEFkZHJlc3MoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgTWVtb3J5QWRkcmVzcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgV1JJVEVfUkVHKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5NMEFSLCBNZW1vcnlBZGRyZXNzKTsKIH0KQEAgLTE5MDYsNyArMTk0NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0dldE0yTVNyY0FkZHJlc3MoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgcmV0dXJuIChSRUFEX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+UEFSKSk7CiB9CkBAIC0xOTI5LDcgKzE5NjcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQV9HZXRNMk1Ec3RBZGRyZXNzKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIHJldHVybiAoUkVBRF9SRUcoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPk0wQVIpKTsKIH0KQEAgLTE5NTIsNyArMTk5MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfU2V0TWVtb3J5MUFkZHJlc3MoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSwgdWludDMyX3QgQWRkcmVzcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgTU9ESUZZX1JFRygoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+TTFBUiwgRE1BX1N4TTFBUl9NMUEsIEFkZHJlc3MpOwogfQpAQCAtMTk3NCw3ICsyMDEyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfR2V0TWVtb3J5MUFkZHJlc3MoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgcmV0dXJuICgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+TTFBUik7CiB9CkBAIC0yODkyLDcgKzI5MzAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0VuYWJsZUlUX0hUKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIFNFVF9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9IVElFKTsKIH0KQEAgLTI5MTQsNyArMjk1Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRW5hYmxlSVRfVEUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgU0VUX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX1RFSUUpOwogfQpAQCAtMjkzNiw3ICsyOTc0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9FbmFibGVJVF9UQyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBTRVRfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfVENJRSk7CiB9CkBAIC0yOTU4LDcgKzI5OTYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0VuYWJsZUlUX0RNRShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBTRVRfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfRE1FSUUpOwogfQpAQCAtMjk4MCw3ICszMDE4LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9FbmFibGVJVF9GRShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBTRVRfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5GQ1IsIERNQV9TeEZDUl9GRUlFKTsKIH0KQEAgLTMwMDIsNyArMzA0MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRGlzYWJsZUlUX0hUKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIENMRUFSX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX0hUSUUpOwogfQpAQCAtMzAyNCw3ICszMDYyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQV9EaXNhYmxlSVRfVEUoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgQ0xFQVJfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfVEVJRSk7CiB9CkBAIC0zMDQ2LDcgKzMwODQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0Rpc2FibGVJVF9UQyhETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBDTEVBUl9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9UQ0lFKTsKIH0KQEAgLTMwNjgsNyArMzEwNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFfRGlzYWJsZUlUX0RNRShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBDTEVBUl9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9ETUVJRSk7CiB9CkBAIC0zMDkwLDcgKzMxMjgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BX0Rpc2FibGVJVF9GRShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICBDTEVBUl9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkZDUiwgRE1BX1N4RkNSX0ZFSUUpOwogfQpAQCAtMzExMiw3ICszMTUwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfSXNFbmFibGVkSVRfSFQoRE1BX1R5cGVEZWYgKkRNQXgsIHVpbnQzMl90IFN0cmVhbSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OworICB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFfU3RyZWFtX1R5cGVEZWYgKikoZG1hX2Jhc2VfYWRkciArIExMX0RNQV9TVFJfT0ZGU0VUX1RBQltTdHJlYW1dKSktPkNSLCBETUFfU3hDUl9IVElFKSA9PSBETUFfU3hDUl9IVElFKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMTM0LDcgKzMxNzIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQV9Jc0VuYWJsZWRJVF9URShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+Q1IsIERNQV9TeENSX1RFSUUpID09IERNQV9TeENSX1RFSUUpID8gMVVMIDogMFVMKTsKIH0KQEAgLTMxNTYsNyArMzE5NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BX0lzRW5hYmxlZElUX1RDKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfVENJRSkgPT0gRE1BX1N4Q1JfVENJRSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzE3OCw3ICszMjE2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFfSXNFbmFibGVkSVRfRE1FKERNQV9UeXBlRGVmICpETUF4LCB1aW50MzJfdCBTdHJlYW0pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKKyAgdWludDMyX3QgZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUF4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BX1N0cmVhbV9UeXBlRGVmICopKGRtYV9iYXNlX2FkZHIgKyBMTF9ETUFfU1RSX09GRlNFVF9UQUJbU3RyZWFtXSkpLT5DUiwgRE1BX1N4Q1JfRE1FSUUpID09IERNQV9TeENSX0RNRUlFKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zMjAwLDcgKzMyMzgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQV9Jc0VuYWJsZWRJVF9GRShETUFfVHlwZURlZiAqRE1BeCwgdWludDMyX3QgU3RyZWFtKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQXg7CisgIHVpbnQzMl90IGRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQV9TdHJlYW1fVHlwZURlZiAqKShkbWFfYmFzZV9hZGRyICsgTExfRE1BX1NUUl9PRkZTRVRfVEFCW1N0cmVhbV0pKS0+RkNSLCBETUFfU3hGQ1JfRkVJRSkgPT0gRE1BX1N4RkNSX0ZFSUUpID8gMVVMIDogMFVMKTsKIH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfbGxfZG1hMmQuaCBiL0luYy9zdG0zMmg3eHhfbGxfZG1hMmQuaAppbmRleCA2OGI2ODdiLi42YmZjNDY3IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2xsX2RtYTJkLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9sbF9kbWEyZC5oCkBAIC03ODMsNyArNzgzLDYgQEAKICAgKiBAcm10b2xsIE9PUiAgICAgICAgICBMTyAgICAgICAgIExMX0RNQTJEX0dldExpbmVPZmZzZXQKICAgKiBAcGFyYW0gIERNQTJEeCBETUEyRCBJbnN0YW5jZQogICAqIEByZXR2YWwgTGluZSBvZmZzZXQgdmFsdWUgYmV0d2VlbiBNaW5fRGF0YT0wIGFuZCBNYXhfRGF0YT0weEZGRkYKLSAgQGVuZGlmCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BMkRfR2V0TGluZU9mZnNldChETUEyRF9UeXBlRGVmICpETUEyRHgpCiB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX2RtYW11eC5oIGIvSW5jL3N0bTMyaDd4eF9sbF9kbWFtdXguaAppbmRleCBmODRmMGU2Li4yNGNiNTU1IDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2xsX2RtYW11eC5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfZG1hbXV4LmgKQEAgLTE0MSw4ICsxNDEsOCBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgRE1BTVVYX1JlcXVlc3Rfc2VsZWN0aW9uIERNQU1VWCBSZXF1ZXN0IHNlbGVjdGlvbgotICAqIEBicmllZiAgICBETUEgUmVxdWVzdCBzZWxlY3Rpb24KKy8qKiBAZGVmZ3JvdXAgRE1BTVVYMV9SZXF1ZXN0X3NlbGVjdGlvbiBETUFNVVgxIFJlcXVlc3Qgc2VsZWN0aW9uCisgICogQGJyaWVmICAgIERNQU1VWDEgUmVxdWVzdCBzZWxlY3Rpb24KICAgKiBAewogICAqLwogLyogRE1BTVVYMSByZXF1ZXN0cyAqLwpAQCAtMjM5LDggKzIzOSwxMCBAQAogI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9TUEk1X1RYICAgICAgICAgIDg2VSAgLyohPCBETUFNVVgxIFNQSTUgVFggcmVxdWVzdCAgICAgICAgICovCiAjZGVmaW5lIExMX0RNQU1VWDFfUkVRX1NBSTFfQSAgICAgICAgICAgODdVICAvKiE8IERNQU1VWDEgU0FJMSBBIHJlcXVlc3QgICAgICAgICAgKi8KICNkZWZpbmUgTExfRE1BTVVYMV9SRVFfU0FJMV9CICAgICAgICAgICA4OFUgIC8qITwgRE1BTVVYMSBTQUkxIEIgcmVxdWVzdCAgICAgICAgICAqLworI2lmIGRlZmluZWQoU0FJMikKICNkZWZpbmUgTExfRE1BTVVYMV9SRVFfU0FJMl9BICAgICAgICAgICA4OVUgIC8qITwgRE1BTVVYMSBTQUkyIEEgcmVxdWVzdCAgICAgICAgICAqLwogI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9TQUkyX0IgICAgICAgICAgIDkwVSAgLyohPCBETUFNVVgxIFNBSTIgQiByZXF1ZXN0ICAgICAgICAgICovCisjZW5kaWYgLyogU0FJMiAqLwogI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9TV1BNSV9SWCAgICAgICAgIDkxVSAgLyohPCBETUFNVVgxIFNXUE1JIFJYIHJlcXVlc3QgICAgICAgICovCiAjZGVmaW5lIExMX0RNQU1VWDFfUkVRX1NXUE1JX1RYICAgICAgICAgOTJVICAvKiE8IERNQU1VWDEgU1dQTUkgVFggcmVxdWVzdCAgICAgICAgKi8KICNkZWZpbmUgTExfRE1BTVVYMV9SRVFfU1BESUZfUlhfRFQgICAgICA5M1UgIC8qITwgRE1BTVVYMSBTUERJRiBSWERUIHJlcXVlc3QgICAgICAqLwpAQCAtMjgwLDcgKzI4Miw0MiBAQAogI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9VU0FSVDEwX1JYICAgICAgMTE4VSAgLyohPCBETUFNVVgxIFVTQVJUMTAgUlggcmVxdWVzdCAgICAgICovCiAjZGVmaW5lIExMX0RNQU1VWDFfUkVRX1VTQVJUMTBfVFggICAgICAxMTlVICAvKiE8IERNQU1VWDEgVVNBUlQxMCBUWCByZXF1ZXN0ICAgICAgKi8KICNlbmRpZiAvKiBVU0FSVDEwICovCisjaWYgZGVmaW5lZChGTUFDKQorI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9GTUFDX1JFQUQgICAgICAgMTIwVSAgLyohPCBETUFNVVgxIEZNQUMgUmVhZCByZXF1ZXN0ICAgICAgICovCisjZGVmaW5lIExMX0RNQU1VWDFfUkVRX0ZNQUNfV1JJVEUgICAgICAxMjFVICAvKiE8IERNQU1VWDEgRk1BQyBXcml0ZSByZXF1ZXN0ICAgICAgKi8KKyNlbmRpZiAvKiBGTUFDICovCisjaWYgZGVmaW5lZChDT1JESUMpCisjZGVmaW5lIExMX0RNQU1VWDFfUkVRX0NPUkRJQ19SRUFEICAgICAxMjJVICAvKiE8IERNQU1VWDEgQ09SRElDIFJlYWQgcmVxdWVzdCAgICAgKi8KKyNkZWZpbmUgTExfRE1BTVVYMV9SRVFfQ09SRElDX1dSSVRFICAgIDEyM1UgIC8qITwgRE1BTVVYMSBDT1JESUMgV3JpdGUgcmVxdWVzdCAgICAqLworI2VuZGlmIC8qIENPUkRJQyAqLworI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgTExfRE1BTVVYMV9SRVFfSTJDNV9SWCAgICAgICAgIDEyNFUgIC8qITwgRE1BTVVYMSBJMkM1IFJYIHJlcXVlc3QgICAgICAgICAqLworI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9JMkM1X1RYICAgICAgICAgMTI1VSAgLyohPCBETUFNVVgxIEkyQzUgVFggcmVxdWVzdCAgICAgICAgICovCisjZW5kaWYgLyogSTJDNSAqLworI2lmIGRlZmluZWQoVElNMjMpCisjZGVmaW5lIExMX0RNQU1VWDFfUkVRX1RJTTIzX0NIMSAgICAgICAxMjZVICAvKiE8IERNQU1VWDEgVElNMjMgQ0gxIHJlcXVlc3QgICovCisjZGVmaW5lIExMX0RNQU1VWDFfUkVRX1RJTTIzX0NIMiAgICAgICAxMjdVICAvKiE8IERNQU1VWDEgVElNMjMgQ0gyIHJlcXVlc3QgICovCisjZGVmaW5lIExMX0RNQU1VWDFfUkVRX1RJTTIzX0NIMyAgICAgICAxMjhVICAvKiE8IERNQU1VWDEgVElNMjMgQ0gzIHJlcXVlc3QgICovCisjZGVmaW5lIExMX0RNQU1VWDFfUkVRX1RJTTIzX0NINCAgICAgICAxMjlVICAvKiE8IERNQU1VWDEgVElNMjMgQ0g0IHJlcXVlc3QgICovCisjZGVmaW5lIExMX0RNQU1VWDFfUkVRX1RJTTIzX1VQICAgICAgICAxMzBVICAvKiE8IERNQU1VWDEgVElNMjMgVVAgcmVxdWVzdCAgICovCisjZGVmaW5lIExMX0RNQU1VWDFfUkVRX1RJTTIzX1RSSUcgICAgICAxMzFVICAvKiE8IERNQU1VWDEgVElNMjMgVFJJRyByZXF1ZXN0ICovCisjZW5kaWYgLyogVElNMjMgKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9USU0yNF9DSDEgICAgICAgMTMyVSAgLyohPCBETUFNVVgxIFRJTTI0IENIMSByZXF1ZXN0ICAqLworI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9USU0yNF9DSDIgICAgICAgMTMzVSAgLyohPCBETUFNVVgxIFRJTTI0IENIMiByZXF1ZXN0ICAqLworI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9USU0yNF9DSDMgICAgICAgMTM0VSAgLyohPCBETUFNVVgxIFRJTTI0IENIMyByZXF1ZXN0ICAqLworI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9USU0yNF9DSDQgICAgICAgMTM1VSAgLyohPCBETUFNVVgxIFRJTTI0IENINCByZXF1ZXN0ICAqLworI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9USU0yNF9VUCAgICAgICAgMTM2VSAgLyohPCBETUFNVVgxIFRJTTI0IFVQIHJlcXVlc3QgICAqLworI2RlZmluZSBMTF9ETUFNVVgxX1JFUV9USU0yNF9UUklHICAgICAgMTM3VSAgLyohPCBETUFNVVgxIFRJTTI0IFRSSUcgcmVxdWVzdCAqLworI2VuZGlmIC8qIFRJTTI0ICovCisvKioKKyAgKiBAfQorICAqLwogCisvKiogQGRlZmdyb3VwIERNQU1VWDJfUmVxdWVzdF9zZWxlY3Rpb24gRE1BTVVYMiBSZXF1ZXN0IHNlbGVjdGlvbgorICAqIEBicmllZiAgICBETUFNVVgyIFJlcXVlc3Qgc2VsZWN0aW9uCisgICogQHsKKyAgKi8KIC8qIERNQU1VWDIgcmVxdWVzdHMgKi8KICNkZWZpbmUgTExfRE1BTVVYMl9SRVFfTUVNMk1FTSAgICAgICAgICAwVSAgLyohPCBtZW1vcnkgdG8gbWVtb3J5IHRyYW5zZmVyICAgICAgICAqLwogI2RlZmluZSBMTF9ETUFNVVgyX1JFUV9HRU5FUkFUT1IwICAgICAgIDFVICAvKiE8IERNQU1VWDIgcmVxdWVzdCBnZW5lcmF0b3IgMCAgICAgICovCkBAIC02MDMsNyArNjQwLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9VU0FSVDZfVFgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9JMkMzX1JYCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfSTJDM19UWAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0RDTUlfUFNTSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0RDTUlfUFNTSSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9DUllQX0lOCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfQ1JZUF9PVVQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9IQVNIX0lOCkBAIC02MTcsOCArNjU0LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TUEk1X1RYCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMV9BCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMV9CCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMl9BCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMl9CCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMl9BICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NBSTJfQiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TV1BNSV9SWAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NXUE1JX1RYCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU1BESUZfUlhfRFQKQEAgLTY0OCw2ICs2ODUsMjQgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9VQVJUOV9UWCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9VU0FSVDEwX1JYICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VTQVJUMTBfVFggKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfRk1BQ19SRUFEICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9GTUFDX1dSSVRFICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0NPUkRJQ19SRUFEICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0NPUkRJQ19XUklURSgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0kyQzVfUlggICAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0kyQzVfVFggICAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTIzX0NIMSAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTIzX0NIMiAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTIzX0NIMyAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTIzX0NINCAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTIzX1VQICAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTIzX1RSSUcgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTI0X0NIMSAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTI0X0NIMiAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTI0X0NIMyAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTI0X0NINCAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTI0X1VQICAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1RJTTI0X1RSSUcgICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX01FTTJNRU0KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgyX1JFUV9HRU5FUkFUT1IwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMl9SRVFfR0VORVJBVE9SMQpAQCAtNjY4LDEyICs3MjMsMTMgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgyX1JFUV9BREMzICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX0RBQzJfQ0gxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX0RGU0RNMl9GTFQwICgqKQorICAqCiAgICogQG5vdGUgICAoKikgQXZhaWxhYmlsaXR5IGRlcGVuZHMgb24gZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9TZXRSZXF1ZXN0SUQoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgUmVxdWVzdCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgTU9ESUZZX1JFRygoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCkpKSktPkNDUiwgRE1BTVVYX0N4Q1JfRE1BUkVRX0lELCBSZXF1ZXN0KTsKIH0KQEAgLTc3Nyw3ICs4MzMsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VTQVJUNl9UWAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0kyQzNfUlgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9JMkMzX1RYCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfRENNSV9QU1NJCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfRENNSV9QU1NJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0NSWVBfSU4KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9DUllQX09VVAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0hBU0hfSU4KQEAgLTc5MSw4ICs4NDcsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NQSTVfVFgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TQUkxX0EKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TQUkxX0IKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TQUkyX0EKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TQUkyX0IKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TQUkyX0EgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU0FJMl9CICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1NXUE1JX1JYCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfU1dQTUlfVFgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9TUERJRl9SWF9EVApAQCAtODIyLDYgKzg3OCwyNCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VBUlQ5X1RYICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX1VTQVJUMTBfUlggKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVVNBUlQxMF9UWCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgxX1JFUV9GTUFDX1JFQUQgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDFfUkVRX0ZNQUNfV1JJVEUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfQ09SRElDX1JFQUQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfQ09SRElDX1dSSVRFKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfSTJDNV9SWCAgICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfSTJDNV9UWCAgICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfQ0gxICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfQ0gyICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfQ0gzICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfQ0g0ICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfVVAgICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjNfVFJJRyAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfQ0gxICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfQ0gyICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfQ0gzICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfQ0g0ICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfVVAgICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMV9SRVFfVElNMjRfVFJJRyAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMl9SRVFfTUVNMk1FTQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX0dFTkVSQVRPUjAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9ETUFNVVgyX1JFUV9HRU5FUkFUT1IxCkBAIC04NDIsMTIgKzkxNiwxMyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RNQU1VWDJfUkVRX0FEQzMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMl9SRVFfREFDMl9DSDEgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRE1BTVVYMl9SRVFfREZTRE0yX0ZMVDAgKCopCisgICoKICAgKiBAbm90ZSAgICgqKSBBdmFpbGFiaWxpdHkgZGVwZW5kcyBvbiBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9HZXRSZXF1ZXN0SUQoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpLT5DQ1IsIERNQU1VWF9DeENSX0RNQVJFUV9JRCkpOwogfQpAQCAtODc4LDcgKzk1Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfU2V0U3luY1JlcXVlc3ROYihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBSZXF1ZXN0TmIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIE1PRElGWV9SRUcoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpLT5DQ1IsIERNQU1VWF9DeENSX05CUkVRLCAoUmVxdWVzdE5iIC0gMVUpIDw8IERNQU1VWF9DeENSX05CUkVRX1Bvcyk7CiB9CkBAIC05MDgsNyArOTgzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfR2V0U3luY1JlcXVlc3ROYihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKHVpbnQzMl90KSgoUkVBRF9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpLT5DQ1IsIERNQU1VWF9DeENSX05CUkVRKSA+PiBETUFNVVhfQ3hDUl9OQlJFUV9Qb3MpICsgMVUpOwogfQpAQCAtOTQzLDcgKzEwMTgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX1NldFN5bmNQb2xhcml0eShETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBQb2xhcml0eSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgTU9ESUZZX1JFRygoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCkpKSktPkNDUiwgRE1BTVVYX0N4Q1JfU1BPTCwgUG9sYXJpdHkpOwogfQpAQCAtOTc3LDcgKzEwNTIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9HZXRTeW5jUG9sYXJpdHkoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpLT5DQ1IsIERNQU1VWF9DeENSX1NQT0wpKTsKIH0KQEAgLTEwMDcsNyArMTA4Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRW5hYmxlRXZlbnRHZW5lcmF0aW9uKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIFNFVF9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpLT5DQ1IsIERNQU1VWF9DeENSX0VHRSk7CiB9CkBAIC0xMDM3LDcgKzExMTIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX0Rpc2FibGVFdmVudEdlbmVyYXRpb24oRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgQ0xFQVJfQklUKCgoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKS0+Q0NSLCBETUFNVVhfQ3hDUl9FR0UpOwogfQpAQCAtMTA2Nyw3ICsxMTQyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfSXNFbmFibGVkRXZlbnRHZW5lcmF0aW9uKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKS0+Q0NSLCBETUFNVVhfQ3hDUl9FR0UpID09IChETUFNVVhfQ3hDUl9FR0UpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xMDk3LDcgKzExNzIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX0VuYWJsZVN5bmMoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCkpKSktPkNDUiwgRE1BTVVYX0N4Q1JfU0UpOwogfQpAQCAtMTEyNyw3ICsxMjAyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9EaXNhYmxlU3luYyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBDTEVBUl9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpLT5DQ1IsIERNQU1VWF9DeENSX1NFKTsKIH0KQEAgLTExNTcsNyArMTIzMiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BTVVYX0lzRW5hYmxlZFN5bmMoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpLT5DQ1IsIERNQU1VWF9DeENSX1NFKSA9PSAoRE1BTVVYX0N4Q1JfU0UpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xMjEyLDcgKzEyODcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX1NldFN5bmNJRChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBTeW5jSUQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIE1PRElGWV9SRUcoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpLT5DQ1IsIERNQU1VWF9DeENSX1NZTkNfSUQsIFN5bmNJRCk7CiB9CkBAIC0xMjY2LDcgKzEzNDEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9HZXRTeW5jSUQoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyAoRE1BTVVYX0NDUl9TSVpFICogKENoYW5uZWwpKSkpLT5DQ1IsIERNQU1VWF9DeENSX1NZTkNfSUQpKTsKIH0KQEAgLTEyODgsNyArMTM2Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRW5hYmxlUmVxdWVzdEdlbihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBSZXF1ZXN0R2VuQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX09GRlNFVCArIChETUFNVVhfUkdDUl9TSVpFICogKFJlcXVlc3RHZW5DaGFubmVsKSkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX0dFKTsKIH0KQEAgLTEzMDYsNyArMTM4MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRGlzYWJsZVJlcXVlc3RHZW4oRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgUmVxdWVzdEdlbkNoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIENMRUFSX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX09GRlNFVCArIChETUFNVVhfUkdDUl9TSVpFICogKFJlcXVlc3RHZW5DaGFubmVsKSkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX0dFKTsKIH0KQEAgLTEzMjgsNyArMTQwMyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BTVVYX0lzRW5hYmxlZFJlcXVlc3RHZW4oRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgUmVxdWVzdEdlbkNoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX1JFUV9HRU5fT0ZGU0VUICsgKERNQU1VWF9SR0NSX1NJWkUgKiBSZXF1ZXN0R2VuQ2hhbm5lbCkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX0dFKSA9PSAoRE1BTVVYX1JHeENSX0dFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTM1NSw3ICsxNDMwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9TZXRSZXF1ZXN0R2VuUG9sYXJpdHkoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgUmVxdWVzdEdlbkNoYW5uZWwsIHVpbnQzMl90IFBvbGFyaXR5KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBNT0RJRllfUkVHKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX1JFUV9HRU5fT0ZGU0VUICsgKERNQU1VWF9SR0NSX1NJWkUgKiBSZXF1ZXN0R2VuQ2hhbm5lbCkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX0dQT0wsIFBvbGFyaXR5KTsKIH0KQEAgLTEzODEsNyArMTQ1Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BTVVYX0dldFJlcXVlc3RHZW5Qb2xhcml0eShETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBSZXF1ZXN0R2VuQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoKChETUFNVVhfUmVxdWVzdEdlbl9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyBETUFNVVhfUkVRX0dFTl9PRkZTRVQgKyAoRE1BTVVYX1JHQ1JfU0laRSAqIFJlcXVlc3RHZW5DaGFubmVsKSkpLT5SR0NSLCBETUFNVVhfUkd4Q1JfR1BPTCkpOwogfQpAQCAtMTQwNSw3ICsxNDgwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9TZXRHZW5SZXF1ZXN0TmIoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgUmVxdWVzdEdlbkNoYW5uZWwsIHVpbnQzMl90IFJlcXVlc3ROYikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgTU9ESUZZX1JFRygoKERNQU1VWF9SZXF1ZXN0R2VuX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX09GRlNFVCArIChETUFNVVhfUkdDUl9TSVpFICogUmVxdWVzdEdlbkNoYW5uZWwpKSktPlJHQ1IsIERNQU1VWF9SR3hDUl9HTkJSRVEsIChSZXF1ZXN0TmIgLSAxVSkgPDwgRE1BTVVYX1JHeENSX0dOQlJFUV9Qb3MpOwogfQpAQCAtMTQyNyw3ICsxNTAyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfR2V0R2VuUmVxdWVzdE5iKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgsIHVpbnQzMl90IFJlcXVlc3RHZW5DaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKHVpbnQzMl90KSgoUkVBRF9CSVQoKChETUFNVVhfUmVxdWVzdEdlbl9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyBETUFNVVhfUkVRX0dFTl9PRkZTRVQgKyAoRE1BTVVYX1JHQ1JfU0laRSAqIFJlcXVlc3RHZW5DaGFubmVsKSkpLT5SR0NSLCBETUFNVVhfUkd4Q1JfR05CUkVRKSA+PiBETUFNVVhfUkd4Q1JfR05CUkVRX1BvcykgKyAxVSk7CiB9CkBAIC0xNDg5LDcgKzE1NjQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX1NldFJlcXVlc3RTaWduYWxJRChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBSZXF1ZXN0R2VuQ2hhbm5lbCwgdWludDMyX3QgUmVxdWVzdFNpZ25hbElEKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBNT0RJRllfUkVHKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX1JFUV9HRU5fT0ZGU0VUICsgKERNQU1VWF9SR0NSX1NJWkUgKiBSZXF1ZXN0R2VuQ2hhbm5lbCkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX1NJR19JRCwgUmVxdWVzdFNpZ25hbElEKTsKIH0KQEAgLTE1MzUsNyArMTYxMCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BTVVYX0dldFJlcXVlc3RTaWduYWxJRChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBSZXF1ZXN0R2VuQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoKChETUFNVVhfUmVxdWVzdEdlbl9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyBETUFNVVhfUkVRX0dFTl9PRkZTRVQgKyAoRE1BTVVYX1JHQ1JfU0laRSAqIFJlcXVlc3RHZW5DaGFubmVsKSkpLT5SR0NSLCBETUFNVVhfUkd4Q1JfU0lHX0lEKSk7CiB9CkBAIC0xNTU2LDcgKzE2MzEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08wKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjApID09IChETUFNVVhfQ1NSX1NPRjApKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNTY5LDcgKzE2NDQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08xKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjEpID09IChETUFNVVhfQ1NSX1NPRjEpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNTgyLDcgKzE2NTcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08yKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjIpID09IChETUFNVVhfQ1NSX1NPRjIpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNTk1LDcgKzE2NzAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08zKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjMpID09IChETUFNVVhfQ1NSX1NPRjMpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjA4LDcgKzE2ODMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU080KERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjQpID09IChETUFNVVhfQ1NSX1NPRjQpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjIxLDcgKzE2OTYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU081KERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjUpID09IChETUFNVVhfQ1NSX1NPRjUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjM0LDcgKzE3MDksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU082KERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjYpID09IChETUFNVVhfQ1NSX1NPRjYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjQ3LDcgKzE3MjIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU083KERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjcpID09IChETUFNVVhfQ1NSX1NPRjcpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjYwLDcgKzE3MzUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU084KERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjgpID09IChETUFNVVhfQ1NSX1NPRjgpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjczLDcgKzE3NDgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU085KERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q1NSLCBETUFNVVhfQ1NSX1NPRjkpID09IChETUFNVVhfQ1NSX1NPRjkpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjg2LDcgKzE3NjEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08xMChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9DSF9TVEFUVVNfT0ZGU0VUKSktPkNTUiwgRE1BTVVYX0NTUl9TT0YxMCkgPT0gKERNQU1VWF9DU1JfU09GMTApKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNjk5LDcgKzE3NzQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08xMShETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9DSF9TVEFUVVNfT0ZGU0VUKSktPkNTUiwgRE1BTVVYX0NTUl9TT0YxMSkgPT0gKERNQU1VWF9DU1JfU09GMTEpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzEyLDcgKzE3ODcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08xMihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9DSF9TVEFUVVNfT0ZGU0VUKSktPkNTUiwgRE1BTVVYX0NTUl9TT0YxMikgPT0gKERNQU1VWF9DU1JfU09GMTIpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzI1LDcgKzE4MDAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08xMyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9DSF9TVEFUVVNfT0ZGU0VUKSktPkNTUiwgRE1BTVVYX0NTUl9TT0YxMykgPT0gKERNQU1VWF9DU1JfU09GMTMpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzM4LDcgKzE4MTMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08xNChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9DSF9TVEFUVVNfT0ZGU0VUKSktPkNTUiwgRE1BTVVYX0NTUl9TT0YxNCkgPT0gKERNQU1VWF9DU1JfU09GMTQpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzUxLDcgKzE4MjYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfU08xNShETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9DSF9TVEFUVVNfT0ZGU0VUKSktPkNTUiwgRE1BTVVYX0NTUl9TT0YxNSkgPT0gKERNQU1VWF9DU1JfU09GMTUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xNzY0LDcgKzE4MzksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfUkdPMChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdTUiwgRE1BTVVYX1JHU1JfT0YwKSA9PSAoRE1BTVVYX1JHU1JfT0YwKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTc3Nyw3ICsxODUyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfSXNBY3RpdmVGbGFnX1JHTzEoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFNVVhfUmVxdWVzdEdlblN0YXR1c19UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyBETUFNVVhfUkVRX0dFTl9TVEFUVVNfT0ZGU0VUKSktPlJHU1IsIERNQU1VWF9SR1NSX09GMSkgPT0gKERNQU1VWF9SR1NSX09GMSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE3OTAsNyArMTg2NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BTVVYX0lzQWN0aXZlRmxhZ19SR08yKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5TdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX1JFUV9HRU5fU1RBVFVTX09GRlNFVCkpLT5SR1NSLCBETUFNVVhfUkdTUl9PRjIpID09IChETUFNVVhfUkdTUl9PRjIpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xODAzLDcgKzE4NzgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfUkdPMyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdTUiwgRE1BTVVYX1JHU1JfT0YzKSA9PSAoRE1BTVVYX1JHU1JfT0YzKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTgxNiw3ICsxODkxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfSXNBY3RpdmVGbGFnX1JHTzQoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFNVVhfUmVxdWVzdEdlblN0YXR1c19UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyBETUFNVVhfUkVRX0dFTl9TVEFUVVNfT0ZGU0VUKSktPlJHU1IsIERNQU1VWF9SR1NSX09GNCkgPT0gKERNQU1VWF9SR1NSX09GNCkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE4MjksNyArMTkwNCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRE1BTVVYX0lzQWN0aXZlRmxhZ19SR081KERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5TdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX1JFUV9HRU5fU1RBVFVTX09GRlNFVCkpLT5SR1NSLCBETUFNVVhfUkdTUl9PRjUpID09IChETUFNVVhfUkdTUl9PRjUpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0xODQyLDcgKzE5MTcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0FjdGl2ZUZsYWdfUkdPNihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdTUiwgRE1BTVVYX1JHU1JfT0Y2KSA9PSAoRE1BTVVYX1JHU1JfT0Y2KSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTg1NSw3ICsxOTMwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfSXNBY3RpdmVGbGFnX1JHTzcoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChETUFNVVhfUmVxdWVzdEdlblN0YXR1c19UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyBETUFNVVhfUkVRX0dFTl9TVEFUVVNfT0ZGU0VUKSktPlJHU1IsIERNQU1VWF9SR1NSX09GNykgPT0gKERNQU1VWF9SR1NSX09GNykpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE4NjgsNyArMTk0Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPMChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0YwKTsKIH0KQEAgLTE4ODEsNyArMTk1Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPMShETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0YxKTsKIH0KQEAgLTE4OTQsNyArMTk2OSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPMihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0YyKTsKIH0KQEAgLTE5MDcsNyArMTk4Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPMyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0YzKTsKIH0KQEAgLTE5MjAsNyArMTk5NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPNChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0Y0KTsKIH0KQEAgLTE5MzMsNyArMjAwOCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPNShETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0Y1KTsKIH0KQEAgLTE5NDYsNyArMjAyMSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPNihETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0Y2KTsKIH0KQEAgLTE5NTksNyArMjAzNCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPNyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0Y3KTsKIH0KQEAgLTE5NzIsNyArMjA0Nyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPOChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0Y4KTsKIH0KQEAgLTE5ODUsNyArMjA2MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPOShETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0Y5KTsKIH0KQEAgLTE5OTgsNyArMjA3Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPMTAoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9DaGFubmVsU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9DSF9TVEFUVVNfT0ZGU0VUKSktPkNGUiwgRE1BTVVYX0NGUl9DU09GMTApOwogfQpAQCAtMjAxMSw3ICsyMDg2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9DbGVhckZsYWdfU08xMShETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0YxMSk7CiB9CkBAIC0yMDI0LDcgKzIwOTksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX0NsZWFyRmxhZ19TTzEyKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIFNFVF9CSVQoKChETUFNVVhfQ2hhbm5lbFN0YXR1c19UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyBETUFNVVhfQ0hfU1RBVFVTX09GRlNFVCkpLT5DRlIsIERNQU1VWF9DRlJfQ1NPRjEyKTsKIH0KQEAgLTIwMzcsNyArMjExMiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1NPMTMoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9DaGFubmVsU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9DSF9TVEFUVVNfT0ZGU0VUKSktPkNGUiwgRE1BTVVYX0NGUl9DU09GMTMpOwogfQpAQCAtMjA1MCw3ICsyMTI1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9DbGVhckZsYWdfU08xNChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4KQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBTRVRfQklUKCgoRE1BTVVYX0NoYW5uZWxTdGF0dXNfVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX0NIX1NUQVRVU19PRkZTRVQpKS0+Q0ZSLCBETUFNVVhfQ0ZSX0NTT0YxNCk7CiB9CkBAIC0yMDYzLDcgKzIxMzgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX0NsZWFyRmxhZ19TTzE1KERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKkRNQU1VWHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIFNFVF9CSVQoKChETUFNVVhfQ2hhbm5lbFN0YXR1c19UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyBETUFNVVhfQ0hfU1RBVFVTX09GRlNFVCkpLT5DRlIsIERNQU1VWF9DRlJfQ1NPRjE1KTsKIH0KQEAgLTIwNzYsNyArMjE1MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1JHTzAoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdDRlIsIERNQU1VWF9SR0NGUl9DT0YwKTsKIH0KQEAgLTIwODksNyArMjE2NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1JHTzEoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdDRlIsIERNQU1VWF9SR0NGUl9DT0YxKTsKIH0KQEAgLTIxMDIsNyArMjE3Nyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1JHTzIoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdDRlIsIERNQU1VWF9SR0NGUl9DT0YyKTsKIH0KQEAgLTIxMTUsNyArMjE5MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1JHTzMoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdDRlIsIERNQU1VWF9SR0NGUl9DT0YzKTsKIH0KQEAgLTIxMjgsNyArMjIwMyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1JHTzQoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdDRlIsIERNQU1VWF9SR0NGUl9DT0Y0KTsKIH0KQEAgLTIxNDEsNyArMjIxNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1JHTzUoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdDRlIsIERNQU1VWF9SR0NGUl9DT0Y1KTsKIH0KQEAgLTIxNTQsNyArMjIyOSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1JHTzYoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdDRlIsIERNQU1VWF9SR0NGUl9DT0Y2KTsKIH0KQEAgLTIxNjcsNyArMjI0Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfQ2xlYXJGbGFnX1JHTzcoRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9SZXF1ZXN0R2VuU3RhdHVzX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIERNQU1VWF9SRVFfR0VOX1NUQVRVU19PRkZTRVQpKS0+UkdDRlIsIERNQU1VWF9SR0NGUl9DT0Y3KTsKIH0KQEAgLTIyMDUsNyArMjI4MCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRW5hYmxlSVRfU08oRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgU0VUX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoKHVpbnQzMl90KShkbWFtdXhfYmFzZV9hZGRyICsgKERNQU1VWF9DQ1JfU0laRSAqIChDaGFubmVsKSkpKSktPkNDUiwgRE1BTVVYX0N4Q1JfU09JRSk7CiB9CkBAIC0yMjM1LDcgKzIzMTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRE1BTVVYX0Rpc2FibGVJVF9TTyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CisgIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKIAogICBDTEVBUl9CSVQoKChETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICopKCh1aW50MzJfdCkoZG1hbXV4X2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCkpKSkpLT5DQ1IsIERNQU1VWF9DeENSX1NPSUUpOwogfQpAQCAtMjI2NSw3ICsyMzQwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9ETUFNVVhfSXNFbmFibGVkSVRfU08oRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKERNQU1VWF9DaGFubmVsX1R5cGVEZWYgKikoZG1hbXV4X2Jhc2VfYWRkciArIChETUFNVVhfQ0NSX1NJWkUgKiAoQ2hhbm5lbCkpKSktPkNDUiwgRE1BTVVYX0N4Q1JfU09JRSkpOwogfQpAQCAtMjI4Nyw3ICsyMzYyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RNQU1VWF9FbmFibGVJVF9SR08oRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgUmVxdWVzdEdlbkNoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIFNFVF9CSVQoKChETUFNVVhfUmVxdWVzdEdlbl9UeXBlRGVmICopKGRtYW11eF9iYXNlX2FkZHIgKyBETUFNVVhfUkVRX0dFTl9PRkZTRVQgKyAoRE1BTVVYX1JHQ1JfU0laRSAqIFJlcXVlc3RHZW5DaGFubmVsKSkpLT5SR0NSLCBETUFNVVhfUkd4Q1JfT0lFKTsKIH0KQEAgLTIzMDksNyArMjM4NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9ETUFNVVhfRGlzYWJsZUlUX1JHTyhETUFNVVhfQ2hhbm5lbF9UeXBlRGVmICpETUFNVVh4LCB1aW50MzJfdCBSZXF1ZXN0R2VuQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OworICB1aW50MzJfdCBkbWFtdXhfYmFzZV9hZGRyID0gKHVpbnQzMl90KURNQU1VWHg7CiAKICAgQ0xFQVJfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX1JFUV9HRU5fT0ZGU0VUICsgKERNQU1VWF9SR0NSX1NJWkUgKiBSZXF1ZXN0R2VuQ2hhbm5lbCkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX09JRSk7CiB9CkBAIC0yMzMxLDcgKzI0MDYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0RNQU1VWF9Jc0VuYWJsZWRJVF9SR08oRE1BTVVYX0NoYW5uZWxfVHlwZURlZiAqRE1BTVVYeCwgdWludDMyX3QgUmVxdWVzdEdlbkNoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRtYW11eF9iYXNlX2FkZHIgPSAodWludDMyX3QpRE1BTVVYeDsKKyAgdWludDMyX3QgZG1hbXV4X2Jhc2VfYWRkciA9ICh1aW50MzJfdClETUFNVVh4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoRE1BTVVYX1JlcXVlc3RHZW5fVHlwZURlZiAqKShkbWFtdXhfYmFzZV9hZGRyICsgRE1BTVVYX1JFUV9HRU5fT0ZGU0VUICsgKERNQU1VWF9SR0NSX1NJWkUgKiBSZXF1ZXN0R2VuQ2hhbm5lbCkpKS0+UkdDUiwgRE1BTVVYX1JHeENSX09JRSkgPT0gKERNQU1VWF9SR3hDUl9PSUUpKSA/IDFVTCA6IDBVTCk7CiB9CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX2V4dGkuaCBiL0luYy9zdG0zMmg3eHhfbGxfZXh0aS5oCmluZGV4IGJlNDZiMjQuLjFlMjVlMDEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfZXh0aS5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfZXh0aS5oCkBAIC0xNTIsOSArMTUyLDEzIEBACiAjZGVmaW5lIExMX0VYVElfTElORV81NCAgICAgICAgICAgICAgICBFWFRJX0lNUjJfSU01NCAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgNTQgKi8KICNkZWZpbmUgTExfRVhUSV9MSU5FXzU1ICAgICAgICAgICAgICAgIEVYVElfSU1SMl9JTTU1ICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSA1NSAqLwogI2RlZmluZSBMTF9FWFRJX0xJTkVfNTYgICAgICAgICAgICAgICAgRVhUSV9JTVIyX0lNNTYgICAgICAgICAgLyohPCBFeHRlbmRlZCBsaW5lIDU2ICovCisjaWYgZGVmaW5lZChFWFRJX0lNUjJfSU01NykKICNkZWZpbmUgTExfRVhUSV9MSU5FXzU3ICAgICAgICAgICAgICAgIEVYVElfSU1SMl9JTTU3ICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSA1NyAqLworI2VuZGlmIC8qRVhUSV9JTVIyX0lNNTcqLwogI2RlZmluZSBMTF9FWFRJX0xJTkVfNTggICAgICAgICAgICAgICAgRVhUSV9JTVIyX0lNNTggICAgICAgICAgLyohPCBFeHRlbmRlZCBsaW5lIDU4ICovCisjaWYgZGVmaW5lZChFWFRJX0lNUjJfSU01OSkKICNkZWZpbmUgTExfRVhUSV9MSU5FXzU5ICAgICAgICAgICAgICAgIEVYVElfSU1SMl9JTTU5ICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSA1OSAqLworI2VuZGlmIC8qRVhUSV9JTVIyX0lNNTkqLwogI2RlZmluZSBMTF9FWFRJX0xJTkVfNjAgICAgICAgICAgICAgICAgRVhUSV9JTVIyX0lNNjAgICAgICAgICAgLyohPCBFeHRlbmRlZCBsaW5lIDYwICovCiAjZGVmaW5lIExMX0VYVElfTElORV82MSAgICAgICAgICAgICAgICBFWFRJX0lNUjJfSU02MSAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgNjEgKi8KICNkZWZpbmUgTExfRVhUSV9MSU5FXzYyICAgICAgICAgICAgICAgIEVYVElfSU1SMl9JTTYyICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSA2MiAqLwpAQCAtMTkyLDggKzE5NiwxNyBAQAogI2VuZGlmIC8qIEVUSCAqLwogI2RlZmluZSBMTF9FWFRJX0xJTkVfODcgICAgICAgICAgICAgICAgRVhUSV9JTVIzX0lNODcgICAgICAgICAgLyohPCBFeHRlbmRlZCBsaW5lIDg3ICovCiAjaWYgZGVmaW5lZChEVFMpCi0jZGVmaW5lIExMX0VYVElfTElORV84OCAgICAgICAgICAgICAgICBFWFRJX0lNUjNfSU04OCAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgODcgKi8KKyNkZWZpbmUgTExfRVhUSV9MSU5FXzg4ICAgICAgICAgICAgICAgIEVYVElfSU1SM19JTTg4ICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSA4OCAqLwogI2VuZGlmIC8qIERUUyAqLworI2lmIGRlZmluZWQoRVhUSV9JTVIzX0lNODkpCisjZGVmaW5lIExMX0VYVElfTElORV84OSAgICAgICAgICAgICAgICBFWFRJX0lNUjNfSU04OSAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgODkgKi8KKyNlbmRpZiAvKiBFWFRJX0lNUjNfSU04OSAqLworI2lmIGRlZmluZWQoRVhUSV9JTVIzX0lNOTApCisjZGVmaW5lIExMX0VYVElfTElORV85MCAgICAgICAgICAgICAgICBFWFRJX0lNUjNfSU05MCAgICAgICAgICAvKiE8IEV4dGVuZGVkIGxpbmUgOTAgKi8KKyNlbmRpZiAvKiBFWFRJX0lNUjNfSU05MCAqLworI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgTExfRVhUSV9MSU5FXzkxICAgICAgICAgICAgICAgIEVYVElfSU1SM19JTTkxICAgICAgICAgIC8qITwgRXh0ZW5kZWQgbGluZSA5MSAqLworI2VuZGlmIC8qIEkyQzUgKi8KICNkZWZpbmUgTExfRVhUSV9MSU5FX0FMTF82NF85NSAgICAgICAgIEVYVElfSU1SM19JTSAgICAgICAgICAgIC8qITwgQWxsIEV4dGVuZGVkIGxpbmUgbm90IHJlc2VydmVkKi8KIAogCkBAIC0zNzEsOCArMzg0LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ2ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80NwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80OAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80OQpAQCAtMzgzLDE0ICszOTYsMTYgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTYKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTcKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTcgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU5CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU5ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMzJfNjMKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9FbmFibGVJVF8zMl82Myh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTQxNCwxOCArNDI5LDI1IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzcyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzczCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc0Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc2Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc3Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc1ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNzcgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OCAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc5ICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODAgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0ICgqKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg3CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg4ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84OSAoKikgCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzkwICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV85MSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzY0Xzk1CisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgb25seSBkZWZpbmVkIGluIGR1YWwgY29yZSBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9FbmFibGVJVF82NF85NSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTQ5NSw4ICs1MTcsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80MwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80NAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80NgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80NCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDYgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ3CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ4CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ5CkBAIC01MDcsMTQgKzUyOSwxNiBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTkgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzYwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzYxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzYyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzYzCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FX0FMTF8zMl82MworICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0Rpc2FibGVJVF8zMl82Myh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTUzNywxOCArNTYxLDI1IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzcyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzczCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc0Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc2Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc3Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc1ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNzcgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OCAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc5ICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODAgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0ICgqKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg3CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg4ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84OSAoKikgCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzkwICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV85MSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzY0Xzk1CisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgb25seSBkZWZpbmVkIGluIGR1YWwgY29yZSBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9EaXNhYmxlSVRfNjRfOTUodWludDMyX3QgRXh0aUxpbmUpCkBAIC02MTgsOCArNjQ5LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ2ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80NwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80OAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80OQpAQCAtNjMwLDE0ICs2NjEsMTYgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTYKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTcKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTcgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU5CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU5ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMzJfNjMKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0VYVElfSXNFbmFibGVkSVRfMzJfNjModWludDMyX3QgRXh0aUxpbmUpCkBAIC02NjEsMTggKzY5NCwyNSBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83MgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83MwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNzYgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc3ICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNzggKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OSAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgwICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODIgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NCAoKiopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84OCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODkgKCopIAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV85MCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfOTEgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FX0FMTF82NF85NQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCisgICogICAgICAgICAoKiopIHZhbHVlIG9ubHkgZGVmaW5lZCBpbiBkdWFsIGNvcmUgZGV2aWNlcy4KICAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9FWFRJX0lzRW5hYmxlZElUXzY0Xzk1KHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMTEyNCw4ICsxMTY0LDggQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDIKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDMKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ2ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80NwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80OAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80OQpAQCAtMTEzNiwxNCArMTE3NiwxNiBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV81NyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTkKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTkgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzYwCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzYxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzYyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzYzCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FX0FMTF8zMl82MworICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0VuYWJsZUV2ZW50XzMyXzYzKHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMTE2NiwxOCArMTIwOCwyNSBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83MgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83MwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNzYgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc3ICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNzggKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OSAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgwICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODIgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NCAoKiopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NworICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84OCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODkgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzkwICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV85MSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzY0Xzk1CisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgb25seSBkZWZpbmVkIGluIGR1YWwgY29yZSBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9FbmFibGVFdmVudF82NF85NSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTEyNDUsOCArMTI5NCw4IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQzCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ0Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ0ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80NiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDkKQEAgLTEyNTcsMTQgKzEzMDYsMTYgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTYKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTcKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTcgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU5CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU5ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMzJfNjMKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRVhUSV9EaXNhYmxlRXZlbnRfMzJfNjModWludDMyX3QgRXh0aUxpbmUpCkBAIC0xMjg3LDE4ICsxMzM4LDI1IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzcyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzczCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc0Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc2Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc3Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc1ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNzcgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OCAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc5ICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODAgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0ICgqKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg3CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg4ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84OSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfOTAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzkxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfNjRfOTUKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKCoqKSB2YWx1ZSBvbmx5IGRlZmluZWQgaW4gZHVhbCBjb3JlIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0Rpc2FibGVFdmVudF82NF85NSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTEzNjcsOCArMTQyNSw4IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQxCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQzCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ0Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzQ0ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV80NiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDgKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNDkKQEAgLTEzNzksMTQgKzE0MzcsMTYgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTQKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTUKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTYKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTcKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNTcgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU5CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzU5ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV82MwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfMzJfNjMKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0VYVElfSXNFbmFibGVkRXZlbnRfMzJfNjModWludDMyX3QgRXh0aUxpbmUpCkBAIC0xNDA5LDE4ICsxNDY5LDI1IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzcyCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzczCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc0Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc2Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc3Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc4Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc5Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgwCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc1ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83NiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfNzcgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV83OCAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzc5ICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODAgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0ICgqKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg3CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg4ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84OSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfOTAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzkxICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV9BTExfNjRfOTUKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgorICAqICAgICAgICAgKCoqKSB2YWx1ZSBvbmx5IGRlZmluZWQgaW4gZHVhbCBjb3JlIGRldmljZXMuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRVhUSV9Jc0VuYWJsZWRFdmVudF82NF85NSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTE4ODIsMTAgKzE5NDksMTMgQEAKICAgKiAgICAgICBjb25kaXRpb24uCiAgICogQHJtdG9sbCBSVFNSMyAgICAgICAgUlR4ICAgICAgICAgICBMTF9FWFRJX0VuYWJsZVJpc2luZ1RyaWdfNjRfOTUKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2ICgqKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG9ubHkgZGVmaW5lZCBpbiBkdWFsIGNvcmUgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0VuYWJsZVJpc2luZ1RyaWdfNjRfOTUodWludDMyX3QgRXh0aUxpbmUpCkBAIC0xOTY1LDEwICsyMDM1LDEzIEBACiAgICogICAgICAgY29uZGl0aW9uLgogICAqIEBybXRvbGwgUlRTUjMgICAgICAgIFJUeCAgICAgICAgICAgTExfRVhUSV9EaXNhYmxlUmlzaW5nVHJpZ182NF85NQogICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYgKCoqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgb25seSBkZWZpbmVkIGluIGR1YWwgY29yZSBkZXZpY2VzLgorICAqICAgICAgICAgKCoqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0VYVElfRGlzYWJsZVJpc2luZ1RyaWdfNjRfOTUodWludDMyX3QgRXh0aUxpbmUpCkBAIC0yMDI3LDEwICsyMTAwLDEzIEBACiAgICogQGJyaWVmICBDaGVjayBpZiByaXNpbmcgZWRnZSB0cmlnZ2VyIGlzIGVuYWJsZWQgZm9yIExpbmVzIGluIHJhbmdlIDY0IHRvIDk1CiAgICogQHJtdG9sbCBSVFNSMyAgICAgICAgUlR4ICAgICAgICAgICBMTF9FWFRJX0lzRW5hYmxlZFJpc2luZ1RyaWdfNjRfOTUKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2ICgqKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG9ubHkgZGVmaW5lZCBpbiBkdWFsIGNvcmUgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRVhUSV9Jc0VuYWJsZWRSaXNpbmdUcmlnXzY0Xzk1KHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMjExNywxMCArMjE5MywxMyBAQAogICAqICAgICAgIGNvbmRpdGlvbi4KICAgKiBAcm10b2xsIEZUU1IzICAgICAgICBGVHggICAgICAgICAgIExMX0VYVElfRW5hYmxlRmFsbGluZ1RyaWdfNjRfOTUKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2ICgqKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG9ubHkgZGVmaW5lZCBpbiBkdWFsIGNvcmUgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0VuYWJsZUZhbGxpbmdUcmlnXzY0Xzk1KHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMjE5NywxMCArMjI3NiwxMyBAQAogICAqICAgICAgIEluIHRoaXMgY2FzZSwgYm90aCBnZW5lcmF0ZSBhIHRyaWdnZXIgY29uZGl0aW9uLgogICAqIEBybXRvbGwgRlRTUjMgICAgICAgIEZUeCAgICAgICAgICAgTExfRVhUSV9EaXNhYmxlRmFsbGluZ1RyaWdfNjRfOTUKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2ICgqKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG9ubHkgZGVmaW5lZCBpbiBkdWFsIGNvcmUgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0Rpc2FibGVGYWxsaW5nVHJpZ182NF85NSh1aW50MzJfdCBFeHRpTGluZSkKQEAgLTIyNTksMTAgKzIzNDEsMTMgQEAKICAgKiBAYnJpZWYgIENoZWNrIGlmIGZhbGxpbmcgZWRnZSB0cmlnZ2VyIGlzIGVuYWJsZWQgZm9yIExpbmVzIGluIHJhbmdlIDY0IHRvIDk1CiAgICogQHJtdG9sbCBGVFNSMyAgICAgICAgRlR4ICAgICAgICAgICBMTF9FWFRJX0lzRW5hYmxlZEZhbGxpbmdUcmlnXzY0Xzk1CiAgICogQHBhcmFtICBFeHRpTGluZSBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODIgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NiAoKiopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBvbmx5IGRlZmluZWQgaW4gZHVhbCBjb3JlIGRldmljZXMuCisgICogICAgICAgICAoKiopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0VYVElfSXNFbmFibGVkRmFsbGluZ1RyaWdfNjRfOTUodWludDMyX3QgRXh0aUxpbmUpCkBAIC0yMzQ0LDEwICsyNDI5LDEzIEBACiAgICogICAgICAgcmVnaXN0ZXIgKGJ5IHdyaXRpbmcgYSAxIGludG8gdGhlIGJpdCkKICAgKiBAcm10b2xsIFNXSUVSMyAgICAgICBTV0l4ICAgICAgICAgIExMX0VYVElfR2VuZXJhdGVTV0lfNjRfOTUKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2ICgqKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG9ubHkgZGVmaW5lZCBpbiBkdWFsIGNvcmUgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9FWFRJX0dlbmVyYXRlU1dJXzY0Xzk1KHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMjQyMiwxMSArMjUxMCwxMyBAQAogICAqICAgICAgIGxpbmUuIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEgdG8gdGhlIGJpdC4KICAgKiBAcm10b2xsIFBSMyAgICAgICAgICBQSUZ4ICAgICAgICAgICBMTF9FWFRJX0lzQWN0aXZlRmxhZ182NF85NQogICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfQUxMXzY0Xzk1CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2ICgqKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG9ubHkgZGVmaW5lZCBpbiBkdWFsIGNvcmUgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRVhUSV9Jc0FjdGl2ZUZsYWdfNjRfOTUodWludDMyX3QgRXh0aUxpbmUpCkBAIC0yNDkzLDEwICsyNTgzLDEzIEBACiAgICogICAgICAgbGluZS4gVGhpcyBiaXQgaXMgY2xlYXJlZCBieSB3cml0aW5nIGEgMSB0byB0aGUgYml0LgogICAqIEBybXRvbGwgUFIzICAgICAgICAgIFBJRnggICAgICAgICAgIExMX0VYVElfUmVhZEZsYWdfNjRfOTUKICAgKiBAcGFyYW0gIEV4dGlMaW5lIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84MiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODQgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg1Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg2ICgqKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG9ubHkgZGVmaW5lZCBpbiBkdWFsIGNvcmUgZGV2aWNlcy4KKyAgKiAgICAgICAgICgqKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBAbm90ZSBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgc2VsZWN0ZWQgZWRnZSBldmVudCBhcnJpdmVzIG9uIHRoZSBpbnRlcnJ1cHQKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9FWFRJX1JlYWRGbGFnXzY0Xzk1KHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMjU2MCwxMCArMjY1MywxMyBAQAogICAqICAgICAgIGxpbmUuIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgd3JpdGluZyBhIDEgdG8gdGhlIGJpdC4KICAgKiBAcm10b2xsIFBSMyAgICAgICAgICBQSUZ4ICAgICAgICAgICBMTF9FWFRJX0NsZWFyRmxhZ182NF85NQogICAqIEBwYXJhbSAgRXh0aUxpbmUgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyCi0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzg0CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9MSU5FXzgyICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfTElORV84NCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODUKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0xJTkVfODYgKCoqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgb25seSBkZWZpbmVkIGluIGR1YWwgY29yZSBkZXZpY2VzLgorICAqICAgICAgICAgKCoqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0VYVElfQ2xlYXJGbGFnXzY0Xzk1KHVpbnQzMl90IEV4dGlMaW5lKQpAQCAtMjk1NSw4ICszMDUxLDEyIEBACiAgICogQHBhcmFtICBDbHJTcmMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0RNQUNINgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfRE1BQ0g3Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU00ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU01ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU0yICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU0zICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EM19FWFRJX1NldFBlbmRDbGVhclNlbF8wXzE1KHVpbnQzMl90IEV4dGlMaW5lLCB1aW50MzJfdCBDbHJTcmMpCkBAIC0yOTc1LDggKzMwNzUsMTIgQEAKICAgKiBAcGFyYW0gIENsclNyYyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfRE1BQ0g2CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9ETUFDSDcKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU01CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTIgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTMgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0QzX0VYVElfU2V0UGVuZENsZWFyU2VsXzE2XzMxKHVpbnQzMl90IEV4dGlMaW5lLCB1aW50MzJfdCBDbHJTcmMpCkBAIC0yOTk1LDggKzMwOTksMTIgQEAKICAgKiBAcGFyYW0gIENsclNyYyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfRE1BQ0g2CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9ETUFDSDcKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU01CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTIgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTMgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0QzX0VYVElfU2V0UGVuZENsZWFyU2VsXzMyXzQ3KHVpbnQzMl90IEV4dGlMaW5lLCB1aW50MzJfdCBDbHJTcmMpCkBAIC0zMDE3LDggKzMxMjUsMTIgQEAKICAgKiBAcGFyYW0gIENsclNyYyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfRE1BQ0g2CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9ETUFDSDcKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU01CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTIgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTMgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0QzX0VYVElfU2V0UGVuZENsZWFyU2VsXzQ4XzYzKHVpbnQzMl90IEV4dGlMaW5lLCB1aW50MzJfdCBDbHJTcmMpCkBAIC0zMDQ5LDggKzMxNjEsMTIgQEAKICAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9ETUFDSDYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0RNQUNINwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU00Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNMiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNMyAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0QzX0VYVElfR2V0UGVuZENsZWFyU2VsXzBfMTUodWludDMyX3QgRXh0aUxpbmUpCiB7CkBAIC0zMDY4LDggKzMxODQsMTIgQEAKICAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9ETUFDSDYKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0RNQUNINwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU00Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNMiAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNMyAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0QzX0VYVElfR2V0UGVuZENsZWFyU2VsXzE2XzMxKHVpbnQzMl90IEV4dGlMaW5lKQogewpAQCAtMzA4Niw4ICszMjA2LDEyIEBACiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfRE1BQ0g2CiAgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9ETUFDSDcKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU01CisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTQgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTUgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTIgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTMgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9EM19FWFRJX0dldFBlbmRDbGVhclNlbF8zMl80Nyh1aW50MzJfdCBFeHRpTGluZSkKIHsKQEAgLTMxMDcsOCArMzIzMSwxMiBAQAogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0RNQUNINgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfRE1BQ0g3Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfRVhUSV9EM19QRU5EX0NMUl9MUFRJTTQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9FWFRJX0QzX1BFTkRfQ0xSX0xQVElNNQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU00ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU01ICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU0yICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0VYVElfRDNfUEVORF9DTFJfTFBUSU0zICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRDNfRVhUSV9HZXRQZW5kQ2xlYXJTZWxfNDhfNjModWludDMyX3QgRXh0aUxpbmUpCiB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX2ZtYWMuaCBiL0luYy9zdG0zMmg3eHhfbGxfZm1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYzAxOGMKLS0tIC9kZXYvbnVsbAorKysgYi9JbmMvc3RtMzJoN3h4X2xsX2ZtYWMuaApAQCAtMCwwICsxLDEwNDkgQEAKKy8qKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAZmlsZSAgICBzdG0zMmg3eHhfbGxfZm1hYy5oCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBIZWFkZXIgZmlsZSBvZiBGTUFDIExMIG1vZHVsZS4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCisgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqLworCisvKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmbmRlZiBTVE0zMkg3eHhfTExfRk1BQ19ICisjZGVmaW5lIFNUTTMySDd4eF9MTF9GTUFDX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgInN0bTMyaDd4eC5oIgorCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJIN3h4X0xMX0RyaXZlcgorICAqIEB7CisgICovCisKKyNpZiBkZWZpbmVkKEZNQUMpCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19MTCBGTUFDCisgICogQHsKKyAgKi8KKworLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBkZWZpbmVkKFVTRV9GVUxMX0xMX0RSSVZFUikKKy8qKiBAZGVmZ3JvdXAgRk1BQ19MTF9Qcml2YXRlX01hY3JvcyBGTUFDIFByaXZhdGUgTWFjcm9zCisgICogQHsKKyAgKi8KKy8qKgorICAqIEB9CisgICovCisjZW5kaWYgLypVU0VfRlVMTF9MTF9EUklWRVIqLworCisvKiBFeHBvcnRlZCB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFeHBvcnRlZCBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBGTUFDX0xMX0V4cG9ydGVkX0NvbnN0YW50cyBGTUFDIEV4cG9ydGVkIENvbnN0YW50cworICAqIEB7CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19MTF9FQ19HRVRfRkxBRyBHZXQgRmxhZyBEZWZpbmVzCisgICogQGJyaWVmICAgIEZsYWcgZGVmaW5lcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIExMX0ZNQUNfUmVhZFJlZyBmdW5jdGlvbgorICAqIEB7CisgICovCisjZGVmaW5lIExMX0ZNQUNfU1JfU0FUICAgICAgICAgICAgICAgICAgICAgRk1BQ19TUl9TQVQKKyNkZWZpbmUgTExfRk1BQ19TUl9VTkZMICAgICAgICAgICAgICAgICAgICBGTUFDX1NSX1VORkwKKyNkZWZpbmUgTExfRk1BQ19TUl9PVkZMICAgICAgICAgICAgICAgICAgICBGTUFDX1NSX09WRkwKKyNkZWZpbmUgTExfRk1BQ19TUl9YMUZVTEwgICAgICAgICAgICAgICAgICBGTUFDX1NSX1gxRlVMTAorI2RlZmluZSBMTF9GTUFDX1NSX1lFTVBUWSAgICAgICAgICAgICAgICAgIEZNQUNfU1JfWUVNUFRZCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfTExfRUNfSVQgSVQgRGVmaW5lcworICAqIEBicmllZiAgICBJVCBkZWZpbmVzIHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggTExfRk1BQ19SZWFkUmVnIGFuZCBMTF9GTUFDX1dyaXRlUmVnIGZ1bmN0aW9ucworICAqIEB7CisgICovCisjZGVmaW5lIExMX0ZNQUNfQ1JfU0FUSUVOICAgICAgICAgICAgICAgICAgRk1BQ19DUl9TQVRJRU4KKyNkZWZpbmUgTExfRk1BQ19DUl9VTkZMSUVOICAgICAgICAgICAgICAgICBGTUFDX0NSX1VORkxJRU4KKyNkZWZpbmUgTExfRk1BQ19DUl9PVkZMSUVOICAgICAgICAgICAgICAgICBGTUFDX0NSX09WRkxJRU4KKyNkZWZpbmUgTExfRk1BQ19DUl9XSUVOICAgICAgICAgICAgICAgICAgICBGTUFDX0NSX1dJRU4KKyNkZWZpbmUgTExfRk1BQ19DUl9SSUVOICAgICAgICAgICAgICAgICAgICBGTUFDX0NSX1JJRU4KKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19MTF9FQ19XTSBGTUFDIHdhdGVybWFya3MKKyAgKiBAYnJpZWYgICAgV2F0ZXJtYXJrIGRlZmluZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgYnVmZmVyIGZ1bGwgKGlucHV0KSBvciBidWZmZXIgZW1wdHkgKG91dHB1dCkKKyAgKiBAeworICAqLworI2RlZmluZSBMTF9GTUFDX1dNXzBfVEhSRVNIT0xEXzEgICAgICAgICAgIDB4MDAwMDAwMDBVTCAvKiE8IEJ1ZmZlciBmdWxsL2VtcHR5IGZsYWcgc2V0IGlmIHRoZXJlIGlzIGxlc3MgdGhhbiAxIGZyZWUvdW5yZWFkIHNwYWNlLiAqLworI2RlZmluZSBMTF9GTUFDX1dNXzFfVEhSRVNIT0xEXzIgICAgICAgICAgIDB4MDEwMDAwMDBVTCAvKiE8IEJ1ZmZlciBmdWxsL2VtcHR5IGZsYWcgc2V0IGlmIHRoZXJlIGFyZSBsZXNzIHRoYW4gMiBmcmVlL3VucmVhZCBzcGFjZXMuICovCisjZGVmaW5lIExMX0ZNQUNfV01fMl9USFJFU0hPTERfNCAgICAgICAgICAgMHgwMjAwMDAwMFVMIC8qITwgQnVmZmVyIGZ1bGwvZW1wdHkgZmxhZyBzZXQgaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiA0IGZyZWUvdW5yZWFkIHNwYWNlcy4gKi8KKyNkZWZpbmUgTExfRk1BQ19XTV8zX1RIUkVTSE9MRF84ICAgICAgICAgICAweDAzMDAwMDAwVUwgLyohPCBCdWZmZXIgZnVsbC9lbXB0eSBmbGFnIHNldCBpZiB0aGVyZSBhcmUgbGVzcyB0aGFuIDggZnJlZS9lbXB0eSBzcGFjZXMuICovCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfTExfRUNfRlVOQyBGTUFDIGZ1bmN0aW9ucworICAqIEB7CisgICovCisjZGVmaW5lIExMX0ZNQUNfRlVOQ19MT0FEX1gxICAgICAgICAgICAgICAgKCh1aW50MzJfdCkoRk1BQ19QQVJBTV9GVU5DXzApKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBMb2FkIFgxIGJ1ZmZlciAqLworI2RlZmluZSBMTF9GTUFDX0ZVTkNfTE9BRF9YMiAgICAgICAgICAgICAgICgodWludDMyX3QpKEZNQUNfUEFSQU1fRlVOQ18xKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTG9hZCBYMiBidWZmZXIgKi8KKyNkZWZpbmUgTExfRk1BQ19GVU5DX0xPQURfWSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShGTUFDX1BBUkFNX0ZVTkNfMSB8IEZNQUNfUEFSQU1fRlVOQ18wKSkgICAgICAgICAgICAgICAgICAgICAvKiE8IExvYWQgWSBidWZmZXIgKi8KKyNkZWZpbmUgTExfRk1BQ19GVU5DX0NPTlZPX0ZJUiAgICAgICAgICAgICAoKHVpbnQzMl90KShGTUFDX1BBUkFNX0ZVTkNfMykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvbnZvbHV0aW9uIChGSVIgZmlsdGVyKSAqLworI2RlZmluZSBMTF9GTUFDX0ZVTkNfSUlSX0RJUkVDVF9GT1JNXzEgICAgICgodWludDMyX3QpKEZNQUNfUEFSQU1fRlVOQ18zIHwgRk1BQ19QQVJBTV9GVU5DXzApKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSUlSIGZpbHRlciAoZGlyZWN0IGZvcm0gMSkgKi8KKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiogQGRlZmdyb3VwIEZNQUNfTExfRXhwb3J0ZWRfTWFjcm9zIEZNQUMgRXhwb3J0ZWQgTWFjcm9zCisgICogQHsKKyAgKi8KKworLyoqIEBkZWZncm91cCBGTUFDX0xMX0VNX1dSSVRFX1JFQUQgQ29tbW9uIFdyaXRlIGFuZCByZWFkIHJlZ2lzdGVycyBNYWNyb3MKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIFdyaXRlIGEgdmFsdWUgaW4gRk1BQyByZWdpc3RlcgorICAqIEBwYXJhbSAgX19JTlNUQU5DRV9fIEZNQUMgSW5zdGFuY2UKKyAgKiBAcGFyYW0gIF9fUkVHX18gUmVnaXN0ZXIgdG8gYmUgd3JpdHRlbgorICAqIEBwYXJhbSAgX19WQUxVRV9fIFZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIHJlZ2lzdGVyCisgICogQHJldHZhbCBOb25lCisgICovCisjZGVmaW5lIExMX0ZNQUNfV3JpdGVSZWcoX19JTlNUQU5DRV9fLCBfX1JFR19fLCBfX1ZBTFVFX18pIFdSSVRFX1JFRyhfX0lOU1RBTkNFX18tPl9fUkVHX18sIChfX1ZBTFVFX18pKQorCisvKioKKyAgKiBAYnJpZWYgIFJlYWQgYSB2YWx1ZSBpbiBGTUFDIHJlZ2lzdGVyCisgICogQHBhcmFtICBfX0lOU1RBTkNFX18gRk1BQyBJbnN0YW5jZQorICAqIEBwYXJhbSAgX19SRUdfXyBSZWdpc3RlciB0byBiZSByZWFkCisgICogQHJldHZhbCBSZWdpc3RlciB2YWx1ZQorICAqLworI2RlZmluZSBMTF9GTUFDX1JlYWRSZWcoX19JTlNUQU5DRV9fLCBfX1JFR19fKSBSRUFEX1JFRyhfX0lOU1RBTkNFX18tPl9fUkVHX18pCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisKKy8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19MTF9FeHBvcnRlZF9GdW5jdGlvbnMgRk1BQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfTExfRUZfQ29uZmlndXJhdGlvbiBGTUFDIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgWDEgZnVsbCB3YXRlcm1hcmsuCisgICogQHJtdG9sbCBYMUJVRkNGRyAgICAgRlVMTF9XTSAgICAgICBMTF9GTUFDX1NldFgxRnVsbFdhdGVybWFyaworICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgV2F0ZXJtYXJrIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8wX1RIUkVTSE9MRF8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8xX1RIUkVTSE9MRF8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8yX1RIUkVTSE9MRF80CisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8zX1RIUkVTSE9MRF84CisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFgxRnVsbFdhdGVybWFyayhGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50MzJfdCBXYXRlcm1hcmspCit7CisgIE1PRElGWV9SRUcoRk1BQ3gtPlgxQlVGQ0ZHLCBGTUFDX1gxQlVGQ0ZHX0ZVTExfV00sIFdhdGVybWFyayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIFgxIGZ1bGwgd2F0ZXJtYXJrLgorICAqIEBybXRvbGwgWDFCVUZDRkcgICAgIEZVTExfV00gICAgICAgTExfRk1BQ19HZXRYMUZ1bGxXYXRlcm1hcmsKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8wX1RIUkVTSE9MRF8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8xX1RIUkVTSE9MRF8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8yX1RIUkVTSE9MRF80CisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8zX1RIUkVTSE9MRF84CisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19HZXRYMUZ1bGxXYXRlcm1hcmsoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoRk1BQ3gtPlgxQlVGQ0ZHLCBGTUFDX1gxQlVGQ0ZHX0ZVTExfV00pKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgWDEgYnVmZmVyIHNpemUuCisgICogQHJtdG9sbCBYMUJVRkNGRyAgICAgWDFfQlVGX1NJWkUgICBMTF9GTUFDX1NldFgxQnVmZmVyU2l6ZQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgQnVmZmVyU2l6ZSAweDAxIC4uIDB4RkY6IE51bWJlciBvZiAxNi1iaXQgYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUgaW5wdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19TZXRYMUJ1ZmZlclNpemUoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDhfdCBCdWZmZXJTaXplKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5YMUJVRkNGRywgRk1BQ19YMUJVRkNGR19YMV9CVUZfU0laRSwgKCh1aW50MzJfdClCdWZmZXJTaXplKSA8PCBGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIFgxIGJ1ZmZlciBzaXplLgorICAqIEBybXRvbGwgWDFCVUZDRkcgICAgIFgxX0JVRl9TSVpFICAgTExfRk1BQ19HZXRYMUJ1ZmZlclNpemUKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIDB4MDEgLi4gMHhGRjogTnVtYmVyIG9mIDE2LWJpdCBhZGRyZXNzZXMgYWxsb2NhdGVkIHRvIHRoZSBpbnB1dCBidWZmZXIgKGluY2x1ZGluZyB0aGUgb3B0aW9uYWwgImhlYWRyb29tIikuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBMTF9GTUFDX0dldFgxQnVmZmVyU2l6ZShGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICByZXR1cm4gKHVpbnQ4X3QpKFJFQURfQklUKEZNQUN4LT5YMUJVRkNGRywgRk1BQ19YMUJVRkNGR19YMV9CVUZfU0laRSkgPj4gRk1BQ19YMUJVRkNGR19YMV9CVUZfU0laRV9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBYMSBiYXNlLgorICAqIEBybXRvbGwgWDFCVUZDRkcgICAgIFgxX0JBU0UgICAgICAgTExfRk1BQ19TZXRYMUJhc2UKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcGFyYW0gIEJhc2UgMHgwMCAuLiAweEZGOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGJ1ZmZlciAoWDEpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5LgorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19TZXRYMUJhc2UoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDhfdCBCYXNlKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5YMUJVRkNGRywgRk1BQ19YMUJVRkNGR19YMV9CQVNFLCAoKHVpbnQzMl90KUJhc2UpIDw8IEZNQUNfWDFCVUZDRkdfWDFfQkFTRV9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiBYMSBiYXNlLgorICAqIEBybXRvbGwgWDFCVUZDRkcgICAgIFgxX0JBU0UgICAgICAgTExfRk1BQ19HZXRYMUJhc2UKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIDB4MDAgLi4gMHhGRjogQmFzZSBhZGRyZXNzIG9mIHRoZSBpbnB1dCBidWZmZXIgKFgxKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50OF90IExMX0ZNQUNfR2V0WDFCYXNlKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIHJldHVybiAodWludDhfdCkoUkVBRF9CSVQoRk1BQ3gtPlgxQlVGQ0ZHLCBGTUFDX1gxQlVGQ0ZHX1gxX0JBU0UpID4+IEZNQUNfWDFCVUZDRkdfWDFfQkFTRV9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBYMiBidWZmZXIgc2l6ZS4KKyAgKiBAcm10b2xsIFgyQlVGQ0ZHICAgICBYMl9CVUZfU0laRSAgIExMX0ZNQUNfU2V0WDJCdWZmZXJTaXplCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHBhcmFtICBCdWZmZXJTaXplIDB4MDEgLi4gMHhGRjogTnVtYmVyIG9mIDE2LWJpdCBhZGRyZXNzZXMgYWxsb2NhdGVkIHRvIHRoZSBjb2VmZmljaWVudCBidWZmZXIuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFgyQnVmZmVyU2l6ZShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IEJ1ZmZlclNpemUpCit7CisgIE1PRElGWV9SRUcoRk1BQ3gtPlgyQlVGQ0ZHLCBGTUFDX1gyQlVGQ0ZHX1gyX0JVRl9TSVpFLCAoKHVpbnQzMl90KUJ1ZmZlclNpemUpIDw8IEZNQUNfWDJCVUZDRkdfWDJfQlVGX1NJWkVfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gWDIgYnVmZmVyIHNpemUuCisgICogQHJtdG9sbCBYMkJVRkNGRyAgICAgWDJfQlVGX1NJWkUgICBMTF9GTUFDX0dldFgyQnVmZmVyU2l6ZQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgMHgwMSAuLiAweEZGOiBOdW1iZXIgb2YgMTYtYml0IGFkZHJlc3NlcyBhbGxvY2F0ZWQgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50OF90IExMX0ZNQUNfR2V0WDJCdWZmZXJTaXplKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIHJldHVybiAodWludDhfdCkoUkVBRF9CSVQoRk1BQ3gtPlgyQlVGQ0ZHLCBGTUFDX1gyQlVGQ0ZHX1gyX0JVRl9TSVpFKSA+PiBGTUFDX1gyQlVGQ0ZHX1gyX0JVRl9TSVpFX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIFgyIGJhc2UuCisgICogQHJtdG9sbCBYMkJVRkNGRyAgICAgWDJfQkFTRSAgICAgICBMTF9GTUFDX1NldFgyQmFzZQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgQmFzZSAweDAwIC4uIDB4RkY6IEJhc2UgYWRkcmVzcyBvZiB0aGUgY29lZmZpY2llbnQgYnVmZmVyIChYMikgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFgyQmFzZShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IEJhc2UpCit7CisgIE1PRElGWV9SRUcoRk1BQ3gtPlgyQlVGQ0ZHLCBGTUFDX1gyQlVGQ0ZHX1gyX0JBU0UsICgodWludDMyX3QpQmFzZSkgPDwgRk1BQ19YMkJVRkNGR19YMl9CQVNFX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIFgyIGJhc2UuCisgICogQHJtdG9sbCBYMkJVRkNGRyAgICAgWDJfQkFTRSAgICAgICBMTF9GTUFDX0dldFgyQmFzZQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgMHgwMCAuLiAweEZGOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciAoWDIpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5LgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgTExfRk1BQ19HZXRYMkJhc2UoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICh1aW50OF90KShSRUFEX0JJVChGTUFDeC0+WDJCVUZDRkcsIEZNQUNfWDJCVUZDRkdfWDJfQkFTRSkgPj4gRk1BQ19YMkJVRkNGR19YMl9CQVNFX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIFkgZW1wdHkgd2F0ZXJtYXJrLgorICAqIEBybXRvbGwgWUJVRkNGRyAgICAgIEVNUFRZX1dNICAgICAgTExfRk1BQ19TZXRZRW1wdHlXYXRlcm1hcmsKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcGFyYW0gIFdhdGVybWFyayBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfV01fMF9USFJFU0hPTERfMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfV01fMV9USFJFU0hPTERfMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfV01fMl9USFJFU0hPTERfNAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfV01fM19USFJFU0hPTERfOAorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19TZXRZRW1wdHlXYXRlcm1hcmsoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDMyX3QgV2F0ZXJtYXJrKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5ZQlVGQ0ZHLCBGTUFDX1lCVUZDRkdfRU1QVFlfV00sIFdhdGVybWFyayk7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIFkgZW1wdHkgd2F0ZXJtYXJrLgorICAqIEBybXRvbGwgWUJVRkNGRyAgICAgIEVNUFRZX1dNICAgICAgTExfRk1BQ19HZXRZRW1wdHlXYXRlcm1hcmsKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8wX1RIUkVTSE9MRF8xCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8xX1RIUkVTSE9MRF8yCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8yX1RIUkVTSE9MRF80CisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19XTV8zX1RIUkVTSE9MRF84CisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19HZXRZRW1wdHlXYXRlcm1hcmsoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoRk1BQ3gtPllCVUZDRkcsIEZNQUNfWUJVRkNGR19FTVBUWV9XTSkpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBZIGJ1ZmZlciBzaXplLgorICAqIEBybXRvbGwgWUJVRkNGRyAgICAgIFlfQlVGX1NJWkUgICAgTExfRk1BQ19TZXRZQnVmZmVyU2l6ZQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgQnVmZmVyU2l6ZSAweDAxIC4uIDB4RkY6IE51bWJlciBvZiAxNi1iaXQgYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciAoaW5jbHVkaW5nIHRoZSBvcHRpb25hbCAiaGVhZHJvb20iKS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfU2V0WUJ1ZmZlclNpemUoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDhfdCBCdWZmZXJTaXplKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5ZQlVGQ0ZHLCBGTUFDX1lCVUZDRkdfWV9CVUZfU0laRSwgKCh1aW50MzJfdClCdWZmZXJTaXplKSA8PCBGTUFDX1lCVUZDRkdfWV9CVUZfU0laRV9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiBZIGJ1ZmZlciBzaXplLgorICAqIEBybXRvbGwgWUJVRkNGRyAgICAgIFlfQlVGX1NJWkUgICAgTExfRk1BQ19HZXRZQnVmZmVyU2l6ZQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgMHgwMSAuLiAweEZGOiBOdW1iZXIgb2YgMTYtYml0IGFkZHJlc3NlcyBhbGxvY2F0ZWQgdG8gdGhlIG91dHB1dCBidWZmZXIgKGluY2x1ZGluZyB0aGUgb3B0aW9uYWwgImhlYWRyb29tIikuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBMTF9GTUFDX0dldFlCdWZmZXJTaXplKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIHJldHVybiAodWludDhfdCkoUkVBRF9CSVQoRk1BQ3gtPllCVUZDRkcsIEZNQUNfWUJVRkNGR19ZX0JVRl9TSVpFKSA+PiBGTUFDX1lCVUZDRkdfWV9CVUZfU0laRV9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBZIGJhc2UuCisgICogQHJtdG9sbCBZQlVGQ0ZHICAgICAgWV9CQVNFICAgICAgICBMTF9GTUFDX1NldFlCYXNlCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHBhcmFtICBCYXNlIDB4MDAgLi4gMHhGRjogQmFzZSBhZGRyZXNzIG9mIHRoZSBvdXRwdXQgYnVmZmVyIChZKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfU2V0WUJhc2UoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDhfdCBCYXNlKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5ZQlVGQ0ZHLCBGTUFDX1lCVUZDRkdfWV9CQVNFLCAoKHVpbnQzMl90KUJhc2UpIDw8IEZNQUNfWUJVRkNGR19ZX0JBU0VfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gWSBiYXNlLgorICAqIEBybXRvbGwgWUJVRkNGRyAgICAgIFlfQkFTRSAgICAgICAgTExfRk1BQ19HZXRZQmFzZQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgMHgwMCAuLiAweEZGOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIG91dHB1dCBidWZmZXIgKFkpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5LgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgTExfRk1BQ19HZXRZQmFzZShGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICByZXR1cm4gKHVpbnQ4X3QpKFJFQURfQklUKEZNQUN4LT5ZQlVGQ0ZHLCBGTUFDX1lCVUZDRkdfWV9CQVNFKSA+PiBGTUFDX1lCVUZDRkdfWV9CQVNFX1Bvcyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU3RhcnQgRk1BQyBwcm9jZXNzaW5nLgorICAqIEBybXRvbGwgUEFSQU0gICAgICAgIFNUQVJUICAgICAgICAgTExfRk1BQ19FbmFibGVTdGFydAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19FbmFibGVTdGFydChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBTRVRfQklUKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9TVEFSVCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgU3RvcCBGTUFDIHByb2Nlc3NpbmcuCisgICogQHJtdG9sbCBQQVJBTSAgICAgICAgU1RBUlQgICAgICAgICBMTF9GTUFDX0Rpc2FibGVTdGFydAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19EaXNhYmxlU3RhcnQoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgQ0xFQVJfQklUKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9TVEFSVCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgdGhlIHN0YXRlIG9mIEZNQUMgcHJvY2Vzc2luZy4KKyAgKiBAcm10b2xsIFBBUkFNICAgICAgICBTVEFSVCAgICAgICAgIExMX0ZNQUNfSXNFbmFibGVkU3RhcnQKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9GTUFDX0lzRW5hYmxlZFN0YXJ0KEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIHJldHVybiAoKFJFQURfQklUKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9TVEFSVCkgPT0gKEZNQUNfUEFSQU1fU1RBUlQpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIGZ1bmN0aW9uLgorICAqIEBybXRvbGwgUEFSQU0gICAgICAgIEZVTkMgICAgICAgICAgTExfRk1BQ19TZXRGdW5jdGlvbgorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgRnVuY3Rpb24gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX0ZVTkNfTE9BRF9YMQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfRlVOQ19MT0FEX1gyCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19GVU5DX0xPQURfWQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfRlVOQ19DT05WT19GSVIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX0ZVTkNfSUlSX0RJUkVDVF9GT1JNXzEKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfU2V0RnVuY3Rpb24oRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDMyX3QgRnVuY3Rpb24pCit7CisgIE1PRElGWV9SRUcoRk1BQ3gtPlBBUkFNLCBGTUFDX1BBUkFNX0ZVTkMsIEZ1bmN0aW9uKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gZnVuY3Rpb24uCisgICogQHJtdG9sbCBQQVJBTSAgICAgICAgRlVOQyAgICAgICAgICBMTF9GTUFDX0dldEZ1bmN0aW9uCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfRlVOQ19MT0FEX1gxCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19GVU5DX0xPQURfWDIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX0ZVTkNfTE9BRF9ZCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19GVU5DX0NPTlZPX0ZJUgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfRlVOQ19JSVJfRElSRUNUX0ZPUk1fMQorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfR2V0RnVuY3Rpb24oRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoRk1BQ3gtPlBBUkFNLCBGTUFDX1BBUkFNX0ZVTkMpKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgaW5wdXQgcGFyYW1ldGVyIFIuCisgICogQHJtdG9sbCBQQVJBTSAgICAgICAgUiAgICAgICAgICAgICBMTF9GTUFDX1NldFBhcmFtUgorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgUGFyYW0gMHgwMCAuLiAweEZGOiBQYXJhbWV0ZXIgUiAoZ2FpbiwgZXRjLikuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFBhcmFtUihGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IFBhcmFtKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9SLCAoKHVpbnQzMl90KVBhcmFtKSA8PCBGTUFDX1BBUkFNX1JfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gaW5wdXQgcGFyYW1ldGVyIFIuCisgICogQHJtdG9sbCBQQVJBTSAgICAgICAgUiAgICAgICAgICAgICBMTF9GTUFDX0dldFBhcmFtUgorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgMHgwMCAuLiAweEZGOiBQYXJhbWV0ZXIgUiAoZ2FpbiwgZXRjLikuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBMTF9GTUFDX0dldFBhcmFtUihGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICByZXR1cm4gKHVpbnQ4X3QpKFJFQURfQklUKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9SKSA+PiBGTUFDX1BBUkFNX1JfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgaW5wdXQgcGFyYW1ldGVyIFEuCisgICogQHJtdG9sbCBQQVJBTSAgICAgICAgUSAgICAgICAgICAgICBMTF9GTUFDX1NldFBhcmFtUQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgUGFyYW0gMHgwMCAuLiAweEZGOiBQYXJhbWV0ZXIgUSAodmVjdG9yIGxlbmd0aCwgZXRjLikuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1NldFBhcmFtUShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IFBhcmFtKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9RLCAoKHVpbnQzMl90KVBhcmFtKSA8PCBGTUFDX1BBUkFNX1FfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gaW5wdXQgcGFyYW1ldGVyIFEuCisgICogQHJtdG9sbCBQQVJBTSAgICAgICAgUSAgICAgICAgICAgICBMTF9GTUFDX0dldFBhcmFtUQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgMHgwMCAuLiAweEZGOiBQYXJhbWV0ZXIgUSAodmVjdG9yIGxlbmd0aCwgZXRjLikuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDhfdCBMTF9GTUFDX0dldFBhcmFtUShGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICByZXR1cm4gKHVpbnQ4X3QpKFJFQURfQklUKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9RKSA+PiBGTUFDX1BBUkFNX1FfUG9zKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgaW5wdXQgcGFyYW1ldGVyIFAuCisgICogQHJtdG9sbCBQQVJBTSAgICAgICAgUCAgICAgICAgICAgICBMTF9GTUFDX1NldFBhcmFtUAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgUGFyYW0gMHgwMCAuLiAweEZGOiBQYXJhbWV0ZXIgUCAodmVjdG9yIGxlbmd0aCwgbnVtYmVyIG9mIGZpbHRlciB0YXBzLCBldGMuKS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfU2V0UGFyYW1QKEZNQUNfVHlwZURlZiAqRk1BQ3gsIHVpbnQ4X3QgUGFyYW0pCit7CisgIE1PRElGWV9SRUcoRk1BQ3gtPlBBUkFNLCBGTUFDX1BBUkFNX1AsICgodWludDMyX3QpUGFyYW0pIDw8IEZNQUNfUEFSQU1fUF9Qb3MpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiBpbnB1dCBwYXJhbWV0ZXIgUC4KKyAgKiBAcm10b2xsIFBBUkFNICAgICAgICBQICAgICAgICAgICAgIExMX0ZNQUNfR2V0UGFyYW1QCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCAweDAwIC4uIDB4RkY6IFBhcmFtZXRlciBQICh2ZWN0b3IgbGVuZ3RoLCBudW1iZXIgb2YgZmlsdGVyIHRhcHMsIGV0Yy4pLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQ4X3QgTExfRk1BQ19HZXRQYXJhbVAoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICh1aW50OF90KShSRUFEX0JJVChGTUFDeC0+UEFSQU0sIEZNQUNfUEFSQU1fUCkgPj4gRk1BQ19QQVJBTV9QX1Bvcyk7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19MTF9FRl9SZXNldF9NYW5hZ2VtZW50IFJlc2V0X01hbmFnZW1lbnQKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIFN0YXJ0IHRoZSBGTUFDIHJlc2V0LgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFJFU0VUICAgICAgICAgTExfRk1BQ19FbmFibGVSZXNldAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19FbmFibGVSZXNldChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBTRVRfQklUKEZNQUN4LT5DUiwgRk1BQ19DUl9SRVNFVCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgSW50ZXJydXB0IHRoZSBGTUFDIHJlc2V0LgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFJFU0VUICAgICAgICAgTExfRk1BQ19EaXNhYmxlUmVzZXQKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfRGlzYWJsZVJlc2V0KEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIENMRUFSX0JJVChGTUFDeC0+Q1IsIEZNQUNfQ1JfUkVTRVQpOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIHRoZSBzdGF0ZSBvZiB0aGUgRk1BQyByZXNldC4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBSRVNFVCAgICAgICAgIExMX0ZNQUNfSXNFbmFibGVkUmVzZXQKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9GTUFDX0lzRW5hYmxlZFJlc2V0KEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIHJldHVybiAoKFJFQURfQklUKEZNQUN4LT5DUiwgRk1BQ19DUl9SRVNFVCkgPT0gKEZNQUNfQ1JfUkVTRVQpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19MTF9FRl9Db25maWd1cmF0aW9uIEZNQUMgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBDbGlwcGluZy4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBDTElQRU4gICAgICAgIExMX0ZNQUNfRW5hYmxlQ2xpcHBpbmcKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfRW5hYmxlQ2xpcHBpbmcoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgU0VUX0JJVChGTUFDeC0+Q1IsIEZNQUNfQ1JfQ0xJUEVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIENsaXBwaW5nLgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIENMSVBFTiAgICAgICAgTExfRk1BQ19EaXNhYmxlQ2xpcHBpbmcKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfRGlzYWJsZUNsaXBwaW5nKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIENMRUFSX0JJVChGTUFDeC0+Q1IsIEZNQUNfQ1JfQ0xJUEVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBDbGlwcGluZyBTdGF0ZS4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBDTElQRU4gICAgICAgIExMX0ZNQUNfSXNFbmFibGVkQ2xpcHBpbmcKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9GTUFDX0lzRW5hYmxlZENsaXBwaW5nKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIHJldHVybiAoKFJFQURfQklUKEZNQUN4LT5DUiwgRk1BQ19DUl9DTElQRU4pID09IChGTUFDX0NSX0NMSVBFTikpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBGTUFDX0xMX0VGX0RNQV9NYW5hZ2VtZW50IERNQV9NYW5hZ2VtZW50CisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgRk1BQyBETUEgd3JpdGUgY2hhbm5lbCByZXF1ZXN0LgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIERNQVdFTiAgICAgICAgTExfRk1BQ19FbmFibGVETUFSZXFfV1JJVEUKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfRW5hYmxlRE1BUmVxX1dSSVRFKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIFNFVF9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX0RNQVdFTik7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBGTUFDIERNQSB3cml0ZSBjaGFubmVsIHJlcXVlc3QuCisgICogQHJtdG9sbCBDUiAgICAgICAgICAgRE1BV0VOICAgICAgICBMTF9GTUFDX0Rpc2FibGVETUFSZXFfV1JJVEUKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfRGlzYWJsZURNQVJlcV9XUklURShGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBDTEVBUl9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX0RNQVdFTik7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgRk1BQyBETUEgd3JpdGUgY2hhbm5lbCByZXF1ZXN0IHN0YXRlLgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIERNQVdFTiAgICAgICAgTExfRk1BQ19Jc0VuYWJsZWRETUFSZXFfV1JJVEUKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9GTUFDX0lzRW5hYmxlZERNQVJlcV9XUklURShGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICByZXR1cm4gKChSRUFEX0JJVChGTUFDeC0+Q1IsIEZNQUNfQ1JfRE1BV0VOKSA9PSAoRk1BQ19DUl9ETUFXRU4pKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEZNQUMgRE1BIHJlYWQgY2hhbm5lbCByZXF1ZXN0LgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIERNQVJFTiAgICAgICAgTExfRk1BQ19FbmFibGVETUFSZXFfUkVBRAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19FbmFibGVETUFSZXFfUkVBRChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBTRVRfQklUKEZNQUN4LT5DUiwgRk1BQ19DUl9ETUFSRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgRk1BQyBETUEgcmVhZCBjaGFubmVsIHJlcXVlc3QuCisgICogQHJtdG9sbCBDUiAgICAgICAgICAgRE1BUkVOICAgICAgICBMTF9GTUFDX0Rpc2FibGVETUFSZXFfUkVBRAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19EaXNhYmxlRE1BUmVxX1JFQUQoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgQ0xFQVJfQklUKEZNQUN4LT5DUiwgRk1BQ19DUl9ETUFSRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIEZNQUMgRE1BIHJlYWQgY2hhbm5lbCByZXF1ZXN0IHN0YXRlLgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIERNQVJFTiAgICAgICAgTExfRk1BQ19Jc0VuYWJsZWRETUFSZXFfUkVBRAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfSXNFbmFibGVkRE1BUmVxX1JFQUQoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX0RNQVJFTikgPT0gKEZNQUNfQ1JfRE1BUkVOKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfTExfRUZfSVRfTWFuYWdlbWVudCBJVF9NYW5hZ2VtZW50CisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgRk1BQyBzYXR1cmF0aW9uIGVycm9yIGludGVycnVwdC4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBTQVRJRU4gICAgICAgIExMX0ZNQUNfRW5hYmxlSVRfU0FUCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX0VuYWJsZUlUX1NBVChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBTRVRfQklUKEZNQUN4LT5DUiwgRk1BQ19DUl9TQVRJRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgRk1BQyBzYXR1cmF0aW9uIGVycm9yIGludGVycnVwdC4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBTQVRJRU4gICAgICAgIExMX0ZNQUNfRGlzYWJsZUlUX1NBVAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19EaXNhYmxlSVRfU0FUKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIENMRUFSX0JJVChGTUFDeC0+Q1IsIEZNQUNfQ1JfU0FUSUVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBGTUFDIHNhdHVyYXRpb24gZXJyb3IgaW50ZXJydXB0IHN0YXRlLgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFNBVElFTiAgICAgICAgTExfRk1BQ19Jc0VuYWJsZWRJVF9TQVQKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9GTUFDX0lzRW5hYmxlZElUX1NBVChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICByZXR1cm4gKChSRUFEX0JJVChGTUFDeC0+Q1IsIEZNQUNfQ1JfU0FUSUVOKSA9PSAoRk1BQ19DUl9TQVRJRU4pKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEZNQUMgdW5kZXJmbG93IGVycm9yIGludGVycnVwdC4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBVTkZMSUVOICAgICAgIExMX0ZNQUNfRW5hYmxlSVRfVU5GTAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19FbmFibGVJVF9VTkZMKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIFNFVF9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX1VORkxJRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgRk1BQyB1bmRlcmZsb3cgZXJyb3IgaW50ZXJydXB0LgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFVORkxJRU4gICAgICAgTExfRk1BQ19EaXNhYmxlSVRfVU5GTAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19EaXNhYmxlSVRfVU5GTChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBDTEVBUl9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX1VORkxJRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIEZNQUMgdW5kZXJmbG93IGVycm9yIGludGVycnVwdCBzdGF0ZS4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBVTkZMSUVOICAgICAgIExMX0ZNQUNfSXNFbmFibGVkSVRfVU5GTAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfSXNFbmFibGVkSVRfVU5GTChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICByZXR1cm4gKChSRUFEX0JJVChGTUFDeC0+Q1IsIEZNQUNfQ1JfVU5GTElFTikgPT0gKEZNQUNfQ1JfVU5GTElFTikpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBFbmFibGUgRk1BQyBvdmVyZmxvdyBlcnJvciBpbnRlcnJ1cHQuCisgICogQHJtdG9sbCBDUiAgICAgICAgICAgT1ZGTElFTiAgICAgICBMTF9GTUFDX0VuYWJsZUlUX09WRkwKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfRW5hYmxlSVRfT1ZGTChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBTRVRfQklUKEZNQUN4LT5DUiwgRk1BQ19DUl9PVkZMSUVOKTsKK30KKworLyoqCisgICogQGJyaWVmICBEaXNhYmxlIEZNQUMgb3ZlcmZsb3cgZXJyb3IgaW50ZXJydXB0LgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIE9WRkxJRU4gICAgICAgTExfRk1BQ19EaXNhYmxlSVRfT1ZGTAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19EaXNhYmxlSVRfT1ZGTChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBDTEVBUl9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX09WRkxJRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIEZNQUMgb3ZlcmZsb3cgZXJyb3IgaW50ZXJydXB0IHN0YXRlLgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIE9WRkxJRU4gICAgICAgTExfRk1BQ19Jc0VuYWJsZWRJVF9PVkZMCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0VuYWJsZWRJVF9PVkZMKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIHJldHVybiAoKFJFQURfQklUKEZNQUN4LT5DUiwgRk1BQ19DUl9PVkZMSUVOKSA9PSAoRk1BQ19DUl9PVkZMSUVOKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAgKiBAYnJpZWYgIEVuYWJsZSBGTUFDIHdyaXRlIGludGVycnVwdC4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBXSUVOICAgICAgICAgIExMX0ZNQUNfRW5hYmxlSVRfV1IKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfRW5hYmxlSVRfV1IoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgU0VUX0JJVChGTUFDeC0+Q1IsIEZNQUNfQ1JfV0lFTik7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGlzYWJsZSBGTUFDIHdyaXRlIGludGVycnVwdC4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBXSUVOICAgICAgICAgIExMX0ZNQUNfRGlzYWJsZUlUX1dSCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX0Rpc2FibGVJVF9XUihGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBDTEVBUl9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX1dJRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIEZNQUMgd3JpdGUgaW50ZXJydXB0IHN0YXRlLgorICAqIEBybXRvbGwgQ1IgICAgICAgICAgIFdJRU4gICAgICAgICAgTExfRk1BQ19Jc0VuYWJsZWRJVF9XUgorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfSXNFbmFibGVkSVRfV1IoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX1dJRU4pID09IChGTUFDX0NSX1dJRU4pKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgRW5hYmxlIEZNQUMgcmVhZCBpbnRlcnJ1cHQuCisgICogQHJtdG9sbCBDUiAgICAgICAgICAgUklFTiAgICAgICAgICBMTF9GTUFDX0VuYWJsZUlUX1JECisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX0VuYWJsZUlUX1JEKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIFNFVF9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX1JJRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIERpc2FibGUgRk1BQyByZWFkIGludGVycnVwdC4KKyAgKiBAcm10b2xsIENSICAgICAgICAgICBSSUVOICAgICAgICAgIExMX0ZNQUNfRGlzYWJsZUlUX1JECisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX0Rpc2FibGVJVF9SRChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICBDTEVBUl9CSVQoRk1BQ3gtPkNSLCBGTUFDX0NSX1JJRU4pOworfQorCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIEZNQUMgcmVhZCBpbnRlcnJ1cHQgc3RhdGUuCisgICogQHJtdG9sbCBDUiAgICAgICAgICAgUklFTiAgICAgICAgICBMTF9GTUFDX0lzRW5hYmxlZElUX1JECisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0VuYWJsZWRJVF9SRChGTUFDX1R5cGVEZWYgKkZNQUN4KQoreworICByZXR1cm4gKChSRUFEX0JJVChGTUFDeC0+Q1IsIEZNQUNfQ1JfUklFTikgPT0gKEZNQUNfQ1JfUklFTikpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBGTUFDX0xMX0VGX0ZMQUdfTWFuYWdlbWVudCBGTEFHX01hbmFnZW1lbnQKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIENoZWNrIEZNQUMgc2F0dXJhdGlvbiBlcnJvciBmbGFnIHN0YXRlLgorICAqIEBybXRvbGwgU1IgICAgICAgICAgIFNBVCAgICAgICAgICAgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfU0FUCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfU0FUKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIHJldHVybiAoKFJFQURfQklUKEZNQUN4LT5TUiwgRk1BQ19TUl9TQVQpID09IChGTUFDX1NSX1NBVCkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBGTUFDIHVuZGVyZmxvdyBlcnJvciBmbGFnIHN0YXRlLgorICAqIEBybXRvbGwgU1IgICAgICAgICAgIFVORkwgICAgICAgICAgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfVU5GTAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfSXNBY3RpdmVGbGFnX1VORkwoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoRk1BQ3gtPlNSLCBGTUFDX1NSX1VORkwpID09IChGTUFDX1NSX1VORkwpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgRk1BQyBvdmVyZmxvdyBlcnJvciBmbGFnIHN0YXRlLgorICAqIEBybXRvbGwgU1IgICAgICAgICAgIE9WRkwgICAgICAgICAgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfT1ZGTAorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0ZNQUNfSXNBY3RpdmVGbGFnX09WRkwoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoRk1BQ3gtPlNSLCBGTUFDX1NSX09WRkwpID09IChGTUFDX1NSX09WRkwpKSA/IDFVTCA6IDBVTCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgRk1BQyBYMSBidWZmZXIgZnVsbCBmbGFnIHN0YXRlLgorICAqIEBybXRvbGwgU1IgICAgICAgICAgIFgxRlVMTCAgICAgICAgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfWDFGVUxMCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfRk1BQ19Jc0FjdGl2ZUZsYWdfWDFGVUxMKEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIHJldHVybiAoKFJFQURfQklUKEZNQUN4LT5TUiwgRk1BQ19TUl9YMUZVTEwpID09IChGTUFDX1NSX1gxRlVMTCkpID8gMVVMIDogMFVMKTsKK30KKworLyoqCisgICogQGJyaWVmICBDaGVjayBGTUFDIFkgYnVmZmVyIGVtcHR5IGZsYWcgc3RhdGUuCisgICogQHJtdG9sbCBTUiAgICAgICAgICAgWUVNUFRZICAgICAgICBMTF9GTUFDX0lzQWN0aXZlRmxhZ19ZRU1QVFkKKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgaW5zdGFuY2UKKyAgKiBAcmV0dmFsIFN0YXRlIG9mIGJpdCAoMSBvciAwKS4KKyAgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9GTUFDX0lzQWN0aXZlRmxhZ19ZRU1QVFkoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoRk1BQ3gtPlNSLCBGTUFDX1NSX1lFTVBUWSkgPT0gKEZNQUNfU1JfWUVNUFRZKSkgPyAxVUwgOiAwVUwpOworfQorCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfTExfRUZfRGF0YV9NYW5hZ2VtZW50IERhdGFfTWFuYWdlbWVudAorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgV3JpdGUgMTYtYml0IGlucHV0IGRhdGEgZm9yIHRoZSBGTUFDIHByb2Nlc3NpbmcuCisgICogQHJtdG9sbCBXREFUQSAgICAgICAgV0RBVEEgICAgICAgICBMTF9GTUFDX1dyaXRlRGF0YQorICAqIEBwYXJhbSAgRk1BQ3ggRk1BQyBpbnN0YW5jZQorICAqIEBwYXJhbSAgSW5EYXRhIDB4MDAwMCAuLiAweEZGRkY6IDE2LWJpdCB2YWx1ZSB0byBiZSBwcm92aWRlZCBhcyBpbnB1dCBkYXRhIGZvciBGTUFDIHByb2Nlc3NpbmcuCisgICogQHJldHZhbCBOb25lCisgICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9GTUFDX1dyaXRlRGF0YShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50MTZfdCBJbkRhdGEpCit7CisgIFdSSVRFX1JFRyhGTUFDeC0+V0RBVEEsIEluRGF0YSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIDE2LWJpdCBvdXRwdXQgZGF0YSBvZiBGTUFDIHByb2Nlc3NpbmcuCisgICogQHJtdG9sbCBSREFUQSAgICAgICAgUkRBVEEgICAgICAgICBMTF9GTUFDX1JlYWREYXRhCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHJldHZhbCAweDAwMDAgLi4gMHhGRkZGOiAxNi1iaXQgb3V0cHV0IGRhdGEgb2YgRk1BQyBwcm9jZXNzaW5nLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQxNl90IExMX0ZNQUNfUmVhZERhdGEoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgcmV0dXJuICh1aW50MTZfdCkoUkVBRF9SRUcoRk1BQ3gtPlJEQVRBKSk7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19MTF9FRl9Db25maWd1cmF0aW9uIEZNQUMgQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSBtZW1vcnkgZm9yIFgxIGJ1ZmZlci4KKyAgKiBAcm10b2xsIFgxQlVGQ0ZHICAgICBGVUxMX1dNICAgICAgIExMX0ZNQUNfQ29uZmlnWDFcbgorICAqICAgICAgICAgWDFCVUZDRkcgICAgIFgxX0JBU0UgICAgICAgTExfRk1BQ19Db25maWdYMVxuCisgICogICAgICAgICBYMUJVRkNGRyAgICAgWDFfQlVGX1NJWkUgICBMTF9GTUFDX0NvbmZpZ1gxCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHBhcmFtICBXYXRlcm1hcmsgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzBfVEhSRVNIT0xEXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzFfVEhSRVNIT0xEXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzJfVEhSRVNIT0xEXzQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzNfVEhSRVNIT0xEXzgKKyAgKiBAcGFyYW0gIEJhc2UgMHgwMCAuLiAweEZGOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIGlucHV0IGJ1ZmZlciAoWDEpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5LgorICAqIEBwYXJhbSAgQnVmZmVyU2l6ZSAweDAxIC4uIDB4RkY6IE51bWJlciBvZiAxNi1iaXQgYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUgaW5wdXQgYnVmZmVyIChpbmNsdWRpbmcgdGhlIG9wdGlvbmFsICJoZWFkcm9vbSIpLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfRk1BQ19Db25maWdYMShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50MzJfdCBXYXRlcm1hcmssIHVpbnQ4X3QgQmFzZSwgdWludDhfdCBCdWZmZXJTaXplKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5YMUJVRkNGRywgRk1BQ19YMUJVRkNGR19GVUxMX1dNIHwgRk1BQ19YMUJVRkNGR19YMV9CQVNFIHwgRk1BQ19YMUJVRkNGR19YMV9CVUZfU0laRSwKKyAgICAgICAgICAgICBXYXRlcm1hcmsgfCAoKCh1aW50MzJfdClCYXNlKSA8PCBGTUFDX1gxQlVGQ0ZHX1gxX0JBU0VfUG9zKSB8ICgoKHVpbnQzMl90KUJ1ZmZlclNpemUpIDw8IEZNQUNfWDFCVUZDRkdfWDFfQlVGX1NJWkVfUG9zKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIG1lbW9yeSBmb3IgWDIgYnVmZmVyLgorICAqIEBybXRvbGwgWDJCVUZDRkcgICAgIFgyX0JBU0UgICAgICAgTExfRk1BQ19Db25maWdYMlxuCisgICogICAgICAgICBYMkJVRkNGRyAgICAgWDJfQlVGX1NJWkUgICBMTF9GTUFDX0NvbmZpZ1gyCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHBhcmFtICBCYXNlIDB4MDAgLi4gMHhGRjogQmFzZSBhZGRyZXNzIG9mIHRoZSBjb2VmZmljaWVudCBidWZmZXIgKFgyKSB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeS4KKyAgKiBAcGFyYW0gIEJ1ZmZlclNpemUgMHgwMSAuLiAweEZGOiBOdW1iZXIgb2YgMTYtYml0IGFkZHJlc3NlcyBhbGxvY2F0ZWQgdG8gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfQ29uZmlnWDIoRk1BQ19UeXBlRGVmICpGTUFDeCwgdWludDhfdCBCYXNlLCB1aW50OF90IEJ1ZmZlclNpemUpCit7CisgIE1PRElGWV9SRUcoRk1BQ3gtPlgyQlVGQ0ZHLCBGTUFDX1gyQlVGQ0ZHX1gyX0JBU0UgfCBGTUFDX1gyQlVGQ0ZHX1gyX0JVRl9TSVpFLAorICAgICAgICAgICAgICgoKHVpbnQzMl90KUJhc2UpIDw8IEZNQUNfWDJCVUZDRkdfWDJfQkFTRV9Qb3MpIHwgKCgodWludDMyX3QpQnVmZmVyU2l6ZSkgPDwgRk1BQ19YMkJVRkNGR19YMl9CVUZfU0laRV9Qb3MpKTsKK30KKworLyoqCisgICogQGJyaWVmICBDb25maWd1cmUgbWVtb3J5IGZvciBZIGJ1ZmZlci4KKyAgKiBAcm10b2xsIFlCVUZDRkcgICAgICBFTVBUWV9XTSAgICAgIExMX0ZNQUNfQ29uZmlnWVxuCisgICogICAgICAgICBZQlVGQ0ZHICAgICAgWV9CQVNFICAgICAgICBMTF9GTUFDX0NvbmZpZ1lcbgorICAqICAgICAgICAgWUJVRkNGRyAgICAgIFlfQlVGX1NJWkUgICAgTExfRk1BQ19Db25maWdZCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHBhcmFtICBXYXRlcm1hcmsgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzBfVEhSRVNIT0xEXzEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzFfVEhSRVNIT0xEXzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzJfVEhSRVNIT0xEXzQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX1dNXzNfVEhSRVNIT0xEXzgKKyAgKiBAcGFyYW0gIEJhc2UgMHgwMCAuLiAweEZGOiBCYXNlIGFkZHJlc3Mgb2YgdGhlIG91dHB1dCBidWZmZXIgKFkpIHdpdGhpbiB0aGUgaW50ZXJuYWwgbWVtb3J5LgorICAqIEBwYXJhbSAgQnVmZmVyU2l6ZSAweDAxIC4uIDB4RkY6IE51bWJlciBvZiAxNi1iaXQgYWRkcmVzc2VzIGFsbG9jYXRlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciAoaW5jbHVkaW5nIHRoZSBvcHRpb25hbCAiaGVhZHJvb20iKS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfQ29uZmlnWShGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50MzJfdCBXYXRlcm1hcmssIHVpbnQ4X3QgQmFzZSwgdWludDhfdCBCdWZmZXJTaXplKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5ZQlVGQ0ZHLCBGTUFDX1lCVUZDRkdfRU1QVFlfV00gfCBGTUFDX1lCVUZDRkdfWV9CQVNFIHwgRk1BQ19ZQlVGQ0ZHX1lfQlVGX1NJWkUsCisgICAgICAgICAgICAgV2F0ZXJtYXJrIHwgKCgodWludDMyX3QpQmFzZSkgPDwgRk1BQ19ZQlVGQ0ZHX1lfQkFTRV9Qb3MpIHwgKCgodWludDMyX3QpQnVmZmVyU2l6ZSkgPDwgRk1BQ19ZQlVGQ0ZHX1lfQlVGX1NJWkVfUG9zKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBGTUFDIHByb2Nlc3NpbmcuCisgICogQHJtdG9sbCBQQVJBTSAgICAgICAgU1RBUlQgICAgICAgICBMTF9GTUFDX0NvbmZpZ0Z1bmNcbgorICAqICAgICAgICAgUEFSQU0gICAgICAgIEZVTkMgICAgICAgICAgTExfRk1BQ19Db25maWdGdW5jXG4KKyAgKiAgICAgICAgIFBBUkFNICAgICAgICBQICAgICAgICAgICAgIExMX0ZNQUNfQ29uZmlnRnVuY1xuCisgICogICAgICAgICBQQVJBTSAgICAgICAgUSAgICAgICAgICAgICBMTF9GTUFDX0NvbmZpZ0Z1bmNcbgorICAqICAgICAgICAgUEFSQU0gICAgICAgIFIgICAgICAgICAgICAgTExfRk1BQ19Db25maWdGdW5jCisgICogQHBhcmFtICBGTUFDeCBGTUFDIGluc3RhbmNlCisgICogQHBhcmFtICBTdGFydCAweDAwIC4uIDB4MDE6IEVuYWJsZSBvciBkaXNhYmxlIEZNQUMgcHJvY2Vzc2luZy4KKyAgKiBAcGFyYW0gIEZ1bmN0aW9uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19GVU5DX0xPQURfWDEKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX0ZVTkNfTE9BRF9YMgorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0ZNQUNfRlVOQ19MT0FEX1kKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9GTUFDX0ZVTkNfQ09OVk9fRklSCisgICogICAgICAgICBAYXJnIEByZWYgTExfRk1BQ19GVU5DX0lJUl9ESVJFQ1RfRk9STV8xCisgICogQHBhcmFtICBQYXJhbVAgMHgwMCAuLiAweEZGOiBQYXJhbWV0ZXIgUCAodmVjdG9yIGxlbmd0aCwgbnVtYmVyIG9mIGZpbHRlciB0YXBzLCBldGMuKS4KKyAgKiBAcGFyYW0gIFBhcmFtUSAweDAwIC4uIDB4RkY6IFBhcmFtZXRlciBRICh2ZWN0b3IgbGVuZ3RoLCBldGMuKS4KKyAgKiBAcGFyYW0gIFBhcmFtUiAweDAwIC4uIDB4RkY6IFBhcmFtZXRlciBSIChnYWluLCBldGMuKS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0ZNQUNfQ29uZmlnRnVuYyhGTUFDX1R5cGVEZWYgKkZNQUN4LCB1aW50OF90IFN0YXJ0LCB1aW50MzJfdCBGdW5jdGlvbiwgdWludDhfdCBQYXJhbVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBQYXJhbVEsIHVpbnQ4X3QgUGFyYW1SKQoreworICBNT0RJRllfUkVHKEZNQUN4LT5QQVJBTSwgRk1BQ19QQVJBTV9TVEFSVCB8IEZNQUNfUEFSQU1fRlVOQyB8IEZNQUNfUEFSQU1fUCB8IEZNQUNfUEFSQU1fUSB8IEZNQUNfUEFSQU1fUiwKKyAgICAgICAgICAgICAoKCh1aW50MzJfdClTdGFydCkgPDwgRk1BQ19QQVJBTV9TVEFSVF9Qb3MpIHwgRnVuY3Rpb24gfCAoKCh1aW50MzJfdClQYXJhbVApIDw8IEZNQUNfUEFSQU1fUF9Qb3MpIHwgKCgodWludDMyX3QpUGFyYW1RKSA8PCBGTUFDX1BBUkFNX1FfUG9zKSB8ICgoKHVpbnQzMl90KVBhcmFtUikgPDwgRk1BQ19QQVJBTV9SX1BvcykpOworfQorCisvKioKKyAgKiBAfQorICAqLworCisKKworI2lmIGRlZmluZWQoVVNFX0ZVTExfTExfRFJJVkVSKQorLyoqIEBkZWZncm91cCBGTUFDX0xMX0VGX0luaXQgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICAqIEB7CisgICovCitFcnJvclN0YXR1cyBMTF9GTUFDX0luaXQoRk1BQ19UeXBlRGVmICpGTUFDeCk7CitFcnJvclN0YXR1cyBMTF9GTUFDX0RlSW5pdChGTUFDX1R5cGVEZWYgKkZNQUN4KTsKKworCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisjZW5kaWYgLyogZGVmaW5lZChGTUFDKSAqLworCisvKioKKyAgKiBAfQorICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU1RNMzJIN3h4X0xMX0ZNQUNfSCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9sbF9ocnRpbS5oIGIvSW5jL3N0bTMyaDd4eF9sbF9ocnRpbS5oCmluZGV4IGExNmRkMjguLjY5ZDAwZmMgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfaHJ0aW0uaAorKysgYi9JbmMvc3RtMzJoN3h4X2xsX2hydGltLmgKQEAgLTE5NzEsOCArMTk3MSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9Db25maWdBRENUcmlnKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgQURDVHJpZywgdWludDMyX3QgVXBkYXRlLCB1aW50MzJfdCBTcmMpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHNoaWZ0ID0gKCgzVSAqIEFEQ1RyaWcpICYgMHgxRlUpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkFEQzFSKSArCisgIHVpbnQzMl90IHNoaWZ0ID0gKCgzVSAqIEFEQ1RyaWcpICYgMHgxRlUpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkFEQzFSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX0FEQ3hSW0FEQ1RyaWddKSk7CiAgIE1PRElGWV9SRUcoSFJUSU14LT5zQ29tbW9uUmVncy5DUjEsIChIUlRJTV9DUjFfQURDMVVTUkMgPDwgc2hpZnQpLCAoVXBkYXRlIDw8IHNoaWZ0KSk7CiAgIFdSSVRFX1JFRygqcFJlZywgU3JjKTsKQEAgLTIwMDQsNyArMjAwNCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9TZXRBRENUcmlnVXBkYXRlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgQURDVHJpZywgdWludDMyX3QgVXBkYXRlKQogewotICByZWdpc3RlciB1aW50MzJfdCBzaGlmdCA9ICgoM1UgKiBBRENUcmlnKSAmIDB4MUZVKTsKKyAgdWludDMyX3Qgc2hpZnQgPSAoKDNVICogQURDVHJpZykgJiAweDFGVSk7CiAgIE1PRElGWV9SRUcoSFJUSU14LT5zQ29tbW9uUmVncy5DUjEsIChIUlRJTV9DUjFfQURDMVVTUkMgPDwgc2hpZnQpLCAoVXBkYXRlIDw8IHNoaWZ0KSk7CiB9CiAKQEAgLTIwMzAsNyArMjAzMCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fR2V0QURDVHJpZ1VwZGF0ZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEFEQ1RyaWcpCiB7Ci0gIHJlZ2lzdGVyIGNvbnN0IHVpbnQzMl90IHNoaWZ0ID0gKCgzVSAqIEFEQ1RyaWcpICYgMHgxRlUpOworICBjb25zdCB1aW50MzJfdCBzaGlmdCA9ICgoM1UgKiBBRENUcmlnKSAmIDB4MUZVKTsKICAgcmV0dXJuIChSRUFEX0JJVChIUlRJTXgtPnNDb21tb25SZWdzLkNSMSwgKHVpbnQzMl90KShIUlRJTV9DUjFfQURDMVVTUkMpIDw8IHNoaWZ0KSA+PiBzaGlmdCk7CiB9CiAKQEAgLTIyNDcsNyArMjI0Nyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9TZXRBRENUcmlnU3JjKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgQURDVHJpZywgdWludDMyX3QgU3JjKQogewotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkFEQzFSKSArCisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuQURDMVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfQURDeFJbQURDVHJpZ10pKTsKICAgV1JJVEVfUkVHKCpwUmVnLCBTcmMpOwogfQpAQCAtMjQ2NCw3ICsyNDY0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9HZXRBRENUcmlnU3JjKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgQURDVHJpZykKIHsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5BREMxUikgKworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkFEQzFSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX0FEQ3hSW0FEQ1RyaWddKSk7CiAgIHJldHVybiAoKnBSZWcpOwogCkBAIC0yNTcwLDggKzI1NzAsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fVElNX1NldFByZXNjYWxlcihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBQcmVzY2FsZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgSFJUSU1fTUNSX0NLX1BTQywgUHJlc2NhbGVyKTsKIH0KIApAQCAtMjU5NCw4ICsyNTk0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0UHJlc2NhbGVyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTUNSX0NLX1BTQykpOwogfQogCkBAIC0yNjIxLDggKzI2MjEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fVElNX1NldENvdW50ZXJNb2RlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIsIHVpbnQzMl90IE1vZGUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKEhSVElNX1RJTUNSX1JFVFJJRyB8IEhSVElNX01DUl9DT05UKSwgTW9kZSk7CiB9CiAKQEAgLTI2NDcsOCArMjY0Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fVElNX0dldENvdW50ZXJNb2RlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKEhSVElNX01DUl9SRVRSSUcgfCBIUlRJTV9NQ1JfQ09OVCkpKTsKIH0KIApAQCAtMjY3MSw4ICsyNjcxLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9FbmFibGVIYWxmTW9kZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01DUl9IQUxGKTsKIH0KIApAQCAtMjY5Miw4ICsyNjkyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9EaXNhYmxlSGFsZk1vZGUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX01DUl9IQUxGKTsKIH0KIApAQCAtMjcxMyw4ICsyNzEzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fSXNFbmFibGVkSGFsZk1vZGUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NQ1JfSEFMRikgPT0gKEhSVElNX01DUl9IQUxGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjczNCw4ICsyNzM0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9FbmFibGVTdGFydE9uU3luYyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01DUl9TWU5DU1RSVE0pOwogfQogCkBAIC0yNzU1LDggKzI3NTUsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fVElNX0Rpc2FibGVTdGFydE9uU3luYyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fTUNSX1NZTkNTVFJUTSk7CiB9CiAKQEAgLTI3NzYsOCArMjc3Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fVElNX0lzRW5hYmxlZFN0YXJ0T25TeW5jKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTUNSX1NZTkNTVFJUTSkgPT0gKEhSVElNX01DUl9TWU5DU1RSVE0pKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0yNzk4LDggKzI3OTgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fVElNX0VuYWJsZVJlc2V0T25TeW5jKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fTUNSX1NZTkNSU1RNKTsKIH0KIApAQCAtMjgxOSw4ICsyODE5LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9EaXNhYmxlUmVzZXRPblN5bmMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX01DUl9TWU5DUlNUTSk7CiB9CiAKQEAgLTI4NDAsOCArMjg0MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fVElNX0lzRW5hYmxlZFJlc2V0T25TeW5jKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTUNSX1NZTkNSU1RNKSA9PSAoSFJUSU1fTUNSX1NZTkNSU1RNKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMjg2Nyw4ICsyODY3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9TZXREQUNUcmlnKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIsIHVpbnQzMl90IERBQ1RyaWcpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgSFJUSU1fTUNSX0RBQ1NZTkMsIERBQ1RyaWcpOwogfQogCkBAIC0yODkyLDggKzI4OTIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9HZXREQUNUcmlnKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTUNSX0RBQ1NZTkMpKTsKIH0KIApAQCAtMjkxNiw4ICsyOTE2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9FbmFibGVQcmVsb2FkKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fTUNSX1BSRUVOKTsKIH0KIApAQCAtMjkzNyw4ICsyOTM3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9EaXNhYmxlUHJlbG9hZChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fTUNSX1BSRUVOKTsKIH0KIApAQCAtMjk1OCw4ICsyOTU4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fSXNFbmFibGVkUHJlbG9hZChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX01DUl9QUkVFTikgPT0gKEhSVElNX01DUl9QUkVFTikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTMwMDIsOCArMzAwMiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fU2V0VXBkYXRlVHJpZyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBVcGRhdGVUcmlnKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIFJFR19NQVNLX1RBQl9VUERBVEVUUklHW2lUaW1lcl0sIFVwZGF0ZVRyaWcgPDwgUkVHX1NISUZUX1RBQl9VUERBVEVUUklHW2lUaW1lcl0pOwogfQogCkBAIC0zMDQzLDggKzMwNDMsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9HZXRVcGRhdGVUcmlnKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ1IpICsgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgUkVHX01BU0tfVEFCX1VQREFURVRSSUdbaVRpbWVyXSkgPj4gIFJFR19TSElGVF9UQUJfVVBEQVRFVFJJR1tpVGltZXJdKTsKIH0KIApAQCAtMzA4MSw4ICszMDgxLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9TZXRVcGRhdGVHYXRpbmcoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgVXBkYXRlR2F0aW5nKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIFJFR19NQVNLX1RBQl9VUERBVEVHQVRJTkdbaVRpbWVyXSwgKFVwZGF0ZUdhdGluZyA8PCBSRUdfU0hJRlRfVEFCX1VQREFURUdBVElOR1tpVGltZXJdKSk7CiB9CiAKQEAgLTMxMTgsOCArMzExOCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fVElNX0dldFVwZGF0ZUdhdGluZyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNSKSArIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DUikgKyBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsIFJFR19NQVNLX1RBQl9VUERBVEVHQVRJTkdbaVRpbWVyXSkgPj4gIFJFR19TSElGVF9UQUJfVVBEQVRFR0FUSU5HW2lUaW1lcl0pOwogfQogCkBAIC0zMTM3LDggKzMxMzcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fVElNX0VuYWJsZVB1c2hQdWxsTW9kZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlRJTXhDUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlRJTXhDUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX1RJTUNSX1BTSFBMTCk7CiB9CkBAIC0zMTU3LDggKzMxNTcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fVElNX0Rpc2FibGVQdXNoUHVsbE1vZGUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5USU14Q1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5USU14Q1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX1RJTUNSX1BTSFBMTCk7CiB9CkBAIC0zMTc3LDggKzMxNzcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9Jc0VuYWJsZWRQdXNoUHVsbE1vZGUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5USU14Q1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5USU14Q1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fVElNQ1JfUFNIUExMKSA9PSAoSFJUSU1fVElNQ1JfUFNIUExMKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzIwOCwxMCArMzIwOCwxMCBAQAogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fVElNX1NldENvbXBhcmVNb2RlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIsIHVpbnQzMl90IENvbXBhcmVVbml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE1vZGUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uVElNeENSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uVElNeENSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKLSAgcmVnaXN0ZXIgdWludDMyX3Qgc2hpZnQgPSAoKCh1aW50MzJfdClQT1NJVElPTl9WQUwoQ29tcGFyZVVuaXQpIC0gKHVpbnQzMl90KVBPU0lUSU9OX1ZBTChMTF9IUlRJTV9DT01QQVJFVU5JVF8yKSkgJiAweDFGVSk7CisgIHVpbnQzMl90IHNoaWZ0ID0gKCgodWludDMyX3QpUE9TSVRJT05fVkFMKENvbXBhcmVVbml0KSAtICh1aW50MzJfdClQT1NJVElPTl9WQUwoTExfSFJUSU1fQ09NUEFSRVVOSVRfMikpICYgMHgxRlUpOwogICBNT0RJRllfUkVHKCogcFJlZywgKEhSVElNX1RJTUNSX0RFTENNUDIgPDwgc2hpZnQpLCAoTW9kZSA8PCBzaGlmdCkpOwogfQogCkBAIC0zMjM3LDEwICszMjM3LDEwIEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fVElNX0dldENvbXBhcmVNb2RlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIsIHVpbnQzMl90IENvbXBhcmVVbml0KQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlRJTXhDUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlRJTXhDUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHNoaWZ0ID0gKCgodWludDMyX3QpUE9TSVRJT05fVkFMKENvbXBhcmVVbml0KSAtICh1aW50MzJfdClQT1NJVElPTl9WQUwoTExfSFJUSU1fQ09NUEFSRVVOSVRfMikpICYgMHgxRlUpOworICB1aW50MzJfdCBzaGlmdCA9ICgoKHVpbnQzMl90KVBPU0lUSU9OX1ZBTChDb21wYXJlVW5pdCkgLSAodWludDMyX3QpUE9TSVRJT05fVkFMKExMX0hSVElNX0NPTVBBUkVVTklUXzIpKSAmIDB4MUZVKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKEhSVElNX1RJTUNSX0RFTENNUDIgPDwgc2hpZnQpKSA+PiAgc2hpZnQpOwogfQogCkBAIC0zMjY3LDggKzMyNjcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fVElNX1NldENvdW50ZXIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgQ291bnRlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DTlRSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ05UUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKiBwUmVnLCBIUlRJTV9NQ05UUl9NQ05UUiwgQ291bnRlcik7CiB9CkBAIC0zMjg5LDggKzMyODksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9HZXRDb3VudGVyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ05UUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNOVFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICByZXR1cm4gKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NQ05UUl9NQ05UUikpOwogfQpAQCAtMzMxMiw4ICszMzEyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9TZXRQZXJpb2QoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgUGVyaW9kKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTVBFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTVBFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKiBwUmVnLCBIUlRJTV9NUEVSX01QRVIsIFBlcmlvZCk7CiB9CkBAIC0zMzM0LDggKzMzMzQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9HZXRQZXJpb2QoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1QRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1QRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICByZXR1cm4gKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NUEVSX01QRVIpKTsKIH0KQEAgLTMzNTcsOCArMzM1Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fU2V0UmVwZXRpdGlvbihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBSZXBldGl0aW9uKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTVJFUCkgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTVJFUCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKiBwUmVnLCBIUlRJTV9NUkVQX01SRVAsIFJlcGV0aXRpb24pOwogfQpAQCAtMzM3OSw4ICszMzc5LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0UmVwZXRpdGlvbihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTVJFUCkgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTVJFUCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsIEhSVElNX01SRVBfTVJFUCkpOwogfQpAQCAtMzQwNCw4ICszNDA0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9TZXRDb21wYXJlMShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBDb21wYXJlVmFsdWUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ01QMVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DTVAxUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKiBwUmVnLCBIUlRJTV9NQ01QMVJfTUNNUDFSLCBDb21wYXJlVmFsdWUpOwogfQpAQCAtMzQyOCw4ICszNDI4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0Q29tcGFyZTEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DTVAxUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNNUDFSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTUNNUDFSX01DTVAxUikpOwogfQpAQCAtMzQ1Myw4ICszNDUzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9TZXRDb21wYXJlMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBDb21wYXJlVmFsdWUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ01QMlIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DTVAyUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKiBwUmVnLCBIUlRJTV9NQ01QMVJfTUNNUDJSLCBDb21wYXJlVmFsdWUpOwogfQpAQCAtMzQ3Nyw4ICszNDc3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0Q29tcGFyZTIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DTVAyUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNNUDJSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTUNNUDFSX01DTVAyUikpOwogfQpAQCAtMzUwMiw4ICszNTAyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9TZXRDb21wYXJlMyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBDb21wYXJlVmFsdWUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ01QM1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DTVAzUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKiBwUmVnLCBIUlRJTV9NQ01QMVJfTUNNUDNSLCBDb21wYXJlVmFsdWUpOwogfQpAQCAtMzUyNiw4ICszNTI2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0Q29tcGFyZTMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DTVAzUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNNUDNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTUNNUDFSX01DTVAzUikpOwogfQpAQCAtMzU1MSw4ICszNTUxLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9TZXRDb21wYXJlNChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBDb21wYXJlVmFsdWUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NQ01QNFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DTVA0UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKiBwUmVnLCBIUlRJTV9NQ01QMVJfTUNNUDRSLCBDb21wYXJlVmFsdWUpOwogfQpAQCAtMzU3NSw4ICszNTc1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0Q29tcGFyZTQoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1DTVA0UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUNNUDRSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTUNNUDFSX01DTVA0UikpOwogfQpAQCAtMzY2Miw4ICszNjYyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9TZXRSZXNldFRyaWcoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgUmVzZXRUcmlnKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlJTVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uUlNUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBXUklURV9SRUcoKnBSZWcsIFJlc2V0VHJpZyk7CiB9CkBAIC0zNzQyLDggKzM3NDIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9HZXRSZXNldFRyaWcoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5SU1R4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlJTVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX1JFRygqcFJlZykpOwogfQpAQCAtMzc2Miw4ICszNzYyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0Q2FwdHVyZTEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5DUFQxeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5DUFQxeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICByZXR1cm4gKFJFQURfUkVHKCpwUmVnKSk7CiB9CkBAIC0zNzgyLDggKzM3ODIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9HZXRDYXB0dXJlMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkNQVDJ4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkNQVDJ4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIHJldHVybiAoUkVBRF9SRUcoKnBSZWcpKTsKIH0KQEAgLTM4NzAsOCArMzg3MCw4IEBACiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fU2V0Q2FwdHVyZVRyaWcoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgQ2FwdHVyZVVuaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQ2FwdHVyZVRyaWcpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMFVdLkNQVDF4Q1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swVV0uQ1BUMXhDUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdICsgKENhcHR1cmVVbml0ICogNFUpKSk7CiAgIFdSSVRFX1JFRygqcFJlZywgQ2FwdHVyZVRyaWcpOwogfQpAQCAtMzk1Niw4ICszOTU2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0Q2FwdHVyZVRyaWcoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgQ2FwdHVyZVVuaXQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMFVdLkNQVDF4Q1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swVV0uQ1BUMXhDUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdICsgKENhcHR1cmVVbml0ICogNFUpKSk7CiAgIHJldHVybiAoUkVBRF9SRUcoKnBSZWcpKTsKIH0KQEAgLTM5NzYsOCArMzk3Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fRW5hYmxlRGVhZFRpbWUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fT1VUUl9EVEVOKTsKIH0KQEAgLTM5OTYsOCArMzk5Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fRGlzYWJsZURlYWRUaW1lKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fT1VUUl9EVEVOKTsKIH0KQEAgLTQwMTYsOCArNDAxNiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fVElNX0lzRW5hYmxlZERlYWRUaW1lKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX09VVFJfRFRFTikgPT0gKEhSVElNX09VVFJfRFRFTikpID8gMVVMIDogMFVMKTsKQEAgLTQwNjEsOCArNDA2MSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fU2V0RExZUFJUTW9kZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBETFlQUlRNb2RlKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCBIUlRJTV9PVVRSX0RMWVBSVCwgRExZUFJUTW9kZSk7CiB9CkBAIC00MTAyLDggKzQxMDIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9HZXRETFlQUlRNb2RlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsIEhSVElNX09VVFJfRExZUFJUKSk7CiB9CkBAIC00MTIzLDggKzQxMjMsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fVElNX0VuYWJsZURMWVBSVChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9PVVRSX0RMWVBSVEVOKTsKIH0KQEAgLTQxNDQsOCArNDE0NCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fRGlzYWJsZURMWVBSVChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX09VVFJfRExZUFJURU4pOwogfQpAQCAtNDE2NCw4ICs0MTY0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fSXNFbmFibGVkRExZUFJUKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9PVVRSX0RMWVBSVEVOKSA9PSAoSFJUSU1fT1VUUl9ETFlQUlRFTikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQxOTQsOCArNDE5NCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fRW5hYmxlRmF1bHQoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgRmF1bHRzKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkZMVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRkxUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBGYXVsdHMpOwogfQpAQCAtNDIyNCw4ICs0MjI0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9EaXNhYmxlRmF1bHQoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgRmF1bHRzKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkZMVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRkxUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEZhdWx0cyk7CiB9CkBAIC00MjU0LDggKzQyNTQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9Jc0VuYWJsZWRGYXVsdChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBGYXVsdCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5GTFR4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkZMVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgRmF1bHQpID09IChGYXVsdCkpID8gMVVMIDogMFVMKTsKQEAgLTQyNzYsOCArNDI3Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fTG9ja0ZhdWx0KEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRkxUeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5GTFR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX0ZMVFJfRkxUTENLKTsKIH0KQEAgLTQzMDYsNyArNDMwNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fU2V0QnVyc3RNb2RlT3B0aW9uKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIsIHVpbnQzMl90IEJ1cnRzTW9kZU9wdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKChQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKSAmIDB4MUZVKTsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKChQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKSAmIDB4MUZVKTsKICAgTU9ESUZZX1JFRyhIUlRJTXgtPnNDb21tb25SZWdzLkJNQ1IsIFRpbWVyLCBCdXJ0c01vZGVPcHRpb24gPDwgaVRpbWVyKTsKIH0KIApAQCAtNDMzMiw3ICs0MzMyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0QnVyc3RNb2RlT3B0aW9uKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KSgoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1BvcykgJiAweDFGVSk7CisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KSgoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1BvcykgJiAweDFGVSk7CiAgIHJldHVybiAoUkVBRF9CSVQoSFJUSU14LT5zQ29tbW9uUmVncy5CTUNSLCBUaW1lcikgPj4gaVRpbWVyKTsKIH0KIApAQCAtNDQxOSw4ICs0NDE5LDggQEAKIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9Db25maWdCdXJzdERNQShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBSZWdpc3RlcnMpCiB7CiAKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkJETVVQUikgKyAoNFUgKiBpVGltZXIpKSk7CisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5CRE1VUFIpICsgKDRVICogaVRpbWVyKSkpOwogICBXUklURV9SRUcoKnBSZWcsIFJlZ2lzdGVycyk7CiB9CiAKQEAgLTQ0NDEsOCArNDQ0MSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fVElNX0dldEN1cnJlbnRQdXNoUHVsbFN0YXR1cyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlTUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlTUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsIEhSVElNX1RJTUlTUl9DUFBTVEFUKSk7CiB9CkBAIC00NDYzLDggKzQ0NjMsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9HZXRJZGxlUHVzaFB1bGxTdGF0dXMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICByZXR1cm4gKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1JU1JfSVBQU1RBVCkpOwogfQpAQCAtNDUyMiw5ICs0NTIyLDkgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX1RJTV9TZXRFdmVudEZpbHRlcihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBFdmVudCwgdWludDMyX3QgRmlsdGVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9USU1FUl9BKSk7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzEpKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5FRUZ4UjEpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fVElNRVJfQSkpOworICB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF8xKSk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRUVGeFIxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0gKyBSRUdfT0ZGU0VUX1RBQl9FRUNSW2lFdmVudF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKEhSVElNX0VFRlIxX0VFMUZMVFIgPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSksIChGaWx0ZXIgPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSkpOwogfQpAQCAtNDU3OSw5ICs0NTc5LDkgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9USU1fR2V0RXZlbnRGaWx0ZXIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgRXZlbnQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX1RJTUVSX0EpKTsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkVFRnhSMSkgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9USU1FUl9BKSk7CisgIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzEpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5FRUZ4UjEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSArIFJFR19PRkZTRVRfVEFCX0VFQ1JbaUV2ZW50XSkpOwogICByZXR1cm4gKFJFQURfQklUKCpwUmVnLCAodWludDMyX3QpKEhSVElNX0VFRlIxX0VFMUZMVFIpIDw8IChSRUdfU0hJRlRfVEFCX0VFeFNSQ1tpRXZlbnRdKSkgPj4gKFJFR19TSElGVF9UQUJfRUV4U1JDW2lFdmVudF0pKTsKIH0KQEAgLTQ2MjUsOSArNDYyNSw5IEBACiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9USU1fU2V0RXZlbnRMYXRjaFN0YXR1cyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IExhdGNoU3RhdHVzKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9USU1FUl9BKSk7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzEpKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5FRUZ4UjEpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fVElNRVJfQSkpOworICB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF8xKSk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRUVGeFIxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0gKyBSRUdfT0ZGU0VUX1RBQl9FRUNSW2lFdmVudF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKEhSVElNX0VFRlIxX0VFMUxUQ0ggPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSksIChMYXRjaFN0YXR1cyA8PCBSRUdfU0hJRlRfVEFCX0VFeFNSQ1tpRXZlbnRdKSk7CiB9CkBAIC00NjY4LDkgKzQ2NjgsOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX1RJTV9HZXRFdmVudExhdGNoU3RhdHVzKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIsIHVpbnQzMl90IEV2ZW50KQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9USU1FUl9BKSk7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzEpKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5FRUZ4UjEpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fVElNRVJfQSkpOworICB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF8xKSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRUVGeFIxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0gKyBSRUdfT0ZGU0VUX1RBQl9FRUNSW2lFdmVudF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKHVpbnQzMl90KShIUlRJTV9FRUZSMV9FRTFMVENIKSA8PCBSRUdfU0hJRlRfVEFCX0VFeFNSQ1tpRXZlbnRdKSA+PiAoUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSkpOwogfQpAQCAtNDcwMyw4ICs0NzAzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0RUX0NvbmZpZyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBDb25maWd1cmF0aW9uKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkRUeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgSFJUSU1fRFRSX1NEVEYgfCBIUlRJTV9EVFJfRFRQUlNDIHwgSFJUSU1fRFRSX1NEVFIsIENvbmZpZ3VyYXRpb24pOwogfQpAQCAtNDczMiw4ICs0NzMyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0RUX1NldFByZXNjYWxlcihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBQcmVzY2FsZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkRUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCBIUlRJTV9EVFJfRFRQUlNDLCBQcmVzY2FsZXIpOwogfQpAQCAtNDc2MCw4ICs0NzYwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9EVF9HZXRQcmVzY2FsZXIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsIEhSVElNX0RUUl9EVFBSU0MpKTsKIH0KQEAgLTQ3ODEsOCArNDc4MSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EVF9TZXRSaXNpbmdWYWx1ZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyLCB1aW50MzJfdCBSaXNpbmdWYWx1ZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIEhSVElNX0RUUl9EVFIsIFJpc2luZ1ZhbHVlKTsKIH0KQEAgLTQ4MDEsOCArNDgwMSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fRFRfR2V0UmlzaW5nVmFsdWUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsIEhSVElNX0RUUl9EVFIpKTsKIH0KQEAgLTQ4MjQsOCArNDgyNCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EVF9TZXRSaXNpbmdTaWduKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIsIHVpbnQzMl90IFJpc2luZ1NpZ24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkRUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCBIUlRJTV9EVFJfU0RUUiwgUmlzaW5nU2lnbik7CiB9CkBAIC00ODQ2LDggKzQ4NDYsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0RUX0dldFJpc2luZ1NpZ24oSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsIEhSVElNX0RUUl9TRFRSKSk7CiB9CkBAIC00ODY3LDggKzQ4NjcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRFRfU2V0RmFsbGluZ1ZhbHVlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIsIHVpbnQzMl90IEZhbGxpbmdWYWx1ZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIEhSVElNX0RUUl9EVEYsIEZhbGxpbmdWYWx1ZSA8PCBIUlRJTV9EVFJfRFRGX1Bvcyk7CiB9CkBAIC00ODg3LDggKzQ4ODcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0RUX0dldEZhbGxpbmdWYWx1ZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkRUeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX0RUUl9EVEYpKSA+PiBIUlRJTV9EVFJfRFRGX1Bvcyk7CiB9CkBAIC00OTEwLDggKzQ5MTAsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRFRfU2V0RmFsbGluZ1NpZ24oSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgRmFsbGluZ1NpZ24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkRUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCBIUlRJTV9EVFJfU0RURiwgRmFsbGluZ1NpZ24pOwogfQpAQCAtNDkzMiw4ICs0OTMyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9EVF9HZXRGYWxsaW5nU2lnbihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkRUeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgSFJUSU1fRFRSX1NEVEYpKTsKIH0KQEAgLTQ5NTIsOCArNDk1Miw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EVF9Mb2NrUmlzaW5nKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkRUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9EVFJfRFRSTEspOwogfQpAQCAtNDk3Miw4ICs0OTcyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0RUX0xvY2tSaXNpbmdTaWduKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkRUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9EVFJfRFRSU0xLKTsKIH0KQEAgLTQ5OTIsOCArNDk5Miw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EVF9Mb2NrRmFsbGluZyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkRUeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fRFRSX0RURkxLKTsKIH0KQEAgLTUwMTIsOCArNTAxMiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EVF9Mb2NrRmFsbGluZ1NpZ24oSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5EVHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uRFR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX0RUUl9EVEZTTEspOwogfQpAQCAtNTA0OCw4ICs1MDQ4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NIUF9Db25maWcoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgQ29uZmlndXJhdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5DSFB4UikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkNIUHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgSFJUSU1fQ0hQUl9TVFJQVyB8IEhSVElNX0NIUFJfQ0FSRFRZIHwgSFJUSU1fQ0hQUl9DQVJGUlEsIENvbmZpZ3VyYXRpb24pOwogfQpAQCAtNTA4OCw4ICs1MDg4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NIUF9TZXRQcmVzY2FsZXIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgUHJlc2NhbGVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkNIUHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uQ0hQeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCBIUlRJTV9DSFBSX0NBUkZSUSwgUHJlc2NhbGVyKTsKIH0KQEAgLTUxMjQsOCArNTEyNCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fQ0hQX0dldFByZXNjYWxlcihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkNIUHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uQ0hQeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICByZXR1cm4gKFJFQURfQklUKCpwUmVnLCBIUlRJTV9DSFBSX0NBUkZSUSkpOwogfQpAQCAtNTE1Niw4ICs1MTU2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NIUF9TZXREdXR5Q3ljbGUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lciwgdWludDMyX3QgRHV0eUN5Y2xlKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkNIUHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uQ0hQeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCBIUlRJTV9DSFBSX0NBUkRUWSwgRHV0eUN5Y2xlKTsKIH0KQEAgLTUxODQsOCArNTE4NCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fQ0hQX0dldER1dHlDeWNsZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkNIUHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uQ0hQeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICByZXR1cm4gKFJFQURfQklUKCpwUmVnLCBIUlRJTV9DSFBSX0NBUkRUWSkpOwogfQpAQCAtNTIyMyw4ICs1MjIzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NIUF9TZXRQdWxzZVdpZHRoKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIsIHVpbnQzMl90IFB1bHNlV2lkdGgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uQ0hQeFIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfVEFDRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5DSFB4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIEhSVElNX0NIUFJfU1RSUFcsIFB1bHNlV2lkdGgpOwogfQpAQCAtNTI1OSw4ICs1MjU5LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9DSFBfR2V0UHVsc2VXaWR0aChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9UQUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLkNIUHhSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX1RBQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uQ0hQeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICByZXR1cm4gKFJFQURfQklUKCpwUmVnLCBIUlRJTV9DSFBSX1NUUlBXKSk7CiB9CkBAIC01Mzg4LDggKzUzODgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fT1VUX1NldE91dHB1dFNldFNyYyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IE91dHB1dCwgdWludDMyX3QgU2V0U3JjKQogewotICByZWdpc3RlciB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5TRVR4MVIpICsKKyAgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uU0VUeDFSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1NFVHhSW2lPdXRwdXRdKSk7CiAgIFdSSVRFX1JFRygqcFJlZywgU2V0U3JjKTsKIH0KQEAgLTU1MDgsOCArNTUwOCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fT1VUX0dldE91dHB1dFNldFNyYyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IE91dHB1dCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uU0VUeDFSKSArCisgIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlNFVHgxUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9TRVR4UltpT3V0cHV0XSkpOwogICByZXR1cm4gKHVpbnQzMl90KSBSRUFEX1JFRygqcFJlZyk7CiB9CkBAIC01NjI5LDggKzU2MjksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fT1VUX1NldE91dHB1dFJlc2V0U3JjKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgT3V0cHV0LCB1aW50MzJfdCBSZXNldFNyYykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uUlNUeDFSKSArCisgIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlJTVHgxUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9TRVR4UltpT3V0cHV0XSkpOwogICBXUklURV9SRUcoKnBSZWcsIFJlc2V0U3JjKTsKIH0KQEAgLTU3NDksOCArNTc0OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fT1VUX0dldE91dHB1dFJlc2V0U3JjKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgT3V0cHV0KQogewotICByZWdpc3RlciB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5SU1R4MVIpICsKKyAgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uUlNUeDFSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1NFVHhSW2lPdXRwdXRdKSk7CiAgIHJldHVybiAodWludDMyX3QpIFJFQURfUkVHKCpwUmVnKTsKIH0KQEAgLTU3OTIsOCArNTc5Miw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9PVVRfQ29uZmlnKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgT3V0cHV0LCB1aW50MzJfdCBDb25maWd1cmF0aW9uKQogewotICByZWdpc3RlciB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKworICB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9PVVR4UltpT3V0cHV0XSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoSFJUSU1fT1VUX0NPTkZJR19NQVNLIDw8IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pLAogICAgICAgICAgICAgIChDb25maWd1cmF0aW9uIDw8IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pKTsKQEAgLTU4MjIsOCArNTgyMiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9PVVRfU2V0UG9sYXJpdHkoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBPdXRwdXQsIHVpbnQzMl90IFBvbGFyaXR5KQogewotICByZWdpc3RlciB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKworICB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9PVVR4UltpT3V0cHV0XSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoSFJUSU1fT1VUUl9QT0wxIDw8IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pLCAoUG9sYXJpdHkgPDwgUkVHX1NISUZUX1RBQl9PVVR4UltpT3V0cHV0XSkpOwogfQpAQCAtNTg1MCw4ICs1ODUwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9PVVRfR2V0UG9sYXJpdHkoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBPdXRwdXQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsICh1aW50MzJfdCkoSFJUSU1fT1VUUl9QT0wxKSA8PCBSRUdfU0hJRlRfVEFCX09VVHhSW2lPdXRwdXRdKSA+PiBSRUdfU0hJRlRfVEFCX09VVHhSW2lPdXRwdXRdKTsKIH0KQEAgLTU4ODAsOCArNTg4MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9PVVRfU2V0SWRsZU1vZGUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBPdXRwdXQsIHVpbnQzMl90IElkbGVNb2RlKQogewotICByZWdpc3RlciB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKworICB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9PVVR4UltpT3V0cHV0XSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoSFJUSU1fT1VUUl9JRExNMSA8PCAoUkVHX1NISUZUX1RBQl9PVVR4UltpT3V0cHV0XSkpLCAoSWRsZU1vZGUgPDwgKFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pKSk7CiB9CkBAIC01OTA4LDggKzU5MDgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX09VVF9HZXRJZGxlTW9kZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IE91dHB1dCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKKyAgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfT1VUeFJbaU91dHB1dF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKHVpbnQzMl90KShIUlRJTV9PVVRSX0lETE0xKSA8PCBSRUdfU0hJRlRfVEFCX09VVHhSW2lPdXRwdXRdKSA+PiBSRUdfU0hJRlRfVEFCX09VVHhSW2lPdXRwdXRdKTsKIH0KQEAgLTU5MzksOCArNTkzOSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9PVVRfU2V0SWRsZUxldmVsKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgT3V0cHV0LCB1aW50MzJfdCBJZGxlTGV2ZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIChIUlRJTV9PVVRSX0lETEVTMSA8PCBSRUdfU0hJRlRfVEFCX09VVHhSW2lPdXRwdXRdKSwgKElkbGVMZXZlbCA8PCBSRUdfU0hJRlRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiB9CkBAIC01OTY3LDggKzU5NjcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX09VVF9HZXRJZGxlTGV2ZWwoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBPdXRwdXQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsICh1aW50MzJfdCkoSFJUSU1fT1VUUl9JRExFUzEpIDw8IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pID4+IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pOwogfQpAQCAtNjAwMCw4ICs2MDAwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX09VVF9TZXRGYXVsdFN0YXRlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgT3V0cHV0LCB1aW50MzJfdCBGYXVsdFN0YXRlKQogewotICByZWdpc3RlciB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKworICB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5PVVR4UikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9PVVR4UltpT3V0cHV0XSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoSFJUSU1fT1VUUl9GQVVMVDEgPDwgUkVHX1NISUZUX1RBQl9PVVR4UltpT3V0cHV0XSksIChGYXVsdFN0YXRlIDw8IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pKTsKIH0KQEAgLTYwMzAsOCArNjAzMCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fT1VUX0dldEZhdWx0U3RhdGUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBPdXRwdXQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsICh1aW50MzJfdCkoSFJUSU1fT1VUUl9GQVVMVDEpIDw8IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pID4+IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pOwogfQpAQCAtNjA2MCw4ICs2MDYwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX09VVF9TZXRDaG9wcGVyTW9kZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IE91dHB1dCwgdWludDMyX3QgQ2hvcHBlck1vZGUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIChIUlRJTV9PVVRSX0NIUDEgPDwgUkVHX1NISUZUX1RBQl9PVVR4UltpT3V0cHV0XSksIChDaG9wcGVyTW9kZSA8PCBSRUdfU0hJRlRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiB9CkBAIC02MDg4LDggKzYwODgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX09VVF9HZXRDaG9wcGVyTW9kZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IE91dHB1dCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKKyAgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uT1VUeFIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfT1VUeFJbaU91dHB1dF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKHVpbnQzMl90KShIUlRJTV9PVVRSX0NIUDEpIDw8IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pID4+IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pOwogfQpAQCAtNjExOCw4ICs2MTE4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX09VVF9TZXRCTUVudHJ5TW9kZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IE91dHB1dCwgdWludDMyX3QgQk1FbnRyeU1vZGUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIChIUlRJTV9PVVRSX0RJREwxIDw8IFJFR19TSElGVF9UQUJfT1VUeFJbaU91dHB1dF0pLCAoQk1FbnRyeU1vZGUgPDwgUkVHX1NISUZUX1RBQl9PVVR4UltpT3V0cHV0XSkpOwogfQpAQCAtNjE0Niw4ICs2MTQ2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9PVVRfR2V0Qk1FbnRyeU1vZGUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBPdXRwdXQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCisgIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLk9VVHhSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsICh1aW50MzJfdCkoSFJUSU1fT1VUUl9ESURMMSkgPDwgUkVHX1NISUZUX1RBQl9PVVR4UltpT3V0cHV0XSkgPj4gUkVHX1NISUZUX1RBQl9PVVR4UltpT3V0cHV0XSk7CiB9CkBAIC02MTc1LDggKzYxNzUsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX09VVF9HZXRETFlQUlRPdXRTdGF0dXMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBPdXRwdXQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlRJTXhJU1IpICsKKyAgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uVElNeElTUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9PVVR4UltpT3V0cHV0XSkpOwogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgKHVpbnQzMl90KShIUlRJTV9USU1JU1JfTzFTVEFUKSA8PCBSRUdfU0hJRlRfVEFCX094U1RBVFtpT3V0cHV0XSkgPj4gUkVHX1NISUZUX1RBQl9PeFNUQVRbaU91dHB1dF0pID4+CiAgICAgICAgICAgSFJUSU1fVElNSVNSX08xU1RBVF9Qb3MpOwpAQCAtNjIxMyw4ICs2MjEzLDggQEAKICAgICAweDAwVSAgICAvKiAxOiBMTF9IUlRJTV9PVVRfTEVWRUxfQUNUSVZFICAqLwogICB9OwogCi0gIHJlZ2lzdGVyIHVpbnQzMl90IGlPdXRwdXQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKE91dHB1dCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fT1VUUFVUX1RBMSkpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNUaW1lcnhSZWdzWzBdLlNFVHgxUikgKworICB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5TRVR4MVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfU0VUeFJbaU91dHB1dF0gKyBSRUdfT0ZGU0VUX1RBQl9PVVRfTEVWRUxbT3V0cHV0TGV2ZWxdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX1NFVDFSX1NTVCk7CiB9CkBAIC02MjQxLDggKzYyNDEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX09VVF9HZXRMZXZlbChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IE91dHB1dCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaU91dHB1dCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoT3V0cHV0KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9PVVRQVVRfVEExKSk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c1RpbWVyeFJlZ3NbMF0uVElNeElTUikgKworICB1aW50MzJfdCBpT3V0cHV0ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChPdXRwdXQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX09VVFBVVF9UQTEpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zVGltZXJ4UmVnc1swXS5USU14SVNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX09VVHhSW2lPdXRwdXRdKSk7CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCAodWludDMyX3QpKEhSVElNX1RJTUlTUl9PMUNQWSkgPDwgUkVHX1NISUZUX1RBQl9PeFNUQVRbaU91dHB1dF0pID4+IFJFR19TSElGVF9UQUJfT3hTVEFUW2lPdXRwdXRdKSA+PgogICAgICAgICAgIEhSVElNX1RJTUlTUl9PMUNQWV9Qb3MpOwpAQCAtNjMyMiw4ICs2MzIyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VFX0NvbmZpZyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEV2ZW50LCB1aW50MzJfdCBDb25maWd1cmF0aW9uKQogewotICByZWdpc3RlciB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF8xKSk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRUVDUjEpICsKKyAgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkVFQ1IxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX0VFQ1JbaUV2ZW50XSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoSFJUSU1fRUVfQ09ORklHX01BU0sgPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSksCiAgICAgICAgICAgICAgKENvbmZpZ3VyYXRpb24gPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSkpOwpAQCAtNjM2Miw4ICs2MzYyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VFX1NldFNyYyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEV2ZW50LCB1aW50MzJfdCBTcmMpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzEpKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5FRUNSMSkgKworICB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF8xKSk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRUVDUjEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfRUVDUltpRXZlbnRdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsIChIUlRJTV9FRUNSMV9FRTFTUkMgPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSksIChTcmMgPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSkpOwogfQpAQCAtNjQwMCw4ICs2NDAwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9FRV9HZXRTcmMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBFdmVudCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkVFQ1IxKSArCisgIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzEpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5FRUNSMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9FRUNSW2lFdmVudF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKHVpbnQzMl90KShIUlRJTV9FRUNSMV9FRTFTUkMpIDw8IFJFR19TSElGVF9UQUJfRUV4U1JDW2lFdmVudF0pID4+ICBSRUdfU0hJRlRfVEFCX0VFeFNSQ1tpRXZlbnRdKTsKIH0KQEAgLTY0MzksOCArNjQzOSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9FRV9TZXRQb2xhcml0eShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEV2ZW50LCB1aW50MzJfdCBQb2xhcml0eSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkVFQ1IxKSArCisgIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzEpKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5FRUNSMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9FRUNSW2lFdmVudF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKEhSVElNX0VFQ1IxX0VFMVBPTCA8PCBSRUdfU0hJRlRfVEFCX0VFeFNSQ1tpRXZlbnRdKSwgKFBvbGFyaXR5IDw8IFJFR19TSElGVF9UQUJfRUV4U1JDW2lFdmVudF0pKTsKIH0KQEAgLTY0NzUsOCArNjQ3NSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fRUVfR2V0UG9sYXJpdHkoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBFdmVudCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkVFQ1IxKSArCisgIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzEpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5FRUNSMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9FRUNSW2lFdmVudF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKHVpbnQzMl90KShIUlRJTV9FRUNSMV9FRTFQT0wpIDw8IFJFR19TSElGVF9UQUJfRUV4U1JDW2lFdmVudF0pID4+ICBSRUdfU0hJRlRfVEFCX0VFeFNSQ1tpRXZlbnRdKTsKIH0KQEAgLTY1MTUsOCArNjUxNSw4IEBACiAKIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VFX1NldFNlbnNpdGl2aXR5KEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgRXZlbnQsIHVpbnQzMl90IFNlbnNpdGl2aXR5KQogewotICByZWdpc3RlciB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF8xKSk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRUVDUjEpICsKKyAgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkVFQ1IxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX0VFQ1JbaUV2ZW50XSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoSFJUSU1fRUVDUjFfRUUxU05TIDw8IFJFR19TSElGVF9UQUJfRUV4U1JDW2lFdmVudF0pLCAoU2Vuc2l0aXZpdHkgPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSkpOwogfQpAQCAtNjU1Myw4ICs2NTUzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9FRV9HZXRTZW5zaXRpdml0eShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEV2ZW50KQogewotICByZWdpc3RlciB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF8xKSk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRUVDUjEpICsKKyAgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkVFQ1IxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX0VFQ1JbaUV2ZW50XSkpOwogICByZXR1cm4gKFJFQURfQklUKCpwUmVnLCAodWludDMyX3QpKEhSVElNX0VFQ1IxX0VFMVNOUykgPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSkgPj4gIFJFR19TSElGVF9UQUJfRUV4U1JDW2lFdmVudF0pOwogfQpAQCAtNjU4Niw4ICs2NTg2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VFX1NldEZhc3RNb2RlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgRXZlbnQsIHVpbnQzMl90IEZhc3RNb2RlKQogewotICByZWdpc3RlciB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF8xKSk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRUVDUjEpICsKKyAgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkVFQ1IxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX0VFQ1JbaUV2ZW50XSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoSFJUSU1fRUVDUjFfRUUxRkFTVCA8PCBSRUdfU0hJRlRfVEFCX0VFeFNSQ1tpRXZlbnRdKSwgKEZhc3RNb2RlIDw8IFJFR19TSElGVF9UQUJfRUV4U1JDW2lFdmVudF0pKTsKIH0KQEAgLTY2MTcsOCArNjYxNyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fRUVfR2V0RmFzdE1vZGUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBFdmVudCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkVFQ1IxKSArCisgIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzEpKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5FRUNSMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9FRUNSW2lFdmVudF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKHVpbnQzMl90KShIUlRJTV9FRUNSMV9FRTFGQVNUKSA8PCBSRUdfU0hJRlRfVEFCX0VFeFNSQ1tpRXZlbnRdKSA+PiAgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSk7CiB9CkBAIC02NjU4LDcgKzY2NTgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRUVfU2V0RmlsdGVyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgRXZlbnQsIHVpbnQzMl90IEZpbHRlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaUV2ZW50ID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChFdmVudCkgLSBQT1NJVElPTl9WQUwoTExfSFJUSU1fRVZFTlRfMSkpOworICB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF8xKSk7CiAgIE1PRElGWV9SRUcoSFJUSU14LT5zQ29tbW9uUmVncy5FRUNSMywgKEhSVElNX0VFQ1IzX0VFNkYgPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSksCiAgICAgICAgICAgICAgKEZpbHRlciA8PCBSRUdfU0hJRlRfVEFCX0VFeFNSQ1tpRXZlbnRdKSk7CiB9CkBAIC02Njk3LDcgKzY2OTcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0VFX0dldEZpbHRlcihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEV2ZW50KQogewotICByZWdpc3RlciB1aW50MzJfdCBpRXZlbnQgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKEV2ZW50KSAtIFBPU0lUSU9OX1ZBTChMTF9IUlRJTV9FVkVOVF82KSk7CisgIHVpbnQzMl90IGlFdmVudCA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoRXZlbnQpIC0gUE9TSVRJT05fVkFMKExMX0hSVElNX0VWRU5UXzYpKTsKICAgcmV0dXJuIChSRUFEX0JJVChIUlRJTXgtPnNDb21tb25SZWdzLkVFQ1IzLAogICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkoSFJUSU1fRUVDUjNfRUU2RikgPDwgUkVHX1NISUZUX1RBQl9FRXhTUkNbaUV2ZW50XSkgPj4gIFJFR19TSElGVF9UQUJfRUV4U1JDW2lFdmVudF0pOwogfQpAQCAtNjc2OSw4ICs2NzY5LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0ZMVF9Db25maWcoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBGYXVsdCwgdWludDMyX3QgQ29uZmlndXJhdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaUZhdWx0ID0gKHVpbnQ4X3QpUE9TSVRJT05fVkFMKEZhdWx0KTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5GTFRJTlIxKSArCisgIHVpbnQzMl90IGlGYXVsdCA9ICh1aW50OF90KVBPU0lUSU9OX1ZBTChGYXVsdCk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRkxUSU5SMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9GTFRJTlJbaUZhdWx0XSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoSFJUSU1fRkxUX0NPTkZJR19NQVNLIDw8IFJFR19TSElGVF9UQUJfRkxUeEVbaUZhdWx0XSksCiAgICAgICAgICAgICAgKENvbmZpZ3VyYXRpb24gPDwgUkVHX1NISUZUX1RBQl9GTFR4RVtpRmF1bHRdKSk7CkBAIC02Nzk4LDggKzY3OTgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRkxUX1NldFNyYyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEZhdWx0LCB1aW50MzJfdCBTcmMpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlGYXVsdCA9ICh1aW50OF90KVBPU0lUSU9OX1ZBTChGYXVsdCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRkxUSU5SMSkgKworICB1aW50MzJfdCBpRmF1bHQgPSAodWludDhfdClQT1NJVElPTl9WQUwoRmF1bHQpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkZMVElOUjEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfRkxUSU5SW2lGYXVsdF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKEhSVElNX0ZMVElOUjFfRkxUMVNSQyA8PCBSRUdfU0hJRlRfVEFCX0ZMVHhFW2lGYXVsdF0pLCAoU3JjIDw8IFJFR19TSElGVF9UQUJfRkxUeEVbaUZhdWx0XSkpOwogfQpAQCAtNjgyNCw4ICs2ODI0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9GTFRfR2V0U3JjKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgRmF1bHQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlGYXVsdCA9ICh1aW50OF90KVBPU0lUSU9OX1ZBTChGYXVsdCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRkxUSU5SMSkgKworICB1aW50MzJfdCBpRmF1bHQgPSAodWludDhfdClQT1NJVElPTl9WQUwoRmF1bHQpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkZMVElOUjEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfRkxUSU5SW2lGYXVsdF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKEhSVElNX0ZMVElOUjFfRkxUMVNSQyA8PCBSRUdfU0hJRlRfVEFCX0ZMVHhFW2lGYXVsdF0pKSA+PiAgUkVHX1NISUZUX1RBQl9GTFR4RVtpRmF1bHRdKTsKIH0KQEAgLTY4NTIsOCArNjg1Miw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9GTFRfU2V0UG9sYXJpdHkoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBGYXVsdCwgdWludDMyX3QgUG9sYXJpdHkpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlGYXVsdCA9ICh1aW50OF90KVBPU0lUSU9OX1ZBTChGYXVsdCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRkxUSU5SMSkgKworICB1aW50MzJfdCBpRmF1bHQgPSAodWludDhfdClQT1NJVElPTl9WQUwoRmF1bHQpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkZMVElOUjEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfRkxUSU5SW2lGYXVsdF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKEhSVElNX0ZMVElOUjFfRkxUMVAgPDwgUkVHX1NISUZUX1RBQl9GTFR4RVtpRmF1bHRdKSwgKFBvbGFyaXR5IDw8IFJFR19TSElGVF9UQUJfRkxUeEVbaUZhdWx0XSkpOwogfQpAQCAtNjg3OCw4ICs2ODc4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9GTFRfR2V0UG9sYXJpdHkoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBGYXVsdCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaUZhdWx0ID0gKHVpbnQ4X3QpUE9TSVRJT05fVkFMKEZhdWx0KTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5GTFRJTlIxKSArCisgIHVpbnQzMl90IGlGYXVsdCA9ICh1aW50OF90KVBPU0lUSU9OX1ZBTChGYXVsdCk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRkxUSU5SMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9GTFRJTlJbaUZhdWx0XSkpOwogICByZXR1cm4gKFJFQURfQklUKCpwUmVnLCAoSFJUSU1fRkxUSU5SMV9GTFQxUCA8PCBSRUdfU0hJRlRfVEFCX0ZMVHhFW2lGYXVsdF0pKSA+PiAgUkVHX1NISUZUX1RBQl9GTFR4RVtpRmF1bHRdKTsKIH0KQEAgLTY5MjAsOCArNjkyMCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9GTFRfU2V0RmlsdGVyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgRmF1bHQsIHVpbnQzMl90IEZpbHRlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaUZhdWx0ID0gKHVpbnQ4X3QpUE9TSVRJT05fVkFMKEZhdWx0KTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5GTFRJTlIxKSArCisgIHVpbnQzMl90IGlGYXVsdCA9ICh1aW50OF90KVBPU0lUSU9OX1ZBTChGYXVsdCk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRkxUSU5SMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9GTFRJTlJbaUZhdWx0XSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoSFJUSU1fRkxUSU5SMV9GTFQxRiA8PCBSRUdfU0hJRlRfVEFCX0ZMVHhFW2lGYXVsdF0pLCAoRmlsdGVyIDw8IFJFR19TSElGVF9UQUJfRkxUeEVbaUZhdWx0XSkpOwogfQpAQCAtNjk2MCw4ICs2OTYwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9GTFRfR2V0RmlsdGVyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgRmF1bHQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlGYXVsdCA9ICh1aW50OF90KVBPU0lUSU9OX1ZBTChGYXVsdCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRkxUSU5SMSkgKworICB1aW50MzJfdCBpRmF1bHQgPSAodWludDhfdClQT1NJVElPTl9WQUwoRmF1bHQpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkZMVElOUjEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfRkxUSU5SW2lGYXVsdF0pKTsKICAgcmV0dXJuIChSRUFEX0JJVCgqcFJlZywgKEhSVElNX0ZMVElOUjFfRkxUMUYgPDwgUkVHX1NISUZUX1RBQl9GTFR4RVtpRmF1bHRdKSkgPj4gIFJFR19TSElGVF9UQUJfRkxUeEVbaUZhdWx0XSk7CiAKQEAgLTcwMTYsOCArNzAxNiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9GTFRfTG9jayhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEZhdWx0KQogewotICByZWdpc3RlciB1aW50MzJfdCBpRmF1bHQgPSAodWludDhfdClQT1NJVElPTl9WQUwoRmF1bHQpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkZMVElOUjEpICsKKyAgdWludDMyX3QgaUZhdWx0ID0gKHVpbnQ4X3QpUE9TSVRJT05fVkFMKEZhdWx0KTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5GTFRJTlIxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX0ZMVElOUltpRmF1bHRdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIChIUlRJTV9GTFRJTlIxX0ZMVDFMQ0sgPDwgUkVHX1NISUZUX1RBQl9GTFR4RVtpRmF1bHRdKSk7CiB9CkBAIC03MDQwLDggKzcwNDAsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRkxUX0VuYWJsZShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEZhdWx0KQogewotICByZWdpc3RlciB1aW50MzJfdCBpRmF1bHQgPSAodWludDhfdClQT1NJVElPTl9WQUwoRmF1bHQpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkZMVElOUjEpICsKKyAgdWludDMyX3QgaUZhdWx0ID0gKHVpbnQ4X3QpUE9TSVRJT05fVkFMKEZhdWx0KTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5GTFRJTlIxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX0ZMVElOUltpRmF1bHRdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIChIUlRJTV9GTFRJTlIxX0ZMVDFFIDw8IFJFR19TSElGVF9UQUJfRkxUeEVbaUZhdWx0XSkpOwogfQpAQCAtNzA2NCw4ICs3MDY0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0ZMVF9EaXNhYmxlKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgRmF1bHQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlGYXVsdCA9ICh1aW50OF90KVBPU0lUSU9OX1ZBTChGYXVsdCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c0NvbW1vblJlZ3MuRkxUSU5SMSkgKworICB1aW50MzJfdCBpRmF1bHQgPSAodWludDhfdClQT1NJVElPTl9WQUwoRmF1bHQpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkZMVElOUjEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfRkxUSU5SW2lGYXVsdF0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCAoSFJUSU1fRkxUSU5SMV9GTFQxRSA8PCBSRUdfU0hJRlRfVEFCX0ZMVHhFW2lGYXVsdF0pKTsKIH0KQEAgLTcwODgsOCArNzA4OCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fRkxUX0lzRW5hYmxlZChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IEZhdWx0KQogewotICByZWdpc3RlciB1aW50MzJfdCBpRmF1bHQgPSAodWludDhfdClQT1NJVElPTl9WQUwoRmF1bHQpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNDb21tb25SZWdzLkZMVElOUjEpICsKKyAgdWludDMyX3QgaUZhdWx0ID0gKHVpbnQ4X3QpUE9TSVRJT05fVkFMKEZhdWx0KTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zQ29tbW9uUmVncy5GTFRJTlIxKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX0ZMVElOUltpRmF1bHRdKSk7CiAgIHJldHVybiAoKChSRUFEX0JJVCgqcFJlZywgKEhSVElNX0ZMVElOUjFfRkxUMUUgPDwgUkVHX1NISUZUX1RBQl9GTFR4RVtpRmF1bHRdKSkgPj4gUkVHX1NISUZUX1RBQl9GTFR4RVtpRmF1bHRdKSA9PQogICAgICAgICAgICAoSFJUSU1fSUVSX0ZMVDEpKSA/IDFVTCA6IDBVTCk7CkBAIC03NzY0LDggKzc3NjQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fQ2xlYXJGbGFnX1VQREFURShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlDUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlDUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01JQ1JfTVVQRCk7CiB9CkBAIC03Nzg2LDggKzc3ODYsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzQWN0aXZlRmxhZ19VUERBVEUoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NSVNSX01VUEQpID09IChIUlRJTV9NSVNSX01VUEQpKSA/IDFVTCA6IDBVTCk7CkBAIC03ODA5LDggKzc4MDksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fQ2xlYXJGbGFnX1JFUChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlDUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlDUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01JQ1JfTVJFUCk7CiAKQEAgLTc4MzIsOCArNzgzMiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNBY3RpdmVGbGFnX1JFUChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlTUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlTUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX01JU1JfTVJFUCkgPT0gKEhSVElNX01JU1JfTVJFUCkpID8gMVVMIDogMFVMKTsKQEAgLTc4NTUsOCArNzg1NSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9DbGVhckZsYWdfQ01QMShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlDUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlDUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01JQ1JfTUNNUDEpOwogfQpAQCAtNzg3Nyw4ICs3ODc3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0FjdGl2ZUZsYWdfQ01QMShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlTUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlTUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX01JU1JfTUNNUDEpID09IChIUlRJTV9NSVNSX01DTVAxKSkgPyAxVUwgOiAwVUwpOwpAQCAtNzkwMCw4ICs3OTAwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NsZWFyRmxhZ19DTVAyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fTUlDUl9NQ01QMik7CiB9CkBAIC03OTIyLDggKzc5MjIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzQWN0aXZlRmxhZ19DTVAyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSVNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSVNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTUlTUl9NQ01QMikgPT0gKEhSVElNX01JU1JfTUNNUDIpKSA/IDFVTCA6IDBVTCk7CkBAIC03OTQ1LDggKzc5NDUsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fQ2xlYXJGbGFnX0NNUDMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JQ1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JQ1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9NSUNSX01DTVAzKTsKIH0KQEAgLTc5NjcsOCArNzk2Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNBY3RpdmVGbGFnX0NNUDMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NSVNSX01DTVAzKSA9PSAoSFJUSU1fTUlTUl9NQ01QMykpID8gMVVMIDogMFVMKTsKQEAgLTc5OTAsOCArNzk5MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9DbGVhckZsYWdfQ01QNChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlDUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlDUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01JQ1JfTUNNUDQpOwogfQpAQCAtODAxMiw4ICs4MDEyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0FjdGl2ZUZsYWdfQ01QNChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlTUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTUlTUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX01JU1JfTUNNUDQpID09IChIUlRJTV9NSVNSX01DTVA0KSkgPyAxVUwgOiAwVUwpOwpAQCAtODAzMyw4ICs4MDMzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NsZWFyRmxhZ19DUFQxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNSUNSX0NQVDFDKTsKIH0KQEAgLTgwNTMsOCArODA1Myw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNBY3RpdmVGbGFnX0NQVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1JU1JfQ1BUMSkgPT0gKEhSVElNX1RJTUlTUl9DUFQxKSkgPyAxVUwgOiAwVUwpOwpAQCAtODA3NCw4ICs4MDc0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NsZWFyRmxhZ19DUFQyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNSUNSX0NQVDJDKTsKIH0KQEAgLTgwOTQsOCArODA5NCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNBY3RpdmVGbGFnX0NQVDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1JU1JfQ1BUMikgPT0gKEhSVElNX1RJTUlTUl9DUFQyKSkgPyAxVUwgOiAwVUwpOwpAQCAtODExNSw4ICs4MTE1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NsZWFyRmxhZ19TRVQxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNSUNSX1NFVDFDKTsKIH0KQEAgLTgxMzUsOCArODEzNSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNBY3RpdmVGbGFnX1NFVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1JU1JfU0VUMSkgPT0gKEhSVElNX1RJTUlTUl9TRVQxKSkgPyAxVUwgOiAwVUwpOwpAQCAtODE1Niw4ICs4MTU2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NsZWFyRmxhZ19SU1QxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNSUNSX1JTVDFDKTsKIH0KQEAgLTgxNzYsOCArODE3Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNBY3RpdmVGbGFnX1JTVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1JU1JfUlNUMSkgPT0gKEhSVElNX1RJTUlTUl9SU1QxKSkgPyAxVUwgOiAwVUwpOwpAQCAtODE5Nyw4ICs4MTk3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NsZWFyRmxhZ19TRVQyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNSUNSX1NFVDJDKTsKIH0KQEAgLTgyMTcsOCArODIxNyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNBY3RpdmVGbGFnX1NFVDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1JU1JfU0VUMikgPT0gKEhSVElNX1RJTUlTUl9TRVQyKSkgPyAxVUwgOiAwVUwpOwpAQCAtODIzOCw4ICs4MjM4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NsZWFyRmxhZ19SU1QyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNSUNSX1JTVDJDKTsKIH0KQEAgLTgyNTgsOCArODI1OCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNBY3RpdmVGbGFnX1JTVDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1JU1JfUlNUMikgPT0gKEhSVElNX1RJTUlTUl9SU1QyKSkgPyAxVUwgOiAwVUwpOwpAQCAtODI3OSw4ICs4Mjc5LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0NsZWFyRmxhZ19SU1QoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JQ1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JQ1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9USU1JQ1JfUlNUQyk7CiB9CkBAIC04Mjk5LDggKzgyOTksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzQWN0aXZlRmxhZ19SU1QoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1JU1IpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1JU1JfUlNUKSA9PSAoSFJUSU1fVElNSVNSX1JTVCkpID8gMVVMIDogMFVMKTsKQEAgLTgzMjAsOCArODMyMCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9DbGVhckZsYWdfRExZUFJUKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSUNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNSUNSX0RMWVBSVEMpOwogfQpAQCAtODM0MCw4ICs4MzQwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0FjdGl2ZUZsYWdfRExZUFJUKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSVNSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NSVNSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fVElNSVNSX0RMWVBSVCkgPT0gKEhSVElNX1RJTUlTUl9ETFlQUlQpKSA/IDFVTCA6IDBVTCk7CkBAIC04NjM1LDggKzg2MzUsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlSVRfVVBEQVRFKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01VUERJRSk7CiB9CkBAIC04NjU3LDggKzg2NTcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZUlUX1VQREFURShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01VUERJRSk7CiB9CkBAIC04Njc5LDggKzg2NzksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZElUX1VQREFURShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NVVBESUUpID09IChIUlRJTV9NRElFUl9NVVBESUUpKSA/IDFVTCA6IDBVTCk7CkBAIC04NzAyLDggKzg3MDIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlSVRfUkVQKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01SRVBJRSk7CiB9CkBAIC04NzI0LDggKzg3MjQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZUlUX1JFUChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01SRVBJRSk7CiB9CkBAIC04NzQ2LDggKzg3NDYsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZElUX1JFUChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NUkVQSUUpID09IChIUlRJTV9NRElFUl9NUkVQSUUpKSA/IDFVTCA6IDBVTCk7CkBAIC04NzY5LDggKzg3NjksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlSVRfQ01QMShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NQ01QMUlFKTsKIH0KQEAgLTg3OTEsOCArODc5MSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EaXNhYmxlSVRfQ01QMShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01DTVAxSUUpOwogfQpAQCAtODgxMyw4ICs4ODEzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0VuYWJsZWRJVF9DTVAxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01DTVAxSUUpID09IChIUlRJTV9NRElFUl9NQ01QMUlFKSkgPyAxVUwgOiAwVUwpOwpAQCAtODgzNiw4ICs4ODM2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VuYWJsZUlUX0NNUDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTUNNUDJJRSk7CiB9CkBAIC04ODU4LDggKzg4NTgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZUlUX0NNUDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NQ01QMklFKTsKIH0KQEAgLTg4ODAsOCArODg4MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNFbmFibGVkSVRfQ01QMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NQ01QMklFKSA9PSAoSFJUSU1fTURJRVJfTUNNUDJJRSkpID8gMVVMIDogMFVMKTsKQEAgLTg5MDMsOCArODkwMyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9FbmFibGVJVF9DTVAzKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01DTVAzSUUpOwogfQpAQCAtODkyNSw4ICs4OTI1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0Rpc2FibGVJVF9DTVAzKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTUNNUDNJRSk7CiB9CkBAIC04OTQ3LDggKzg5NDcsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZElUX0NNUDMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTUNNUDNJRSkgPT0gKEhSVElNX01ESUVSX01DTVAzSUUpKSA/IDFVTCA6IDBVTCk7CkBAIC04OTcwLDggKzg5NzAsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlSVRfQ01QNChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NQ01QNElFKTsKIH0KQEAgLTg5OTIsOCArODk5Miw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EaXNhYmxlSVRfQ01QNChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01DTVA0SUUpOwogfQpAQCAtOTAxNCw4ICs5MDE0LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0VuYWJsZWRJVF9DTVA0KEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01DTVA0SUUpID09IChIUlRJTV9NRElFUl9NQ01QNElFKSkgPyAxVUwgOiAwVUwpOwpAQCAtOTAzNSw4ICs5MDM1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VuYWJsZUlUX0NQVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9DUFQxSUUpOwogfQpAQCAtOTA1NSw4ICs5MDU1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0Rpc2FibGVJVF9DUFQxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9DUFQxSUUpOwogfQpAQCAtOTA3NSw4ICs5MDc1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0VuYWJsZWRJVF9DUFQxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfQ1BUMUlFKSA9PSAoSFJUSU1fVElNRElFUl9DUFQxSUUpKSA/IDFVTCA6IDBVTCk7CkBAIC05MDk2LDggKzkwOTYsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlSVRfQ1BUMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX0NQVDJJRSk7CiB9CkBAIC05MTE2LDggKzkxMTYsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZUlUX0NQVDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX0NQVDJJRSk7CiB9CkBAIC05MTM2LDggKzkxMzYsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZElUX0NQVDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9DUFQySUUpID09IChIUlRJTV9USU1ESUVSX0NQVDJJRSkpID8gMVVMIDogMFVMKTsKQEAgLTkxNTcsOCArOTE1Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9FbmFibGVJVF9TRVQxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfU0VUMUlFKTsKIH0KQEAgLTkxNzcsOCArOTE3Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EaXNhYmxlSVRfU0VUMShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfU0VUMUlFKTsKIH0KQEAgLTkxOTcsOCArOTE5Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNFbmFibGVkSVRfU0VUMShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1NFVDFJRSkgPT0gKEhSVElNX1RJTURJRVJfU0VUMUlFKSkgPyAxVUwgOiAwVUwpOwpAQCAtOTIxOCw4ICs5MjE4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VuYWJsZUlUX1JTVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9SU1QxSUUpOwogfQpAQCAtOTIzOCw4ICs5MjM4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0Rpc2FibGVJVF9SU1QxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9SU1QxSUUpOwogfQpAQCAtOTI1OCw4ICs5MjU4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0VuYWJsZWRJVF9SU1QxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfUlNUMUlFKSA9PSAoSFJUSU1fVElNRElFUl9SU1QxSUUpKSA/IDFVTCA6IDBVTCk7CkBAIC05Mjc5LDggKzkyNzksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlSVRfU0VUMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1NFVDJJRSk7CiB9CkBAIC05Mjk5LDggKzkyOTksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZUlUX1NFVDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1NFVDJJRSk7CiB9CkBAIC05MzE5LDggKzkzMTksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZElUX1NFVDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9TRVQySUUpID09IChIUlRJTV9USU1ESUVSX1NFVDJJRSkpID8gMVVMIDogMFVMKTsKQEAgLTkzNDAsOCArOTM0MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9FbmFibGVJVF9SU1QyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfUlNUMklFKTsKIH0KQEAgLTkzNjAsOCArOTM2MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EaXNhYmxlSVRfUlNUMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfUlNUMklFKTsKIH0KQEAgLTkzODAsOCArOTM4MCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNFbmFibGVkSVRfUlNUMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1JTVDJJRSkgPT0gKEhSVElNX1RJTURJRVJfUlNUMklFKSkgPyAxVUwgOiAwVUwpOwpAQCAtOTQwMSw4ICs5NDAxLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VuYWJsZUlUX1JTVChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1JTVElFKTsKIH0KQEAgLTk0MjEsOCArOTQyMSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EaXNhYmxlSVRfUlNUKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9SU1RJRSk7CiB9CkBAIC05NDQxLDggKzk0NDEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZElUX1JTVChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1JTVElFKSA9PSAoSFJUSU1fVElNRElFUl9SU1RJRSkpID8gMVVMIDogMFVMKTsKQEAgLTk0NjIsOCArOTQ2Miw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9FbmFibGVJVF9ETFlQUlQoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9ETFlQUlRJRSk7CiB9CkBAIC05NDgyLDggKzk0ODIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZUlUX0RMWVBSVChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfRExZUFJUSUUpOwogfQpAQCAtOTUwMiw4ICs5NTAyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0VuYWJsZWRJVF9ETFlQUlQoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9ETFlQUlRJRSkgPT0gKEhSVElNX1RJTURJRVJfRExZUFJUSUUpKSA/IDFVTCA6IDBVTCk7CkBAIC05NTY2LDggKzk1NjYsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlRE1BUmVxX1VQREFURShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NVVBEREUpOwogfQpAQCAtOTU4OCw4ICs5NTg4LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0Rpc2FibGVETUFSZXFfVVBEQVRFKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTVVQRERFKTsKIH0KQEAgLTk2MTAsOCArOTYxMCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNFbmFibGVkRE1BUmVxX1VQREFURShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NVVBEREUpID09IChIUlRJTV9NRElFUl9NVVBEREUpKSA/IDFVTCA6IDBVTCk7CkBAIC05NjMzLDggKzk2MzMsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlRE1BUmVxX1JFUChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NUkVQREUpOwogfQpAQCAtOTY1NSw4ICs5NjU1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0Rpc2FibGVETUFSZXFfUkVQKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTVJFUERFKTsKIH0KQEAgLTk2NzcsOCArOTY3Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNFbmFibGVkRE1BUmVxX1JFUChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NUkVQREUpID09IChIUlRJTV9NRElFUl9NUkVQREUpKSA/IDFVTCA6IDBVTCk7CkBAIC05NzAwLDggKzk3MDAsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlRE1BUmVxX0NNUDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTUNNUDFERSk7CiB9CkBAIC05NzIyLDggKzk3MjIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZURNQVJlcV9DTVAxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTUNNUDFERSk7CiB9CkBAIC05NzQ0LDggKzk3NDQsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZERNQVJlcV9DTVAxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01DTVAxREUpID09IChIUlRJTV9NRElFUl9NQ01QMURFKSkgPyAxVUwgOiAwVUwpOwpAQCAtOTc2Nyw4ICs5NzY3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VuYWJsZURNQVJlcV9DTVAyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01DTVAyREUpOwogfQpAQCAtOTc4OSw4ICs5Nzg5LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0Rpc2FibGVETUFSZXFfQ01QMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01DTVAyREUpOwogfQpAQCAtOTgxMSw4ICs5ODExLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0VuYWJsZWRETUFSZXFfQ01QMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NQ01QMkRFKSA9PSAoSFJUSU1fTURJRVJfTUNNUDJERSkpID8gMVVMIDogMFVMKTsKQEAgLTk4MzQsOCArOTgzNCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9FbmFibGVETUFSZXFfQ01QMyhIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NQ01QM0RFKTsKIH0KQEAgLTk4NTYsOCArOTg1Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EaXNhYmxlRE1BUmVxX0NNUDMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCBIUlRJTV9NRElFUl9NQ01QM0RFKTsKIH0KQEAgLTk4NzgsOCArOTg3OCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNFbmFibGVkRE1BUmVxX0NNUDMoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTUNNUDNERSkgPT0gKEhSVElNX01ESUVSX01DTVAzREUpKSA/IDFVTCA6IDBVTCk7CkBAIC05OTAxLDggKzk5MDEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlRE1BUmVxX0NNUDQoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTUNNUDRERSk7CiB9CkBAIC05OTIzLDggKzk5MjMsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZURNQVJlcV9DTVA0KEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fTURJRVJfTUNNUDRERSk7CiB9CkBAIC05OTQ1LDggKzk5NDUsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZERNQVJlcV9DTVA0KEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX01ESUVSX01DTVA0REUpID09IChIUlRJTV9NRElFUl9NQ01QNERFKSkgPyAxVUwgOiAwVUwpOwpAQCAtOTk2Niw4ICs5OTY2LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VuYWJsZURNQVJlcV9DUFQxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfQ1BUMURFKTsKIH0KQEAgLTk5ODYsOCArOTk4Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EaXNhYmxlRE1BUmVxX0NQVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX0NQVDFERSk7CiB9CkBAIC0xMDAwNiw4ICsxMDAwNiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNFbmFibGVkRE1BUmVxX0NQVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9DUFQxREUpID09IChIUlRJTV9USU1ESUVSX0NQVDFERSkpID8gMVVMIDogMFVMKTsKQEAgLTEwMDI3LDggKzEwMDI3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VuYWJsZURNQVJlcV9DUFQyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfQ1BUMkRFKTsKIH0KQEAgLTEwMDQ3LDggKzEwMDQ3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0Rpc2FibGVETUFSZXFfQ1BUMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfQ1BUMkRFKTsKIH0KQEAgLTEwMDY3LDggKzEwMDY3LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0VuYWJsZWRETUFSZXFfQ1BUMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX0NQVDJERSkgPT0gKEhSVElNX1RJTURJRVJfQ1BUMkRFKSkgPyAxVUwgOiAwVUwpOwpAQCAtMTAwODgsOCArMTAwODgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlRE1BUmVxX1NFVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9TRVQxREUpOwogfQpAQCAtMTAxMDgsOCArMTAxMDgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZURNQVJlcV9TRVQxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9TRVQxREUpOwogfQpAQCAtMTAxMjgsOCArMTAxMjgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZERNQVJlcV9TRVQxKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfU0VUMURFKSA9PSAoSFJUSU1fVElNRElFUl9TRVQxREUpKSA/IDFVTCA6IDBVTCk7CkBAIC0xMDE0OSw4ICsxMDE0OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9FbmFibGVETUFSZXFfUlNUMShIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1JTVDFERSk7CiB9CkBAIC0xMDE2OSw4ICsxMDE2OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9EaXNhYmxlRE1BUmVxX1JTVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1JTVDFERSk7CiB9CkBAIC0xMDE4OSw4ICsxMDE4OSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNFbmFibGVkRE1BUmVxX1JTVDEoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKIAogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9SU1QxREUpID09IChIUlRJTV9USU1ESUVSX1JTVDFERSkpID8gMVVMIDogMFVMKTsKQEAgLTEwMjEwLDggKzEwMjEwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0VuYWJsZURNQVJlcV9TRVQyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfU0VUMkRFKTsKIH0KQEAgLTEwMjMwLDggKzEwMjMwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0Rpc2FibGVETUFSZXFfU0VUMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfU0VUMkRFKTsKIH0KQEAgLTEwMjUwLDggKzEwMjUwLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0VuYWJsZWRETUFSZXFfU0VUMihIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1NFVDJERSkgPT0gKEhSVElNX1RJTURJRVJfU0VUMkRFKSkgPyAxVUwgOiAwVUwpOwpAQCAtMTAyNzEsOCArMTAyNzEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlRE1BUmVxX1JTVDIoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgU0VUX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9SU1QyREUpOwogfQpAQCAtMTAyOTEsOCArMTAyOTEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZURNQVJlcV9SU1QyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9SU1QyREUpOwogfQpAQCAtMTAzMTEsOCArMTAzMTEsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0hSVElNX0lzRW5hYmxlZERNQVJlcV9SU1QyKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfUlNUMkRFKSA9PSAoSFJUSU1fVElNRElFUl9SU1QyREUpKSA/IDFVTCA6IDBVTCk7CkBAIC0xMDMzMiw4ICsxMDMzMiw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9IUlRJTV9FbmFibGVETUFSZXFfUlNUKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfUlNUREUpOwogfQpAQCAtMTAzNTIsOCArMTAzNTIsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRGlzYWJsZURNQVJlcV9SU1QoSFJUSU1fVHlwZURlZiAqSFJUSU14LCB1aW50MzJfdCBUaW1lcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCisgIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKKyAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFR19PRkZTRVRfVEFCX1RJTUVSW2lUaW1lcl0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX1JTVERFKTsKIH0KQEAgLTEwMzcyLDggKzEwMzcyLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9IUlRJTV9Jc0VuYWJsZWRETUFSZXFfUlNUKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIEhSVElNX1RJTURJRVJfUlNUREUpID09IChIUlRJTV9USU1ESUVSX1JTVERFKSkgPyAxVUwgOiAwVUwpOwpAQCAtMTAzOTMsOCArMTAzOTMsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfSFJUSU1fRW5hYmxlRE1BUmVxX0RMWVBSVChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogICBTRVRfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX0RMWVBSVERFKTsKIH0KQEAgLTEwNDEzLDggKzEwNDEzLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0hSVElNX0Rpc2FibGVETUFSZXFfRExZUFJUKEhSVElNX1R5cGVEZWYgKkhSVElNeCwgdWludDMyX3QgVGltZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlUaW1lciA9ICh1aW50OF90KShQT1NJVElPTl9WQUwoVGltZXIpIC0gSFJUSU1fTUNSX01DRU5fUG9zKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmSFJUSU14LT5zTWFzdGVyUmVncy5NRElFUikgKworICB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7CisgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfT0ZGU0VUX1RBQl9USU1FUltpVGltZXJdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgSFJUSU1fVElNRElFUl9ETFlQUlRERSk7CiB9CkBAIC0xMDQzMyw4ICsxMDQzMyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSFJUSU1fSXNFbmFibGVkRE1BUmVxX0RMWVBSVChIUlRJTV9UeXBlRGVmICpIUlRJTXgsIHVpbnQzMl90IFRpbWVyKQogewotICByZWdpc3RlciB1aW50MzJfdCBpVGltZXIgPSAodWludDhfdCkoUE9TSVRJT05fVkFMKFRpbWVyKSAtIEhSVElNX01DUl9NQ0VOX1Bvcyk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJkhSVElNeC0+c01hc3RlclJlZ3MuTURJRVIpICsKKyAgdWludDMyX3QgaVRpbWVyID0gKHVpbnQ4X3QpKFBPU0lUSU9OX1ZBTChUaW1lcikgLSBIUlRJTV9NQ1JfTUNFTl9Qb3MpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZIUlRJTXgtPnNNYXN0ZXJSZWdzLk1ESUVSKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVHX09GRlNFVF9UQUJfVElNRVJbaVRpbWVyXSkpOwogCiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBIUlRJTV9USU1ESUVSX0RMWVBSVERFKSA9PSAoSFJUSU1fVElNRElFUl9ETFlQUlRERSkpID8gMVVMIDogMFVMKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfbGxfaHNlbS5oIGIvSW5jL3N0bTMyaDd4eF9sbF9oc2VtLmgKaW5kZXggYjFkODc1OC4uMWU1OTUzYyAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9sbF9oc2VtLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9sbF9oc2VtLmgKQEAgLTU4OSw2ICs1ODksNyBAQAogICByZXR1cm4gKChSRUFEX0JJVChIU0VNeC0+QzJJRVIsIFNlbWFwaG9yZU1hc2spID09IChTZW1hcGhvcmVNYXNrKSkgPyAxVUwgOiAwVUwpOwogfQogI2VuZGlmIC8qIERVQUxfQ09SRSAqLworCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9sbF9pMmMuaCBiL0luYy9zdG0zMmg3eHhfbGxfaTJjLmgKaW5kZXggNWFjZmY0Yy4uZDkxYjdjMiAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9sbF9pMmMuaAorKysgYi9JbmMvc3RtMzJoN3h4X2xsX2kyYy5oCkBAIC0zMiw3ICszMiw3IEBACiAgICogQHsKICAgKi8KIAotI2lmIGRlZmluZWQgKEkyQzEpIHx8IGRlZmluZWQgKEkyQzIpIHx8IGRlZmluZWQgKEkyQzMpIHx8IGRlZmluZWQgKEkyQzQpCisjaWYgZGVmaW5lZCAoSTJDMSkgfHwgZGVmaW5lZCAoSTJDMikgfHwgZGVmaW5lZCAoSTJDMykgfHwgZGVmaW5lZCAoSTJDNCkgfHwgZGVmaW5lZCAoSTJDNSkKIAogLyoqIEBkZWZncm91cCBJMkNfTEwgSTJDCiAgICogQHsKQEAgLTY3LDM4ICs2NywzOCBAQAogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgdWludDMyX3QgUGVyaXBoZXJhbE1vZGU7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHBlcmlwaGVyYWwgbW9kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyQ19MTF9FQ19QRVJJUEhFUkFMX01PREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyQ19MTF9FQ19QRVJJUEhFUkFMX01PREUuCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0kyQ19TZXRNb2RlKCkuICovCiAKICAgdWludDMyX3QgVGltaW5nOyAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFNEQSBzZXR1cCwgaG9sZCB0aW1lIGFuZCB0aGUgU0NMIGhpZ2gsIGxvdyBwZXJpb2QgdmFsdWVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgc2V0IGJ5IHJlZmVycmluZyB0byB0aGUgU1RNMzJDdWJlTVggVG9vbCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaGVscGVyIG1hY3JvIEByZWYgX19MTF9JMkNfQ09OVkVSVF9USU1JTkdTKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaGVscGVyIG1hY3JvIEByZWYgX19MTF9JMkNfQ09OVkVSVF9USU1JTkdTKCkuCiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZlYXR1cmUgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgdXNpbmcgdW5pdGFyeSBmdW5jdGlvbiBAcmVmIExMX0kyQ19TZXRUaW1pbmcoKS4gKi8KIAogICB1aW50MzJfdCBBbmFsb2dGaWx0ZXI7ICAgICAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgYW5hbG9nIG5vaXNlIGZpbHRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyQ19MTF9FQ19BTkFMT0dGSUxURVJfU0VMRUNUSU9OCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBJMkNfTExfRUNfQU5BTE9HRklMVEVSX1NFTEVDVElPTi4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9ucyBAcmVmIExMX0kyQ19FbmFibGVBbmFsb2dGaWx0ZXIoKSBvciBMTF9JMkNfRGlzYWJsZUFuYWxvZ0ZpbHRlcigpLiAqLwogCiAgIHVpbnQzMl90IERpZ2l0YWxGaWx0ZXI7ICAgICAgIC8qITwgQ29uZmlndXJlcyB0aGUgZGlnaXRhbCBub2lzZSBmaWx0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4MEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiBNaW5fRGF0YSA9IDB4MDAgYW5kIE1heF9EYXRhID0gMHgwRi4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfSTJDX1NldERpZ2l0YWxGaWx0ZXIoKS4gKi8KIAogICB1aW50MzJfdCBPd25BZGRyZXNzMTsgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgZGV2aWNlIG93biBhZGRyZXNzIDEuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4M0ZGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gTWluX0RhdGEgPSAweDAwIGFuZCBNYXhfRGF0YSA9IDB4M0ZGLgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9JMkNfU2V0T3duQWRkcmVzczEoKS4gKi8KIAogICB1aW50MzJfdCBUeXBlQWNrbm93bGVkZ2U7ICAgICAvKiE8IFNwZWNpZmllcyB0aGUgQUNLbm93bGVkZ2Ugb3IgTm9uIEFDS25vd2xlZGdlIGNvbmRpdGlvbiBhZnRlciB0aGUgYWRkcmVzcyByZWNlaXZlIG1hdGNoIGNvZGUgb3IgbmV4dCByZWNlaXZlZCBieXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJDX0xMX0VDX0kyQ19BQ0tOT1dMRURHRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJDX0xMX0VDX0kyQ19BQ0tOT1dMRURHRS4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmVhdHVyZSBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyB1c2luZyB1bml0YXJ5IGZ1bmN0aW9uIEByZWYgTExfSTJDX0Fja25vd2xlZGdlTmV4dERhdGEoKS4gKi8KIAogICB1aW50MzJfdCBPd25BZGRyU2l6ZTsgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgZGV2aWNlIG93biBhZGRyZXNzIDEgc2l6ZSAoNy1iaXQgb3IgMTAtYml0KS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEkyQ19MTF9FQ19PV05BRERSRVNTMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgSTJDX0xMX0VDX09XTkFERFJFU1MxLgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGNhbiBiZSBtb2RpZmllZCBhZnRlcndhcmRzIHVzaW5nIHVuaXRhcnkgZnVuY3Rpb24gQHJlZiBMTF9JMkNfU2V0T3duQWRkcmVzczEoKS4gKi8KIH0gTExfSTJDX0luaXRUeXBlRGVmOwpAQCAtNTc4LDcgKzU3OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfSTJDX0RNQV9HZXRSZWdBZGRyKEkyQ19UeXBlRGVmICpJMkN4LCB1aW50MzJfdCBEaXJlY3Rpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRhdGFfcmVnX2FkZHI7CisgIHVpbnQzMl90IGRhdGFfcmVnX2FkZHI7CiAKICAgaWYgKERpcmVjdGlvbiA9PSBMTF9JMkNfRE1BX1JFR19EQVRBX1RSQU5TTUlUKQogICB7CkBAIC02NjQsNyArNjY0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgV2FrZXVwIGZyb20gU1RPUC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfSTJDX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfSTJDX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgV2FrZVVwRnJvbVN0b3AgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBUaGlzIGJpdCBjYW4gb25seSBiZSBwcm9ncmFtbWVkIHdoZW4gRGlnaXRhbCBGaWx0ZXIgaXMgZGlzYWJsZWQuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgV1VQRU4gICAgICAgICBMTF9JMkNfRW5hYmxlV2FrZVVwRnJvbVN0b3AKQEAgLTY3OCw3ICs2NzgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgV2FrZXVwIGZyb20gU1RPUC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfSTJDX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfSTJDX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgV2FrZVVwRnJvbVN0b3AgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgV1VQRU4gICAgICAgICBMTF9JMkNfRGlzYWJsZVdha2VVcEZyb21TdG9wCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTY5MSw3ICs2OTEsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIFdha2V1cCBmcm9tIFNUT1AgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfSTJDX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfSTJDX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgV2FrZVVwRnJvbVN0b3AgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgV1VQRU4gICAgICAgICBMTF9JMkNfSXNFbmFibGVkV2FrZVVwRnJvbVN0b3AKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtOTQxLDcgKzk0MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIHBlcmlwaGVyYWwgbW9kZS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFNNQkhFTiAgICAgICAgTExfSTJDX1NldE1vZGVcbgogICAqICAgICAgICAgQ1IxICAgICAgICAgIFNNQkRFTiAgICAgICAgTExfSTJDX1NldE1vZGUKQEAgLTk2MCw3ICs5NjAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEdldCBwZXJpcGhlcmFsIG1vZGUuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBTTUJIRU4gICAgICAgIExMX0kyQ19HZXRNb2RlXG4KICAgKiAgICAgICAgIENSMSAgICAgICAgICBTTUJERU4gICAgICAgIExMX0kyQ19HZXRNb2RlCkBAIC05NzgsNyArOTc4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgU01CdXMgYWxlcnQgKEhvc3Qgb3IgRGV2aWNlIG1vZGUpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFNNQnVzIERldmljZSBtb2RlOgogICAqICAgICAgICAgLSBTTUJ1cyBBbGVydCBwaW4gaXMgZHJpdmVkIGxvdyBhbmQKQEAgLTk5Niw3ICs5OTYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgU01CdXMgYWxlcnQgKEhvc3Qgb3IgRGV2aWNlIG1vZGUpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFNNQnVzIERldmljZSBtb2RlOgogICAqICAgICAgICAgLSBTTUJ1cyBBbGVydCBwaW4gaXMgbm90IGRyaXZlZCAoY2FuIGJlIHVzZWQgYXMgYSBzdGFuZGFyZCBHUElPKSBhbmQKQEAgLTEwMTQsNyArMTAxNCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgU01CdXMgYWxlcnQgKEhvc3Qgb3IgRGV2aWNlIG1vZGUpIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBBTEVSVEVOICAgICAgIExMX0kyQ19Jc0VuYWJsZWRTTUJ1c0FsZXJ0CiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTEwMjcsNyArMTAyNyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFNNQnVzIFBhY2tldCBFcnJvciBDYWxjdWxhdGlvbiAoUEVDKS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFBFQ0VOICAgICAgICAgTExfSTJDX0VuYWJsZVNNQnVzUEVDCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTEwNDAsNyArMTA0MCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBTTUJ1cyBQYWNrZXQgRXJyb3IgQ2FsY3VsYXRpb24gKFBFQykuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBQRUNFTiAgICAgICAgIExMX0kyQ19EaXNhYmxlU01CdXNQRUMKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTA1Myw3ICsxMDUzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiBTTUJ1cyBQYWNrZXQgRXJyb3IgQ2FsY3VsYXRpb24gKFBFQykgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFBFQ0VOICAgICAgICAgTExfSTJDX0lzRW5hYmxlZFNNQnVzUEVDCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTEwNjYsNyArMTA2Niw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBTTUJ1cyBDbG9jayBUaW1lb3V0LgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIG9ubHkgYmUgcHJvZ3JhbW1lZCB3aGVuIGFzc29jaWF0ZWQgVGltZW91dCBpcyBkaXNhYmxlZCAoVGltZW91dEEgYW5kL29yVGltZW91dEIpLgogICAqIEBybXRvbGwgVElNRU9VVFIgICAgIFRJTUVPVVRBICAgICAgTExfSTJDX0NvbmZpZ1NNQnVzVGltZW91dFxuCkBAIC0xMDg5LDcgKzEwODksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgU01CdXMgQ2xvY2sgVGltZW91dEEgKFNDTCBsb3cgdGltZW91dCBvciBTQ0wgYW5kIFNEQSBoaWdoIHRpbWVvdXQgZGVwZW5kcyBvbiBUaW1lb3V0QSBtb2RlKS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgVGhlc2UgYml0cyBjYW4gb25seSBiZSBwcm9ncmFtbWVkIHdoZW4gVGltZW91dEEgaXMgZGlzYWJsZWQuCiAgICogQHJtdG9sbCBUSU1FT1VUUiAgICAgVElNRU9VVEEgICAgICBMTF9JMkNfU2V0U01CdXNUaW1lb3V0QQpAQCAtMTEwNCw3ICsxMTA0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIFNNQnVzIENsb2NrIFRpbWVvdXRBIHNldHRpbmcuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIFRJTUVPVVRSICAgICBUSU1FT1VUQSAgICAgIExMX0kyQ19HZXRTTUJ1c1RpbWVvdXRBCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTExMTcsNyArMTExNyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IHRoZSBTTUJ1cyBDbG9jayBUaW1lb3V0QSBtb2RlLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBUaGlzIGJpdCBjYW4gb25seSBiZSBwcm9ncmFtbWVkIHdoZW4gVGltZW91dEEgaXMgZGlzYWJsZWQuCiAgICogQHJtdG9sbCBUSU1FT1VUUiAgICAgVElETEUgICAgICAgICBMTF9JMkNfU2V0U01CdXNUaW1lb3V0QU1vZGUKQEAgLTExMzQsNyArMTEzNCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBTTUJ1cyBDbG9jayBUaW1lb3V0QSBtb2RlLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBUSU1FT1VUUiAgICAgVElETEUgICAgICAgICBMTF9JMkNfR2V0U01CdXNUaW1lb3V0QU1vZGUKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTE0OSw3ICsxMTQ5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgdGhlIFNNQnVzIEV4dGVuZGVkIEN1bXVsYXRpdmUgQ2xvY2sgVGltZW91dEIgKE1hc3RlciBvciBTbGF2ZSBtb2RlKS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBub3RlICAgVGhlc2UgYml0cyBjYW4gb25seSBiZSBwcm9ncmFtbWVkIHdoZW4gVGltZW91dEIgaXMgZGlzYWJsZWQuCiAgICogQHJtdG9sbCBUSU1FT1VUUiAgICAgVElNRU9VVEIgICAgICBMTF9JMkNfU2V0U01CdXNUaW1lb3V0QgpAQCAtMTE2NCw3ICsxMTY0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBHZXQgdGhlIFNNQnVzIEV4dGVudGVkIEN1bXVsYXRpdmUgQ2xvY2sgVGltZW91dEIgc2V0dGluZy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgVElNRU9VVFIgICAgIFRJTUVPVVRCICAgICAgTExfSTJDX0dldFNNQnVzVGltZW91dEIKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgdGhlIFNNQnVzIENsb2NrIFRpbWVvdXQuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAcm10b2xsIFRJTUVPVVRSICAgICBUSU1PVVRFTiAgICAgIExMX0kyQ19FbmFibGVTTUJ1c1RpbWVvdXRcbgogICAqICAgICAgICAgVElNRU9VVFIgICAgIFRFWFRFTiAgICAgICAgTExfSTJDX0VuYWJsZVNNQnVzVGltZW91dApAQCAtMTE5NSw3ICsxMTk1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIHRoZSBTTUJ1cyBDbG9jayBUaW1lb3V0LgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBUSU1FT1VUUiAgICAgVElNT1VURU4gICAgICBMTF9JMkNfRGlzYWJsZVNNQnVzVGltZW91dFxuCiAgICogICAgICAgICBUSU1FT1VUUiAgICAgVEVYVEVOICAgICAgICBMTF9JMkNfRGlzYWJsZVNNQnVzVGltZW91dApAQCAtMTIxMyw3ICsxMjEzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiB0aGUgU01CdXMgQ2xvY2sgVGltZW91dCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBUSU1FT1VUUiAgICAgVElNT1VURU4gICAgICBMTF9JMkNfSXNFbmFibGVkU01CdXNUaW1lb3V0XG4KICAgKiAgICAgICAgIFRJTUVPVVRSICAgICBURVhURU4gICAgICAgIExMX0kyQ19Jc0VuYWJsZWRTTUJ1c1RpbWVvdXQKQEAgLTE0NDMsNyArMTQ0Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIEVycm9yIGludGVycnVwdHMuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIEFueSBvZiB0aGVzZSBlcnJvcnMgd2lsbCBnZW5lcmF0ZSBpbnRlcnJ1cHQgOgogICAqICAgICAgICAgQXJiaXRyYXRpb24gTG9zcyAoQVJMTykKQEAgLTE0NjMsNyArMTQ2Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBFcnJvciBpbnRlcnJ1cHRzLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBBbnkgb2YgdGhlc2UgZXJyb3JzIHdpbGwgZ2VuZXJhdGUgaW50ZXJydXB0IDoKICAgKiAgICAgICAgIEFyYml0cmF0aW9uIExvc3MgKEFSTE8pCkBAIC0xNjQ1LDcgKzE2NDUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIHRoZSBzdGF0dXMgb2YgU01CdXMgUEVDIGVycm9yIGZsYWcgaW4gcmVjZXB0aW9uLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBSRVNFVDogQ2xlYXIgZGVmYXVsdCB2YWx1ZS4KICAgKiAgICAgICAgIFNFVDogV2hlbiB0aGUgcmVjZWl2ZWQgUEVDIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIFBFQyByZWdpc3RlciBjb250ZW50LgpAQCAtMTY2MCw3ICsxNjYwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSB0aGUgc3RhdHVzIG9mIFNNQnVzIFRpbWVvdXQgZGV0ZWN0aW9uIGZsYWcuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFJFU0VUOiBDbGVhciBkZWZhdWx0IHZhbHVlLgogICAqICAgICAgICAgU0VUOiBXaGVuIGEgdGltZW91dCBvciBleHRlbmRlZCBjbG9jayB0aW1lb3V0IG9jY3Vycy4KQEAgLTE2NzUsNyArMTY3NSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgdGhlIHN0YXR1cyBvZiBTTUJ1cyBhbGVydCBmbGFnLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQG5vdGUgICBSRVNFVDogQ2xlYXIgZGVmYXVsdCB2YWx1ZS4KICAgKiAgICAgICAgIFNFVDogV2hlbiBTTUJ1cyBob3N0IGNvbmZpZ3VyYXRpb24sIFNNQnVzIGFsZXJ0IGVuYWJsZWQgYW5kCkBAIC0xNzgyLDcgKzE3ODIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIFNNQnVzIFBFQyBlcnJvciBmbGFnLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBJQ1IgICAgICAgICAgUEVDQ0YgICAgICAgICBMTF9JMkNfQ2xlYXJTTUJ1c0ZsYWdfUEVDRVJSCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTE3OTUsNyArMTc5NSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgU01CdXMgVGltZW91dCBkZXRlY3Rpb24gZmxhZy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNNQnVzIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBJMkN4IEluc3RhbmNlLgogICAqIEBybXRvbGwgSUNSICAgICAgICAgIFRJTU9VVENGICAgICAgTExfSTJDX0NsZWFyU01CdXNGbGFnX1RJTUVPVVQKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMTgwOCw3ICsxODA4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDbGVhciBTTUJ1cyBBbGVydCBmbGFnLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBJQ1IgICAgICAgICAgQUxFUlRDRiAgICAgICBMTF9JMkNfQ2xlYXJTTUJ1c0ZsYWdfQUxFUlQKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMjEyMyw3ICsyMTIzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgaW50ZXJuYWwgY29tcGFyaXNvbiBvZiB0aGUgU01CdXMgUGFja2V0IEVycm9yIGJ5dGUgKHRyYW5zbWlzc2lvbiBvciByZWNlcHRpb24gbW9kZSkuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01CVVNfQUxMX0lOU1RBTkNFKEkyQ3gpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTTUJ1cyBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgSTJDeCBJbnN0YW5jZS4KICAgKiBAbm90ZSAgIFRoaXMgZmVhdHVyZSBpcyBjbGVhcmVkIGJ5IGhhcmR3YXJlIHdoZW4gdGhlIFBFQyBieXRlIGlzIHRyYW5zZmVycmVkLCBvciB3aGVuIGEgU1RPUCBjb25kaXRpb24gb3IgYW4gQWRkcmVzcyBNYXRjaGVkIGlzIHJlY2VpdmVkLgogICAqICAgICAgICAgVGhpcyBiaXQgaGFzIG5vIGVmZmVjdCB3aGVuIFJFTE9BRCBiaXQgaXMgc2V0LgpAQCAtMjEzOSw3ICsyMTM5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiB0aGUgU01CdXMgUGFja2V0IEVycm9yIGJ5dGUgaW50ZXJuYWwgY29tcGFyaXNvbiBpcyByZXF1ZXN0ZWQgb3Igbm90LgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgUEVDQllURSAgICAgICBMTF9JMkNfSXNFbmFibGVkU01CdXNQRUNDb21wYXJlCiAgICogQHBhcmFtICBJMkN4IEkyQyBJbnN0YW5jZS4KQEAgLTIxNTIsNyArMjE1Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBTTUJ1cyBQYWNrZXQgRXJyb3IgYnl0ZSBjYWxjdWxhdGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUJVU19BTExfSU5TVEFOQ0UoSTJDeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQlVTX0FMTF9JTlNUQU5DRShJMkN4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU01CdXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEkyQ3ggSW5zdGFuY2UuCiAgICogQHJtdG9sbCBQRUNSICAgICAgICAgUEVDICAgICAgICAgICBMTF9JMkNfR2V0U01CdXNQRUMKICAgKiBAcGFyYW0gIEkyQ3ggSTJDIEluc3RhbmNlLgpAQCAtMjIxMyw3ICsyMjEzLDcgQEAKICAgKiBAfQogICAqLwogCi0jZW5kaWYgLyogSTJDMSB8fCBJMkMyIHx8IEkyQzMgfHwgSTJDNCAqLworI2VuZGlmIC8qIEkyQzEgfHwgSTJDMiB8fCBJMkMzIHx8IEkyQzQgIHx8IEkyQzUgKi8KIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfbGxfbHB1YXJ0LmggYi9JbmMvc3RtMzJoN3h4X2xsX2xwdWFydC5oCmluZGV4IGE3Y2U4YmMuLjE0NzFiZGQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfbHB1YXJ0LmgKKysrIGIvSW5jL3N0bTMyaDd4eF9sbF9scHVhcnQuaApAQCAtMTM3Miw5ICsxMzcyLDkgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9MUFVBUlRfR2V0QmF1ZFJhdGUoVVNBUlRfVHlwZURlZiAqTFBVQVJUeCwgdWludDMyX3QgUGVyaXBoQ2xrLCB1aW50MzJfdCBQcmVzY2FsZXJWYWx1ZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbHB1YXJ0ZGl2OwotICByZWdpc3RlciB1aW50MzJfdCBicnJyZXN1bHQ7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHBlcmlwaGNsa3ByZXNjID0gKHVpbnQzMl90KShQZXJpcGhDbGsgLyAoTFBVQVJUX1BSRVNDQUxFUl9UQUJbKHVpbnQxNl90KVByZXNjYWxlclZhbHVlXSkpOworICB1aW50MzJfdCBscHVhcnRkaXY7CisgIHVpbnQzMl90IGJycnJlc3VsdDsKKyAgdWludDMyX3QgcGVyaXBoY2xrcHJlc2MgPSAodWludDMyX3QpKFBlcmlwaENsayAvIChMUFVBUlRfUFJFU0NBTEVSX1RBQlsodWludDE2X3QpUHJlc2NhbGVyVmFsdWVdKSk7CiAKICAgbHB1YXJ0ZGl2ID0gTFBVQVJUeC0+QlJSICYgTFBVQVJUX0JSUl9NQVNLOwogCkBAIC0yNDgyLDcgKzI0ODIsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX0xQVUFSVF9ETUFfR2V0UmVnQWRkcihVU0FSVF9UeXBlRGVmICpMUFVBUlR4LCB1aW50MzJfdCBEaXJlY3Rpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGRhdGFfcmVnX2FkZHI7CisgIHVpbnQzMl90IGRhdGFfcmVnX2FkZHI7CiAKICAgaWYgKERpcmVjdGlvbiA9PSBMTF9MUFVBUlRfRE1BX1JFR19EQVRBX1RSQU5TTUlUKQogICB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX21kbWEuaCBiL0luYy9zdG0zMmg3eHhfbGxfbWRtYS5oCmluZGV4IGNmNjQ1YzYuLjE4NjA5YWQgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfbWRtYS5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfbWRtYS5oCkBAIC02OTEsNyArNjkxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfRW5hYmxlQ2hhbm5lbChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgU0VUX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgTURNQV9DQ1JfRU4pOwogfQpAQCAtNzIxLDcgKzcyMSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX0Rpc2FibGVDaGFubmVsKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBDTEVBUl9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIE1ETUFfQ0NSX0VOKTsKIH0KQEAgLTc1MSw3ICs3NTEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfSXNFbmFibGVkQ2hhbm5lbChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgTURNQV9DQ1JfRU4pID09IChNRE1BX0NDUl9FTikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTc4MSw3ICs3ODEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9HZW5lcmF0ZVNXUmVxdWVzdChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgU0VUX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgTURNQV9DQ1JfU1dSUSk7CiB9CkBAIC04MTcsNyArODE3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfQ29uZmlnWGZlckVuZGlhbm5lc3MoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQ29uZmlndXJhdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsCiAgICAgICAgICAgICAgTURNQV9DQ1JfV0VYIHwgTURNQV9DQ1JfSEVYIHwgTURNQV9DQ1JfQkVYLCBDb25maWd1cmF0aW9uKTsKQEAgLTg1MSw3ICs4NTEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXRXb3JkRW5kaWFubmVzcyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBFbmRpYW5uZXNzKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgTURNQV9DQ1JfV0VYLCBFbmRpYW5uZXNzKTsKIH0KQEAgLTg4NCw3ICs4ODQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0V29yZEVuZGlhbm5lc3MoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIE1ETUFfQ0NSX1dFWCkpOwogfQpAQCAtOTE3LDcgKzkxNyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldEhhbGZXb3JkRW5kaWFubmVzcyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBFbmRpYW5uZXNzKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgTURNQV9DQ1JfSEVYLCBFbmRpYW5uZXNzKTsKIH0KQEAgLTk1MCw3ICs5NTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0SGFsZldvcmRFbmRpYW5uZXNzKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0NSLCBNRE1BX0NDUl9IRVgpKTsKIH0KQEAgLTk4Myw3ICs5ODMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXRCeXRlRW5kaWFubmVzcyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBFbmRpYW5uZXNzKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgTURNQV9DQ1JfQkVYLCBFbmRpYW5uZXNzKTsKIH0KQEAgLTEwMTYsNyArMTAxNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXRCeXRlRW5kaWFubmVzcyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiwgTURNQV9DQ1JfQkVYKSk7CiB9CkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXRDaGFubmVsUHJpb3JpdHlMZXZlbChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBQcmlvcml0eSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIE1ETUFfQ0NSX1BMLCBQcmlvcml0eSk7CiB9CkBAIC0xMDg2LDcgKzEwODYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0Q2hhbm5lbFByaW9yaXR5TGV2ZWwoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IsIE1ETUFfQ0NSX1BMKSk7CiB9CkBAIC0xMTQ2LDcgKzExNDYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9Db25maWdUcmFuc2ZlcihNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBDb25maWd1cmF0aW9uLCB1aW50MzJfdCBCdWZmZXJYZmVyTGVuZ3RoKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgV1JJVEVfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwKICAgQ29uZmlndXJhdGlvbiB8ICgoQnVmZmVyWGZlckxlbmd0aCA8PCBNRE1BX0NUQ1JfVExFTl9Qb3MpICYgTURNQV9DVENSX1RMRU5fTXNrKSk7CkBAIC0xMTc3LDcgKzExNzcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9FbmFibGVCdWZmZXJhYmxlV3JNb2RlKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBTRVRfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX0JXTSk7CiB9CkBAIC0xMjA3LDcgKzEyMDcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9EaXNhYmxlQnVmZmVyYWJsZVdyTW9kZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgQ0xFQVJfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX0JXTSk7CiB9CkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfSXNFbmFibGVkQnVmZmVyYWJsZVdyTW9kZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQ1IsIE1ETUFfQ1RDUl9CV00pID09IChNRE1BX0NUQ1JfQldNKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMTI3MCw3ICsxMjcwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfU2V0UmVxdWVzdE1vZGUoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgUmVxdWVzdE1vZGUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBNT0RJRllfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX1NXUk0sIFJlcXVlc3RNb2RlKTsKIH0KQEAgLTEzMDMsNyArMTMwMyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXRSZXF1ZXN0TW9kZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQ1IsIE1ETUFfQ1RDUl9TV1JNKSk7CiB9CkBAIC0xMzM4LDcgKzEzMzgsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXRUcmlnZ2VyTW9kZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBUcmlnZ2VyTW9kZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfVFJHTSwgVHJpZ2dlck1vZGUpOwogfQpAQCAtMTM3Myw3ICsxMzczLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldFRyaWdnZXJNb2RlKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX1RSR00pKTsKIH0KQEAgLTE0MDcsNyArMTQwNyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldFBhZGRpbmdBbGlnbm1lbnQoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgUGFkZGluZ0FsaWdubWVudCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfUEFNLCBQYWRkaW5nQWxpZ25tZW50KTsKIH0KQEAgLTE0NDEsNyArMTQ0MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXRQYWRkaW5nQWxpZ25tZW50KE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX1BBTSkpOwogfQpAQCAtMTQ3Miw3ICsxNDcyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfRW5hYmxlUGFja2luZyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgU0VUX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQ1IsIE1ETUFfQ1RDUl9QS0UpOwogfQpAQCAtMTUwMiw3ICsxNTAyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfRGlzYWJsZVBhY2tpbmcoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIENMRUFSX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQ1IsIE1ETUFfQ1RDUl9QS0UpOwogfQpAQCAtMTUzMiw3ICsxNTMyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0lzRW5hYmxlZFBhY2tpbmcoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfUEtFKSA9PSAoTURNQV9DVENSX1BLRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTE1NjMsNyArMTU2Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldEJ1ZmZlclRyYW5zZmVyTGVuZ3RoKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IExlbmd0aCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfVExFTiwKICAgICAgICAgICAgICAgKExlbmd0aCA8PCBNRE1BX0NUQ1JfVExFTl9Qb3MpICYgTURNQV9DVENSX1RMRU5fTXNrKTsKQEAgLTE1OTUsNyArMTU5NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXRCdWZmZXJUcmFuc2Zlckxlbmd0aChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX1RMRU4pID4+IE1ETUFfQ1RDUl9UTEVOX1Bvcyk7CiB9CkBAIC0xNjM0LDcgKzE2MzQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXREZXN0aW5hdGlvbkJ1cnN0U2l6ZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBEYnVyc3QpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBNT0RJRllfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX0RCVVJTVCwgRGJ1cnN0KTsKIH0KQEAgLTE2NzMsNyArMTY3Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXREZXN0aW5hdGlvbkJ1cnN0U2l6ZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX0RCVVJTVCkpOwogfQpAQCAtMTcxMiw3ICsxNzEyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfU2V0U291cmNlQnVyc3RTaXplKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFNidXJzdCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfU0JVUlNULCBTYnVyc3QpOwogfQpAQCAtMTc1MSw3ICsxNzUxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldFNvdXJjZUJ1cnN0U2l6ZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX1NCVVJTVCkpOwogfQpAQCAtMTc4Niw3ICsxNzg2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfU2V0RGVzdGluYXRpb25JbmNTaXplKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IEluY1NpemUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBNT0RJRllfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX0RJTkNPUywgSW5jU2l6ZSk7CiB9CkBAIC0xODIxLDcgKzE4MjEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0RGVzdGluYXRpb25JbmNTaXplKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX0RJTkNPUykpOwogfQpAQCAtMTg1Niw3ICsxODU2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfU2V0U291cmNlSW5jU2l6ZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBJbmNTaXplKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQ1IsIE1ETUFfQ1RDUl9TSU5DT1MsIEluY1NpemUpOwogfQpAQCAtMTg5MSw3ICsxODkxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldFNvdXJjZUluY1NpemUoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfU0lOQ09TKSk7CiB9CkBAIC0xOTI2LDcgKzE5MjYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXREZXN0aW5hdGlvbkRhdGFTaXplKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IERlc3REYXRhU2l6ZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfRFNJWkUsIERlc3REYXRhU2l6ZSk7CiB9CkBAIC0xOTYxLDcgKzE5NjEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0RGVzdGluYXRpb25EYXRhU2l6ZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQ1IsIE1ETUFfQ1RDUl9EU0laRSkpOwogfQpAQCAtMTk5Niw3ICsxOTk2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfU2V0U291cmNlRGF0YVNpemUoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgU3JjRGF0YVNpemUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBNT0RJRllfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX1NTSVpFLCBTcmNEYXRhU2l6ZSk7CiB9CkBAIC0yMDMxLDcgKzIwMzEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0U291cmNlRGF0YVNpemUoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfU1NJWkUpKTsKIH0KQEAgLTIwNjUsNyArMjA2NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldERlc3RpbmF0aW9uSW5jTW9kZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBEZXN0SW5jTW9kZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfRElOQywgRGVzdEluY01vZGUpOwogfQpAQCAtMjA5OSw3ICsyMDk5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldERlc3RpbmF0aW9uSW5jTW9kZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQ1IsIE1ETUFfQ1RDUl9ESU5DKSk7CiB9CkBAIC0yMTMzLDcgKzIxMzMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXRTb3VyY2VJbmNNb2RlKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFNyY0luY01vZGUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBNT0RJRllfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1RDUiwgTURNQV9DVENSX1NJTkMsIFNyY0luY01vZGUpOwogfQpAQCAtMjE2Nyw3ICsyMTY3LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldFNvdXJjZUluY01vZGUoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVENSLCBNRE1BX0NUQ1JfU0lOQykpOwogfQpAQCAtMjIwMCw3ICsyMjAwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfQ29uZmlnQmxrQ291bnRlcnMoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQmxvY2tSZXBlYXRDb3VudCwgdWludDMyX3QgQmxrRGF0YUxlbmd0aCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQk5EVFIsCiAgICAgICAgICAgICAgICBNRE1BX0NCTkRUUl9CUkMgfCBNRE1BX0NCTkRUUl9CTkRULApAQCAtMjIzMyw3ICsyMjMzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfU2V0QmxrRGF0YUxlbmd0aChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBCbGtEYXRhTGVuZ3RoKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNCTkRUUiwgTURNQV9DQk5EVFJfQk5EVCwgKEJsa0RhdGFMZW5ndGggJiBNRE1BX0NCTkRUUl9CTkRUX01zaykpOwogfQpAQCAtMjI2NCw3ICsyMjY0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldEJsa0RhdGFMZW5ndGgoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQk5EVFIsIE1ETUFfQ0JORFRSX0JORFQpKTsKIH0KQEAgLTIyOTUsNyArMjI5NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldEJsa1JlcGVhdENvdW50KE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IEJsb2NrUmVwZWF0Q291bnQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBNT0RJRllfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0JORFRSLCBNRE1BX0NCTkRUUl9CUkMsCiAgICAgICAgICAgICAgIChCbG9ja1JlcGVhdENvdW50IDw8IE1ETUFfQ0JORFRSX0JSQ19Qb3MpICYgTURNQV9DQk5EVFJfQlJDX01zayk7CkBAIC0yMzI3LDcgKzIzMjcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0QmxrUmVwZWF0Q291bnQoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQk5EVFIsIE1ETUFfQ0JORFRSX0JSQykgPj4gTURNQV9DQk5EVFJfQlJDX1Bvcyk7CiB9CkBAIC0yMzYxLDcgKzIzNjEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9Db25maWdCbGtSZXBlYXRBZGRyVXBkYXRlKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IENvbmZpZ3VyYXRpb24pCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBNT0RJRllfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0JORFRSLAogICAgICAgICAgICAgICAgTURNQV9DQk5EVFJfQlJEVU0gfCBNRE1BX0NCTkRUUl9CUlNVTSwKQEAgLTIzOTYsNyArMjM5Niw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldEJsa1JlcGVhdERlc3RBZGRyVXBkYXRlKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IERlc3RBZHJVcGRhdGVNb2RlKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNCTkRUUiwgTURNQV9DQk5EVFJfQlJEVU0sIERlc3RBZHJVcGRhdGVNb2RlKTsKIH0KQEAgLTI0MjksNyArMjQyOSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXRCbGtSZXBlYXREZXN0QWRkclVwZGF0ZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNCTkRUUiwgTURNQV9DQk5EVFJfQlJEVU0pKTsKIH0KQEAgLTI0NjIsNyArMjQ2Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldEJsa1JlcGVhdFNyY0FkZHJVcGRhdGUoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgU3JjQWRyVXBkYXRlTW9kZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQk5EVFIsIE1ETUFfQ0JORFRSX0JSU1VNLCBTcmNBZHJVcGRhdGVNb2RlKTsKIH0KQEAgLTI0OTUsNyArMjQ5NSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXRCbGtSZXBlYXRTcmNBZGRyVXBkYXRlKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0JORFRSLCBNRE1BX0NCTkRUUl9CUlNVTSkpOwogfQpAQCAtMjUyOSw3ICsyNTI5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfQ29uZmlnQWRkcmVzc2VzKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsICB1aW50MzJfdCBTcmNBZGRyZXNzLCB1aW50MzJfdCBEc3RBZGRyZXNzKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgV1JJVEVfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1NBUiwgU3JjQWRkcmVzcyk7CiAgIFdSSVRFX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNEQVIsIERzdEFkZHJlc3MpOwpAQCAtMjU2MCw3ICsyNTYwLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfU2V0U291cmNlQWRkcmVzcyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBTcmNBZGRyZXNzKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgV1JJVEVfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q1NBUiwgU3JjQWRkcmVzcyk7CiB9CkBAIC0yNTkxLDcgKzI1OTEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0U291cmNlQWRkcmVzcyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNTQVIpKTsKIH0KQEAgLTI2MjIsNyArMjYyMiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldERlc3RpbmF0aW9uQWRkcmVzcyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBEZXN0QWRkcmVzcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIFdSSVRFX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNEQVIsIERlc3RBZGRyZXNzKTsKIH0KQEAgLTI2NTMsNyArMjY1Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXREZXN0aW5hdGlvbkFkZHJlc3MoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoUkVBRF9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DREFSKSk7CiB9CkBAIC0yNjg3LDcgKzI2ODcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9Db25maWdCbGtScHRBZGRyVXBkYXRlVmFsdWUoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgIHVpbnQzMl90IFNyY3RBZHJVcGRhdGVWYWx1ZSwgdWludDMyX3QgRGVzdEFkclVwZGF0ZVZhbHVlKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgV1JJVEVfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0JSVVIsCiAgICAgICAgICAgICAgIChTcmN0QWRyVXBkYXRlVmFsdWUgJiBNRE1BX0NCUlVSX1NVVl9Nc2spICB8ICgoRGVzdEFkclVwZGF0ZVZhbHVlIDw8IE1ETUFfQ0JSVVJfRFVWX1BvcykgJiBNRE1BX0NCUlVSX0RVVl9Nc2spKTsKQEAgLTI3MTksNyArMjcxOSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldEJsa1JwdERlc3RBZGRyVXBkYXRlVmFsdWUoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgRGVzdEFkclVwZGF0ZVZhbHVlKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNCUlVSLCBNRE1BX0NCUlVSX0RVViwKICAgICAgICAgICAgICAgICgoRGVzdEFkclVwZGF0ZVZhbHVlIDw8IE1ETUFfQ0JSVVJfRFVWX1BvcykgJiBNRE1BX0NCUlVSX0RVVl9Nc2spKTsKQEAgLTI3NTEsNyArMjc1MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXRCbGtScHREZXN0QWRkclVwZGF0ZVZhbHVlKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0JSVVIsIE1ETUFfQ0JSVVJfRFVWKSA+PiBNRE1BX0NCUlVSX0RVVl9Qb3MpOwogfQpAQCAtMjc4Miw3ICsyNzgyLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfU2V0QmxrUnB0U3JjQWRkclVwZGF0ZVZhbHVlKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFNyY0FkclVwZGF0ZVZhbHVlKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNCUlVSLCBNRE1BX0NCUlVSX1NVViwgU3JjQWRyVXBkYXRlVmFsdWUpOwogfQpAQCAtMjgxMyw3ICsyODEzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldEJsa1JwdFNyY0FkZHJVcGRhdGVWYWx1ZShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNCUlVSLCBNRE1BX0NCUlVSX1NVVikpOwogfQpAQCAtMjg0NCw3ICsyODQ0LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfU2V0TGlua0FkZHJlc3MoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgTGlua0FkZHJlc3MpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBXUklURV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DTEFSLCBMaW5rQWRkcmVzcyk7CiB9CkBAIC0yODc1LDcgKzI4NzUsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0TGlua0FkZHJlc3MoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoUkVBRF9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DTEFSKSk7CiB9CkBAIC0yOTA5LDcgKzI5MDksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9Db25maWdCdXNTZWxlY3Rpb24oTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQ29uZmlndXJhdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVEJSLAogICAgICAgICAgICAgICAgTURNQV9DVEJSX0RCVVMgfCBNRE1BX0NUQlJfU0JVUywKQEAgLTI5NDQsNyArMjk0NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldERlc3RCdXNTZWxlY3Rpb24oTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgRGVzdEJ1cykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIE1PRElGWV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiAqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DVEJSLCBNRE1BX0NUQlJfREJVUywgRGVzdEJ1cyk7CiB9CkBAIC0yOTc3LDcgKzI5NzcsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfR2V0RGVzdEJ1c1NlbGVjdGlvbihNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQlIsIE1ETUFfQ1RCUl9EQlVTKSk7CiB9CkBAIC0zMDEwLDcgKzMwMTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXRTcmNCdXNTZWxlY3Rpb24oTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgU3JjQnVzKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQlIsIE1ETUFfQ1RCUl9TQlVTLCBTcmNCdXMpOwogfQpAQCAtMzA0Myw3ICszMDQzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldFNyY0J1c1NlbGVjdGlvbihNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQlIsIE1ETUFfQ1RCUl9TQlVTKSk7CiB9CkBAIC0zMTExLDcgKzMxMTEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXRIV1RyaWdnZXIoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgSFdSZXF1ZXN0KQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgTU9ESUZZX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQlIsIE1ETUFfQ1RCUl9UU0VMLCBIV1JlcXVlc3QpOwogfQpAQCAtMzE3OSw3ICszMTc5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldEhXVHJpZ2dlcihNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNUQlIsIE1ETUFfQ1RCUl9UU0VMKSk7CiB9CkBAIC0zMjEwLDcgKzMyMTAsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9TZXRNYXNrQWRkcmVzcyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBNYXNrQWRkcmVzcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIFdSSVRFX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNNQVIsIE1hc2tBZGRyZXNzKTsKIH0KQEAgLTMyNDEsNyArMzI0MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXRNYXNrQWRkcmVzcyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNNQVIpKTsKIH0KQEAgLTMyNzIsNyArMzI3Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX1NldE1hc2tEYXRhKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IE1hc2tEYXRhKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgV1JJVEVfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q01EUiwgTWFza0RhdGEpOwogfQpAQCAtMzMwMyw3ICszMzAzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldE1hc2tEYXRhKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKFJFQURfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q01EUikpOwogfQpAQCAtMzMzNiw3ICszMzM2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0dldFhmZXJFcnJvckRpcmVjdGlvbihNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuIChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmICopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNFU1IsIE1ETUFfQ0VTUl9URUQpKTsKIH0KQEAgLTMzNjcsNyArMzM2Nyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9HZXRYZmVyRXJyb3JMU0JBZGRyZXNzKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYgKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0VTUiwgTURNQV9DRVNSX1RFQSkpOwogfQpAQCAtMzQzMyw3ICszNDMzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0lzQWN0aXZlRmxhZ19URShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNJU1IsIE1ETUFfQ0lTUl9URUlGKSA9PSAoTURNQV9DSVNSX1RFSUYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zNDYzLDcgKzM0NjMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfSXNBY3RpdmVGbGFnX0NUQyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNJU1IsIE1ETUFfQ0lTUl9DVENJRikgPT0gKE1ETUFfQ0lTUl9DVENJRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTM0OTMsNyArMzQ5Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9Jc0FjdGl2ZUZsYWdfQlJUKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0lTUiwgTURNQV9DSVNSX0JSVElGKSA9PSAoTURNQV9DSVNSX0JSVElGKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzUyMyw3ICszNTIzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0lzQWN0aXZlRmxhZ19CVChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNJU1IsIE1ETUFfQ0lTUl9CVElGKSA9PSAoTURNQV9DSVNSX0JUSUYpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zNTUzLDcgKzM1NTMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfSXNBY3RpdmVGbGFnX1RDKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICByZXR1cm4gKChSRUFEX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0lTUiwgTURNQV9DSVNSX1RDSUYpID09IChNRE1BX0NJU1JfVENJRikpID8gMVVMIDogMFVMKTsKIH0KQEAgLTM1ODMsNyArMzU4Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9Jc0FjdGl2ZUZsYWdfQ1JRQShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNJU1IsIE1ETUFfQ0lTUl9DUlFBKSA9PSAoTURNQV9DSVNSX0NSUUEpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zNjEzLDcgKzM2MTMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfSXNBY3RpdmVGbGFnX0JTRShNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNFU1IsIE1ETUFfQ0VTUl9CU0UpID09IChNRE1BX0NFU1JfQlNFKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzY0Myw3ICszNjQzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0lzQWN0aXZlRmxhZ19BU0UoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DRVNSLCBNRE1BX0NFU1JfQVNFKSA9PSAoTURNQV9DRVNSX0FTRSkpID8gMVVMIDogMFVMKTsKIH0KQEAgLTM2NzMsNyArMzY3Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9Jc0FjdGl2ZUZsYWdfVEVNRChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNFU1IsIE1ETUFfQ0VTUl9URU1EKSA9PSAoTURNQV9DRVNSX1RFTUQpKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC0zNzAzLDcgKzM3MDMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfSXNBY3RpdmVGbGFnX1RFTEQoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DRVNSLCBNRE1BX0NFU1JfVEVMRCkgPT0gKE1ETUFfQ0VTUl9URUxEKSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtMzczMyw3ICszNzMzLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfQ2xlYXJGbGFnX1RFKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBXUklURV9SRUcoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNJRkNSICxNRE1BX0NJRkNSX0NURUlGKTsKIH0KQEAgLTM3NjMsNyArMzc2Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX0NsZWFyRmxhZ19DVEMoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIFdSSVRFX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0lGQ1IgLE1ETUFfQ0lGQ1JfQ0NUQ0lGKTsKIH0KQEAgLTM3OTMsNyArMzc5Myw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX0NsZWFyRmxhZ19CUlQoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIFdSSVRFX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0lGQ1IgLE1ETUFfQ0lGQ1JfQ0JSVElGKTsKIH0KQEAgLTM4MjMsNyArMzgyMyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX0NsZWFyRmxhZ19CVChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgV1JJVEVfUkVHKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DSUZDUiAsTURNQV9DSUZDUl9DQlRJRik7CiB9CkBAIC0zODUzLDcgKzM4NTMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9DbGVhckZsYWdfVEMoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIFdSSVRFX1JFRygoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0lGQ1IgLE1ETUFfQ0lGQ1JfQ0xUQ0lGKTsKIH0KQEAgLTM4OTEsNyArMzg5MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX0VuYWJsZUlUX1RFKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBTRVRfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IgLE1ETUFfQ0NSX1RFSUUpOwogfQpAQCAtMzkyMSw3ICszOTIxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfRW5hYmxlSVRfQ1RDKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBTRVRfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IgLE1ETUFfQ0NSX0NUQ0lFKTsKIH0KQEAgLTM5NTEsNyArMzk1MSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX0VuYWJsZUlUX0JSVChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgU0VUX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0NSICxNRE1BX0NDUl9CUlRJRSk7CiB9CkBAIC0zOTgxLDcgKzM5ODEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9FbmFibGVJVF9CVChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgU0VUX0JJVCgoKE1ETUFfQ2hhbm5lbF9UeXBlRGVmKikobWRtYV9iYXNlX2FkZHIgKyBMTF9NRE1BX0NIX09GRlNFVF9UQUJbQ2hhbm5lbF0pKS0+Q0NSICxNRE1BX0NDUl9CVElFKTsKIH0KQEAgLTQwMTEsNyArNDAxMSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX0VuYWJsZUlUX1RDKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBTRVRfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IgLE1ETUFfQ0NSX1RDSUUpOwogfQpAQCAtNDA0MSw3ICs0MDQxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfRGlzYWJsZUlUX1RFKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBDTEVBUl9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiAsTURNQV9DQ1JfVEVJRSk7CiB9CkBAIC00MDcxLDcgKzQwNzEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfTURNQV9EaXNhYmxlSVRfQ1RDKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBDTEVBUl9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiAsTURNQV9DQ1JfQ1RDSUUpOwogfQpAQCAtNDEwMSw3ICs0MTAxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfRGlzYWJsZUlUX0JSVChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgQ0xFQVJfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IgLE1ETUFfQ0NSX0JSVElFKTsKIH0KQEAgLTQxMzEsNyArNDEzMSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9NRE1BX0Rpc2FibGVJVF9CVChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgQ0xFQVJfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IgLE1ETUFfQ0NSX0JUSUUpOwogfQpAQCAtNDE2MSw3ICs0MTYxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX01ETUFfRGlzYWJsZUlUX1RDKE1ETUFfVHlwZURlZiAqTURNQXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OworICB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKIAogICBDTEVBUl9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiAsTURNQV9DQ1JfVENJRSk7CiB9CkBAIC00MTkxLDcgKzQxOTEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfSXNFbmFibGVkSVRfVEUoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IgLE1ETUFfQ0NSX1RFSUUpID09IE1ETUFfQ0NSX1RFSUUpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQyMjEsNyArNDIyMSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9Jc0VuYWJsZWRJVF9DVEMoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IgLE1ETUFfQ0NSX0NUQ0lFKSA9PSBNRE1BX0NDUl9DVENJRSkgPyAxVUwgOiAwVUwpOwogfQpAQCAtNDI1MSw3ICs0MjUxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9NRE1BX0lzRW5hYmxlZElUX0JSVChNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiAsTURNQV9DQ1JfQlJUSUUpID09IE1ETUFfQ0NSX0JSVElFKSA/IDFVTCA6IDBVTCk7CiB9CkBAIC00MjgxLDcgKzQyODEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX01ETUFfSXNFbmFibGVkSVRfQlQoTURNQV9UeXBlRGVmICpNRE1BeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CisgIHVpbnQzMl90IG1kbWFfYmFzZV9hZGRyID0gKHVpbnQzMl90KU1ETUF4OwogCiAgIHJldHVybiAoKFJFQURfQklUKCgoTURNQV9DaGFubmVsX1R5cGVEZWYqKShtZG1hX2Jhc2VfYWRkciArIExMX01ETUFfQ0hfT0ZGU0VUX1RBQltDaGFubmVsXSkpLT5DQ1IgLE1ETUFfQ0NSX0JUSUUpID09IE1ETUFfQ0NSX0JUSUUpID8gMVVMIDogMFVMKTsKIH0KQEAgLTQzMTEsNyArNDMxMSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfTURNQV9Jc0VuYWJsZWRJVF9UQyhNRE1BX1R5cGVEZWYgKk1ETUF4LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50MzJfdCBtZG1hX2Jhc2VfYWRkciA9ICh1aW50MzJfdClNRE1BeDsKKyAgdWludDMyX3QgbWRtYV9iYXNlX2FkZHIgPSAodWludDMyX3QpTURNQXg7CiAKICAgcmV0dXJuICgoUkVBRF9CSVQoKChNRE1BX0NoYW5uZWxfVHlwZURlZiopKG1kbWFfYmFzZV9hZGRyICsgTExfTURNQV9DSF9PRkZTRVRfVEFCW0NoYW5uZWxdKSktPkNDUiAsTURNQV9DQ1JfVENJRSkgPT0gTURNQV9DQ1JfVENJRSkgPyAxVUwgOiAwVUwpOwogfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9sbF9vcGFtcC5oIGIvSW5jL3N0bTMyaDd4eF9sbF9vcGFtcC5oCmluZGV4IGY0MTU1MjIuLjk4MDhhYjEgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfb3BhbXAuaAorKysgYi9JbmMvc3RtMzJoN3h4X2xsX29wYW1wLmgKQEAgLTUwMSw3ICs1MDEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX09QQU1QX0dldFBvd2VyTW9kZShPUEFNUF9UeXBlRGVmICpPUEFNUHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHBvd2VyX21vZGUgPSAoUkVBRF9CSVQoT1BBTVB4LT5DU1IsIE9QQU1QX0NTUl9PUEFIU00pKTsKKyAgdWludDMyX3QgcG93ZXJfbW9kZSA9IChSRUFEX0JJVChPUEFNUHgtPkNTUiwgT1BBTVBfQ1NSX09QQUhTTSkpOwogCiAgIHJldHVybiAodWludDMyX3QpKHBvd2VyX21vZGUgfCAocG93ZXJfbW9kZSA+PiAoT1BBTVBfQ1NSX09QQUhTTV9Qb3MpKSk7CiB9CkBAIC01NzUsNyArNTc1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9PUEFNUF9HZXRJbnB1dEludmVydGluZyhPUEFNUF9UeXBlRGVmICpPUEFNUHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGlucHV0X2ludmVydGluZyA9IFJFQURfQklUKE9QQU1QeC0+Q1NSLCBPUEFNUF9DU1JfVk1TRUwpOworICB1aW50MzJfdCBpbnB1dF9pbnZlcnRpbmcgPSBSRUFEX0JJVChPUEFNUHgtPkNTUiwgT1BBTVBfQ1NSX1ZNU0VMKTsKIAogICAvKiBNYW5hZ2UgY2FzZXMgMHgxMCBhbmQgMHgxMSB0byByZXR1cm4gdGhlIHNhbWUgdmFsdWU6IE9QQU1QIGludmVydGluZyAgICAgKi8KICAgLyogaW5wdXQgbm90IGNvbm5lY3RlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC02NjEsNyArNjYxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9PUEFNUF9HZXRDYWxpYnJhdGlvblNlbGVjdGlvbihPUEFNUF9UeXBlRGVmICpPUEFNUHgpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IENhbGlicmF0aW9uU2VsZWN0aW9uID0gKHVpbnQzMl90KShSRUFEX0JJVChPUEFNUHgtPkNTUiwgT1BBTVBfQ1NSX0NBTFNFTCkpOworICB1aW50MzJfdCBDYWxpYnJhdGlvblNlbGVjdGlvbiA9ICh1aW50MzJfdCkoUkVBRF9CSVQoT1BBTVB4LT5DU1IsIE9QQU1QX0NTUl9DQUxTRUwpKTsKIAogICByZXR1cm4gKHVpbnQzMl90KSgoQ2FsaWJyYXRpb25TZWxlY3Rpb24gPDwgNCl8CiAgICAgICAgICAgKCgoQ2FsaWJyYXRpb25TZWxlY3Rpb24gJiBPUEFNUF9DU1JfQ0FMU0VMXzEpID09IDBVTCkgPyBPUEFNUF9PVFJfVFJJTU9GRlNFVE4gOiBPUEFNUF9PVFJfVFJJTU9GRlNFVFApKTsKQEAgLTcwMSw3ICs3MDEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfT1BBTVBfU2V0VHJpbW1pbmdWYWx1ZShPUEFNUF9UeXBlRGVmKiBPUEFNUHgsIHVpbnQzMl90IFBvd2VyTW9kZSwgdWludDMyX3QgVHJhbnNpc3RvcnNEaWZmUGFpciwgdWludDMyX3QgVHJpbW1pbmdWYWx1ZSkKIHsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcHJlZyA9IF9fT1BBTVBfUFRSX1JFR19PRkZTRVQoT1BBTVB4LT5PVFIsIChQb3dlck1vZGUgJiBPUEFNUF9QT1dFUk1PREVfT1RSX1JFR09GRlNFVF9NQVNLKSk7CisgIF9fSU8gdWludDMyX3QgKnByZWcgPSBfX09QQU1QX1BUUl9SRUdfT0ZGU0VUKE9QQU1QeC0+T1RSLCAoUG93ZXJNb2RlICYgT1BBTVBfUE9XRVJNT0RFX09UUl9SRUdPRkZTRVRfTUFTSykpOwogCiAgIC8qIFNldCBiaXRzIHdpdGggcG9zaXRpb24gaW4gcmVnaXN0ZXIgZGVwZW5kaW5nIG9uIHBhcmFtZXRlciAgICAgICAgICAgICAgICAqLwogICAvKiAiVHJhbnNpc3RvcnNEaWZmUGFpciIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTczMSw3ICs3MzEsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX09QQU1QX0dldFRyaW1taW5nVmFsdWUoT1BBTVBfVHlwZURlZiogT1BBTVB4LCB1aW50MzJfdCBQb3dlck1vZGUsIHVpbnQzMl90IFRyYW5zaXN0b3JzRGlmZlBhaXIpCiB7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnByZWcgPSBfX09QQU1QX1BUUl9SRUdfT0ZGU0VUKE9QQU1QeC0+T1RSLCAoUG93ZXJNb2RlICYgT1BBTVBfUE9XRVJNT0RFX09UUl9SRUdPRkZTRVRfTUFTSykpOworICBjb25zdCBfX0lPIHVpbnQzMl90ICpwcmVnID0gX19PUEFNUF9QVFJfUkVHX09GRlNFVChPUEFNUHgtPk9UUiwgKFBvd2VyTW9kZSAmIE9QQU1QX1BPV0VSTU9ERV9PVFJfUkVHT0ZGU0VUX01BU0spKTsKIAogICAvKiBSZXRyaWV2ZSBiaXRzIHdpdGggcG9zaXRpb24gaW4gcmVnaXN0ZXIgZGVwZW5kaW5nIG9uIHBhcmFtZXRlciAgICAgICAgICAgKi8KICAgLyogIlRyYW5zaXN0b3JzRGlmZlBhaXIiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX3B3ci5oIGIvSW5jL3N0bTMyaDd4eF9sbF9wd3IuaAppbmRleCAxZTBkMGNkLi45ODYwMmUyIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2xsX3B3ci5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfcHdyLmgKQEAgLTc0LDkgKzc0LDEzIEBACiAjZGVmaW5lIExMX1BXUl9GTEFHX0NQVTJfQ1NTRiAgICAgICAgIFBXUl9DUFUyQ1JfQ1NTRiAgICAgLyohPCBDbGVhciBmbGFncyBmb3IgQ1BVMiAqLwogI2VuZGlmIC8qIERVQUxfQ09SRSAqLwogI2RlZmluZSBMTF9QV1JfRkxBR19XS1VQQ1JfV0tVUEM2ICAgICBQV1JfV0tVUENSX1dLVVBDNiAgIC8qITwgQ2xlYXIgUEMxIFdLVVAgZmxhZyAgKi8KKyNpZiBkZWZpbmVkIChQV1JfV0tVUENSX1dLVVBDNSkKICNkZWZpbmUgTExfUFdSX0ZMQUdfV0tVUENSX1dLVVBDNSAgICAgUFdSX1dLVVBDUl9XS1VQQzUgICAvKiE8IENsZWFyIFBJMTEgV0tVUCBmbGFnICovCisjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1dLVVBDUl9XS1VQQzUpICovCiAjZGVmaW5lIExMX1BXUl9GTEFHX1dLVVBDUl9XS1VQQzQgICAgIFBXUl9XS1VQQ1JfV0tVUEM0ICAgLyohPCBDbGVhciBQQzEzIFdLVVAgZmxhZyAqLworI2lmIGRlZmluZWQgKFBXUl9XS1VQQ1JfV0tVUEMzKQogI2RlZmluZSBMTF9QV1JfRkxBR19XS1VQQ1JfV0tVUEMzICAgICBQV1JfV0tVUENSX1dLVVBDMyAgIC8qITwgQ2xlYXIgUEk4IFdLVVAgZmxhZyAgKi8KKyNlbmRpZiAvKiBkZWZpbmVkIChQV1JfV0tVUENSX1dLVVBDMykgKi8KICNkZWZpbmUgTExfUFdSX0ZMQUdfV0tVUENSX1dLVVBDMiAgICAgUFdSX1dLVVBDUl9XS1VQQzIgICAvKiE8IENsZWFyIFBBMiBXS1VQIGZsYWcgICovCiAjZGVmaW5lIExMX1BXUl9GTEFHX1dLVVBDUl9XS1VQQzEgICAgIFBXUl9XS1VQQ1JfV0tVUEMxICAgLyohPCBDbGVhciBQQTAgV0tVUCBmbGFnICAqLwogLyoqCkBAIC0xMzEsOSArMTM1LDEzIEBACiAjZW5kaWYgLyogUFdSX0NQVUNSX1BERFNfRDIgKi8KIAogI2RlZmluZSBMTF9QV1JfV0tVUEZSX1dLVVBGNiAgICAgICAgICBQV1JfV0tVUEZSX1dLVVBGNiAgIC8qITwgV2FrZXVwIGZsYWcgb24gUEMxICAqLworI2lmIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEY1KQogI2RlZmluZSBMTF9QV1JfV0tVUEZSX1dLVVBGNSAgICAgICAgICBQV1JfV0tVUEZSX1dLVVBGNSAgIC8qITwgV2FrZXVwIGZsYWcgb24gUEkxMSAqLworI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEY1KSAqLwogI2RlZmluZSBMTF9QV1JfV0tVUEZSX1dLVVBGNCAgICAgICAgICBQV1JfV0tVUEZSX1dLVVBGNCAgIC8qITwgV2FrZXVwIGZsYWcgb24gUEMxMyAqLworI2lmIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEYzKQogI2RlZmluZSBMTF9QV1JfV0tVUEZSX1dLVVBGMyAgICAgICAgICBQV1JfV0tVUEZSX1dLVVBGMyAgIC8qITwgV2FrZXVwIGZsYWcgb24gUEk4ICAqLworI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEYzKSAqLwogI2RlZmluZSBMTF9QV1JfV0tVUEZSX1dLVVBGMiAgICAgICAgICBQV1JfV0tVUEZSX1dLVVBGMiAgIC8qITwgV2FrZXVwIGZsYWcgb24gUEEyICAqLwogI2RlZmluZSBMTF9QV1JfV0tVUEZSX1dLVVBGMSAgICAgICAgICBQV1JfV0tVUEZSX1dLVVBGMSAgIC8qITwgV2FrZXVwIGZsYWcgb24gUEEwICAqLwogLyoqCkBAIC0xODYsOCArMTk0LDEyIEBACiAjZGVmaW5lIExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUzICAgICAgUFdSX0QzQ1JfVk9TXzAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VsZWN0IHZvbHRhZ2Ugc2NhbGUgMyAqLwogI2RlZmluZSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMiAgICAgIFBXUl9EM0NSX1ZPU18xICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCB2b2x0YWdlIHNjYWxlIDIgKi8KICNkZWZpbmUgTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTEgICAgICAoUFdSX0QzQ1JfVk9TXzAgfCBQV1JfRDNDUl9WT1NfMSkgLyohPCBTZWxlY3Qgdm9sdGFnZSBzY2FsZSAxICovCisjaWYgZGVmaW5lZCAoU1lTQ0ZHX1BXUkNSX09ERU4pIC8qIFNUTTMySDc0eHh4IGFuZCBTVE0zMkg3NXh4eCBsaW5lcyAqLwogI2RlZmluZSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMCAgICAgIChQV1JfRDNDUl9WT1NfMCB8IFBXUl9EM0NSX1ZPU18xKSAvKiE8IFNlbGVjdCB2b2x0YWdlIHNjYWxlIDAgKi8KICNlbHNlCisjZGVmaW5lIExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUwICAgICAgMHgwMDAwMDAwMFUgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VsZWN0IHZvbHRhZ2Ugc2NhbGUgMCAqLworI2VuZGlmIC8qIGRlZmluZWQgKFNZU0NGR19QV1JDUl9PREVOKSAqLworI2Vsc2UKICNkZWZpbmUgTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTMgICAgICAweDAwMDAwMDAwVSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWxlY3Qgdm9sdGFnZSBzY2FsZSAzICovCiAjZGVmaW5lIExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUyICAgICAgUFdSX0QzQ1JfVk9TXzAgICAgICAgICAgICAgICAgICAgIC8qITwgU2VsZWN0IHZvbHRhZ2Ugc2NhbGUgMiAqLwogI2RlZmluZSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMSAgICAgIFBXUl9EM0NSX1ZPU18xICAgICAgICAgICAgICAgICAgICAvKiE8IFNlbGVjdCB2b2x0YWdlIHNjYWxlIDEgKi8KQEAgLTI1Nyw5ICsyNjksMTMgQEAKICAgKi8KICNkZWZpbmUgTExfUFdSX1dBS0VVUF9QSU4xICAgIFBXUl9XS1VQRVBSX1dLVVBFTjEgIC8qITwgV2FrZS1VcCBwaW4gMSA6IFBBMCAgKi8KICNkZWZpbmUgTExfUFdSX1dBS0VVUF9QSU4yICAgIFBXUl9XS1VQRVBSX1dLVVBFTjIgIC8qITwgV2FrZS1VcCBwaW4gMiA6IFBBMiAgKi8KKyNpZiBkZWZpbmVkIChQV1JfV0tVUEVQUl9XS1VQRU4zKQogI2RlZmluZSBMTF9QV1JfV0FLRVVQX1BJTjMgICAgUFdSX1dLVVBFUFJfV0tVUEVOMyAgLyohPCBXYWtlLVVwIHBpbiAzIDogUEk4ICAqLworI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRVBSX1dLVVBFTjMpICovCiAjZGVmaW5lIExMX1BXUl9XQUtFVVBfUElONCAgICBQV1JfV0tVUEVQUl9XS1VQRU40ICAvKiE8IFdha2UtVXAgcGluIDQgOiBQQzEzICovCisjaWYgZGVmaW5lZCAoUFdSX1dLVVBFUFJfV0tVUEVONSkKICNkZWZpbmUgTExfUFdSX1dBS0VVUF9QSU41ICAgIFBXUl9XS1VQRVBSX1dLVVBFTjUgIC8qITwgV2FrZS1VcCBwaW4gNSA6IFBJMTEgKi8KKyNlbmRpZiAvKiBkZWZpbmVkIChQV1JfV0tVUEVQUl9XS1VQRU41KSAqLwogI2RlZmluZSBMTF9QV1JfV0FLRVVQX1BJTjYgICAgUFdSX1dLVVBFUFJfV0tVUEVONiAgLyohPCBXYWtlLVVwIHBpbiA2IDogUEMxICAqLwogLyoqCiAgICogQH0KQEAgLTI3OSw3ICsyOTUsNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIExMX1BXUl9MRE9fU1VQUExZICAgICAgICAgICAgICAgICAgICAgUFdSX0NSM19MRE9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ29yZSBkb21haW5zIGFyZSBzdXBwcGxpZWQgZnJvbSB0aGUgTERPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZiBkZWZpbmVkIChTTVBTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjaWYgZGVmaW5lZCAoU01QUykKICNkZWZpbmUgTExfUFdSX0RJUkVDVF9TTVBTX1NVUFBMWSAgICAgICAgICAgICBQV1JfQ1IzX1NNUFNFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDb3JlIGRvbWFpbnMgYXJlIHN1cHBwbGllZCBmcm9tIHRoZSBTTVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMTF9QV1JfU01QU18xVjhfU1VQUExJRVNfTERPICAgICAgICAgIChQV1JfQ1IzX1NNUFNMRVZFTF8wIHwgUFdSX0NSM19TTVBTRU4gfCBQV1JfQ1IzX0xET0VOKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBTTVBTIDEuOFYgb3V0cHV0IHN1cHBsaWVzIHRoZSBMRE8gd2hpY2ggc3VwcGxpZXMgdGhlIENvcmUgZG9tYWlucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExMX1BXUl9TTVBTXzJWNV9TVVBQTElFU19MRE8gICAgICAgICAgKFBXUl9DUjNfU01QU0xFVkVMXzEgfCBQV1JfQ1IzX1NNUFNFTiB8IFBXUl9DUjNfTERPRU4pICAgICAgICAgICAgICAgICAgICAgIC8qITwgVGhlIFNNUFMgMi41ViBvdXRwdXQgc3VwcGxpZXMgdGhlIExETyB3aGljaCBzdXBwbGllcyB0aGUgQ29yZSBkb21haW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzNDEsNyArMTM1Nyw3IEBACiB9CiAjZW5kaWYgLyogRFVBTF9DT1JFICovCiAKLSNpZiBkZWZpbmVkIChQV1JfQ1BVQ1JfUEREU19EMykKKyNpZiBkZWZpbmVkIChQV1JfQ1BVQ1JfUEREU19EMikKIC8qKgogICAqIEBicmllZiAgR2V0IHRoZSBEMyBEb21haW4gUG93ZXIgRG93biBtb2RlIHdoZW4gdGhlIENQVSBlbnRlcnMgZGVlcHNsZWVwCiAgICogQHJtdG9sbCBDUFVDUiAgICAgUEREU19EMyAgICAgICBMTF9QV1JfQ1BVX0dldEQzUG93ZXJNb2RlCkBAIC0xMzY1LDcgKzEzODEsNyBAQAogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChQV1ItPkNQVUNSLCBQV1JfQ1BVQ1JfUEREU19TUkQpKTsKIH0KLSNlbmRpZiAvKiBQV1JfQ1BVQ1JfUEREU19EMyAqLworI2VuZGlmIC8qIFBXUl9DUFVDUl9QRERTX0QyICovCiAKICNpZiBkZWZpbmVkIChEVUFMX0NPUkUpCiAvKioKQEAgLTE1NTMsNyArMTU2OSw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUzCi0gICogQG5vdGUgICBGb3IgYWxsIEg3IGxpbmVzIGV4Y2VwdCBTVE0zMkg3QXh4eCBhbmQgU1RNMzJIN0J4eHggbGluZXMsIFZPUzAgCisgICogQG5vdGUgICBGb3IgYWxsIEg3IGxpbmVzIGV4Y2VwdCBTVE0zMkg3QXh4eCBhbmQgU1RNMzJIN0J4eHggbGluZXMsIFZPUzAKICAgKiAgICAgICAgIGlzIGFwcGxpZWQgd2hlbiBQV1JfRDNDUl9WT1NbMTowXSA9IDBiMTEgYW5kICBTWVNDRkdfUFdSQ1JfT0RFTiA9IDBiMS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTE1NjksNyArMTU4NSw3IEBACiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgbWFpbiBpbnRlcm5hbCBSZWd1bGF0b3Igb3V0cHV0IHZvbHRhZ2UKICAgKiBAcm10b2xsIEQzQ1IgICAgVk9TICAgICAgIExMX1BXUl9HZXRSZWd1bFZvbHRhZ2VTY2FsaW5nCi0gICogQG5vdGUgICBGb3IgYWxsIEg3IGxpbmVzIGV4Y2VwdCBTVE0zMkg3QXh4eCBhbmQgU1RNMzJIN0J4eHggbGluZXMsIGNoZWNraW5nIAorICAqIEBub3RlICAgRm9yIGFsbCBINyBsaW5lcyBleGNlcHQgU1RNMzJIN0F4eHggYW5kIFNUTTMySDdCeHh4IGxpbmVzLCBjaGVja2luZwogICAqICAgICAgICAgVk9TMCBuZWVkIHRoZSBjaGVjayBvZiBQV1JfRDNDUl9WT1NbMTowXSBmaWVsZCBhbmQgU1lTQ0ZHX1BXUkNSX09ERU4gYml0LgogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMApAQCAtMTU5NywxMCArMTYxMywxMyBAQAogICAqIEBwYXJhbSAgV2FrZVVwUGluIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4yCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zCisgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjYKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgorICAqCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9QV1JfRW5hYmxlV2FrZVVwUGluKHVpbnQzMl90IFdha2VVcFBpbikKQEAgLTE2MTksMTAgKzE2MzgsMTMgQEAKICAgKiBAcGFyYW0gIFdha2VVcFBpbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjUgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU42CisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KKyAgKgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUFdSX0Rpc2FibGVXYWtlVXBQaW4odWludDMyX3QgV2FrZVVwUGluKQpAQCAtMTY0MSwxMCArMTY2MywxMyBAQAogICAqIEBwYXJhbSAgV2FrZVVwUGluIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4yCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zCisgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjYKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgorICAqCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUFdSX0lzRW5hYmxlZFdha2VVcFBpbih1aW50MzJfdCBXYWtlVXBQaW4pCkBAIC0xNjYzLDEwICsxNjg4LDEzIEBACiAgICogQHBhcmFtICBXYWtlVXBQaW4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU40Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU41CisgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU41ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONgorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCisgICoKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1BXUl9TZXRXYWtlVXBQaW5Qb2xhcml0eUxvdyh1aW50MzJfdCBXYWtlVXBQaW4pCkBAIC0xNjg1LDEwICsxNzEzLDEzIEBACiAgICogQHBhcmFtICBXYWtlVXBQaW4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjIKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjMKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjMgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU40Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU41CisgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU41ICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONgorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCisgICoKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1BXUl9TZXRXYWtlVXBQaW5Qb2xhcml0eUhpZ2godWludDMyX3QgV2FrZVVwUGluKQpAQCAtMTcwNywxMCArMTczOCwxMyBAQAogICAqIEBwYXJhbSAgV2FrZVVwUGluIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4yCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zCisgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjYKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgorICAqCiAgICogQHJldHZhbCBTdGF0ZSBvZiBiaXQgKDEgb3IgMCkuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUFdSX0lzV2FrZVVwUGluUG9sYXJpdHlMb3codWludDMyX3QgV2FrZVVwUGluKQpAQCAtMTcyOSwxMCArMTc2MywxMyBAQAogICAqIEBwYXJhbSAgV2FrZVVwUGluIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4yCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zCisgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjYKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgorICAqCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9QV1JfU2V0V2FrZVVwUGluUHVsbE5vbmUodWludDMyX3QgV2FrZVVwUGluKQpAQCAtMTc1MywxMCArMTc5MCwxMyBAQAogICAqIEBwYXJhbSAgV2FrZVVwUGluIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4xCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4yCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zCisgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU4zICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElONSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjYKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzLgorICAqCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9QV1JfU2V0V2FrZVVwUGluUHVsbFVwKHVpbnQzMl90IFdha2VVcFBpbikKQEAgLTE3NzcsMTAgKzE4MTcsMTMgQEAKICAgKiBAcGFyYW0gIFdha2VVcFBpbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjUgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU42CisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KKyAgKgogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUFdSX1NldFdha2VVcFBpblB1bGxEb3duKHVpbnQzMl90IFdha2VVcFBpbikKQEAgLTE4MDEsMTAgKzE4NDQsMTMgQEAKICAgKiBAcGFyYW0gIFdha2VVcFBpbiBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1BXUl9XQUtFVVBfUElOMyAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjQKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjUKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTjUgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUFdSX1dBS0VVUF9QSU42CisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcy4KKyAgKgogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTl9OT1BVTEwKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9QV1JfV0FLRVVQX1BJTl9QVUxMVVAKQEAgLTE4MTIsNyArMTg1OCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUFdSX0dldFdha2VVcFBpblB1bGwodWludDMyX3QgV2FrZVVwUGluKQogewotICByZWdpc3RlciB1aW50MzJfdCByZWdWYWx1ZSA9IFJFQURfQklUKFBXUi0+V0tVUEVQUiwgKFBXUl9XS1VQRVBSX1dLVVBQVVBEMSA8PCAoKExMX1BXUl9XQUtFVVBfUElOU19QVUxMX1NISUZUX09GRlNFVCAqIFBPU0lUSU9OX1ZBTChXYWtlVXBQaW4pKSAmIExMX1BXUl9XQUtFVVBfUElOU19NQVhfU0hJRlRfTUFTSykpKTsKKyAgdWludDMyX3QgcmVnVmFsdWUgPSBSRUFEX0JJVChQV1ItPldLVVBFUFIsIChQV1JfV0tVUEVQUl9XS1VQUFVQRDEgPDwgKChMTF9QV1JfV0FLRVVQX1BJTlNfUFVMTF9TSElGVF9PRkZTRVQgKiBQT1NJVElPTl9WQUwoV2FrZVVwUGluKSkgJiBMTF9QV1JfV0FLRVVQX1BJTlNfTUFYX1NISUZUX01BU0spKSk7CiAKICAgcmV0dXJuICh1aW50MzJfdCkocmVnVmFsdWUgPj4gKChQV1JfV0tVUEVQUl9XS1VQUFVQRDFfUG9zICsgKExMX1BXUl9XQUtFVVBfUElOU19QVUxMX1NISUZUX09GRlNFVCAqIFBPU0lUSU9OX1ZBTChXYWtlVXBQaW4pKSkgJiBMTF9QV1JfV0FLRVVQX1BJTlNfTUFYX1NISUZUX01BU0spKTsKIH0KQEAgLTIwNzksNiArMjEyNSw3IEBACiAgIHJldHVybiAoKFJFQURfQklUKFBXUi0+V0tVUEZSLCBQV1JfV0tVUEZSX1dLVVBGNikgPT0gKFBXUl9XS1VQRlJfV0tVUEY2KSkgPyAxVUwgOiAwVUwpOwogfQogCisjaWYgZGVmaW5lZCAoUFdSX1dLVVBGUl9XS1VQRjUpCiAvKioKICAgKiBAYnJpZWYgIEdldCBXYWtlLXVwIEZsYWcgNQogICAqIEBybXRvbGwgV0tVUEZSICAgICAgICAgIFdLVVBGNSAgICAgICAgICBMTF9QV1JfSXNBY3RpdmVGbGFnX1dVNQpAQCAtMjA4OCw2ICsyMTM1LDcgQEAKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoUFdSLT5XS1VQRlIsIFBXUl9XS1VQRlJfV0tVUEY1KSA9PSAoUFdSX1dLVVBGUl9XS1VQRjUpKSA/IDFVTCA6IDBVTCk7CiB9CisjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1dLVVBGUl9XS1VQRjUpICovCiAKIC8qKgogICAqIEBicmllZiAgR2V0IFdha2UtdXAgRmxhZyA0CkBAIC0yMDk5LDYgKzIxNDcsNyBAQAogICByZXR1cm4gKChSRUFEX0JJVChQV1ItPldLVVBGUiwgUFdSX1dLVVBGUl9XS1VQRjQpID09IChQV1JfV0tVUEZSX1dLVVBGNCkpID8gMVVMIDogMFVMKTsKIH0KIAorI2lmIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEYzKQogLyoqCiAgICogQGJyaWVmICBHZXQgV2FrZS11cCBGbGFnIDMKICAgKiBAcm10b2xsIFdLVVBGUiAgICAgICAgICBXS1VQRjMgICAgICAgICAgTExfUFdSX0lzQWN0aXZlRmxhZ19XVTMKQEAgLTIxMDgsNiArMjE1Nyw3IEBACiB7CiAgIHJldHVybiAoKFJFQURfQklUKFBXUi0+V0tVUEZSLCBQV1JfV0tVUEZSX1dLVVBGMykgPT0gKFBXUl9XS1VQRlJfV0tVUEYzKSkgPyAxVUwgOiAwVUwpOwogfQorI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEYzKSAqLwogCiAvKioKICAgKiBAYnJpZWYgIEdldCBXYWtlLXVwIEZsYWcgMgpAQCAtMjE2MSw2ICsyMjExLDcgQEAKICAgV1JJVEVfUkVHKFBXUi0+V0tVUENSLCBQV1JfV0tVUENSX1dLVVBDNik7CiB9CiAKKyNpZiBkZWZpbmVkIChQV1JfV0tVUENSX1dLVVBDNSkKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgV2FrZS11cCBGbGFnIDUKICAgKiBAcm10b2xsIFdLVVBDUiAgICAgICAgICBXS1VQQzUgICAgICAgICBMTF9QV1JfQ2xlYXJGbGFnX1dVNQpAQCAtMjE3MCw2ICsyMjIxLDcgQEAKIHsKICAgV1JJVEVfUkVHKFBXUi0+V0tVUENSLCBQV1JfV0tVUENSX1dLVVBDNSk7CiB9CisjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1dLVVBDUl9XS1VQQzUpICovCiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgV2FrZS11cCBGbGFnIDQKQEAgLTIxODEsNiArMjIzMyw3IEBACiAgIFdSSVRFX1JFRyhQV1ItPldLVVBDUiwgUFdSX1dLVVBDUl9XS1VQQzQpOwogfQogCisjaWYgZGVmaW5lZCAoUFdSX1dLVVBDUl9XS1VQQzMpCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIFdha2UtdXAgRmxhZyAzCiAgICogQHJtdG9sbCBXS1VQQ1IgICAgICAgICAgV0tVUEMzICAgICAgICAgTExfUFdSX0NsZWFyRmxhZ19XVTMKQEAgLTIxOTAsNiArMjI0Myw3IEBACiB7CiAgIFdSSVRFX1JFRyhQV1ItPldLVVBDUiwgUFdSX1dLVVBDUl9XS1VQQzMpOwogfQorI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQQ1JfV0tVUEMzKSAqLwogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIFdha2UtdXAgRmxhZyAyCmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX3JjYy5oIGIvSW5jL3N0bTMyaDd4eF9sbF9yY2MuaAppbmRleCAzZWMxMjdjLi5lZDYzZWJmIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2xsX3JjYy5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfcmNjLmgKQEAgLTE1OSwxMSArMTU5LDExIEBACiAgICogQHsKICAgKi8KICNpZiAhZGVmaW5lZCAgKEhTRV9WQUxVRSkKLSNpZiBkZWZpbmVkKFJDQ19WRVJfWCkKKyNpZiBkZWZpbmVkKFJDQ19WRVJfWCkgfHwgZGVmaW5lZChSQ0NfVkVSXzNfMCkKICNkZWZpbmUgSFNFX1ZBTFVFICAgIDI1MDAwMDAwVSAgLyohPCBWYWx1ZSBvZiB0aGUgSFNFIG9zY2lsbGF0b3IgaW4gSHogKi8KICNlbHNlCiAjZGVmaW5lIEhTRV9WQUxVRSAgICAyNDAwMDAwMFUgIC8qITwgVmFsdWUgb2YgdGhlIEhTRSBvc2NpbGxhdG9yIGluIEh6ICovCi0jZW5kaWYgLyogUkNDX1ZFUl9YICovCisjZW5kaWYgLyogUkNDX1ZFUl9YIHx8IFJDQ19WRVJfM18wICovCiAjZW5kaWYgLyogSFNFX1ZBTFVFICovCiAKICNpZiAhZGVmaW5lZCAgKEhTSV9WQUxVRSkKQEAgLTUyOCw2ICs1MjgsMjkgQEAKICNkZWZpbmUgTExfUkNDX1VTQVJUMTZfQ0xLU09VUkNFX0hTSSAgICAgICAgICAgTExfQ0xLU09VUkNFKEQyQ0NJUDIsIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNlNFTF9Qb3MsIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMXzAgfCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNlNFTF8xKQogI2RlZmluZSBMTF9SQ0NfVVNBUlQxNl9DTEtTT1VSQ0VfQ1NJICAgICAgICAgICBMTF9DTEtTT1VSQ0UoRDJDQ0lQMiwgUkNDX0QyQ0NJUDJSX1VTQVJUMTZTRUwsIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMX1BvcywgUkNDX0QyQ0NJUDJSX1VTQVJUMTZTRUxfMikKICNkZWZpbmUgTExfUkNDX1VTQVJUMTZfQ0xLU09VUkNFX0xTRSAgICAgICAgICAgTExfQ0xLU09VUkNFKEQyQ0NJUDIsIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNlNFTF9Qb3MsIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMXzAgfCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNlNFTF8yKQorLyogIEFsaWFzZXMgKi8KKyNkZWZpbmUgTExfUkNDX1VTQVJUMTY5MTBfQ0xLU09VUkNFX1BDTEsyICAgICAgTExfUkNDX1VTQVJUMTZfQ0xLU09VUkNFX1BDTEsyCisjZGVmaW5lIExMX1JDQ19VU0FSVDE2OTEwX0NMS1NPVVJDRV9QTEwyUSAgICAgIExMX1JDQ19VU0FSVDE2X0NMS1NPVVJDRV9QTEwyUQorI2RlZmluZSBMTF9SQ0NfVVNBUlQxNjkxMF9DTEtTT1VSQ0VfUExMM1EgICAgICBMTF9SQ0NfVVNBUlQxNl9DTEtTT1VSQ0VfUExMM1EKKyNkZWZpbmUgTExfUkNDX1VTQVJUMTY5MTBfQ0xLU09VUkNFX0hTSSAgICAgICAgTExfUkNDX1VTQVJUMTZfQ0xLU09VUkNFX0hTSQorI2RlZmluZSBMTF9SQ0NfVVNBUlQxNjkxMF9DTEtTT1VSQ0VfQ1NJICAgICAgICBMTF9SQ0NfVVNBUlQxNl9DTEtTT1VSQ0VfQ1NJCisjZGVmaW5lIExMX1JDQ19VU0FSVDE2OTEwX0NMS1NPVVJDRV9MU0UgICAgICAgIExMX1JDQ19VU0FSVDE2X0NMS1NPVVJDRV9MU0UKKworI2VsaWYgZGVmaW5lZChSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTCkKKyNkZWZpbmUgTExfUkNDX1VTQVJUMTY5MTBfQ0xLU09VUkNFX1BDTEsyICAgICAgTExfQ0xLU09VUkNFKEQyQ0NJUDIsIFJDQ19EMkNDSVAyUl9VU0FSVDE2OTEwU0VMLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTF9Qb3MsIDB4MDAwMDAwMDBVKQorI2RlZmluZSBMTF9SQ0NfVVNBUlQxNjkxMF9DTEtTT1VSQ0VfUExMMlEgICAgICBMTF9DTEtTT1VSQ0UoRDJDQ0lQMiwgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUwsIFJDQ19EMkNDSVAyUl9VU0FSVDE2OTEwU0VMX1BvcywgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUxfMCkKKyNkZWZpbmUgTExfUkNDX1VTQVJUMTY5MTBfQ0xLU09VUkNFX1BMTDNRICAgICAgTExfQ0xLU09VUkNFKEQyQ0NJUDIsIFJDQ19EMkNDSVAyUl9VU0FSVDE2OTEwU0VMLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTF9Qb3MsIFJDQ19EMkNDSVAyUl9VU0FSVDE2OTEwU0VMXzEpCisjZGVmaW5lIExMX1JDQ19VU0FSVDE2OTEwX0NMS1NPVVJDRV9IU0kgICAgICAgIExMX0NMS1NPVVJDRShEMkNDSVAyLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTCwgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUxfUG9zLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTF8wIHwgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUxfMSkKKyNkZWZpbmUgTExfUkNDX1VTQVJUMTY5MTBfQ0xLU09VUkNFX0NTSSAgICAgICAgTExfQ0xLU09VUkNFKEQyQ0NJUDIsIFJDQ19EMkNDSVAyUl9VU0FSVDE2OTEwU0VMLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTF9Qb3MsIFJDQ19EMkNDSVAyUl9VU0FSVDE2OTEwU0VMXzIpCisjZGVmaW5lIExMX1JDQ19VU0FSVDE2OTEwX0NMS1NPVVJDRV9MU0UgICAgICAgIExMX0NMS1NPVVJDRShEMkNDSVAyLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTCwgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUxfUG9zLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTF8wIHwgUkNDX0QyQ0NJUDJSX1VTQVJUMTY5MTBTRUxfMikKKy8qICBBbGlhc2VzICovCisjZGVmaW5lIExMX1JDQ19VU0FSVDE2X0NMS1NPVVJDRV9QQ0xLMiAgICAgICAgIExMX1JDQ19VU0FSVDE2OTEwX0NMS1NPVVJDRV9QQ0xLMgorI2RlZmluZSBMTF9SQ0NfVVNBUlQxNl9DTEtTT1VSQ0VfUExMMlEgICAgICAgICBMTF9SQ0NfVVNBUlQxNjkxMF9DTEtTT1VSQ0VfUExMMlEKKyNkZWZpbmUgTExfUkNDX1VTQVJUMTZfQ0xLU09VUkNFX1BMTDNRICAgICAgICAgTExfUkNDX1VTQVJUMTY5MTBfQ0xLU09VUkNFX1BMTDNRCisjZGVmaW5lIExMX1JDQ19VU0FSVDE2X0NMS1NPVVJDRV9IU0kgICAgICAgICAgIExMX1JDQ19VU0FSVDE2OTEwX0NMS1NPVVJDRV9IU0kKKyNkZWZpbmUgTExfUkNDX1VTQVJUMTZfQ0xLU09VUkNFX0NTSSAgICAgICAgICAgTExfUkNDX1VTQVJUMTY5MTBfQ0xLU09VUkNFX0NTSQorI2RlZmluZSBMTF9SQ0NfVVNBUlQxNl9DTEtTT1VSQ0VfTFNFICAgICAgICAgICBMTF9SQ0NfVVNBUlQxNjkxMF9DTEtTT1VSQ0VfTFNFCisKICNlbHNlCiAjZGVmaW5lIExMX1JDQ19VU0FSVDE2OTEwX0NMS1NPVVJDRV9QQ0xLMiAgICAgIExMX0NMS1NPVVJDRShDRENDSVAyLCBSQ0NfQ0RDQ0lQMlJfVVNBUlQxNjkxMFNFTCwgUkNDX0NEQ0NJUDJSX1VTQVJUMTY5MTBTRUxfUG9zLCAweDAwMDAwMDAwVSkKICNkZWZpbmUgTExfUkNDX1VTQVJUMTY5MTBfQ0xLU09VUkNFX1BMTDJRICAgICAgTExfQ0xLU09VUkNFKENEQ0NJUDIsIFJDQ19DRENDSVAyUl9VU0FSVDE2OTEwU0VMLCBSQ0NfQ0RDQ0lQMlJfVVNBUlQxNjkxMFNFTF9Qb3MsIFJDQ19DRENDSVAyUl9VU0FSVDE2OTEwU0VMXzApCkBAIC01OTIsNiArNjE1LDIzIEBACiAjZGVmaW5lIExMX1JDQ19JMkMxMjNfQ0xLU09VUkNFX1BMTDNSICAgICAgICAgIExMX0NMS1NPVVJDRShEMkNDSVAyLCBSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMLCBSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMX1BvcywgUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTF8wKQogI2RlZmluZSBMTF9SQ0NfSTJDMTIzX0NMS1NPVVJDRV9IU0kgICAgICAgICAgICBMTF9DTEtTT1VSQ0UoRDJDQ0lQMiwgUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTCwgUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTF9Qb3MsIFJDQ19EMkNDSVAyUl9JMkMxMjNTRUxfMSkKICNkZWZpbmUgTExfUkNDX0kyQzEyM19DTEtTT1VSQ0VfQ1NJICAgICAgICAgICAgTExfQ0xLU09VUkNFKEQyQ0NJUDIsIFJDQ19EMkNDSVAyUl9JMkMxMjNTRUwsIFJDQ19EMkNDSVAyUl9JMkMxMjNTRUxfUG9zLCBSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMXzAgfCBSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMXzEpCisvKiAgQWxpYXNlcyAqLworI2RlZmluZSBMTF9SQ0NfSTJDMTIzNV9DTEtTT1VSQ0VfUENMSzEgICAgICAgICBMTF9SQ0NfSTJDMTIzX0NMS1NPVVJDRV9QQ0xLMQorI2RlZmluZSBMTF9SQ0NfSTJDMTIzNV9DTEtTT1VSQ0VfUExMM1IgICAgICAgICBMTF9SQ0NfSTJDMTIzX0NMS1NPVVJDRV9QTEwzUgorI2RlZmluZSBMTF9SQ0NfSTJDMTIzNV9DTEtTT1VSQ0VfSFNJICAgICAgICAgICBMTF9SQ0NfSTJDMTIzX0NMS1NPVVJDRV9IU0kKKyNkZWZpbmUgTExfUkNDX0kyQzEyMzVfQ0xLU09VUkNFX0NTSSAgICAgICAgICAgTExfUkNDX0kyQzEyM19DTEtTT1VSQ0VfQ1NJCisKKyNlbGlmIGRlZmluZWQgKFJDQ19EMkNDSVAyUl9JMkMxMjM1U0VMKQorI2RlZmluZSBMTF9SQ0NfSTJDMTIzNV9DTEtTT1VSQ0VfUENMSzEgICAgICAgICBMTF9DTEtTT1VSQ0UoRDJDQ0lQMiwgUkNDX0QyQ0NJUDJSX0kyQzEyMzVTRUwsIFJDQ19EMkNDSVAyUl9JMkMxMjM1U0VMX1BvcywgMHgwMDAwMDAwMFUpCisjZGVmaW5lIExMX1JDQ19JMkMxMjM1X0NMS1NPVVJDRV9QTEwzUiAgICAgICAgIExMX0NMS1NPVVJDRShEMkNDSVAyLCBSQ0NfRDJDQ0lQMlJfSTJDMTIzNVNFTCwgUkNDX0QyQ0NJUDJSX0kyQzEyMzVTRUxfUG9zLCBSQ0NfRDJDQ0lQMlJfSTJDMTIzNVNFTF8wKQorI2RlZmluZSBMTF9SQ0NfSTJDMTIzNV9DTEtTT1VSQ0VfSFNJICAgICAgICAgICBMTF9DTEtTT1VSQ0UoRDJDQ0lQMiwgUkNDX0QyQ0NJUDJSX0kyQzEyMzVTRUwsIFJDQ19EMkNDSVAyUl9JMkMxMjM1U0VMX1BvcywgUkNDX0QyQ0NJUDJSX0kyQzEyMzVTRUxfMSkKKyNkZWZpbmUgTExfUkNDX0kyQzEyMzVfQ0xLU09VUkNFX0NTSSAgICAgICAgICAgTExfQ0xLU09VUkNFKEQyQ0NJUDIsIFJDQ19EMkNDSVAyUl9JMkMxMjM1U0VMLCBSQ0NfRDJDQ0lQMlJfSTJDMTIzNVNFTF9Qb3MsIFJDQ19EMkNDSVAyUl9JMkMxMjM1U0VMXzAgfCBSQ0NfRDJDQ0lQMlJfSTJDMTIzNVNFTF8xKQorLyogIEFsaWFzZXMgKi8KKyNkZWZpbmUgTExfUkNDX0kyQzEyM19DTEtTT1VSQ0VfUENMSzEgICAgICAgICAgTExfUkNDX0kyQzEyMzVfQ0xLU09VUkNFX1BDTEsxCisjZGVmaW5lIExMX1JDQ19JMkMxMjNfQ0xLU09VUkNFX1BMTDNSICAgICAgICAgIExMX1JDQ19JMkMxMjM1X0NMS1NPVVJDRV9QTEwzUgorI2RlZmluZSBMTF9SQ0NfSTJDMTIzX0NMS1NPVVJDRV9IU0kgICAgICAgICAgICBMTF9SQ0NfSTJDMTIzNV9DTEtTT1VSQ0VfSFNJCisjZGVmaW5lIExMX1JDQ19JMkMxMjNfQ0xLU09VUkNFX0NTSSAgICAgICAgICAgIExMX1JDQ19JMkMxMjM1X0NMS1NPVVJDRV9DU0kKKwogI2Vsc2UKICNkZWZpbmUgTExfUkNDX0kyQzEyM19DTEtTT1VSQ0VfUENMSzEgICAgICAgICAgTExfQ0xLU09VUkNFKENEQ0NJUDIsIFJDQ19DRENDSVAyUl9JMkMxMjNTRUwsIFJDQ19DRENDSVAyUl9JMkMxMjNTRUxfUG9zLCAweDAwMDAwMDAwVSkKICNkZWZpbmUgTExfUkNDX0kyQzEyM19DTEtTT1VSQ0VfUExMM1IgICAgICAgICAgTExfQ0xLU09VUkNFKENEQ0NJUDIsIFJDQ19DRENDSVAyUl9JMkMxMjNTRUwsIFJDQ19DRENDSVAyUl9JMkMxMjNTRUxfUG9zLCBSQ0NfQ0RDQ0lQMlJfSTJDMTIzU0VMXzApCkBAIC03MTcsNiArNzU3LDkgQEAKICNkZWZpbmUgTExfUkNDX1NBSTRBX0NMS1NPVVJDRV9QTEwzUCAgICAgICAgICAgTExfQ0xLU09VUkNFKEQzQ0NJUCwgIFJDQ19EM0NDSVBSX1NBSTRBU0VMLCAgUkNDX0QzQ0NJUFJfU0FJNEFTRUxfUG9zLCAgUkNDX0QzQ0NJUFJfU0FJNEFTRUxfMSkKICNkZWZpbmUgTExfUkNDX1NBSTRBX0NMS1NPVVJDRV9JMlNfQ0tJTiAgICAgICAgTExfQ0xLU09VUkNFKEQzQ0NJUCwgIFJDQ19EM0NDSVBSX1NBSTRBU0VMLCAgUkNDX0QzQ0NJUFJfU0FJNEFTRUxfUG9zLCAgUkNDX0QzQ0NJUFJfU0FJNEFTRUxfMCB8IFJDQ19EM0NDSVBSX1NBSTRBU0VMXzEpCiAjZGVmaW5lIExMX1JDQ19TQUk0QV9DTEtTT1VSQ0VfQ0xLUCAgICAgICAgICAgIExMX0NMS1NPVVJDRShEM0NDSVAsICBSQ0NfRDNDQ0lQUl9TQUk0QVNFTCwgIFJDQ19EM0NDSVBSX1NBSTRBU0VMX1BvcywgIFJDQ19EM0NDSVBSX1NBSTRBU0VMXzIpCisjaWYgZGVmaW5lZChSQ0NfVkVSXzNfMCkKKyNkZWZpbmUgTExfUkNDX1NBSTRBX0NMS1NPVVJDRV9TUERJRiAgICAgICAgICAgTExfQ0xLU09VUkNFKEQzQ0NJUCwgIFJDQ19EM0NDSVBSX1NBSTRBU0VMLCAgUkNDX0QzQ0NJUFJfU0FJNEFTRUxfUG9zLCAgUkNDX0QzQ0NJUFJfU0FJNEFTRUxfMiB8IFJDQ19EM0NDSVBSX1NBSTRBU0VMXzApCisjZW5kaWYgLyogUkNDX1ZFUl8zXzAgKi8KICNlbmRpZiAvKiBTQUk0X0Jsb2NrX0EgKi8KICNpZiBkZWZpbmVkKFNBSTRfQmxvY2tfQikKICNkZWZpbmUgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9QTEwxUSAgICAgICAgICAgTExfQ0xLU09VUkNFKEQzQ0NJUCwgIFJDQ19EM0NDSVBSX1NBSTRCU0VMLCAgUkNDX0QzQ0NJUFJfU0FJNEJTRUxfUG9zLCAgMHgwMDAwMDAwMFUpCkBAIC03MjQsNiArNzY3LDkgQEAKICNkZWZpbmUgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9QTEwzUCAgICAgICAgICAgTExfQ0xLU09VUkNFKEQzQ0NJUCwgIFJDQ19EM0NDSVBSX1NBSTRCU0VMLCAgUkNDX0QzQ0NJUFJfU0FJNEJTRUxfUG9zLCAgUkNDX0QzQ0NJUFJfU0FJNEJTRUxfMSkKICNkZWZpbmUgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9JMlNfQ0tJTiAgICAgICAgTExfQ0xLU09VUkNFKEQzQ0NJUCwgIFJDQ19EM0NDSVBSX1NBSTRCU0VMLCAgUkNDX0QzQ0NJUFJfU0FJNEJTRUxfUG9zLCAgUkNDX0QzQ0NJUFJfU0FJNEJTRUxfMCB8IFJDQ19EM0NDSVBSX1NBSTRCU0VMXzEpCiAjZGVmaW5lIExMX1JDQ19TQUk0Ql9DTEtTT1VSQ0VfQ0xLUCAgICAgICAgICAgIExMX0NMS1NPVVJDRShEM0NDSVAsICBSQ0NfRDNDQ0lQUl9TQUk0QlNFTCwgIFJDQ19EM0NDSVBSX1NBSTRCU0VMX1BvcywgIFJDQ19EM0NDSVBSX1NBSTRCU0VMXzIpCisjaWYgZGVmaW5lZChSQ0NfVkVSXzNfMCkKKyNkZWZpbmUgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9TUERJRiAgICAgICAgICAgTExfQ0xLU09VUkNFKEQzQ0NJUCwgIFJDQ19EM0NDSVBSX1NBSTRCU0VMLCAgUkNDX0QzQ0NJUFJfU0FJNEJTRUxfUG9zLCAgUkNDX0QzQ0NJUFJfU0FJNEJTRUxfMiB8IFJDQ19EM0NDSVBSX1NBSTRCU0VMXzApCisjZW5kaWYgLyogUkNDX1ZFUl8zXzAgKi8KICNlbmRpZiAvKiBTQUk0X0Jsb2NrX0IgKi8KIC8qKgogICAqIEB9CkBAIC04NjcsMTAgKzkxMywxNyBAQAogLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfT1NQSV9DTEtTT1VSQ0UgIFBlcmlwaGVyYWwgT1NQSSBjbG9jayBzb3VyY2Ugc2VsZWN0aW9uCiAgICogQHsKICAgKi8KKyNpZiBkZWZpbmVkKFJDQ19EMUNDSVBSX09DVE9TUElTRUwpCisjZGVmaW5lIExMX1JDQ19PU1BJX0NMS1NPVVJDRV9IQ0xLICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKKyNkZWZpbmUgTExfUkNDX09TUElfQ0xLU09VUkNFX1BMTDFRICAgICAgICAgICAgKFJDQ19EMUNDSVBSX09DVE9TUElTRUxfMCkKKyNkZWZpbmUgTExfUkNDX09TUElfQ0xLU09VUkNFX1BMTDJSICAgICAgICAgICAgKFJDQ19EMUNDSVBSX09DVE9TUElTRUxfMSkKKyNkZWZpbmUgTExfUkNDX09TUElfQ0xLU09VUkNFX0NMS1AgICAgICAgICAgICAgKFJDQ19EMUNDSVBSX09DVE9TUElTRUxfMCB8IFJDQ19EMUNDSVBSX09DVE9TUElTRUxfMSkKKyNlbHNlCiAjZGVmaW5lIExMX1JDQ19PU1BJX0NMS1NPVVJDRV9IQ0xLICAgICAgICAgICAgICgweDAwMDAwMDAwVSkKICNkZWZpbmUgTExfUkNDX09TUElfQ0xLU09VUkNFX1BMTDFRICAgICAgICAgICAgKFJDQ19DRENDSVBSX09DVE9TUElTRUxfMCkKICNkZWZpbmUgTExfUkNDX09TUElfQ0xLU09VUkNFX1BMTDJSICAgICAgICAgICAgKFJDQ19DRENDSVBSX09DVE9TUElTRUxfMSkKICNkZWZpbmUgTExfUkNDX09TUElfQ0xLU09VUkNFX0NMS1AgICAgICAgICAgICAgKFJDQ19DRENDSVBSX09DVE9TUElTRUxfMCB8IFJDQ19DRENDSVBSX09DVE9TUElTRUxfMSkKKyNlbmRpZiAvKiBSQ0NfRDFDQ0lQUl9PQ1RPU1BJU0VMICovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMTAxMCwxMSArMTA2MywxNSBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1VTQVJUeF9DTEtTT1VSQ0UgIFBlcmlwaGVyYWwgVVNBUlQgZ2V0IGNsb2NrIHNvdXJjZQorLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfVVNBUlR4ICBQZXJpcGhlcmFsIFVTQVJUIGdldCBjbG9jayBzb3VyY2UKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQgKFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMKQogI2RlZmluZSBMTF9SQ0NfVVNBUlQxNl9DTEtTT1VSQ0UgICAgICAgICBMTF9DTEtTT1VSQ0UoRDJDQ0lQMiwgUkNDX0QyQ0NJUDJSX1VTQVJUMTZTRUwsIFJDQ19EMkNDSVAyUl9VU0FSVDE2U0VMX1BvcywgMHgwMDAwMDAwMFUpCisjZWxpZiBkZWZpbmVkIChSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTCkKKyNkZWZpbmUgTExfUkNDX1VTQVJUMTZfQ0xLU09VUkNFICAgICAgICAgTExfQ0xLU09VUkNFKEQyQ0NJUDIsIFJDQ19EMkNDSVAyUl9VU0FSVDE2OTEwU0VMLCBSQ0NfRDJDQ0lQMlJfVVNBUlQxNjkxMFNFTF9Qb3MsIDB4MDAwMDAwMDBVKQorLyogYWxpYXMqLworI2RlZmluZSBMTF9SQ0NfVVNBUlQxNjkxMF9DTEtTT1VSQ0UgICAgICBMTF9SQ0NfVVNBUlQxNl9DTEtTT1VSQ0UKICNlbHNlCiAjZGVmaW5lIExMX1JDQ19VU0FSVDE2X0NMS1NPVVJDRSAgICAgICAgIExMX0NMS1NPVVJDRShDRENDSVAyLCBSQ0NfQ0RDQ0lQMlJfVVNBUlQxNjkxMFNFTCwgUkNDX0NEQ0NJUDJSX1VTQVJUMTY5MTBTRUxfUG9zLCAweDAwMDAwMDAwVSkKIC8qIGFsaWFzKi8KQEAgLTEwMjksNyArMTA4Niw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfTFBVQVJUeF9DTEtTT1VSQ0UgIFBlcmlwaGVyYWwgTFBVQVJUIGdldCBjbG9jayBzb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX0xQVUFSVHggIFBlcmlwaGVyYWwgTFBVQVJUIGdldCBjbG9jayBzb3VyY2UKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQoUkNDX0QzQ0NJUFJfTFBVQVJUMVNFTCkKQEAgLTEwNDEsMTMgKzEwOTgsMjEgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19JMkN4X0NMS1NPVVJDRSAgUGVyaXBoZXJhbCBJMkMgZ2V0IGNsb2NrIHNvdXJjZQorLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfSTJDeCAgUGVyaXBoZXJhbCBJMkMgZ2V0IGNsb2NrIHNvdXJjZQogICAqIEB7CiAgICovCiAjaWYgZGVmaW5lZChSQ0NfRDJDQ0lQMlJfSTJDMTIzU0VMKQogI2RlZmluZSBMTF9SQ0NfSTJDMTIzX0NMS1NPVVJDRSAgICAgICAgICBMTF9DTEtTT1VSQ0UoRDJDQ0lQMiwgUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTCwgUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTF9Qb3MsIDB4MDAwMDAwMDBVKQorLyogYWxpYXMgKi8KKyNkZWZpbmUgTExfUkNDX0kyQzEyMzVfQ0xLU09VUkNFICAgICAgICAgTExfUkNDX0kyQzEyM19DTEtTT1VSQ0UKKyNlbGlmIGRlZmluZWQoUkNDX0QyQ0NJUDJSX0kyQzEyMzVTRUwpCisjZGVmaW5lIExMX1JDQ19JMkMxMjM1X0NMS1NPVVJDRSAgICAgICAgIExMX0NMS1NPVVJDRShEMkNDSVAyLCBSQ0NfRDJDQ0lQMlJfSTJDMTIzNVNFTCwgUkNDX0QyQ0NJUDJSX0kyQzEyMzVTRUxfUG9zLCAweDAwMDAwMDAwVSkKKy8qIGFsaWFzICovCisjZGVmaW5lIExMX1JDQ19JMkMxMjNfQ0xLU09VUkNFICAgICAgICAgIExMX1JDQ19JMkMxMjM1X0NMS1NPVVJDRQogI2Vsc2UKICNkZWZpbmUgTExfUkNDX0kyQzEyM19DTEtTT1VSQ0UgICAgICAgICAgTExfQ0xLU09VUkNFKENEQ0NJUDIsIFJDQ19DRENDSVAyUl9JMkMxMjNTRUwsIFJDQ19DRENDSVAyUl9JMkMxMjNTRUxfUG9zLCAweDAwMDAwMDAwVSkKKy8qIGFsaWFzICovCisjZGVmaW5lIExMX1JDQ19JMkMxMjM1X0NMS1NPVVJDRSAgICAgICAgIExMX1JDQ19JMkMxMjNfQ0xLU09VUkNFCiAjZW5kaWYgLyogUkNDX0QyQ0NJUDJSX0kyQzEyM1NFTCAqLwogI2lmIGRlZmluZWQoUkNDX0QzQ0NJUFJfSTJDNFNFTCkKICNkZWZpbmUgTExfUkNDX0kyQzRfQ0xLU09VUkNFICAgICAgICAgICAgTExfQ0xLU09VUkNFKEQzQ0NJUCwgIFJDQ19EM0NDSVBSX0kyQzRTRUwsICAgIFJDQ19EM0NDSVBSX0kyQzRTRUxfUG9zLCAgICAweDAwMDAwMDAwVSkKQEAgLTEwNTgsMzAgKzExMjMsMzAgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19MUFRJTXhfQ0xLU09VUkNFICBQZXJpcGhlcmFsIExQVElNIGdldCBjbG9jayBzb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX0xQVElNeCAgUGVyaXBoZXJhbCBMUFRJTSBnZXQgY2xvY2sgc291cmNlCiAgICogQHsKICAgKi8KICNpZiBkZWZpbmVkKFJDQ19EMkNDSVAyUl9MUFRJTTFTRUwpCi0jZGVmaW5lIExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFICAgICAgICAgIExMX0NMS1NPVVJDRShEMkNDSVAyLCBSQ0NfRDJDQ0lQMlJfTFBUSU0xU0VMLCAgUkNDX0QyQ0NJUDJSX0xQVElNMVNFTF9Qb3MsICAgMHgwMDAwMDAwMFUpCisjZGVmaW5lIExMX1JDQ19MUFRJTTFfQ0xLU09VUkNFICAgICAgICAgIExMX0NMS1NPVVJDRShEMkNDSVAyLCBSQ0NfRDJDQ0lQMlJfTFBUSU0xU0VMLCAgUkNDX0QyQ0NJUDJSX0xQVElNMVNFTF9Qb3MsICAgICAgMHgwMDAwMDAwMFUpCiAjZWxzZQotI2RlZmluZSBMTF9SQ0NfTFBUSU0xX0NMS1NPVVJDRSAgICAgICAgICBMTF9DTEtTT1VSQ0UoQ0RDQ0lQMiwgUkNDX0NEQ0NJUDJSX0xQVElNMVNFTCwgIFJDQ19DRENDSVAyUl9MUFRJTTFTRUxfUG9zLCAgIDB4MDAwMDAwMDBVKQorI2RlZmluZSBMTF9SQ0NfTFBUSU0xX0NMS1NPVVJDRSAgICAgICAgICBMTF9DTEtTT1VSQ0UoQ0RDQ0lQMiwgUkNDX0NEQ0NJUDJSX0xQVElNMVNFTCwgIFJDQ19DRENDSVAyUl9MUFRJTTFTRUxfUG9zLCAgICAgIDB4MDAwMDAwMDBVKQogI2VuZGlmIC8qIFJDQ19EMkNDSVAyUl9MUFRJTTFTRUwpICovCiAjaWYgZGVmaW5lZChSQ0NfRDNDQ0lQUl9MUFRJTTJTRUwpCi0jZGVmaW5lIExMX1JDQ19MUFRJTTJfQ0xLU09VUkNFICAgICAgICAgIExMX0NMS1NPVVJDRShEM0NDSVAsICBSQ0NfRDNDQ0lQUl9MUFRJTTJTRUwsICAgUkNDX0QzQ0NJUFJfTFBUSU0yU0VMX1BvcywgICAgMHgwMDAwMDAwMFUpCisjZGVmaW5lIExMX1JDQ19MUFRJTTJfQ0xLU09VUkNFICAgICAgICAgIExMX0NMS1NPVVJDRShEM0NDSVAsICBSQ0NfRDNDQ0lQUl9MUFRJTTJTRUwsICAgUkNDX0QzQ0NJUFJfTFBUSU0yU0VMX1BvcywgICAgICAgMHgwMDAwMDAwMFUpCiAjZWxzZQotI2RlZmluZSBMTF9SQ0NfTFBUSU0yX0NMS1NPVVJDRSAgICAgICAgICBMTF9DTEtTT1VSQ0UoU1JEQ0NJUCwgUkNDX1NSRENDSVBSX0xQVElNMlNFTCwgIFJDQ19TUkRDQ0lQUl9MUFRJTTJTRUxfUG9zLCAgIDB4MDAwMDAwMDBVKQorI2RlZmluZSBMTF9SQ0NfTFBUSU0yX0NMS1NPVVJDRSAgICAgICAgICBMTF9DTEtTT1VSQ0UoU1JEQ0NJUCwgUkNDX1NSRENDSVBSX0xQVElNMlNFTCwgIFJDQ19TUkRDQ0lQUl9MUFRJTTJTRUxfUG9zLCAgICAgIDB4MDAwMDAwMDBVKQogI2VuZGlmIC8qIFJDQ19EM0NDSVBSX0xQVElNMlNFTCAqLwogI2lmIGRlZmluZWQoUkNDX0QzQ0NJUFJfTFBUSU0zNDVTRUwpCi0jZGVmaW5lIExMX1JDQ19MUFRJTTM0NV9DTEtTT1VSQ0UgICAgICAgIExMX0NMS1NPVVJDRShEM0NDSVAsICBSQ0NfRDNDQ0lQUl9MUFRJTTM0NVNFTCwgUkNDX0QzQ0NJUFJfTFBUSU0zNDVTRUxfUG9zLCAgMHgwMDAwMDAwMFUpCisjZGVmaW5lIExMX1JDQ19MUFRJTTM0NV9DTEtTT1VSQ0UgICAgICAgIExMX0NMS1NPVVJDRShEM0NDSVAsICBSQ0NfRDNDQ0lQUl9MUFRJTTM0NVNFTCwgUkNDX0QzQ0NJUFJfTFBUSU0zNDVTRUxfUG9zLCAgICAgMHgwMDAwMDAwMFUpCiAjZWxzZQotI2RlZmluZSBMTF9SQ0NfTFBUSU0zNDVfQ0xLU09VUkNFICAgICAgICBMTF9DTEtTT1VSQ0UoU1JEQ0NJUCwgIFJDQ19TUkRDQ0lQUl9MUFRJTTNTRUwsIFJDQ19TUkRDQ0lQUl9MUFRJTTNTRUxfUG9zLCAgIDB4MDAwMDAwMDBVKQorI2RlZmluZSBMTF9SQ0NfTFBUSU0zNDVfQ0xLU09VUkNFICAgICAgICBMTF9DTEtTT1VSQ0UoU1JEQ0NJUCwgIFJDQ19TUkRDQ0lQUl9MUFRJTTNTRUwsIFJDQ19TUkRDQ0lQUl9MUFRJTTNTRUxfUG9zLCAgICAgIDB4MDAwMDAwMDBVKQogI2RlZmluZSBMTF9SQ0NfTFBUSU0zX0NMS1NPVVJDRSAgICAgICAgICBMTF9SQ0NfTFBUSU0zNDVfQ0xLU09VUkNFICAvKiBhbGlhcyAqLwogI2VuZGlmIC8qIFJDQ19EM0NDSVBSX0xQVElNMzQ1U0VMICovCiAvKioKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19TQUl4X0NMS1NPVVJDRSAgUGVyaXBoZXJhbCBTQUkgZ2V0IGNsb2NrIHNvdXJjZQorLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfU0FJeCAgUGVyaXBoZXJhbCBTQUkgZ2V0IGNsb2NrIHNvdXJjZQogICAqIEB7CiAgICovCiAjaWYgZGVmaW5lZChSQ0NfRDJDQ0lQMVJfU0FJMVNFTCkKQEAgLTExMDgsNyArMTE3Myw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfU0RNTUNfQ0xLU09VUkNFICBQZXJpcGhlcmFsIFNETU1DIGdldCBjbG9jayBzb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1NETU1DICBQZXJpcGhlcmFsIFNETU1DIGdldCBjbG9jayBzb3VyY2UKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQoUkNDX0QxQ0NJUFJfU0RNTUNTRUwpCkBAIC0xMTIwLDcgKzExODUsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1JOR19DTEtTT1VSQ0UgIFBlcmlwaGVyYWwgUk5HIGdldCBjbG9jayBzb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1JORyBQZXJpcGhlcmFsIFJORyBnZXQgY2xvY2sgc291cmNlCiAgICogQHsKICAgKi8KICNpZiAoUkNDX0QyQ0NJUDJSX1JOR1NFTCkKQEAgLTExMzIsNyArMTE5Nyw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfVVNCX0NMS1NPVVJDRSAgUGVyaXBoZXJhbCBVU0IgZ2V0IGNsb2NrIHNvdXJjZQorLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfVVNCICBQZXJpcGhlcmFsIFVTQiBnZXQgY2xvY2sgc291cmNlCiAgICogQHsKICAgKi8KICNpZiAoUkNDX0QyQ0NJUDJSX1VTQlNFTCkKQEAgLTExNDQsNyArMTIwOSw3IEBACiAgICogQH0KICAgKi8KIAotLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfQ0VDX0NMS1NPVVJDRSAgUGVyaXBoZXJhbCBDRUMgZ2V0IGNsb2NrIHNvdXJjZQorLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfQ0VDICBQZXJpcGhlcmFsIENFQyBnZXQgY2xvY2sgc291cmNlCiAgICogQHsKICAgKi8KICNpZiAoUkNDX0QyQ0NJUDJSX0NFQ1NFTCkKQEAgLTExNTcsNyArMTIyMiw3IEBACiAgICovCiAKICNpZiBkZWZpbmVkKERTSSkKLS8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX0RTSV9DTEtTT1VSQ0UgIFBlcmlwaGVyYWwgRFNJIGdldCBjbG9jayBzb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX0RTSSAgUGVyaXBoZXJhbCBEU0kgZ2V0IGNsb2NrIHNvdXJjZQogICAqIEB7CiAgICovCiAjZGVmaW5lIExMX1JDQ19EU0lfQ0xLU09VUkNFICAgICAgICAgICAgIFJDQ19EMUNDSVBSX0RTSVNFTApAQCAtMTE2Niw3ICsxMjMxLDcgQEAKICAgKi8KICNlbmRpZiAvKiBEU0kgKi8KIAotLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfREZTRE1fQ0xLU09VUkNFICBQZXJpcGhlcmFsIERGU0RNIGdldCBjbG9jayBzb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX0RGU0RNICBQZXJpcGhlcmFsIERGU0RNIGdldCBjbG9jayBzb3VyY2UKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQoUkNDX0QyQ0NJUDFSX0RGU0RNMVNFTCkKQEAgLTExNzksMTcgKzEyNDQsMTggQEAKICAgKi8KIAogI2lmIGRlZmluZWQoREZTRE0yX0JBU0UpCi0vKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19ERlNETTJfQ0xLU09VUkNFICBQZXJpcGhlcmFsIERGU0RNMiBnZXQgY2xvY2sgc291cmNlCisvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19ERlNETTIgIFBlcmlwaGVyYWwgREZTRE0yIGdldCBjbG9jayBzb3VyY2UKICAgKiBAewogICAqLwogI2RlZmluZSBMTF9SQ0NfREZTRE0yX0NMS1NPVVJDRSAgICAgICAgICBSQ0NfU1JEQ0NJUFJfREZTRE0yU0VMCiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmIC8qIERGU0RNMiAqLworI2VuZGlmIC8qIERGU0RNMl9CQVNFICovCiAKIAotLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfRk1DX0NMS1NPVVJDRSAgUGVyaXBoZXJhbCBGTUMgZ2V0IGNsb2NrIHNvdXJjZQorCisvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19GTUMgIFBlcmlwaGVyYWwgRk1DIGdldCBjbG9jayBzb3VyY2UKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQoUkNDX0QxQ0NJUFJfRk1DU0VMKQpAQCAtMTIwMiw3ICsxMjY4LDcgQEAKICAgKi8KIAogI2lmIGRlZmluZWQoUVVBRFNQSSkKLS8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1FTUElfQ0xLU09VUkNFICBQZXJpcGhlcmFsIFFTUEkgZ2V0IGNsb2NrIHNvdXJjZQorLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfUVNQSSAgUGVyaXBoZXJhbCBRU1BJIGdldCBjbG9jayBzb3VyY2UKICAgKiBAewogICAqLwogI2RlZmluZSBMTF9SQ0NfUVNQSV9DTEtTT1VSQ0UgICAgICAgICAgICBSQ0NfRDFDQ0lQUl9RU1BJU0VMCkBAIC0xMjEyLDE2ICsxMjc4LDIwIEBACiAjZW5kaWYgLyogUVVBRFNQSSAqLwogCiAjaWYgZGVmaW5lZChPQ1RPU1BJMSkgfHwgZGVmaW5lZChPQ1RPU1BJMikKLS8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX09TUElfQ0xLU09VUkNFICBQZXJpcGhlcmFsIE9TUEkgZ2V0IGNsb2NrIHNvdXJjZQorLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfT1NQSSBQZXJpcGhlcmFsIE9TUEkgZ2V0IGNsb2NrIHNvdXJjZQogICAqIEB7CiAgICovCisjaWYgZGVmaW5lZChSQ0NfQ0RDQ0lQUl9PQ1RPU1BJU0VMKQogI2RlZmluZSBMTF9SQ0NfT1NQSV9DTEtTT1VSQ0UgICAgICAgICAgICBSQ0NfQ0RDQ0lQUl9PQ1RPU1BJU0VMCisjZWxzZQorI2RlZmluZSBMTF9SQ0NfT1NQSV9DTEtTT1VSQ0UgICAgICAgICAgICBSQ0NfRDFDQ0lQUl9PQ1RPU1BJU0VMCisjZW5kaWYgLyogUkNDX0NEQ0NJUFJfT0NUT1NQSVNFTCAqLwogLyoqCiAgICogQH0KICAgKi8KICNlbmRpZiAvKiBPQ1RPU1BJMSB8fCBPQ1RPU1BJMiAqLwogCi0vKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19DTEtQX0NMS1NPVVJDRSAgUGVyaXBoZXJhbCBDTEtQIGdldCBjbG9jayBzb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX0NMS1AgUGVyaXBoZXJhbCBDTEtQIGdldCBjbG9jayBzb3VyY2UKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQoUkNDX0QxQ0NJUFJfQ0tQRVJTRUwpCkBAIC0xMjMzLDcgKzEzMDMsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1NQSXhfQ0xLU09VUkNFICBQZXJpcGhlcmFsIFNQSSBnZXQgY2xvY2sgc291cmNlCisvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19TUEl4ICBQZXJpcGhlcmFsIFNQSSBnZXQgY2xvY2sgc291cmNlCiAgICogQHsKICAgKi8KICNpZiBkZWZpbmVkKFJDQ19EMkNDSVAxUl9TUEkxMjNTRUwpCkBAIC0xMjU1LDcgKzEzMjUsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1NQRElGX0NMS1NPVVJDRSAgUGVyaXBoZXJhbCBTUERJRiBnZXQgY2xvY2sgc291cmNlCisvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19TUERJRiAgUGVyaXBoZXJhbCBTUERJRiBnZXQgY2xvY2sgc291cmNlCiAgICogQHsKICAgKi8KICNpZiBkZWZpbmVkKFJDQ19EMkNDSVAxUl9TUERJRlNFTCkKQEAgLTEyNjgsNyArMTMzOCw3IEBACiAgICovCiAKICNpZiBkZWZpbmVkKEZEQ0FOMSkgfHwgZGVmaW5lZChGRENBTjIpCi0vKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19GRENBTl9DTEtTT1VSQ0UgIFBlcmlwaGVyYWwgRkRDQU4gZ2V0IGNsb2NrIHNvdXJjZQorLyoqIEBkZWZncm91cCBSQ0NfTExfRUNfRkRDQU4gIFBlcmlwaGVyYWwgRkRDQU4gZ2V0IGNsb2NrIHNvdXJjZQogICAqIEB7CiAgICovCiAjaWYgZGVmaW5lZChSQ0NfRDJDQ0lQMVJfRkRDQU5TRUwpCkBAIC0xMjgxLDcgKzEzNTEsNyBAQAogICAqLwogI2VuZGlmIC8qRkRDQU4xIHx8IEZEQ0FOMiovCiAKLS8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1NXUF9DTEtTT1VSQ0UgIFBlcmlwaGVyYWwgU1dQIGdldCBjbG9jayBzb3VyY2UKKy8qKiBAZGVmZ3JvdXAgUkNDX0xMX0VDX1NXUCAgUGVyaXBoZXJhbCBTV1AgZ2V0IGNsb2NrIHNvdXJjZQogICAqIEB7CiAgICovCiAjaWYgZGVmaW5lZChSQ0NfRDJDQ0lQMVJfU1dQU0VMKQpAQCAtMTI5Myw3ICsxMzYzLDcgQEAKICAgKiBAfQogICAqLwogCi0vKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19BRENfQ0xLU09VUkNFICBQZXJpcGhlcmFsIEFEQyBnZXQgY2xvY2sgc291cmNlCisvKiogQGRlZmdyb3VwIFJDQ19MTF9FQ19BREMgIFBlcmlwaGVyYWwgQURDIGdldCBjbG9jayBzb3VyY2UKICAgKiBAewogICAqLwogI2lmIGRlZmluZWQoUkNDX0QzQ0NJUFJfQURDU0VMKQpAQCAtMTc0MCw3ICsxODEwLDcgQEAKICAgKiBAbm90ZSBEZWZhdWx0IHZhbHVlIGlzIDY0ICgzMiBmb3IgQ3V0MS54KSwgd2hpY2gsIHdoZW4gYWRkZWQgdG8gdGhlIEhTSUNBTCB2YWx1ZSwKICAgKiAgICAgICBzaG91bGQgdHJpbSB0aGUgSFNJIHRvIDY0IE1IeiArLy0gMSAlCiAgICogQHJtdG9sbCBIU0lDRkdSICAgICAgICBIU0lUUklNICAgICAgIExMX1JDQ19IU0lfU2V0Q2FsaWJUcmltbWluZwotICAqIEBwYXJhbSAgUGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTI3ICg2MyBmb3IgQ3V0MS54KQorICAqIEBwYXJhbSAgVmFsdWUgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxMjcgKDYzIGZvciBDdXQxLngpCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SQ0NfSFNJX1NldENhbGliVHJpbW1pbmcodWludDMyX3QgVmFsdWUpCkBAIC0yNzc5LDE1ICsyODQ5LDE2IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTFfQ0xLU09VUkNFX1BMTDNQCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTFfQ0xLU09VUkNFX0kyU19DS0lOCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTFfQ0xLU09VUkNFX0NMS1AKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX1BMTDFRCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTIzX0NMS1NPVVJDRV9QTEwyUAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUkyM19DTEtTT1VSQ0VfUExMM1AKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX0kyU19DS0lOCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTIzX0NMS1NPVVJDRV9DTEtQCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTIzX0NMS1NPVVJDRV9QTEwxUSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX1BMTDJQICgqKSAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX1BMTDNQICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUkyM19DTEtTT1VSQ0VfSTJTX0NLSU4gKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTIzX0NMS1NPVVJDRV9DTEtQICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUk0QV9DTEtTT1VSQ0VfUExMMVEgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRBX0NMS1NPVVJDRV9QTEwyUCAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRBX0NMS1NPVVJDRV9QTEwzUCAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRBX0NMS1NPVVJDRV9JMlNfQ0tJTiAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRBX0NMS1NPVVJDRV9TUERJRiAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTJBX0NMS1NPVVJDRV9QTEwxUSAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTJBX0NMS1NPVVJDRV9QTEwyUCAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTJBX0NMS1NPVVJDRV9QTEwzUCAgKCopCkBAIC0yNzk5LDYgKzI4NzAsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUk0Ql9DTEtTT1VSQ0VfUExMM1AgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9JMlNfQ0tJTiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJNEJfQ0xLU09VUkNFX0NMS1AgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9TUERJRiAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMkJfQ0xLU09VUkNFX1BMTDFRICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUkyQl9DTEtTT1VSQ0VfUExMMlAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTJCX0NMS1NPVVJDRV9QTEwzUCAoKikKQEAgLTI4MzAsOSArMjkwMiw5IEBACiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SQ0NfU2V0Q2xvY2tTb3VyY2UodWludDMyX3QgQ2xrU291cmNlKQogewogI2lmIGRlZmluZWQoUkNDX0QxQ0NJUFJfRk1DU0VMKQotICByZWdpc3RlciB1aW50MzJfdCAqIHBSZWcgPSAodWludDMyX3QgKikoKHVpbnQzMl90KSZSQ0MtPkQxQ0NJUFIgKyBMTF9DTEtTT1VSQ0VfUkVHKENsa1NvdXJjZSkpOworICB1aW50MzJfdCAqIHBSZWcgPSAodWludDMyX3QgKikoKHVpbnQzMl90KSZSQ0MtPkQxQ0NJUFIgKyBMTF9DTEtTT1VSQ0VfUkVHKENsa1NvdXJjZSkpOwogI2Vsc2UKLSAgcmVnaXN0ZXIgdWludDMyX3QgKiBwUmVnID0gKHVpbnQzMl90ICopKCh1aW50MzJfdCkmUkNDLT5DRENDSVBSICsgTExfQ0xLU09VUkNFX1JFRyhDbGtTb3VyY2UpKTsKKyAgdWludDMyX3QgKiBwUmVnID0gKHVpbnQzMl90ICopKCh1aW50MzJfdCkmUkNDLT5DRENDSVBSICsgTExfQ0xLU09VUkNFX1JFRyhDbGtTb3VyY2UpKTsKICNlbmRpZiAvKiAgKi8KICAgTU9ESUZZX1JFRygqcFJlZywgTExfQ0xLU09VUkNFX01BU0soQ2xrU291cmNlKSwgTExfQ0xLU09VUkNFX0NPTkZJRyhDbGtTb3VyY2UpKTsKIH0KQEAgLTI5NDUsMTUgKzMwMTcsMTYgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMV9DTEtTT1VSQ0VfUExMM1AKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMV9DTEtTT1VSQ0VfSTJTX0NLSU4KICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMV9DTEtTT1VSQ0VfQ0xLUAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUkyM19DTEtTT1VSQ0VfUExMMVEKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX1BMTDJQCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTIzX0NMS1NPVVJDRV9QTEwzUAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUkyM19DTEtTT1VSQ0VfSTJTX0NLSU4KLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX0NMS1AKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX1BMTDFRICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUkyM19DTEtTT1VSQ0VfUExMMlAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTIzX0NMS1NPVVJDRV9QTEwzUCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX0kyU19DS0lOICgqKSAKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX0NMS1AgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRBX0NMS1NPVVJDRV9QTEwxUSAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFX1BMTDJQICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFX1BMTDNQICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFX0kyU19DS0lOICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFX1NQRElGICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMkFfQ0xLU09VUkNFX1BMTDFRICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMkFfQ0xLU09VUkNFX1BMTDJQICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMkFfQ0xLU09VUkNFX1BMTDNQICAoKikKQEAgLTI5NjUsNiArMzAzOCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9QTEwzUCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJNEJfQ0xLU09VUkNFX0kyU19DS0lOICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUk0Ql9DTEtTT1VSQ0VfQ0xLUCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJNEJfQ0xLU09VUkNFX1NQRElGICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMkJfQ0xLU09VUkNFX1BMTDFRICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUkyQl9DTEtTT1VSQ0VfUExMMlAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTJCX0NMS1NPVVJDRV9QTEwzUCAoKikKQEAgLTMwNzksOSArMzE1Myw5IEBACiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SQ0NfU2V0REZTRE1DbG9ja1NvdXJjZSh1aW50MzJfdCBDbGtTb3VyY2UpCiB7CiAjaWYgZGVmaW5lZChSQ0NfRDJDQ0lQMVJfREZTRE0xU0VMKQotICBNT0RJRllfUkVHKFJDQy0+RDJDQ0lQMVIsIFJDQ19EMkNDSVAxUl9ERlNETTFTRUwsIENsa1NvdXJjZSk7CisgICBNT0RJRllfUkVHKFJDQy0+RDJDQ0lQMVIsIFJDQ19EMkNDSVAxUl9ERlNETTFTRUwsIENsa1NvdXJjZSk7CiAjZWxzZQotICBNT0RJRllfUkVHKFJDQy0+Q0RDQ0lQMVIsIFJDQ19DRENDSVAxUl9ERlNETTFTRUwsIENsa1NvdXJjZSk7CisgICBNT0RJRllfUkVHKFJDQy0+Q0RDQ0lQMVIsIFJDQ19DRENDSVAxUl9ERlNETTFTRUwsIENsa1NvdXJjZSk7CiAjZW5kaWYgLyogUkNDX0QyQ0NJUDFSX0RGU0RNMVNFTCAqLwogfQogCkBAIC0zMDkwLDcgKzMxNjQsNyBAQAogICAqIEBicmllZiAgQ29uZmlndXJlIERGU0RNeCBLZXJuZWwgY2xvY2sgc291cmNlCiAgICogQHJtdG9sbCBTUkRDQ0lQUiAgICAgICAgICAgICAgICAgICBERlNETTJTRUwgICAgICAgIExMX1JDQ19TZXRERlNETTJDbG9ja1NvdXJjZQogICAqIEBwYXJhbSAgQ2xrU291cmNlIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0gICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0RGU0RNMl9DTEtTT1VSQ0VfUENMSzIKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfREZTRE0yX0NMS1NPVVJDRV9QQ0xLNAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19ERlNETTJfQ0xLU09VUkNFX1NZU0NMSwogICAqIEByZXR2YWwgTm9uZQogICAqLwpAQCAtMzA5OCwxMSArMzE3MiwxMSBAQAogewogICAgTU9ESUZZX1JFRyhSQ0MtPlNSRENDSVBSLCBSQ0NfU1JEQ0NJUFJfREZTRE0yU0VMLCBDbGtTb3VyY2UpOwogfQotI2VuZGlmIC8qIERGU0RNMiAqLworI2VuZGlmIC8qIERGU0RNMl9CQVNFICovCiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIEZNQ3ggS2VybmVsIGNsb2NrIHNvdXJjZQotICAqIEBybXRvbGwgRDFDQ0lQUiAvIENEQ0NJUFIgICAgICAgIEZNQ1NFTCAgICAgICAgTExfUkNDX1NldEZNQ0Nsb2NrU291cmNlCisgICogQHJtdG9sbCBEMUNDSVBSIC8gIENEQ0NJUFIgICAgICAgIEZNQ1NFTCAgICAgICAgTExfUkNDX1NldEZNQ0Nsb2NrU291cmNlCiAgICogQHBhcmFtICBDbGtTb3VyY2UgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfRk1DX0NMS1NPVVJDRV9IQ0xLCiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0ZNQ19DTEtTT1VSQ0VfUExMMVEKQEAgLTMxNDksNyArMzIyMywxMSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUkNDX1NldE9TUElDbG9ja1NvdXJjZSh1aW50MzJfdCBDbGtTb3VyY2UpCiB7CisjaWYgZGVmaW5lZChSQ0NfRDFDQ0lQUl9PQ1RPU1BJU0VMKQorICBNT0RJRllfUkVHKFJDQy0+RDFDQ0lQUiwgUkNDX0QxQ0NJUFJfT0NUT1NQSVNFTCwgQ2xrU291cmNlKTsKKyNlbHNlCiAgIE1PRElGWV9SRUcoUkNDLT5DRENDSVBSLCBSQ0NfQ0RDQ0lQUl9PQ1RPU1BJU0VMLCBDbGtTb3VyY2UpOworI2VuZGlmIC8qIFJDQ19EMUNDSVBSX09DVE9TUElTRUwgKi8KIH0KICNlbmRpZiAvKiBPQ1RPU1BJMSB8fCBPQ1RPU1BJMiAqLwogCkBAIC0zMzk1LDkgKzM0NzMsOSBAQAogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1JDQ19HZXRDbG9ja1NvdXJjZSh1aW50MzJfdCBQZXJpcGgpCiB7CiAjaWYgZGVmaW5lZChSQ0NfRDFDQ0lQUl9GTUNTRUwpCi0gIHJlZ2lzdGVyIGNvbnN0IHVpbnQzMl90ICpwUmVnID0gKHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmUkNDLT5EMUNDSVBSKSArIExMX0NMS1NPVVJDRV9SRUcoUGVyaXBoKSkpOworICBjb25zdCB1aW50MzJfdCAqcFJlZyA9ICh1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlJDQy0+RDFDQ0lQUikgKyBMTF9DTEtTT1VSQ0VfUkVHKFBlcmlwaCkpKTsKICNlbHNlCi0gIHJlZ2lzdGVyIGNvbnN0IHVpbnQzMl90ICpwUmVnID0gKHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmUkNDLT5DRENDSVBSKSArIExMX0NMS1NPVVJDRV9SRUcoUGVyaXBoKSkpOworICBjb25zdCB1aW50MzJfdCAqcFJlZyA9ICh1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlJDQy0+Q0RDQ0lQUikgKyBMTF9DTEtTT1VSQ0VfUkVHKFBlcmlwaCkpKTsKICNlbmRpZiAvKiBSQ0NfRDFDQ0lQUl9GTUNTRUwgKi8KICAgcmV0dXJuICh1aW50MzJfdCkgKFBlcmlwaCB8ICgoKFJFQURfQklUKCpwUmVnLCBMTF9DTEtTT1VSQ0VfTUFTSyhQZXJpcGgpKSkgPj4gTExfQ0xLU09VUkNFX1NISUZUKFBlcmlwaCkpIDw8IExMX1JDQ19DT05GSUdfU0hJRlQpICk7CiB9CkBAIC0zNDc4LDcgKzM1NTYsNyBAQAogICAqIEBybXRvbGwgRDJDQ0lQMlIgLyBDRENDSVAyUiAgICAgIExQVElNMVNFTCAgICAgTExfUkNDX0dldExQVElNQ2xvY2tTb3VyY2VcbgogICAqICAgICAgICAgRDNDQ0lQUiAgLyBTUkRDQ0lQUiAgICAgIExQVElNMlNFTCAgICAgTExfUkNDX0dldExQVElNQ2xvY2tTb3VyY2VcbgogICAqICAgICAgICAgRDNDQ0lQUiAgLyBTUkRDQ0lQUiAgICAgIExQVElNMzQ1U0VMICAgTExfUkNDX0dldExQVElNQ2xvY2tTb3VyY2UKLSAgKiBAcGFyYW0gIFBlcmlocCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqIEBwYXJhbSAgUGVyaXBoIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX0xQVElNMV9DTEtTT1VSQ0UKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfTFBUSU0yX0NMS1NPVVJDRQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19MUFRJTTM0NV9DTEtTT1VSQ0UKQEAgLTM1MTUsMTAgKzM1OTMsMTIgQEAKICAgKiAgICAgICAgIEQzQ0NJUFIgIC8gU1JEQ0NJUFIgICAgIFNBSTRBU0VMICAgICAgTExfUkNDX0dldFNBSUNsb2NrU291cmNlXG4KICAgKiAgICAgICAgIEQzQ0NJUFIgIC8gU1JEQ0NJUFIgICAgIFNBSTRCU0VMICAgICAgTExfUkNDX0dldFNBSUNsb2NrU291cmNlCiAgICogQHBhcmFtICBQZXJpcGggVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMV9DTEtTT1VSQ0UKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFCi0gICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRBX0NMS1NPVVJDRQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUk0Ql9DTEtTT1VSQ0UKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMV9DTEtTT1VSQ0UgICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTJBX0NMS1NPVVJDRSAgKCopCisgICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUkyQl9DTEtTT1VSQ0UgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUkyM19DTEtTT1VSQ0UgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRCX0NMS1NPVVJDRSAgICgqKQogICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMV9DTEtTT1VSQ0VfUExMMVEKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJMV9DTEtTT1VSQ0VfUExMMlAKQEAgLTM1NTIsNyArMzYzMiw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9QTEwzUCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfU0FJNEJfQ0xLU09VUkNFX0kyU19DS0lOICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1JDQ19TQUk0Ql9DTEtTT1VSQ0VfQ0xLUCAoKikKLSAgKiAKKyAgKgogICAqICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMuCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUkNDX0dldFNBSUNsb2NrU291cmNlKHVpbnQzMl90IFBlcmlwaCkKQEAgLTM3MTgsNyArMzc5OCw3IEBACiAjaWYgZGVmaW5lZChRVUFEU1BJKQogLyoqCiAgICogQGJyaWVmICBHZXQgUVNQSSBLZXJuZWwgY2xvY2sgc291cmNlCi0gICogQHJtdG9sbCBEMUNDSVBSIC8gQ0RDQ0lQUiAgICAgIFFTUElTRUwgICAgICAgIExMX1JDQ19HZXRRU1BJQ2xvY2tTb3VyY2UKKyAgKiBAcm10b2xsIEQxQ0NJUFIgIC8gIENEQ0NJUFIgICAgICBRU1BJU0VMICAgICAgICBMTF9SQ0NfR2V0UVNQSUNsb2NrU291cmNlCiAgICogQHBhcmFtICBQZXJpcGggVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfUVNQSV9DTEtTT1VSQ0UKICAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC0zNzQ5LDEzICszODI5LDE3IEBACiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUkNDX0dldE9TUElDbG9ja1NvdXJjZSh1aW50MzJfdCBQZXJpcGgpCiB7CiAgIFVOVVNFRChQZXJpcGgpOworI2lmIGRlZmluZWQoUkNDX0QxQ0NJUFJfT0NUT1NQSVNFTCkKKyAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoUkNDLT5EMUNDSVBSLCBSQ0NfRDFDQ0lQUl9PQ1RPU1BJU0VMKSk7CisjZWxzZQogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChSQ0MtPkNEQ0NJUFIsIFJDQ19DRENDSVBSX09DVE9TUElTRUwpKTsKKyNlbmRpZiAvKiBSQ0NfRDFDQ0lQUl9PQ1RPU1BJU0VMICovCiB9CiAjZW5kaWYgLyogZGVmaW5lZChPQ1RPU1BJMSkgfHwgZGVmaW5lZChPQ1RPU1BJMikgKi8KIAogLyoqCiAgICogQGJyaWVmICBHZXQgQ0xLUCBLZXJuZWwgY2xvY2sgc291cmNlCi0gICogQHJtdG9sbCBEMUNDSVBSIC8gQ0RDQ0lQUiAgICAgICBDS1BFUlNFTCAgICAgICAgTExfUkNDX0dldENMS1BDbG9ja1NvdXJjZQorICAqIEBybXRvbGwgRDFDQ0lQUiAvICBDRENDSVBSICAgICAgIENLUEVSU0VMICAgICAgICBMTF9SQ0NfR2V0Q0xLUENsb2NrU291cmNlCiAgICogQHBhcmFtICBQZXJpcGggVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9SQ0NfQ0xLUF9DTEtTT1VSQ0UKICAgKiBAcmV0dmFsIFJldHVybmVkIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CkBAIC02MjgwLDcgKzYzNjQsNyBAQAogdWludDMyX3QgICAgTExfUkNDX0dldERGU0RNQ2xvY2tGcmVxKHVpbnQzMl90IERGU0RNeFNvdXJjZSk7CiAjaWYgZGVmaW5lZChERlNETTJfQkFTRSkKIHVpbnQzMl90ICAgIExMX1JDQ19HZXRERlNETTJDbG9ja0ZyZXEodWludDMyX3QgREZTRE14U291cmNlKTsKLSNlbmRpZiAvKiBERlNETTIgKi8KKyNlbmRpZiAvKiBERlNETTJfQkFTRSAqLwogI2lmIGRlZmluZWQoRFNJKQogdWludDMyX3QgICAgTExfUkNDX0dldERTSUNsb2NrRnJlcSh1aW50MzJfdCBEU0l4U291cmNlKTsKICNlbmRpZiAvKiBEU0kgKi8KZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfbGxfcm5nLmggYi9JbmMvc3RtMzJoN3h4X2xsX3JuZy5oCmluZGV4IDNmMjVkZjAuLmFiODlhMTggMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfcm5nLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9sbF9ybmcuaApAQCAtNjE0LDcgKzYxNCw3IEBACiAgICogQH0KICAgKi8KIAotI2lmIGRlZmluZWQgKFJOR19WRVJfM18xKQorI2lmIGRlZmluZWQoUk5HX1ZFUl8zXzIpIHx8IGRlZmluZWQoUk5HX1ZFUl8zXzEpIHx8IGRlZmluZWQoUk5HX1ZFUl8zXzApCiAvKiogQGRlZmdyb3VwIFJOR19MTF9FRl9IZWFsdGhfVGVzdF9Db250cm9sIEhlYWx0aCBUZXN0IENvbnRyb2wKICAgKiBAewogICAqLwpAQCAtNjQ1LDcgKzY0NSw3IEBACiAvKioKICAgKiBAfQogICAqLwotI2VuZGlmICAvKlJOR19WRVJfM18xKi8KKyNlbmRpZiAgLypFbmQgb2YgUk5HX1ZFUl8zXzIsIFJOR19WRVJfM18xIG9yIFJOR19WRVJfM18wKi8KICNpZiBkZWZpbmVkKFVTRV9GVUxMX0xMX0RSSVZFUikKIC8qKiBAZGVmZ3JvdXAgUk5HX0xMX0VGX0luaXQgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucwogICAqIEB7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX3J0Yy5oIGIvSW5jL3N0bTMyaDd4eF9sbF9ydGMuaAppbmRleCBlOWI4NjZhLi4yMzBiMWUzIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2xsX3J0Yy5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfcnRjLmgKQEAgLTQ1NiwxMCArNDU2LDEwIEBACiAgICogQH0KICAgKi8KIAotI2lmIGRlZmluZWQoVEFNUF9DUjFfVEFNUDFFKQogLyoqIEBkZWZncm91cCBSVENfTExfRUNfVEFNUEVSICBUQU1QRVIKICAgKiBAewogICAqLworI2lmIGRlZmluZWQoVEFNUF9DUjFfVEFNUDFFKQogI2RlZmluZSBMTF9SVENfVEFNUEVSXzEgICAgICAgICAgICAgICAgICAgIFRBTVBfQ1IxX1RBTVAxRSAvKiE8IFRhbXBlciAxIGlucHV0IGRldGVjdGlvbiAqLwogI2VuZGlmIC8qIFRBTVBfQ1IxX1RBTVAxRSAqLwogI2lmIGRlZmluZWQoVEFNUF9DUjFfVEFNUDJFKQpAQCAtNDcyLDEwICs0NzIsMTAgQEAKICAgKiBAfQogICAqLwogCi0jaWYgZGVmaW5lZChUQU1QX0NSMV9UQU1QMUUpCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19UQU1QRVJfTUFTSyAgVEFNUEVSIE1BU0sKICAgKiBAewogICAqLworI2lmIGRlZmluZWQoVEFNUF9DUjFfVEFNUDFFKQogI2RlZmluZSBMTF9SVENfVEFNUEVSX01BU0tfVEFNUEVSMSAgICAgICAgIFRBTVBfQ1IyX1RBTVAxTVNLIC8qITwgVGFtcGVyIDEgZXZlbnQgZ2VuZXJhdGVzIGEgdHJpZ2dlciBldmVudC4gVEFNUDFGIGlzIG1hc2tlZCBhbmQgaW50ZXJuYWxseSBjbGVhcmVkIGJ5IGhhcmR3YXJlLiBUaGUgYmFja3VwIHJlZ2lzdGVycyBhcmUgbm90IGVyYXNlZCAqLwogI2VuZGlmIC8qIFRBTVBfQ1IxX1RBTVAxRSAqLwogI2lmIGRlZmluZWQoVEFNUF9DUjFfVEFNUDJFKQpAQCAtNDg4LDEwICs0ODgsMTAgQEAKICAgKiBAfQogICAqLwogCi0jaWYgZGVmaW5lZChUQU1QX0NSMV9UQU1QMUUpCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19UQU1QRVJfTk9FUkFTRSAgVEFNUEVSIE5PIEVSQVNFCiAgICogQHsKICAgKi8KKyNpZiBkZWZpbmVkKFRBTVBfQ1IxX1RBTVAxRSkKICNkZWZpbmUgTExfUlRDX1RBTVBFUl9OT0VSQVNFX1RBTVBFUjEgICAgICBUQU1QX0NSMl9UQU1QMU5PRVJBU0UgLyohPCBUYW1wZXIgMSBldmVudCBkb2VzIG5vdCBlcmFzZSB0aGUgYmFja3VwIHJlZ2lzdGVycy4gKi8KICNlbmRpZiAvKiBUQU1QX0NSMV9UQU1QMUUgKi8KICNpZiBkZWZpbmVkKFRBTVBfQ1IxX1RBTVAyRSkKQEAgLTU0NywxMCArNTQ3LDEwIEBACiAgICovCiAjZW5kaWYgLyogVEFNUF9GTFRDUl9UQU1QRlJFUSAqLwogCi0jaWYgZGVmaW5lZChUQU1QX0NSMV9UQU1QMUUpCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19UQU1QRVJfQUNUSVZFTEVWRUwgIFRBTVBFUiBBQ1RJVkUgTEVWRUwKICAgKiBAewogICAqLworI2lmIGRlZmluZWQoVEFNUF9DUjFfVEFNUDFFKQogI2RlZmluZSBMTF9SVENfVEFNUEVSX0FDVElWRUxFVkVMX1RBTVAxICAgIFRBTVBfQ1IyX1RBTVAxVFJHIC8qITwgVGFtcGVyIDEgaW5wdXQgZmFsbGluZyBlZGdlIChpZiBUQU1QRkxUID0gMDApIG9yIHN0YXlpbmcgaGlnaCAoaWYgVEFNUEZMVCAhPSAwMCkgdHJpZ2dlcnMgYSB0YW1wZXIgZGV0ZWN0aW9uIGV2ZW50ICovCiAjZW5kaWYgLyogVEFNUF9DUjFfVEFNUDFFICovCiAjaWYgZGVmaW5lZChUQU1QX0NSMV9UQU1QMkUpCkBAIC01NjMsMTAgKzU2MywxMCBAQAogICAqIEB9CiAgICovCiAKLSNpZiBkZWZpbmVkIChSVENfVEFNUENSX1RBTVAxRSkKIC8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX1RBTVBFUiAgVEFNUEVSCiAgICogQHsKICAgKi8KKyNpZiBkZWZpbmVkIChSVENfVEFNUENSX1RBTVAxRSkKICNkZWZpbmUgTExfUlRDX1RBTVBFUl8xICAgICAgICAgICAgICAgICAgICBSVENfVEFNUENSX1RBTVAxRSAvKiE8IFJUQ19UQU1QMSBpbnB1dCBkZXRlY3Rpb24gKi8KICNlbmRpZiAvKiBSVENfVEFNUENSX1RBTVAxRSAqLwogI2lmIGRlZmluZWQgKFJUQ19UQU1QQ1JfVEFNUDJFKQpAQCAtNTc5LDEwICs1NzksMTAgQEAKICAgKiBAfQogICAqLwogCi0jaWYgZGVmaW5lZCAoUlRDX1RBTVBDUl9UQU1QMUUpCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19UQU1QRVJfTUFTSyAgVEFNUEVSIE1BU0sKICAgKiBAewogICAqLworI2lmIGRlZmluZWQgKFJUQ19UQU1QQ1JfVEFNUDFFKQogI2RlZmluZSBMTF9SVENfVEFNUEVSX01BU0tfVEFNUEVSMSAgICAgICAgIFJUQ19UQU1QQ1JfVEFNUDFNRiAvKiE8IFRhbXBlciAxIGV2ZW50IGdlbmVyYXRlcyBhIHRyaWdnZXIgZXZlbnQuIFRBTVAxRiBpcyBtYXNrZWQgYW5kIGludGVybmFsbHkgY2xlYXJlZCBieSBoYXJkd2FyZS5UaGUgYmFja3VwIHJlZ2lzdGVycyBhcmUgbm90IGVyYXNlZCAqLwogI2VuZGlmIC8qIFJUQ19UQU1QQ1JfVEFNUDFFICovCiAjaWYgZGVmaW5lZCAoUlRDX1RBTVBDUl9UQU1QMkUpCkBAIC01OTUsMTAgKzU5NSwxMCBAQAogICAqIEB9CiAgICovCiAKLSNpZiBkZWZpbmVkIChSVENfVEFNUENSX1RBTVAxRSkKIC8qKiBAZGVmZ3JvdXAgUlRDX0xMX0VDX1RBTVBFUl9OT0VSQVNFICBUQU1QRVIgTk8gRVJBU0UKICAgKiBAewogICAqLworI2lmIGRlZmluZWQgKFJUQ19UQU1QQ1JfVEFNUDFFKQogI2RlZmluZSBMTF9SVENfVEFNUEVSX05PRVJBU0VfVEFNUEVSMSAgICAgIFJUQ19UQU1QQ1JfVEFNUDFOT0VSQVNFIC8qITwgVGFtcGVyIDEgZXZlbnQgZG9lcyBub3QgZXJhc2UgdGhlIGJhY2t1cCByZWdpc3RlcnMuICovCiAjZW5kaWYgLyogUlRDX1RBTVBDUl9UQU1QMUUgKi8KICNpZiBkZWZpbmVkIChSVENfVEFNUENSX1RBTVAyRSkKQEAgLTY1NCwxMCArNjU0LDEwIEBACiAgICovCiAjZW5kaWYgLyogUlRDX1RBTVBDUl9UQU1QRlJFUSAqLwogCi0jaWYgZGVmaW5lZCAoUlRDX1RBTVBDUl9UQU1QMUUpCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19UQU1QRVJfQUNUSVZFTEVWRUwgIFRBTVBFUiBBQ1RJVkUgTEVWRUwKICAgKiBAewogICAqLworI2lmIGRlZmluZWQgKFJUQ19UQU1QQ1JfVEFNUDFFKQogI2RlZmluZSBMTF9SVENfVEFNUEVSX0FDVElWRUxFVkVMX1RBTVAxICAgIFJUQ19UQU1QQ1JfVEFNUDFUUkcgLyohPCBSVENfVEFNUDEgaW5wdXQgZmFsbGluZyBlZGdlIChpZiBUQU1QRkxUID0gMDApIG9yIHN0YXlpbmcgaGlnaCAoaWYgVEFNUEZMVCAhPSAwMCkgdHJpZ2dlcnMgYSB0YW1wZXIgZGV0ZWN0aW9uIGV2ZW50Ki8KICNlbmRpZiAvKiBSVENfVEFNUENSX1RBTVAxRSAqLwogI2lmIGRlZmluZWQgKFJUQ19UQU1QQ1JfVEFNUDJFKQpAQCAtNjcwLDEwICs2NzAsMTAgQEAKICAgKiBAfQogICAqLwogCi0jaWYgZGVmaW5lZChUQU1QX0FUQ1IxX1RBTVAxQU0pCiAvKiogQGRlZmdyb3VwIFJUQ19MTF9FQ19BQ1RJVkVfTU9ERSAgIEFDVElWRSBUQU1QRVIgTU9ERQogICAqIEB7CiAgICovCisjaWYgZGVmaW5lZChUQU1QX0FUQ1IxX1RBTVAxQU0pCiAjZGVmaW5lIExMX1JUQ19UQU1QRVJfQVRBTVBfVEFNUDFBTSAgICAgICAgICAgICAgIFRBTVBfQVRDUjFfVEFNUDFBTSAvKiE8IHRhbXBlciAxIGlzIGFjdGl2ZSAqLwogI2VuZGlmIC8qIFRBTVBfQVRDUjFfVEFNUDFBTSAqLwogI2lmIGRlZmluZWQoVEFNUF9BVENSMV9UQU1QMkFNKQpAQCAtNzAzLDEwICs3MDMsMTAgQEAKICAgKi8KICNlbmRpZiAvKiBUQU1QX0FUQ1IxX0FUQ0tTRUwgKi8KIAotI2lmIGRlZmluZWQoVEFNUF9BVENSMV9UQU1QMUFNKQogLyoqIEBkZWZncm91cCBSVENfTExfRUNfQUNUSVZFX09VVFBVVF9TRUxFQ1RJT04gICBBQ1RJVkUgVEFNUEVSIE9VVFBVVCBTRUxFQ1RJT04KICAgKiBAewogICAqLworI2lmIGRlZmluZWQoVEFNUF9BVENSMV9UQU1QMUFNKQogI2RlZmluZSBMTF9SVENfVEFNUEVSX0FUQU1QMUlOX0FUQU1QMU9VVCAgKDBVTCA8PCBUQU1QX0FUQ1IyX0FUT1NFTDFfUG9zKQogI2RlZmluZSBMTF9SVENfVEFNUEVSX0FUQU1QMUlOX0FUQU1QMk9VVCAgKDFVTCA8PCBUQU1QX0FUQ1IyX0FUT1NFTDFfUG9zKQogI2RlZmluZSBMTF9SVENfVEFNUEVSX0FUQU1QMUlOX0FUQU1QM09VVCAgKDJVTCA8PCBUQU1QX0FUQ1IyX0FUT1NFTDFfUG9zKQpAQCAtMTYwMSw3ICsxNjAxLDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19USU1FX0NvbmZpZyhSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgRm9ybWF0MTJfMjQsIHVpbnQzMl90IEhvdXJzLCB1aW50MzJfdCBNaW51dGVzLCB1aW50MzJfdCBTZWNvbmRzKQogewotICByZWdpc3RlciB1aW50MzJfdCB0ZW1wOworICB1aW50MzJfdCB0ZW1wOwogCiAgIHRlbXAgPSBGb3JtYXQxMl8yNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXAogICAgICAgICAgKCgoSG91cnMgJiAweEYwVSkgPDwgKFJUQ19UUl9IVF9Qb3MgLSA0VSkpIHwgKChIb3VycyAmIDB4MEZVKSA8PCBSVENfVFJfSFVfUG9zKSkgICAgIHwgXApAQCAtMTYyOSw3ICsxNjI5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfVElNRV9HZXQoUlRDX1R5cGVEZWYgKlJUQ3gpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRlbXA7CisgIHVpbnQzMl90IHRlbXA7CiAKICAgdGVtcCA9IFJFQURfQklUKFJUQ3gtPlRSLCAoUlRDX1RSX0hUIHwgUlRDX1RSX0hVIHwgUlRDX1RSX01OVCB8IFJUQ19UUl9NTlUgfCBSVENfVFJfU1QgfCBSVENfVFJfU1UpKTsKICAgcmV0dXJuICh1aW50MzJfdCkoKCgoKCh0ZW1wICYgUlRDX1RSX0hUKSA+PiBSVENfVFJfSFRfUG9zKSA8PCA0VSkgfCAoKHRlbXAgJiBSVENfVFJfSFUpID4+IFJUQ19UUl9IVV9Qb3MpKSA8PCBSVENfT0ZGU0VUX0hPVVIpICAgICAgIHwgIFwKQEAgLTE5MzEsNyArMTkzMSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfREFURV9Db25maWcoUlRDX1R5cGVEZWYgKlJUQ3gsIHVpbnQzMl90IFdlZWtEYXksIHVpbnQzMl90IERheSwgdWludDMyX3QgTW9udGgsIHVpbnQzMl90IFllYXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRlbXA7CisgIHVpbnQzMl90IHRlbXA7CiAKICAgdGVtcCA9IChXZWVrRGF5IDw8IFJUQ19EUl9XRFVfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBcCiAgICAgICAgICAoKChZZWFyICYgMHhGMFUpIDw8IChSVENfRFJfWVRfUG9zIC0gNFUpKSB8ICgoWWVhciAmIDB4MEZVKSA8PCBSVENfRFJfWVVfUG9zKSkgICB8IFwKQEAgLTE5NTksNyArMTk1OSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0RBVEVfR2V0KFJUQ19UeXBlRGVmICpSVEN4KQogewotICByZWdpc3RlciB1aW50MzJfdCB0ZW1wOworICB1aW50MzJfdCB0ZW1wOwogCiAgIHRlbXAgPSBSRUFEX0JJVChSVEN4LT5EUiwgKFJUQ19EUl9XRFUgfCBSVENfRFJfTVQgfCBSVENfRFJfTVUgfCBSVENfRFJfRFQgfCBSVENfRFJfRFUgfCBSVENfRFJfWVQgfCBSVENfRFJfWVUpKTsKICAgcmV0dXJuICh1aW50MzJfdCkoKCgodGVtcCAmIFJUQ19EUl9XRFUpID4+IFJUQ19EUl9XRFVfUG9zKSA8PCBSVENfT0ZGU0VUX1dFRUtEQVkpIHwgXApAQCAtMjI1OSw3ICsyMjU5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1JUQ19BTE1BX0NvbmZpZ1RpbWUoUlRDX1R5cGVEZWYgKlJUQ3gsIHVpbnQzMl90IEZvcm1hdDEyXzI0LCB1aW50MzJfdCBIb3VycywgdWludDMyX3QgTWludXRlcywgdWludDMyX3QgU2Vjb25kcykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdGVtcDsKKyAgdWludDMyX3QgdGVtcDsKIAogICB0ZW1wID0gRm9ybWF0MTJfMjQgfCAoKChIb3VycyAmIDB4RjBVKSA8PCAoUlRDX0FMUk1BUl9IVF9Qb3MgLSA0VSkpIHwgKChIb3VycyAmIDB4MEZVKSA8PCBSVENfQUxSTUFSX0hVX1BvcykpICAgIHwgXAogICAgICAgICAgKCgoTWludXRlcyAmIDB4RjBVKSA8PCAoUlRDX0FMUk1BUl9NTlRfUG9zIC0gNFUpKSB8ICgoTWludXRlcyAmIDB4MEZVKSA8PCBSVENfQUxSTUFSX01OVV9Qb3MpKSB8IFwKQEAgLTI2MjUsNyArMjYyNSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9SVENfQUxNQl9Db25maWdUaW1lKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBGb3JtYXQxMl8yNCwgdWludDMyX3QgSG91cnMsIHVpbnQzMl90IE1pbnV0ZXMsIHVpbnQzMl90IFNlY29uZHMpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRlbXA7CisgIHVpbnQzMl90IHRlbXA7CiAKICAgdGVtcCA9IEZvcm1hdDEyXzI0IHwgKCgoSG91cnMgJiAweEYwVSkgPDwgKFJUQ19BTFJNQlJfSFRfUG9zIC0gNFUpKSB8ICgoSG91cnMgJiAweDBGVSkgPDwgUlRDX0FMUk1CUl9IVV9Qb3MpKSAgICB8IFwKICAgICAgICAgICgoKE1pbnV0ZXMgJiAweEYwVSkgPDwgKFJUQ19BTFJNQlJfTU5UX1BvcyAtIDRVKSkgfCAoKE1pbnV0ZXMgJiAweDBGVSkgPDwgUlRDX0FMUk1CUl9NTlVfUG9zKSkgfCBcCkBAIC0zNzE2LDcgKzM3MTYsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0JBS19TZXRSZWdpc3RlcihSVENfVHlwZURlZiAqUlRDeCwgdWludDMyX3QgQmFja3VwUmVnaXN0ZXIsIHVpbnQzMl90IERhdGEpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHRtcDsKKyAgdWludDMyX3QgdG1wOwogCiAgIHRtcCA9ICh1aW50MzJfdCkoJihSVEN4LT5CS1AwUikpOwogICB0bXAgKz0gKEJhY2t1cFJlZ2lzdGVyICogNFUpOwpAQCAtMzc2Niw3ICszNzY2LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9SVENfQkFLX0dldFJlZ2lzdGVyKFJUQ19UeXBlRGVmICpSVEN4LCB1aW50MzJfdCBCYWNrdXBSZWdpc3RlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdG1wOworICB1aW50MzJfdCB0bXA7CiAKICAgdG1wID0gKHVpbnQzMl90KSgmKFJUQ3gtPkJLUDBSKSk7CiAgIHRtcCArPSAoQmFja3VwUmVnaXN0ZXIgKiA0VSk7CkBAIC0zODE5LDcgKzM4MTksNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfUlRDX0JLUF9TZXRSZWdpc3RlcihUQU1QX1R5cGVEZWYgKlRBTVB4LCB1aW50MzJfdCBCYWNrdXBSZWdpc3RlciwgdWludDMyX3QgRGF0YSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdG1wID0gMFU7CisgIHVpbnQzMl90IHRtcCA9IDBVOwogCiAgIHRtcCA9ICh1aW50MzJfdCkoJihUQU1QeC0+QktQMFIpKTsKICAgdG1wICs9IChCYWNrdXBSZWdpc3RlciAqIDRVKTsKQEAgLTM4NjksNyArMzg2OSw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfUlRDX0JLUF9HZXRSZWdpc3RlcihUQU1QX1R5cGVEZWYgKlRBTVB4LCB1aW50MzJfdCBCYWNrdXBSZWdpc3RlcikKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdG1wID0gMFU7CisgIHVpbnQzMl90IHRtcCA9IDBVOwogCiAgIHRtcCA9ICh1aW50MzJfdCkoJihUQU1QeC0+QktQMFIpKTsKICAgdG1wICs9IChCYWNrdXBSZWdpc3RlciAqIDRVKTsKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfbGxfc2RtbWMuaCBiL0luYy9zdG0zMmg3eHhfbGxfc2RtbWMuaAppbmRleCBlZmE2YjBjLi44YjkxYzZjIDEwMDY0NAotLS0gYS9JbmMvc3RtMzJoN3h4X2xsX3NkbW1jLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9sbF9zZG1tYy5oCkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogdWludDMyX3QgU0RNTUNfQ21kU0RFcmFzZVN0YXJ0QWRkKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDMyX3QgU3RhcnRBZGQpOwogdWludDMyX3QgU0RNTUNfQ21kRXJhc2VFbmRBZGQoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50MzJfdCBFbmRBZGQpOwogdWludDMyX3QgU0RNTUNfQ21kU0RFcmFzZUVuZEFkZChTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQzMl90IEVuZEFkZCk7Ci11aW50MzJfdCBTRE1NQ19DbWRFcmFzZShTRE1NQ19UeXBlRGVmICpTRE1NQ3gpOwordWludDMyX3QgU0RNTUNfQ21kRXJhc2UoU0RNTUNfVHlwZURlZiAqU0RNTUN4LCB1aW50MzJfdCBFcmFzZVR5cGUpOwogdWludDMyX3QgU0RNTUNfQ21kU3RvcFRyYW5zZmVyKFNETU1DX1R5cGVEZWYgKlNETU1DeCk7CiB1aW50MzJfdCBTRE1NQ19DbWRTZWxEZXNlbChTRE1NQ19UeXBlRGVmICpTRE1NQ3gsIHVpbnQ2NF90IEFkZHIpOwogdWludDMyX3QgU0RNTUNfQ21kR29JZGxlU3RhdGUoU0RNTUNfVHlwZURlZiAqU0RNTUN4KTsKQEAgLTEwNzQsNiArMTA3NCw3IEBACiAgICogQH0KICAgKi8KIAorCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9sbF9zcGkuaCBiL0luYy9zdG0zMmg3eHhfbGxfc3BpLmgKaW5kZXggZjA1MGIxNy4uZTYxMWI1OCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9sbF9zcGkuaAorKysgYi9JbmMvc3RtMzJoN3h4X2xsX3NwaS5oCkBAIC0xMjg1LDggKzEyODUsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1NQSV9HZXRUcmFuc2ZlckRpcmVjdGlvbihTUElfVHlwZURlZiAqU1BJeCkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgSGRkaXIgPSBSRUFEX0JJVChTUEl4LT5DUjEsIFNQSV9DUjFfSERESVIpOwotICByZWdpc3RlciB1aW50MzJfdCBDb21tID0gUkVBRF9CSVQoU1BJeC0+Q0ZHMiwgU1BJX0NGRzJfQ09NTSk7CisgIHVpbnQzMl90IEhkZGlyID0gUkVBRF9CSVQoU1BJeC0+Q1IxLCBTUElfQ1IxX0hERElSKTsKKyAgdWludDMyX3QgQ29tbSA9IFJFQURfQklUKFNQSXgtPkNGRzIsIFNQSV9DRkcyX0NPTU0pOwogICByZXR1cm4gKEhkZGlyIHwgQ29tbSk7CiB9CiAKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfbGxfc3lzdGVtLmggYi9JbmMvc3RtMzJoN3h4X2xsX3N5c3RlbS5oCmluZGV4IGNkODA3ODguLmRmM2ZlM2IgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfc3lzdGVtLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9sbF9zeXN0ZW0uaApAQCAtMTA1LDYgKzEwNSw5IEBACiAjZGVmaW5lIExMX1NZU0NGR19JMkNfRkFTVE1PREVQTFVTX0kyQzIgICAgICAgIFNZU0NGR19QTUNSX0kyQzJfRk1QICAgICAgIC8qITwgRW5hYmxlIEZhc3QgTW9kZSBQbHVzIGZvciBJMkMyICAgICAgKi8KICNkZWZpbmUgTExfU1lTQ0ZHX0kyQ19GQVNUTU9ERVBMVVNfSTJDMyAgICAgICAgU1lTQ0ZHX1BNQ1JfSTJDM19GTVAgICAgICAgLyohPCBFbmFibGUgRmFzdCBNb2RlIFBsdXMgZm9yIEkyQzMgICAgICAqLwogI2RlZmluZSBMTF9TWVNDRkdfSTJDX0ZBU1RNT0RFUExVU19JMkM0ICAgICAgICBTWVNDRkdfUE1DUl9JMkM0X0ZNUCAgICAgICAvKiE8IEVuYWJsZSBGYXN0IE1vZGUgUGx1cyBmb3IgSTJDNCAgICAgICovCisjaWYgZGVmaW5lZChJMkM1KQorI2RlZmluZSBMTF9TWVNDRkdfSTJDX0ZBU1RNT0RFUExVU19JMkM1ICAgICAgICBTWVNDRkdfUE1DUl9JMkM1X0ZNUCAgICAgICAvKiE8IEVuYWJsZSBGYXN0IE1vZGUgUGx1cyBmb3IgSTJDNSAgICAgICovCisjZW5kaWYgLypJMkM1Ki8KICNkZWZpbmUgTExfU1lTQ0ZHX0kyQ19GQVNUTU9ERVBMVVNfUEI2ICAgICAgICAgU1lTQ0ZHX1BNQ1JfSTJDX1BCNl9GTVAgICAgLyohPCBFbmFibGUgRmFzdCBNb2RlIFBsdXMgb24gUEI2ICAgICAgICAqLwogI2RlZmluZSBMTF9TWVNDRkdfSTJDX0ZBU1RNT0RFUExVU19QQjcgICAgICAgICBTWVNDRkdfUE1DUl9JMkNfUEI3X0ZNUCAgICAvKiE8IEVuYWJsZSBGYXN0IE1vZGUgUGx1cyBvbiBQQjcgICAgICAgICovCiAjZGVmaW5lIExMX1NZU0NGR19JMkNfRkFTVE1PREVQTFVTX1BCOCAgICAgICAgIFNZU0NGR19QTUNSX0kyQ19QQjhfRk1QICAgIC8qITwgRW5hYmxlIEZhc3QgTW9kZSBQbHVzIG9uIFBCOCAgICAgICAgKi8KQEAgLTExNiw3ICsxMTksOSBAQAogLyoqIEBkZWZncm91cCBTWVNURU1fTExfRUNfQU5BTE9HX1NXSVRDSCBBbmFsb2cgU3dpdGNoIGNvbnRyb2wKICogQHsKICovCisjaWYgZGVmaW5lZChTWVNDRkdfUE1DUl9CT09TVEVOKQogI2RlZmluZSBMTF9TWVNDRkdfQU5BTE9HX1NXSVRDSF9CT09TVEVOICAgICAgICAgICBTWVNDRkdfUE1DUl9CT09TVEVOICAgICAgICAgICAgICAgLyohPCBJL08gYW5hbG9nIHN3aXRjaCB2b2x0YWdlIGJvb3N0ZXIgZW5hYmxlICovCisjZW5kaWYgLypTWVNDRkdfUE1DUl9CT09TVEVOKi8KICNkZWZpbmUgTExfU1lTQ0ZHX0FOQUxPR19TV0lUQ0hfUEEwICAgICAgICAgICAgICAgU1lTQ0ZHX1BNQ1JfUEEwU08gICAgICAgICAgICAgICAgIC8qITwgUEEwIFN3aXRjaCBPcGVuICovCiAjZGVmaW5lIExMX1NZU0NGR19BTkFMT0dfU1dJVENIX1BBMSAgICAgICAgICAgICAgIFNZU0NGR19QTUNSX1BBMVNPICAgICAgICAgICAgICAgICAvKiE8IFBBMSBTd2l0Y2ggT3BlbiAqLwogI2RlZmluZSBMTF9TWVNDRkdfQU5BTE9HX1NXSVRDSF9QQzIgICAgICAgICAgICAgICBTWVNDRkdfUE1DUl9QQzJTTyAgICAgICAgICAgICAgICAgLyohPCBQQzIgU3dpdGNoIE9wZW4gKi8KQEAgLTE0Nyw3ICsxNTIsOSBAQAogI2RlZmluZSBMTF9TWVNDRkdfRVhUSV9QT1JURiAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgLyohPCBFWFRJIFBPUlQgRiAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIExMX1NZU0NGR19FWFRJX1BPUlRHICAgICAgICAgICAgICAgNlUgICAgICAgICAgICAgICAvKiE8IEVYVEkgUE9SVCBHICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTExfU1lTQ0ZHX0VYVElfUE9SVEggICAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgIC8qITwgRVhUSSBQT1JUIEggICAgICAgICAgICAgICAgICAgICAgICAqLworI2lmIGRlZmluZWQoR1BJT0kpCiAjZGVmaW5lIExMX1NZU0NGR19FWFRJX1BPUlRJICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAvKiE8IEVYVEkgUE9SVCBJICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNlbmRpZiAvKkdQSU9JKi8KICNkZWZpbmUgTExfU1lTQ0ZHX0VYVElfUE9SVEogICAgICAgICAgICAgICA5VSAgICAgICAgICAgICAgIC8qITwgRVhUSSBQT1JUIEogICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBMTF9TWVNDRkdfRVhUSV9QT1JUSyAgICAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgLyohPCBFWFRJIFBPUlQgayAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioKQEAgLTE5NSw4ICsyMDIsMTAgQEAKICNkZWZpbmUgTExfU1lTQ0ZHX1RJTUJSRUFLX1NSQU0yX0RCTF9FQ0MgICBTWVNDRkdfQ0ZHUl9TUkFNMkwgICAvKiE8IEVuYWJsZXMgYW5kIGxvY2tzIHRoZSBTUkFNMiBkb3VibGUgRUNDIGVycm9yIHNpZ25hbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBCcmVhayBJbnB1dCBvZiBUSU0xLzgvMTUvMTYvMTcgYW5kIEhSVElNICAgICAgICAqLwogCisjaWYgZGVmaW5lZChTWVNDRkdfQ0ZHUl9TUkFNM0wpCiAjZGVmaW5lIExMX1NZU0NGR19USU1CUkVBS19TUkFNM19EQkxfRUNDICAgU1lTQ0ZHX0NGR1JfU1JBTTNMICAgLyohPCBFbmFibGVzIGFuZCBsb2NrcyB0aGUgU1JBTTMgZG91YmxlIEVDQyBlcnJvciBzaWduYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggQnJlYWsgSW5wdXQgb2YgVElNMS84LzE1LzE2LzE3IGFuZCBIUlRJTSAgICAgICAgKi8KKyNlbmRpZiAvKlNZU0NGR19DRkdSX1NSQU0zTCovCiAKICNkZWZpbmUgTExfU1lTQ0ZHX1RJTUJSRUFLX1NSQU00X0RCTF9FQ0MgICBTWVNDRkdfQ0ZHUl9TUkFNNEwgICAvKiE8IEVuYWJsZXMgYW5kIGxvY2tzIHRoZSBTUkFNNCBkb3VibGUgRUNDIGVycm9yIHNpZ25hbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBCcmVhayBJbnB1dCBvZiBUSU0xLzgvMTUvMTYvMTcgYW5kIEhSVElNICAgICAgICAqLwpAQCAtMjYwLDE5ICsyNjksNDUgQEAKIC8qKgogICAqIEB9CiAgICovCi0jaWZkZWYgU1lTQ0ZHX1BLR1JfUEtHCisjaWZkZWYgU1lTQ0ZHX1VSMTdfVENNX0FYSV9DRkcKIC8qKiBAZGVmZ3JvdXAgU1lTVEVNX0xMX1BBQ0tBR0UgU1lTQ0ZHIGRldmljZSBwYWNrYWdlCiAgICogQHsKICAgKi8KKyNkZWZpbmUgTExfU1lTQ0ZHX0lUQ01fQVhJXzY0S0JfMzIwS0IgICAgIDBVCisjZGVmaW5lIExMX1NZU0NGR19JVENNX0FYSV8xMjhLQl8yNTZLQiAgICAxVQorI2RlZmluZSBMTF9TWVNDRkdfSVRDTV9BWElfMTkyS0JfMTkyS0IgICAgMlUKKyNkZWZpbmUgTExfU1lTQ0ZHX0lUQ01fQVhJXzI1NktCXzEyOEtCICAgIDNVCisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qICNpZmRlZiBTWVNDRkdfVVIxN19UQ01fQVhJX0NGRyAqLworI2lmIGRlZmluZWQoU1lTQ0ZHX1BLR1JfUEtHKQorLyoqIEBkZWZncm91cCBTWVNURU1fTExfUEFDS0FHRSBTWVNDRkcgZGV2aWNlIHBhY2thZ2UKKyAgKiBAeworICAqLworI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKQogI2RlZmluZSBMTF9TWVNDRkdfTFFGUDEwMF9QQUNLQUdFICAgICAgICAgICAgIDBVCiAjZGVmaW5lIExMX1NZU0NGR19UUUZQMTQ0X1BBQ0tBR0UgICAgICAgICAgICAgMlUKICNkZWZpbmUgTExfU1lTQ0ZHX1RRRlAxNzZfVUZCR0ExNzZfUEFDS0FHRSAgICA1VQogI2RlZmluZSBMTF9TWVNDRkdfTFFGUDIwOF9URkJHQTI0MF9QQUNLQUdFICAgIDhVCisjZWxpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODNVTCkKKyNkZWZpbmUgTExfU1lTQ0ZHX1ZGUUZQTjY4X0lORFVTX1BBQ0tBR0UgICAgICAgMFUKKyNkZWZpbmUgTExfU1lTQ0ZHX1RGQkdBMTAwX0xRRlAxMDBfUEFDS0FHRSAgICAxVQorI2RlZmluZSBMTF9TWVNDRkdfTFFGUDEwMF9JTkRVU19QQUNLQUdFICAgICAgICAyVQorI2RlZmluZSBMTF9TWVNDRkdfVEZCR0ExMDBfSU5EVVNfUEFDS0FHRSAgICAgICAzVQorI2RlZmluZSBMTF9TWVNDRkdfV0xDU1AxMTVfSU5EVVNfUEFDS0FHRSAgICAgICA0VQorI2RlZmluZSBMTF9TWVNDRkdfTFFGUDE0NF9QQUNLQUdFICAgICAgICAgICAgIDVVCisjZGVmaW5lIExMX1NZU0NGR19VRkJHQTE0NF9QQUNLQUdFICAgICAgICAgICAgNlUKKyNkZWZpbmUgTExfU1lTQ0ZHX0xRRlAxNDRfSU5EVVNfUEFDS0FHRSAgICAgICAgN1UKKyNkZWZpbmUgTExfU1lTQ0ZHX1VGQkdBMTY5X0lORFVTX1BBQ0tBR0UgICAgICAgOFUKKyNkZWZpbmUgTExfU1lTQ0ZHX1VGQkdBMTc2UExVUzI1X0lORFVTX1BBQ0tBR0UgOVUKKyNkZWZpbmUgTExfU1lTQ0ZHX0xRRlAxNzZfSU5EVVNfUEFDS0FHRSAgICAgICAgMTBVCisjZW5kaWYgLyogU1RNMzJIN19ERVZfSUQgPT0gMHg0NTBVTCAqLwogLyoqCiAgICogQH0KICAgKi8KICNlbmRpZiAvKiBTWVNDRkdfUEtHUl9QS0cgKi8KLQorICAKIC8qKiBAZGVmZ3JvdXAgU1lTVEVNX0xMX1NZU0NGR19CT1IgU1lTQ0ZHIEJyb3dub3V0IFJlc2V0IFRocmVzaG9sZCBMZXZlbAogICAqIEB7CiAgICovCkBAIC0zMTMsMTQgKzM0OCwyNiBAQAogI2RlZmluZSBMTF9EQkdNQ1VfQVBCMV9HUlAxX0kyQzFfU1RPUCAgICAgIERCR01DVV9BUEIxTEZaMV9EQkdfSTJDMSAgICAgLyohPCBJMkMxIFNNQlVTIHRpbWVvdXQgbW9kZSBzdG9wcGVkIHdoZW4gQ29yZSBpcyBoYWx0ZWQgKi8KICNkZWZpbmUgTExfREJHTUNVX0FQQjFfR1JQMV9JMkMyX1NUT1AgICAgICBEQkdNQ1VfQVBCMUxGWjFfREJHX0kyQzIgICAgIC8qITwgSTJDMiBTTUJVUyB0aW1lb3V0IG1vZGUgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkICovCiAjZGVmaW5lIExMX0RCR01DVV9BUEIxX0dSUDFfSTJDM19TVE9QICAgICAgREJHTUNVX0FQQjFMRloxX0RCR19JMkMzICAgICAvKiE8IEkyQzMgU01CVVMgdGltZW91dCBtb2RlIHN0b3BwZWQgd2hlbiBDb3JlIGlzIGhhbHRlZCAqLworI2lmIGRlZmluZWQoSTJDNSkKKyNkZWZpbmUgTExfREJHTUNVX0FQQjFfR1JQMV9JMkM1X1NUT1AgICAgICBEQkdNQ1VfQVBCMUxGWjFfREJHX0kyQzUgICAgIC8qITwgSTJDNSBTTUJVUyB0aW1lb3V0IG1vZGUgc3RvcHBlZCB3aGVuIENvcmUgaXMgaGFsdGVkICovCisjZW5kaWYgLypJMkM1Ki8KIC8qKgogICAqIEB9CiAgICovCiAKKwogLyoqIEBkZWZncm91cCBTWVNURU1fTExfRUNfQVBCMV9HUlAyX1NUT1BfSVAgREJHTUNVIEFQQjEgR1JQMiBTVE9QIElQCiAgICogQHsKICAgKi8KKyNpZiBkZWZpbmVkKERCR01DVV9BUEIxSEZaMV9EQkdfRkRDQU4pCiAjZGVmaW5lIExMX0RCR01DVV9BUEIxX0dSUDJfRkRDQU5fU1RPUCAgICBEQkdNQ1VfQVBCMUhGWjFfREJHX0ZEQ0FOICAgIC8qITwgRkRDQU4gaXMgZnJvemVuIHdoaWxlIHRoZSBjb3JlIGlzIGluIGRlYnVnIG1vZGUgKi8KKyNlbmRpZiAvKkRCR01DVV9BUEIxSEZaMV9EQkdfRkRDQU4qLworI2lmIGRlZmluZWQoVElNMjMpCisjZGVmaW5lIExMX0RCR01DVV9BUEIxX0dSUDJfVElNMjNfU1RPUCAgICBEQkdNQ1VfQVBCMUhGWjFfREJHX1RJTTIzICAgIC8qITwgVElNMjMgaXMgZnJvemVuIHdoaWxlIHRoZSBjb3JlIGlzIGluIGRlYnVnIG1vZGUgKi8KKyNlbmRpZiAvKlRJTTIzKi8KKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBMTF9EQkdNQ1VfQVBCMV9HUlAyX1RJTTI0X1NUT1AgICAgREJHTUNVX0FQQjFIRloxX0RCR19USU0yNCAgICAvKiE8IFRJTTI0IGlzIGZyb3plbiB3aGlsZSB0aGUgY29yZSBpcyBpbiBkZWJ1ZyBtb2RlICovCisjZW5kaWYgLypUSU0yNCovCiAvKioKICAgKiBAfQogICAqLwpAQCAtMzMzLDcgKzM4MCw5IEBACiAjZGVmaW5lIExMX0RCR01DVV9BUEIyX0dSUDFfVElNMTVfU1RPUCAgICAgREJHTUNVX0FQQjJGWjFfREJHX1RJTTE1ICAgLyohPCBUSU0xNSBjb3VudGVyIHN0b3BwZWQgd2hlbiBjb3JlIGlzIGhhbHRlZCAqLwogI2RlZmluZSBMTF9EQkdNQ1VfQVBCMl9HUlAxX1RJTTE2X1NUT1AgICAgIERCR01DVV9BUEIyRloxX0RCR19USU0xNiAgIC8qITwgVElNMTYgY291bnRlciBzdG9wcGVkIHdoZW4gY29yZSBpcyBoYWx0ZWQgKi8KICNkZWZpbmUgTExfREJHTUNVX0FQQjJfR1JQMV9USU0xN19TVE9QICAgICBEQkdNQ1VfQVBCMkZaMV9EQkdfVElNMTcgICAvKiE8IFRJTTE3IGNvdW50ZXIgc3RvcHBlZCB3aGVuIGNvcmUgaXMgaGFsdGVkICovCisjaWYgZGVmaW5lZChIUlRJTTEpCiAjZGVmaW5lIExMX0RCR01DVV9BUEIyX0dSUDFfSFJUSU1fU1RPUCAgICAgREJHTUNVX0FQQjJGWjFfREJHX0hSVElNICAgLyohPCBIUlRJTSBjb3VudGVyIHN0b3BwZWQgd2hlbiBjb3JlIGlzIGhhbHRlZCAqLworI2VuZGlmIC8qSFJUSU0xKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC00OTMsNiArNTQyLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfSTJDX0ZBU1RNT0RFUExVU19JMkMyICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19JMkNfRkFTVE1PREVQTFVTX0kyQzMKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfSTJDX0ZBU1RNT0RFUExVU19JMkM0KCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0kyQ19GQVNUTU9ERVBMVVNfSTJDNSgqKQogICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKQEAgLTUxNSw2ICs1NjUsOCBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19JMkNfRkFTVE1PREVQTFVTX0kyQzIgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0kyQ19GQVNUTU9ERVBMVVNfSTJDMwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19JMkNfRkFTVE1PREVQTFVTX0kyQzQKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfSTJDX0ZBU1RNT0RFUExVU19JMkM1ICgqKQorICAqCiAgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KQEAgLTUzOCw3ICs1OTAsNyBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19FWFRJX1BPUlRGCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0VYVElfUE9SVEcKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfRVhUSV9QT1JUSAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19FWFRJX1BPUlRJCisgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0VYVElfUE9SVEkgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0VYVElfUE9SVEoKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfRVhUSV9QT1JUSwogICAqCkBAIC01OTksNyArNjUxLDcgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfRVhUSV9QT1JURgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19FWFRJX1BPUlRHCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0VYVElfUE9SVEgKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfRVhUSV9QT1JUSQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19FWFRJX1BPUlRJICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19FWFRJX1BPUlRKCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0VYVElfUE9SVEsKICAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwpAQCAtNjMwLDcgKzY4Miw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RJTUJSRUFLX0RUQ01fREJMX0VDQwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19USU1CUkVBS19TUkFNMV9EQkxfRUNDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RJTUJSRUFLX1NSQU0yX0RCTF9FQ0MKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfVElNQlJFQUtfU1JBTTNfREJMX0VDQworICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19USU1CUkVBS19TUkFNM19EQkxfRUNDICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19USU1CUkVBS19TUkFNNF9EQkxfRUNDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RJTUJSRUFLX0JLUkFNX0RCTF9FQ0MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfVElNQlJFQUtfQ003X0xPQ0tVUApAQCAtNjM4LDYgKzY5MCw3IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RJTUJSRUFLX1BWRAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19USU1CUkVBS19DTTRfTE9DS1VQIChhdmFpbGFibGUgZm9yIGR1YWwgY29yZSBsaW5lcyBvbmx5KQogICAqIEByZXR2YWwgTm9uZQorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9TWVNDRkdfU2V0VElNQnJlYWtJbnB1dHModWludDMyX3QgQnJlYWspCiB7CkBAIC02NDUsMTAgKzY5OCwxNCBAQAogICBNT0RJRllfUkVHKFNZU0NGRy0+Q0ZHUiwgU1lTQ0ZHX0NGR1JfQVhJU1JBTUwgfCBTWVNDRkdfQ0ZHUl9JVENNTCAgfCBTWVNDRkdfQ0ZHUl9EVENNTCAgfCBTWVNDRkdfQ0ZHUl9TUkFNMUwgfCBTWVNDRkdfQ0ZHUl9TUkFNMkwgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfQ0ZHUl9TUkFNM0wgICB8IFNZU0NGR19DRkdSX1NSQU00TCB8IFNZU0NGR19DRkdSX0JLUkFNTCB8IFNZU0NGR19DRkdSX0NNN0wgICB8IFNZU0NGR19DRkdSX0ZMQVNITCB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNZU0NGR19DRkdSX1BWREwgICAgIHwgU1lTQ0ZHX0NGR1JfQ000TCwgQnJlYWspOwotI2VsaWYgZGVmaW5lZCAoU1lTQ0ZHX0NGR1JfQVhJU1JBTUwpCisjZWxpZiBkZWZpbmVkKFNZU0NGR19DRkdSX0FYSVNSQU1MKSAmJiBkZWZpbmVkKFNZU0NGR19DRkdSX1NSQU0zTCkKICAgTU9ESUZZX1JFRyhTWVNDRkctPkNGR1IsIFNZU0NGR19DRkdSX0FYSVNSQU1MIHwgU1lTQ0ZHX0NGR1JfSVRDTUwgIHwgU1lTQ0ZHX0NGR1JfRFRDTUwgIHwgU1lTQ0ZHX0NGR1JfU1JBTTFMIHwgU1lTQ0ZHX0NGR1JfU1JBTTJMIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lTQ0ZHX0NGR1JfU1JBTTNMICAgfCBTWVNDRkdfQ0ZHUl9TUkFNNEwgfCBTWVNDRkdfQ0ZHUl9CS1JBTUwgfCBTWVNDRkdfQ0ZHUl9DTTdMICAgfCBTWVNDRkdfQ0ZHUl9GTEFTSEwgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfQ0ZHUl9QVkRMLCBCcmVhayk7CisjZWxpZiBkZWZpbmVkKFNZU0NGR19DRkdSX0FYSVNSQU1MKQorICBNT0RJRllfUkVHKFNZU0NGRy0+Q0ZHUiwgU1lTQ0ZHX0NGR1JfQVhJU1JBTUwgfCBTWVNDRkdfQ0ZHUl9JVENNTCAgfCBTWVNDRkdfQ0ZHUl9EVENNTCAgfCBTWVNDRkdfQ0ZHUl9TUkFNMUwgfCBTWVNDRkdfQ0ZHUl9TUkFNMkwgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfQ0ZHUl9TUkFNNEwgICB8IFNZU0NGR19DRkdSX0JLUkFNTCB8IFNZU0NGR19DRkdSX0NNN0wgICB8IFNZU0NGR19DRkdSX0ZMQVNITCB8IFNZU0NGR19DRkdSX1BWREwsXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJlYWspOwogI2Vsc2UKICAgTU9ESUZZX1JFRyhTWVNDRkctPkNGR1IsIFNZU0NGR19DRkdSX0lUQ01MICB8IFNZU0NGR19DRkdSX0RUQ01MICB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lTQ0ZHX0NGR1JfQ003TCAgIHwgU1lTQ0ZHX0NGR1JfRkxBU0hMIHwgXApAQCAtNjc3LDEzICs3MzQsMTQgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfVElNQlJFQUtfRFRDTV9EQkxfRUNDCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RJTUJSRUFLX1NSQU0xX0RCTF9FQ0MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfVElNQlJFQUtfU1JBTTJfREJMX0VDQwotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19USU1CUkVBS19TUkFNM19EQkxfRUNDCisgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RJTUJSRUFLX1NSQU0zX0RCTF9FQ0MgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RJTUJSRUFLX1NSQU00X0RCTF9FQ0MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfVElNQlJFQUtfQktSQU1fREJMX0VDQwogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19USU1CUkVBS19DTTdfTE9DS1VQCiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RJTUJSRUFLX0ZMQVNIX0RCTF9FQ0MKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfVElNQlJFQUtfUFZECiAgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RJTUJSRUFLX0NNNF9MT0NLVVAgKGF2YWlsYWJsZSBmb3IgZHVhbCBjb3JlIGxpbmVzIG9ubHkpCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9TWVNDRkdfR2V0VElNQnJlYWtJbnB1dHModm9pZCkKIHsKQEAgLTY5MiwxMSArNzUwLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNZU0NGR19DRkdSX1NSQU0xTCAgIHwgU1lTQ0ZHX0NGR1JfU1JBTTJMIHwgU1lTQ0ZHX0NGR1JfU1JBTTNMIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfQ0ZHUl9TUkFNNEwgICB8IFNZU0NGR19DRkdSX0JLUkFNTCB8IFNZU0NGR19DRkdSX0NNN0wgICB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lTQ0ZHX0NGR1JfRkxBU0hMICAgfCBTWVNDRkdfQ0ZHUl9QVkRMICAgfCBTWVNDRkdfQ0ZHUl9DTTRMKSk7Ci0jZWxpZiBkZWZpbmVkIChTWVNDRkdfQ0ZHUl9BWElTUkFNTCkKKyNlbGlmIGRlZmluZWQgKFNZU0NGR19DRkdSX0FYSVNSQU1MKSAmJiBkZWZpbmVkKFNZU0NGR19DRkdSX1NSQU0zTCkKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoU1lTQ0ZHLT5DRkdSLCAgU1lTQ0ZHX0NGR1JfQVhJU1JBTUwgfCBTWVNDRkdfQ0ZHUl9JVENNTCAgfCBTWVNDRkdfQ0ZHUl9EVENNTCAgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNZU0NGR19DRkdSX1NSQU0xTCAgIHwgU1lTQ0ZHX0NGR1JfU1JBTTJMIHwgU1lTQ0ZHX0NGR1JfU1JBTTNMIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfQ0ZHUl9TUkFNNEwgICB8IFNZU0NGR19DRkdSX0JLUkFNTCB8IFNZU0NGR19DRkdSX0NNN0wgICB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lTQ0ZHX0NGR1JfRkxBU0hMICAgfCBTWVNDRkdfQ0ZHUl9QVkRMICkpOworI2VsaWYgZGVmaW5lZCAoU1lTQ0ZHX0NGR1JfQVhJU1JBTUwpCisgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFNZU0NGRy0+Q0ZHUiwgIFNZU0NGR19DRkdSX0FYSVNSQU1MIHwgU1lTQ0ZHX0NGR1JfSVRDTUwgIHwgU1lTQ0ZHX0NGR1JfRFRDTUwgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfQ0ZHUl9TUkFNMUwgICB8IFNZU0NGR19DRkdSX1NSQU0yTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1lTQ0ZHX0NGR1JfU1JBTTRMICAgfCBTWVNDRkdfQ0ZHUl9CS1JBTUwgfCBTWVNDRkdfQ0ZHUl9DTTdMICAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNZU0NGR19DRkdSX0ZMQVNITCAgIHwgU1lTQ0ZHX0NGR1JfUFZETCApKTsKICNlbHNlCiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFNZU0NGRy0+Q0ZHUiwgIFNZU0NGR19DRkdSX0lUQ01MICAgIHwgU1lTQ0ZHX0NGR1JfRFRDTUwgIHwgU1lTQ0ZHX0NGR1JfQ003TCAgIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWVNDRkdfQ0ZHUl9GTEFTSEwgICB8IFNZU0NGR19DRkdSX1BWREwgKSk7CkBAIC0xMDc0LDEwICsxMTM3LDI0IEBACiAgICogQGJyaWVmICBHZXQgdGhlIGRldmljZSBwYWNrYWdlCiAgICogQHJtdG9sbCBQS0dSICAgIFBLRyAgIExMX1NZU0NGR19HZXRQYWNrYWdlCiAgICogQHJldHZhbCBSZXR1cm5lZCB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19MUUZQMTAwX1BBQ0tBR0UKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfVFFGUDE0NF9QQUNLQUdFCi0gICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RRRlAxNzZfVUZCR0ExNzZfUEFDS0FHRQotICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19MUUZQMjA4X1RGQkdBMjQwX1BBQ0tBR0UKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfTFFGUDEwMF9QQUNLQUdFICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19UUUZQMTQ0X1BBQ0tBR0UgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RRRlAxNzZfVUZCR0ExNzZfUEFDS0FHRSAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfTFFGUDIwOF9URkJHQTI0MF9QQUNLQUdFICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19WRlFGUE42OF9JTkRVU19QQUNLQUdFICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19URkJHQTEwMF9MUUZQMTAwX1BBQ0tBR0UgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0xRRlAxMDBfSU5EVVNfUEFDS0FHRSAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1RGQkdBMTAwX0lORFVTX1BBQ0tBR0UgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19XTENTUDExNV9JTkRVU19QQUNLQUdFICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfTFFGUDE0NF9QQUNLQUdFICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfVUZCR0ExNDRfUEFDS0FHRSAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0xRRlAxNDRfSU5EVVNfUEFDS0FHRSAoKiopCisgICogICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX1VGQkdBMTY5X0lORFVTX1BBQ0tBR0UgKCoqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19VRkJHQTE3NlBMVVMyNV9JTkRVU19QQUNLQUdFICgqKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfTFFGUDE3Nl9JTkRVU19QQUNLQUdFICgqKikKKyAgKgorICAqICgqKSA6IEZvciBzdG0zMmg3NHh4eCBhbmQgc3RtMzJoNzV4eHggZmFtaWx5IGxpbmVzLgorICAqICgqKik6IEZvciBzdG0zMmg3Mnh4eCBhbmQgc3RtMzJoNzN4eHggZmFtaWx5IGxpbmVzLgogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1NZU0NGR19HZXRQYWNrYWdlKHZvaWQpCiB7CkBAIC0xMDk4LDYgKzExNzUsNyBAQAogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChTWVNDRkctPlVSMCwgU1lTQ0ZHX1VSMF9SRFApKTsKIH0KKyNpZmRlZiBTWVNDRkdfVVIwX0JLUwogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSBpZiB0aGUgRmxhc2ggbWVtb3J5IGJhbmsgYWRkcmVzc2VzIGFyZSBpbnZlcnRlZCBvciBub3QKICAgKiBAcm10b2xsIFVSMCAgIEJLUyAgIExMX1NZU0NGR19Jc0ZMYXNoQmFua0FkZHJlc3Nlc1N3YXBlZApAQCAtMTEwNyw2ICsxMTg1LDcgQEAKIHsKICAgcmV0dXJuICgoUkVBRF9CSVQoU1lTQ0ZHLT5VUjAsIFNZU0NGR19VUjBfQktTKSA9PSAwVSkgPyAxVUwgOiAwVUwpOwogfQorI2VuZGlmIC8qU1lTQ0ZHX1VSMF9CS1MqLwogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgQk9SIFRocmVzaG9sZCBSZXNldCBMZXZlbApAQCAtMTM3Miw2ICsxNDUxLDcgQEAKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoU1lTQ0ZHLT5VUjcsIFNZU0NGR19VUjdfU0FFTkRfQkFOSzEpKTsKIH0KIAorI2lmZGVmIFNZU0NGR19VUjhfTUVQQURfQkFOSzIKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGVzIGlmIHRoZSBmbGFzaCBwcm90ZWN0ZWQgYXJlYSAoQmFuayAyKSBpcyBlcmFzZWQgYnkgYSBtYXNzIGVyYXNlCiAgICogQHJtdG9sbCBVUjggICBNRVBBRF9CQU5LMiAgIExMX1NZU0NGR19Jc0ZsYXNoQjJQcm90ZWN0ZWRBcmVhRXJhc2FibGUKQEAgLTEzOTEsNyArMTQ3MSw5IEBACiB7CiAgIHJldHVybiAoKFJFQURfQklUKFNZU0NGRy0+VVI4LCBTWVNDRkdfVVI4X01FU0FEX0JBTksyKSA9PSBTWVNDRkdfVVI4X01FU0FEX0JBTksyKSA/IDFVTCA6IDBVTCk7CiB9CisjZW5kaWYgLypTWVNDRkdfVVI4X01FUEFEX0JBTksyKi8KIAorI2lmZGVmIFNZU0NGR19VUjlfV1JQTl9CQU5LMgogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZXMgaWYgdGhlIHNlY3RvciAwIG9mIHRoZSBGbGFzaCBtZW1vcnkgYmFuayAyIGlzIHdyaXRlIHByb3RlY3RlZAogICAqIEBybXRvbGwgVVI5ICAgV1JQTl9CQU5LMiAgICBMTF9TWVNDRkdfSXNGbGFzaEIyU2VjdG9yMFdyaXRlUHJvdGVjdGVkCkBAIC0xNDgxLDcgKzE1NjMsOSBAQAogewogICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChTWVNDRkctPlVSOSwgU1lTQ0ZHX1VSOV9QQUJFR19CQU5LMikpOwogfQorI2VuZGlmIC8qU1lTQ0ZHX1VSOV9XUlBOX0JBTksyKi8KIAorI2lmZGVmIFNZU0NGR19VUjEwX1BBRU5EX0JBTksyCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgcHJvdGVjdGVkIGFyZWEgZW5kIGFkZHJlc3MgZm9yIEZsYXNoIGJhbmsgMgogICAqIEBybXRvbGwgVVIxMCAgICBQQUVORF9CQU5LMiAgIExMX1NZU0NGR19HZXRGbGFzaEIyUHJvdGVjdGVkQXJlYUVuZEFkZHJlc3MKQEAgLTE1MDEsNyArMTU4NSw5IEBACiB7CiAgIHJldHVybiAodWludDMyX3QpKFJFQURfQklUKFNZU0NGRy0+VVIxMCwgU1lTQ0ZHX1VSMTBfU0FCRUdfQkFOSzIpKTsKIH0KKyNlbmRpZiAvKlNZU0NGR19VUjEwX1BBRU5EX0JBTksyKi8KIAorI2lmZGVmIFNZU0NGR19VUjExX1NBRU5EX0JBTksyCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgc2VjdXJlZCBhcmVhIGVuZCBhZGRyZXNzIGZvciBGbGFzaCBiYW5rIDIKICAgKiBAcm10b2xsIFVSMTEgICAgU0FFTkRfQkFOSzIgICBMTF9TWVNDRkdfR2V0Rmxhc2hCMlNlY3VyZWRBcmVhRW5kQWRkcmVzcwpAQCAtMTUxMSw2ICsxNTk3LDcgQEAKIHsKICAgcmV0dXJuICh1aW50MzJfdCkoUkVBRF9CSVQoU1lTQ0ZHLT5VUjExLCBTWVNDRkdfVVIxMV9TQUVORF9CQU5LMikpOwogfQorI2VuZGlmIC8qU1lTQ0ZHX1VSMTFfU0FFTkRfQkFOSzIqLwogCiAvKioKICAgKiBAYnJpZWYgIEdldCB0aGUgSW5kZXBlbmRlbnQgV2F0Y2hkb2cgMSBjb250cm9sIG1vZGUgKFNvZnR3YXJlIG9yIEhhcmR3YXJlKQpAQCAtMTY0Niw2ICsxNzMzLDM1IEBACiB7CiAgIHJldHVybiAoKFJFQURfQklUKFNZU0NGRy0+VVIxNywgU1lTQ0ZHX1VSMTdfSU9IU0xWKSA9PSBTWVNDRkdfVVIxN19JT0hTTFYpID8gMVVMIDogMFVMKTsKIH0KKworI2lmZGVmIFNZU0NGR19VUjE3X1RDTV9BWElfQ0ZHCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgc2l6ZSBvZiBJVENNLVJBTSBhbmQgQVhJLVNSQU0KKyAgKiBAcm10b2xsIFVSMTcgICAgVENNX0FYSV9DRkcgICAgTExfU1lTQ0ZHX0dldF9JVENNX0FYSV9SQU1fU2l6ZQorICAqIEByZXR2YWwgUmV0dXJuZWQgdmFsdWUgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19JVENNX0FYSV82NEtCXzMyMEtCCisgICogICAgICAgICAgIEBhcmcgQHJlZiBMTF9TWVNDRkdfSVRDTV9BWElfMTI4S0JfMjU2S0IKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIExMX1NZU0NGR19JVENNX0FYSV8xOTJLQl8xOTJLQgorICAqICAgICAgICAgICBAYXJnIEByZWYgTExfU1lTQ0ZHX0lUQ01fQVhJXzI1NktCXzEyOEtCCisgICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfU1lTQ0ZHX0dldF9JVENNX0FYSV9SQU1fU2l6ZSh2b2lkKQoreworICByZXR1cm4gKHVpbnQzMl90KShSRUFEX0JJVChTWVNDRkctPlVSMTcsIFNZU0NGR19VUjE3X1RDTV9BWElfQ0ZHKSk7Cit9CisjZW5kaWYgLypTWVNDRkdfVVIxN19UQ01fQVhJX0NGRyovCisKKyNpZmRlZiBTWVNDRkdfVVIxOF9DUFVfRlJFUV9CT09TVAorLyoqCisgICogQGJyaWVmICBJbmRpY2F0ZXMgaWYgdGhlIENQVSBtYXhpbXVtIGZyZXF1ZW5jeSBib29zdCBpcyBlbmFibGVkCisgICogQHJtdG9sbCBVUjE4ICAgIENQVV9GUkVRX0JPT1NUICAgTExfU1lTQ0ZHX0lzQ3B1RnJlcUJvb3N0RW5hYmxlZAorICAqIEByZXR2YWwgU3RhdGUgb2YgYml0ICgxIG9yIDApLgorICAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1NZU0NGR19Jc0NwdUZyZXFCb29zdEVuYWJsZWQodm9pZCkKK3sKKyAgcmV0dXJuICgoUkVBRF9CSVQoU1lTQ0ZHLT5VUjE4LCBTWVNDRkdfVVIxOF9DUFVfRlJFUV9CT09TVCkgPT0gU1lTQ0ZHX1VSMThfQ1BVX0ZSRVFfQk9PU1QpID8gMVVMIDogMFVMKTsKK30KKyNlbmRpZiAvKlNZU0NGR19VUjE4X0NQVV9GUkVRX0JPT1NUKi8KKwogI2VuZGlmIC8qU1lTQ0ZHX1VSMF9SRFAqLwogCiAvKioKQEAgLTE5NDMsNiArMjA1OSw3IEBACiAgICogICAgICAgICBEQkdNQ1VfQVBCMUxGWjEgICBJMkMxICAgICAgTExfREJHTUNVX0FQQjFfR1JQMV9GcmVlemVQZXJpcGhcbgogICAqICAgICAgICAgREJHTUNVX0FQQjFMRloxICAgSTJDMiAgICAgIExMX0RCR01DVV9BUEIxX0dSUDFfRnJlZXplUGVyaXBoXG4KICAgKiAgICAgICAgIERCR01DVV9BUEIxTEZaMSAgIEkyQzMgICAgICBMTF9EQkdNQ1VfQVBCMV9HUlAxX0ZyZWV6ZVBlcmlwaFxuCisgICogICAgICAgICBEQkdNQ1VfQVBCMUxGWjEgICBJMkM1ICAgICAgTExfREJHTUNVX0FQQjFfR1JQMV9GcmVlemVQZXJpcGhcbiAoKikKICAgKiBAcGFyYW0gIFBlcmlwaHMgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjFfR1JQMV9USU0yX1NUT1AKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCMV9HUlAxX1RJTTNfU1RPUApAQCAtMTk1Nyw2ICsyMDc0LDkgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCMV9HUlAxX0kyQzFfU1RPUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEIxX0dSUDFfSTJDMl9TVE9QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjFfR1JQMV9JMkMzX1NUT1AKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCMV9HUlAxX0kyQzVfU1RPUCAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQkdNQ1VfQVBCMV9HUlAxX0ZyZWV6ZVBlcmlwaCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtMTk3OSw2ICsyMDk5LDcgQEAKICAgKiAgICAgICAgIERCR01DVV9BUEIxTEZaMSAgIEkyQzEgICAgICBMTF9EQkdNQ1VfQVBCMV9HUlAxX0ZyZWV6ZVBlcmlwaFxuCiAgICogICAgICAgICBEQkdNQ1VfQVBCMUxGWjEgICBJMkMyICAgICAgTExfREJHTUNVX0FQQjFfR1JQMV9GcmVlemVQZXJpcGhcbgogICAqICAgICAgICAgREJHTUNVX0FQQjFMRloxICAgSTJDMyAgICAgIExMX0RCR01DVV9BUEIxX0dSUDFfRnJlZXplUGVyaXBoXG4KKyAgKiAgICAgICAgIERCR01DVV9BUEIxTEZaMSAgIEkyQzUgICAgICBMTF9EQkdNQ1VfQVBCMV9HUlAxX0ZyZWV6ZVBlcmlwaFxuCiAgICogQHBhcmFtICBQZXJpcGhzIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEIxX0dSUDFfVElNMl9TVE9QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjFfR1JQMV9USU0zX1NUT1AKQEAgLTE5OTMsNiArMjExNCw5IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjFfR1JQMV9JMkMxX1NUT1AKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCMV9HUlAxX0kyQzJfU1RPUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEIxX0dSUDFfSTJDM19TVE9QCisgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjFfR1JQMV9JMkM1X1NUT1AgKCopCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfREJHTUNVX0FQQjFfR1JQMV9VbkZyZWV6ZVBlcmlwaCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtMjAwMCw2ICsyMTI0LDcgQEAKICAgQ0xFQVJfQklUKERCR01DVS0+QVBCMUxGWjEsIFBlcmlwaHMpOwogfQogCisjaWZkZWYgREJHTUNVX0FQQjFIRloxX0RCR19GRENBTgogLyoqCiAgICogQGJyaWVmICBGcmVlemUgQVBCMSBncm91cDIgcGVyaXBoZXJhbHMKICAgKiBAcm10b2xsIERCR01DVV9BUEIxSEZaMSAgIEZEQ0FOICAgTExfREJHTUNVX0FQQjFfR1JQMl9GcmVlemVQZXJpcGhcbgpAQCAtMjAyMyw2ICsyMTQ4LDM3IEBACiB7CiAgIENMRUFSX0JJVChEQkdNQ1UtPkFQQjFIRloxLCBQZXJpcGhzKTsKIH0KKyNlbmRpZiAvKkRCR01DVV9BUEIxSEZaMV9EQkdfRkRDQU4qLworCisjaWYgZGVmaW5lZChUSU0yMykgfHwgZGVmaW5lZChUSU0yNCkKKy8qKgorICAqIEBicmllZiAgRnJlZXplIEFQQjEgZ3JvdXAyIHBlcmlwaGVyYWxzCisgICogQHJtdG9sbCBEQkdNQ1VfQVBCMUhGWjEgICBUSU0yMyAgIExMX0RCR01DVV9BUEIxX0dSUDJfRnJlZXplUGVyaXBoXG4KKyAgKiAgICAgICAgIERCR01DVV9BUEIxSEZaMSAgIFRJTTI0ICAgTExfREJHTUNVX0FQQjFfR1JQMl9GcmVlemVQZXJpcGhcbgorICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCMV9HUlAyX1RJTTIzX1NUT1AKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCMV9HUlAyX1RJTTI0X1NUT1AKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0RCR01DVV9BUEIxX0dSUDJfRnJlZXplUGVyaXBoKHVpbnQzMl90IFBlcmlwaHMpCit7CisgIFNFVF9CSVQoREJHTUNVLT5BUEIxSEZaMSwgUGVyaXBocyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgVW5mcmVlemUgQVBCMSBncm91cDIgcGVyaXBoZXJhbHMKKyAgKiBAcm10b2xsIERCR01DVV9BUEIxSEZaMSAgIFRJTTIzICAgTExfREJHTUNVX0FQQjFfR1JQMl9VbkZyZWV6ZVBlcmlwaFxuCisgICAgICAgICAgICBEQkdNQ1VfQVBCMUhGWjEgICBUSU0yNCAgIExMX0RCR01DVV9BUEIxX0dSUDJfVW5GcmVlemVQZXJpcGhcbgorICAqIEBwYXJhbSAgUGVyaXBocyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCMV9HUlAyX1RJTTIzX1NUT1AKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCMV9HUlAyX1RJTTI0X1NUT1AKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIExMX0RCR01DVV9BUEIxX0dSUDJfVW5GcmVlemVQZXJpcGgodWludDMyX3QgUGVyaXBocykKK3sKKyAgQ0xFQVJfQklUKERCR01DVS0+QVBCMUhGWjEsIFBlcmlwaHMpOworfQorI2VuZGlmIC8qIFRJTTIzIHx8IFRJTTI0ICovCiAKIC8qKgogICAqIEBicmllZiAgRnJlZXplIEFQQjIgcGVyaXBoZXJhbHMKQEAgLTIwMzgsNyArMjE5NCw5IEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjJfR1JQMV9USU0xNV9TVE9QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjJfR1JQMV9USU0xNl9TVE9QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjJfR1JQMV9USU0xN19TVE9QCi0gICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjJfR1JQMV9IUlRJTV9TVE9QCisgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjJfR1JQMV9IUlRJTV9TVE9QICgqKQorICAqCisgICogICAgICAgICAoKikgdmFsdWUgbm90IGRlZmluZWQgaW4gYWxsIGRldmljZXMKICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX0RCR01DVV9BUEIyX0dSUDFfRnJlZXplUGVyaXBoKHVpbnQzMl90IFBlcmlwaHMpCkBAIC0yMDYwLDcgKzIyMTgsOSBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEIyX0dSUDFfVElNMTVfU1RPUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEIyX0dSUDFfVElNMTZfU1RPUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEIyX0dSUDFfVElNMTdfU1RPUAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEIyX0dSUDFfSFJUSU1fU1RPUAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEIyX0dSUDFfSFJUSU1fU1RPUCAoKikKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQkdNQ1VfQVBCMl9HUlAxX1VuRnJlZXplUGVyaXBoKHVpbnQzMl90IFBlcmlwaHMpCkBAIC0yMTA1LDEwICsyMjY1LDEyIEBACiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjRfR1JQMV9JMkM0X1NUT1AKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCNF9HUlAxX0xQVElNMl9TVE9QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjRfR1JQMV9MUFRJTTNfU1RPUAotICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEI0X0dSUDFfTFBUSU00X1NUT1AKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCNF9HUlAxX0xQVElNNV9TVE9QCisgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjRfR1JQMV9MUFRJTTRfU1RPUCAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCNF9HUlAxX0xQVElNNV9TVE9QICgqKQogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEI0X0dSUDFfUlRDX1NUT1AKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCNF9HUlAxX0lXREcxX1NUT1AKKyAgKgorICAqICAgICAgICAgKCopIHZhbHVlIG5vdCBkZWZpbmVkIGluIGFsbCBkZXZpY2VzCiAgICogQHJldHZhbCBOb25lCiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9EQkdNQ1VfQVBCNF9HUlAxX0ZyZWV6ZVBlcmlwaCh1aW50MzJfdCBQZXJpcGhzKQpAQCAtMjEyOSwxMCArMjI5MSwxMiBAQAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEI0X0dSUDFfSTJDNF9TVE9QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjRfR1JQMV9MUFRJTTJfU1RPUAogICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEI0X0dSUDFfTFBUSU0zX1NUT1AKLSAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCNF9HUlAxX0xQVElNNF9TVE9QCi0gICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjRfR1JQMV9MUFRJTTVfU1RPUAorICAqICAgICAgICAgQGFyZyBAcmVmIExMX0RCR01DVV9BUEI0X0dSUDFfTFBUSU00X1NUT1AgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjRfR1JQMV9MUFRJTTVfU1RPUCAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9EQkdNQ1VfQVBCNF9HUlAxX1JUQ19TVE9QCiAgICogICAgICAgICBAYXJnIEByZWYgTExfREJHTUNVX0FQQjRfR1JQMV9JV0RHMV9TVE9QCisgICoKKyAgKiAgICAgICAgICgqKSB2YWx1ZSBub3QgZGVmaW5lZCBpbiBhbGwgZGV2aWNlcwogICAqIEByZXR2YWwgTm9uZQogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfREJHTUNVX0FQQjRfR1JQMV9VbkZyZWV6ZVBlcmlwaCh1aW50MzJfdCBQZXJpcGhzKQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9sbF90aW0uaCBiL0luYy9zdG0zMmg3eHhfbGxfdGltLmgKaW5kZXggNzI4YzQyMy4uM2JiZGFhMSAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9sbF90aW0uaAorKysgYi9JbmMvc3RtMzJoN3h4X2xsX3RpbS5oCkBAIC0zMiw3ICszMiw3IEBACiAgICogQHsKICAgKi8KIAotI2lmIGRlZmluZWQgKFRJTTEpIHx8IGRlZmluZWQgKFRJTTIpIHx8IGRlZmluZWQgKFRJTTMpIHx8IGRlZmluZWQgKFRJTTQpIHx8IGRlZmluZWQgKFRJTTUpIHx8IGRlZmluZWQgKFRJTTYpIHx8IGRlZmluZWQgKFRJTTcpIHx8IGRlZmluZWQgKFRJTTgpIHx8IGRlZmluZWQgKFRJTTEyKSB8fCBkZWZpbmVkIChUSU0xMykgfHwgZGVmaW5lZCAoVElNMTQpIHx8IGRlZmluZWQgKFRJTTE1KSB8fCBkZWZpbmVkIChUSU0xNikgfHwgZGVmaW5lZCAoVElNMTcpCisjaWYgZGVmaW5lZCAoVElNMSkgfHwgZGVmaW5lZCAoVElNMikgfHwgZGVmaW5lZCAoVElNMykgfHwgZGVmaW5lZCAoVElNNCkgfHwgZGVmaW5lZCAoVElNNSkgfHwgZGVmaW5lZCAoVElNNikgfHwgZGVmaW5lZCAoVElNNykgfHwgZGVmaW5lZCAoVElNOCkgfHwgZGVmaW5lZCAoVElNMTIpIHx8IGRlZmluZWQgKFRJTTEzKSB8fCBkZWZpbmVkIChUSU0xNCkgfHwgZGVmaW5lZCAoVElNMTUpIHx8IGRlZmluZWQgKFRJTTE2KSB8fCBkZWZpbmVkIChUSU0xNykgfHwgZGVmaW5lZCAoVElNMjMpIHx8IGRlZmluZWQgKFRJTTI0KQogCiAvKiogQGRlZmdyb3VwIFRJTV9MTCBUSU0KICAgKiBAewpAQCAtNTc2LDggKzU3Niw4IEBACiAgICovCiAjZGVmaW5lIExMX1RJTV9DT1VOVEVSTU9ERV9VUCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDBVICAgICAgICAgIC8qITxDb3VudGVyIHVzZWQgYXMgdXBjb3VudGVyICovCiAjZGVmaW5lIExMX1RJTV9DT1VOVEVSTU9ERV9ET1dOICAgICAgICAgICAgICAgIFRJTV9DUjFfRElSICAgICAgICAgIC8qITwgQ291bnRlciB1c2VkIGFzIGRvd25jb3VudGVyICovCi0jZGVmaW5lIExMX1RJTV9DT1VOVEVSTU9ERV9DRU5URVJfVVAgICAgICAgICAgIFRJTV9DUjFfQ01TXzAgICAgICAgIC8qITwgVGhlIGNvdW50ZXIgY291bnRzIHVwIGFuZCBkb3duIGFsdGVybmF0aXZlbHkuIE91dHB1dCBjb21wYXJlIGludGVycnVwdCBmbGFncyBvZiBvdXRwdXQgY2hhbm5lbHMgIGFyZSBzZXQgb25seSB3aGVuIHRoZSBjb3VudGVyIGlzIGNvdW50aW5nIGRvd24uICovCi0jZGVmaW5lIExMX1RJTV9DT1VOVEVSTU9ERV9DRU5URVJfRE9XTiAgICAgICAgIFRJTV9DUjFfQ01TXzEgICAgICAgIC8qITxUaGUgY291bnRlciBjb3VudHMgdXAgYW5kIGRvd24gYWx0ZXJuYXRpdmVseS4gT3V0cHV0IGNvbXBhcmUgaW50ZXJydXB0IGZsYWdzIG9mIG91dHB1dCBjaGFubmVscyAgYXJlIHNldCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgaXMgY291bnRpbmcgdXAgKi8KKyNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9ET1dOICAgICAgICAgVElNX0NSMV9DTVNfMCAgICAgICAgLyohPCBUaGUgY291bnRlciBjb3VudHMgdXAgYW5kIGRvd24gYWx0ZXJuYXRpdmVseS4gT3V0cHV0IGNvbXBhcmUgaW50ZXJydXB0IGZsYWdzIG9mIG91dHB1dCBjaGFubmVscyAgYXJlIHNldCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgaXMgY291bnRpbmcgZG93bi4gKi8KKyNkZWZpbmUgTExfVElNX0NPVU5URVJNT0RFX0NFTlRFUl9VUCAgICAgICAgICAgVElNX0NSMV9DTVNfMSAgICAgICAgLyohPFRoZSBjb3VudGVyIGNvdW50cyB1cCBhbmQgZG93biBhbHRlcm5hdGl2ZWx5LiBPdXRwdXQgY29tcGFyZSBpbnRlcnJ1cHQgZmxhZ3Mgb2Ygb3V0cHV0IGNoYW5uZWxzICBhcmUgc2V0IG9ubHkgd2hlbiB0aGUgY291bnRlciBpcyBjb3VudGluZyB1cCAqLwogI2RlZmluZSBMTF9USU1fQ09VTlRFUk1PREVfQ0VOVEVSX1VQX0RPV04gICAgICBUSU1fQ1IxX0NNUyAgICAgICAgICAvKiE8IFRoZSBjb3VudGVyIGNvdW50cyB1cCBhbmQgZG93biBhbHRlcm5hdGl2ZWx5LiBPdXRwdXQgY29tcGFyZSBpbnRlcnJ1cHQgZmxhZ3Mgb2Ygb3V0cHV0IGNoYW5uZWxzICBhcmUgc2V0IG9ubHkgd2hlbiB0aGUgY291bnRlciBpcyBjb3VudGluZyB1cCBvciBkb3duLiAqLwogLyoqCiAgICogQH0KQEAgLTEyNDEsNiArMTI0MSw5IEBACiAjZGVmaW5lIExMX1RJTV9USU0yNF9USTFfUk1QX0NBTl9UTVAgICAgICAgICAgICAgICAgICAgICAgVElNX1RJU0VMX1RJMVNFTF8wICAgICAgICAgICAgICAgICAgICAgICAgLyogITwgVElNMjQgaW5wdXQgMSBpcyBjb25uZWN0ZWQgdG8gQ0FOIFRNUCAgKi8KICNkZWZpbmUgTExfVElNX1RJTTI0X1RJMV9STVBfQ0FOX1JUUCAgICAgICAgICAgICAgICAgICAgICBUSU1fVElTRUxfVEkxU0VMXzEgICAgICAgICAgICAgICAgICAgICAgICAvKiAhPCBUSU0yNCBpbnB1dCAxIGlzIGNvbm5lY3RlZCB0byBDQU4gUlRQICAqLwogI2RlZmluZSBMTF9USU1fVElNMjRfVEkxX1JNUF9DQU5fU09DICAgICAgICAgICAgICAgICAgICAgIChUSU1fVElTRUxfVEk0U0VMXzAgfCBUSU1fVElTRUxfVEk0U0VMXzEpIC8qICE8IFRJTTI0IGlucHV0IDEgaXMgY29ubmVjdGVkIHRvIENBTiBTT0MgKi8KKy8qKgorICAqIEB9CisgICovCiAKICNpZiBkZWZpbmVkKFRJTV9CUkVBS19JTlBVVF9TVVBQT1JUKQogLyoqIExlZ2FjeSBkZWZpbml0aW9ucyBmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3NlCkBAIC0yMDE2LDggKzIwMTksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX0NvbmZpZ091dHB1dChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgQ29uZmlndXJhdGlvbikKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBDTEVBUl9CSVQoKnBSZWcsIChUSU1fQ0NNUjFfQ0MxUyA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pKTsKICAgTU9ESUZZX1JFRyhUSU14LT5DQ0VSLCAoVElNX0NDRVJfQ0MxUCA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pLAogICAgICAgICAgICAgIChDb25maWd1cmF0aW9uICYgVElNX0NDRVJfQ0MxUCkgPDwgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKTsKQEAgLTIwNjEsOCArMjA2NCw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfU2V0TW9kZShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgTW9kZSkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBNT0RJRllfUkVHKCpwUmVnLCAoKFRJTV9DQ01SMV9PQzFNICB8IFRJTV9DQ01SMV9DQzFTKSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pLCAgTW9kZSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pOwogfQogCkBAIC0yMTAwLDggKzIxMDMsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19HZXRNb2RlKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIHJldHVybiAoUkVBRF9CSVQoKnBSZWcsICgoVElNX0NDTVIxX09DMU0gIHwgVElNX0NDTVIxX0NDMVMpIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpID4+IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTIxMzQsNyArMjEzNyw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfU2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IFBvbGFyaXR5KQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgTU9ESUZZX1JFRyhUSU14LT5DQ0VSLCAoVElNX0NDRVJfQ0MxUCA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pLCAgUG9sYXJpdHkgPDwgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjE2Niw3ICsyMTY5LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfR2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICByZXR1cm4gKFJFQURfQklUKFRJTXgtPkNDRVIsIChUSU1fQ0NFUl9DQzFQIDw8IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSkpID4+IFNISUZUX1RBQl9DQ3hQW2lDaGFubmVsXSk7CiB9CiAKQEAgLTIyMDMsNyArMjIwNiw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfU2V0SWRsZVN0YXRlKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBJZGxlU3RhdGUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICBNT0RJRllfUkVHKFRJTXgtPkNSMiwgKFRJTV9DUjJfT0lTMSA8PCBTSElGVF9UQUJfT0lTeFtpQ2hhbm5lbF0pLCAgSWRsZVN0YXRlIDw8IFNISUZUX1RBQl9PSVN4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTIyMzUsNyArMjIzOCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX09DX0dldElkbGVTdGF0ZShUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CiAgIHJldHVybiAoUkVBRF9CSVQoVElNeC0+Q1IyLCAoVElNX0NSMl9PSVMxIDw8IFNISUZUX1RBQl9PSVN4W2lDaGFubmVsXSkpID4+IFNISUZUX1RBQl9PSVN4W2lDaGFubmVsXSk7CiB9CiAKQEAgLTIyNjAsOCArMjI2Myw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfRW5hYmxlRmFzdChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICBTRVRfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMUZFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogCiB9CkBAIC0yMjg2LDggKzIyODksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX0Rpc2FibGVGYXN0KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgKFRJTV9DQ01SMV9PQzFGRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pKTsKIAogfQpAQCAtMjMxMiw5ICsyMzE1LDkgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfSXNFbmFibGVkRmFzdChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKLSAgcmVnaXN0ZXIgdWludDMyX3QgYml0ZmllbGQgPSBUSU1fQ0NNUjFfT0MxRkUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50MzJfdCBiaXRmaWVsZCA9IFRJTV9DQ01SMV9PQzFGRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF07CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCBiaXRmaWVsZCkgPT0gYml0ZmllbGQpID8gMVVMIDogMFVMKTsKIH0KIApAQCAtMjMzOCw4ICsyMzQxLDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9PQ19FbmFibGVQcmVsb2FkKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIChUSU1fQ0NNUjFfT0MxUEUgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSk7CiB9CiAKQEAgLTIzNjMsOCArMjM2Niw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfRGlzYWJsZVByZWxvYWQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgQ0xFQVJfQklUKCpwUmVnLCAoVElNX0NDTVIxX09DMVBFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXSkpOwogfQogCkBAIC0yMzg4LDkgKzIzOTEsOSBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9PQ19Jc0VuYWJsZWRQcmVsb2FkKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwotICByZWdpc3RlciB1aW50MzJfdCBiaXRmaWVsZCA9IFRJTV9DQ01SMV9PQzFQRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF07CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQzMl90IGJpdGZpZWxkID0gVElNX0NDTVIxX09DMVBFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXTsKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsIGJpdGZpZWxkKSA9PSBiaXRmaWVsZCkgPyAxVUwgOiAwVUwpOwogfQogCkBAIC0yNDE3LDggKzI0MjAsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX09DX0VuYWJsZUNsZWFyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIFNFVF9CSVQoKnBSZWcsIChUSU1fQ0NNUjFfT0MxQ0UgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdKSk7CiB9CiAKQEAgLTI0NDQsOCArMjQ0Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fT0NfRGlzYWJsZUNsZWFyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIENMRUFSX0JJVCgqcFJlZywgKFRJTV9DQ01SMV9PQzFDRSA8PCBTSElGVF9UQUJfT0N4eFtpQ2hhbm5lbF0pKTsKIH0KIApAQCAtMjQ3Myw5ICsyNDc2LDkgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fT0NfSXNFbmFibGVkQ2xlYXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJpdGZpZWxkID0gVElNX0NDTVIxX09DMUNFIDw8IFNISUZUX1RBQl9PQ3h4W2lDaGFubmVsXTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDMyX3QgYml0ZmllbGQgPSBUSU1fQ0NNUjFfT0MxQ0UgPDwgU0hJRlRfVEFCX09DeHhbaUNoYW5uZWxdOwogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgYml0ZmllbGQpID09IGJpdGZpZWxkKSA/IDFVTCA6IDBVTCk7CiB9CiAKQEAgLTI3NDQsOCArMjc0Nyw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfQ29uZmlnKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBDb25maWd1cmF0aW9uKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIE1PRElGWV9SRUcoKnBSZWcsICgoVElNX0NDTVIxX0lDMUYgfCBUSU1fQ0NNUjFfSUMxUFNDIHwgVElNX0NDTVIxX0NDMVMpIDw8IFNISUZUX1RBQl9JQ3h4W2lDaGFubmVsXSksCiAgICAgICAgICAgICAgKChDb25maWd1cmF0aW9uID4+IDE2VSkgJiAoVElNX0NDTVIxX0lDMUYgfCBUSU1fQ0NNUjFfSUMxUFNDIHwgVElNX0NDTVIxX0NDMVMpKSAgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKTsKICAgTU9ESUZZX1JFRyhUSU14LT5DQ0VSLCAoKFRJTV9DQ0VSX0NDMU5QIHwgVElNX0NDRVJfQ0MxUCkgPDwgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKSwKQEAgLTI3NzIsOCArMjc3NSw4IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfU2V0QWN0aXZlSW5wdXQoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IElDQWN0aXZlSW5wdXQpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKChUSU1fQ0NNUjFfQ0MxUykgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKSwgKElDQWN0aXZlSW5wdXQgPj4gMTZVKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pOwogfQogCkBAIC0yNzk2LDggKzI3OTksOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRBY3RpdmVJbnB1dChUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCkKIHsKLSAgcmVnaXN0ZXIgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKLSAgcmVnaXN0ZXIgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKKyAgIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOwogICByZXR1cm4gKChSRUFEX0JJVCgqcFJlZywgKChUSU1fQ0NNUjFfQ0MxUykgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKSA8PCAxNlUpOwogfQogCkBAIC0yODIyLDggKzI4MjUsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX0lDX1NldFByZXNjYWxlcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgSUNQcmVzY2FsZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKChUSU1fQ0NNUjFfSUMxUFNDKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pLCAoSUNQcmVzY2FsZXIgPj4gMTZVKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pOwogfQogCkBAIC0yODQ3LDggKzI4NTAsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1RJTV9JQ19HZXRQcmVzY2FsZXIoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgY29uc3QgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgcmV0dXJuICgoUkVBRF9CSVQoKnBSZWcsICgoVElNX0NDTVIxX0lDMVBTQykgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKSkgPj4gU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKSA8PCAxNlUpOwogfQogCkBAIC0yODg1LDggKzI4ODgsOCBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX0lDX1NldEZpbHRlcihUSU1fVHlwZURlZiAqVElNeCwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgSUNGaWx0ZXIpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+Q0NNUjEpICsgT0ZGU0VUX1RBQl9DQ01SeFtpQ2hhbm5lbF0pKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKChUSU1fQ0NNUjFfSUMxRikgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKSwgKElDRmlsdGVyID4+IDE2VSkgPDwgU0hJRlRfVEFCX0lDeHhbaUNoYW5uZWxdKTsKIH0KIApAQCAtMjkyMiw4ICsyOTI1LDggQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB1aW50MzJfdCBMTF9USU1fSUNfR2V0RmlsdGVyKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwotICByZWdpc3RlciBjb25zdCBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5DQ01SMSkgKyBPRkZTRVRfVEFCX0NDTVJ4W2lDaGFubmVsXSkpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKKyAgIGNvbnN0IF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkNDTVIxKSArIE9GRlNFVF9UQUJfQ0NNUnhbaUNoYW5uZWxdKSk7CiAgIHJldHVybiAoKFJFQURfQklUKCpwUmVnLCAoKFRJTV9DQ01SMV9JQzFGKSA8PCBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pKSA+PiBTSElGVF9UQUJfSUN4eFtpQ2hhbm5lbF0pIDw8IDE2VSk7CiB9CiAKQEAgLTI5NTEsNyArMjk1NCw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fSUNfU2V0UG9sYXJpdHkoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IENoYW5uZWwsIHVpbnQzMl90IElDUG9sYXJpdHkpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQ4X3QgaUNoYW5uZWwgPSBUSU1fR0VUX0NIQU5ORUxfSU5ERVgoQ2hhbm5lbCk7CisgICB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOwogICBNT0RJRllfUkVHKFRJTXgtPkNDRVIsICgoVElNX0NDRVJfQ0MxTlAgfCBUSU1fQ0NFUl9DQzFQKSA8PCBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pLAogICAgICAgICAgICAgIElDUG9sYXJpdHkgPDwgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKTsKIH0KQEAgLTI5NzksNyArMjk4Miw3IEBACiAgICovCiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVElNX0lDX0dldFBvbGFyaXR5KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsKQogewotICByZWdpc3RlciB1aW50OF90IGlDaGFubmVsID0gVElNX0dFVF9DSEFOTkVMX0lOREVYKENoYW5uZWwpOworICAgdWludDhfdCBpQ2hhbm5lbCA9IFRJTV9HRVRfQ0hBTk5FTF9JTkRFWChDaGFubmVsKTsKICAgcmV0dXJuIChSRUFEX0JJVChUSU14LT5DQ0VSLCAoKFRJTV9DQ0VSX0NDMU5QIHwgVElNX0NDRVJfQ0MxUCkgPDwgU0hJRlRfVEFCX0NDeFBbaUNoYW5uZWxdKSkgPj4KICAgICAgICAgICBTSElGVF9UQUJfQ0N4UFtpQ2hhbm5lbF0pOwogfQpAQCAtMzY5Miw3ICszNjk1LDcgQEAKICAgKi8KIF9fU1RBVElDX0lOTElORSB2b2lkIExMX1RJTV9FbmFibGVCcmVha0lucHV0U291cmNlKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBCcmVha0lucHV0LCB1aW50MzJfdCBTb3VyY2UpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkFGMSkgKyBCcmVha0lucHV0KSk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5BRjEpICsgQnJlYWtJbnB1dCkpOwogICBTRVRfQklUKCpwUmVnLCBTb3VyY2UpOwogfQogCkBAIC0zNzIxLDcgKzM3MjQsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHZvaWQgTExfVElNX0Rpc2FibGVCcmVha0lucHV0U291cmNlKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBCcmVha0lucHV0LCB1aW50MzJfdCBTb3VyY2UpCiB7Ci0gIHJlZ2lzdGVyIF9fSU8gdWludDMyX3QgKnBSZWcgPSAoX19JTyB1aW50MzJfdCAqKSgodWludDMyX3QpKCh1aW50MzJfdCkoJlRJTXgtPkFGMSkgKyBCcmVha0lucHV0KSk7CisgICBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5BRjEpICsgQnJlYWtJbnB1dCkpOwogICBDTEVBUl9CSVQoKnBSZWcsIFNvdXJjZSk7CiB9CiAKQEAgLTM3NTEsNyArMzc1NCw3IEBACiBfX1NUQVRJQ19JTkxJTkUgdm9pZCBMTF9USU1fU2V0QnJlYWtJbnB1dFNvdXJjZVBvbGFyaXR5KFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBCcmVha0lucHV0LCB1aW50MzJfdCBTb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IFBvbGFyaXR5KQogewotICByZWdpc3RlciBfX0lPIHVpbnQzMl90ICpwUmVnID0gKF9fSU8gdWludDMyX3QgKikoKHVpbnQzMl90KSgodWludDMyX3QpKCZUSU14LT5BRjEpICsgQnJlYWtJbnB1dCkpOworICAgX19JTyB1aW50MzJfdCAqcFJlZyA9IChfX0lPIHVpbnQzMl90ICopKCh1aW50MzJfdCkoKHVpbnQzMl90KSgmVElNeC0+QUYxKSArIEJyZWFrSW5wdXQpKTsKICAgTU9ESUZZX1JFRygqcFJlZywgKFRJTXhfQUYxX0JLSU5QIDw8IFRJTV9QT1NJVElPTl9CUktfU09VUkNFKSwgKFBvbGFyaXR5IDw8IFRJTV9QT1NJVElPTl9CUktfU09VUkNFKSk7CiB9CiAjZW5kaWYgLyogVElNX0JSRUFLX0lOUFVUX1NVUFBPUlQgKi8KQEAgLTQ5MTUsNyArNDkxOCw3IEBACiAgICogQH0KICAgKi8KIAotI2VuZGlmIC8qIFRJTTEgfHwgVElNMiB8fCBUSU0zIHx8IFRJTTQgfHwgVElNNSB8fCBUSU02IHx8IFRJTTcgfHwgVElNOCB8fCBUSU0xMiB8fCBUSU0xMyB8fFRJTTE0IHx8IFRJTTE1IHx8IFRJTTE2IHx8IFRJTTE3ICovCisjZW5kaWYgLyogVElNMSB8fCBUSU0yIHx8IFRJTTMgfHwgVElNNCB8fCBUSU01IHx8IFRJTTYgfHwgVElNNyB8fCBUSU04IHx8IFRJTTEyIHx8IFRJTTEzIHx8VElNMTQgfHwgVElNMTUgfHwgVElNMTYgfHwgVElNMTcgIHx8IFRJTTIzICB8fCBUSU0yNCAqLwogCiAvKioKICAgKiBAfQpkaWZmIC0tZ2l0IGEvSW5jL3N0bTMyaDd4eF9sbF91c2FydC5oIGIvSW5jL3N0bTMyaDd4eF9sbF91c2FydC5oCmluZGV4IGUwOTBhMWUuLjdiNDEyMWUgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfdXNhcnQuaAorKysgYi9JbmMvc3RtMzJoN3h4X2xsX3VzYXJ0LmgKQEAgLTY0NSw3ICs2NDUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEZJRk8gTW9kZSBFbmFibGUKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBGSUZPRU4gICAgICAgIExMX1VTQVJUX0VuYWJsZUZJRk8KICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtNjU4LDcgKzY1OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRklGTyBNb2RlIERpc2FibGUKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBGSUZPRU4gICAgICAgIExMX1VTQVJUX0Rpc2FibGVGSUZPCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTY3MSw3ICs2NzEsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIGlmIEZJRk8gTW9kZSBpcyBlbmFibGVkCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgRklGT0VOICAgICAgICBMTF9VU0FSVF9Jc0VuYWJsZWRGSUZPCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTY4NCw3ICs2ODQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSBUWCBGSUZPIFRocmVzaG9sZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFRYRlRDRkcgICAgICAgTExfVVNBUlRfU2V0VFhGSUZPVGhyZXNob2xkCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTcwNCw3ICs3MDQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBUWCBGSUZPIFRocmVzaG9sZCBDb25maWd1cmF0aW9uCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgVFhGVENGRyAgICAgICBMTF9VU0FSVF9HZXRUWEZJRk9UaHJlc2hvbGQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtNzIzLDcgKzcyMyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIFJYIEZJRk8gVGhyZXNob2xkCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgUlhGVENGRyAgICAgICBMTF9VU0FSVF9TZXRSWEZJRk9UaHJlc2hvbGQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtNzQzLDcgKzc0Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgUmV0dXJuIFJYIEZJRk8gVGhyZXNob2xkIENvbmZpZ3VyYXRpb24KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBSWEZUQ0ZHICAgICAgIExMX1VTQVJUX0dldFJYRklGT1RocmVzaG9sZAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC03NjIsNyArNzYyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgVFggYW5kIFJYIEZJRk9zIFRocmVzaG9sZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFRYRlRDRkcgICAgICAgTExfVVNBUlRfQ29uZmlnRklGT3NUaHJlc2hvbGRcbgogICAqICAgICAgICAgQ1IzICAgICAgICAgIFJYRlRDRkcgICAgICAgTExfVVNBUlRfQ29uZmlnRklGT3NUaHJlc2hvbGQKQEAgLTc5Miw3ICs3OTIsNyBAQAogICAqIEBicmllZiAgVVNBUlQgZW5hYmxlZCBpbiBTVE9QIE1vZGUuCiAgICogQG5vdGUgICBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgZW5hYmxlZCwgVVNBUlQgaXMgYWJsZSB0byB3YWtlIHVwIHRoZSBNQ1UgZnJvbSBTdG9wIG1vZGUsIHByb3ZpZGVkIHRoYXQKICAgKiAgICAgICAgIFVTQVJUIGNsb2NrIHNlbGVjdGlvbiBpcyBIU0kgb3IgTFNFIGluIFJDQy4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9XQUtFVVBfRlJPTVNUT1BfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9XQUtFVVBfRlJPTVNUT1BfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgV2FrZS11cCBmcm9tIFN0b3AgbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFVFU00gICAgICAgICAgTExfVVNBUlRfRW5hYmxlSW5TdG9wTW9kZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC04MDYsNyArODA2LDcgQEAKIC8qKgogICAqIEBicmllZiAgVVNBUlQgZGlzYWJsZWQgaW4gU1RPUCBNb2RlLgogICAqIEBub3RlICAgV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGRpc2FibGVkLCBVU0FSVCBpcyBub3QgYWJsZSB0byB3YWtlIHVwIHRoZSBNQ1UgZnJvbSBTdG9wIG1vZGUKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9XQUtFVVBfRlJPTVNUT1BfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9XQUtFVVBfRlJPTVNUT1BfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgV2FrZS11cCBmcm9tIFN0b3AgbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFVFU00gICAgICAgICAgTExfVVNBUlRfRGlzYWJsZUluU3RvcE1vZGUKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtODE5LDcgKzgxOSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgaWYgVVNBUlQgaXMgZW5hYmxlZCBpbiBTVE9QIE1vZGUgKGFibGUgdG8gd2FrZSB1cCBNQ1UgZnJvbSBTdG9wIG1vZGUgb3Igbm90KQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBXYWtlLXVwIGZyb20gU3RvcCBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgVUVTTSAgICAgICAgICBMTF9VU0FSVF9Jc0VuYWJsZWRJblN0b3BNb2RlCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTEwNjIsNyArMTA2Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIGlmIENsb2NrIHB1bHNlIG9mIHRoZSBsYXN0IGRhdGEgYml0IGlzIG91dHB1dCB0byB0aGUgU0NMSyBwaW4gb3Igbm90Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VTQVJUX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VTQVJUX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFN5bmNocm9ub3VzIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgTEJDTCAgICAgICAgICBMTF9VU0FSVF9TZXRMYXN0Q2xrUHVsc2VPdXRwdXQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIC8qKgogICAqIEBicmllZiAgUmV0cmlldmUgQ2xvY2sgcHVsc2Ugb2YgdGhlIGxhc3QgZGF0YSBiaXQgb3V0cHV0IGNvbmZpZ3VyYXRpb24KICAgKiAgICAgICAgIChMYXN0IGJpdCBDbG9jayBwdWxzZSBvdXRwdXQgdG8gdGhlIFNDTEsgcGluIG9yIG5vdCkKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU3luY2hyb25vdXMgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBMQkNMICAgICAgICAgIExMX1VTQVJUX0dldExhc3RDbGtQdWxzZU91dHB1dAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xMDk0LDcgKzEwOTQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbGVjdCB0aGUgcGhhc2Ugb2YgdGhlIGNsb2NrIG91dHB1dCBvbiB0aGUgU0NMSyBwaW4gaW4gc3luY2hyb25vdXMgbW9kZQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VU0FSVF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VU0FSVF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTeW5jaHJvbm91cyBtb2RlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIENQSEEgICAgICAgICAgTExfVVNBUlRfU2V0Q2xvY2tQaGFzZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xMTEwLDcgKzExMTAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBwaGFzZSBvZiB0aGUgY2xvY2sgb3V0cHV0IG9uIHRoZSBTQ0xLIHBpbiBpbiBzeW5jaHJvbm91cyBtb2RlCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VTQVJUX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VTQVJUX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFN5bmNocm9ub3VzIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgQ1BIQSAgICAgICAgICBMTF9VU0FSVF9HZXRDbG9ja1BoYXNlCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTExMjUsNyArMTEyNSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2VsZWN0IHRoZSBwb2xhcml0eSBvZiB0aGUgY2xvY2sgb3V0cHV0IG9uIHRoZSBTQ0xLIHBpbiBpbiBzeW5jaHJvbm91cyBtb2RlCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VTQVJUX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VTQVJUX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFN5bmNocm9ub3VzIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgQ1BPTCAgICAgICAgICBMTF9VU0FSVF9TZXRDbG9ja1BvbGFyaXR5CiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTExNDEsNyArMTE0MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgUmV0dXJuIHBvbGFyaXR5IG9mIHRoZSBjbG9jayBvdXRwdXQgb24gdGhlIFNDTEsgcGluIGluIHN5bmNocm9ub3VzIG1vZGUKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU3luY2hyb25vdXMgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBDUE9MICAgICAgICAgIExMX1VTQVJUX0dldENsb2NrUG9sYXJpdHkKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMTE1Niw3ICsxMTU2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDb25maWd1cmUgQ2xvY2sgc2lnbmFsIGZvcm1hdCAoUGhhc2UgUG9sYXJpdHkgYW5kIGNob2ljZSBhYm91dCBvdXRwdXQgb2YgbGFzdCBiaXQgY2xvY2sgcHVsc2UpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VTQVJUX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VTQVJUX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFN5bmNocm9ub3VzIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQG5vdGUgICBDYWxsIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCBzZXF1ZW5jZSA6CiAgICogICAgICAgICAtIENsb2NrIFBoYXNlIGNvbmZpZ3VyYXRpb24gdXNpbmcgQHJlZiBMTF9VU0FSVF9TZXRDbG9ja1BoYXNlKCkgZnVuY3Rpb24KQEAgLTExODQsNyArMTE4NCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIENsb2NrIHNvdXJjZSBwcmVzY2FsZXIgZm9yIGJhdWRyYXRlIGdlbmVyYXRvciBhbmQgb3ZlcnNhbXBsaW5nCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBQUkVTQyAgICAgICAgUFJFU0NBTEVSICAgICBMTF9VU0FSVF9TZXRQcmVzY2FsZXIKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMTIxMCw3ICsxMjEwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBSZXRyaWV2ZSB0aGUgQ2xvY2sgc291cmNlIHByZXNjYWxlciBmb3IgYmF1ZHJhdGUgZ2VuZXJhdG9yIGFuZCBvdmVyc2FtcGxpbmcKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIFBSRVNDICAgICAgICBQUkVTQ0FMRVIgICAgIExMX1VTQVJUX0dldFByZXNjYWxlcgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xMjM1LDcgKzEyMzUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBDbG9jayBvdXRwdXQgb24gU0NMSyBwaW4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU3luY2hyb25vdXMgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBDTEtFTiAgICAgICAgIExMX1VTQVJUX0VuYWJsZVNDTEtPdXRwdXQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIENsb2NrIG91dHB1dCBvbiBTQ0xLIHBpbgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VU0FSVF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VU0FSVF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTeW5jaHJvbm91cyBtb2RlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIENMS0VOICAgICAgICAgTExfVVNBUlRfRGlzYWJsZVNDTEtPdXRwdXQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMTI2MSw3ICsxMjYxLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSBpZiBDbG9jayBvdXRwdXQgb24gU0NMSyBwaW4gaXMgZW5hYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VU0FSVF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VU0FSVF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTeW5jaHJvbm91cyBtb2RlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIENMS0VOICAgICAgICAgTExfVVNBUlRfSXNFbmFibGVkU0NMS091dHB1dAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xNDgwLDcgKzE0ODAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBBdXRvIEJhdWQtUmF0ZSBEZXRlY3Rpb24KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVVNBUlRfQVVUT0JBVURSQVRFX0RFVEVDVElPTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VU0FSVF9BVVRPQkFVRFJBVEVfREVURUNUSU9OX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEF1dG8gQmF1ZCBSYXRlIGRldGVjdGlvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIEFCUkVOICAgICAgICAgTExfVVNBUlRfRW5hYmxlQXV0b0JhdWRSYXRlCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTE0OTMsNyArMTQ5Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBBdXRvIEJhdWQtUmF0ZSBEZXRlY3Rpb24KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVVNBUlRfQVVUT0JBVURSQVRFX0RFVEVDVElPTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VU0FSVF9BVVRPQkFVRFJBVEVfREVURUNUSU9OX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEF1dG8gQmF1ZCBSYXRlIGRldGVjdGlvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIEFCUkVOICAgICAgICAgTExfVVNBUlRfRGlzYWJsZUF1dG9CYXVkUmF0ZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xNTA2LDcgKzE1MDYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIGlmIEF1dG8gQmF1ZC1SYXRlIERldGVjdGlvbiBtZWNoYW5pc20gaXMgZW5hYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VU0FSVF9BVVRPQkFVRFJBVEVfREVURUNUSU9OX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VTQVJUX0FVVE9CQVVEUkFURV9ERVRFQ1RJT05fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgQXV0byBCYXVkIFJhdGUgZGV0ZWN0aW9uIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgQUJSRU4gICAgICAgICBMTF9VU0FSVF9Jc0VuYWJsZWRBdXRvQmF1ZAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xNTE5LDcgKzE1MTksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCBBdXRvIEJhdWQtUmF0ZSBtb2RlIGJpdHMKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVVNBUlRfQVVUT0JBVURSQVRFX0RFVEVDVElPTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VU0FSVF9BVVRPQkFVRFJBVEVfREVURUNUSU9OX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEF1dG8gQmF1ZCBSYXRlIGRldGVjdGlvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IyICAgICAgICAgIEFCUk1PREUgICAgICAgTExfVVNBUlRfU2V0QXV0b0JhdWRSYXRlTW9kZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xNTM3LDcgKzE1MzcsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBBdXRvIEJhdWQtUmF0ZSBtb2RlCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VTQVJUX0FVVE9CQVVEUkFURV9ERVRFQ1RJT05fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVVNBUlRfQVVUT0JBVURSQVRFX0RFVEVDVElPTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBBdXRvIEJhdWQgUmF0ZSBkZXRlY3Rpb24gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBBQlJNT0RFICAgICAgIExMX1VTQVJUX0dldEF1dG9CYXVkUmF0ZU1vZGUKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMTY0NCw3ICsxNjQ0LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgUlRTIEhXIEZsb3cgQ29udHJvbAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBIYXJkd2FyZSBGbG93IGNvbnRyb2wgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBSVFNFICAgICAgICAgIExMX1VTQVJUX0VuYWJsZVJUU0hXRmxvd0N0cmwKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMTY1Nyw3ICsxNjU3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIFJUUyBIVyBGbG93IENvbnRyb2wKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9IV0ZMT1dfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9IV0ZMT1dfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgSGFyZHdhcmUgRmxvdyBjb250cm9sIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgUlRTRSAgICAgICAgICBMTF9VU0FSVF9EaXNhYmxlUlRTSFdGbG93Q3RybAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xNjcwLDcgKzE2NzAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBDVFMgSFcgRmxvdyBDb250cm9sCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfSFdGTE9XX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfSFdGTE9XX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEhhcmR3YXJlIEZsb3cgY29udHJvbCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIENUU0UgICAgICAgICAgTExfVVNBUlRfRW5hYmxlQ1RTSFdGbG93Q3RybAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xNjgzLDcgKzE2ODMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgQ1RTIEhXIEZsb3cgQ29udHJvbAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBIYXJkd2FyZSBGbG93IGNvbnRyb2wgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBDVFNFICAgICAgICAgIExMX1VTQVJUX0Rpc2FibGVDVFNIV0Zsb3dDdHJsCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTE2OTYsNyArMTY5Niw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ29uZmlndXJlIEhXIEZsb3cgQ29udHJvbCBtb2RlIChib3RoIENUUyBhbmQgUlRTKQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBIYXJkd2FyZSBGbG93IGNvbnRyb2wgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBSVFNFICAgICAgICAgIExMX1VTQVJUX1NldEhXRmxvd0N0cmxcbgogICAqICAgICAgICAgQ1IzICAgICAgICAgIENUU0UgICAgICAgICAgTExfVVNBUlRfU2V0SFdGbG93Q3RybApAQCAtMTcxNSw3ICsxNzE1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBSZXR1cm4gSFcgRmxvdyBDb250cm9sIGNvbmZpZ3VyYXRpb24gKGJvdGggQ1RTIGFuZCBSVFMpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfSFdGTE9XX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfSFdGTE9XX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEhhcmR3YXJlIEZsb3cgY29udHJvbCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFJUU0UgICAgICAgICAgTExfVVNBUlRfR2V0SFdGbG93Q3RybFxuCiAgICogICAgICAgICBDUjMgICAgICAgICAgQ1RTRSAgICAgICAgICBMTF9VU0FSVF9HZXRIV0Zsb3dDdHJsCkBAIC0xNzk5LDcgKzE3OTksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbGVjdCBldmVudCB0eXBlIGZvciBXYWtlIFVQIEludGVycnVwdCBGbGFnIChXVVNbMTowXSBiaXRzKQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBXYWtlLXVwIGZyb20gU3RvcCBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgV1VTICAgICAgICAgICBMTF9VU0FSVF9TZXRXS1VQVHlwZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xODE2LDcgKzE4MTYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBldmVudCB0eXBlIGZvciBXYWtlIFVQIEludGVycnVwdCBGbGFnIChXVVNbMTowXSBiaXRzKQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBXYWtlLXVwIGZyb20gU3RvcCBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgV1VTICAgICAgICAgICBMTF9VU0FSVF9HZXRXS1VQVHlwZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0xODY0LDcgKzE4NjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQmF1ZFJhdGUpCiB7CiAgIHVpbnQzMl90IHVzYXJ0ZGl2OwotICByZWdpc3RlciB1aW50MzJfdCBicnJ0ZW1wOworICB1aW50MzJfdCBicnJ0ZW1wOwogCiAgIGlmIChQcmVzY2FsZXJWYWx1ZSA+IExMX1VTQVJUX1BSRVNDQUxFUl9ESVYyNTYpCiAgIHsKQEAgLTE5MTIsOSArMTkxMiw5IEBACiBfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTExfVVNBUlRfR2V0QmF1ZFJhdGUoVVNBUlRfVHlwZURlZiAqVVNBUlR4LCB1aW50MzJfdCBQZXJpcGhDbGssIHVpbnQzMl90IFByZXNjYWxlclZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IE92ZXJTYW1wbGluZykKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgdXNhcnRkaXY7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGJycnJlc3VsdCA9IDB4MFU7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IHBlcmlwaGNsa3ByZXNjID0gKHVpbnQzMl90KShQZXJpcGhDbGsgLyAoVVNBUlRfUFJFU0NBTEVSX1RBQlsodWludDhfdClQcmVzY2FsZXJWYWx1ZV0pKTsKKyAgdWludDMyX3QgdXNhcnRkaXY7CisgIHVpbnQzMl90IGJycnJlc3VsdCA9IDB4MFU7CisgIHVpbnQzMl90IHBlcmlwaGNsa3ByZXNjID0gKHVpbnQzMl90KShQZXJpcGhDbGsgLyAoVVNBUlRfUFJFU0NBTEVSX1RBQlsodWludDhfdClQcmVzY2FsZXJWYWx1ZV0pKTsKIAogICB1c2FydGRpdiA9IFVTQVJUeC0+QlJSOwogCkBAIC0xOTk2LDcgKzE5OTYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBJckRBIG1vZGUKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfSVJEQV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19JUkRBX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIElyREEgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBJUkVOICAgICAgICAgIExMX1VTQVJUX0VuYWJsZUlyZGEKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMjAwOSw3ICsyMDA5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIElyREEgbW9kZQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19JUkRBX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX0lSREFfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgSXJEQSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIElSRU4gICAgICAgICAgTExfVVNBUlRfRGlzYWJsZUlyZGEKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMjAyMiw3ICsyMDIyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBJbmRpY2F0ZSBpZiBJckRBIG1vZGUgaXMgZW5hYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19JUkRBX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX0lSREFfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgSXJEQSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIElSRU4gICAgICAgICAgTExfVVNBUlRfSXNFbmFibGVkSXJkYQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yMDM1LDcgKzIwMzUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENvbmZpZ3VyZSBJckRBIFBvd2VyIE1vZGUgKE5vcm1hbCBvciBMb3cgUG93ZXIpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX0lSREFfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfSVJEQV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBJckRBIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgSVJMUCAgICAgICAgICBMTF9VU0FSVF9TZXRJcmRhUG93ZXJNb2RlCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIwNTEsNyArMjA1MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgUmV0cmlldmUgSXJEQSBQb3dlciBNb2RlIGNvbmZpZ3VyYXRpb24gKE5vcm1hbCBvciBMb3cgUG93ZXIpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX0lSREFfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfSVJEQV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBJckRBIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgSVJMUCAgICAgICAgICBMTF9VU0FSVF9HZXRJcmRhUG93ZXJNb2RlCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIwNjcsNyArMjA2Nyw3IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCBJcmRhIHByZXNjYWxlciB2YWx1ZSwgdXNlZCBmb3IgZGl2aWRpbmcgdGhlIFVTQVJUIGNsb2NrIHNvdXJjZQogICAqICAgICAgICAgdG8gYWNoaWV2ZSB0aGUgSXJkYSBMb3cgUG93ZXIgZnJlcXVlbmN5ICg4IGJpdHMgdmFsdWUpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX0lSREFfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfSVJEQV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBJckRBIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBHVFBSICAgICAgICAgUFNDICAgICAgICAgICBMTF9VU0FSVF9TZXRJcmRhUHJlc2NhbGVyCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIwODIsNyArMjA4Miw3IEBACiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBJcmRhIHByZXNjYWxlciB2YWx1ZSwgdXNlZCBmb3IgZGl2aWRpbmcgdGhlIFVTQVJUIGNsb2NrIHNvdXJjZQogICAqICAgICAgICAgdG8gYWNoaWV2ZSB0aGUgSXJkYSBMb3cgUG93ZXIgZnJlcXVlbmN5ICg4IGJpdHMgdmFsdWUpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX0lSREFfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfSVJEQV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBJckRBIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBHVFBSICAgICAgICAgUFNDICAgICAgICAgICBMTF9VU0FSVF9HZXRJcmRhUHJlc2NhbGVyCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIxMDMsNyArMjEwMyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFNtYXJ0Y2FyZCBOQUNLIHRyYW5zbWlzc2lvbgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNtYXJ0Y2FyZCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIE5BQ0sgICAgICAgICAgTExfVVNBUlRfRW5hYmxlU21hcnRjYXJkTkFDSwogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yMTE2LDcgKzIxMTYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgU21hcnRjYXJkIE5BQ0sgdHJhbnNtaXNzaW9uCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgTkFDSyAgICAgICAgICBMTF9VU0FSVF9EaXNhYmxlU21hcnRjYXJkTkFDSwogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yMTI5LDcgKzIxMjksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIGlmIFNtYXJ0Y2FyZCBOQUNLIHRyYW5zbWlzc2lvbiBpcyBlbmFibGVkCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgTkFDSyAgICAgICAgICBMTF9VU0FSVF9Jc0VuYWJsZWRTbWFydGNhcmROQUNLCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIxNDIsNyArMjE0Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFNtYXJ0Y2FyZCBtb2RlCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgU0NFTiAgICAgICAgICBMTF9VU0FSVF9FbmFibGVTbWFydGNhcmQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMjE1NSw3ICsyMTU1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIFNtYXJ0Y2FyZCBtb2RlCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgU0NFTiAgICAgICAgICBMTF9VU0FSVF9EaXNhYmxlU21hcnRjYXJkCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIxNjgsNyArMjE2OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgaWYgU21hcnRjYXJkIG1vZGUgaXMgZW5hYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNtYXJ0Y2FyZCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFNDRU4gICAgICAgICAgTExfVVNBUlRfSXNFbmFibGVkU21hcnRjYXJkCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIxODEsNyArMjE4MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IFNtYXJ0Y2FyZCBBdXRvLVJldHJ5IENvdW50IHZhbHVlIChTQ0FSQ05UWzI6MF0gYml0cykKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTbWFydGNhcmQgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAbm90ZSAgIFRoaXMgYml0LWZpZWxkIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHJldHJpZXMgaW4gdHJhbnNtaXQgYW5kIHJlY2VpdmUsIGluIFNtYXJ0Y2FyZCBtb2RlLgogICAqICAgICAgICAgSW4gdHJhbnNtaXNzaW9uIG1vZGUsIGl0IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGF1dG9tYXRpYyByZXRyYW5zbWlzc2lvbiByZXRyaWVzLCBiZWZvcmUKQEAgLTIyMDAsNyArMjIwMCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgUmV0dXJuIFNtYXJ0Y2FyZCBBdXRvLVJldHJ5IENvdW50IHZhbHVlIChTQ0FSQ05UWzI6MF0gYml0cykKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTbWFydGNhcmQgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBTQ0FSQ05UICAgICAgIExMX1VTQVJUX0dldFNtYXJ0Y2FyZEF1dG9SZXRyeUNvdW50CiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIyMTQsNyArMjIxNCw3IEBACiAvKioKICAgKiBAYnJpZWYgIFNldCBTbWFydGNhcmQgcHJlc2NhbGVyIHZhbHVlLCB1c2VkIGZvciBkaXZpZGluZyB0aGUgVVNBUlQgY2xvY2sKICAgKiAgICAgICAgIHNvdXJjZSB0byBwcm92aWRlIHRoZSBTTUFSVENBUkQgQ2xvY2sgKDUgYml0cyB2YWx1ZSkKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTbWFydGNhcmQgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIEdUUFIgICAgICAgICBQU0MgICAgICAgICAgIExMX1VTQVJUX1NldFNtYXJ0Y2FyZFByZXNjYWxlcgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yMjI5LDcgKzIyMjksNyBAQAogLyoqCiAgICogQGJyaWVmICBSZXR1cm4gU21hcnRjYXJkIHByZXNjYWxlciB2YWx1ZSwgdXNlZCBmb3IgZGl2aWRpbmcgdGhlIFVTQVJUIGNsb2NrCiAgICogICAgICAgICBzb3VyY2UgdG8gcHJvdmlkZSB0aGUgU01BUlRDQVJEIENsb2NrICg1IGJpdHMgdmFsdWUpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBHVFBSICAgICAgICAgUFNDICAgICAgICAgICBMTF9VU0FSVF9HZXRTbWFydGNhcmRQcmVzY2FsZXIKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMjI0Myw3ICsyMjQzLDcgQEAKIC8qKgogICAqIEBicmllZiAgU2V0IFNtYXJ0Y2FyZCBHdWFyZCB0aW1lIHZhbHVlLCBleHByZXNzZWQgaW4gbmIgb2YgYmF1ZCBjbG9ja3MgcGVyaW9kcwogICAqICAgICAgICAgKEdUWzc6MF0gYml0cyA6IEd1YXJkIHRpbWUgdmFsdWUpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBHVFBSICAgICAgICAgR1QgICAgICAgICAgICBMTF9VU0FSVF9TZXRTbWFydGNhcmRHdWFyZFRpbWUKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMjI1OCw3ICsyMjU4LDcgQEAKIC8qKgogICAqIEBicmllZiAgUmV0dXJuIFNtYXJ0Y2FyZCBHdWFyZCB0aW1lIHZhbHVlLCBleHByZXNzZWQgaW4gbmIgb2YgYmF1ZCBjbG9ja3MgcGVyaW9kcwogICAqICAgICAgICAgKEdUWzc6MF0gYml0cyA6IEd1YXJkIHRpbWUgdmFsdWUpCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBHVFBSICAgICAgICAgR1QgICAgICAgICAgICBMTF9VU0FSVF9HZXRTbWFydGNhcmRHdWFyZFRpbWUKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMjI3OSw3ICsyMjc5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgU2luZ2xlIFdpcmUgSGFsZi1EdXBsZXggbW9kZQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0hBTEZEVVBMRVhfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9IQUxGRFVQTEVYX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEhhbGYtRHVwbGV4IG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgSERTRUwgICAgICAgICBMTF9VU0FSVF9FbmFibGVIYWxmRHVwbGV4CiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIyOTIsNyArMjI5Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBTaW5nbGUgV2lyZSBIYWxmLUR1cGxleCBtb2RlCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfSEFMRkRVUExFWF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0hBTEZEVVBMRVhfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgSGFsZi1EdXBsZXggbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBIRFNFTCAgICAgICAgIExMX1VTQVJUX0Rpc2FibGVIYWxmRHVwbGV4CiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTIzMDUsNyArMjMwNSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgaWYgU2luZ2xlIFdpcmUgSGFsZi1EdXBsZXggbW9kZSBpcyBlbmFibGVkCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfSEFMRkRVUExFWF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0hBTEZEVVBMRVhfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgSGFsZi1EdXBsZXggbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBIRFNFTCAgICAgICAgIExMX1VTQVJUX0lzRW5hYmxlZEhhbGZEdXBsZXgKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMjMyNSw3ICsyMzI1LDcgQEAKICAgKi8KIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFNQSSBTeW5jaHJvbm91cyBTbGF2ZSBtb2RlCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfU1BJX1NMQVZFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfU1BJX1NMQVZFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNQSSBTbGF2ZSBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgU0xWRU4gICAgICAgICBMTF9VU0FSVF9FbmFibGVTUElTbGF2ZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yMzM4LDcgKzIzMzgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgU1BJIFN5bmNocm9ub3VzIFNsYXZlIG1vZGUKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9TUElfU0xBVkVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9TUElfU0xBVkVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU1BJIFNsYXZlIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBTTFZFTiAgICAgICAgIExMX1VTQVJUX0Rpc2FibGVTUElTbGF2ZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yMzUxLDcgKzIzNTEsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEluZGljYXRlIGlmICBTUEkgU3luY2hyb25vdXMgU2xhdmUgbW9kZSBpcyBlbmFibGVkCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfU1BJX1NMQVZFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfU1BJX1NMQVZFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNQSSBTbGF2ZSBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgU0xWRU4gICAgICAgICBMTF9VU0FSVF9Jc0VuYWJsZWRTUElTbGF2ZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yMzY0LDcgKzIzNjQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBTUEkgU2xhdmUgU2VsZWN0aW9uIHVzaW5nIE5TUyBpbnB1dCBwaW4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9TUElfU0xBVkVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9TUElfU0xBVkVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU1BJIFNsYXZlIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAbm90ZSAgIFNQSSBTbGF2ZSBTZWxlY3Rpb24gZGVwZW5kcyBvbiBOU1MgaW5wdXQgcGluCiAgICogICAgICAgICAoVGhlIHNsYXZlIGlzIHNlbGVjdGVkIHdoZW4gTlNTIGlzIGxvdyBhbmQgZGVzZWxlY3RlZCB3aGVuIE5TUyBpcyBoaWdoKS4KQEAgLTIzNzksNyArMjM3OSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBTUEkgU2xhdmUgU2VsZWN0aW9uIHVzaW5nIE5TUyBpbnB1dCBwaW4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9TUElfU0xBVkVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9TUElfU0xBVkVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU1BJIFNsYXZlIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAbm90ZSAgIFNQSSBTbGF2ZSB3aWxsIGJlIGFsd2F5cyBzZWxlY3RlZCBhbmQgTlNTIGlucHV0IHBpbiB3aWxsIGJlIGlnbm9yZWQuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgRElTX05TUyAgICAgICBMTF9VU0FSVF9EaXNhYmxlU1BJU2xhdmVTZWxlY3QKQEAgLTIzOTMsNyArMjM5Myw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgaWYgIFNQSSBTbGF2ZSBTZWxlY3Rpb24gZGVwZW5kcyBvbiBOU1MgaW5wdXQgcGluCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfU1BJX1NMQVZFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfU1BJX1NMQVZFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNQSSBTbGF2ZSBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgRElTX05TUyAgICAgICBMTF9VU0FSVF9Jc0VuYWJsZWRTUElTbGF2ZVNlbGVjdAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNDE0LDcgKzI0MTQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCBMSU4gQnJlYWsgRGV0ZWN0aW9uIExlbmd0aAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBMSU4gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBMQkRMICAgICAgICAgIExMX1VTQVJUX1NldExJTkJya0RldGVjdGlvbkxlbgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNDMwLDcgKzI0MzAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBMSU4gQnJlYWsgRGV0ZWN0aW9uIExlbmd0aAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBMSU4gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBMQkRMICAgICAgICAgIExMX1VTQVJUX0dldExJTkJya0RldGVjdGlvbkxlbgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNDQ1LDcgKzI0NDUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBMSU4gbW9kZQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBMSU4gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBMSU5FTiAgICAgICAgIExMX1VTQVJUX0VuYWJsZUxJTgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNDU4LDcgKzI0NTgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgTElOIG1vZGUKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9MSU5fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9MSU5fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgTElOIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgTElORU4gICAgICAgICBMTF9VU0FSVF9EaXNhYmxlTElOCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTI0NzEsNyArMjQ3MSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgaWYgTElOIG1vZGUgaXMgZW5hYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBMSU4gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBMSU5FTiAgICAgICAgIExMX1VTQVJUX0lzRW5hYmxlZExJTgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNDkyLDcgKzI0OTIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNldCBERURUIChEcml2ZXIgRW5hYmxlIERlLUFzc2VydGlvbiBUaW1lKSwgVGltZSB2YWx1ZSBleHByZXNzZWQgb24gNSBiaXRzIChbNDowXSBiaXRzKS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9EUklWRVJfRU5BQkxFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRFJJVkVSX0VOQUJMRV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBEcml2ZXIgRW5hYmxlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgREVEVCAgICAgICAgICBMTF9VU0FSVF9TZXRERURlYXNzZXJ0aW9uVGltZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNTA2LDcgKzI1MDYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBERURUIChEcml2ZXIgRW5hYmxlIERlLUFzc2VydGlvbiBUaW1lKQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0RSSVZFUl9FTkFCTEVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9EUklWRVJfRU5BQkxFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIERyaXZlciBFbmFibGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBERURUICAgICAgICAgIExMX1VTQVJUX0dldERFRGVhc3NlcnRpb25UaW1lCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTI1MTksNyArMjUxOSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgU2V0IERFQVQgKERyaXZlciBFbmFibGUgQXNzZXJ0aW9uIFRpbWUpLCBUaW1lIHZhbHVlIGV4cHJlc3NlZCBvbiA1IGJpdHMgKFs0OjBdIGJpdHMpLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0RSSVZFUl9FTkFCTEVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9EUklWRVJfRU5BQkxFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIERyaXZlciBFbmFibGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBERUFUICAgICAgICAgIExMX1VTQVJUX1NldERFQXNzZXJ0aW9uVGltZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNTMzLDcgKzI1MzMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBERUFUIChEcml2ZXIgRW5hYmxlIEFzc2VydGlvbiBUaW1lKQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0RSSVZFUl9FTkFCTEVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9EUklWRVJfRU5BQkxFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIERyaXZlciBFbmFibGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBERUFUICAgICAgICAgIExMX1VTQVJUX0dldERFQXNzZXJ0aW9uVGltZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNTQ2LDcgKzI1NDYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBEcml2ZXIgRW5hYmxlIChERSkgTW9kZQotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0RSSVZFUl9FTkFCTEVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9EUklWRVJfRU5BQkxFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIERyaXZlciBFbmFibGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBERU0gICAgICAgICAgIExMX1VTQVJUX0VuYWJsZURFTW9kZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNTU5LDcgKzI1NTksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgRHJpdmVyIEVuYWJsZSAoREUpIE1vZGUKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9EUklWRVJfRU5BQkxFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRFJJVkVSX0VOQUJMRV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBEcml2ZXIgRW5hYmxlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgREVNICAgICAgICAgICBMTF9VU0FSVF9EaXNhYmxlREVNb2RlCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTI1NzIsNyArMjU3Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgSW5kaWNhdGUgaWYgRHJpdmVyIEVuYWJsZSAoREUpIE1vZGUgaXMgZW5hYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0RSSVZFUl9FTkFCTEVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9EUklWRVJfRU5BQkxFX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIERyaXZlciBFbmFibGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBERU0gICAgICAgICAgIExMX1VTQVJUX0lzRW5hYmxlZERFTW9kZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNTg1LDcgKzI1ODUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFNlbGVjdCBEcml2ZXIgRW5hYmxlIFBvbGFyaXR5Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRFJJVkVSX0VOQUJMRV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0RSSVZFUl9FTkFCTEVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRHJpdmVyIEVuYWJsZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIERFUCAgICAgICAgICAgTExfVVNBUlRfU2V0REVTaWduYWxQb2xhcml0eQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNjAxLDcgKzI2MDEsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBEcml2ZXIgRW5hYmxlIFBvbGFyaXR5Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRFJJVkVSX0VOQUJMRV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0RSSVZFUl9FTkFCTEVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRHJpdmVyIEVuYWJsZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIERFUCAgICAgICAgICAgTExfVVNBUlRfR2V0REVTaWduYWxQb2xhcml0eQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0yNjY1LDcgKzI2NjUsNyBAQAogICAqICAgICAgICAgICAtIElSRU4gYml0IGluIHRoZSBVU0FSVF9DUjMgcmVnaXN0ZXIsCiAgICogICAgICAgICAgIC0gSERTRUwgYml0IGluIHRoZSBVU0FSVF9DUjMgcmVnaXN0ZXIuCiAgICogICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsc28gc2V0cyB0aGUgVVNBUlQgaW4gU3luY2hyb25vdXMgbW9kZS4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVVNBUlRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU3luY2hyb25vdXMgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAbm90ZSAgIENhbGwgb2YgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGZvbGxvd2luZyBmdW5jdGlvbiBjYWxsIHNlcXVlbmNlIDoKICAgKiAgICAgICAgIC0gQ2xlYXIgTElORU4gaW4gQ1IyIHVzaW5nIEByZWYgTExfVVNBUlRfRGlzYWJsZUxJTigpIGZ1bmN0aW9uCkBAIC0yNzA0LDcgKzI3MDQsNyBAQAogICAqICAgICAgICAgICAtIElSRU4gYml0IGluIHRoZSBVU0FSVF9DUjMgcmVnaXN0ZXIsCiAgICogICAgICAgICAgIC0gSERTRUwgYml0IGluIHRoZSBVU0FSVF9DUjMgcmVnaXN0ZXIuCiAgICogICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsc28gc2V0IHRoZSBVQVJUL1VTQVJUIGluIExJTiBtb2RlLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBMSU4gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAbm90ZSAgIENhbGwgb2YgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGZvbGxvd2luZyBmdW5jdGlvbiBjYWxsIHNlcXVlbmNlIDoKICAgKiAgICAgICAgIC0gQ2xlYXIgQ0xLRU4gaW4gQ1IyIHVzaW5nIEByZWYgTExfVVNBUlRfRGlzYWJsZVNDTEtPdXRwdXQoKSBmdW5jdGlvbgpAQCAtMjc0NSw3ICsyNzQ1LDcgQEAKICAgKiAgICAgICAgICAgLSBTQ0VOIGJpdCBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLAogICAqICAgICAgICAgICAtIElSRU4gYml0IGluIHRoZSBVU0FSVF9DUjMgcmVnaXN0ZXIsCiAgICogICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsc28gc2V0cyB0aGUgVUFSVC9VU0FSVCBpbiBIYWxmIER1cGxleCBtb2RlLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0hBTEZEVVBMRVhfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9IQUxGRFVQTEVYX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEhhbGYtRHVwbGV4IG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQG5vdGUgICBDYWxsIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCBzZXF1ZW5jZSA6CiAgICogICAgICAgICAtIENsZWFyIExJTkVOIGluIENSMiB1c2luZyBAcmVmIExMX1VTQVJUX0Rpc2FibGVMSU4oKSBmdW5jdGlvbgpAQCAtMjc4NSw3ICsyNzg1LDcgQEAKICAgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gYWxzbyBjb25maWd1cmVzIFN0b3AgYml0cyB0byAxLjUgYml0cyBhbmQKICAgKiAgICAgICAgIHNldHMgdGhlIFVTQVJUIGluIFNtYXJ0Y2FyZCBtb2RlIChTQ0VOIGJpdCkuCiAgICogICAgICAgICBDbG9jayBPdXRwdXQgaXMgYWxzbyBlbmFibGVkIChDTEtFTikuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQG5vdGUgICBDYWxsIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCBzZXF1ZW5jZSA6CiAgICogICAgICAgICAtIENsZWFyIExJTkVOIGluIENSMiB1c2luZyBAcmVmIExMX1VTQVJUX0Rpc2FibGVMSU4oKSBmdW5jdGlvbgpAQCAtMjgyOCw3ICsyODI4LDcgQEAKICAgKiAgICAgICAgICAgLSBTQ0VOIGJpdCBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLAogICAqICAgICAgICAgICAtIEhEU0VMIGJpdCBpbiB0aGUgVVNBUlRfQ1IzIHJlZ2lzdGVyLgogICAqICAgICAgICAgVGhpcyBmdW5jdGlvbiBhbHNvIHNldHMgdGhlIFVBUlQvVVNBUlQgaW4gSVJEQSBtb2RlIChJUkVOIGJpdCkuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX0lSREFfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfSVJEQV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBJckRBIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQG5vdGUgICBDYWxsIG9mIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCBzZXF1ZW5jZSA6CiAgICogICAgICAgICAtIENsZWFyIExJTkVOIGluIENSMiB1c2luZyBAcmVmIExMX1VTQVJUX0Rpc2FibGVMSU4oKSBmdW5jdGlvbgpAQCAtMjk2Niw3ICsyOTY2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiB0aGUgVVNBUlQgUmVhZCBEYXRhIFJlZ2lzdGVyIG9yIFVTQVJUIFJYIEZJRk8gTm90IEVtcHR5IEZsYWcgaXMgc2V0IG9yIG5vdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgSVNSICAgICAgICAgIFJYTkVfUlhGTkUgICAgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1JYTkVfUlhGTkUKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMjk5Myw3ICsyOTkzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiB0aGUgVVNBUlQgVHJhbnNtaXQgRGF0YSBSZWdpc3RlciBFbXB0eSBvciBVU0FSVCBUWCBGSUZPIE5vdCBGdWxsIEZsYWcgaXMgc2V0IG9yIG5vdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgSVNSICAgICAgICAgIFRYRV9UWEZORiAgICAgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1RYRV9UWEZORgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zMDA2LDcgKzMwMDYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBMSU4gQnJlYWsgRGV0ZWN0aW9uIEZsYWcgaXMgc2V0IG9yIG5vdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBMSU4gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIElTUiAgICAgICAgICBMQkRGICAgICAgICAgIExMX1VTQVJUX0lzQWN0aXZlRmxhZ19MQkQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzAxOSw3ICszMDE5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiB0aGUgVVNBUlQgQ1RTIGludGVycnVwdCBGbGFnIGlzIHNldCBvciBub3QKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9IV0ZMT1dfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9IV0ZMT1dfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgSGFyZHdhcmUgRmxvdyBjb250cm9sIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBJU1IgICAgICAgICAgQ1RTSUYgICAgICAgICBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfbkNUUwogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zMDMyLDcgKzMwMzIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBDVFMgRmxhZyBpcyBzZXQgb3Igbm90Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfSFdGTE9XX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfSFdGTE9XX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEhhcmR3YXJlIEZsb3cgY29udHJvbCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgSVNSICAgICAgICAgIENUUyAgICAgICAgICAgTExfVVNBUlRfSXNBY3RpdmVGbGFnX0NUUwogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zMDU2LDcgKzMwNTYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBFbmQgT2YgQmxvY2sgRmxhZyBpcyBzZXQgb3Igbm90Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBJU1IgICAgICAgICAgRU9CRiAgICAgICAgICBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfRU9CCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTMwNjksNyArMzA2OSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFNQSSBTbGF2ZSBVbmRlcnJ1biBlcnJvciBmbGFnIGlzIHNldCBvciBub3QKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9TUElfU0xBVkVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9TUElfU0xBVkVfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU1BJIFNsYXZlIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIElTUiAgICAgICAgICBVRFIgICAgICAgICAgIExMX1VTQVJUX0lzQWN0aXZlRmxhZ19VRFIKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzA4Miw3ICszMDgyLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiB0aGUgVVNBUlQgQXV0by1CYXVkIFJhdGUgRXJyb3IgRmxhZyBpcyBzZXQgb3Igbm90Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VTQVJUX0FVVE9CQVVEUkFURV9ERVRFQ1RJT05fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVVNBUlRfQVVUT0JBVURSQVRFX0RFVEVDVElPTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBBdXRvIEJhdWQgUmF0ZSBkZXRlY3Rpb24gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIElTUiAgICAgICAgICBBQlJFICAgICAgICAgIExMX1VTQVJUX0lzQWN0aXZlRmxhZ19BQlJFCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTMwOTUsNyArMzA5NSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFVTQVJUIEF1dG8tQmF1ZCBSYXRlIEZsYWcgaXMgc2V0IG9yIG5vdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VU0FSVF9BVVRPQkFVRFJBVEVfREVURUNUSU9OX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VTQVJUX0FVVE9CQVVEUkFURV9ERVRFQ1RJT05fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgQXV0byBCYXVkIFJhdGUgZGV0ZWN0aW9uIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBJU1IgICAgICAgICAgQUJSRiAgICAgICAgICBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfQUJSCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTMxNTIsNyArMzE1Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFVTQVJUIFdha2UgVXAgZnJvbSBzdG9wIG1vZGUgRmxhZyBpcyBzZXQgb3Igbm90Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFdha2UtdXAgZnJvbSBTdG9wIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIElTUiAgICAgICAgICBXVUYgICAgICAgICAgIExMX1VTQVJUX0lzQWN0aXZlRmxhZ19XS1VQCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTMxODcsNyArMzE4Nyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFVTQVJUIFRYIEZJRk8gRW1wdHkgRmxhZyBpcyBzZXQgb3Igbm90Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBJU1IgICAgICAgICAgVFhGRSAgICAgICAgICBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfVFhGRQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zMjAwLDcgKzMyMDAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBSWCBGSUZPIEZ1bGwgRmxhZyBpcyBzZXQgb3Igbm90Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBJU1IgICAgICAgICAgUlhGRiAgICAgICAgICBMTF9VU0FSVF9Jc0FjdGl2ZUZsYWdfUlhGRgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zMjI0LDcgKzMyMjQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBUWCBGSUZPIFRocmVzaG9sZCBGbGFnIGlzIHNldCBvciBub3QKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIElTUiAgICAgICAgICBUWEZUICAgICAgICAgIExMX1VTQVJUX0lzQWN0aXZlRmxhZ19UWEZUCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTMyMzcsNyArMzIzNyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFVTQVJUIFJYIEZJRk8gVGhyZXNob2xkIEZsYWcgaXMgc2V0IG9yIG5vdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgSVNSICAgICAgICAgIFJYRlQgICAgICAgICAgTExfVVNBUlRfSXNBY3RpdmVGbGFnX1JYRlQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzMwNSw3ICszMzA1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDbGVhciBUWCBGSUZPIEVtcHR5IEZsYWcKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIElDUiAgICAgICAgICBUWEZFQ0YgICAgICAgIExMX1VTQVJUX0NsZWFyRmxhZ19UWEZFCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTMzNDAsNyArMzM0MCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgTElOIEJyZWFrIERldGVjdGlvbiBGbGFnCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfTElOX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfTElOX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIExJTiBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgSUNSICAgICAgICAgIExCRENGICAgICAgICAgTExfVVNBUlRfQ2xlYXJGbGFnX0xCRAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zMzUzLDcgKzMzNTMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIENUUyBJbnRlcnJ1cHQgRmxhZwotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBIYXJkd2FyZSBGbG93IGNvbnRyb2wgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIElDUiAgICAgICAgICBDVFNDRiAgICAgICAgIExMX1VTQVJUX0NsZWFyRmxhZ19uQ1RTCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTMzNzcsNyArMzM3Nyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2xlYXIgRW5kIE9mIEJsb2NrIEZsYWcKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTbWFydGNhcmQgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIElDUiAgICAgICAgICBFT0JDRiAgICAgICAgIExMX1VTQVJUX0NsZWFyRmxhZ19FT0IKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzM5MCw3ICszMzkwLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDbGVhciBTUEkgU2xhdmUgVW5kZXJydW4gRmxhZwotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX1NQSV9TTEFWRV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX1NQSV9TTEFWRV9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTUEkgU2xhdmUgbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgSUNSICAgICAgICAgIFVEUkNGICAgICAgICAgTExfVVNBUlRfQ2xlYXJGbGFnX1VEUgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zNDE0LDcgKzM0MTQsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENsZWFyIFdha2UgVXAgZnJvbSBzdG9wIG1vZGUgRmxhZwotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBXYWtlLXVwIGZyb20gU3RvcCBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBJQ1IgICAgICAgICAgV1VDRiAgICAgICAgICBMTF9VU0FSVF9DbGVhckZsYWdfV0tVUAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zNDQ5LDcgKzM0NDksNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBSWCBOb3QgRW1wdHkgYW5kIFJYIEZJRk8gTm90IEVtcHR5IEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICBSWE5FSUVfUlhGTkVJRSAgTExfVVNBUlRfRW5hYmxlSVRfUlhORV9SWEZORQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zNDc2LDcgKzM0NzYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBUWCBFbXB0eSBhbmQgVFggRklGTyBOb3QgRnVsbCBJbnRlcnJ1cHQKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgIFRYRUlFX1RYRk5GSUUgIExMX1VTQVJUX0VuYWJsZUlUX1RYRV9UWEZORgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zNTIyLDcgKzM1MjIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBFbmQgT2YgQmxvY2sgSW50ZXJydXB0Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgRU9CSUUgICAgICAgICBMTF9VU0FSVF9FbmFibGVJVF9FT0IKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzUzNSw3ICszNTM1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgVFggRklGTyBFbXB0eSBJbnRlcnJ1cHQKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBUWEZFSUUgICAgICAgIExMX1VTQVJUX0VuYWJsZUlUX1RYRkUKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzU1OSw3ICszNTU5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgTElOIEJyZWFrIERldGVjdGlvbiBJbnRlcnJ1cHQKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9MSU5fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9MSU5fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgTElOIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjIgICAgICAgICAgTEJESUUgICAgICAgICBMTF9VU0FSVF9FbmFibGVJVF9MQkQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzU4Nyw3ICszNTg3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgQ1RTIEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0hXRkxPV19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBIYXJkd2FyZSBGbG93IGNvbnRyb2wgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBDVFNJRSAgICAgICAgIExMX1VTQVJUX0VuYWJsZUlUX0NUUwogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zNjAwLDcgKzM2MDAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBXYWtlIFVwIGZyb20gU3RvcCBNb2RlIEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBXYWtlLXVwIGZyb20gU3RvcCBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgV1VGSUUgICAgICAgICBMTF9VU0FSVF9FbmFibGVJVF9XS1VQCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTM2MTMsNyArMzYxMyw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIFRYIEZJRk8gVGhyZXNob2xkIEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFRYRlRJRSAgICAgICAgTExfVVNBUlRfRW5hYmxlSVRfVFhGVAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zNjI2LDcgKzM2MjYsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIEVuYWJsZSBTbWFydGNhcmQgVHJhbnNtaXNzaW9uIENvbXBsZXRlIEJlZm9yZSBHdWFyZCBUaW1lIEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNtYXJ0Y2FyZCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFRDQkdUSUUgICAgICAgTExfVVNBUlRfRW5hYmxlSVRfVENCR1QKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzYzOSw3ICszNjM5LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBFbmFibGUgUlggRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgUlhGVElFICAgICAgICBMTF9VU0FSVF9FbmFibGVJVF9SWEZUCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTM2NjYsNyArMzY2Niw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBSWCBOb3QgRW1wdHkgYW5kIFJYIEZJRk8gTm90IEVtcHR5IEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICBSWE5FSUVfUlhGTkVJRSAgTExfVVNBUlRfRGlzYWJsZUlUX1JYTkVfUlhGTkUKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzY5Myw3ICszNjkzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIFRYIEVtcHR5IGFuZCBUWCBGSUZPIE5vdCBGdWxsIEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICBUWEVJRV9UWEZORklFICBMTF9VU0FSVF9EaXNhYmxlSVRfVFhFX1RYRk5GCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTM3MzksNyArMzczOSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBFbmQgT2YgQmxvY2sgSW50ZXJydXB0Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgU21hcnRjYXJkIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgRU9CSUUgICAgICAgICBMTF9VU0FSVF9EaXNhYmxlSVRfRU9CCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTM3NTIsNyArMzc1Miw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBUWCBGSUZPIEVtcHR5IEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFRYRkVJRSAgICAgICAgTExfVVNBUlRfRGlzYWJsZUlUX1RYRkUKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzc2NSw3ICszNzY1LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIFJYIEZJRk8gRnVsbCBJbnRlcnJ1cHQKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBSWEZGSUUgICAgICAgIExMX1VTQVJUX0Rpc2FibGVJVF9SWEZGCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTM3NzgsNyArMzc3OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBMSU4gQnJlYWsgRGV0ZWN0aW9uIEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBMSU4gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBMQkRJRSAgICAgICAgIExMX1VTQVJUX0Rpc2FibGVJVF9MQkQKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtMzgwNiw3ICszODA2LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBEaXNhYmxlIENUUyBJbnRlcnJ1cHQKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9IV0ZMT1dfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9IV0ZMT1dfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgSGFyZHdhcmUgRmxvdyBjb250cm9sIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgQ1RTSUUgICAgICAgICBMTF9VU0FSVF9EaXNhYmxlSVRfQ1RTCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTM4MTksNyArMzgxOSw3IEBACiAKIC8qKgogICAqIEBicmllZiAgRGlzYWJsZSBXYWtlIFVwIGZyb20gU3RvcCBNb2RlIEludGVycnVwdAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX1dBS0VVUF9GUk9NU1RPUF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBXYWtlLXVwIGZyb20gU3RvcCBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgV1VGSUUgICAgICAgICBMTF9VU0FSVF9EaXNhYmxlSVRfV0tVUAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zODMyLDcgKzM4MzIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgVFggRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgVFhGVElFICAgICAgICBMTF9VU0FSVF9EaXNhYmxlSVRfVFhGVAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zODQ1LDcgKzM4NDUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgU21hcnRjYXJkIFRyYW5zbWlzc2lvbiBDb21wbGV0ZSBCZWZvcmUgR3VhcmQgVGltZSBJbnRlcnJ1cHQKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTbWFydGNhcmQgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBUQ0JHVElFICAgICAgIExMX1VTQVJUX0Rpc2FibGVJVF9UQ0JHVAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zODU4LDcgKzM4NTgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIERpc2FibGUgUlggRklGTyBUaHJlc2hvbGQgSW50ZXJydXB0Ci0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjMgICAgICAgICAgUlhGVElFICAgICAgICBMTF9VU0FSVF9EaXNhYmxlSVRfUlhGVAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zODg1LDcgKzM4ODUsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBSWCBOb3QgRW1wdHkgYW5kIFVTQVJUIFJYIEZJRk8gTm90IEVtcHR5IEludGVycnVwdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICBSWE5FSUVfUlhGTkVJRSAgTExfVVNBUlRfSXNFbmFibGVkSVRfUlhORV9SWEZORQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zOTEyLDcgKzM5MTIsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBUWCBFbXB0eSBhbmQgVVNBUlQgVFggRklGTyBOb3QgRnVsbCBJbnRlcnJ1cHQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgVFhFSUVfVFhGTkZJRSAgTExfVVNBUlRfSXNFbmFibGVkSVRfVFhFX1RYRk5GCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTM5NTgsNyArMzk1OCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFVTQVJUIEVuZCBPZiBCbG9jayBJbnRlcnJ1cHQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1NNQVJUQ0FSRF9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBTbWFydGNhcmQgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMSAgICAgICAgICBFT0JJRSAgICAgICAgIExMX1VTQVJUX0lzRW5hYmxlZElUX0VPQgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zOTcxLDcgKzM5NzEsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBUWCBGSUZPIEVtcHR5IEludGVycnVwdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAogICAqICAgICAgICAgRklGTyBtb2RlIGZlYXR1cmUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBVU0FSVHggaW5zdGFuY2UuCiAgICogQHJtdG9sbCBDUjEgICAgICAgICAgVFhGRUlFICAgICAgICBMTF9VU0FSVF9Jc0VuYWJsZWRJVF9UWEZFCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTM5ODQsNyArMzk4NCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFVTQVJUIFJYIEZJRk8gRnVsbCBJbnRlcnJ1cHQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IxICAgICAgICAgIFJYRkZJRSAgICAgICAgTExfVVNBUlRfSXNFbmFibGVkSVRfUlhGRgogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC0zOTk3LDcgKzM5OTcsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBMSU4gQnJlYWsgRGV0ZWN0aW9uIEludGVycnVwdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VQVJUX0xJTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBMSU4gZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMiAgICAgICAgICBMQkRJRSAgICAgICAgIExMX1VTQVJUX0lzRW5hYmxlZElUX0xCRAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC00MDIxLDcgKzQwMjEsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBVU0FSVCBDVFMgSW50ZXJydXB0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfSFdGTE9XX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfSFdGTE9XX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEhhcmR3YXJlIEZsb3cgY29udHJvbCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIENUU0lFICAgICAgICAgTExfVVNBUlRfSXNFbmFibGVkSVRfQ1RTCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKQEAgLTQwMzQsNyArNDAzNCw3IEBACiAKIC8qKgogICAqIEBicmllZiAgQ2hlY2sgaWYgdGhlIFVTQVJUIFdha2UgVXAgZnJvbSBTdG9wIE1vZGUgSW50ZXJydXB0IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi0gICogQG5vdGUgICBNYWNybyBAcmVmIElTX1VBUlRfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfV0FLRVVQX0ZST01TVE9QX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFdha2UtdXAgZnJvbSBTdG9wIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAcm10b2xsIENSMyAgICAgICAgICBXVUZJRSAgICAgICAgIExMX1VTQVJUX0lzRW5hYmxlZElUX1dLVVAKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtNDA0Nyw3ICs0MDQ3LDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiBVU0FSVCBUWCBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFRYRlRJRSAgICAgICAgTExfVVNBUlRfSXNFbmFibGVkSVRfVFhGVAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC00MDYwLDcgKzQwNjAsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIENoZWNrIGlmIHRoZSBTbWFydGNhcmQgVHJhbnNtaXNzaW9uIENvbXBsZXRlIEJlZm9yZSBHdWFyZCBUaW1lIEludGVycnVwdCBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19TTUFSVENBUkRfSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfU01BUlRDQVJEX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIFNtYXJ0Y2FyZCBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFRDQkdUSUUgICAgICAgTExfVVNBUlRfSXNFbmFibGVkSVRfVENCR1QKICAgKiBAcGFyYW0gIFVTQVJUeCBVU0FSVCBJbnN0YW5jZQpAQCAtNDA3Myw3ICs0MDczLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBDaGVjayBpZiBVU0FSVCBSWCBGSUZPIFRocmVzaG9sZCBJbnRlcnJ1cHQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgQ1IzICAgICAgICAgIFJYRlRJRSAgICAgICAgTExfVVNBUlRfSXNFbmFibGVkSVRfUlhGVAogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC00MjAzLDcgKzQyMDMsNyBAQAogICAqLwogX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IExMX1VTQVJUX0RNQV9HZXRSZWdBZGRyKFVTQVJUX1R5cGVEZWYgKlVTQVJUeCwgdWludDMyX3QgRGlyZWN0aW9uKQogewotICByZWdpc3RlciB1aW50MzJfdCBkYXRhX3JlZ19hZGRyOworICB1aW50MzJfdCBkYXRhX3JlZ19hZGRyOwogCiAgIGlmIChEaXJlY3Rpb24gPT0gTExfVVNBUlRfRE1BX1JFR19EQVRBX1RSQU5TTUlUKQogICB7CkBAIC00MjgzLDcgKzQyODMsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJlcXVlc3QgYW4gQXV0b21hdGljIEJhdWQgUmF0ZSBtZWFzdXJlbWVudCBvbiBuZXh0IHJlY2VpdmVkIGRhdGEgZnJhbWUKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVVNBUlRfQVVUT0JBVURSQVRFX0RFVEVDVElPTl9JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CisgICogQG5vdGUgICBNYWNybyBJU19VU0FSVF9BVVRPQkFVRFJBVEVfREVURUNUSU9OX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEF1dG8gQmF1ZCBSYXRlIGRldGVjdGlvbiBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgUlFSICAgICAgICAgIEFCUlJRICAgICAgICAgTExfVVNBUlRfUmVxdWVzdEF1dG9CYXVkUmF0ZQogICAqIEBwYXJhbSAgVVNBUlR4IFVTQVJUIEluc3RhbmNlCkBAIC00MzE4LDcgKzQzMTgsNyBAQAogCiAvKioKICAgKiBAYnJpZWYgIFJlcXVlc3QgYSBSZWNlaXZlIERhdGEgYW5kIEZJRk8gZmx1c2gKLSAgKiBAbm90ZSAgIE1hY3JvIEByZWYgSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKKyAgKiBAbm90ZSAgIE1hY3JvIElTX1VBUlRfRklGT19JTlNUQU5DRShVU0FSVHgpIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90CiAgICogICAgICAgICBGSUZPIG1vZGUgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFVTQVJUeCBpbnN0YW5jZS4KICAgKiBAbm90ZSAgIEFsbG93cyB0byBkaXNjYXJkIHRoZSByZWNlaXZlZCBkYXRhIHdpdGhvdXQgcmVhZGluZyB0aGVtLCBhbmQgYXZvaWQgYW4gb3ZlcnJ1bgogICAqICAgICAgICAgY29uZGl0aW9uLgpAQCAtNDMzMyw3ICs0MzMzLDcgQEAKIAogLyoqCiAgICogQGJyaWVmICBSZXF1ZXN0IGEgVHJhbnNtaXQgZGF0YSBhbmQgRklGTyBmbHVzaAotICAqIEBub3RlICAgTWFjcm8gQHJlZiBJU19VQVJUX0ZJRk9fSU5TVEFOQ0UoVVNBUlR4KSBjYW4gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIG9yIG5vdAorICAqIEBub3RlICAgTWFjcm8gSVNfVUFSVF9GSUZPX0lOU1RBTkNFKFVTQVJUeCkgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QKICAgKiAgICAgICAgIEZJRk8gbW9kZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCBieSB0aGUgVVNBUlR4IGluc3RhbmNlLgogICAqIEBybXRvbGwgUlFSICAgICAgICAgIFRYRlJRICAgICAgICAgTExfVVNBUlRfUmVxdWVzdFR4RGF0YUZsdXNoCiAgICogQHBhcmFtICBVU0FSVHggVVNBUlQgSW5zdGFuY2UKZGlmZiAtLWdpdCBhL0luYy9zdG0zMmg3eHhfbGxfdXNiLmggYi9JbmMvc3RtMzJoN3h4X2xsX3VzYi5oCmluZGV4IDk5YjU3MjUuLjg5NzBjZmIgMTAwNjQ0Ci0tLSBhL0luYy9zdG0zMmg3eHhfbGxfdXNiLmgKKysrIGIvSW5jL3N0bTMyaDd4eF9sbF91c2IuaApAQCAtMTU1LDcgKzE1NSw3IEBACiAKIHR5cGVkZWYgc3RydWN0CiB7Ci0gIHVpbnQ4X3QgICBkZXZfYWRkciA7ICAgICAgICAgIC8qITwgVVNCIGRldmljZSBhZGRyZXNzLgorICB1aW50OF90ICAgZGV2X2FkZHI7ICAgICAgICAgICAvKiE8IFVTQiBkZXZpY2UgYWRkcmVzcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gTWluX0RhdGEgPSAxIGFuZCBNYXhfRGF0YSA9IDI1NSAgICAqLwogCiAgIHVpbnQ4X3QgICBjaF9udW07ICAgICAgICAgICAgIC8qITwgSG9zdCBjaGFubmVsIG51bWJlci4KQEAgLTE5OSwxMCArMTk5LDEwIEBACiAKICAgdWludDMyX3QgIEVyckNudDsgICAgICAgICAgICAgLyohPCBIb3N0IGNoYW5uZWwgZXJyb3IgY291bnQuKi8KIAotICBVU0JfT1RHX1VSQlN0YXRlVHlwZURlZiAgdXJiX3N0YXRlOyAgLyohPCBVUkIgc3RhdGUuCisgIFVTQl9PVEdfVVJCU3RhdGVUeXBlRGVmIHVyYl9zdGF0ZTsgIC8qITwgVVJCIHN0YXRlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgVVNCX09UR19VUkJTdGF0ZVR5cGVEZWYgKi8KIAotICBVU0JfT1RHX0hDU3RhdGVUeXBlRGVmICAgc3RhdGU7ICAgICAvKiE8IEhvc3QgQ2hhbm5lbCBzdGF0ZS4KKyAgVVNCX09UR19IQ1N0YXRlVHlwZURlZiBzdGF0ZTsgICAgICAgLyohPCBIb3N0IENoYW5uZWwgc3RhdGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIFVTQl9PVEdfSENTdGF0ZVR5cGVEZWYgICAqLwogfSBVU0JfT1RHX0hDVHlwZURlZjsKICNlbmRpZiAvKiBkZWZpbmVkIChVU0JfT1RHX0ZTKSB8fCBkZWZpbmVkIChVU0JfT1RHX0hTKSAqLwpAQCAtMjM3LDExICsyMzcsMTEgQEAKIC8qKiBAZGVmZ3JvdXAgVVNCX0xMIERldmljZSBTcGVlZAogICAqIEB7CiAgICovCi0jZGVmaW5lIFVTQkRfSFNfU1BFRUQgICAgICAgICAgICAgICAwVQotI2RlZmluZSBVU0JEX0hTSU5GU19TUEVFRCAgICAgICAgICAgMVUKLSNkZWZpbmUgVVNCSF9IU19TUEVFRCAgICAgICAgICAgICAgIDBVCi0jZGVmaW5lIFVTQkRfRlNfU1BFRUQgICAgICAgICAgICAgICAyVQotI2RlZmluZSBVU0JIX0ZTX1NQRUVEICAgICAgICAgICAgICAgMVUKKyNkZWZpbmUgVVNCRF9IU19TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMFUKKyNkZWZpbmUgVVNCRF9IU0lORlNfU1BFRUQgICAgICAgICAgICAgICAgICAgICAgMVUKKyNkZWZpbmUgVVNCSF9IU19TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMFUKKyNkZWZpbmUgVVNCRF9GU19TUEVFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMlUKKyNkZWZpbmUgVVNCSF9GU0xTX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgMVUKIC8qKgogICAqIEB9CiAgICovCkBAIC0yNjksMTEgKzI2OSwxMSBAQAogICAqIEB7CiAgICovCiAjaWZuZGVmIFVTQkRfSFNfVFJEVF9WQUxVRQotI2RlZmluZSBVU0JEX0hTX1RSRFRfVkFMVUUgICAgICAgICAgIDlVCisjZGVmaW5lIFVTQkRfSFNfVFJEVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgIDlVCiAjZW5kaWYgLyogVVNCRF9IU19UUkRUX1ZBTFVFICovCiAjaWZuZGVmIFVTQkRfRlNfVFJEVF9WQUxVRQotI2RlZmluZSBVU0JEX0ZTX1RSRFRfVkFMVUUgICAgICAgICAgIDVVCi0jZGVmaW5lIFVTQkRfREVGQVVMVF9UUkRUX1ZBTFVFICAgICAgOVUKKyNkZWZpbmUgVVNCRF9GU19UUkRUX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgNVUKKyNkZWZpbmUgVVNCRF9ERUZBVUxUX1RSRFRfVkFMVUUgICAgICAgICAgICAgICAgOVUKICNlbmRpZiAvKiBVU0JEX0hTX1RSRFRfVkFMVUUgKi8KIC8qKgogICAqIEB9CkBAIC0yODIsOSArMjgyLDkgQEAKIC8qKiBAZGVmZ3JvdXAgVVNCX0xMX0NvcmVfTVBTIFVTQiBMb3cgTGF5ZXIgQ29yZSBNUFMKICAgKiBAewogICAqLwotI2RlZmluZSBVU0JfT1RHX0hTX01BWF9QQUNLRVRfU0laRSAgICAgICAgICAgICA1MTJVCi0jZGVmaW5lIFVTQl9PVEdfRlNfTUFYX1BBQ0tFVF9TSVpFICAgICAgICAgICAgIDY0VQotI2RlZmluZSBVU0JfT1RHX01BWF9FUDBfU0laRSAgICAgICAgICAgICAgICAgICA2NFUKKyNkZWZpbmUgVVNCX09UR19IU19NQVhfUEFDS0VUX1NJWkUgICAgICAgICAgIDUxMlUKKyNkZWZpbmUgVVNCX09UR19GU19NQVhfUEFDS0VUX1NJWkUgICAgICAgICAgICA2NFUKKyNkZWZpbmUgVVNCX09UR19NQVhfRVAwX1NJWkUgICAgICAgICAgICAgICAgICA2NFUKIC8qKgogICAqIEB9CiAgICovCkBAIC00MDIsNyArNDAyLDcgQEAKICNkZWZpbmUgVVNCeF9IQyhpKSAgICAgICgoVVNCX09UR19Ib3N0Q2hhbm5lbFR5cGVEZWYgKikoVVNCeF9CQVNFICsgVVNCX09UR19IT1NUX0NIQU5ORUxfQkFTRSArICgoaSkgKiBVU0JfT1RHX0hPU1RfQ0hBTk5FTF9TSVpFKSkpCiAjZW5kaWYgLyogZGVmaW5lZCAoVVNCX09UR19GUykgfHwgZGVmaW5lZCAoVVNCX09UR19IUykgKi8KIAotI2RlZmluZSBFUF9BRERSX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZVCisjZGVmaW5lIEVQX0FERFJfTVNLICAgICAgICAgICAgICAgICAgICAgICAgICAweEZVCiAvKioKICAgKiBAfQogICAqLwpAQCAtNDY3LDEzICs0NjcsOSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0RyaXZlVmJ1cyhVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngsIHVpbnQ4X3Qgc3RhdGUpOwogdWludDMyX3QgICAgICAgICAgVVNCX0dldEhvc3RTcGVlZChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpOwogdWludDMyX3QgICAgICAgICAgVVNCX0dldEN1cnJlbnRGcmFtZShVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpOwotSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0hDX0luaXQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBjaF9udW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBkZXZfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qgc3BlZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBtcHMpOworSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0hDX0luaXQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90IGNoX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZXBudW0sIHVpbnQ4X3QgZGV2X2FkZHJlc3MsIHVpbnQ4X3Qgc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGVwX3R5cGUsIHVpbnQxNl90IG1wcyk7CiBIQUxfU3RhdHVzVHlwZURlZiBVU0JfSENfU3RhcnRYZmVyKFVTQl9PVEdfR2xvYmFsVHlwZURlZiAqVVNCeCwgVVNCX09UR19IQ1R5cGVEZWYgKmhjLCB1aW50OF90IGRtYSk7CiB1aW50MzJfdCAgICAgICAgICBVU0JfSENfUmVhZEludGVycnVwdChVU0JfT1RHX0dsb2JhbFR5cGVEZWYgKlVTQngpOwogSEFMX1N0YXR1c1R5cGVEZWYgVVNCX0hDX0hhbHQoVVNCX09UR19HbG9iYWxUeXBlRGVmICpVU0J4LCB1aW50OF90IGhjX251bSk7CmRpZmYgLS1naXQgYS9JbmMvc3RtMzJoN3h4X2xsX3V0aWxzLmggYi9JbmMvc3RtMzJoN3h4X2xsX3V0aWxzLmgKaW5kZXggM2RjNjBlNy4uMjgzMzE0OCAxMDA2NDQKLS0tIGEvSW5jL3N0bTMyaDd4eF9sbF91dGlscy5oCisrKyBiL0luYy9zdG0zMmg3eHhfbGxfdXRpbHMuaApAQCAtMTk5LDEyICsxOTksMTIgQEAKIC8qKiBAZGVmZ3JvdXAgVVRJTFNfRUNfUEFDS0FHRVRZUEUgUEFDS0FHRSBUWVBFCiAgICogQHsKICAgKi8KLSNpZiBkZWZpbmVkKFNZU0NGR19QS0dSX1BLRykKKyNpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0NTBVTCkKICNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfTFFGUDEwMCAgICAgICAgICAgIExMX1NZU0NGR19MUUZQMTAwX1BBQ0tBR0UgICAgICAgICAgLyohPCBMUUZQMTAwIHBhY2thZ2UgdHlwZSAgICAgICAgICAgICAqLwogI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9UUUZQMTQ0ICAgICAgICAgICAgTExfU1lTQ0ZHX1RRRlAxNDRfUEFDS0FHRSAgICAgICAgICAvKiE8IFRRRlAxNDQgcGFja2FnZSB0eXBlICAgICAgICAgICAgICovCiAjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1RRRlAxNzZfVUZCR0ExNzYgICBMTF9TWVNDRkdfVFFGUDE3Nl9VRkJHQTE3Nl9QQUNLQUdFIC8qITwgVFFGUDE3NiBvciBVRkJHQTE3NiBwYWNrYWdlIHR5cGUgKi8KICNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfTFFGUDIwOF9URkJHQTI0MCAgIExMX1NZU0NGR19MUUZQMjA4X1RGQkdBMjQwX1BBQ0tBR0UgLyohPCBMUUZQMjA4IG9yIFRGQkdBMjQwIHBhY2thZ2UgdHlwZSAqLwotI2Vsc2UKKyNlbGlmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMKQogI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9MUUZQNjQgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwVUwgICAgICAgICAgICAgICAgICAvKiE8IExRRlA2NCBwYWNrYWdlIHR5cGUgICAgICAgICAgICAgICovCiAjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1RGQkdBMTAwX0xRRlAxMDAgICAgICAgIDB4MDAwMDAwMDFVTCAgICAgICAgICAgICAgICAgIC8qITwgVEZCR0ExMDAgb3IgTFFGUDEwMCBwYWNrYWdlIHR5cGUgKi8KICNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfTFFGUDEwMF9TTVBTICAgICAgICAgICAgMHgwMDAwMDAwMlVMICAgICAgICAgICAgICAgICAgLyohPCBMUUZQMTAwICB3aXRoIFNNUFMgcGFja2FnZSB0eXBlICAqLwpAQCAtMjE4LDcgKzIxOCwxOSBAQAogI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE3Nl9TTVBTICAgICAgICAgICAweDAwMDAwMDBBVUwgICAgICAgICAgICAgICAgICAvKiE8IFVGQkdBMTc2IHdpdGggU01QUyBwYWNrYWdlIHR5cGUgICovCiAjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1RGQkdBMjE2ICAgICAgICAgICAgICAgIDB4MDAwMDAwMENVTCAgICAgICAgICAgICAgICAgIC8qITwgVEZCR0EyMTYgIHBhY2thZ2UgdHlwZSAgICAgICAgICAgKi8KICNkZWZpbmUgTExfVVRJTFNfUEFDS0FHRVRZUEVfVEZCR0EyMjUgICAgICAgICAgICAgICAgMHgwMDAwMDAwRVVMICAgICAgICAgICAgICAgICAgLyohPCBURkJHQTIyNSAgcGFja2FnZSB0eXBlICAgICAgICAgICAqLwotI2VuZGlmIC8qIFNZU0NGR19QS0dSX1BLRyAqLworI2VsaWYgKFNUTTMySDdfREVWX0lEID09IDB4NDgzVUwpCisjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1ZGUUZQTjY4X0lORFVTICAgICAgICAgTExfU1lTQ0ZHX1ZGUUZQTjY4X0lORFVTX1BBQ0tBR0UgICAgICAgICAvKiE8IFZGUUZQTjY4IEluZHVzdHJpYWwgcGFja2FnZSB0eXBlICovCisjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1RGQkdBMTAwX0xRRlAxMDAgICAgICAgTExfU1lTQ0ZHX1RGQkdBMTAwX0xRRlAxMDBfUEFDS0FHRSAgICAgICAvKiE8IFRGQkdBMTAwIG9yIExRRlAxMDAgTGVnYWN5IHBhY2thZ2UgdHlwZSAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9MUUZQMTAwX0lORFVTICAgICAgICAgIExMX1NZU0NGR19MUUZQMTAwX0lORFVTX1BBQ0tBR0UgICAgICAgICAgLyohPCBMUUZQMTAwIEluZHVzdHJpYWwgcGFja2FnZSB0eXBlICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9URkJHQTEwMF9JTkRVUyAgICAgICAgIExMX1NZU0NGR19URkJHQTEwMF9JTkRVU19QQUNLQUdFICAgICAgICAgLyohPCBURkJHQTEwMCBJbmR1c3RyaWFsIHBhY2thZ2UgdHlwZSAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9XTENTUDExNV9JTkRVUyAgICAgICAgIExMX1NZU0NGR19XTENTUDExNV9JTkRVU19QQUNLQUdFICAgICAgICAgLyohPCBXTENTUDExNSBJbmR1c3RyaWFsIHBhY2thZ2UgdHlwZSAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9MUUZQMTQ0ICAgICAgICAgICAgICAgIExMX1NZU0NGR19MUUZQMTQ0X1BBQ0tBR0UgICAgICAgICAgICAgICAgLyohPCBMUUZQMTQ0IExlZ2FjeSBwYWNrYWdlIHR5cGUgICAgICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE0NCAgICAgICAgICAgICAgIExMX1NZU0NGR19VRkJHQTE0NF9QQUNLQUdFICAgICAgICAgICAgICAgLyohPCBVRkJHQTE0NCBMZWdhY3kgcGFja2FnZSB0eXBlICAgICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9MUUZQMTQ0X0lORFVTICAgICAgICAgIExMX1NZU0NGR19MUUZQMTQ0X0lORFVTX1BBQ0tBR0UgICAgICAgICAgLyohPCBMUUZQMTQ0IEluZHVzdHJpYWwgcGFja2FnZSB0eXBlICAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE2OV9JTkRVUyAgICAgICAgIExMX1NZU0NGR19VRkJHQTE2OV9JTkRVU19QQUNLQUdFICAgICAgICAgLyohPCBVRkJHQTE2OSBJbmR1c3RyaWFsIHBhY2thZ2UgdHlwZSAqLworI2RlZmluZSBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE3NlBMVVMyNV9JTkRVUyAgIExMX1NZU0NGR19VRkJHQTE3NlBMVVMyNV9JTkRVU19QQUNLQUdFICAgLyohPCBVRkJHQTE3NisyNSBJbmR1c3RyaWFsIHBhY2thZ2UgdHlwZSAgICovCisjZGVmaW5lIExMX1VUSUxTX1BBQ0tBR0VUWVBFX0xRRlAxNzZfSU5EVVMgICAgICAgICAgTExfU1lTQ0ZHX0xRRlAxNzZfSU5EVVNfUEFDS0FHRSAgICAgICAgICAvKiE8IExRRlAxNzYgSW5kdXN0cmlhbCBwYWNrYWdlIHR5cGUgICovCisjZW5kaWYgLyogU1RNMzJIN19ERVZfSUQgPT0gMHg0NTBVTCAqLwogLyoqCiAgICogQH0KICAgKi8KQEAgLTI5Niw2ICszMDgsMTUgQEAKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE3Nl9TTVBTICAgKCopCiAgICogICAgICAgICBAYXJnIEByZWYgTExfVVRJTFNfUEFDS0FHRVRZUEVfVEZCR0EyMTYgICAoKikKICAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VVElMU19QQUNLQUdFVFlQRV9URkJHQTIyNSAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1ZGUUZQTjY4X0lORFVTICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfVVRJTFNfUEFDS0FHRVRZUEVfTFFGUDEwMF9JTkRVUyAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1RGQkdBMTAwX0lORFVTICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfVVRJTFNfUEFDS0FHRVRZUEVfV0xDU1AxMTVfSU5EVVMgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE0NCAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VUSUxTX1BBQ0tBR0VUWVBFX0xRRlAxNDRfSU5EVVMgICAoKikKKyAgKiAgICAgICAgIEBhcmcgQHJlZiBMTF9VVElMU19QQUNLQUdFVFlQRV9VRkJHQTE2OV9JTkRVUyAgICgqKQorICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VUSUxTX1BBQ0tBR0VUWVBFX1VGQkdBMTc2KzI1X0lORFVTICAgKCopCisgICogICAgICAgICBAYXJnIEByZWYgTExfVVRJTFNfUEFDS0FHRVRZUEVfTFFGUDE3Nl9JTkRVUyAgICgqKQogICAqCiAgICogICAgICAgICgqKSBQYWNrYWdlcyBhdmFpbGFibGUgb24gc29tZSBTVE0zMkg3IGxpbmVzIG9ubHkuCiAgICogQG5vdGUgICBGb3Igc29tZSBTTTMySDcgbGluZXMsIGVuYWJsaW5nIHRoZSBTWVNDRkcgY2xvY2sgaXMgbWFuZGF0b3J5LgpkaWZmIC0tZ2l0IGEvTGljZW5zZS5tZCBiL0xpY2Vuc2UubWQKaW5kZXggZDk1YzFkYi4uZjhhNTM4NSAxMDA2NDQKLS0tIGEvTGljZW5zZS5tZAorKysgYi9MaWNlbnNlLm1kCkBAIC0xLDMgKzEsMyBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzCiAKLVRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUTWljcm9lbGVjdHJvbmljcyB1bmRlciB0aGUgKipCU0QgMy1DbGF1c2UqKiBsaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhpcyBsaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgW2hlcmVdKGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlKS4KK1RoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUTWljcm9lbGVjdHJvbmljcyB1bmRlciB0aGUgKipCU0QgMy1DbGF1c2UqKiBsaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhpcyBsaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgW2hlcmVdKGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlKS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggMTAwM2VjNi4uM2U0MjUzYiAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMzgsOSArMzgsMTAgQEAKIAogSEFMIERyaXZlciBINyB8IENNU0lTIERldmljZSBINyB8IENNU0lTIENvcmUgfCBXYXMgZGVsaXZlcmVkIGluIHRoZSBmdWxsIE1DVSBwYWNrYWdlCiAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRhZyB2MS42LjAgfCBUYWcgdjEuNi4wIHwgVGFnIHY1LjQuMCB8IFRhZyB2MS41LjAgKGFuZCBmb2xsb3dpbmcsIGlmIGFueSwgdGlsbCBuZXh0IEhBTCB0YWcpCi1UYWcgdjEuNy4wIHwgVGFnIHYxLjcuMCB8IFRhZyB2NS40LjAgfCBUYWcgdjEuNi4wIChhbmQgZm9sbG93aW5nLCBpZiBhbnksIHRpbGwgbmV4dCBIQUwgdGFnKQotVGFnIHYxLjguMCB8IFRhZyB2MS44LjAgfCBUYWcgdjUuNC4wIHwgVGFnIHYxLjcuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgSEFMIHRhZykKK1RhZyB2MS42LjAgICAgfCBUYWcgdjEuNi4wICAgICAgfCBUYWcgdjUuNC4wIHwgVGFnIHYxLjUuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgSEFMIHRhZykKK1RhZyB2MS43LjAgICAgfCBUYWcgdjEuNy4wICAgICAgfCBUYWcgdjUuNC4wIHwgVGFnIHYxLjYuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgSEFMIHRhZykKK1RhZyB2MS44LjAgICAgfCBUYWcgdjEuOC4wICAgICAgfCBUYWcgdjUuNC4wIHwgVGFnIHYxLjcuMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgSEFMIHRhZykKK1RhZyB2MS45LjAgICAgfCBUYWcgdjEuOS4wICAgICAgfCBUYWcgdjUuNC4wIHwgVGFnIHYxLjguMCAoYW5kIGZvbGxvd2luZywgaWYgYW55LCB0aWxsIG5leHQgSEFMIHRhZykKIAogVGhlIGZ1bGwgKipTVE0zMkN1YmVINyoqIE1DVSBwYWNrYWdlIGlzIGF2YWlsYWJsZSBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL1NUTWljcm9lbGVjdHJvbmljcy9TVE0zMkN1YmVINykuCiAKZGlmZiAtLWdpdCBhL1JlbGVhc2VfTm90ZXMuaHRtbCBiL1JlbGVhc2VfTm90ZXMuaHRtbAppbmRleCAzNzQ3MmNiLi5mNGVkZTUyIDEwMDY0NAotLS0gYS9SZWxlYXNlX05vdGVzLmh0bWwKKysrIGIvUmVsZWFzZV9Ob3Rlcy5odG1sCkBAIC0zOCwxMCArMzgsNjE3IEBACiA8ZGl2IGNsYXNzPSJjb2wtc20tMTIgY29sLWxnLTgiPgogPGgxIGlkPSJ1cGRhdGUtaGlzdG9yeSI+PHN0cm9uZz5VcGRhdGUgSGlzdG9yeTwvc3Ryb25nPjwvaDE+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+Ci08aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uOSIgY2hlY2tlZCBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb245IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS44LjAgLyAxNC1GZWJydWFyeS0yMDIwPC9zdHJvbmc+PC9sYWJlbD4KKzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xMiIgY2hlY2tlZCBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xMiIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuOS4wIC8gMjktTWF5LTIwMjA8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KIDxoMiBpZD0ibWFpbi1jaGFuZ2VzIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgorPGxpPkZpcnN0IG9mZmljaWFsIHJlbGVhc2Ugb2YgdGhlIFNUTTMyQ3ViZUg3IEZpcm13YXJlIFBhY2thZ2Ugc3VwcG9ydGluZyA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBuZXcgZGV2aWNlczwvbGk+Cis8bGk+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBpbXBsZW1lbnRhdGlvbiBlbmhhbmNlbWVudHM8L2xpPgorPGxpPjxzdHJvbmc+SEFMPC9zdHJvbmc+OiBnZW5lcmljLCBVcGRhdGUgdG8gc3VwcG9ydCA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBuZXcgZGV2aWNlcworPHVsPgorPGxpPnN0bTMyaDd4eF9oYWwuaDoKKzx1bD4KKzxsaT5BZGQgU1lTQ0dGIGRlZmluZXMgZm9yIEFkYzIgQWx0ZXJuYXRlIENvbm5lY3Rpb24gb24gVmlucFsxNl0gYW5kIFZpbnBbMTddPC9saT4KKzxsaT5BZGQgSEFMX1NZU0NGR19BREMyQUxUX1JvdXQwQ29uZmlnIGFuZCBIQUxfU1lTQ0ZHX0FEQzJBTFRfUm91dDFDb25maWcgQVBJcyBhbGxvd2luZyB0byBjb25maWd1cmUgQWRjMiBBbHRlcm5hdGUgQ29ubmVjdGlvbiBvbiBWaW5wWzE2XSBvciBWaW5wWzE3XTxiciAvPgorPC9saT4KKzxsaT5VcGRhdGUgRVhUSSBsaW5lcyBkZWZpbml0aW9ucyBmb3IgPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4gZGV2aWNlczwvbGk+Cis8bGk+QWRkIF9fSEFMX0RCR01DVV9GUkVFWkVfSTJDNS9fX0hBTF9EQkdNQ1VfVW5GcmVlemVfSTJDNSwgX19IQUxfREJHTUNVX0ZSRUVaRV9USU0yMy9fX0hBTF9EQkdNQ1VfVW5GcmVlemVfVElNMjMgYW5kIF9fSEFMX0RCR01DVV9GUkVFWkVfVElNMjQvX19IQUxfREJHTUNVX1VuRnJlZXplX1RJTTI0IG1hY3JvczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2hhbF9jb25mX3RlbXBsYXRlLmg6Cis8dWw+Cis8bGk+QWRkIENPUkRJQyBhbmQgRk1BQyBtb2R1bGVzIGVuYWJsaW5nIChuZXcgcGVyaXBoZXJhbHMgaW4gU1RNMzJINzIzeHgvMzN4eC8yNXh4LzM1eHgvMzB4eCBkZXZpY2VzKTwvbGk+Cis8bGk+QWRkIENPUkRJQyBhbmQgRk1BQyByZWdpc3RlciBjYWxsYmFjayBlbmFibGluZzwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2hhbC5jOgorPHVsPgorPGxpPkFkZCBpbXBsZW1lbnRhdGlvbiBvZiBIQUxfU1lTQ0ZHX0FEQzJBTFRfUm91dDBDb25maWcgYW5kIEhBTF9TWVNDRkdfQURDMkFMVF9Sb3V0MUNvbmZpZyBBUElzIGltcGxlbWVudGF0aW9uIGFsbG93aW5nIHRvIGNvbmZpZ3VyZSBBZGMyIEFsdGVybmF0ZSBDb25uZWN0aW9uIG9uIFZpbnBbMTZdIG9yIFZpbnBbMTddPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBBREM8L3N0cm9uZz46IFVwZGF0ZWQgdG8gc3VwcG9ydCA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBkZXZpY2VzOiBBREMxLzIgKDE2IGJpdHMgQURDcyBpbiBEMiBkb21haW4pIGFuZCBBREMzICgxMiBCaXRzIEFEQyBpbiBEMyBkb21haW4pCis8dWw+Cis8bGk+MyBjb21waWxhdGlvbnMgZGVmaW5lcyBhcmUgdXNlZDoKKzx1bD4KKzxsaT5BRENfVkVSX1Y1X1Y5MCA6IGZvciA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBBRENzIDogQURDMS8yICgxNiBiaXRzIEFEQ3MgaW4gRDIgZG9tYWluKSBhbmQgQURDMyAoMTIgQml0cyBBREMgaW4gRDMgZG9tYWluKTwvbGk+Cis8bGk+QURDX1ZFUl9WNV8zOiBGb3IgU1RNMzJIN0F4L0J4IDogQURDMS8yICgxNiBiaXRzIEFEQ3MgaW4gRDIvQ0RDIGRvbWFpbik8L2xpPgorPGxpPkFEQ19WRVJfVjVfWDogRm9yIFNUTTMySDc0eC81eCA6IEFEQzEvMiAoMTYgYml0cyBBRENzIGluIEQyL0NEQyBkb21haW4pIGFuZCBBREMzICgxNiBCaXRzIEFEQyBpbiBEMyBkb21haW4pCis8dWw+Cis8bGk+c3VwcG9ydGluZyByZXYuWSBhbmQgcmV2LlYgZGV2aWNlczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+VGhlc2UgZGVmaW5lcyBhcmUgYXZhaWxhYmxlIG9uIGVhY2ggQ01TSVMgZGV2aWNlIGhlYWRlciBmaWxlIHN0bTMyaDcyM3h4Lmgvc3RtMzJoNzMzeHguaCDigKYvU1RNMzJIN2EzeHguaC9TVE0zMkg3YjN4eC5oL+KApi9zdG0zMmg3NDN4eC9zdG0zMmg3NzN4eOKApjwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgREZTRE08L3N0cm9uZz46Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF9kZnNkbS5oOgorPHVsPgorPGxpPlVzZSBjb25kaXRpb25hbCBkZWZpbmUgb24gU1RNMzJIN19ERVZfSUQgZm9yIGV4dGVybmFsIHRyaWdnZXJzIGRlZmluaXRpb24gaW5zdGVhZCBvZiBkZXZpY2UgUlBOIGRlZmluaXRpb25zIChTVE0zMkg3X0RFVl9JRCBkZWZpbmUgYXZhaWxhYmxlIG9uIENNU0lTIGRldmljZSBoZWFkZXIgZmlsZXMgZm9yIGVhY2ggU1RNMzJINyBsaW5lIDogPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4vNHgvNXgvQXgvQngpPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBETUE8L3N0cm9uZz46Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2xsX2JkbWEuaCwgc3RtMzJoN3h4X2xsX2RtYS5oIGFuZCBzdG0zMmg3eHhfbGxfZG1hbXV4Lmg6Cis8dWw+Cis8bGk+UmVtb3ZlIOKAnHJlZ2lzdGVy4oCdIOKAnEPigJ0ga2V5d29yZDogVGhlIHJlZ2lzdGVyIHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVyIHdhcyBkZXByZWNhdGVkIGluIEMrKzExIGFuZCByZW1vdmVkIGluIEMrKzE3PC9saT4KKzxsaT5BZGQgcmVxdWVzdHMgZGVmaW5pdGlvbnMgZm9yIEZNQUMsIENPUkRJQywgSTJDNSwgVElNMjMgYW5kIFRJTTI0IG5ldyBwZXJpcGhlcmFscyBhdmFpbGFibGUgb24gPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4gZGV2aWNlczwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwvTEwgQ09SRElDPC9zdHJvbmc+OgorPHVsPgorPGxpPk5ldyBIQUwgYW5kIExMIGRyaXZlcnMgdG8gc3VwcG9ydCBDT1JESUMgcGVyaXBoZXJhbCBhdmFpbGFibGUgb24gbmV3IDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IG5ldyBkZXZpY2VzPC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBDUllQPC9zdHJvbmc+OgorPHVsPgorPGxpPnN0bTMyaDd4eF9oYWxfY3J5cC5jLy5oIGFuZCBzdG0zMmg3eHhfaGFsX2NyeXBfZXguYzogVXBkYXRlIGRveHlnZW4gZG9jdW1lbnRhdGlvbjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgRENNSTwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX2RjbWkuYzoKKzx1bD4KKzxsaT5SZW1vdmUg4oCccmVnaXN0ZXLigJ0g4oCcQ+KAnSBrZXl3b3JkOiBUaGUgcmVnaXN0ZXIgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIgd2FzIGRlcHJlY2F0ZWQgaW4gQysrMTEgYW5kIHJlbW92ZWQgaW4gQysrMTc8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIEVUSDwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX2V0aC5oOgorPHVsPgorPGxpPjxwPlVwZGF0ZSBFVEhfRE1BRGVzY1R5cGVEZWYgZGVmaW5pdGlvbjogcmVtb3ZlIHVzZWxlc3Mgdm9sYXRpbGUgb2YgdGhlIEJhY2t1cEFkZHIwIGFuZCBCYWNrdXBBZGRyMSBmaWVsZHMgc2luY2UgdGhleSBhcmUgbm90IHVzZWQgYnkgRVRIIERNQS48L3A+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX2V0aC5jOgorPHVsPgorPGxpPkhBTF9FVEhfU3RhcnRfSVQ6Cis8dWw+Cis8bGk+TW92ZSB0aGUgdXBkYXRlIG9mIHRoZSBFVEggZ1N0YXRlIGFuZCBSeFN0YXRlIGFmdGVyIEVUSCBJVCBTdGFydC48L2xpPgorPGxpPlJlbW92ZSB1c2VsZXNzIElOQ1JfUlhfREVTQ19JTkRFWChkZXNjaW5kZXgsIDFVKSB3aGVuIGVuYWJsaW5nIEludGVycnVwdCBvbiBDb21wbGV0aW9uIGZpZWxkczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+SEFMX0VUSF9TdG9wX0lUOgorPHVsPgorPGxpPkNsZWFyIEZhdGFsIGJ1cyBpbnRlcnJ1cHQgYW5kIEFibm9ybWFsIEludGVycnVwdCBTdW1tYXJ5IEVuYWJsZTwvbGk+Cis8bGk+Q2xlYXIgaW50ZXJydXB0IEVuYWJsZWQgb24gQ29tcGxldGlvbiBmb3IgYWxsIHVzZWQgZGVzY3JpcHRvcnM8L2xpPgorPC91bD48L2xpPgorPGxpPkhBTF9FVEhfVHJhbnNtaXQ6Cis8dWw+Cis8bGk+U2V0IEVUSCBnU3RhdGUgdG8gSEFMX0VUSF9TVEFURV9FUlJPUiB3aGVuIHRpbWVvdXQgZXJyb3Igb2NjdXJyZWQ8L2xpPgorPGxpPlJlbW92ZSB1bm5lY2Vzc2FyeSBzZXQgb2YgRVRIIEhBTCBTdGF0ZSB0byBSZWFkeTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+SEFMX0VUSF9UcmFuc21pdF9JVDoKKzx1bD4KKzxsaT5TZXQgRVRIIEVycm9yQ29kZSB0byBIQUxfRVRIX0VSUk9SX1BBUkFNIHdoZW4gcGFyYW1ldGVyIGlzIG5vdCB2YWxpZCBhbmQgdXNlIGxvZ2ljYWwgT1Igd2hlbiB1cGRhdGluZyB0aGUgRXJyb3JDb2RlPC9saT4KKzwvdWw+PC9saT4KKzxsaT5IQUxfRVRIX0lzUnhEYXRhQXZhaWxhYmxlCis8dWw+Cis8bGk+VXBkYXRpbmcgdGhlIEN1clJ4RGVzYyBhbmQgRmlyc3RBcHBEZXNjIHZhbHVlcyB3aGVuIGJ1aWxkaW5nIGRlc2NyaXB0b3Igb2YgYW4gaW52YWxpZC9pbmNvbXBsZXRlPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBFWFRJPC9zdHJvbmc+OiBVcGRhdGVkIHRvIHN1cHBvcnQgPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4gZGV2aWNlcworPHVsPgorPGxpPnN0bTMyaDd4eF9oYWxfZXh0aS5oIGFuZCBzdG0zMmg3eHhfbGxfZXh0aS5oOgorPHVsPgorPGxpPlVwZGF0ZSBFWFRJIGxpbmVzIGRlZmluaXRpb24gd2l0aCBhY2NvcmRpbmcgdG8gaXRzIGF2YWlsYWJpbGl0eSBvbiBTVE0zMkg3NHgvNXggU1RNMzJBeC9CeCBvciA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBkZXZpY2VzPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBGRENBTjwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX2ZkY2FuLmg6Cis8dWw+Cis8bGk+QWRkIGd1YXJkIG9uIEZEQ0FOMSBwZXJpcGhlcmFsIGF2YWlsYWJpbGl0eSBvbiB0b3Agb2YgdGhlIGhlYWRlciBmaWxlPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX2ZkY2FuLmM6Cis8dWw+Cis8bGk+QWRkIGd1YXJkIG9uIEZEQ0FOMSBwZXJpcGhlcmFsIGF2YWlsYWJpbGl0eSBvbiB0b3Agb2YgdGhlIHNvdXJjZSBmaWxlPC9saT4KKzxsaT5BZGQgRkRDQU5fVElNRU9VVF9DT1VOVCBwcml2YXRlIGRlZmluZSB0byBiZSB1c2VkIHdoZW4gYSB0aW1lb3V0IGJhc2VkIG9uIG51bWJlciBvZiB0cmlhbHMgaXMgbmVlZGVkPC9saT4KKzxsaT5GaXggSEFMX0ZEQ0FOX0dldFJ4TWVzc2FnZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiB0byBkaXNjYXJkIGZpcnN0IG1lc3NhZ2UgaW4gRklGTyB3aGVuIG92ZXJ3cml0ZSBzdGF0dXMgaXMgb248L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIEZMQVNIPC9zdHJvbmc+OgorPHVsPgorPGxpPnN0bTMyaDd4eF9oYWxfZmxhc2guaDoKKzx1bD4KKzxsaT5VcGRhdGUgdG8gdXNlIERVQUxfQkFOSyBkZWZpbmUgaW4gbWFjcm9zIF9fSEFMX0ZMQVNIX0VOQUJMRV9JVCwgX19IQUxfRkxBU0hfRElTQUJMRV9JVCwgX19IQUxfRkxBU0hfR0VUX0ZMQUcgYW5kIF9fSEFMX0ZMQVNIX0NMRUFSX0ZMQUc6Cis8dWw+Cis8bGk+VHdvIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgZGVwZW5kaW5nIG9mIGR1YWwgYmFuayBkZXZpY2UgKFNUTTMySDc0eC81eC9BeC9CeCkgb2Ygc2luZ2xlIGJhbmsgZGV2aWNlICg8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPi81MC9CMCk8L2xpPgorPC91bD48L2xpPgorPGxpPkRlbGltaXQgQmFuazIgcHJpdmF0ZSBtYWNyb3Mgd2l0aCBEVUFMX0JBTksgZGVmaW5lPGJyIC8+Cis8L2xpPgorPGxpPkFkZCBJU19GTEFTSF9QUk9HUkFNX0FERFJFU1NfT1RQIGFuZCBJU19GTEFTSF9QUk9HUkFNX0FERFJFU1MgcHJpdmF0ZSBtYWNyb3MgdXNlZCB3aXRoaW4gdGhlIEZsYXNoIEhBTCBkcml2ZXIgZm9yIFNUTTMySDdBeC9CeCBkZXZpY2VzPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX2ZsYXNoX2V4Lmg6Cis8dWw+Cis8bGk+VXBkYXRlIHRvIHN1cHBvcnQgb3B0aW9uIGJ5dGVzIFRDTV9BWElfU0hBUkVEIGFuZCBDUFVGUkVRX0JPT1NUIGF2YWlsYWJsZSBvbiA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBuZXcgZGV2aWNlczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2hhbF9mbGFzaC5jOgorPHVsPgorPGxpPlVwZGF0ZSBpbXBsZW1lbnRhdGlvbiB0byBjb25zaWRlciBkdWFsIGJhbmsgZGV2aWNlcyAoU1RNMzJINzR4LzV4IGFuZCBTVE0zMkg3QXgvQngpIGFuZCBzaW5nbGUgYmFuayBkZXZpY2VzICg8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPik8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfZmxhc2hfZXguYzoKKzx1bD4KKzxsaT5VcGRhdGUgaW1wbGVtZW50YXRpb24gdG8gY29uc2lkZXIgZHVhbCBiYW5rIGRldmljZXMgKFNUTTMySDc0eC81eCBhbmQgU1RNMzJIN0F4L0J4KSBhbmQgc2luZ2xlIGJhbmsgZGV2aWNlcyAoPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4pPC9saT4KKzxsaT5VcGRhdGUgaW1wbGVtZW50YXRpb24gdG8gdG8gc3VwcG9ydCBvcHRpb24gYnl0ZXMgVENNX0FYSV9TSEFSRUQgYW5kIENQVUZSRVFfQk9PU1QgYXZhaWxhYmxlIG9uIDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IG5ldyBkZXZpY2VzPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBGTUFDPC9zdHJvbmc+OgorPHVsPgorPGxpPk5ldyBIQUwgYW5kIExMIGRyaXZlcnMgdG8gc3VwcG9ydCBGTUFDIHBlcmlwaGVyYWwgYXZhaWxhYmxlIG9uIG5ldyA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBuZXcgZGV2aWNlczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwvTEwgR1BJTzwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX2dwaW9fZXguaDoKKzx1bD4KKzxsaT5VcGRhdGUgQWx0ZXJuYXRlIGZ1bmN0aW9ucyBkZWZpbml0aW9uIGZvciBuZXcgPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4gZGV2aWNlczwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2hhbF9ncGlvLmM6Cis8dWw+Cis8bGk+VXBkYXRlIEhBTF9HUElPX0RlSW5pdCBpbXBsZW1lbnRhdGlvbiB0byByZS1vcmRlciByZWdpc3RlciBzZXF1ZW5jZSBhbmQgYXZvaWQgaW5jb25zaXN0ZW50IElTUiBiZWhhdmlvcjwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwvTEwgVVNCPC9zdHJvbmc+OgorPHVsPgorPGxpPnN0bTMyaDd4eF9oYWxfaGNkLmg6Cis8dWw+Cis8bGk+VXBkYXRlIEhDRF9TUEVFRF9GVUxMIEhDRF9TUEVFRF9MT1cgZGVmaW5lcyB2YWx1ZXMgd2l0aCByZXNwZWN0IHRvIG5ldyBkZWZpbmVzIGluIHN0bTMyaDd4eF9sbF91c2IuaCAoVVNCSF9GU0xTX1NQRUVEKTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2hhbF9oY2QuYzoKKzx1bD4KKzxsaT5VcGRhdGUgSENEX0hDX0lOX0lSUUhhbmRsZXIgdG8gaGFuZGxlIFVTQl9PVEdfSENJTlRfQkJFUlIgSVQ8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF91c2IuaDoKKzx1bD4KKzxsaT5VU0JIX0ZTX1NQRUVEIGRlZmluZSByZW5hbWVkIHRvIFVTQkhfRlNMU19TUEVFRCAobm8gaW1wYWN0IGFzIHVzZWQgYnkgdGhlIHN0bTMyaDd4eF9oYWxfaGNkLmggdGhhdCBoYXMgYmVlbiB1cGRhdGVkKTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2xsX3VzYi5jOgorPHVsPgorPGxpPlVwZGF0ZSBVU0JfRGVhY3RpdmF0ZURlZGljYXRlZEVuZHBvaW50IGltcGxlbWVudGF0aW9uIHRvIGVuc3VyZSB0byBkaXNhYmxlIEVQIGR1cmluZyBkZWFjdGl2YXRpb248L2xpPgorPGxpPlVwZGF0ZSBVU0JfSG9zdEluaXQgaW1wbGVtZW50YXRpb24gdG8gZml4IGNvbXBpbGF0aW9uIGVycm9yIHdoZW4gaG9zdCBjb3JlIGlzIGxvdyBzcGVlZDwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+X19IQUwvTEwgSFJUSU06Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF9ocnRpbS5jOgorPHVsPgorPGxpPlVwZGF0ZSBEb3h5Z2VuIGRvY3VtZW50YXRpb248L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF9ocnRpbS5oOgorPHVsPgorPGxpPlJlbW92ZSDigJxyZWdpc3RlcuKAnSDigJxD4oCdIGtleXdvcmQ6IFRoZSByZWdpc3RlciBzdG9yYWdlIGNsYXNzIHNwZWNpZmllciB3YXMgZGVwcmVjYXRlZCBpbiBDKysxMSBhbmQgcmVtb3ZlZCBpbiBDKysxNzwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwvTEwgSTJDPC9zdHJvbmc+OgorPHVsPgorPGxpPnN0bTMyaDd4eF9oYWxfaTJjX2V4Lmg6Cis8dWw+Cis8bGk+VXBkYXRlIEkyQ0V4X0Zhc3RNb2RlUGx1cyBkZWZpbml0aW9uIHRvIGFkZCBJMkNfRkFTVE1PREVQTFVTX0kyQzUgZGVmaW5lIGFsbG93aW5nIHRvIHN1cHBvcnQgZm9yIEkyQzUgaW5zdGFuY2UgYXZhaWxhYmxlIG9uIDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXM8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfaTJjLmM6Cis8dWw+Cis8bGk+Rml4IGltcGxlbWVudGF0aW9uIG9mIEhBTF9JMkNfTWFzdGVyX1NlcV9UcmFuc21pdF9JVCwgSEFMX0kyQ19NYXN0ZXJfU2VxX1RyYW5zbWl0X0RNQSwgSEFMX0kyQ19NYXN0ZXJfU2VxX1JlY2VpdmVfSVQgYW5kIEhBTF9JMkNfTWFzdGVyX1NlcV9SZWNlaXZlX0RNQQorPHVsPgorPGxpPlVwZGF0ZSB4ZmVybW9kZSB1cG9uIE1BWF9OQllURV9TSVpFIHJlYWNoZWQ8L2xpPgorPC91bD48L2xpPgorPGxpPkltcHJvdmUgaW1wbGVtZW50YXRpb24gb2YgSTJDX0lUTWFzdGVyQ3BsdCBmdW5jdGlvbjxiciAvPgorPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX2kyY19leC5jOgorPHVsPgorPGxpPlVwZGF0ZSBkb3h5Z2VuIGRvY3VtZW50YXRpb24gd2l0aCByZWZlcmVuY2VzIHRvIEkyQzUgaW5zdGFuY2UgYXZhaWxhYmxlIG9uIDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXM8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF9pMmMuaAorPHVsPgorPGxpPlJlbW92ZSDigJxyZWdpc3RlcuKAnSDigJxD4oCdIGtleXdvcmQ6IFRoZSByZWdpc3RlciBzdG9yYWdlIGNsYXNzIHNwZWNpZmllciB3YXMgZGVwcmVjYXRlZCBpbiBDKysxMSBhbmQgcmVtb3ZlZCBpbiBDKysxNzwvbGk+Cis8bGk+Rml4IGRveHlnZW4gZG9jdW1lbnRhdGlvbjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2xsX2kyYy5jCis8dWw+Cis8bGk+VXBkYXRlIExMX0kyQ19EZUluaXQgaW1wbGVtZW50YXRpb24gdG8gYWRkIHN1cHBvcnQgb2YgSTJDNSBpbnN0YW5jZSBhdmFpbGFibGUgb24gPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4gZGV2aWNlczwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwvTEwgSTJTPC9zdHJvbmc+OiBVcGRhdGUgdG8gc3VwcG9ydCA8c3Ryb25nPkkyUyBGdWxsIER1cGxleDwvc3Ryb25nPiBtb2RlIChubyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGJyZWFrKToKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX2kycy5oOgorPHVsPgorPGxpPkFkZCBIQUxfSTJTX1NUQVRFX0JVU1lfVFhfUlggc3RhdGU8L2xpPgorPGxpPkFkZCBJMlNfSVRfRFhQIElUIGFuZCBJMlNfRkxBR19EWFAgZmxhZyBkZWZpbml0aW9uczwvbGk+Cis8bGk+VXBkYXRlIHZhbHVlIG9mIEkyU19GTEFHX01BU0sgZGVmaW5lPC9saT4KKzxsaT5BZGQgZXh0ZW5zaW9uIDxzdHJvbmc+RnVsbCBEdXBsZXg8L3N0cm9uZz4gQVBJcyBUcmFuc21pdC9SZWNlaXZlIEFQSXMgKFBvbGxpbmcsIElUIGFuZCBETUEpCis8dWw+Cis8bGk+SEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZSxIQUxfSTJTRXhfVHJhbnNtaXRSZWNlaXZlX0lUIGFuZCBIQUxfSTJTRXhfVHJhbnNtaXRSZWNlaXZlX0RNQTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+QWRkIGV4dGVuc2lvbiA8c3Ryb25nPkZ1bGwgRHVwbGV4PC9zdHJvbmc+IGNhbGxiYWNrczogSEFMX0kyU0V4X1R4UnhIYWxmQ3BsdENhbGxiYWNrIGFuZCBIQUxfSTJTRXhfVHhSeENwbHRDYWxsYmFjazwvbGk+Cis8bGk+VXBkYXRlIHJlZ2lzdGVyIGNhbGxiYWNrIGRlZmluZXMgdG8gc3VwcG9ydCA8c3Ryb25nPkZ1bGwgRHVwbGV4PC9zdHJvbmc+IFR4UnggY29tcGxldGUgY2FsbGJhY2tzPC9saT4KKzxsaT5BZGQgSVNfSTJTX0ZVTExEVVBMRVggcHJpdmF0ZSBtYWNybyB1c2UgaW4gdGhlIEhBTCBJMlMgZHJpdmVyPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX2kycy5jOgorPHVsPgorPGxpPlVwZGF0ZSBIQUxfSTJTX0luaXQsIEhBTF9JMlNfUmVnaXN0ZXJDYWxsYmFjayBhbmQgSEFMX0kyU19VblJlZ2lzdGVyQ2FsbGJhY2sgaW1wbGVtZW50YXRpb24gdG8gY29uc2lkZXIgVHhSeENwbHRDYWxsYmFjayBhbmQgVHhSeEhhbGZDcGx0Q2FsbGJhY2sgY2FsbGJhY2tzPC9saT4KKzxsaT5BZGQgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZSwgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZV9JVCBhbmQgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZV9ETUEgQVBJcyBpbXBsZW1lbnRhdGlvbjwvbGk+Cis8bGk+VXBkYXRlIEhBTF9JMlNfSVJRSGFuZGxlciBpbXBsZW1lbnRhdGlvbiB0byBjb25zaWRlciBmdWxsIGR1cGxleCBtb2RlPC9saT4KKzxsaT5BZGQgSEFMX0kyU0V4X1R4UnhIYWxmQ3BsdENhbGxiYWNrIGFuZCBIQUxfSTJTRXhfVHhSeENwbHRDYWxsYmFjayB3ZWFrIGNhbGxiYWNrczxiciAvPgorPC9saT4KKzxsaT5BZGQgSTJTRXhfRE1BVHhSeENwbHQgYW5kIEkyU0V4X0RNQVR4UnhIYWxmQ3BsdCBwcml2YXRlIGZ1bmN0aW9uczwvbGk+Cis8bGk+VXBkYXRlIGltcGxlbWVudGF0aW9uIG9mIEkyU19UcmFuc21pdF8xNkJpdF9JVCBhbmQgSTJTX1RyYW5zbWl0XzMyQml0X0lUIGZ1bmN0aW9uczwvbGk+Cis8bGk+VXBkYXRlIGltcGxlbWVudGF0aW9uIG9mIEkyU19SZWNlaXZlXzE2Qml0X0lUIGFuZCBJMlNfUmVjZWl2ZV8zMkJpdF9JVCBmdW5jdGlvbnM8L2xpPgorPGxpPlVwZGF0ZSBkb3h5Z2VuIGRvY3VtZW50YXRpb248L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFML0xMIElXREc8L3N0cm9uZz46Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF9pd2RnLmM6Cis8dWw+Cis8bGk+VXBkYXRlIEhBTF9JV0RHX0RFRkFVTFRfVElNRU9VVCBkZWZpbmUgdmFsdWUgdG8gY29uc2lkZXIgTFNJIHZhbHVlIGluc3RlYWQgb2YgaGFyZGNvZGVkIHZhbHVlPC9saT4KKzxsaT5VcGRhdGUgZG94eWdlbiBkb2N1bWVudGF0aW9uPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBNRE1BPC9zdHJvbmc+OgorPHVsPgorPGxpPnN0bTMyaDd4eF9oYWxfbWRtYS5oOgorPHVsPgorPGxpPkFkZCBfX0hBTF9NRE1BX1NFVF9DT1VOVEVSIGFuZCBfX0hBTF9NRE1BX0dFVF9DT1VOVEVSIG1hY3JvcyAoc2FtZSBtYWNyb3MgYXMgdGhlIEhBTCBETUEpPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfbGxfbWRtYS5oCis8dWw+Cis8bGk+UmVtb3ZlIOKAnHJlZ2lzdGVy4oCdIOKAnEPigJ0ga2V5d29yZDogVGhlIHJlZ2lzdGVyIHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVyIHdhcyBkZXByZWNhdGVkIGluIEMrKzExIGFuZCByZW1vdmVkIGluIEMrKzE3PC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBTRC9NTUM8L3N0cm9uZz46IEFkZCBzdXBwb3J0IGZvciBTYW5pdGl6ZSBhbmQgRGlzY2FyZCBmdW5jdGlvbnM6Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF9tbWMuaDoKKzx1bD4KKzxsaT5BZGRlZCBBUElzOiBIQUxfTU1DX0VyYXNlU2VxdWVuY2UsIEhBTF9NTUNfU2FuaXRpemUsIEhBTF9NTUNfQ29uZmlnU2VjUmVtb3ZhbFR5cGUgYW5kIEhBTF9NTUNfR2V0U3VwcG9ydGVkU2VjUmVtb3ZhbFR5cGU8L2xpPgorPGxpPmFkZGVkIGRlZmluZXM6Cis8dWw+Cis8bGk+ZGVmaW5lcyB1c2VkIGZvciBIQUxfTU1DX0VyYXNlU2VxdWVuY2UgQVBJOgorPHVsPgorPGxpPkhBTF9NTUNfRVJBU0UsIEhBTF9NTUNfVFJJTSwgSEFMX01NQ19ESVNDQVJELCBIQUxfTU1DX1NFQ1VSRV9FUkFTRSwgSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMSBhbmQgSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+ZGVmaW5lcyB1c2VkIGZvciBIQUxfTU1DX0NvbmZpZ1NlY1JlbW92YWxUeXBlL0hBTF9NTUNfR2V0U3VwcG9ydGVkU2VjUmVtb3ZhbFR5cGUgQVBJOgorPHVsPgorPGxpPkhBTF9NTUNfU1JUX0VSQVNFLCBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0VSQVNFLCBIQUxfTU1DX1NSVF9XUklURV9DSEFSX0NPTVBMX1JBTkRPTSBhbmQgSEFMX01NQ19TUlRfVkVORE9SX0RFRklORUQ8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfbW1jLmM6Cis8dWw+Cis8bGk+QWRkIGltcGxlbWVudGF0aW9uIG9mIEFQSXMgSEFMX01NQ19FcmFzZVNlcXVlbmNlLCBIQUxfTU1DX1Nhbml0aXplLCBIQUxfTU1DX0NvbmZpZ1NlY1JlbW92YWxUeXBlIGFuZCBIQUxfTU1DX0dldFN1cHBvcnRlZFNlY1JlbW92YWxUeXBlPC9saT4KKzxsaT5VcGRhdGUgaW1wbGVtZW50YXRpb24gb2YgTU1DX0hpZ2hTcGVlZCwgTU1DX0REUl9Nb2RlIHByaXZhdGUgZnVuY3Rpb25zPC9saT4KKzxsaT5VcGRhdGUgSEFMX01NQ19Jbml0Q2FyZCB0byBhbGxvdyB1cHBlciB0byAyMDBNSHogU0RNTSBDbG9jazxiciAvPgorPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX3NkLmM6Cis8dWw+Cis8bGk+VXBkYXRlIEhBTF9TRF9FcmFzZSBpbXBsZW1lbnRhdGlvbiB0byBjb25zaWRlciBwcml2YXRlIFNETU1DX0NtZEVyYXNlIGZ1bmN0aW9uIHVwZGF0ZTwvbGk+Cis8bGk+VXBkYXRlIEhBTF9TRF9Jbml0Q2FyZCB0byBhbGxvdyB1cHBlciB0byAyMDBNSHogU0RNTSBDbG9jazxiciAvPgorPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfbGxfc2RtbWMuaCAoSEFMIGNvcmUgZHJpdmVyLCBub3QgYSB1c2VyIGRyaXZlcikKKzx1bD4KKzxsaT5VcGRhdGUgU0RNTUNfQ21kRXJhc2UgZnVuY3Rpb24gdG8gYWRkIEVyYXNlVHlwZSBwYXJhbWV0ZXI8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF9zZG1tYy5jOgorPHVsPgorPGxpPlVwZGF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBTRE1NQ19DbWRFcmFzZSB0byBhZGQgRXJhc2VUeXBlIHBhcmFtZXRlcjwvbGk+Cis8bGk+UmVtb3ZlIOKAnHJlZ2lzdGVy4oCdIOKAnEPigJ0ga2V5d29yZDogVGhlIHJlZ2lzdGVyIHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVyIHdhcyBkZXByZWNhdGVkIGluIEMrKzExIGFuZCByZW1vdmVkIGluIEMrKzE3PC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBPUEFNUDwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfbGxfb3BhbXAuaDoKKzx1bD4KKzxsaT5SZW1vdmUg4oCccmVnaXN0ZXLigJ0g4oCcQ+KAnSBrZXl3b3JkOiBUaGUgcmVnaXN0ZXIgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIgd2FzIGRlcHJlY2F0ZWQgaW4gQysrMTEgYW5kIHJlbW92ZWQgaW4gQysrMTc8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFML0xMIE9URkRFQzwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX290ZmRlYy5oCis8dWw+Cis8bGk+QWRkIGltcGxlbWVudGF0aW9uIG9mIG1hY3JvcyBfX0hBTF9PVEZERUNfR0VUX0ZMQUcgYW5kIF9fSEFMX09URkRFQ19DTEVBUl9GTEFHPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTC9MTCBQV1I8L3N0cm9uZz46Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF9wd3IuaDoKKzx1bD4KKzxsaT5VcGRhdGUgX19IQUxfUFdSX1ZPTFRBR0VTQ0FMSU5HX0NPTkZJRywgX19IQUxfUFdSX0dFVF9GTEFHLCBfX0hBTF9QV1JfR0VUX1dBS0VVUEZMQUcgYW5kIF9fSEFMX1BXUl9DTEVBUl9XQUtFVVBGTEFHIG1hY3JvcyBpbXBsZW1lbnRhdGlvbiB0byBzdXBwb3J0IDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXM8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfcHdyX2V4Lmg6Cis8dWw+Cis8bGk+VXBkYXRlIHRvIGRlbGltaXQgd2FrZXVwIHBpbnMgMyBhbmQgNSBkZWZpbml0aW9ucyBhY2NvcmRpbmcgdG8gdGhlaXIgYXZhaWxhYmlsaXR5IChub3QgYXZhaWxhYmxlIG9uIDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXMpPGJyIC8+Cis8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfcHdyLmM6Cis8dWw+Cis8bGk+VXBkYXRlIERveHlnZW4gZG9jdW1lbnRhdGlvbiB0byBjb25zaWRlciA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBkZXZpY2VzPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX3B3cl9leC5jOgorPHVsPgorPGxpPlVwZGF0ZSBIQUxfUFdSRXhfQ29udHJvbFZvbHRhZ2VTY2FsaW5nIGltcGxlbWVuYXRpb24gZm9yIDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXM8YnIgLz4KKzwvbGk+Cis8bGk+VXBkYXRlIEhBTF9QV1JFeF9FbnRlclNUT1BNb2RlIGltcGxlbWVudGF0aW9uIHRvIGRvbWFpbiBEZWVwIHNsZWVwIGVudHJ5IGZvZSBlYWNoIENvcmUgKENNNy9DTTQpPC9saT4KKzxsaT5VcGRhdGUgSEFMX1BXUkV4X1dBS0VVUF9QSU5fSVJRSGFuZGxlciBpbXBsZW1lbmF0aW9uIHRvIGRlbGltaXQgd2FrZXVwIHBpbnMgMyBhbmQgNSB1c2FnZSBhY2NvcmRpbmcgdG8gdGhlaXIgYXZhaWxhYmlsaXR5IChub3QgYXZhaWxhYmxlIG9uIDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXMpPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfbGxfcHdyLmgKKzx1bD4KKzxsaT5VcGRhdGUgdG8gZGVsaW1pdCB3YWtldXAgcGlucyAzIGFuZCA1IGRlZmluaXRpb25zIGFjY29yZGluZyB0byB0aGVpciBhdmFpbGFiaWxpdHkgKG5vdCBhdmFpbGFibGUgb24gPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4gZGV2aWNlcyk8L2xpPgorPGxpPlVwZGF0ZSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMCB2YWx1ZSB0byBzdXBwb3J0IDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXM8L2xpPgorPGxpPlJlbW92ZSDigJxyZWdpc3RlcuKAnSDigJxD4oCdIGtleXdvcmQ6IFRoZSByZWdpc3RlciBzdG9yYWdlIGNsYXNzIHNwZWNpZmllciB3YXMgZGVwcmVjYXRlZCBpbiBDKysxMSBhbmQgcmVtb3ZlZCBpbiBDKysxNzwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2xsX3B3ci5jCis8dWw+Cis8bGk+VXBkYXRlIExMX1BXUl9EZUluaXQgaW1wbGVtZW5hdGlvbiB0byBkZWxpbWl0IHdha2V1cCBwaW5zIDMgYW5kIDUgdXNhZ2UgYWNjb3JkaW5nIHRvIHRoZWlyIGF2YWlsYWJpbGl0eSAobm90IGF2YWlsYWJsZSBvbiA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBkZXZpY2VzKTwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwvTEwgUkNDPC9zdHJvbmc+OgorPHVsPgorPGxpPnN0bTMyaDd4eF9oYWxfcmNjLmg6Cis8dWw+Cis8bGk+Rml4IFJDQ19IU0lDQUxJQlJBVElPTl9ERUZBVUxUIGFuZCBSQ0NfQ1NJQ0FMSUJSQVRJT05fREVGQVVMVCB2YWx1ZXMgZm9yIFNUTTMySDc0eC81eCByZXYuViBhbmQgdXBkYXRlIF9fSEFMX1JDQ19IU0lfQ0FMSUJSQVRJT05WQUxVRV9BREpVU1QgYW5kIF9fSEFMX1JDQ19DU0lfQ0FMSUJSQVRJT05WQUxVRV9BREpVU1QgbWFjcm9zIGltcGxlbWVudGF0aW9uIHRvIGNvbnNpZGVyIFNUTTMySDc0eC83eCByZXYuWSoqPC9saT4KKzxsaT5BZGQgRk1BQyBhbmMgQ09SRElDIHBlcmlwaGVyYWxzIENsb2NrIGVuYWJsZS9kaXNhYmxlIG1hY3JvczwvbGk+Cis8bGk+R1BJT0kgbm90IGF2YWlsYWJsZSBvbiA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiwgY29ycmVzcG9uZGluZyBSQ0MgbWFjcm8gYXJlIGRlbGltaXRlZCB3aXRoIEdQSU9JIGF2YWlsYWJpbGl0eSBjaGVjazwvbGk+Cis8bGk+QWRkIEkyQzUsIFRJTTIzLFRJTTI0IGNsb2NrIGVuYWJsZS9kaXNhYmxlIG1hY3JvczwvbGk+Cis8bGk+U0FJMiBub3QgYXZhaWxhYmxlIG9uIDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+LCBjb3JyZXNwb25kaW5nIFJDQyBtYWNybyBhcmUgZGVsaW1pdGVkIHdpdGggU0FJMiBhdmFpbGFiaWxpdHkgY2hlY2s8L2xpPgorPGxpPlVwZGF0ZSBfX0hBTF9SQ0NfQUhCM19GT1JDRV9SRVNFVCBpbXBsZW1lbnRhdGlvbiB0byBjb25zaWRlciBTVE0zMkg3MngvM3ggKERFViBJRCA0ODMpLCBTVE0zMkg3QXgvQnggKERFViBJRCA0ODApIGFuZCBTVE0zMkg3NHgvNXggKERFViBJRCA0NTApPGJyIC8+Cis8L2xpPgorPGxpPlVwZGF0ZSBfX0hBTF9SQ0NfQUhCMV9GT1JDRV9SRVNFVCBpbXBsZW1lbnRhdGlvbiB0byBjb25zaWRlciBTVE0zMkg3MngvM3ggKERFViBJRCA0ODMpLCBTVE0zMkg3QXgvQnggKERFViBJRCA0ODApIGFuZCBTVE0zMkg3NHgvNXggKERFViBJRCA0NTApPGJyIC8+Cis8L2xpPgorPGxpPlVwZGF0ZSBfX0hBTF9SQ0NfQUhCMl9GT1JDRV9SRVNFVCBpbXBsZW1lbnRhdGlvbiB0byBjb25zaWRlciBTVE0zMkg3MngvM3ggKERFViBJRCA0ODMpLCBTVE0zMkg3QXgvQnggKERFViBJRCA0ODApIGFuZCBTVE0zMkg3NHgvNXggKERFViBJRCA0NTApPC9saT4KKzxsaT5VcGRhdGUgX19IQUxfUkNDX0FIQjRfRk9SQ0VfUkVTRVQgaW1wbGVtZW50YXRpb24gdG8gY29uc2lkZXIgU1RNMzJINzJ4LzN4IChERVYgSUQgNDgzKSwgU1RNMzJIN0F4L0J4IChERVYgSUQgNDgwKSBhbmQgU1RNMzJINzR4LzV4IChERVYgSUQgNDUwKTwvbGk+Cis8bGk+VXBkYXRlIF9fSEFMX1JDQ19BUEIzX0ZPUkNFX1JFU0VUIGltcGxlbWVudGF0aW9uIHRvIGNvbnNpZGVyIFNUTTMySDcyeC8zeCAoREVWIElEIDQ4MyksIFNUTTMySDdBeC9CeCAoREVWIElEIDQ4MCkgYW5kIFNUTTMySDc0eC81eCAoREVWIElEIDQ1MCk8L2xpPgorPGxpPlVwZGF0ZSBfX0hBTF9SQ0NfQVBCMUxfRk9SQ0VfUkVTRVQgYW5kIF9fSEFMX1JDQ19BUEIxSF9GT1JDRV9SRVNFVCBpbXBsZW1lbnRhdGlvbiB0byBjb25zaWRlciA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiAoREVWIElEIDQ4MyksIFNUTTMySDdBeC9CeCAoREVWIElEIDQ4MCkgYW5kIFNUTTMySDc0eC81eCAoREVWIElEIDQ1MCk8L2xpPgorPGxpPlVwZGF0ZSBfX0hBTF9SQ0NfQVBCMl9GT1JDRV9SRVNFVCBpbXBsZW1lbnRhdGlvbiB0byBjb25zaWRlciBTVE0zMkg3MngvM3ggKERFViBJRCA0ODMpLCBTVE0zMkg3QXgvQnggKERFViBJRCA0ODApIGFuZCBTVE0zMkg3NHgvNXggKERFViBJRCA0NTApPC9saT4KKzxsaT5VcGRhdGUgX19IQUxfUkNDX0FQQjRfRk9SQ0VfUkVTRVQgaW1wbGVtZW50YXRpb24gdG8gY29uc2lkZXIgU1RNMzJINzJ4LzN4IChERVYgSUQgNDgzKSwgU1RNMzJIN0F4L0J4IChERVYgSUQgNDgwKSBhbmQgU1RNMzJINzR4LzV4IChERVYgSUQgNDUwKTwvbGk+Cis8bGk+VXBkYXRlIF9fSEFMX1JDQ19BUEI0X0ZPUkNFX1JFU0VUIGltcGxlbWVudGF0aW9uIHRvIGNvbnNpZGVyIFNUTTMySDcyeC8zeCAoREVWIElEIDQ4MyksIFNUTTMySDdBeC9CeCAoREVWIElEIDQ4MCkgYW5kIFNUTTMySDc0eC81eCAoREVWIElEIDQ1MCk8L2xpPgorPGxpPkFkZCBfX0hBTF9SQ0NfRFRTX0NMS0FNX0VOQUJMRSBhbmQgX19IQUxfUkNDX0RUU19DTEtBTV9ESVNBQkxFIG1hY3JvPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX3JjY19leC5oOgorPHVsPgorPGxpPlVwZGF0ZSB0byBzdXBwb3J0IEkyQzUsIFRJTTIzLFRJTTI0IGNsb2NrIHNldHRpbmc8L2xpPgorPGxpPlVwZGF0ZSB0byBVU0FSVCA5LzEwIGNsb2NrIHNldHRpbmcgbWFjcm9zIHRvIHN1cHBvcnQgPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4gZGV2aWNlczxiciAvPgorPC9saT4KKzxsaT5VcGRhdGUgdG8gT1NQSSBjbG9jayBzZXR0aW5nIG1hY3JvcyB0byBzdXBwb3J0IDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXM8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfcmNjX2V4LmM6Cis8dWw+Cis8bGk+Rml4IEhBTF9SQ0NFeF9QZXJpcGhDTEtDb25maWcgaW1wbGVtZW50YXRpb24KKzx1bD4KKzxsaT5Vc2UgSFJUSU0xIGNvbiBkZWZpbmUgaW5zdGVhZCBvZiBIUlRJTTwvbGk+Cis8bGk+U3VwcG9ydCBJMkM1IGF2YWlsYWJsZSBvbiA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBkZXZpY2VzPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfbGxfcmNjLmgKKzx1bD4KKzxsaT5VcGRhdGUgdG8gc3VwcG9ydCBJMkM1LCBUSU0yMyxUSU0yNCBjbG9jayBzZXR0aW5nPC9saT4KKzxsaT5VcGRhdGUgdG8gVVNBUlQgOS8xMCBjbG9jayBzZXR0aW5nIG1hY3JvcyB0byBzdXBwb3J0IDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXM8YnIgLz4KKzwvbGk+Cis8bGk+VXBkYXRlIHRvIE9TUEkgY2xvY2sgc2V0dGluZyBtYWNyb3MgdG8gc3VwcG9ydCA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBkZXZpY2VzPC9saT4KKzxsaT5SZW1vdmUg4oCccmVnaXN0ZXLigJ0g4oCcQ+KAnSBrZXl3b3JkOiBUaGUgcmVnaXN0ZXIgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIgd2FzIGRlcHJlY2F0ZWQgaW4gQysrMTEgYW5kIHJlbW92ZWQgaW4gQysrMTc8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF9yY2MuYzoKKzx1bD4KKzxsaT5VcGRhdGUgTExfUkNDX0RlSW5pdCBpbXBsZW1lbnRhdGlvbiB0byBhZGQgRmxhc2ggbGF0ZW5jeSBzZXR0aW5nIHZlcnN1cyB0aGUgY2xvY2sgd2hlbiBkZS1pbml0aWFsaXppbmc8L2xpPgorPGxpPlNBSTIgbm90IGF2YWlsYWJsZSBvbiA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiwgY29ycmVzcG9uZGluZyBSQ0MgbWFjcm8gYXJlIGRlbGltaXRlZCB3aXRoIFNBSTIgYXZhaWxhYmlsaXR5IGNoZWNrPC9saT4KKzxsaT5TQUk0IG5vdCBhdmFpbGFibGUgb24gU1RNMzJIN0F4L0J4LCBjb3JyZXNwb25kaW5nIFJDQyBtYWNybyBhcmUgZGVsaW1pdGVkIHdpdGggU0FJNCBhdmFpbGFiaWxpdHkgY2hlY2s8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFML0xMIFJUQzwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX3J0Yy5oOgorPHVsPgorPGxpPkFkZCBwcm90b3R5cGUgb2YgUlRDX0V4aXRJbml0TW9kZSBwcml2YXRlIGZ1bmN0aW9uPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX3J0Y19leC5oOgorPHVsPgorPGxpPkFkZCBSVENfTU9OT1RPTklDX0NPVU5URVJfMSBkZWZpbmU8L2xpPgorPGxpPlVwZGF0ZSBIQUxfUlRDRXhfTW9ub3RvbmljQ291bnRlckluY3JlbWVudCBhbmQgSEFMX1JUQ0V4X01vbm90b25pY0NvdW50ZXJHZXQgQVBJcyBwcm90b3R5cGVzIHdpdGggbmV3IHBhcmFtZXRlcnMgSW5zdGFuY2U8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF9ydGMuaDoKKzx1bD4KKzxsaT5GaXggRG94eWdlbiBkb2N1bWVudGF0aW9uPC9saT4KKzxsaT5SZW1vdmUg4oCccmVnaXN0ZXLigJ0g4oCcQ+KAnSBrZXl3b3JkOiBUaGUgcmVnaXN0ZXIgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIgd2FzIGRlcHJlY2F0ZWQgaW4gQysrMTEgYW5kIHJlbW92ZWQgaW4gQysrMTc8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfcnRjLmM6Cis8dWw+Cis8bGk+VXBkYXRlIEhBTF9SVENfSW5pdCwgSEFMX1JUQ19EZUluaXQsIEhBTF9SVENfU2V0VGltZSwgSEFMX1JUQ19TZXREYXRlLCBpbXBsZW1lbnRhdGlvbiB3aXRoIGVudGVyL2V4aXQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2U8L2xpPgorPGxpPlVwZGF0ZSBSVENfRW50ZXJJbml0TW9kZSBpbXBsZW1lbnRhdGlvbiB0byBzZXQgc3RhdGUgdG8gSEFMX1JUQ19TVEFURV9USU1FT1VUIHVwb24gdGltZW91dDwvbGk+Cis8bGk+QWRkIFJUQ19FeGl0SW5pdE1vZGUgcHJpdmF0ZSBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb248L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfcnRjX2V4LmM6Cis8dWw+Cis8bGk+VXBkYXRlIEhBTF9SVENFeF9TZXRBY3RpdmVUYW1wZXJzIGltcGxlbWVudGF0aW9uIHRvIGRpc2FibGUgYWxsIGFjdGl2ZSB0YW1wZXJzIHdpdGggSEFMX1JUQ0V4X0RlYWN0aXZhdGVBY3RpdmVUYW1wZXJzIGluIGNhc2Ugb2YgZXJyb3I8L2xpPgorPGxpPlVwZGF0ZSBIQUxfUlRDRXhfU2V0UmVmQ2xvY2sgYW5kIEhBTF9SVENFeF9EZWFjdGl2YXRlUmVmQ2xvY2sgaW1wbGVtZW50YXRpb24gd2l0aCBlbnRlci9leGl0IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPC9saT4KKzxsaT5VcGRhdGUgSEFMX1JUQ0V4X01vbm90b25pY0NvdW50ZXJJbmNyZW1lbnQgYW5kIEhBTF9SVENFeF9Nb25vdG9uaWNDb3VudGVyR2V0IEFQSXMgd2l0aCBuZXcgcGFyYW1ldGVycyBJbnN0YW5jZTwvbGk+Cis8bGk+VXBkYXRlIEhBTF9SVENFeF9TZXRXYWtlVXBUaW1lciB0byBmaXggV1VUV0YgZmxhZyBtYW5hZ2VtZW50PC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfbGxfcnRjLmgKKzx1bD4KKzxsaT5SZW1vdmUg4oCccmVnaXN0ZXLigJ0g4oCcQ+KAnSBrZXl3b3JkOiBUaGUgcmVnaXN0ZXIgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIgd2FzIGRlcHJlY2F0ZWQgaW4gQysrMTEgYW5kIHJlbW92ZWQgaW4gQysrMTc8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFMIFNBSTwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX3NhaS5oOgorPHVsPgorPGxpPlVwZGF0ZSBkb3h5Z2VuIGRvY3VtZW50YXRpb248L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfc2FpLmM6Cis8dWw+Cis8bGk+VXBkYXRlIEhBTF9TQUlfSW5pdCB0byBhZGQgYSBjaGVjayBvbiBtYXN0ZXIgY2xvY2sgZGl2aWRlciBwYXJhbWV0ZXIgYW5kIHRvIGZpeCBTQUkgZnJlcXVlbmN5IGNhbGN1bGF0aW9uIGluIGNhc2Ugb2YgU1BESUYgb3V0cHV0PC9saT4KKzxsaT5VcGRhdGUgU0FJX0Rpc2FibGUgaW1wbGVtZW50YXRpb24gdG8gcmVtb3ZlIOKAnHJlZ2lzdGVy4oCdIOKAnEPigJ0ga2V5d29yZDogVGhlIHJlZ2lzdGVyIHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWVyIHdhcyBkZXByZWNhdGVkIGluIEMrKzExIGFuZCByZW1vdmVkIGluIEMrKzE3PC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzxsaT48c3Ryb25nPkhBTCBTTUFSVENBUkQ8L3N0cm9uZz46Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF9zbWFydGNhcmQuYzoKKzx1bD4KKzxsaT5VcGRhdGUgSEFMX1NNQVJUQ0FSRF9UcmFuc21pdCwgSEFMX1NNQVJUQ0FSRF9UcmFuc21pdF9JVCwgSEFMX1NNQVJUQ0FSRF9UcmFuc21pdF9ETUEgYW5kIFNNQVJUQ0FSRF9FbmRUcmFuc21pdF9JVCBpbXBsZW1lbnRhdGlvbiB0byBmaXggYW4gaXNzdWUgd2hlbiBObyByZXBldGl0aW9uIGFmdGVyIE5BQ0sgaXMgcmVjZWl2ZWQgaW4gc21hcnRjYXJkIFQ9MDwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2hhbF9zbWFydGNhcmRfZXguYzoKKzx1bD4KKzxsaT5VcGRhdGUgUlhfRklGT19ERVBUSCBhbmQgVFhfRklGT19ERVBUSCBwcml2YXRlIGRlZmluZXMgdmFsdWVzIHRvIGZpeCBGSUZPIHRocmVzaG9sZCBsZXZlbCAoMTYgaW5zdGVhZCBvZiA4KTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+VXBkYXRlIGRveHlnZW4gZG9jdW1lbnRhdGlvbjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgU01CVVM8L3N0cm9uZz46Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF9zbWJ1cy5oOgorPHVsPgorPGxpPkFkZCBTTUJVU19GSVJTVF9GUkFNRV9XSVRIX1BFQyBkZWZpbmUgdXNlZCB3aXRoaW4gTWFzdGVyL1NsYXZlIFRyYW5zbWl0L1JlY2VpdmUgQVBJCis8dWw+Cis8bGk+VGhpcyBmaXggYWxsb3dzIHRvIHByb3Blcmx5IGRpZmZlcmVudGlhdGUgc2hvcnQgcmVhZCBvciB3cml0ZSB0cmFuc2ZlcnMgd2l0aCBQRUMgYW5kIHJlYWN0IGFkZXF1YXRlbHk8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfc21idXMuYzoKKzx1bD4KKzxsaT5VcGRhdGUgcHJpdmF0ZSBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24gdG8gdXNlIOKAnFNNQlVTX0hhbmRsZVR5cGVEZWYgdHlwZeKAnSBpbnN0ZWFkIG9mICJzdHJ1Y3QgX19TTUJVU19IYW5kbGVUeXBlRGVmIjwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwgU1BESUZSWDwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX3NwZGlmcnguYzoKKzx1bD4KKzxsaT5SZW1vdmUg4oCccmVnaXN0ZXLigJ0g4oCcQ+KAnSBrZXl3b3JkOiBUaGUgcmVnaXN0ZXIgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIgd2FzIGRlcHJlY2F0ZWQgaW4gQysrMTEgYW5kIHJlbW92ZWQgaW4gQysrMTc8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFML0xMIFNQSTwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfaGFsX3NwaS5jCis8dWw+Cis8bGk+VXBkYXRlIEhBTF9TUElfVHJhbnNtaXRSZWNlaXZlIGltcGxlbWVudGF0aW9uIHRvIGF2b2lkIGEgYSByaXNrIGdvaW5nIHRvIGluZmluaXRlIGxvb3AgaW4gMzIgYml0IGRhdGEgbW9kZSAod2hlbiB0aW1lb3V0IG9jY3Vycyk8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF9zcGkuaAorPHVsPgorPGxpPlJlbW92ZSDigJxyZWdpc3RlcuKAnSDigJxD4oCdIGtleXdvcmQ6IFRoZSByZWdpc3RlciBzdG9yYWdlIGNsYXNzIHNwZWNpZmllciB3YXMgZGVwcmVjYXRlZCBpbiBDKysxMSBhbmQgcmVtb3ZlZCBpbiBDKysxNzwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwvTEwgVElNPC9zdHJvbmc+OgorPHVsPgorPGxpPnN0bTMyaDd4eF9oYWxfdGltLmg6Cis8dWw+Cis8bGk+VXBkYXRlIHRvIGhhbmRsZSBjaGFubmVsIHN0YXRlIGFuZCBETUEgYnVyc3Qgc3RhdGUgaW5kZXBlbmRlbnRseSBhbGxvd2luZyB0byB1c2UgbXVsdGlwbGUgRE1BIHJlcXVlc3Qgd2l0aCBkaWZmZXJlbnQgY2hhbm5lbHMgb2Ygc2FtZSB0aW1lcjoKKzx1bD4KKzxsaT5BZGQgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGFuZCBIQUxfVElNX0RNQUJ1cnN0U3RhdGVUeXBlRGVmIGVudW1lcmF0aW9uczwvbGk+Cis8bGk+QWRkIENoYW5uZWxTdGF0ZSwgQ2hhbm5lbE5TdGF0ZSBhbmQgRE1BQnVyc3RTdGF0ZSBwcml2YXRlIHBhcmFtZXRlcnMgdG8gdGhlIFRJTV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZTwvbGk+Cis8bGk+VXBkYXRlIF9fSEFMX1RJTV9SRVNFVF9IQU5ETEVfU1RBVEUgdG8gY29uc2lkZXIgQ2hhbm5lbFN0YXRlLCBDaGFubmVsTlN0YXRlIGFuZCBETUFCdXJzdFN0YXRlLjwvbGk+Cis8bGk+QWRkIHByaXZhdGUgbWFjcm9zOiBUSU1fQ0hBTk5FTF9TVEFURV9HRVQsIFRJTV9DSEFOTkVMX1NUQVRFX1NFVCwgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTCwgVElNX0NIQU5ORUxfTl9TVEFURV9HRVQsIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUIGFuZCBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEw8L2xpPgorPGxpPkFkZCBBUElzOiBIQUxfVElNX0dldEFjdGl2ZUNoYW5uZWwsIEhBTF9USU1fR2V0Q2hhbm5lbFN0YXRlIGFuZCBIQUxfVElNX0RNQUJ1cnN0U3RhdGUgYW5kIHJlbW92ZSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQgY2FsbGJhY2s8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfdGltX2V4Lmg6Cis8dWw+Cis8bGk+QWRkIEhBTF9USU1FeF9HZXRDaGFubmVsTlN0YXRlIEFQSSBhbGxvd2luZyB0byByZXRyaWV2ZSBhIGNoYW5uZWwgc3RhdGU8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9oYWxfdGltLmMgYW5kIHN0bTMyaDd4eF9oYWxfdGltX2V4LmM6Cis8dWw+Cis8bGk+UmVtb3ZlIHByaXZhdGUgZnVuY3Rpb24g4oCcVElNX0RNQURlbGF5UHVsc2VDcGx04oCdPC9saT4KKzxsaT5VcGRhdGUgdG8gaGFuZGxlIGNoYW5uZWwgc3RhdGUgYW5kIERNQSBidXJzdCBzdGF0ZSBpbmRlcGVuZGVudGx5IGFsbG93aW5nIHRvIHVzZSBtdWx0aXBsZSBETUEgcmVxdWVzdCB3aXRoIGRpZmZlcmVudCBjaGFubmVscyBvZiBzYW1lIHRpbWVyPGJyIC8+Cis8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF90aW0uaAorPHVsPgorPGxpPkZpeCB2YWx1ZXMgb2YgZGVmaW5lcyBMTF9USU1fQ09VTlRFUk1PREVfQ0VOVEVSX1VQIGFuZCBMTF9USU1fQ09VTlRFUk1PREVfQ0VOVEVSX0RPV04gKHZhbHVlcyB3YXMgaW52ZXJ0ZWQpPC9saT4KKzxsaT5SZW1vdmUg4oCccmVnaXN0ZXLigJ0g4oCcQ+KAnSBrZXl3b3JkOiBUaGUgcmVnaXN0ZXIgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIgd2FzIGRlcHJlY2F0ZWQgaW4gQysrMTEgYW5kIHJlbW92ZWQgaW4gQysrMTc8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+SEFML0xMIFVBUlQ8L3N0cm9uZz46Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF91YXJ0Lmg6Cis8dWw+Cis8bGk+VXBkYXRlIGltcGxlbWVudGF0aW9uIG9mIFVBUlRfRElWX0xQVUFSVCwgVUFSVF9ESVZfU0FNUExJTkc4IGFuZCBVQVJUX0RJVl9TQU1QTElORzE2IG1hY3JvcyB1c2luZyDigJxVQVJUUHJlc2NUYWJsZeKAnSB0YWJsZTwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2hhbF91YXJ0LmM6Cis8dWw+Cis8bGk+VXBkYXRlIGltcGxlbWVudGF0aW9uIG9mIEhBTF9VQVJUX1RyYW5zbWl0IGFuZCBIQUxfVUFSVF9SZWNlaXZlIHRvIGFkZCBsb2NrIHRoYXQgYXZvaWQgZGVhZGxvY2sgc2NlbmFyaW8gd2hpbGUgbWl4aW5nIHBvbGxpbmcgVHJhbnNtaXQgYW5kIElUIFJlY2VpdmUgcmVxdWVzdHM8L2xpPgorPGxpPlJld29yayBCUlIgcmVnaXN0ZXIgdmFsdWUgY29tcHV0YXRpb24gaW4gSEFMX1VBUlRfSW5pdCgpIGZvciBjb2RlIGZvb3RwcmludCBzaXplIG9wdGltaXphdGlvbgorPHVsPgorPGxpPkFkZCBVQVJUUHJlc2NUYWJsZSBwcml2YXRlIHRhYmxlPC9saT4KKzxsaT5VcGRhdGUgVUFSVF9TZXRDb25maWcgZnVuY3Rpb24gdG8gdXNlIFVBUlRQcmVzY1RhYmxlIGluc3RlYWQgb2YgcnVuIHRpbWUgY2FsY3VsYXRpb248YnIgLz4KKzwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2hhbF91YXJ0X2V4LmM6Cis8dWw+Cis8bGk+VXBkYXRlIFJYX0ZJRk9fREVQVEggYW5kIFRYX0ZJRk9fREVQVEggcHJpdmF0ZSBkZWZpbmVzIHZhbHVlcyB0byBmaXggRklGTyB0aHJlc2hvbGQgbGV2ZWwgKDE2IGluc3RlYWQgb2YgOCk8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF9scHVhcnQuaAorPHVsPgorPGxpPlJlbW92ZSDigJxyZWdpc3RlcuKAnSDigJxD4oCdIGtleXdvcmQ6IFRoZSByZWdpc3RlciBzdG9yYWdlIGNsYXNzIHNwZWNpZmllciB3YXMgZGVwcmVjYXRlZCBpbiBDKysxMSBhbmQgcmVtb3ZlZCBpbiBDKysxNzwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+PHN0cm9uZz5IQUwvTEwgVVNBUlQ8L3N0cm9uZz46Cis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF91c2FydC5jCis8dWw+Cis8bGk+VXBkYXRlIEhBTF9VU0FSVF9JUlFIYW5kbGVyIGltcGxlbWVudGF0aW9uIHRvIGZpeCB0eXBvIHdoZW4gY2xlYXJpbmcgVVNBUlRfQ0xFQVJfUlRPRiBmbGFnPC9saT4KKzwvdWw+PC9saT4KKzxsaT5zdG0zMmg3eHhfaGFsX3VzYXJ0X2V4LmM6Cis8dWw+Cis8bGk+VXBkYXRlIFJYX0ZJRk9fREVQVEggYW5kIFRYX0ZJRk9fREVQVEggcHJpdmF0ZSBkZWZpbmVzIHZhbHVlcyB0byBmaXggRklGTyB0aHJlc2hvbGQgbGV2ZWwgKDE2IGluc3RlYWQgb2YgOCk8YnIgLz4KKzwvbGk+Cis8L3VsPjwvbGk+Cis8bGk+c3RtMzJoN3h4X2xsX3VzYXJ0LmgKKzx1bD4KKzxsaT5SZW1vdmUg4oCccmVnaXN0ZXLigJ0g4oCcQ+KAnSBrZXl3b3JkOiBUaGUgcmVnaXN0ZXIgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZXIgd2FzIGRlcHJlY2F0ZWQgaW4gQysrMTEgYW5kIHJlbW92ZWQgaW4gQysrMTc8L2xpPgorPGxpPkZpeCBkb3h5Z2VuIGRvY3VtZW50YXRpb248L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+TEwgU1lTVEVNPC9zdHJvbmc+OgorPHVsPgorPGxpPnN0bTMyaDd4eF9sbF9zeXN0ZW0uaDogVXBkYXRlIHRvIHN1cHBvcnQgPHN0cm9uZz5TVE0zMkg3MngvM3g8L3N0cm9uZz4gZGV2aWNlcworPHVsPgorPGxpPk5ldyBJMkM1IGluc3RhbmNlIHdpdGggRmFzdCBNb2RlIHBsdXMgY2FwYWJpbGl0eTwvbGk+Cis8bGk+R1BJT0kgbm90IGF2YWlsYWJsZTwvbGk+Cis8bGk+QVhJIHRvIElUQ00gUkFNIHNoYXJpbmc8L2xpPgorPGxpPlRJTTIzL1RJTTI0IG5ldyBpbnN0YW5jZXM8L2xpPgorPGxpPkRldmljZSBJRDogMHg0ODM8L2xpPgorPC91bD48L2xpPgorPC91bD48L2xpPgorPGxpPjxzdHJvbmc+TEwgVVRJTDwvc3Ryb25nPjoKKzx1bD4KKzxsaT5zdG0zMmg3eHhfbGxfdXRpbHMuaDoKKzx1bD4KKzxsaT5VcGRhdGUgTExfVVRJTFNfUEFDS0FHRVRZUEVfeHggZGVmaW5lcyB0byBzdXBwb3J0IDxzdHJvbmc+U1RNMzJINzJ4LzN4PC9zdHJvbmc+IGRldmljZXMgKGRldmljZSBJRCAweDQ4Myk8L2xpPgorPC91bD48L2xpPgorPGxpPnN0bTMyaDd4eF9sbF91dGlscy5jOgorPHVsPgorPGxpPlVwZGF0ZSBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFeCB2YWx1ZXMgYWNjb3JkaW5nIHRoZSBTVE0zMkg3NHgvNXggZGV2aWNlcyAoZGV2aWNlIElEIDB4NDUwKTogNDgwTUh6IG1heCBmcmVxdWVuY3k8L2xpPgorPGxpPlVwZGF0ZSBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFeCB2YWx1ZXMgYWNjb3JkaW5nIHRoZSA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBkZXZpY2VzIChkZXZpY2UgSUQgMHg0ODMpIDogNTUwTUh6IG1heCBmcmVxdWVuY3k8L2xpPgorPGxpPlVwZGF0ZSBMTF9TZXRGbGFzaExhdGVuY3kgdG8gc3VwcG9ydCA8c3Ryb25nPlNUTTMySDcyeC8zeDwvc3Ryb25nPiBkZXZpY2VzIChkZXZpY2UgSUQgMHg0ODMpPC9saT4KKzxsaT5VcGRhdGUgZG94eWdlbiBkb2N1bWVudGF0aW9uPC9saT4KKzwvdWw+PC9saT4KKzwvdWw+PC9saT4KKzwvdWw+Cis8aDIgaWQ9Imtub3duLWxpbWl0YXRpb25zIj5Lbm93biBMaW1pdGF0aW9uczwvaDI+Cis8dWw+Cis8bGk+Tm9uZTwvbGk+Cis8L3VsPgorPGgyIGlkPSJiYWNrd2FyZC1jb21wYXRpYmlsaXR5Ij5CYWNrd2FyZCBjb21wYXRpYmlsaXR5PC9oMj4KKzx1bD4KKzxsaT5FeHRlbnNpb24gUlRDIEFQSXMgSEFMX1JUQ0V4X01vbm90b25pY0NvdW50ZXJJbmNyZW1lbnQgYW5kIEhBTF9SVENFeF9Nb25vdG9uaWNDb3VudGVyR2V0IEFQSXMgcHJvdG90eXBlcyB1cGRhdGVkIHdpdGggbmV3IHBhcmFtZXRlcnMgSW5zdGFuY2UgKGFsaWdubWVudCB3aXRoIG90aGVyIFNUTTMyIGZhbWlsZXMpPC9saT4KKzwvdWw+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0iY29sbGFwc2UiPgorPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjEwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xMCIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuOC4wIC8gMTQtRmVicnVhcnktMjAyMDwvc3Ryb25nPjwvbGFiZWw+Cis8ZGl2PgorPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzx1bD4KIDxsaT5HZW5lcmFsIHVwZGF0ZXMgdG8gZml4IGtub3duIGRlZmVjdHMgYW5kIGltcGxlbWVudGF0aW9uIGVuaGFuY2VtZW50czwvbGk+CiA8bGk+PHN0cm9uZz5IQUw8L3N0cm9uZz46IGdlbmVyaWMKIDx1bD4KQEAgLTI3NCwxMiArODgxLDI2IEBACiA8L3VsPjwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPgorPGgyIGlkPSJrbm93bi1saW1pdGF0aW9ucy0xIj5Lbm93biBMaW1pdGF0aW9uczwvaDI+Cis8dWw+Cis8bGk+PHN0cm9uZz5IQUwgSTJTPC9zdHJvbmc+OgorPHVsPgorPGxpPkZ1bGwgZHVwbGV4IFRyYW5zbWl0L3JlY2VpdmUgZmVhdHVyZSBub3QgYXZhaWxhYmxlCis8dWw+Cis8bGk+c3RtMzJoN3h4X2hhbF9pMnNfZXguaC9zdG0zMmg3eHhfaGFsX2kyc19leC5jOiBUaGVzZSBmaWxlcyBhcmUgZW1wdHkgYXMgZnVsbCBkdXBsZXggZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgcmVsZWFzZTwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPjwvbGk+Cis8L3VsPgorPGgyIGlkPSJiYWNrd2FyZC1jb21wYXRpYmlsaXR5LTEiPkJhY2t3YXJkIGNvbXBhdGliaWxpdHk8L2gyPgorPHVsPgorPGxpPk5vbmU8L2xpPgorPC91bD4KIDwvZGl2PgogPC9kaXY+CiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+Ci08aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uOCIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uOCIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuNy4wIC8gMDYtRGVjZW1iZXItMjAxOTwvc3Ryb25nPjwvbGFiZWw+Cis8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uOSIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uOSIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuNy4wIC8gMDYtRGVjZW1iZXItMjAxOTwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMSI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+T2ZmaWNpYWwgcmVsZWFzZSB3aXRoIHN1cHBvcnQgb2YgU1RNMzJIN0EzL0IzeHgvQjB4eCBuZXcgZGV2aWNlczxiciAvPgogPC9saT4KQEAgLTgzNCw3ICsxNDU1LDcgQEAKIDwvdWw+PC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08aDIgaWQ9Imtub3duLWxpbWl0YXRpb25zIj5Lbm93biBMaW1pdGF0aW9uczwvaDI+Cis8aDIgaWQ9Imtub3duLWxpbWl0YXRpb25zLTIiPktub3duIExpbWl0YXRpb25zPC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBJMlM8L3N0cm9uZz46CiA8dWw+CkBAIC04NDgsNyArMTQ2OSw3IEBACiA8bGk+TmV3IFBTU0kgZHJpdmVyIHByb3ZpZGVkIHN1cHBvcnRpbmcgYm90aCBtb2RlcyA6IERNQSBtb2RlIHJlY29tbWVuZGVkLyBwb2xsaW5nIG1vZGUgaGFzIGhhcmR3YXJlIGxpbWl0YXRpb24gY29uZmlybWVkIGFuZCBtZW50aW9uZWQgaW4gdGhlIFNUTTMySDdBMy9CM3h4L0IweHggZXJyYXRhc2hlZXQuPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08aDIgaWQ9ImJhY2t3YXJkLWNvbXBhdGliaWxpdHkiPkJhY2t3YXJkIGNvbXBhdGliaWxpdHk8L2gyPgorPGgyIGlkPSJiYWNrd2FyZC1jb21wYXRpYmlsaXR5LTIiPkJhY2t3YXJkIGNvbXBhdGliaWxpdHk8L2gyPgogPHVsPgogPGxpPjxzdHJvbmc+SEFMIEkyUzwvc3Ryb25nPjoKIDx1bD4KQEAgLTg3Miw3ICsxNDkzLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb243IiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb243IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS42LjAgLyAyOC1KdW5lLTIwMTk8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTIiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy0zIj5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgaW1wbGVtZW50YXRpb24gZW5oYW5jZW1lbnRzPC9saT4KIDxsaT48c3Ryb25nPkhBTDwvc3Ryb25nPjogZ2VuZXJpYwpAQCAtMTE0NywxMSArMTc2OCwxMSBAQAogPC91bD48L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxoMiBpZD0ia25vd24tbGltaXRhdGlvbnMtMSI+S25vd24gTGltaXRhdGlvbnM8L2gyPgorPGgyIGlkPSJrbm93bi1saW1pdGF0aW9ucy0zIj5Lbm93biBMaW1pdGF0aW9uczwvaDI+CiA8dWw+CiA8bGk+Tm9uZTwvbGk+CiA8L3VsPgotPGgyIGlkPSJiYWNrd2FyZC1jb21wYXRpYmlsaXR5LTEiPkJhY2t3YXJkIGNvbXBhdGliaWxpdHk8L2gyPgorPGgyIGlkPSJiYWNrd2FyZC1jb21wYXRpYmlsaXR5LTMiPkJhY2t3YXJkIGNvbXBhdGliaWxpdHk8L2gyPgogPHVsPgogPGxpPjxzdHJvbmc+SEFMIFRJTTwvc3Ryb25nPjoKIDx1bD4KQEAgLTExNjksNyArMTc5MCw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uNiIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uNiIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuNS4wIC8gMDUtQXByaWwtMjAxOTwvc3Ryb25nPjwvbGFiZWw+CiA8ZGl2PgotPGgyIGlkPSJtYWluLWNoYW5nZXMtMyI+TWFpbiBDaGFuZ2VzPC9oMj4KKzxoMiBpZD0ibWFpbi1jaGFuZ2VzLTQiPk1haW4gQ2hhbmdlczwvaDI+CiA8dWw+CiA8bGk+R2VuZXJhbCB1cGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIGFuZCBpbXBsZW1lbnRhdGlvbiBlbmhhbmNlbWVudHM8L2xpPgogPGxpPkFkZCBzdXBwb3J0IGZvciBWT1MwIHBvd2VyIHJlZ3VsYXRvciB2b2x0YWdlIHNjYWxpbmcgd2l0aCA0ODBNSHogb3ZlciBjbG9jazwvbGk+CkBAIC0xNjM5LDcgKzIyNjAsNyBAQAogPGxpPlVwZGF0ZSBMTF9Jbml0MW1zVGljayBhbmQgTExfU2V0U3lzdGVtQ29yZUNsb2NrIGRlc2NyaXB0aW9uIGZvciA8c3Ryb25nPkRVQUwgQ09SRTwvc3Ryb25nPiBsaW5lczwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPgotPGgyIGlkPSJrbm93bi1saW1pdGF0aW9ucy0yIj5Lbm93biBMaW1pdGF0aW9uczwvaDI+Cis8aDIgaWQ9Imtub3duLWxpbWl0YXRpb25zLTQiPktub3duIExpbWl0YXRpb25zPC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBTRDwvc3Ryb25nPjoKIDx1bD4KQEAgLTE2NTMsNyArMjI3NCw3IEBACiA8bGk+RnVsbCBkdXBsZXggVHJhbnNtaXQvcmVjZWl2ZSBmZWF0dXJlIG5vdCBhdmFpbGFibGU8L2xpPgogPC91bD48L2xpPgogPC91bD4KLTxoMiBpZD0iYmFja3dhcmQtY29tcGF0aWJpbGl0eS0yIj5CYWNrd2FyZCBjb21wYXRpYmlsaXR5PC9oMj4KKzxoMiBpZD0iYmFja3dhcmQtY29tcGF0aWJpbGl0eS00Ij5CYWNrd2FyZCBjb21wYXRpYmlsaXR5PC9oMj4KIDx1bD4KIDxsaT48c3Ryb25nPkhBTCBBREM8L3N0cm9uZz46CiA8dWw+CkBAIC0xNzA1LDcgKzIzMjYsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjUiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjQuMCAvIDMwLU5vdmVtYmVyLTIwMTg8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTQiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy01Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgaW1wbGVtZW50YXRpb24gZW5oYW5jZW1lbnRzPC9saT4KIDxsaT5BZGQgTEwgZHJpdmVycyA6IExMX0FEQywgTExfQkRNQSwgTExfQlVTLCBMTF9DT01QLCBMTF9DT1JURVgsIExMX0NSQywgTExfREFDLCBMTF9ETUEsIExMX0RNQTJELCBMTF9ETUFNVVgsIExMX0VYVEksIExMX0dQSU8sIExMX0hSVElNLCBMTF9IU0VNLCBMTF9JMkMsIExMX0lXREcsIExMX0xQVElNLCBMTF9MUFVBUlQsIExMX01ETUEsIExMX09QQU1QLExMX1BXUiwgTExfUkNDLCBMTF9STkcsIExMX1JUQywgTExfU1BJLCBMTF9TV1BNSSwgTExfU1lTVEVNLCBMTF9USU0sIExMX1VTQVJULCBMTF9VVElMUywgTExfV1dERzwvbGk+CkBAIC0xOTc0LDcgKzI1OTUsNyBAQAogPGxpPlByb3RlY3QgdGhlIGhjZCBkcml2ZXIgdG8gYmUgdXNlZCBvbmx5IGlmIHRoZSBVU0JfT1RHX0ZTLCBVU0JfT1RHX0hTIGFyZSBlbmFibGVkPC9saT4KIDwvdWw+PC9saT4KIDwvdWw+Ci08aDIgaWQ9Imtub3duLWxpbWl0YXRpb25zLTMiPktub3duIExpbWl0YXRpb25zPC9oMj4KKzxoMiBpZD0ia25vd24tbGltaXRhdGlvbnMtNSI+S25vd24gTGltaXRhdGlvbnM8L2gyPgogPHVsPgogPGxpPjxzdHJvbmc+SEFMIEkyUzwvc3Ryb25nPjoKIDx1bD4KQEAgLTE5ODIsNyArMjYwMyw3IEBACiA8bGk+QSBuZXcgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciB3aWxsIGJlIGF2YWlsYWJsZSBpbiBuZXh0IHJlbGVhc2Ugd2l0aCBmdWxsIGZlYXR1cmVzIHRlc3RlZDwvbGk+CiA8L3VsPjwvbGk+CiA8L3VsPgotPGgyIGlkPSJiYWNrd2FyZC1jb21wYXRpYmlsaXR5LTMiPkJhY2t3YXJkIGNvbXBhdGliaWxpdHk8L2gyPgorPGgyIGlkPSJiYWNrd2FyZC1jb21wYXRpYmlsaXR5LTUiPkJhY2t3YXJkIGNvbXBhdGliaWxpdHk8L2gyPgogPHVsPgogPGxpPjxzdHJvbmc+SEFMIEFEQzwvc3Ryb25nPjoKIDx1bD4KQEAgLTIwMjIsNyArMjY0Myw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uNCIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uNCIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMy4wIC8gMjktSnVuZS0yMDE4PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy01Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtNiI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5VcGRhdGVzIHRvIGZpeCBrbm93biBkZWZlY3RzIG9uIEhBTCBDb3J0ZXgsIEhBTCBSQ0MgYW5kIEhBTCBTRE1NQyBkcml2ZXJzPC9saT4KIDxsaT48c3Ryb25nPkhBTCBDb3J0ZXg8L3N0cm9uZz46IERyaXZlciB1cGRhdGUgdG8gc3VwcG9ydCAxNiBNUFUgcmVnaW9ucyBpbnN0ZWFkIG9mIDguIFVzZXIgY2FuIG5vdyBzZWxlY3QgYW4gTVBVIHJlZ2lvbnMgZnJvbSBNUFVfUkVHSU9OX05VTUJFUjAgdG8gTVBVX1JFR0lPTl9OVU1CRVIxNTwvbGk+CkBAIC0yMDM0LDcgKzI2NTUsNyBAQAogPGRpdiBjbGFzcz0iY29sbGFwc2UiPgogPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iY29sbGFwc2Utc2VjdGlvbjMiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPGxhYmVsIGZvcj0iY29sbGFwc2Utc2VjdGlvbjMiIGFyaWEtaGlkZGVuPSJ0cnVlIj48c3Ryb25nPlYxLjIuMCAvIDI5LURlY2VtYmVyLTIwMTc8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTYiPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy03Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9saT4KIDxsaT48c3Ryb25nPkhBTCBTUEk8L3N0cm9uZz46IERyaXZlciByZXdvcmtlZCB0byBmaXggY3JpdGljYWwgaXNzdWVzPC9saT4KQEAgLTIwNDUsNyArMjY2Niw3IEBACiA8ZGl2IGNsYXNzPSJjb2xsYXBzZSI+CiA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjb2xsYXBzZS1zZWN0aW9uMiIgYXJpYS1oaWRkZW49InRydWUiPiA8bGFiZWwgZm9yPSJjb2xsYXBzZS1zZWN0aW9uMiIgYXJpYS1oaWRkZW49InRydWUiPjxzdHJvbmc+VjEuMS4wIC8gMzEtQXVndXN0LTIwMTc8L3N0cm9uZz48L2xhYmVsPgogPGRpdj4KLTxoMiBpZD0ibWFpbi1jaGFuZ2VzLTciPk1haW4gQ2hhbmdlczwvaDI+Cis8aDIgaWQ9Im1haW4tY2hhbmdlcy04Ij5NYWluIENoYW5nZXM8L2gyPgogPHVsPgogPGxpPkdlbmVyYWwgdXBkYXRlcyB0byBmaXgga25vd24gZGVmZWN0cyBhbmQgZW5oYW5jZW1lbnRzIGltcGxlbWVudGF0aW9uPC9saT4KIDxsaT48c3Ryb25nPkhBTCBGTEFTSDwvc3Ryb25nPjogQWRkIE1hc3MgRXJhc2UgZm9yIGJvdGggYmFua3M8L2xpPgpAQCAtMjA2MCw3ICsyNjgxLDcgQEAKIDxkaXYgY2xhc3M9ImNvbGxhcHNlIj4KIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNvbGxhcHNlLXNlY3Rpb24xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDxsYWJlbCBmb3I9ImNvbGxhcHNlLXNlY3Rpb24xIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHN0cm9uZz5WMS4wLjAgLyAyMS1BcHJpbC0yMDE3PC9zdHJvbmc+PC9sYWJlbD4KIDxkaXY+Ci08aDIgaWQ9Im1haW4tY2hhbmdlcy04Ij5NYWluIENoYW5nZXM8L2gyPgorPGgyIGlkPSJtYWluLWNoYW5nZXMtOSI+TWFpbiBDaGFuZ2VzPC9oMj4KIDx1bD4KIDxsaT5GaXJzdCBvZmZpY2lhbCByZWxlYXNlIGZvciBTVE0zMkg3NDN4eC83NTN4eCBkZXZpY2VzPC9saT4KIDwvdWw+CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbC5jIGIvU3JjL3N0bTMyaDd4eF9oYWwuYwppbmRleCA4NjFiZjQwLi5jMTI4MTQ1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsLmMKQEAgLTQ3LDEwICs0NywxMCBAQAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKioKLSAqIEBicmllZiBTVE0zMkg3eHggSEFMIERyaXZlciB2ZXJzaW9uIG51bWJlciBWMS44LjAKKyAqIEBicmllZiBTVE0zMkg3eHggSEFMIERyaXZlciB2ZXJzaW9uIG51bWJlciBWMS45LjAKICAgICovCiAjZGVmaW5lIF9fU1RNMzJIN3h4X0hBTF9WRVJTSU9OX01BSU4gICAoMHgwMVVMKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovCi0jZGVmaW5lIF9fU1RNMzJIN3h4X0hBTF9WRVJTSU9OX1NVQjEgICAoMHgwOFVMKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCisjZGVmaW5lIF9fU1RNMzJIN3h4X0hBTF9WRVJTSU9OX1NVQjEgICAoMHgwOVVMKSAvKiE8IFsyMzoxNl0gc3ViMSB2ZXJzaW9uICovCiAjZGVmaW5lIF9fU1RNMzJIN3h4X0hBTF9WRVJTSU9OX1NVQjIgICAoMHgwMFVMKSAvKiE8IFsxNTo4XSAgc3ViMiB2ZXJzaW9uICovCiAjZGVmaW5lIF9fU1RNMzJIN3h4X0hBTF9WRVJTSU9OX1JDICAgICAoMHgwMFVMKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLwogI2RlZmluZSBfX1NUTTMySDd4eF9IQUxfVkVSU0lPTiAgICAgICAgICgoX19TVE0zMkg3eHhfSEFMX1ZFUlNJT05fTUFJTiA8PCAyNClcCkBAIC0yNjcsMTEgKzI2NywxMSBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAotICAvKiBDb25maWd1cmUgdGhlIFN5c1RpY2sgdG8gaGF2ZSBpbnRlcnJ1cHQgaW4gMW1zIHRpbWUgYmFzaXMqLwotICBpZiAoSEFMX1NZU1RJQ0tfQ29uZmlnKFN5c3RlbUNvcmVDbG9jayAvICgxMDAwVUwgLyAodWludDMyX3QpdXdUaWNrRnJlcSkpID4gMFUpCi0gIHsKLSAgICByZXR1cm4gSEFMX0VSUk9SOwotICB9CisgICAgLyogQ29uZmlndXJlIHRoZSBTeXNUaWNrIHRvIGhhdmUgaW50ZXJydXB0IGluIDFtcyB0aW1lIGJhc2lzKi8KKyAgICBpZiAoSEFMX1NZU1RJQ0tfQ29uZmlnKFN5c3RlbUNvcmVDbG9jayAvICgxMDAwVUwgLyAodWludDMyX3QpdXdUaWNrRnJlcSkpID4gMFUpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CiAKICAgLyogQ29uZmlndXJlIHRoZSBTeXNUaWNrIElSUSBwcmlvcml0eSAqLwogICBpZiAoVGlja1ByaW9yaXR5IDwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSkKQEAgLTg3NCw2ICs4NzQsNDIgQEAKIH0KICNlbmRpZiAvKiBTWVNDRkdfQ0NDUl9OQ0NfTU1DICovCiAKKyNpZiBkZWZpbmVkKFNZU0NGR19BREMyQUxUX0FEQzJfUk9VVDApCisvKiogQGJyaWVmICBTWVNDRkcgQURDMiBpbnRlcm5hbCBpbnB1dCBhbHRlcm5hdGUgY29ubmVjdGlvbiBtYWNyb3MKKyAgKiBAcGFyYW0gQWRjMkFsdFJvdXQwIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIDoKKyAgKiAgICAgQGFyZyBAcmVmIFNZU0NGR19BREMyX1JPVVQwX0RBQzFfMSAgIERBQzFfb3V0MSBjb25uZWN0ZWQgdG8gQURDMiBWSU5QWzE2XQorICAqICAgICBAYXJnIEByZWYgU1lTQ0ZHX0FEQzJfUk9VVDBfVkJBVDQgICAgVkJBVC80IGNvbm5lY3RlZCB0byBBREMyIFZJTlBbMTZdCisgICovCit2b2lkIEhBTF9TWVNDRkdfQURDMkFMVF9Sb3V0MENvbmZpZyh1aW50MzJfdCBBZGMyQWx0Um91dDApCit7CisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19TWVNDRkdfQURDMkFMVF9ST1VUMChBZGMyQWx0Um91dDApKTsKKworICBNT0RJRllfUkVHKFNZU0NGRy0+QURDMkFMVCwgU1lTQ0ZHX0FEQzJBTFRfQURDMl9ST1VUMCwgQWRjMkFsdFJvdXQwKTsKK30KKy8qKgorICAqIEB9CisgICovCisjZW5kaWYgLypTWVNDRkdfQURDMkFMVF9BREMyX1JPVVQwKi8KKworI2lmIGRlZmluZWQoU1lTQ0ZHX0FEQzJBTFRfQURDMl9ST1VUMSkKKy8qKiBAYnJpZWYgIFNZU0NGRyBBREMyIGludGVybmFsIGlucHV0IGFsdGVybmF0ZSBjb25uZWN0aW9uIG1hY3JvcworICAqIEBwYXJhbSBBZGMyQWx0Um91dDEgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIDoKKyAgKiAgICAgQGFyZyBAcmVmIFNZU0NGR19BREMyX1JPVVQxX0RBQzFfMiAgIERBQzFfb3V0MiBjb25uZWN0ZWQgdG8gQURDMiBWSU5QWzE3XQorICAqICAgICBAYXJnIEByZWYgU1lTQ0ZHX0FEQzJfUk9VVDFfVlJFRklOVCAgVlJFRklOVCBjb25uZWN0ZWQgdG8gQURDMiBWSU5QWzE3XQorICAqLwordm9pZCBIQUxfU1lTQ0ZHX0FEQzJBTFRfUm91dDFDb25maWcodWludDMyX3QgQWRjMkFsdFJvdXQxKQoreworICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfU1lTQ0ZHX0FEQzJBTFRfUk9VVDEoQWRjMkFsdFJvdXQxKSk7CisKKyAgTU9ESUZZX1JFRyhTWVNDRkctPkFEQzJBTFQsIFNZU0NGR19BREMyQUxUX0FEQzJfUk9VVDEsIEFkYzJBbHRSb3V0MSk7Cit9CisvKioKKyAgKiBAfQorICAqLworI2VuZGlmIC8qU1lTQ0ZHX0FEQzJBTFRfQURDMl9ST1VUMSovCisKIC8qKgogICAqIEBicmllZiAgRW5hYmxlIHRoZSBEZWJ1ZyBNb2R1bGUgZHVyaW5nIERvbWFpbjEvQ0RvbWFpbiBTTEVFUCBtb2RlCiAgICogQHJldHZhbCBOb25lCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9hZGMuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2FkYy5jCmluZGV4IDM4MTgzZTAuLjljMWI1MzAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX2FkYy5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2FkYy5jCkBAIC0yNSw2ICsyNSw4IEBACiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBbLi5dCiAgICgrKSAxNi1iaXQsIDE0LWJpdCwgMTItYml0LCAxMC1iaXQgb3IgOC1iaXQgY29uZmlndXJhYmxlIHJlc29sdXRpb24uCisgICAgICAgTm90ZTogT24gZGV2aWNlcyBTVE0zMkg3Mnh4IGFuZCBTVE0zMkg3M3h4LCB0aGVzZSByZXNvbHV0aW9uIGFyZSBhcHBsaWNhYmxlIHRvIGluc3RhbmNlcyBBREMxIGFuZCBBREMyLiAKKwkgICBBREMzIGlzIGZlYXR1cmluZyByZXNvbHV0aW9ucyAxMi1iaXQsIDEwLWJpdCwgOC1iaXQsIDYtYml0LgogCiAgICgrKSBJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBhdCB0aGUgZW5kIG9mIHJlZ3VsYXIgY29udmVyc2lvbiBhbmQgaW4gY2FzZSBvZgogICAgICAgYW5hbG9nIHdhdGNoZG9nIG9yIG92ZXJydW4gZXZlbnRzLgpAQCAtMzI3LDYgKzMyOSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfRVhURU4gIHwgQURDX0NGR1JfRVhUU0VMKSkgLyohPCBBRENfQ0ZHUiBmaWVsZHMgb2YgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSB1cGRhdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBubyByZWd1bGFyIGNvbnZlcnNpb24gaXMgb24tZ29pbmcgKi8KIAorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisjZGVmaW5lIEFEQzNfQ0ZHUl9GSUVMRFNfMSAgKChBREMzX0NGR1JfUkVTICAgIHwgQURDM19DRkdSX0FMSUdOICAgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfQ09OVCAgIHwgQURDX0NGR1JfT1ZSTU9EICB8XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9ESVNDRU4gfCBBRENfQ0ZHUl9ESVNDTlVNIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0VYVEVOICB8IEFEQ19DRkdSX0VYVFNFTCkpICAgLyohPCBBRENfQ0ZHUiBmaWVsZHMgb2YgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSB1cGRhdGVkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBubyByZWd1bGFyIGNvbnZlcnNpb24gaXMgb24tZ29pbmcgKi8KKyNlbmRpZgorCiAjZGVmaW5lIEFEQ19DRkdSMl9GSUVMRFMgICgodWludDMyX3QpKEFEQ19DRkdSMl9ST1ZTRSB8IEFEQ19DRkdSMl9PVlNSICB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1IyX09WU1MgfCBBRENfQ0ZHUjJfVFJPVlMgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSMl9ST1ZTTSkpICAgICAgICAgICAgICAgICAgICAgLyohPCBBRENfQ0ZHUjIgZmllbGRzIG9mIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdXBkYXRlZCB3aGVuIG5vIGNvbnZlcnNpb24KQEAgLTM0Niw3ICszNTYsNyBAQAogLyogICAtIEFEQyBjbG9jayB3aXRoIHByZXNjYWxlciAyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICA4MjMgKiAyNTYgPSAyMTA2ODggY2xvY2sgY3ljbGVzIG1heCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBVbml0OiBjeWNsZXMgb2YgQ1BVIGNsb2NrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBBRENfQ09OVkVSU0lPTl9USU1FX01BWF9DUFVfQ1lDTEVTICgodWludDMyX3QpIDIxMDY4OCkgIC8qITwgQURDIGNvbnZlcnNpb24gY29tcGxldGlvbiB0aW1lLW91dCB2YWx1ZSAqLworI2RlZmluZSBBRENfQ09OVkVSU0lPTl9USU1FX01BWF9DUFVfQ1lDTEVTICgyMTA2ODhVTCkgIC8qITwgQURDIGNvbnZlcnNpb24gY29tcGxldGlvbiB0aW1lLW91dCB2YWx1ZSAqLwogCiAvKioKICAgKiBAfQpAQCAtNTc1LDI2ICs1ODUsNDYgQEAKICAgICAvKiAgLSBkaXNjb250aW51b3VzIG1vZGUgICAgICAgICAgICAgICAgICAgICAgIEluaXQuRGlzY29udGludW91c0NvbnZNb2RlICovCiAgICAgLyogIC0gZGlzY29udGludW91cyBtb2RlIGNoYW5uZWwgY291bnQgICAgICAgICBJbml0Lk5ick9mRGlzY0NvbnZlcnNpb24gICAqLwogI2lmIGRlZmluZWQoQURDX1ZFUl9WNV8zKQotICAgICAgdG1wQ0ZHUiAgPSAoQURDX0NGR1JfQ09OVElOVU9VUygodWludDMyX3QpaGFkYy0+SW5pdC5Db250aW51b3VzQ29udk1vZGUpICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuT3ZlcnJ1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICBoYWRjLT5Jbml0LlJlc29sdXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgQURDX0NGR1JfUkVHX0RJU0NPTlRJTlVPVVMoKHVpbnQzMl90KWhhZGMtPkluaXQuRGlzY29udGludW91c0NvbnZNb2RlKSApOwogCi0jZWxzZQotICAgIGlmKChIQUxfR2V0UkVWSUQoKSA+IFJFVl9JRF9ZKSAmJiAoQURDX1JFU09MVVRJT05fOEIgPT0gaGFkYy0+SW5pdC5SZXNvbHV0aW9uKSkKKyAgICB0bXBDRkdSICA9IChBRENfQ0ZHUl9DT05USU5VT1VTKCh1aW50MzJfdCloYWRjLT5Jbml0LkNvbnRpbnVvdXNDb252TW9kZSkgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICBoYWRjLT5Jbml0Lk92ZXJydW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuUmVzb2x1dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgQURDX0NGR1JfUkVHX0RJU0NPTlRJTlVPVVMoKHVpbnQzMl90KWhhZGMtPkluaXQuRGlzY29udGludW91c0NvbnZNb2RlKSk7CisKKyNlbGlmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgICAgaWYgKGhhZGMtPkluc3RhbmNlID09IEFEQzMpCiAgICAgewotICAgICAgLyogZm9yIFNUTTMySDcgc2lsaWNvbiByZXYuQiBhbmQgYWJvdmUgLCBBRENfQ0ZHUl9SRVMgdmFsdWUgZm9yIDhiaXRzIHJlc29sdXRpb24gaXMgOiBiMTExICovCi0gICAgICB0bXBDRkdSICA9IChBRENfQ0ZHUl9DT05USU5VT1VTKCh1aW50MzJfdCloYWRjLT5Jbml0LkNvbnRpbnVvdXNDb252TW9kZSkgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgaGFkYy0+SW5pdC5PdmVycnVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuUmVzb2x1dGlvbiB8KEFEQ19DRkdSX1JFU18xfEFEQ19DRkdSX1JFU18wKSAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9SRUdfRElTQ09OVElOVU9VUygodWludDMyX3QpaGFkYy0+SW5pdC5EaXNjb250aW51b3VzQ29udk1vZGUpICk7CisgICAgICB0bXBDRkdSICA9IChBRENfQ0ZHUl9DT05USU5VT1VTKCh1aW50MzJfdCloYWRjLT5Jbml0LkNvbnRpbnVvdXNDb252TW9kZSkgICAgICAgICB8CisgICAgICAgICAgICAgICAgICBoYWRjLT5Jbml0Lk92ZXJydW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuRGF0YUFsaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgKChfX0xMX0FEQzEyX1JFU09MVVRJT05fVE9fQURDMyhoYWRjLT5Jbml0LlJlc29sdXRpb24pICAmIChBRENfQ0ZHUl9SRVNfMSB8IEFEQ19DRkdSX1JFU18wKSkgPDwgMVVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX1JFR19ESVNDT05USU5VT1VTKCh1aW50MzJfdCloYWRjLT5Jbml0LkRpc2NvbnRpbnVvdXNDb252TW9kZSkpOwogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgdG1wQ0ZHUiAgPSAoQURDX0NGR1JfQ09OVElOVU9VUygodWludDMyX3QpaGFkYy0+SW5pdC5Db250aW51b3VzQ29udk1vZGUpICAgICAgICAgIHwKICAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuT3ZlcnJ1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICBoYWRjLT5Jbml0LlJlc29sdXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgQURDX0NGR1JfUkVHX0RJU0NPTlRJTlVPVVMoKHVpbnQzMl90KWhhZGMtPkluaXQuRGlzY29udGludW91c0NvbnZNb2RlKSApOworICAgICAgICAgICAgICAgICAgQURDX0NGR1JfUkVHX0RJU0NPTlRJTlVPVVMoKHVpbnQzMl90KWhhZGMtPkluaXQuRGlzY29udGludW91c0NvbnZNb2RlKSk7CisgICAgfQorCisjZWxzZQorCisgICAgaWYgKChIQUxfR2V0UkVWSUQoKSA+IFJFVl9JRF9ZKSAmJiAoQURDX1JFU09MVVRJT05fOEIgPT0gaGFkYy0+SW5pdC5SZXNvbHV0aW9uKSkKKyAgICB7CisgICAgICAvKiBmb3IgU1RNMzJINyBzaWxpY29uIHJldi5CIGFuZCBhYm92ZSAsIEFEQ19DRkdSX1JFUyB2YWx1ZSBmb3IgOGJpdHMgcmVzb2x1dGlvbiBpcyA6IGIxMTEgKi8KKyAgICAgIHRtcENGR1IgID0gKEFEQ19DRkdSX0NPTlRJTlVPVVMoKHVpbnQzMl90KWhhZGMtPkluaXQuQ29udGludW91c0NvbnZNb2RlKSAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICBoYWRjLT5Jbml0Lk92ZXJydW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgaGFkYy0+SW5pdC5SZXNvbHV0aW9uIHwgKEFEQ19DRkdSX1JFU18xIHwgQURDX0NGR1JfUkVTXzApICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX1JFR19ESVNDT05USU5VT1VTKCh1aW50MzJfdCloYWRjLT5Jbml0LkRpc2NvbnRpbnVvdXNDb252TW9kZSkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCisgICAgICB0bXBDRkdSICA9IChBRENfQ0ZHUl9DT05USU5VT1VTKCh1aW50MzJfdCloYWRjLT5Jbml0LkNvbnRpbnVvdXNDb252TW9kZSkgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgaGFkYy0+SW5pdC5PdmVycnVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuUmVzb2x1dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9SRUdfRElTQ09OVElOVU9VUygodWludDMyX3QpaGFkYy0+SW5pdC5EaXNjb250aW51b3VzQ29udk1vZGUpKTsKICAgICB9CiAKICNlbmRpZiAvKiBBRENfVkVSX1Y1XzMgKi8KQEAgLTYxNiw4ICs2NDYsMjQgQEAKICAgICAgICAgICAgICAgICAgKTsKICAgICB9CiAKKworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgICAgaWYgKGhhZGMtPkluc3RhbmNlID09IEFEQzMpCisgICAgeworICAgICAgLyogVXBkYXRlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgQ0ZHUiAqLworICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+Q0ZHUiwgQURDM19DRkdSX0ZJRUxEU18xLCB0bXBDRkdSKTsKKyAgICAgIC8qIENvbmZpZ3VyYXRpb24gb2Ygc2FtcGxpbmcgbW9kZSAqLworICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+Q0ZHUjIsIEFEQzNfQ0ZHUjJfQlVMQiB8IEFEQzNfQ0ZHUjJfU01QVFJJRywgaGFkYy0+SW5pdC5TYW1wbGluZ01vZGUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogVXBkYXRlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgQ0ZHUiAqLworICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+Q0ZHUiwgQURDX0NGR1JfRklFTERTXzEsIHRtcENGR1IpOworICAgIH0KKyNlbHNlCiAgICAgLyogVXBkYXRlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgQ0ZHUiAqLwogICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkNGR1IsIEFEQ19DRkdSX0ZJRUxEU18xLCB0bXBDRkdSKTsKKyNlbmRpZgogCiAgICAgLyogUGFyYW1ldGVycyB1cGRhdGUgY29uZGl0aW9uZWQgdG8gQURDIHN0YXRlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qIFBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdXBkYXRlZCB3aGVuIEFEQyBpcyBkaXNhYmxlZCBvciBlbmFibGVkIHdpdGhvdXQgKi8KQEAgLTYzMSwzOCArNjc3LDEwMiBAQAogICAgICAgICAmJiAodG1wX2FkY19pc19jb252ZXJzaW9uX29uX2dvaW5nX2luamVjdGVkID09IDBVTCkKICAgICAgICApCiAgICAgeworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgICAgICBpZiAoaGFkYy0+SW5zdGFuY2UgPT0gQURDMykKKyAgICAgIHsKKyAgICAgICAgdG1wQ0ZHUiA9ICgKKyAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfQVVUT1dBSVQoKHVpbnQzMl90KWhhZGMtPkluaXQuTG93UG93ZXJBdXRvV2FpdCkgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgQURDM19DRkdSX0RNQUNPTlRSRVEoKHVpbnQzMl90KWhhZGMtPkluaXQuRE1BQ29udGludW91c1JlcXVlc3RzKSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHRtcENGR1IgPSAoCisgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FVVE9XQUlUKCh1aW50MzJfdCloYWRjLT5Jbml0Lkxvd1Bvd2VyQXV0b1dhaXQpICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0RNQUNPTlRSRVEoKHVpbnQzMl90KWhhZGMtPkluaXQuQ29udmVyc2lvbkRhdGFNYW5hZ2VtZW50KSk7CisgICAgICB9CisjZWxzZQogICAgICAgdG1wQ0ZHUiA9ICgKLSAgICAgICAgICAgICAgICAgQURDX0NGR1JfQVVUT1dBSVQoKHVpbnQzMl90KWhhZGMtPkluaXQuTG93UG93ZXJBdXRvV2FpdCkgICAgICAgIHwKLSAgICAgICAgICAgICAgICAgQURDX0NGR1JfRE1BQ09OVFJFUSgodWludDMyX3QpaGFkYy0+SW5pdC5Db252ZXJzaW9uRGF0YU1hbmFnZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FVVE9XQUlUKCh1aW50MzJfdCloYWRjLT5Jbml0Lkxvd1Bvd2VyQXV0b1dhaXQpICAgICAgICB8CisgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9ETUFDT05UUkVRKCh1aW50MzJfdCloYWRjLT5Jbml0LkNvbnZlcnNpb25EYXRhTWFuYWdlbWVudCkpOworI2VuZGlmCiAKICAgICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkNGR1IsIEFEQ19DRkdSX0ZJRUxEU18yLCB0bXBDRkdSKTsKIAogICAgICAgaWYgKGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nTW9kZSA9PSBFTkFCTEUpCiAgICAgICB7CisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICAgICAgaWYgKGhhZGMtPkluc3RhbmNlID09IEFEQzMpCisgICAgICAgIHsKKyAgICAgICAgICBhc3NlcnRfcGFyYW0oSVNfQURDX09WRVJTQU1QTElOR19SQVRJT19BREMzKGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLlJhdGlvKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0FEQ19PVkVSU0FNUExJTkdfUkFUSU8oaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuUmF0aW8pKTsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0FEQ19PVkVSU0FNUExJTkdfUkFUSU8oaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuUmF0aW8pKTsKKyNlbmRpZgogICAgICAgICBhc3NlcnRfcGFyYW0oSVNfQURDX1JJR0hUX0JJVF9TSElGVChoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZy5SaWdodEJpdFNoaWZ0KSk7CiAgICAgICAgIGFzc2VydF9wYXJhbShJU19BRENfVFJJR0dFUkVEX09WRVJTQU1QTElOR19NT0RFKGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLlRyaWdnZXJlZE1vZGUpKTsKICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0FEQ19SRUdPVkVSU0FNUExJTkdfTU9ERShoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZy5PdmVyc2FtcGxpbmdTdG9wUmVzZXQpKTsKIAotICAgICAgaWYgKChoYWRjLT5Jbml0LkV4dGVybmFsVHJpZ0NvbnYgPT0gQURDX1NPRlRXQVJFX1NUQVJUKQorICAgICAgICBpZiAoKGhhZGMtPkluaXQuRXh0ZXJuYWxUcmlnQ29udiA9PSBBRENfU09GVFdBUkVfU1RBUlQpCiAgICAgICAgICAgICB8fCAoaGFkYy0+SW5pdC5FeHRlcm5hbFRyaWdDb252RWRnZSA9PSBBRENfRVhURVJOQUxUUklHQ09OVkVER0VfTk9ORSkpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBNdWx0aSB0cmlnZ2VyIGlzIG5vdCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlLXRyaWdnZXJlZCBjb252ZXJzaW9ucyAqLwogICAgICAgICAgIGFzc2VydF9wYXJhbSgoaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuVHJpZ2dlcmVkTW9kZSA9PSBBRENfVFJJR0dFUkVETU9ERV9TSU5HTEVfVFJJR0dFUikpOwogICAgICAgICB9CiAKLSAgICAgICAvKiBDb25maWd1cmF0aW9uIG9mIE92ZXJzYW1wbGVyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgLyogIC0gT3ZlcnNhbXBsaW5nIFJhdGlvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgIC8qICAtIFJpZ2h0IGJpdCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAvKiAgLSBMZWZ0IGJpdCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgLyogIC0gVHJpZ2dlcmVkIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgIC8qICAtIE92ZXJzYW1wbGluZyBtb2RlIChjb250aW51ZWQvcmVzdW1lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5DRkdSMiwgQURDX0NGR1IyX0ZJRUxEUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1IyX1JPVlNFICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuUmF0aW8gLSAxVUwpIDw8IEFEQ19DRkdSMl9PVlNSX1BvcykgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZy5SaWdodEJpdFNoaWZ0IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuVHJpZ2dlcmVkTW9kZSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLk92ZXJzYW1wbGluZ1N0b3BSZXNldCk7CisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICAgICAgaWYgKGhhZGMtPkluc3RhbmNlID09IEFEQzMpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBDb25maWd1cmF0aW9uIG9mIE92ZXJzYW1wbGVyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgLSBPdmVyc2FtcGxpbmcgUmF0aW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgLSBSaWdodCBiaXQgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgLSBUcmlnZ2VyZWQgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgLSBPdmVyc2FtcGxpbmcgbW9kZSAoY29udGludWVkL3Jlc3VtZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5DRkdSMiwKKyAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSMl9PVlNSICB8CisgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUjJfT1ZTUyAgfAorICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1IyX1RST1ZTIHwKKyAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSMl9ST1ZTTSwKKyAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSMl9ST1ZTRSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuUmF0aW8gICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICBoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZy5SaWdodEJpdFNoaWZ0IHwKKyAgICAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLlRyaWdnZXJlZE1vZGUgfAorICAgICAgICAgICAgICAgICAgICAgaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuT3ZlcnNhbXBsaW5nU3RvcFJlc2V0CisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisKKyAgICAgICAgICAvKiBDb25maWd1cmF0aW9uIG9mIE92ZXJzYW1wbGVyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogIC0gT3ZlcnNhbXBsaW5nIFJhdGlvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAtIFJpZ2h0IGJpdCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAvKiAgLSBMZWZ0IGJpdCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgLyogIC0gVHJpZ2dlcmVkIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIC8qICAtIE92ZXJzYW1wbGluZyBtb2RlIChjb250aW51ZWQvcmVzdW1lZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5DRkdSMiwgQURDX0NGR1IyX0ZJRUxEUywKKyAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSMl9ST1ZTRSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgKChoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZy5SYXRpbyAtIDFVTCkgIDw8IEFEQ19DRkdSMl9PVlNSX1BvcykgfAorICAgICAgICAgICAgICAgICAgICAgaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuUmlnaHRCaXRTaGlmdCB8CisgICAgICAgICAgICAgICAgICAgICBoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZy5UcmlnZ2VyZWRNb2RlIHwKKyAgICAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLk92ZXJzYW1wbGluZ1N0b3BSZXNldCk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIC8qIENvbmZpZ3VyYXRpb24gb2YgT3ZlcnNhbXBsZXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogIC0gT3ZlcnNhbXBsaW5nIFJhdGlvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgLSBSaWdodCBiaXQgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIC8qICAtIExlZnQgYml0IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogIC0gVHJpZ2dlcmVkIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAgLSBPdmVyc2FtcGxpbmcgbW9kZSAoY29udGludWVkL3Jlc3VtZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkNGR1IyLCBBRENfQ0ZHUjJfRklFTERTLAorICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSMl9ST1ZTRSAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICgoaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuUmF0aW8gLSAxVUwpIDw8IEFEQ19DRkdSMl9PVlNSX1BvcykgfAorICAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLlJpZ2h0Qml0U2hpZnQgfAorICAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLlRyaWdnZXJlZE1vZGUgfAorICAgICAgICAgICAgICAgICAgIGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLk92ZXJzYW1wbGluZ1N0b3BSZXNldCk7CisjZW5kaWYKIAogICAgICAgfQogICAgICAgZWxzZQpAQCAtNjczLDkgKzc4MywxNiBAQAogCiAgICAgICAvKiBTZXQgdGhlIExlZnRTaGlmdCBwYXJhbWV0ZXI6IGl0IGlzIGFwcGxpZWQgdG8gdGhlIGZpbmFsIHJlc3VsdCB3aXRoIG9yIHdpdGhvdXQgb3ZlcnNhbXBsaW5nICovCiAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5DRkdSMiwgQURDX0NGR1IyX0xTSElGVCwgaGFkYy0+SW5pdC5MZWZ0Qml0U2hpZnQpOwotCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICAgIGlmIChoYWRjLT5JbnN0YW5jZSAhPSBBREMzKQorICAgICAgeworICAgICAgICAvKiBDb25maWd1cmUgdGhlIEJPT1NUIE1vZGUgKi8KKyAgICAgICAgQURDX0NvbmZpZ3VyZUJvb3N0TW9kZShoYWRjKTsKKyAgICAgIH0KKyNlbHNlCiAgICAgICAvKiBDb25maWd1cmUgdGhlIEJPT1NUIE1vZGUgKi8KICAgICAgIEFEQ19Db25maWd1cmVCb29zdE1vZGUoaGFkYyk7CisjZW5kaWYKICAgICB9CiAKICAgICAvKiBDb25maWd1cmF0aW9uIG9mIHJlZ3VsYXIgZ3JvdXAgc2VxdWVuY2VyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04MDMsMTEgKzkyMCwxMSBAQAogCiAgIC8qIFJlc2V0IHJlZ2lzdGVyIENGR1IgKi8KICAgQ0xFQVJfQklUKGhhZGMtPkluc3RhbmNlLT5DRkdSLCBBRENfQ0ZHUl9BV0QxQ0ggIHwgQURDX0NGR1JfSkFVVE8gICB8IEFEQ19DRkdSX0pBV0QxRU4gfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0FXRDFFTiAgfCBBRENfQ0ZHUl9BV0QxU0dMIHwgQURDX0NGR1JfSlFNICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURDX0NGR1JfSkRJU0NFTiB8IEFEQ19DRkdSX0RJU0NOVU0gfCBBRENfQ0ZHUl9ESVNDRU4gIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9BVVRETFkgIHwgQURDX0NGR1JfQ09OVCAgICB8IEFEQ19DRkdSX09WUk1PRCAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEQ19DRkdSX0VYVEVOICAgfCBBRENfQ0ZHUl9FWFRTRUwgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRENfQ0ZHUl9SRVMgICAgIHwgQURDX0NGR1JfRE1OR1QpOworICAgICAgICAgICAgQURDX0NGR1JfQVdEMUVOICB8IEFEQ19DRkdSX0FXRDFTR0wgfCBBRENfQ0ZHUl9KUU0gICAgIHwKKyAgICAgICAgICAgIEFEQ19DRkdSX0pESVNDRU4gfCBBRENfQ0ZHUl9ESVNDTlVNIHwgQURDX0NGR1JfRElTQ0VOICB8CisgICAgICAgICAgICBBRENfQ0ZHUl9BVVRETFkgIHwgQURDX0NGR1JfQ09OVCAgICB8IEFEQ19DRkdSX09WUk1PRCAgfAorICAgICAgICAgICAgQURDX0NGR1JfRVhURU4gICB8IEFEQ19DRkdSX0VYVFNFTCAgfAorICAgICAgICAgICAgQURDX0NGR1JfUkVTICAgICB8IEFEQ19DRkdSX0RNTkdUKTsKICAgU0VUX0JJVChoYWRjLT5JbnN0YW5jZS0+Q0ZHUiwgQURDX0NGR1JfSlFESVMpOwogCiAgIC8qIFJlc2V0IHJlZ2lzdGVyIENGR1IyICovCkBAIC04MjIsNiArOTM5LDMwIEBACiAgICAgICAgICAgICBBRENfU01QUjJfU01QMTUgfCBBRENfU01QUjJfU01QMTQgfCBBRENfU01QUjJfU01QMTMgfAogICAgICAgICAgICAgQURDX1NNUFIyX1NNUDEyIHwgQURDX1NNUFIyX1NNUDExIHwgQURDX1NNUFIyX1NNUDEwKTsKIAorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgIGlmIChoYWRjLT5JbnN0YW5jZSA9PSBBREMzKQorICB7ICAKKyAgICAvKiBSZXNldCByZWdpc3RlciBMVFIxIGFuZCBIVFIxICovCisgICAgQ0xFQVJfQklUKGhhZGMtPkluc3RhbmNlLT5MVFIxX1RSMSwgQURDM19UUjFfSFQxIHwgQURDM19UUjFfTFQxKTsKKyAgICBDTEVBUl9CSVQoaGFkYy0+SW5zdGFuY2UtPkhUUjFfVFIyLCBBREMzX1RSMl9IVDIgfCBBREMzX1RSMl9MVDIpOworCisgICAgLyogUmVzZXQgcmVnaXN0ZXIgTFRSMyBhbmQgSFRSMyAqLworICAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+UkVTMV9UUjMsIEFEQzNfVFIzX0hUMyB8IEFEQzNfVFIzX0xUMyk7CisgIH0KKyAgZWxzZQorICB7ICAKKyAgICBDTEVBUl9CSVQoaGFkYy0+SW5zdGFuY2UtPkxUUjFfVFIxLCBBRENfTFRSX0xUKTsKKyAgICBDTEVBUl9CSVQoaGFkYy0+SW5zdGFuY2UtPkhUUjFfVFIyLCBBRENfSFRSX0hUKTsKKworICAgIC8qIFJlc2V0IHJlZ2lzdGVyIExUUjIgYW5kIEhUUjIqLworICAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+TFRSMl9ESUZTRUwsIEFEQ19MVFJfTFQpOworICAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+SFRSMl9DQUxGQUNULCBBRENfSFRSX0hUKTsKKworICAgIC8qIFJlc2V0IHJlZ2lzdGVyIExUUjMgYW5kIEhUUjMgKi8KKyAgICBDTEVBUl9CSVQoaGFkYy0+SW5zdGFuY2UtPkxUUjNfUkVTMTAsIEFEQ19MVFJfTFQpOworICAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+SFRSM19SRVMxMSwgQURDX0hUUl9IVCk7CisgIH0KKyNlbHNlCiAgIC8qIFJlc2V0IHJlZ2lzdGVyIExUUjEgYW5kIEhUUjEgKi8KICAgQ0xFQVJfQklUKGhhZGMtPkluc3RhbmNlLT5MVFIxLCBBRENfTFRSX0xUKTsKICAgQ0xFQVJfQklUKGhhZGMtPkluc3RhbmNlLT5IVFIxLCBBRENfSFRSX0hUKTsKQEAgLTgzMyw2ICs5NzQsOCBAQAogICAvKiBSZXNldCByZWdpc3RlciBMVFIzIGFuZCBIVFIzICovCiAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+TFRSMywgQURDX0xUUl9MVCk7CiAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+SFRSMywgQURDX0hUUl9IVCk7CisjZW5kaWYgLyogQURDX1ZFUl9WNV9WOTAgKi8KKwogCiAgIC8qIFJlc2V0IHJlZ2lzdGVyIFNRUjEgKi8KICAgQ0xFQVJfQklUKGhhZGMtPkluc3RhbmNlLT5TUVIxLCBBRENfU1FSMV9TUTQgfCBBRENfU1FSMV9TUTMgfCBBRENfU1FSMV9TUTIgfApAQCAtODcyLDEyICsxMDE1LDMwIEBACiAgIC8qIFJlc2V0IHJlZ2lzdGVyIEFXRDNDUiAqLwogICBDTEVBUl9CSVQoaGFkYy0+SW5zdGFuY2UtPkFXRDNDUiwgQURDX0FXRDNDUl9BV0QzQ0gpOwogCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgaWYgKGhhZGMtPkluc3RhbmNlID09IEFEQzMpCisgIHsKKyAgLyogUmVzZXQgcmVnaXN0ZXIgRElGU0VMICovCisgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+TFRSMl9ESUZTRUwsIEFEQ19ESUZTRUxfRElGU0VMKTsKKworICAvKiBSZXNldCByZWdpc3RlciBDQUxGQUNUICovCisgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+SFRSMl9DQUxGQUNULCBBRENfQ0FMRkFDVF9DQUxGQUNUX0QgfCBBRENfQ0FMRkFDVF9DQUxGQUNUX1MpOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIFJlc2V0IHJlZ2lzdGVyIERJRlNFTCAqLworICAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+RElGU0VMX1JFUzEyLCBBRENfRElGU0VMX0RJRlNFTCk7CisKKyAgICAvKiBSZXNldCByZWdpc3RlciBDQUxGQUNUICovCisgICAgQ0xFQVJfQklUKGhhZGMtPkluc3RhbmNlLT5DQUxGQUNUX1JFUzEzLCBBRENfQ0FMRkFDVF9DQUxGQUNUX0QgfCBBRENfQ0FMRkFDVF9DQUxGQUNUX1MpOworICB9CisjZWxzZQogICAvKiBSZXNldCByZWdpc3RlciBESUZTRUwgKi8KICAgQ0xFQVJfQklUKGhhZGMtPkluc3RhbmNlLT5ESUZTRUwsIEFEQ19ESUZTRUxfRElGU0VMKTsKIAogICAvKiBSZXNldCByZWdpc3RlciBDQUxGQUNUICovCiAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+Q0FMRkFDVCwgQURDX0NBTEZBQ1RfQ0FMRkFDVF9EIHwgQURDX0NBTEZBQ1RfQ0FMRkFDVF9TKTsKLQorI2VuZGlmIC8qIEFEQ19WRVJfVjVfVjkwICovCiAKICAgLyogPT09PT09PT09PSBSZXNldCBjb21tb24gQURDIHJlZ2lzdGVycyA9PT09PT09PT09ICovCiAKQEAgLTIwMzUsNyArMjE5NiwyMSBAQAogICAgICAgICBfX0hBTF9BRENfRU5BQkxFX0lUKGhhZGMsIEFEQ19JVF9PVlIpOwogCiAgICAgICAgIC8qIEVuYWJsZSBBREMgRE1BICBtb2RlKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICAgICAgICBpZiAoaGFkYy0+SW5zdGFuY2UgPT0gQURDMykKKyAgICAgICAgeworICAgICAgICAgIExMX0FEQ19SRUdfU2V0RE1BVHJhbnNmZXJNb2RlKGhhZGMtPkluc3RhbmNlLCBBREMzX0NGR1JfRE1BQ09OVFJFUSgodWludDMyX3QpaGFkYy0+SW5pdC5ETUFDb250aW51b3VzUmVxdWVzdHMpKTsKKyAgICAgICAgICBMTF9BRENfRW5hYmxlRE1BUmVxKGhhZGMtPkluc3RhbmNlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBMTF9BRENfUkVHX1NldERhdGFUcmFuc2Zlck1vZGUoaGFkYy0+SW5zdGFuY2UsIEFEQ19DRkdSX0RNQUNPTlRSRVEoKHVpbnQzMl90KWhhZGMtPkluaXQuQ29udmVyc2lvbkRhdGFNYW5hZ2VtZW50KSk7CisgICAgICAgIH0KKworI2Vsc2UKICAgICAgICAgTExfQURDX1JFR19TZXREYXRhVHJhbnNmZXJNb2RlKGhhZGMtPkluc3RhbmNlLCAodWludDMyX3QpaGFkYy0+SW5pdC5Db252ZXJzaW9uRGF0YU1hbmFnZW1lbnQpOworI2VuZGlmCisKIAogICAgICAgICAvKiBTdGFydCB0aGUgRE1BIGNoYW5uZWwgKi8KICAgICAgICAgdG1wX2hhbF9zdGF0dXMgPSBIQUxfRE1BX1N0YXJ0X0lUKGhhZGMtPkRNQV9IYW5kbGUsICh1aW50MzJfdCkmaGFkYy0+SW5zdGFuY2UtPkRSLCAodWludDMyX3QpcERhdGEsIExlbmd0aCk7CkBAIC0yMTAwLDcgKzIyNzUsNyBAQAogICBpZiAodG1wX2hhbF9zdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgLyogRGlzYWJsZSBBREMgRE1BIChBREMgRE1BIGNvbmZpZ3VyYXRpb24gb2YgY29udGlub3VzIHJlcXVlc3RzIGlzIGtlcHQpICovCi0gICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+Q0ZHUiwgQURDX0NGR1JfRE1OR1RfMCB8QURDX0NGR1JfRE1OR1RfMSwgMFVMKTsKKyAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5DRkdSLCBBRENfQ0ZHUl9ETU5HVF8wIHwgQURDX0NGR1JfRE1OR1RfMSwgMFVMKTsKIAogICAgIC8qIERpc2FibGUgdGhlIERNQSBjaGFubmVsIChpbiBjYXNlIG9mIERNQSBpbiBjaXJjdWxhciBtb2RlIG9yIHN0b3AgICAgICAgKi8KICAgICAvKiB3aGlsZSBETUEgdHJhbnNmZXIgaXMgb24gZ29pbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNDg1LDEwICsyNjYwLDEwIEBACiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIC8qIE11bHRpbW9kZSBub3Qgc2V0IG9yIGZlYXR1cmUgbm90IGF2YWlsYWJsZSBvciBBREMgaW5kZXBlbmRlbnQgKi8KLSAgICAgIGlmICgoaGFkYy0+SW5zdGFuY2UtPkNGR1IgJiBBRENfQ0ZHUl9ETU5HVCkgIT0gMFVMKQotICAgICAgewotICAgICAgICBvdmVycnVuX2Vycm9yID0gMVVMOwotICAgICAgfQorICAgICAgICBpZiAoKGhhZGMtPkluc3RhbmNlLT5DRkdSICYgQURDX0NGR1JfRE1OR1QpICE9IDBVTCkKKyAgICAgICAgeworICAgICAgICAgIG92ZXJydW5fZXJyb3IgPSAxVUw7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKQEAgLTI2NTksMTEgKzI4MzQsMjAgQEAKICAgLyogQ2hlY2sgb2Zmc2V0IHJhbmdlIGFjY29yZGluZyB0byBvdmVyc2FtcGxpbmcgc2V0dGluZyAqLwogICBpZiAoaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmdNb2RlID09IEVOQUJMRSkKICAgewotICAgIGFzc2VydF9wYXJhbShJU19BRENfUkFOR0UoQURDX0dFVF9SRVNPTFVUSU9OKGhhZGMpLCBzQ29uZmlnLT5PZmZzZXQvKGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLlJhdGlvKzFVKSkpOworICAgIGFzc2VydF9wYXJhbShJU19BRENfUkFOR0UoQURDX0dFVF9SRVNPTFVUSU9OKGhhZGMpLCBzQ29uZmlnLT5PZmZzZXQgLyAoaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuUmF0aW8gKyAxVSkpKTsKICAgfQogICBlbHNlCiAgIHsKLSAgICBhc3NlcnRfcGFyYW0oSVNfQURDX1JBTkdFKEFEQ19HRVRfUkVTT0xVVElPTihoYWRjKSwgc0NvbmZpZy0+T2Zmc2V0KSk7CisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICBpZiAoaGFkYy0+SW5zdGFuY2UgPT0gQURDMykKKyAgICB7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfQURDM19SQU5HRShBRENfR0VUX1JFU09MVVRJT04oaGFkYyksIHNDb25maWctPk9mZnNldCkpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogQURDX1ZFUl9WNV9WOTAgKi8KKyAgICB7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfQURDX1JBTkdFKEFEQ19HRVRfUkVTT0xVVElPTihoYWRjKSwgc0NvbmZpZy0+T2Zmc2V0KSk7CisgICAgfQogICB9CiAKICAgLyogaWYgUk9WU0UgaXMgc2V0LCB0aGUgdmFsdWUgb2YgdGhlIE9GRlNFVHlfRU4gYml0IGluIEFEQ3hfT0ZSeSByZWdpc3RlciBpcwpAQCAtMjcwNCw4ICsyODg4LDE3IEBACiAgIC8qICAtIENoYW5uZWwgcmFuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBpZiAoTExfQURDX1JFR19Jc0NvbnZlcnNpb25PbmdvaW5nKGhhZGMtPkluc3RhbmNlKSA9PSAwVUwpCiAgIHsKKworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgICAgaWYgKGhhZGMtPkluc3RhbmNlICE9IEFEQzMpCisgICAgeworICAgICAgLyogQURDIGNoYW5uZWxzIHByZXNlbGVjdGlvbiAqLworICAgICAgaGFkYy0+SW5zdGFuY2UtPlBDU0VMX1JFUzAgfD0gKDFVTCA8PCAoX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKCh1aW50MzJfdClzQ29uZmlnLT5DaGFubmVsKSAmIDB4MUZVTCkpOworICAgIH0KKyNlbHNlCiAgICAgLyogQURDIGNoYW5uZWxzIHByZXNlbGVjdGlvbiAqLwogICAgIGhhZGMtPkluc3RhbmNlLT5QQ1NFTCB8PSAoMVVMIDw8IChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoKHVpbnQzMl90KXNDb25maWctPkNoYW5uZWwpICYgMHgxRlVMKSk7CisjZW5kaWYgLyogQURDX1ZFUl9WNV9WOTAgKi8KIAogICAgIC8qIFNldCBBREMgZ3JvdXAgcmVndWxhciBzZXF1ZW5jZTogY2hhbm5lbCBvbiB0aGUgc2VsZWN0ZWQgc2NhbiBzZXF1ZW5jZSByYW5rICovCiAgICAgTExfQURDX1JFR19TZXRTZXF1ZW5jZXJSYW5rcyhoYWRjLT5JbnN0YW5jZSwgc0NvbmZpZy0+UmFuaywgc0NvbmZpZy0+Q2hhbm5lbCk7CkBAIC0yNzI4LDI3ICsyOTIxLDcyIEBACiAKICAgICAgIC8qIFNoaWZ0IHRoZSBvZmZzZXQgd2l0aCByZXNwZWN0IHRvIHRoZSBzZWxlY3RlZCBBREMgcmVzb2x1dGlvbi4gKi8KICAgICAgIC8qIE9mZnNldCBoYXMgdG8gYmUgbGVmdC1hbGlnbmVkIG9uIGJpdCAxMSwgdGhlIExTQiAocmlnaHQgYml0cykgYXJlIHNldCB0byAwICovCi0gICAgICB0bXBPZmZzZXRTaGlmdGVkID0gQURDX09GRlNFVF9TSElGVF9SRVNPTFVUSU9OKGhhZGMsICh1aW50MzJfdClzQ29uZmlnLT5PZmZzZXQpOwotCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICAgIGlmIChoYWRjLT5JbnN0YW5jZSA9PSBBREMzKQorICAgICAgeworICAgICAgICB0bXBPZmZzZXRTaGlmdGVkID0gQURDM19PRkZTRVRfU0hJRlRfUkVTT0xVVElPTihoYWRjLCAodWludDMyX3Qpc0NvbmZpZy0+T2Zmc2V0KTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCAqLworICAgICAgeworICAgICAgICB0bXBPZmZzZXRTaGlmdGVkID0gQURDX09GRlNFVF9TSElGVF9SRVNPTFVUSU9OKGhhZGMsICh1aW50MzJfdClzQ29uZmlnLT5PZmZzZXQpOworICAgICAgfQorICAgICAgCiAgICAgICBpZiAoc0NvbmZpZy0+T2Zmc2V0TnVtYmVyICE9IEFEQ19PRkZTRVRfTk9ORSkKICAgICAgIHsKICAgICAgICAgLyogU2V0IEFEQyBzZWxlY3RlZCBvZmZzZXQgbnVtYmVyICovCiAgICAgICAgIExMX0FEQ19TZXRPZmZzZXQoaGFkYy0+SW5zdGFuY2UsIHNDb25maWctPk9mZnNldE51bWJlciwgc0NvbmZpZy0+Q2hhbm5lbCwgdG1wT2Zmc2V0U2hpZnRlZCk7CiAKLSAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoc0NvbmZpZy0+T2Zmc2V0U2lnbmVkU2F0dXJhdGlvbikpOwotICAgICAgICAvKiBTZXQgQURDIHNlbGVjdGVkIG9mZnNldCBzaWduZWQgc2F0dXJhdGlvbiAqLwotICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U2lnbmVkU2F0dXJhdGlvbihoYWRjLT5JbnN0YW5jZSwgc0NvbmZpZy0+T2Zmc2V0TnVtYmVyLCAoc0NvbmZpZy0+T2Zmc2V0U2lnbmVkU2F0dXJhdGlvbiA9PSBFTkFCTEUpID8gTExfQURDX09GRlNFVF9TSUdORURfU0FUVVJBVElPTl9FTkFCTEUgOiBMTF9BRENfT0ZGU0VUX1NJR05FRF9TQVRVUkFUSU9OX0RJU0FCTEUpOworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgICAgICAgIGlmIChoYWRjLT5JbnN0YW5jZSA9PSBBREMzKQorICAgICAgICB7CisgICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0FEQzNfT0ZGU0VUX1NJR04oc0NvbmZpZy0+T2Zmc2V0U2lnbikpOworICAgICAgICAgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKHNDb25maWctPk9mZnNldFNhdHVyYXRpb24pKTsKKyAgICAgICAgICAvKiBTZXQgQURDIHNlbGVjdGVkIG9mZnNldCBzaWduICYgc2F0dXJhdGlvbiAqLworICAgICAgICAgIExMX0FEQ19TZXRPZmZzZXRTaWduKGhhZGMtPkluc3RhbmNlLCBzQ29uZmlnLT5PZmZzZXROdW1iZXIsIHNDb25maWctPk9mZnNldFNpZ24pOworICAgICAgICAgIExMX0FEQ19TZXRPZmZzZXRTYXR1cmF0aW9uKGhhZGMtPkluc3RhbmNlLCBzQ29uZmlnLT5PZmZzZXROdW1iZXIsIChzQ29uZmlnLT5PZmZzZXRTYXR1cmF0aW9uID09IEVOQUJMRSkgPyBMTF9BRENfT0ZGU0VUX1NBVFVSQVRJT05fRU5BQkxFIDogTExfQURDX09GRlNFVF9TQVRVUkFUSU9OX0RJU0FCTEUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCAqLworICAgICAgICB7CisgICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoc0NvbmZpZy0+T2Zmc2V0U2lnbmVkU2F0dXJhdGlvbikpOworICAgICAgICAgIC8qIFNldCBBREMgc2VsZWN0ZWQgb2Zmc2V0IHNpZ25lZCBzYXR1cmF0aW9uICovCisgICAgICAgICAgTExfQURDX1NldE9mZnNldFNpZ25lZFNhdHVyYXRpb24oaGFkYy0+SW5zdGFuY2UsIHNDb25maWctPk9mZnNldE51bWJlciwgKHNDb25maWctPk9mZnNldFNpZ25lZFNhdHVyYXRpb24gPT0gRU5BQkxFKSA/IExMX0FEQ19PRkZTRVRfU0lHTkVEX1NBVFVSQVRJT05fRU5BQkxFIDogTExfQURDX09GRlNFVF9TSUdORURfU0FUVVJBVElPTl9ESVNBQkxFKTsKIAotICAgICAgICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShzQ29uZmlnLT5PZmZzZXRSaWdodFNoaWZ0KSk7Ci0gICAgICAgIC8qIFNldCBBREMgc2VsZWN0ZWQgb2Zmc2V0IHJpZ2h0IHNoaWZ0ICovCi0gICAgICAgIExMX0FEQ19TZXREYXRhUmlnaHRTaGlmdChoYWRjLT5JbnN0YW5jZSwgc0NvbmZpZy0+T2Zmc2V0TnVtYmVyLCAoc0NvbmZpZy0+T2Zmc2V0UmlnaHRTaGlmdCA9PSBFTkFCTEUpID8gTExfQURDX09GRlNFVF9SU0hJRlRfRU5BQkxFIDogTExfQURDX09GRlNFVF9SU0hJRlRfRElTQUJMRSk7CisgICAgICAgICAgYXNzZXJ0X3BhcmFtKElTX0ZVTkNUSU9OQUxfU1RBVEUoc0NvbmZpZy0+T2Zmc2V0UmlnaHRTaGlmdCkpOworICAgICAgICAgIC8qIFNldCBBREMgc2VsZWN0ZWQgb2Zmc2V0IHJpZ2h0IHNoaWZ0ICovCisgICAgICAgICAgTExfQURDX1NldERhdGFSaWdodFNoaWZ0KGhhZGMtPkluc3RhbmNlLCBzQ29uZmlnLT5PZmZzZXROdW1iZXIsIChzQ29uZmlnLT5PZmZzZXRSaWdodFNoaWZ0ID09IEVOQUJMRSkgPyBMTF9BRENfT0ZGU0VUX1JTSElGVF9FTkFCTEUgOiBMTF9BRENfT0ZGU0VUX1JTSElGVF9ESVNBQkxFKTsKKyAgICAgICAgfQogCiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgICAvKiBTY2FuIE9GUjEsIE9GUjIsIE9GUjMsIE9GUjQgdG8gY2hlY2sgaWYgdGhlIHNlbGVjdGVkIGNoYW5uZWwgaXMgZW5hYmxlZC4KLSAgICAgICAgICAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgb2Zmc2V0IE9GUnggaXMgZGlzYWJsZWQgc2luY2UKLSAgICAgICAgICAgc0NvbmZpZy0+T2Zmc2V0TnVtYmVyID0gQURDX09GRlNFVF9OT05FLiAqLworICAgICAgICAvKiBTY2FuIE9GUjEsIE9GUjIsIE9GUjMsIE9GUjQgdG8gY2hlY2sgaWYgdGhlIHNlbGVjdGVkIGNoYW5uZWwgaXMgZW5hYmxlZC4KKyAgICAgICAgICBJZiB0aGlzIGlzIHRoZSBjYXNlLCBvZmZzZXQgT0ZSeCBpcyBkaXNhYmxlZCBzaW5jZQorICAgICAgICAgIHNDb25maWctPk9mZnNldE51bWJlciA9IEFEQ19PRkZTRVRfTk9ORS4gKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICAgICAgICBpZiAoaGFkYy0+SW5zdGFuY2UgPT0gQURDMykKKyAgICAgICAgeworICAgICAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMSkpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnLT5DaGFubmVsKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U3RhdGUoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMSwgTExfQURDX09GRlNFVF9ESVNBQkxFKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8yKSkgPT0gX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKHNDb25maWctPkNoYW5uZWwpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIExMX0FEQ19TZXRPZmZzZXRTdGF0ZShoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8yLCBMTF9BRENfT0ZGU0VUX0RJU0FCTEUpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKExMX0FEQ19HZXRPZmZzZXRDaGFubmVsKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzMpKSA9PSBfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoc0NvbmZpZy0+Q2hhbm5lbCkpCisgICAgICAgICAgeworICAgICAgICAgICAgTExfQURDX1NldE9mZnNldFN0YXRlKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzMsIExMX0FEQ19PRkZTRVRfRElTQUJMRSk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCkpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnLT5DaGFubmVsKSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U3RhdGUoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCwgTExfQURDX09GRlNFVF9ESVNBQkxFKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmIC8qIEFEQ19WRVJfVjVfVjkwICovCisgICAgICAgIHsKICAgICAgICAgICBpZiAoKChoYWRjLT5JbnN0YW5jZS0+T0ZSMSkgJiBBRENfT0ZSMV9PRkZTRVQxX0NIKSA9PSBBRENfT0ZSX0NIQU5ORUwoc0NvbmZpZy0+Q2hhbm5lbCkpCiAgICAgICAgICAgewogICAgICAgICAgICAgQ0xFQVJfQklUKGhhZGMtPkluc3RhbmNlLT5PRlIxLCBBRENfT0ZSMV9TU0FURSk7CkBAIC0yNzY1LDcgKzMwMDMsOSBAQAogICAgICAgICAgIHsKICAgICAgICAgICAgIENMRUFSX0JJVChoYWRjLT5JbnN0YW5jZS0+T0ZSNCwgQURDX09GUjRfU1NBVEUpOwogICAgICAgICAgIH0KLSAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgfQogICAgIH0KIAogICAgIC8qIFBhcmFtZXRlcnMgdXBkYXRlIGNvbmRpdGlvbmVkIHRvIEFEQyBzdGF0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjc5Myw3ICszMDMzLDcgQEAKICAgICAgIC8qIE5vdGU6IHRoZXNlIGludGVybmFsIG1lYXN1cmVtZW50IHBhdGhzIGNhbiBiZSBkaXNhYmxlZCB1c2luZyAgICAgICAgICAgKi8KICAgICAgIC8qIEhBTF9BRENfRGVJbml0KCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgaWYoX19MTF9BRENfSVNfQ0hBTk5FTF9JTlRFUk5BTChzQ29uZmlnLT5DaGFubmVsKSkKKyAgICAgIGlmIChfX0xMX0FEQ19JU19DSEFOTkVMX0lOVEVSTkFMKHNDb25maWctPkNoYW5uZWwpKQogICAgICAgewogICAgICAgICAvKiBDb25maWd1cmF0aW9uIG9mIGNvbW1vbiBBREMgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTI4MTcsNyArMzA1Nyw3IEBACiAgICAgICAgICAgICAgIC8qICAgICAgIENQVSBwcm9jZXNzaW5nIGN5Y2xlcywgc2NhbGluZyBpbiB1cyBzcGxpdCB0byBub3QgICAgICAgICAgKi8KICAgICAgICAgICAgICAgLyogICAgICAgZXhjZWVkIDMyIGJpdHMgcmVnaXN0ZXIgY2FwYWNpdHkgYW5kIGhhbmRsZSBsb3cgZnJlcXVlbmN5LiAqLwogICAgICAgICAgICAgICB3YWl0X2xvb3BfaW5kZXggPSAoKExMX0FEQ19ERUxBWV9URU1QU0VOU09SX1NUQUJfVVMgLyAxMFVMKSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAoMTAwMDAwVUwgKiAyVUwpKSk7Ci0gICAgICAgICAgICAgIHdoaWxlKHdhaXRfbG9vcF9pbmRleCAhPSAwVUwpCisgICAgICAgICAgICAgIHdoaWxlICh3YWl0X2xvb3BfaW5kZXggIT0gMFVMKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgd2FpdF9sb29wX2luZGV4LS07CiAgICAgICAgICAgICAgIH0KQEAgLTI5MTEsMTkgKzMxNTEsNDIgQEAKICAgICBhc3NlcnRfcGFyYW0oSVNfQURDX0NIQU5ORUwoQW5hbG9nV0RHQ29uZmlnLT5DaGFubmVsKSk7CiAgIH0KIAotICAvKiBWZXJpZnkgdGhyZXNob2xkcyByYW5nZSAqLwotICBpZiAoaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmdNb2RlID09IEVOQUJMRSkKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorCisgIGlmIChoYWRjLT5JbnN0YW5jZSA9PSBBREMzKQogICB7Ci0gICAgLyogQ2FzZSBvZiBvdmVyc2FtcGxpbmcgZW5hYmxlZDogdGhyZXNob2xkcyBhcmUgY29tcGFyZWQgdG8gb3ZlcnNhbXBsaW5nCi0gICAgICAgaW50ZXJtZWRpYXRlIGNvbXB1dGF0aW9uIChhZnRlciByYXRpbywgYmVmb3JlIHNoaWZ0IGFwcGxpY2F0aW9uKSAqLwotICAgIGFzc2VydF9wYXJhbShJU19BRENfUkFOR0UoQURDX0dFVF9SRVNPTFVUSU9OKGhhZGMpLCBBbmFsb2dXREdDb25maWctPkhpZ2hUaHJlc2hvbGQgLyAoaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuUmF0aW8gKyAxVUwpKSk7Ci0gICAgYXNzZXJ0X3BhcmFtKElTX0FEQ19SQU5HRShBRENfR0VUX1JFU09MVVRJT04oaGFkYyksIEFuYWxvZ1dER0NvbmZpZy0+TG93VGhyZXNob2xkIC8gKGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLlJhdGlvICsgMVVMKSkpOworICAgIC8qIFZlcmlmeSB0aHJlc2hvbGRzIHJhbmdlICovCisgICAgaWYgKGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nTW9kZSA9PSBFTkFCTEUpCisgICAgeworICAgICAgLyogQ2FzZSBvZiBvdmVyc2FtcGxpbmcgZW5hYmxlZDogdGhyZXNob2xkcyBhcmUgY29tcGFyZWQgdG8gb3ZlcnNhbXBsaW5nCisgICAgICAgICBpbnRlcm1lZGlhdGUgY29tcHV0YXRpb24gKGFmdGVyIHJhdGlvLCBiZWZvcmUgc2hpZnQgYXBwbGljYXRpb24pICovCisgICAgICBhc3NlcnRfcGFyYW0oSVNfQURDM19SQU5HRShBRENfR0VUX1JFU09MVVRJT04oaGFkYyksIEFuYWxvZ1dER0NvbmZpZy0+SGlnaFRocmVzaG9sZCAvIChoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZy5SYXRpbyArIDFVTCkpKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19BREMzX1JBTkdFKEFEQ19HRVRfUkVTT0xVVElPTihoYWRjKSwgQW5hbG9nV0RHQ29uZmlnLT5Mb3dUaHJlc2hvbGQgLyAoaGFkYy0+SW5pdC5PdmVyc2FtcGxpbmcuUmF0aW8gKyAxVUwpKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBWZXJpZnkgaWYgdGhyZXNob2xkcyBhcmUgd2l0aGluIHRoZSBzZWxlY3RlZCBBREMgcmVzb2x1dGlvbiAqLworICAgICAgYXNzZXJ0X3BhcmFtKElTX0FEQzNfUkFOR0UoQURDX0dFVF9SRVNPTFVUSU9OKGhhZGMpLCBBbmFsb2dXREdDb25maWctPkhpZ2hUaHJlc2hvbGQpKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19BREMzX1JBTkdFKEFEQ19HRVRfUkVTT0xVVElPTihoYWRjKSwgQW5hbG9nV0RHQ29uZmlnLT5Mb3dUaHJlc2hvbGQpKTsKKyAgICB9CiAgIH0KICAgZWxzZQorI2VuZGlmIC8qIEFEQ19WRVJfVjVfVjkwICovCiAgIHsKLSAgICAvKiBWZXJpZnkgaWYgdGhyZXNob2xkcyBhcmUgd2l0aGluIHRoZSBzZWxlY3RlZCBBREMgcmVzb2x1dGlvbiAqLwotICAgIGFzc2VydF9wYXJhbShJU19BRENfUkFOR0UoQURDX0dFVF9SRVNPTFVUSU9OKGhhZGMpLCBBbmFsb2dXREdDb25maWctPkhpZ2hUaHJlc2hvbGQpKTsKLSAgICBhc3NlcnRfcGFyYW0oSVNfQURDX1JBTkdFKEFEQ19HRVRfUkVTT0xVVElPTihoYWRjKSwgQW5hbG9nV0RHQ29uZmlnLT5Mb3dUaHJlc2hvbGQpKTsKKyAgICAvKiBWZXJpZnkgdGhyZXNob2xkcyByYW5nZSAqLworICAgIGlmIChoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZ01vZGUgPT0gRU5BQkxFKQorICAgIHsKKyAgICAgIC8qIENhc2Ugb2Ygb3ZlcnNhbXBsaW5nIGVuYWJsZWQ6IHRocmVzaG9sZHMgYXJlIGNvbXBhcmVkIHRvIG92ZXJzYW1wbGluZworICAgICAgICAgaW50ZXJtZWRpYXRlIGNvbXB1dGF0aW9uIChhZnRlciByYXRpbywgYmVmb3JlIHNoaWZ0IGFwcGxpY2F0aW9uKSAqLworICAgICAgYXNzZXJ0X3BhcmFtKElTX0FEQ19SQU5HRShBRENfR0VUX1JFU09MVVRJT04oaGFkYyksIEFuYWxvZ1dER0NvbmZpZy0+SGlnaFRocmVzaG9sZCAvIChoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZy5SYXRpbyArIDFVTCkpKTsKKyAgICAgIGFzc2VydF9wYXJhbShJU19BRENfUkFOR0UoQURDX0dFVF9SRVNPTFVUSU9OKGhhZGMpLCBBbmFsb2dXREdDb25maWctPkxvd1RocmVzaG9sZCAvIChoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZy5SYXRpbyArIDFVTCkpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIFZlcmlmeSBpZiB0aHJlc2hvbGRzIGFyZSB3aXRoaW4gdGhlIHNlbGVjdGVkIEFEQyByZXNvbHV0aW9uICovCisgICAgICBhc3NlcnRfcGFyYW0oSVNfQURDX1JBTkdFKEFEQ19HRVRfUkVTT0xVVElPTihoYWRjKSwgQW5hbG9nV0RHQ29uZmlnLT5IaWdoVGhyZXNob2xkKSk7CisgICAgICBhc3NlcnRfcGFyYW0oSVNfQURDX1JBTkdFKEFEQ19HRVRfUkVTT0xVVElPTihoYWRjKSwgQW5hbG9nV0RHQ29uZmlnLT5Mb3dUaHJlc2hvbGQpKTsKKyAgICB9CiAgIH0KIAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwpAQCAtMjk4Nyw4ICszMjUwLDI1IEBACiAgICAgICB0bXBBV0RMb3dUaHJlc2hvbGRTaGlmdGVkICA9IEFEQ19BV0QxVEhSRVNIT0xEX1NISUZUX1JFU09MVVRJT04oaGFkYywgQW5hbG9nV0RHQ29uZmlnLT5Mb3dUaHJlc2hvbGQpOwogCiAgICAgICAvKiBTZXQgdGhlIGhpZ2ggYW5kIGxvdyB0aHJlc2hvbGRzICovCi0gICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5MVFIxLCAgQURDX0xUUl9MVCAsIHRtcEFXRExvd1RocmVzaG9sZFNoaWZ0ZWQpOwotICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+SFRSMSwgIEFEQ19IVFJfSFQgLCB0bXBBV0RIaWdoVGhyZXNob2xkU2hpZnRlZCk7CisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICAgIGlmIChoYWRjLT5JbnN0YW5jZSA9PSBBREMzKQorICAgICAgeworICAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5MVFIxX1RSMSwKKyAgICAgICAgICAgICAgICAgICBBREMzX1RSMV9BV0RGSUxULAorICAgICAgICAgICAgICAgICAgIEFuYWxvZ1dER0NvbmZpZy0+RmlsdGVyaW5nQ29uZmlnKTsKKyAgICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+TFRSMV9UUjEsICBBREMzX1RSMV9MVDEsIHRtcEFXRExvd1RocmVzaG9sZFNoaWZ0ZWQpOworICAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5MVFIxX1RSMSwgIEFEQzNfVFIxX0hUMSwgKHRtcEFXREhpZ2hUaHJlc2hvbGRTaGlmdGVkIDw8IEFEQzNfVFIxX0hUMV9Qb3MpKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKworICAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5MVFIxX1RSMSwgIEFEQ19MVFJfTFQsIHRtcEFXRExvd1RocmVzaG9sZFNoaWZ0ZWQpOworICAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5IVFIxX1RSMiwgIEFEQ19IVFJfSFQsIHRtcEFXREhpZ2hUaHJlc2hvbGRTaGlmdGVkKTsKKyAgICAgIH0KKyNlbHNlCisgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5MVFIxLCAgQURDX0xUUl9MVCwgdG1wQVdETG93VGhyZXNob2xkU2hpZnRlZCk7CisgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5IVFIxLCAgQURDX0hUUl9IVCwgdG1wQVdESGlnaFRocmVzaG9sZFNoaWZ0ZWQpOworI2VuZGlmCiAKICAgICAgIC8qIFVwZGF0ZSBzdGF0ZSwgY2xlYXIgcHJldmlvdXMgcmVzdWx0IHJlbGF0ZWQgdG8gQVdEMSAqLwogICAgICAgQ0xFQVJfQklUKGhhZGMtPlN0YXRlLCBIQUxfQURDX1NUQVRFX0FXRDEpOwpAQCAtMzAzMiwxNiArMzMxMiwzMCBAQAogICAgICAgICBjYXNlIEFEQ19BTkFMT0dXQVRDSERPR19BTExfUkVHOgogICAgICAgICBjYXNlIEFEQ19BTkFMT0dXQVRDSERPR19BTExfSU5KRUM6CiAgICAgICAgIGNhc2UgQURDX0FOQUxPR1dBVENIRE9HX0FMTF9SRUdJTkpFQzoKLSAgICAgICAgICAvKiBVcGRhdGUgQVdEIGJ5IGJpdGZpZWxkIHRvIGtlZXAgdGhlIHBvc3NpYmlsaXR5IHRvIG1vbml0b3IgICAgICAgICovCi0gICAgICAgICAgLyogc2V2ZXJhbCBjaGFubmVscyBieSBzdWNjZXNzaXZlIGNhbGxzIG9mIHRoaXMgZnVuY3Rpb24uICAgICAgICAgICAqLwotICAgICAgICAgIGlmIChBbmFsb2dXREdDb25maWctPldhdGNoZG9nTnVtYmVyID09IEFEQ19BTkFMT0dXQVRDSERPR18yKQorCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICAgICAgICBpZiAoaGFkYy0+SW5zdGFuY2UgPT0gQURDMykKICAgICAgICAgICB7Ci0gICAgICAgICAgICBTRVRfQklUKGhhZGMtPkluc3RhbmNlLT5BV0QyQ1IsICgxVUwgPDwgKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihBbmFsb2dXREdDb25maWctPkNoYW5uZWwpICYgMHgxRlVMKSkpOworCisgICAgICAgICAgICBMTF9BRENfU2V0QW5hbG9nV0RNb25pdENoYW5uZWxzKGhhZGMtPkluc3RhbmNlLCBBbmFsb2dXREdDb25maWctPldhdGNoZG9nTnVtYmVyLCBMTF9BRENfQVdEX0FMTF9DSEFOTkVMU19SRUdfSU5KKTsKKwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgewotICAgICAgICAgICAgU0VUX0JJVChoYWRjLT5JbnN0YW5jZS0+QVdEM0NSLCAoMVVMIDw8IChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoQW5hbG9nV0RHQ29uZmlnLT5DaGFubmVsKSAmIDB4MUZVTCkpKTsKKyNlbmRpZiAgLypBRENfVkVSX1Y1X1Y5MCovCisgICAgICAgICAgICAvKiBVcGRhdGUgQVdEIGJ5IGJpdGZpZWxkIHRvIGtlZXAgdGhlIHBvc3NpYmlsaXR5IHRvIG1vbml0b3IgICAgICAgICovCisgICAgICAgICAgICAvKiBzZXZlcmFsIGNoYW5uZWxzIGJ5IHN1Y2Nlc3NpdmUgY2FsbHMgb2YgdGhpcyBmdW5jdGlvbi4gICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoQW5hbG9nV0RHQ29uZmlnLT5XYXRjaGRvZ051bWJlciA9PSBBRENfQU5BTE9HV0FUQ0hET0dfMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0VUX0JJVChoYWRjLT5JbnN0YW5jZS0+QVdEMkNSLCAoMVVMIDw8IChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoQW5hbG9nV0RHQ29uZmlnLT5DaGFubmVsKSAmIDB4MUZVTCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0VUX0JJVChoYWRjLT5JbnN0YW5jZS0+QVdEM0NSLCAoMVVMIDw8IChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoQW5hbG9nV0RHQ29uZmlnLT5DaGFubmVsKSAmIDB4MUZVTCkpKTsKKyAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQogICAgICAgICAgIH0KKyNlbmRpZiAgLypBRENfVkVSX1Y1X1Y5MCovCiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDogLyogQURDX0FOQUxPR1dBVENIRE9HX05PTkUgKi8KQEAgLTMwNTQsMTkgKzMzNDgsNTYgQEAKICAgICAgIHRtcEFXREhpZ2hUaHJlc2hvbGRTaGlmdGVkID0gQURDX0FXRDIzVEhSRVNIT0xEX1NISUZUX1JFU09MVVRJT04oaGFkYywgQW5hbG9nV0RHQ29uZmlnLT5IaWdoVGhyZXNob2xkKTsKICAgICAgIHRtcEFXRExvd1RocmVzaG9sZFNoaWZ0ZWQgID0gQURDX0FXRDIzVEhSRVNIT0xEX1NISUZUX1JFU09MVVRJT04oaGFkYywgQW5hbG9nV0RHQ29uZmlnLT5Mb3dUaHJlc2hvbGQpOwogCi0gICAgIGlmIChBbmFsb2dXREdDb25maWctPldhdGNoZG9nTnVtYmVyID09IEFEQ19BTkFMT0dXQVRDSERPR18yKQorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgICAgICBpZiAoaGFkYy0+SW5zdGFuY2UgPT0gQURDMykKICAgICAgIHsKLSAgICAgICAvKiBTZXQgQURDIGFuYWxvZyB3YXRjaGRvZyB0aHJlc2hvbGRzIHZhbHVlIG9mIGJvdGggdGhyZXNob2xkcyBoaWdoIGFuZCBsb3cgKi8KLSAgICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+TFRSMiwgIEFEQ19MVFJfTFQgLCB0bXBBV0RMb3dUaHJlc2hvbGRTaGlmdGVkKTsKLSAgICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+SFRSMiwgIEFEQ19IVFJfSFQgLCB0bXBBV0RIaWdoVGhyZXNob2xkU2hpZnRlZCk7CisKKyAgICAgICAgLyogQW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZHMgY29uZmlndXJhdGlvbiAqLworICAgICAgICBpZiAoQW5hbG9nV0RHQ29uZmlnLT5XYXRjaGRvZ051bWJlciAhPSBBRENfQU5BTE9HV0FUQ0hET0dfMSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFNoaWZ0IHRoZSBvZmZzZXQgd2l0aCByZXNwZWN0IHRvIHRoZSBzZWxlY3RlZCBBREMgcmVzb2x1dGlvbjogICAgICAgICovCisgICAgICAgICAgLyogVGhyZXNob2xkcyBoYXZlIHRvIGJlIGxlZnQtYWxpZ25lZCBvbiBiaXQgNywgdGhlIExTQiAocmlnaHQgYml0cykgICAgKi8KKyAgICAgICAgICAvKiBhcmUgc2V0IHRvIDAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIHRtcEFXREhpZ2hUaHJlc2hvbGRTaGlmdGVkID0gQURDX0FXRDIzVEhSRVNIT0xEX1NISUZUX1JFU09MVVRJT04oaGFkYywgQW5hbG9nV0RHQ29uZmlnLT5IaWdoVGhyZXNob2xkKTsKKyAgICAgICAgICB0bXBBV0RMb3dUaHJlc2hvbGRTaGlmdGVkICA9IEFEQ19BV0QyM1RIUkVTSE9MRF9TSElGVF9SRVNPTFVUSU9OKGhhZGMsIEFuYWxvZ1dER0NvbmZpZy0+TG93VGhyZXNob2xkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFNldCBBREMgYW5hbG9nIHdhdGNoZG9nIHRocmVzaG9sZHMgdmFsdWUgb2YgYm90aCB0aHJlc2hvbGRzIGhpZ2ggYW5kIGxvdyAqLworICAgICAgICBMTF9BRENfQ29uZmlnQW5hbG9nV0RUaHJlc2hvbGRzKGhhZGMtPkluc3RhbmNlLCBBbmFsb2dXREdDb25maWctPldhdGNoZG9nTnVtYmVyLCB0bXBBV0RIaWdoVGhyZXNob2xkU2hpZnRlZCwgdG1wQVdETG93VGhyZXNob2xkU2hpZnRlZCk7CisKKworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworCisgICAgICAgIGlmIChBbmFsb2dXREdDb25maWctPldhdGNoZG9nTnVtYmVyID09IEFEQ19BTkFMT0dXQVRDSERPR18yKQorICAgICAgICB7CisgICAgICAgICAgLyogU2V0IEFEQyBhbmFsb2cgd2F0Y2hkb2cgdGhyZXNob2xkcyB2YWx1ZSBvZiBib3RoIHRocmVzaG9sZHMgaGlnaCBhbmQgbG93ICovCisgICAgICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+TFRSMl9ESUZTRUwsICBBRENfTFRSX0xULCB0bXBBV0RMb3dUaHJlc2hvbGRTaGlmdGVkKTsKKyAgICAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5IVFIyX0NBTEZBQ1QsICBBRENfSFRSX0hULCB0bXBBV0RIaWdoVGhyZXNob2xkU2hpZnRlZCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgLyogU2V0IEFEQyBhbmFsb2cgd2F0Y2hkb2cgdGhyZXNob2xkcyB2YWx1ZSBvZiBib3RoIHRocmVzaG9sZHMgaGlnaCBhbmQgbG93ICovCisgICAgICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+TFRSM19SRVMxMCwgIEFEQ19MVFJfTFQsIHRtcEFXRExvd1RocmVzaG9sZFNoaWZ0ZWQpOworICAgICAgICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkhUUjNfUkVTMTEsICBBRENfSFRSX0hULCB0bXBBV0RIaWdoVGhyZXNob2xkU2hpZnRlZCk7CisgICAgICAgIH0KKyAgICAgIH0KKyNlbHNlCisgICAgICBpZiAoQW5hbG9nV0RHQ29uZmlnLT5XYXRjaGRvZ051bWJlciA9PSBBRENfQU5BTE9HV0FUQ0hET0dfMikKKyAgICAgIHsKKyAgICAgICAgLyogU2V0IEFEQyBhbmFsb2cgd2F0Y2hkb2cgdGhyZXNob2xkcyB2YWx1ZSBvZiBib3RoIHRocmVzaG9sZHMgaGlnaCBhbmQgbG93ICovCisgICAgICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkxUUjIsICBBRENfTFRSX0xULCB0bXBBV0RMb3dUaHJlc2hvbGRTaGlmdGVkKTsKKyAgICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+SFRSMiwgIEFEQ19IVFJfSFQsIHRtcEFXREhpZ2hUaHJlc2hvbGRTaGlmdGVkKTsKICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKICAgICAgICAgLyogU2V0IEFEQyBhbmFsb2cgd2F0Y2hkb2cgdGhyZXNob2xkcyB2YWx1ZSBvZiBib3RoIHRocmVzaG9sZHMgaGlnaCBhbmQgbG93ICovCi0gICAgICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkxUUjMsICBBRENfTFRSX0xUICwgdG1wQVdETG93VGhyZXNob2xkU2hpZnRlZCk7Ci0gICAgICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkhUUjMsICBBRENfSFRSX0hUICwgdG1wQVdESGlnaFRocmVzaG9sZFNoaWZ0ZWQpOworICAgICAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5MVFIzLCAgQURDX0xUUl9MVCwgdG1wQVdETG93VGhyZXNob2xkU2hpZnRlZCk7CisgICAgICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkhUUjMsICBBRENfSFRSX0hULCB0bXBBV0RIaWdoVGhyZXNob2xkU2hpZnRlZCk7CiAgICAgICB9CiAKKyNlbmRpZgogICAgICAgaWYgKEFuYWxvZ1dER0NvbmZpZy0+V2F0Y2hkb2dOdW1iZXIgPT0gQURDX0FOQUxPR1dBVENIRE9HXzIpCiAgICAgICB7CiAgICAgICAgIC8qIFVwZGF0ZSBzdGF0ZSwgY2xlYXIgcHJldmlvdXMgcmVzdWx0IHJlbGF0ZWQgdG8gQVdEMiAqLwpAQCAtMzM2NiwxMSArMzY5NywxMSBAQAogICAgIC8qIFBvbGwgZm9yIEFEQyByZWFkeSBmbGFnIHJhaXNlZCBleGNlcHQgY2FzZSBvZiBtdWx0aW1vZGUgZW5hYmxlZAogICAgICAgIGFuZCBBREMgc2xhdmUgc2VsZWN0ZWQuICovCiAgICAgdWludDMyX3QgdG1wX211bHRpbW9kZV9jb25maWcgPSBMTF9BRENfR2V0TXVsdGltb2RlKF9fTExfQURDX0NPTU1PTl9JTlNUQU5DRShoYWRjLT5JbnN0YW5jZSkpOwotICAgIGlmICggICAgKF9fTExfQURDX01VTFRJX0lOU1RBTkNFX01BU1RFUihoYWRjLT5JbnN0YW5jZSkgPT0gaGFkYy0+SW5zdGFuY2UpCi0gICAgICAgICB8fCAodG1wX211bHRpbW9kZV9jb25maWcgPT0gTExfQURDX01VTFRJX0lOREVQRU5ERU5UKQorICAgIGlmICgoX19MTF9BRENfTVVMVElfSU5TVEFOQ0VfTUFTVEVSKGhhZGMtPkluc3RhbmNlKSA9PSBoYWRjLT5JbnN0YW5jZSkKKyAgICAgICAgfHwgKHRtcF9tdWx0aW1vZGVfY29uZmlnID09IExMX0FEQ19NVUxUSV9JTkRFUEVOREVOVCkKICAgICAgICApCiAgICAgewotICAgICAgd2hpbGUoX19IQUxfQURDX0dFVF9GTEFHKGhhZGMsIEFEQ19GTEFHX1JEWSkgPT0gMFVMKQorICAgICAgd2hpbGUgKF9fSEFMX0FEQ19HRVRfRkxBRyhoYWRjLCBBRENfRkxBR19SRFkpID09IDBVTCkKICAgICAgIHsKICAgICAgICAgLyogIElmIEFERU4gYml0IGlzIHNldCBsZXNzIHRoYW4gNCBBREMgY2xvY2sgY3ljbGVzIGFmdGVyIHRoZSBBRENBTCBiaXQKICAgICAgICAgICAgIGhhcyBiZWVuIGNsZWFyZWQgKGFmdGVyIGEgY2FsaWJyYXRpb24pLCBBREVOIGJpdCBpcyByZXNldCBieSB0aGUKQEAgLTMzODAsMTIgKzM3MTEsMTIgQEAKICAgICAgICAgICAgIDQgQURDIGNsb2NrIGN5Y2xlIGR1cmF0aW9uICovCiAgICAgICAgIC8qIE5vdGU6IFRlc3Qgb2YgQURDIGVuYWJsZWQgcmVxdWlyZWQgZHVlIHRvIGhhcmR3YXJlIGNvbnN0cmFpbnQgdG8gICAgICovCiAgICAgICAgIC8qICAgICAgIG5vdCBlbmFibGUgQURDIGlmIGFscmVhZHkgZW5hYmxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGlmKExMX0FEQ19Jc0VuYWJsZWQoaGFkYy0+SW5zdGFuY2UpID09IDBVTCkKKyAgICAgICAgaWYgKExMX0FEQ19Jc0VuYWJsZWQoaGFkYy0+SW5zdGFuY2UpID09IDBVTCkKICAgICAgICAgewogICAgICAgICAgIExMX0FEQ19FbmFibGUoaGFkYy0+SW5zdGFuY2UpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gQURDX0VOQUJMRV9USU1FT1VUKQorICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gQURDX0VOQUJMRV9USU1FT1VUKQogICAgICAgICB7CiAgICAgICAgICAgLyogVXBkYXRlIEFEQyBzdGF0ZSBtYWNoaW5lIHRvIGVycm9yICovCiAgICAgICAgICAgU0VUX0JJVChoYWRjLT5TdGF0ZSwgSEFMX0FEQ19TVEFURV9FUlJPUl9JTlRFUk5BTCk7CkBAIC0zNTkwLDEzICszOTIxLDEzIEBACiAgICogQHBhcmFtICBoYWRjIEFEQyBoYW5kbGUKICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCi12b2lkIEFEQ19Db25maWd1cmVCb29zdE1vZGUoQURDX0hhbmRsZVR5cGVEZWYqIGhhZGMpCit2b2lkIEFEQ19Db25maWd1cmVCb29zdE1vZGUoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMpCiB7CiAgIHVpbnQzMl90IGZyZXE7Ci0gIGlmKEFEQ19JU19TWU5DSFJPTk9VU19DTE9DS19NT0RFKGhhZGMpKQorICBpZiAoQURDX0lTX1NZTkNIUk9OT1VTX0NMT0NLX01PREUoaGFkYykpCiAgIHsKICAgICBmcmVxID0gSEFMX1JDQ19HZXRIQ0xLRnJlcSgpOwotICAgIHN3aXRjaChoYWRjLT5Jbml0LkNsb2NrUHJlc2NhbGVyKQorICAgIHN3aXRjaCAoaGFkYy0+SW5pdC5DbG9ja1ByZXNjYWxlcikKICAgICB7CiAgICAgICBjYXNlIEFEQ19DTE9DS19TWU5DX1BDTEtfRElWMToKICAgICAgIGNhc2UgQURDX0NMT0NLX1NZTkNfUENMS19ESVYyOgpAQCAtMzYxMiw3ICszOTQzLDcgQEAKICAgZWxzZQogICB7CiAgICAgZnJlcSA9IEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKFJDQ19QRVJJUEhDTEtfQURDKTsKLSAgICBzd2l0Y2goaGFkYy0+SW5pdC5DbG9ja1ByZXNjYWxlcikKKyAgICBzd2l0Y2ggKGhhZGMtPkluaXQuQ2xvY2tQcmVzY2FsZXIpCiAgICAgewogICAgICAgY2FzZSBBRENfQ0xPQ0tfQVNZTkNfRElWMjoKICAgICAgIGNhc2UgQURDX0NMT0NLX0FTWU5DX0RJVjQ6CkBAIC0zNjI0LDggKzM5NTUsOCBAQAogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgQURDX0NMT0NLX0FTWU5DX0RJVjE2OgogICAgICAgICBmcmVxIC89IDE2VUw7Ci0gICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBRENfQ0xPQ0tfQVNZTkNfRElWMzI6CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBBRENfQ0xPQ0tfQVNZTkNfRElWMzI6CiAgICAgICAgIGZyZXEgLz0gMzJVTDsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEFEQ19DTE9DS19BU1lOQ19ESVY2NDoKQEAgLTM2NDIsMTggKzM5NzMsMTcgQEAKICAgICB9CiAgIH0KIAotI2lmIGRlZmluZWQoQURDX1ZFUl9WNV8zKQorI2lmIGRlZmluZWQoQURDX1ZFUl9WNV8zKSB8fCBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQogICBmcmVxIC89IDJVOwotCiAgIGlmIChmcmVxIDw9IDYyNTAwMDBVTCkKICAgewogICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkNSLCBBRENfQ1JfQk9PU1QsIDBVTCk7CiAgIH0KLSAgZWxzZSBpZihmcmVxIDw9IDEyNTAwMDAwVUwpCisgIGVsc2UgaWYgKGZyZXEgPD0gMTI1MDAwMDBVTCkKICAgewogICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkNSLCBBRENfQ1JfQk9PU1QsIEFEQ19DUl9CT09TVF8wKTsKICAgfQotICBlbHNlIGlmKGZyZXEgPD0gMjUwMDAwMDBVTCkKKyAgZWxzZSBpZiAoZnJlcSA8PSAyNTAwMDAwMFVMKQogICB7CiAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+Q1IsIEFEQ19DUl9CT09TVCwgQURDX0NSX0JPT1NUXzEpOwogICB9CkBAIC0zNjYyLDkgKzM5OTIsOSBAQAogICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkNSLCBBRENfQ1JfQk9PU1QsIEFEQ19DUl9CT09TVF8xIHwgQURDX0NSX0JPT1NUXzApOwogICB9CiAjZWxzZQotICBpZihIQUxfR2V0UkVWSUQoKSA8PSBSRVZfSURfWSkgLyogU1RNMzJINyBzaWxpY29uIFJldi5ZICovCisgIGlmIChIQUxfR2V0UkVWSUQoKSA8PSBSRVZfSURfWSkgLyogU1RNMzJINyBzaWxpY29uIFJldi5ZICovCiAgIHsKLSAgICBpZihmcmVxID4gMjAwMDAwMDBVTCkKKyAgICBpZiAoZnJlcSA+IDIwMDAwMDAwVUwpCiAgICAgewogICAgICAgU0VUX0JJVChoYWRjLT5JbnN0YW5jZS0+Q1IsIEFEQ19DUl9CT09TVF8wKTsKICAgICB9CkBAIC0zNjgxLDExICs0MDExLDExIEBACiAgICAgewogICAgICAgTU9ESUZZX1JFRyhoYWRjLT5JbnN0YW5jZS0+Q1IsIEFEQ19DUl9CT09TVCwgMFVMKTsKICAgICB9Ci0gICAgZWxzZSBpZihmcmVxIDw9IDEyNTAwMDAwVUwpCisgICAgZWxzZSBpZiAoZnJlcSA8PSAxMjUwMDAwMFVMKQogICAgIHsKICAgICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkNSLCBBRENfQ1JfQk9PU1QsIEFEQ19DUl9CT09TVF8wKTsKICAgICB9Ci0gICAgZWxzZSBpZihmcmVxIDw9IDI1MDAwMDAwVUwpCisgICAgZWxzZSBpZiAoZnJlcSA8PSAyNTAwMDAwMFVMKQogICAgIHsKICAgICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkNSLCBBRENfQ1JfQk9PU1QsIEFEQ19DUl9CT09TVF8xKTsKICAgICB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9hZGNfZXguYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2FkY19leC5jCmluZGV4IDg1OGE3YjUuLmEzMjVmNzYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX2FkY19leC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2FkY19leC5jCkBAIC02Nyw4ICs2Nyw4IEBACiAKIC8qIEZpeGVkIHRpbWVvdXQgdmFsdWUgZm9yIEFEQyBjYWxpYnJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBGaXhlZCB0aW1lb3V0IHZhbHVlIGZvciBBREMgY2FsaWJyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiBWYWx1ZXMgZGVmaW5lZCB0byBiZSBoaWdoZXIgdGhhbiB3b3JzdCBjYXNlczogbG93IGNsb2NrIGZyZXF1ZW5jeSwgICAgICAgICAgICovCi0vKiBtYXhpbXVtIHByZXNjYWxlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBWYWx1ZXMgZGVmaW5lZCB0byBiZSBoaWdoZXIgdGhhbiB3b3JzdCBjYXNlczogbG93IGNsb2NrIGZyZXF1ZW5jeSwgICAgICAgICAqLworLyogbWF4aW11bSBwcmVzY2FsZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qIEV4IG9mIHByb2ZpbGUgbG93IGZyZXF1ZW5jeSA6IGZfQURDIGF0IDAuMTI1IE1oeiAobWluaW11bSB2YWx1ZSAgICAgICAgICAgICAgKi8KIC8qIGFjY29yZGluZyB0byBEYXRhIHNoZWV0KSwgY2FsaWJyYXRpb25fdGltZSBNQVggPSAxNjUwMTAgLyBmX0FEQyAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAxNjUwMTAgLyAxMjUwMDAgPSAxLjMycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE1OSw3ICsxNTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgIEhBTF9BRENfU1RBVEVfQlVTWV9JTlRFUk5BTCk7CiAKICAgICAvKiBTdGFydCBBREMgY2FsaWJyYXRpb24gaW4gbW9kZSBzaW5nbGUtZW5kZWQgb3IgZGlmZmVyZW50aWFsICovCi0gICAgTExfQURDX1N0YXJ0Q2FsaWJyYXRpb24oaGFkYy0+SW5zdGFuY2UgLCBDYWxpYnJhdGlvbk1vZGUsIFNpbmdsZURpZmYgKTsKKyAgICBMTF9BRENfU3RhcnRDYWxpYnJhdGlvbihoYWRjLT5JbnN0YW5jZSwgQ2FsaWJyYXRpb25Nb2RlLCBTaW5nbGVEaWZmKTsKIAogICAgIC8qIFdhaXQgZm9yIGNhbGlicmF0aW9uIGNvbXBsZXRpb24gKi8KICAgICB3aGlsZSAoTExfQURDX0lzQ2FsaWJyYXRpb25PbkdvaW5nKGhhZGMtPkluc3RhbmNlKSAhPSAwVUwpCkBAIC0yMjMsMzggKzIyMywzOCBAQAogICAqIEBwYXJhbSAgTGluZWFyQ2FsaWJfQnVmZmVyOiBMaW5lYXIgY2FsaWJyYXRpb24gZmFjdG9yCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KLUhBTF9TdGF0dXNUeXBlRGVmIEhBTF9BRENFeF9MaW5lYXJDYWxpYnJhdGlvbl9HZXRWYWx1ZShBRENfSGFuZGxlVHlwZURlZiogaGFkYywgdWludDMyX3QqIExpbmVhckNhbGliX0J1ZmZlcikKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9BRENFeF9MaW5lYXJDYWxpYnJhdGlvbl9HZXRWYWx1ZShBRENfSGFuZGxlVHlwZURlZiAqaGFkYywgdWludDMyX3QgKkxpbmVhckNhbGliX0J1ZmZlcikKIHsKICAgdWludDMyX3QgY250OwogICBIQUxfU3RhdHVzVHlwZURlZiB0bXBfaGFsX3N0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgdGVtcF9SRUdfSXNDb252ZXJzaW9uT25nb2luZyA9IDBVTDsKLSAgCisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX0FEQ19BTExfSU5TVEFOQ0UoaGFkYy0+SW5zdGFuY2UpKTsKLSAgCisKICAgLyogRW5hYmxlIHRoZSBBREMgQURFTiA9IDEgdG8gYmUgYWJsZSB0byByZWFkIHRoZSBsaW5lYXIgY2FsaWJyYXRpb24gZmFjdG9yICovCi0gIGlmKExMX0FEQ19Jc0VuYWJsZWQoaGFkYy0+SW5zdGFuY2UpID09IDBVTCkgCisgIGlmIChMTF9BRENfSXNFbmFibGVkKGhhZGMtPkluc3RhbmNlKSA9PSAwVUwpCiAgIHsKICAgICB0bXBfaGFsX3N0YXR1cyA9IEFEQ19FbmFibGUoaGFkYyk7CiAgIH0KLSAgCisKICAgaWYgKHRtcF9oYWxfc3RhdHVzID09IEhBTF9PSykKICAgewotICAgIGlmKExMX0FEQ19SRUdfSXNDb252ZXJzaW9uT25nb2luZyhoYWRjLT5JbnN0YW5jZSkgIT0gMFVMKQorICAgIGlmIChMTF9BRENfUkVHX0lzQ29udmVyc2lvbk9uZ29pbmcoaGFkYy0+SW5zdGFuY2UpICE9IDBVTCkKICAgICB7CiAgICAgICBMTF9BRENfUkVHX1N0b3BDb252ZXJzaW9uKGhhZGMtPkluc3RhbmNlKTsKICAgICAgIHRlbXBfUkVHX0lzQ29udmVyc2lvbk9uZ29pbmcgPSAxVUw7CiAgICAgfQotICAgIGZvcihjbnQgPSBBRENfTElORUFSX0NBTElCX1JFR19DT1VOVDsgY250ID4gMFVMOyBjbnQtLSkKKyAgICBmb3IgKGNudCA9IEFEQ19MSU5FQVJfQ0FMSUJfUkVHX0NPVU5UOyBjbnQgPiAwVUw7IGNudC0tKQogICAgIHsKLSAgICAgIExpbmVhckNhbGliX0J1ZmZlcltjbnQtMVVdPUxMX0FEQ19HZXRDYWxpYnJhdGlvbkxpbmVhckZhY3RvcihoYWRjLT5JbnN0YW5jZSwgQURDX0NSX0xJTkNBTFJEWVc2ID4+IChBRENfTElORUFSX0NBTElCX1JFR19DT1VOVC1jbnQpKTsKKyAgICAgIExpbmVhckNhbGliX0J1ZmZlcltjbnQgLSAxVV0gPSBMTF9BRENfR2V0Q2FsaWJyYXRpb25MaW5lYXJGYWN0b3IoaGFkYy0+SW5zdGFuY2UsIEFEQ19DUl9MSU5DQUxSRFlXNiA+PiAoQURDX0xJTkVBUl9DQUxJQl9SRUdfQ09VTlQgLSBjbnQpKTsKICAgICB9Ci0gICAgaWYodGVtcF9SRUdfSXNDb252ZXJzaW9uT25nb2luZyAhPSAwVUwpCisgICAgaWYgKHRlbXBfUkVHX0lzQ29udmVyc2lvbk9uZ29pbmcgIT0gMFVMKQogICAgIHsKICAgICAgIExMX0FEQ19SRUdfU3RhcnRDb252ZXJzaW9uKGhhZGMtPkluc3RhbmNlKTsKICAgICB9CiAgIH0KLSAgCisKICAgcmV0dXJuIHRtcF9oYWxfc3RhdHVzOwogfQogCkBAIC0zMTksNyArMzE5LDcgQEAKICAgKiBAcGFyYW0gIExpbmVhckNhbGliX0J1ZmZlcjogTGluZWFyIGNhbGlicmF0aW9uIGZhY3RvcgogICAqIEByZXR2YWwgSEFMIHN0YXRlCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfQURDRXhfTGluZWFyQ2FsaWJyYXRpb25fU2V0VmFsdWUoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIHVpbnQzMl90KiBMaW5lYXJDYWxpYl9CdWZmZXIpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQURDRXhfTGluZWFyQ2FsaWJyYXRpb25fU2V0VmFsdWUoQURDX0hhbmRsZVR5cGVEZWYgKmhhZGMsIHVpbnQzMl90ICpMaW5lYXJDYWxpYl9CdWZmZXIpCiB7CiAgIHVpbnQzMl90IGNudDsKICAgX19JTyB1aW50MzJfdCB3YWl0X2xvb3BfaW5kZXggPSAwOwpAQCAtMzQxLDcgKzM0MSw3IEBACiAgIH0KIAogCi0gIGlmICAoSEFMX0lTX0JJVF9DTFIoaGFkYy0+SW5zdGFuY2UtPkNSLCBBRENfQ1JfQURWUkVHRU4pKQorICBpZiAoSEFMX0lTX0JJVF9DTFIoaGFkYy0+SW5zdGFuY2UtPkNSLCBBRENfQ1JfQURWUkVHRU4pKQogICB7CiAgICAgLyogRW5hYmxlIEFEQyBpbnRlcm5hbCB2b2x0YWdlIHJlZ3VsYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIFNFVF9CSVQoaGFkYy0+SW5zdGFuY2UtPkNSLCBBRENfQ1JfQURWUkVHRU4pOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAgICAgLyogTm90ZTogVmFyaWFibGUgZGl2aWRlZCBieSAyIHRvIGNvbXBlbnNhdGUgcGFydGlhbGx5ICAgICAgICAgICAgICAgICAgICAqLwogICAgIC8qICAgICAgIENQVSBwcm9jZXNzaW5nIGN5Y2xlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICB3YWl0X2xvb3BfaW5kZXggPSAoQURDX1NUQUJfREVMQVlfVVMgKiAoU3lzdGVtQ29yZUNsb2NrIC8gKDEwMDAwMDBVTCAqIDJVTCkpKTsKLSAgICB3aGlsZSh3YWl0X2xvb3BfaW5kZXggIT0gMFVMKQorICAgIHdoaWxlICh3YWl0X2xvb3BfaW5kZXggIT0gMFVMKQogICAgIHsKICAgICAgIHdhaXRfbG9vcF9pbmRleC0tOwogICAgIH0KQEAgLTM3MCwzNyArMzcwLDM4IEBACiAKICAgICByZXR1cm4gIEhBTF9FUlJPUjsKICAgfQotLyogRW5hYmxlIHRoZSBBREMgcGVyaXBoZXJhbCAqLwotICAgaWYoTExfQURDX0lzRW5hYmxlZChoYWRjLT5JbnN0YW5jZSkgPT0gMFVMKSAgLyogRW5hYmxlIHRoZSBBREMgaWYgaXQgaXMgZGlzYWJsZWQgKi8KLSAgICB7CisgIC8qIEVuYWJsZSB0aGUgQURDIHBlcmlwaGVyYWwgKi8KKyAgaWYgKExMX0FEQ19Jc0VuYWJsZWQoaGFkYy0+SW5zdGFuY2UpID09IDBVTCkgLyogRW5hYmxlIHRoZSBBREMgaWYgaXQgaXMgZGlzYWJsZWQgKi8KKyAgewogICAgIGlmIChBRENfRW5hYmxlKGhhZGMpICE9IEhBTF9PSykKICAgICB7CiAgICAgICByZXR1cm4gIEhBTF9FUlJPUjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGZvcihjbnQgPSBBRENfTElORUFSX0NBTElCX1JFR19DT1VOVDsgY250ID4gMFVMIDsgY250LS0pCisgICAgICBmb3IgKGNudCA9IEFEQ19MSU5FQVJfQ0FMSUJfUkVHX0NPVU5UOyBjbnQgPiAwVUwgOyBjbnQtLSkKICAgICAgIHsKLSAgICAgICAgTExfQURDX1NldENhbGlicmF0aW9uTGluZWFyRmFjdG9yKGhhZGMtPkluc3RhbmNlLCBBRENfQ1JfTElOQ0FMUkRZVzYgPj4gKEFEQ19MSU5FQVJfQ0FMSUJfUkVHX0NPVU5ULWNudCksIExpbmVhckNhbGliX0J1ZmZlcltjbnQtMVVdKTsKKyAgICAgICAgTExfQURDX1NldENhbGlicmF0aW9uTGluZWFyRmFjdG9yKGhhZGMtPkluc3RhbmNlLCBBRENfQ1JfTElOQ0FMUkRZVzYgPj4gKEFEQ19MSU5FQVJfQ0FMSUJfUkVHX0NPVU5UIC0gY250KSwgTGluZWFyQ2FsaWJfQnVmZmVyW2NudCAtIDFVXSk7CiAgICAgICB9CiAgICAgICAodm9pZClBRENfRGlzYWJsZShoYWRjKTsKICAgICB9Ci0gICAgfWVsc2UgLyogQURDIGlzIGFscmVhZHkgZW5hYmxlZCwgc28gbm8gbmVlZCB0byBlbmFibGUgaXQgYnV0IG5lZWQgdG8gc3RvcCBjb252ZXJzaW9uICovCisgIH0KKyAgZWxzZSAgLyogQURDIGlzIGFscmVhZHkgZW5hYmxlZCwgc28gbm8gbmVlZCB0byBlbmFibGUgaXQgYnV0IG5lZWQgdG8gc3RvcCBjb252ZXJzaW9uICovCisgIHsKKyAgICBpZiAoTExfQURDX1JFR19Jc0NvbnZlcnNpb25PbmdvaW5nKGhhZGMtPkluc3RhbmNlKSAhPSAwVUwpCiAgICAgewotICAgICAgIGlmKExMX0FEQ19SRUdfSXNDb252ZXJzaW9uT25nb2luZyhoYWRjLT5JbnN0YW5jZSkgIT0gMFVMKQotICAgICAgICB7Ci0gICAgICAgICAgTExfQURDX1JFR19TdG9wQ29udmVyc2lvbihoYWRjLT5JbnN0YW5jZSk7Ci0gICAgICAgICAgdGVtcF9SRUdfSXNDb252ZXJzaW9uT25nb2luZyA9IDFVTDsKLSAgICAgICAgIH0KLSAgICAgICBmb3IoY250ID0gQURDX0xJTkVBUl9DQUxJQl9SRUdfQ09VTlQ7IGNudCA+IDBVTCA7IGNudC0tKQotICAgICAgICAgewotICAgICAgICAgICBMTF9BRENfU2V0Q2FsaWJyYXRpb25MaW5lYXJGYWN0b3IoaGFkYy0+SW5zdGFuY2UsIEFEQ19DUl9MSU5DQUxSRFlXNiA+PiAoQURDX0xJTkVBUl9DQUxJQl9SRUdfQ09VTlQtY250KSwgTGluZWFyQ2FsaWJfQnVmZmVyW2NudC0xVV0pOwotICAgICAgICAgfQotICAgICAgIGlmKHRlbXBfUkVHX0lzQ29udmVyc2lvbk9uZ29pbmcgIT0gMFVMKQotICAgICAgICAgewotICAgICAgICAgICBMTF9BRENfUkVHX1N0YXJ0Q29udmVyc2lvbihoYWRjLT5JbnN0YW5jZSk7Ci0gICAgICAgICB9CisgICAgICBMTF9BRENfUkVHX1N0b3BDb252ZXJzaW9uKGhhZGMtPkluc3RhbmNlKTsKKyAgICAgIHRlbXBfUkVHX0lzQ29udmVyc2lvbk9uZ29pbmcgPSAxVUw7CiAgICAgfQorICAgIGZvciAoY250ID0gQURDX0xJTkVBUl9DQUxJQl9SRUdfQ09VTlQ7IGNudCA+IDBVTCA7IGNudC0tKQorICAgIHsKKyAgICAgIExMX0FEQ19TZXRDYWxpYnJhdGlvbkxpbmVhckZhY3RvcihoYWRjLT5JbnN0YW5jZSwgQURDX0NSX0xJTkNBTFJEWVc2ID4+IChBRENfTElORUFSX0NBTElCX1JFR19DT1VOVCAtIGNudCksIExpbmVhckNhbGliX0J1ZmZlcltjbnQgLSAxVV0pOworICAgIH0KKyAgICBpZiAodGVtcF9SRUdfSXNDb252ZXJzaW9uT25nb2luZyAhPSAwVUwpCisgICAgeworICAgICAgTExfQURDX1JFR19TdGFydENvbnZlcnNpb24oaGFkYy0+SW5zdGFuY2UpOworICAgIH0KKyAgfQogICByZXR1cm4gSEFMX09LOwogfQogCkBAIC00MTQsMzIgKzQxNSwzNCBAQAogICBIQUxfU3RhdHVzVHlwZURlZiB0bXBfaGFsX3N0YXR1cyA9IEhBTF9PSzsKICAgdWludDMyX3QgY250LCBGYWN0b3JPZmZzZXQ7CiAgIHVpbnQzMl90IExpbmVhckNhbGliX0J1ZmZlcltBRENfTElORUFSX0NBTElCX1JFR19DT1VOVF07Ci0gIAorCiAgIC8qIExpbmVhcml0eSBjYWxpYnJhdGlvbiBpcyByZXRyaWV2ZWQgZnJvbSBlbmdpIGJ5dGVzCiAgICAgIHJlYWQgdmFsdWVzIGZyb20gcmVnaXN0ZXJzIGFuZCBwdXQgdGhlbSB0byB0aGUgQ0FMRkFDVDIgcmVnaXN0ZXIgKi8KICAgLyogSWYgbmVlZGVkIGxpbmVhcml0eSBjYWxpYnJhdGlvbiBjYW4gYmUgZG9uZSBpbiBydW50aW1lIHVzaW5nCiAgICAgIExMX0FEQ19HZXRDYWxpYnJhdGlvbkxpbmVhckZhY3RvcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgaWYoaGFkYy0+SW5zdGFuY2UgPT0gQURDMSkKLSAgIHsKKyAgaWYgKGhhZGMtPkluc3RhbmNlID09IEFEQzEpCisgIHsKICAgICBGYWN0b3JPZmZzZXQgPSAwVUw7Ci0gICB9ZWxzZSBpZihoYWRjLT5JbnN0YW5jZSA9PSBBREMyKQotICAgeworICB9CisgIGVsc2UgaWYgKGhhZGMtPkluc3RhbmNlID09IEFEQzIpCisgIHsKICAgICBGYWN0b3JPZmZzZXQgPSA4VUw7Ci0gICB9ZWxzZSAgLypDYXNlIEFEQzMqLwotICAgIHsKLSAgICAgRmFjdG9yT2Zmc2V0ID0gMTZVTDsKLSAgICB9IAotIAorICB9CisgIGVsc2UgICAvKkNhc2UgQURDMyovCisgIHsKKyAgICBGYWN0b3JPZmZzZXQgPSAxNlVMOworICB9CisKICAgZm9yIChjbnQgPSAwVUw7IGNudCA8IEFEQ19MSU5FQVJfQ0FMSUJfUkVHX0NPVU5UOyBjbnQrKykKICAgewotICAgIExpbmVhckNhbGliX0J1ZmZlcltjbnRdID0gKih1aW50MzJfdCopKEFEQ19MSU5FQVJfQ0FMSUJfUkVHXzFfQUREUiArIEZhY3Rvck9mZnNldCArIGNudCk7CisgICAgTGluZWFyQ2FsaWJfQnVmZmVyW2NudF0gPSAqKHVpbnQzMl90ICopKEFEQ19MSU5FQVJfQ0FMSUJfUkVHXzFfQUREUiArIEZhY3Rvck9mZnNldCArIGNudCk7CiAgIH0KLSAgaWYgKEhBTF9BRENFeF9MaW5lYXJDYWxpYnJhdGlvbl9TZXRWYWx1ZShoYWRjLCh1aW50MzJfdCopTGluZWFyQ2FsaWJfQnVmZmVyKSAhPSBIQUxfT0spCisgIGlmIChIQUxfQURDRXhfTGluZWFyQ2FsaWJyYXRpb25fU2V0VmFsdWUoaGFkYywgKHVpbnQzMl90ICopTGluZWFyQ2FsaWJfQnVmZmVyKSAhPSBIQUxfT0spCiAgIHsKICAgICB0bXBfaGFsX3N0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQogCi0gICByZXR1cm4gdG1wX2hhbF9zdGF0dXM7CisgIHJldHVybiB0bXBfaGFsX3N0YXR1czsKIH0KIAogLyoqCkBAIC0xNTMxLDggKzE1MzQsOCBAQAogICAgIC8qIENsZWFyIEhBTF9BRENfU1RBVEVfUkVHX0JVU1kgYml0ICovCiAgICAgQ0xFQVJfQklUKGhhZGMtPlN0YXRlLCBIQUxfQURDX1NUQVRFX1JFR19CVVNZKTsKIAotICAvKiBEaXNhYmxlIEFEQyBETUEgKEFEQyBETUEgY29uZmlndXJhdGlvbiBBRENfQ0ZHUl9ETUFDRkcgaXMga2VwdCkgKi8KLSAgICBNT0RJRllfUkVHKGhhZGMtPkluc3RhbmNlLT5DRkdSLCBBRENfQ0ZHUl9ETU5HVF8wIHxBRENfQ0ZHUl9ETU5HVF8xLCAwVUwpOworICAgIC8qIERpc2FibGUgQURDIERNQSAoQURDIERNQSBjb25maWd1cmF0aW9uIEFEQ19DRkdSX0RNQUNGRyBpcyBrZXB0KSAqLworICAgIE1PRElGWV9SRUcoaGFkYy0+SW5zdGFuY2UtPkNGR1IsIEFEQ19DRkdSX0RNTkdUXzAgfCBBRENfQ0ZHUl9ETU5HVF8xLCAwVUwpOwogCiAgICAgLyogRGlzYWJsZSB0aGUgRE1BIGNoYW5uZWwgKGluIGNhc2Ugb2YgRE1BIGluIGNpcmN1bGFyIG1vZGUgb3Igc3RvcCB3aGlsZSAqLwogICAgIC8qIHdoaWxlIERNQSB0cmFuc2ZlciBpcyBvbiBnb2luZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE3OTAsOCArMTc5MywxOSBAQAogICBhc3NlcnRfcGFyYW0oSVNfQURDX0VYVFRSSUdJTkpFQ19FREdFKHNDb25maWdJbmplY3RlZC0+RXh0ZXJuYWxUcmlnSW5qZWNDb252RWRnZSkpOwogICBhc3NlcnRfcGFyYW0oSVNfQURDX0VYVFRSSUdJTkpFQyhzQ29uZmlnSW5qZWN0ZWQtPkV4dGVybmFsVHJpZ0luamVjQ29udikpOwogICBhc3NlcnRfcGFyYW0oSVNfQURDX09GRlNFVF9OVU1CRVIoc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZE9mZnNldE51bWJlcikpOwotICBhc3NlcnRfcGFyYW0oSVNfQURDX1JBTkdFKEFEQ19HRVRfUkVTT0xVVElPTihoYWRjKSwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZE9mZnNldCkpOwogICBhc3NlcnRfcGFyYW0oSVNfRlVOQ1RJT05BTF9TVEFURShzQ29uZmlnSW5qZWN0ZWQtPkluamVjT3ZlcnNhbXBsaW5nTW9kZSkpOworI2lmIGRlZmluZWQoQURDX1ZFUl9WNV9WOTApCisgIGFzc2VydF9wYXJhbShJU19GVU5DVElPTkFMX1NUQVRFKHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRPZmZzZXRTYXR1cmF0aW9uKSk7CisgIGlmIChoYWRjLT5JbnN0YW5jZSA9PSBBREMzKQorICB7CisgICAgYXNzZXJ0X3BhcmFtKElTX0FEQzNfT0ZGU0VUX1NJR04oc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZE9mZnNldFNpZ24pKTsKKyAgICBhc3NlcnRfcGFyYW0oSVNfQURDM19SQU5HRShBRENfR0VUX1JFU09MVVRJT04oaGFkYyksIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRPZmZzZXQpKTsKKyAgfQorICBlbHNlCisjZW5kaWYgLyogQURDX1ZFUl9WNV9WOTAgKi8KKyAgeworICAgIGFzc2VydF9wYXJhbShJU19BRENfUkFOR0UoQURDX0dFVF9SRVNPTFVUSU9OKGhhZGMpLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0KSk7CisgIH0KIAogICBpZiAoaGFkYy0+SW5pdC5TY2FuQ29udk1vZGUgIT0gQURDX1NDQU5fRElTQUJMRSkKICAgewpAQCAtMTgwMywxMyArMTgxNywyMCBAQAogICAvKiBDaGVjayBvZmZzZXQgcmFuZ2UgYWNjb3JkaW5nIHRvIG92ZXJzYW1wbGluZyBzZXR0aW5nICovCiAgIGlmIChoYWRjLT5Jbml0Lk92ZXJzYW1wbGluZ01vZGUgPT0gRU5BQkxFKQogICB7Ci0gICAgYXNzZXJ0X3BhcmFtKElTX0FEQ19SQU5HRShBRENfR0VUX1JFU09MVVRJT04oaGFkYyksIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRPZmZzZXQvKGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLlJhdGlvKzFVKSkpOworICAgIGFzc2VydF9wYXJhbShJU19BRENfUkFOR0UoQURDX0dFVF9SRVNPTFVUSU9OKGhhZGMpLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0IC8gKGhhZGMtPkluaXQuT3ZlcnNhbXBsaW5nLlJhdGlvICsgMVUpKSk7CiAgIH0KICAgZWxzZQogICB7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0FEQ19SQU5HRShBRENfR0VUX1JFU09MVVRJT04oaGFkYyksIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRPZmZzZXQpKTsKICAgfQotCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgLyogaWYgSk9WU0UgaXMgc2V0LCB0aGUgdmFsdWUgb2YgdGhlIE9GRlNFVHlfRU4gYml0IGluIEFEQ3hfT0ZSeSByZWdpc3RlciBpcworICAgICBpZ25vcmVkIChjb25zaWRlcmVkIGFzIHJlc2V0KSAqLworICBpZiAoaGFkYy0+SW5zdGFuY2UgPT0gQURDMykKKyAgeworICAgIGFzc2VydF9wYXJhbSghKChzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0TnVtYmVyICE9IEFEQ19PRkZTRVRfTk9ORSkgJiYgKHNDb25maWdJbmplY3RlZC0+SW5qZWNPdmVyc2FtcGxpbmdNb2RlID09IEVOQUJMRSkpKTsKKyAgfQorI2VuZGlmICAvKiBBRENfVkVSX1Y1X1Y5MCAqLwogICAvKiBKRElTQ0VOIGFuZCBKQVVUTyBiaXRzIGNhbid0IGJlIHNldCBhdCB0aGUgc2FtZSB0aW1lICAqLwogICBhc3NlcnRfcGFyYW0oISgoc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZERpc2NvbnRpbnVvdXNDb252TW9kZSA9PSBFTkFCTEUpICYmIChzQ29uZmlnSW5qZWN0ZWQtPkF1dG9JbmplY3RlZENvbnYgPT0gRU5BQkxFKSkpOwogCkBAIC0xOTc3LDggKzE5OTgsMTYgQEAKICAgLyogICAgbW9kZSBpcyBkaXNhYmxlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIGlmIChMTF9BRENfSU5KX0lzQ29udmVyc2lvbk9uZ29pbmcoaGFkYy0+SW5zdGFuY2UpID09IDBVTCkKICAgewotICAvKiBBREMgY2hhbm5lbHMgcHJlc2VsZWN0aW9uICovCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICBpZiAoaGFkYy0+SW5zdGFuY2UgIT0gQURDMykKKyAgICB7CisgICAgICAvKiBBREMgY2hhbm5lbHMgcHJlc2VsZWN0aW9uICovCisgICAgICBoYWRjLT5JbnN0YW5jZS0+UENTRUxfUkVTMCB8PSAoMVVMIDw8IChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwpICYgMHgxRlVMKSk7CisgICAgfQorI2Vsc2UKKyAgICAvKiBBREMgY2hhbm5lbHMgcHJlc2VsZWN0aW9uICovCiAgICAgaGFkYy0+SW5zdGFuY2UtPlBDU0VMIHw9ICgxVUwgPDwgKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkgJiAweDFGVUwpKTsKKyNlbmRpZiAvKiBBRENfVkVSX1Y1X1Y5MCAqLwogCiAgICAgLyogSWYgYXV0by1pbmplY3RlZCBtb2RlIGlzIGRpc2FibGVkOiBubyBjb25zdHJhaW50ICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmIChzQ29uZmlnSW5qZWN0ZWQtPkF1dG9JbmplY3RlZENvbnYgPT0gRElTQUJMRSkKQEAgLTIwNjEsOCArMjA5MCw4IEBACiAgICAgICAgICAgICAgICAgIEFEQ19DRkdSMl9KT1ZTRSB8CiAgICAgICAgICAgICAgICAgIEFEQ19DRkdSMl9PVlNSICB8CiAgICAgICAgICAgICAgICAgIEFEQ19DRkdSMl9PVlNTLAotICAgICAgICAgICAgICAgICBBRENfQ0ZHUjJfSk9WU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAoKHNDb25maWdJbmplY3RlZC0+SW5qZWNPdmVyc2FtcGxpbmcuUmF0aW8gLSAxVUwpIDw8IEFEQ19DRkdSMl9PVlNSX1BvcykgfAorICAgICAgICAgICAgICAgICBBRENfQ0ZHUjJfSk9WU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICgoc0NvbmZpZ0luamVjdGVkLT5JbmplY092ZXJzYW1wbGluZy5SYXRpbyAtIDFVTCkgPDwgQURDX0NGR1IyX09WU1JfUG9zKSB8CiAgICAgICAgICAgICAgICAgIHNDb25maWdJbmplY3RlZC0+SW5qZWNPdmVyc2FtcGxpbmcuUmlnaHRCaXRTaGlmdAogICAgICAgICAgICAgICAgICk7CiAgICAgfQpAQCAtMjA3Miw0NyArMjEwMSw4OSBAQAogICAgICAgQ0xFQVJfQklUKGhhZGMtPkluc3RhbmNlLT5DRkdSMiwgQURDX0NGR1IyX0pPVlNFKTsKICAgICB9CiAKLSAgICAgIC8qIFNldCBzYW1wbGluZyB0aW1lIG9mIHRoZSBzZWxlY3RlZCBBREMgY2hhbm5lbCAqLwotICAgICAgTExfQURDX1NldENoYW5uZWxTYW1wbGluZ1RpbWUoaGFkYy0+SW5zdGFuY2UsIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkU2FtcGxpbmdUaW1lKTsKKyAgICAvKiBTZXQgc2FtcGxpbmcgdGltZSBvZiB0aGUgc2VsZWN0ZWQgQURDIGNoYW5uZWwgKi8KKyAgICBMTF9BRENfU2V0Q2hhbm5lbFNhbXBsaW5nVGltZShoYWRjLT5JbnN0YW5jZSwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwsIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRTYW1wbGluZ1RpbWUpOwogCiAgICAgLyogQ29uZmlndXJlIHRoZSBvZmZzZXQ6IG9mZnNldCBlbmFibGUvZGlzYWJsZSwgY2hhbm5lbCwgb2Zmc2V0IHZhbHVlICovCiAKICAgICAvKiBTaGlmdCB0aGUgb2Zmc2V0IHdpdGggcmVzcGVjdCB0byB0aGUgc2VsZWN0ZWQgQURDIHJlc29sdXRpb24uICovCiAgICAgLyogT2Zmc2V0IGhhcyB0byBiZSBsZWZ0LWFsaWduZWQgb24gYml0IDExLCB0aGUgTFNCIChyaWdodCBiaXRzKSBhcmUgc2V0IHRvIDAgKi8KLSAgICB0bXBPZmZzZXRTaGlmdGVkID0gQURDX09GRlNFVF9TSElGVF9SRVNPTFVUSU9OKGhhZGMsIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRPZmZzZXQpOwotCisjaWYgZGVmaW5lZChBRENfVkVSX1Y1X1Y5MCkKKyAgICBpZiAoaGFkYy0+SW5zdGFuY2UgPT0gQURDMykKKyAgICB7CisgICAgICB0bXBPZmZzZXRTaGlmdGVkID0gQURDM19PRkZTRVRfU0hJRlRfUkVTT0xVVElPTihoYWRjLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0KTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEFEQ19WRVJfVjVfVjkwICovCisgICAgeworICAgICAgdG1wT2Zmc2V0U2hpZnRlZCA9IEFEQ19PRkZTRVRfU0hJRlRfUkVTT0xVVElPTihoYWRjLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0KTsKKyAgICB9CisgICAgCiAgICAgaWYgKHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRPZmZzZXROdW1iZXIgIT0gQURDX09GRlNFVF9OT05FKQogICAgIHsKICAgICAgIC8qIFNldCBBREMgc2VsZWN0ZWQgb2Zmc2V0IG51bWJlciAqLwotICAgICAgTExfQURDX1NldE9mZnNldChoYWRjLT5JbnN0YW5jZSwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZE9mZnNldE51bWJlciwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgIHRtcE9mZnNldFNoaWZ0ZWQpOworICAgICAgTExfQURDX1NldE9mZnNldChoYWRjLT5JbnN0YW5jZSwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZE9mZnNldE51bWJlciwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwsIHRtcE9mZnNldFNoaWZ0ZWQpOwogCi0gICAgICAvKiBTZXQgQURDIHNlbGVjdGVkIG9mZnNldCBzaWduZWQgc2F0dXJhdGlvbiAqLwotICAgICAgTExfQURDX1NldE9mZnNldFNpZ25lZFNhdHVyYXRpb24oaGFkYy0+SW5zdGFuY2UsIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRPZmZzZXROdW1iZXIsIChzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0U2lnbmVkU2F0dXJhdGlvbiA9PSBFTkFCTEUpID8gTExfQURDX09GRlNFVF9TSUdORURfU0FUVVJBVElPTl9FTkFCTEUgOiBMTF9BRENfT0ZGU0VUX1NJR05FRF9TQVRVUkFUSU9OX0RJU0FCTEUpOwotCi0gICAgICAvKiBTZXQgQURDIHNlbGVjdGVkIG9mZnNldCByaWdodCBzaGlmdCAqLwotICAgICAgTExfQURDX1NldERhdGFSaWdodFNoaWZ0KGhhZGMtPkluc3RhbmNlLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0TnVtYmVyLCAoc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZE9mZnNldFJpZ2h0U2hpZnQgPT0gKHVpbnQzMl90KUVOQUJMRSkgPyBMTF9BRENfT0ZGU0VUX1JTSElGVF9FTkFCTEUgOiBMTF9BRENfT0ZGU0VUX1JTSElGVF9ESVNBQkxFKTsKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICAgICAgaWYgKGhhZGMtPkluc3RhbmNlID09IEFEQzMpCisgICAgICB7CisgICAgICAgIC8qIFNldCBBREMgc2VsZWN0ZWQgb2Zmc2V0IHNpZ24gJiBzYXR1cmF0aW9uICovCisgICAgICAgIExMX0FEQ19TZXRPZmZzZXRTaWduKGhhZGMtPkluc3RhbmNlLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0TnVtYmVyLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0U2lnbik7CisgICAgICAgIExMX0FEQ19TZXRPZmZzZXRTYXR1cmF0aW9uKGhhZGMtPkluc3RhbmNlLCBzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0TnVtYmVyLCAoc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZE9mZnNldFNhdHVyYXRpb24gPT0gRU5BQkxFKSA/IExMX0FEQ19PRkZTRVRfU0FUVVJBVElPTl9FTkFCTEUgOiBMTF9BRENfT0ZGU0VUX1NBVFVSQVRJT05fRElTQUJMRSk7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgLyogQURDX1ZFUl9WNV9WOTAgKi8KKyAgICAgIHsKKyAgICAgICAgLyogU2V0IEFEQyBzZWxlY3RlZCBvZmZzZXQgc2lnbmVkIHNhdHVyYXRpb24gKi8KKyAgICAgICAgTExfQURDX1NldE9mZnNldFNpZ25lZFNhdHVyYXRpb24oaGFkYy0+SW5zdGFuY2UsIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRPZmZzZXROdW1iZXIsIChzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkT2Zmc2V0U2lnbmVkU2F0dXJhdGlvbiA9PSBFTkFCTEUpID8gTExfQURDX09GRlNFVF9TSUdORURfU0FUVVJBVElPTl9FTkFCTEUgOiBMTF9BRENfT0ZGU0VUX1NJR05FRF9TQVRVUkFUSU9OX0RJU0FCTEUpOworICAgICAgfQogCiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAvKiBTY2FuIGVhY2ggb2Zmc2V0IHJlZ2lzdGVyIHRvIGNoZWNrIGlmIHRoZSBzZWxlY3RlZCBjaGFubmVsIGlzIHRhcmdldGVkLiAqLwotICAgICAgLyogSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlIGNvcnJlc3BvbmRpbmcgb2Zmc2V0IG51bWJlciBpcyBkaXNhYmxlZC4gICAgICAgKi8KLSAgICAgIGlmKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8xKSkgPT0gX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsKSkKKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICAgICAgaWYgKGhhZGMtPkluc3RhbmNlID09IEFEQzMpCiAgICAgICB7Ci0gICAgICAgIExMX0FEQ19TZXRPZmZzZXQoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMSwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwsIExMX0FEQ19PRkZTRVRfU0lHTkVEX1NBVFVSQVRJT05fRElTQUJMRSk7CisgICAgICAgIC8qIFNjYW4gZWFjaCBvZmZzZXQgcmVnaXN0ZXIgdG8gY2hlY2sgaWYgdGhlIHNlbGVjdGVkIGNoYW5uZWwgaXMgdGFyZ2V0ZWQuICovCisgICAgICAgIC8qIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSBjb3JyZXNwb25kaW5nIG9mZnNldCBudW1iZXIgaXMgZGlzYWJsZWQuICAgICAgICovCisgICAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMSkpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCisgICAgICAgIHsKKyAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U3RhdGUoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMSwgTExfQURDX09GRlNFVF9ESVNBQkxFKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKExMX0FEQ19HZXRPZmZzZXRDaGFubmVsKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzIpKSA9PSBfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwpKQorICAgICAgICB7CisgICAgICAgICAgTExfQURDX1NldE9mZnNldFN0YXRlKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzIsIExMX0FEQ19PRkZTRVRfRElTQUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihMTF9BRENfR2V0T2Zmc2V0Q2hhbm5lbChoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8zKSkgPT0gX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsKSkKKyAgICAgICAgeworICAgICAgICAgIExMX0FEQ19TZXRPZmZzZXRTdGF0ZShoYWRjLT5JbnN0YW5jZSwgTExfQURDX09GRlNFVF8zLCBMTF9BRENfT0ZGU0VUX0RJU0FCTEUpOworICAgICAgICB9CisgICAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCkpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCisgICAgICAgIHsKKyAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0U3RhdGUoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCwgTExfQURDX09GRlNFVF9ESVNBQkxFKTsKKyAgICAgICAgfQogICAgICAgfQotICAgICAgaWYoX19MTF9BRENfQ0hBTk5FTF9UT19ERUNJTUFMX05CKExMX0FEQ19HZXRPZmZzZXRDaGFubmVsKGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzIpKSA9PSBfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwpKQorICAgICAgZWxzZQorI2VuZGlmIC8qIEFEQ19WRVJfVjVfVjkwICovCiAgICAgICB7Ci0gICAgICAgIExMX0FEQ19TZXRPZmZzZXQoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMiwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwsIExMX0FEQ19PRkZTRVRfU0lHTkVEX1NBVFVSQVRJT05fRElTQUJMRSk7Ci0gICAgICB9Ci0gICAgICBpZihfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMykpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCi0gICAgICB7Ci0gICAgICAgIExMX0FEQ19TZXRPZmZzZXQoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwsIExMX0FEQ19PRkZTRVRfU0lHTkVEX1NBVFVSQVRJT05fRElTQUJMRSk7Ci0gICAgICB9Ci0gICAgICBpZihfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCkpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCi0gICAgICB7Ci0gICAgICAgIExMX0FEQ19TZXRPZmZzZXQoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCwgc0NvbmZpZ0luamVjdGVkLT5JbmplY3RlZENoYW5uZWwsIExMX0FEQ19PRkZTRVRfU0lHTkVEX1NBVFVSQVRJT05fRElTQUJMRSk7CisgICAgICAgIC8qIFNjYW4gZWFjaCBvZmZzZXQgcmVnaXN0ZXIgdG8gY2hlY2sgaWYgdGhlIHNlbGVjdGVkIGNoYW5uZWwgaXMgdGFyZ2V0ZWQuICovCisgICAgICAgIC8qIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSBjb3JyZXNwb25kaW5nIG9mZnNldCBudW1iZXIgaXMgZGlzYWJsZWQuICAgICAgICovCisgICAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMSkpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCisgICAgICAgIHsKKyAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0KGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzEsIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsLCBMTF9BRENfT0ZGU0VUX1NJR05FRF9TQVRVUkFUSU9OX0RJU0FCTEUpOworICAgICAgICB9CisgICAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMikpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCisgICAgICAgIHsKKyAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0KGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzIsIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsLCBMTF9BRENfT0ZGU0VUX1NJR05FRF9TQVRVUkFUSU9OX0RJU0FCTEUpOworICAgICAgICB9CisgICAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfMykpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCisgICAgICAgIHsKKyAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0KGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzQsIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsLCBMTF9BRENfT0ZGU0VUX1NJR05FRF9TQVRVUkFUSU9OX0RJU0FCTEUpOworICAgICAgICB9CisgICAgICAgIGlmIChfX0xMX0FEQ19DSEFOTkVMX1RPX0RFQ0lNQUxfTkIoTExfQURDX0dldE9mZnNldENoYW5uZWwoaGFkYy0+SW5zdGFuY2UsIExMX0FEQ19PRkZTRVRfNCkpID09IF9fTExfQURDX0NIQU5ORUxfVE9fREVDSU1BTF9OQihzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCisgICAgICAgIHsKKyAgICAgICAgICBMTF9BRENfU2V0T2Zmc2V0KGhhZGMtPkluc3RhbmNlLCBMTF9BRENfT0ZGU0VUXzQsIHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsLCBMTF9BRENfT0ZGU0VUX1NJR05FRF9TQVRVUkFUSU9OX0RJU0FCTEUpOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCkBAIC0yMTQxLDcgKzIyMTIsNyBAQAogICAgIC8qIE5vdGU6IHRoZXNlIGludGVybmFsIG1lYXN1cmVtZW50IHBhdGhzIGNhbiBiZSBkaXNhYmxlZCB1c2luZyAgICAgICAgICAgKi8KICAgICAvKiBIQUxfQURDX0RlSW5pdCgpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICBpZihfX0xMX0FEQ19JU19DSEFOTkVMX0lOVEVSTkFMKHNDb25maWdJbmplY3RlZC0+SW5qZWN0ZWRDaGFubmVsKSkKKyAgICBpZiAoX19MTF9BRENfSVNfQ0hBTk5FTF9JTlRFUk5BTChzQ29uZmlnSW5qZWN0ZWQtPkluamVjdGVkQ2hhbm5lbCkpCiAgICAgewogICAgICAgLyogQ29uZmlndXJhdGlvbiBvZiBjb21tb24gQURDIHBhcmFtZXRlcnMgKGNvbnRpbnVhdGlvbikgICAgICAgICAgICAgICAgKi8KICAgICAgIC8qIFNvZnR3YXJlIGlzIGFsbG93ZWQgdG8gY2hhbmdlIGNvbW1vbiBwYXJhbWV0ZXJzIG9ubHkgd2hlbiBhbGwgQURDcyAgICovCkBAIC0yMTY0LDcgKzIyMzUsNyBAQAogICAgICAgICAgICAgLyogICAgICAgQ1BVIHByb2Nlc3NpbmcgY3ljbGVzLCBzY2FsaW5nIGluIHVzIHNwbGl0IHRvIG5vdCAgICAgICAgICAqLwogICAgICAgICAgICAgLyogICAgICAgZXhjZWVkIDMyIGJpdHMgcmVnaXN0ZXIgY2FwYWNpdHkgYW5kIGhhbmRsZSBsb3cgZnJlcXVlbmN5LiAqLwogICAgICAgICAgICAgd2FpdF9sb29wX2luZGV4ID0gKChMTF9BRENfREVMQVlfVEVNUFNFTlNPUl9TVEFCX1VTIC8gMTBVTCkgKiAoU3lzdGVtQ29yZUNsb2NrIC8gKDEwMDAwMFVMICogMlVMKSkpOwotICAgICAgICAgICAgd2hpbGUod2FpdF9sb29wX2luZGV4ICE9IDBVTCkKKyAgICAgICAgICAgIHdoaWxlICh3YWl0X2xvb3BfaW5kZXggIT0gMFVMKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICB3YWl0X2xvb3BfaW5kZXgtLTsKICAgICAgICAgICAgIH0KQEAgLTIyNzQsNyArMjM0NSw3IEBACiAgICAgLyogdHJhbnNpdGlvbiBmcm9tIG11bHRpbW9kZSB0byBpbmRlcGVuZGVudCBtb2RlKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmIChtdWx0aW1vZGUtPk1vZGUgIT0gQURDX01PREVfSU5ERVBFTkRFTlQpCiAgICAgewotICAgIE1PRElGWV9SRUcodG1wQURDX0NvbW1vbi0+Q0NSLCBBRENfQ0NSX0RBTURGLCBtdWx0aW1vZGUtPkR1YWxNb2RlRGF0YSk7CisgICAgICBNT0RJRllfUkVHKHRtcEFEQ19Db21tb24tPkNDUiwgQURDX0NDUl9EQU1ERiwgbXVsdGltb2RlLT5EdWFsTW9kZURhdGEpOwogCiAgICAgICAvKiBQYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHVwZGF0ZWQgb25seSB3aGVuIEFEQyBpcyBkaXNhYmxlZDogICAgICAgICAgICAgICovCiAgICAgICAvKiAgLSBNdWx0aW1vZGUgbW9kZSBzZWxlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9jb3JkaWMuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2NvcmRpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YzE5YzEKLS0tIC9kZXYvbnVsbAorKysgYi9TcmMvc3RtMzJoN3h4X2hhbF9jb3JkaWMuYwpAQCAtMCwwICsxLDEzNTIgQEAKKy8qKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAZmlsZSAgICBzdG0zMmg3eHhfaGFsX2NvcmRpYy5jCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBDT1JESUMgSEFMIG1vZHVsZSBkcml2ZXIuCisgICogICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZworICAqICAgICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgQ09SRElDIHBlcmlwaGVyYWw6CisgICogICAgICAgICAgICsgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICAqICAgICAgICAgICArIFBlcmlwaGVyYWwgQ29udHJvbCBmdW5jdGlvbnMKKyAgKiAgICAgICAgICAgKyBDYWxsYmFjayBmdW5jdGlvbnMKKyAgKiAgICAgICAgICAgKyBJUlEgaGFuZGxlciBtYW5hZ2VtZW50CisgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMKKyAgKgorICAqICBAdmVyYmF0aW0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBbLi5dCisgICAgICBUaGUgQ09SRElDIEhBTCBkcml2ZXIgY2FuIGJlIHVzZWQgYXMgZm9sbG93czoKKworICAgICAgKCMpIEluaXRpYWxpemUgdGhlIENPUkRJQyBsb3cgbGV2ZWwgcmVzb3VyY2VzIGJ5IGltcGxlbWVudGluZyB0aGUgSEFMX0NPUkRJQ19Nc3BJbml0KCk6CisgICAgICAgICAoKyspIEVuYWJsZSB0aGUgQ09SRElDIGludGVyZmFjZSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfQ09SRElDX0NMS19FTkFCTEUoKQorICAgICAgICAgKCsrKSBJbiBjYXNlIG9mIHVzaW5nIGludGVycnVwdHMgKGUuZy4gSEFMX0NPUkRJQ19DYWxjdWxhdGVfSVQoKSkKKyAgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIENPUkRJQyBpbnRlcnJ1cHQgcHJpb3JpdHkgdXNpbmcgSEFMX05WSUNfU2V0UHJpb3JpdHkoKQorICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgQ09SRElDIElSUSBoYW5kbGVyIHVzaW5nIEhBTF9OVklDX0VuYWJsZUlSUSgpCisgICAgICAgICAgICAgKCsrKykgSW4gQ09SRElDIElSUSBoYW5kbGVyLCBjYWxsIEhBTF9DT1JESUNfSVJRSGFuZGxlcigpCisgICAgICAgICAoKyspIEluIGNhc2Ugb2YgdXNpbmcgRE1BIHRvIGNvbnRyb2wgZGF0YSB0cmFuc2ZlciAoZS5nLiBIQUxfQ09SRElDX0NhbGN1bGF0ZV9ETUEoKSkKKyAgICAgICAgICAgICAoKysrKSBFbmFibGUgdGhlIERNQTIgaW50ZXJmYWNlIGNsb2NrIHVzaW5nCisgICAgICAgICAgICAgICAgIF9fSEFMX1JDQ19ETUEyX0NMS19FTkFCTEUoKQorICAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSBhbmQgZW5hYmxlIHR3byBETUEgY2hhbm5lbHMgb25lIGZvciBtYW5hZ2luZyBkYXRhIHRyYW5zZmVyIGZyb20KKyAgICAgICAgICAgICAgICAgbWVtb3J5IHRvIHBlcmlwaGVyYWwgKGlucHV0IGNoYW5uZWwpIGFuZCBhbm90aGVyIGNoYW5uZWwgZm9yIG1hbmFnaW5nIGRhdGEKKyAgICAgICAgICAgICAgICAgdHJhbnNmZXIgZnJvbSBwZXJpcGhlcmFsIHRvIG1lbW9yeSAob3V0cHV0IGNoYW5uZWwpCisgICAgICAgICAgICAgKCsrKykgQXNzb2NpYXRlIHRoZSBpbml0aWFsaXplZCBETUEgaGFuZGxlIHRvIHRoZSBDT1JESUMgRE1BIGhhbmRsZQorICAgICAgICAgICAgICAgICB1c2luZyBfX0hBTF9MSU5LRE1BKCkKKyAgICAgICAgICAgICAoKysrKSBDb25maWd1cmUgdGhlIHByaW9yaXR5IGFuZCBlbmFibGUgdGhlIE5WSUMgZm9yIHRoZSB0cmFuc2ZlciBjb21wbGV0ZQorICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgb24gdGhlIHR3byBETUEgY2hhbm5lbHMuCisgICAgICAgICAgICAgICAgIFJlc29ydCB0byBIQUxfTlZJQ19TZXRQcmlvcml0eSgpIGFuZCBIQUxfTlZJQ19FbmFibGVJUlEoKQorCisgICAgICAoIykgSW5pdGlhbGl6ZSB0aGUgQ09SRElDIEhBTCB1c2luZyBIQUxfQ09SRElDX0luaXQoKS4gVGhpcyBmdW5jdGlvbgorICAgICAgICAgKCsrKSByZXNvcnRzIHRvIEhBTF9DT1JESUNfTXNwSW5pdCgpIGZvciBsb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb24sCisKKyAgICAgICgjKSBDb25maWd1cmUgQ09SRElDIHByb2Nlc3NpbmcgKGNhbGN1bGF0aW9uKSB1c2luZyBIQUxfQ09SRElDX0NvbmZpZ3VyZSgpLgorICAgICAgICAgIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlczoKKyAgICAgICAgICgrKykgUHJvY2Vzc2luZyBmdW5jdGlvbnM6IENvc2luZSwgU2luZSwgUGhhc2UsIE1vZHVsdXMsIEFyY3RhbmdlbnQsCisgICAgICAgICAgICAgIEh5cGVyYm9saWMgY29zaW5lLCBIeXBlcmJvbGljIHNpbmUsIEh5cGVyYm9saWMgYXJjdGFuZ2VudCwKKyAgICAgICAgICAgICAgTmF0dXJhbCBsb2csIFNxdWFyZSByb290CisgICAgICAgICAoKyspIFNjYWxpbmcgZmFjdG9yOiAxIHRvIDJleHAoLTcpCisgICAgICAgICAoKyspIFdpZHRoIG9mIGlucHV0IGRhdGE6IDMyIGJpdHMgaW5wdXQgZGF0YSBzaXplIChRMS4zMSBmb3JtYXQpIG9yIDE2IGJpdHMKKyAgICAgICAgICAgICAgaW5wdXQgZGF0YSBzaXplIChRMS4xNSBmb3JtYXQpCisgICAgICAgICAoKyspIFdpZHRoIG9mIG91dHB1dCBkYXRhOiAzMiBiaXRzIG91dHB1dCBkYXRhIHNpemUgKFExLjMxIGZvcm1hdCkgb3IgMTYgYml0cworICAgICAgICAgICAgICBvdXRwdXQgZGF0YSBzaXplIChRMS4xNSBmb3JtYXQpCisgICAgICAgICAoKyspIE51bWJlciBvZiAzMi1iaXQgd3JpdGUgZXhwZWN0ZWQgZm9yIG9uZSBjYWxjdWxhdGlvbjogT25lIDMyLWJpdHMgd3JpdGUKKyAgICAgICAgICAgICAgb3IgVHdvIDMyLWJpdCB3cml0ZQorICAgICAgICAgKCsrKSBOdW1iZXIgb2YgMzItYml0IHJlYWQgZXhwZWN0ZWQgYWZ0ZXIgb25lIGNhbGN1bGF0aW9uOiBPbmUgMzItYml0cyByZWFkCisgICAgICAgICAgICAgIG9yIFR3byAzMi1iaXQgcmVhZAorICAgICAgICAgKCsrKSBQcmVjaXNpb246IDEgdG8gMTUgY3ljbGVzIGZvciBjYWxjdWxhdGlvbiAodGhlIG1vcmUgY3ljbGVzLCB0aGUgYmV0dGVyIHByZWNpc2lvbikKKworICAgICAgKCMpIEZvdXIgcHJvY2Vzc2luZyAoY2FsY3VsYXRpb24pIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlOgorICAgICAgICAgKCsrKSBQb2xsaW5nIG1vZGU6IHByb2Nlc3NpbmcgQVBJIGlzIGJsb2NraW5nIGZ1bmN0aW9uCisgICAgICAgICAgICAgIGkuZS4gaXQgcHJvY2Vzc2VzIHRoZSBkYXRhIGFuZCB3YWl0IHRpbGwgdGhlIHByb2Nlc3NpbmcgaXMgZmluaXNoZWQKKyAgICAgICAgICAgICAgQVBJIGlzIEhBTF9DT1JESUNfQ2FsY3VsYXRlCisgICAgICAgICAoKyspIFBvbGxpbmcgWmVyby1vdmVyaGVhZCBtb2RlOiBwcm9jZXNzaW5nIEFQSSBpcyBibG9ja2luZyBmdW5jdGlvbgorICAgICAgICAgICAgICBpLmUuIGl0IHByb2Nlc3NlcyB0aGUgZGF0YSBhbmQgd2FpdCB0aWxsIHRoZSBwcm9jZXNzaW5nIGlzIGZpbmlzaGVkCisgICAgICAgICAgICAgIEEgYml0IGZhc3RlciB0aGFuIHN0YW5kYXJkIHBvbGxpbmcgbW9kZSwgYnV0IGJsb2NraW5nIGFsc28gQUhCIGJ1cworICAgICAgICAgICAgICBBUEkgaXMgSEFMX0NPUkRJQ19DYWxjdWxhdGVaTworICAgICAgICAgKCsrKSBJbnRlcnJ1cHQgbW9kZTogcHJvY2Vzc2luZyBBUEkgaXMgbm90IGJsb2NraW5nIGZ1bmN0aW9ucworICAgICAgICAgICAgICBpLmUuIGl0IHByb2Nlc3NlcyB0aGUgZGF0YSB1bmRlciBpbnRlcnJ1cHQKKyAgICAgICAgICAgICAgQVBJIGlzIEhBTF9DT1JESUNfQ2FsY3VsYXRlX0lUCisgICAgICAgICAoKyspIERNQSBtb2RlOiBwcm9jZXNzaW5nIEFQSSBpcyBub3QgYmxvY2tpbmcgZnVuY3Rpb25zIGFuZCB0aGUgQ1BVIGlzCisgICAgICAgICAgICAgIG5vdCB1c2VkIGZvciBkYXRhIHRyYW5zZmVyLAorICAgICAgICAgICAgICBpLmUuIHRoZSBkYXRhIHRyYW5zZmVyIGlzIGVuc3VyZWQgYnkgRE1BCisgICAgICAgICAgICAgIEFQSSBpcyBIQUxfQ09SRElDX0NhbGN1bGF0ZV9ETUEKKworICAgICAgKCMpIENhbGwgSEFMX0NPUkRJQ19EZUluaXQoKSB0byBkZS1pbml0aWFsaXplIHRoZSBDT1JESUMgcGVyaXBoZXJhbC4gVGhpcyBmdW5jdGlvbgorICAgICAgICAgKCsrKSByZXNvcnRzIHRvIEhBTF9DT1JESUNfTXNwRGVJbml0KCkgZm9yIGxvdy1sZXZlbCBkZS1pbml0aWFsaXphdGlvbiwKKworICAqKiogQ2FsbGJhY2sgcmVnaXN0cmF0aW9uICoqKgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBUaGUgY29tcGlsYXRpb24gZGVmaW5lICBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQorICBhbGxvd3MgdGhlIHVzZXIgdG8gY29uZmlndXJlIGR5bmFtaWNhbGx5IHRoZSBkcml2ZXIgY2FsbGJhY2tzLgorICBVc2UgRnVuY3Rpb24gQHJlZiBIQUxfQ09SRElDX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhbiBpbnRlcnJ1cHQgY2FsbGJhY2suCisKKyAgRnVuY3Rpb24gQHJlZiBIQUxfQ09SRElDX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgICAgICA6IEVycm9yIENhbGxiYWNrLgorICAgICgrKSBDYWxjdWxhdGVDcGx0Q2FsbGJhY2sgICAgIDogQ2FsY3VsYXRlIGNvbXBsZXRlIENhbGxiYWNrLgorICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICAgIDogQ09SRElDIE1zcEluaXQuCisgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgOiBDT1JESUMgTXNwRGVJbml0LgorICBUaGlzIGZ1bmN0aW9uIHRha2VzIGFzIHBhcmFtZXRlcnMgdGhlIEhBTCBwZXJpcGhlcmFsIGhhbmRsZSwgdGhlIENhbGxiYWNrIElECisgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCisKKyAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX0NPUkRJQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgIHdlYWsgZnVuY3Rpb24uCisgIEByZWYgSEFMX0NPUkRJQ19VblJlZ2lzdGVyQ2FsbGJhY2sgdGFrZXMgYXMgcGFyYW1ldGVycyB0aGUgSEFMIHBlcmlwaGVyYWwgaGFuZGxlLAorICBhbmQgdGhlIENhbGxiYWNrIElELgorICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgICAgIDogRXJyb3IgQ2FsbGJhY2suCisgICAgKCspIENhbGN1bGF0ZUNwbHRDYWxsYmFjayAgICAgOiBDYWxjdWxhdGUgY29tcGxldGUgQ2FsbGJhY2suCisgICAgKCspIE1zcEluaXRDYWxsYmFjayAgICAgICAgICAgOiBDT1JESUMgTXNwSW5pdC4KKyAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICA6IENPUkRJQyBNc3BEZUluaXQuCisKKyAgQnkgZGVmYXVsdCwgYWZ0ZXIgdGhlIEhBTF9DT1JESUNfSW5pdCgpIGFuZCB3aGVuIHRoZSBzdGF0ZSBpcyBIQUxfQ09SRElDX1NUQVRFX1JFU0VULAorICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayBmdW5jdGlvbnM6CisgIGV4YW1wbGVzIEByZWYgSEFMX0NPUkRJQ19FcnJvckNhbGxiYWNrKCksIEByZWYgSEFMX0NPUkRJQ19DYWxjdWxhdGVDcGx0Q2FsbGJhY2soKS4KKyAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUKKyAgcmVzZXQgdG8gdGhlIGxlZ2FjeSB3ZWFrIGZ1bmN0aW9uIGluIHRoZSBIQUxfQ09SRElDX0luaXQoKS8gQHJlZiBIQUxfQ09SRElDX0RlSW5pdCgpIG9ubHkgd2hlbgorICB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICBpZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEhBTF9DT1JESUNfSW5pdCgpLyBAcmVmIEhBTF9DT1JESUNfRGVJbml0KCkKKyAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKQorCisgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0NPUkRJQ19TVEFURV9SRUFEWSBzdGF0ZSBvbmx5LgorICBFeGNlcHRpb24gZG9uZSBNc3BJbml0L01zcERlSW5pdCB0aGF0IGNhbiBiZSByZWdpc3RlcmVkL3VucmVnaXN0ZXJlZAorICBpbiBIQUxfQ09SRElDX1NUQVRFX1JFQURZIG9yIEhBTF9DT1JESUNfU1RBVEVfUkVTRVQgc3RhdGUsCisgIHRodXMgcmVnaXN0ZXJlZCAodXNlcikgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCisgIEluIHRoYXQgY2FzZSBmaXJzdCByZWdpc3RlciB0aGUgTXNwSW5pdC9Nc3BEZUluaXQgdXNlciBjYWxsYmFja3MKKyAgdXNpbmcgQHJlZiBIQUxfQ09SRElDX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9DT1JESUNfRGVJbml0KCkKKyAgb3IgSEFMX0NPUkRJQ19Jbml0KCkgZnVuY3Rpb24uCisKKyAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgorICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgYW5kIGFsbCBjYWxsYmFja3MKKyAgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIGZ1bmN0aW9ucy4KKworICBAZW5kdmVyYmF0aW0KKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKKyAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovCisKKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaW5jbHVkZSAic3RtMzJoN3h4X2hhbC5oIgorCisjaWYgZGVmaW5lZChDT1JESUMpCisjaWZkZWYgSEFMX0NPUkRJQ19NT0RVTEVfRU5BQkxFRAorCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJIN3h4X0hBTF9Ecml2ZXIKKyAgKiBAeworICAqLworCisvKiogQGRlZmdyb3VwIENPUkRJQyBDT1JESUMKKyAgKiBAYnJpZWYgQ09SRElDIEhBTCBkcml2ZXIgbW9kdWxlcy4KKyAgKiBAeworICAqLworCisvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfUHJpdmF0ZV9GdW5jdGlvbnMgQ09SRElDIFByaXZhdGUgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KK3N0YXRpYyB2b2lkIENPUkRJQ19Xcml0ZUluRGF0YUluY3JlbWVudFB0cihDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYywgaW50MzJfdCAqKnBwSW5CdWZmKTsKK3N0YXRpYyB2b2lkIENPUkRJQ19SZWFkT3V0RGF0YUluY3JlbWVudFB0cihDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYywgaW50MzJfdCAqKnBwT3V0QnVmZik7CitzdGF0aWMgdm9pZCBDT1JESUNfRE1BSW5DcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkIENPUkRJQ19ETUFPdXRDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkIENPUkRJQ19ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CisvKioKKyAgKiBAfQorICAqLworCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiogQGRlZmdyb3VwIENPUkRJQ19FeHBvcnRlZF9GdW5jdGlvbnMgQ09SRElDIEV4cG9ydGVkIEZ1bmN0aW9ucworICAqIEB7CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEgSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICAqICBAYnJpZWYgICAgSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zLgorICAqCitAdmVyYmF0aW0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICMjIyMjIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgIyMjIyMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXSAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0bzoKKyAgICAgICgrKSBJbml0aWFsaXplIHRoZSBDT1JESUMgcGVyaXBoZXJhbCBhbmQgdGhlIGFzc29jaWF0ZWQgaGFuZGxlCisgICAgICAoKykgRGVJbml0aWFsaXplIHRoZSBDT1JESUMgcGVyaXBoZXJhbAorICAgICAgKCspIEluaXRpYWxpemUgdGhlIENPUkRJQyBNU1AgKE1DVSBTcGVjaWZpYyBQYWNrYWdlKQorICAgICAgKCspIERlLUluaXRpYWxpemUgdGhlIENPUkRJQyBNU1AKKworICAgIFsuLl0KKworQGVuZHZlcmJhdGltCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBDT1JESUMgcGVyaXBoZXJhbCBhbmQgdGhlIGFzc29jaWF0ZWQgaGFuZGxlLgorICAqIEBwYXJhbSAgaGNvcmRpYyBwb2ludGVyIHRvIGEgQ09SRElDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NPUkRJQ19Jbml0KENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKQoreworICAvKiBDaGVjayB0aGUgQ09SRElDIGhhbmRsZSBhbGxvY2F0aW9uICovCisgIGlmIChoY29yZGljID09IE5VTEwpCisgIHsKKyAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIHRoZSBpbnN0YW5jZSAqLworICBhc3NlcnRfcGFyYW0oSVNfQ09SRElDX0FMTF9JTlNUQU5DRShoY29yZGljLT5JbnN0YW5jZSkpOworCisjaWYgVVNFX0hBTF9DT1JESUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEKKyAgaWYgKGhjb3JkaWMtPlN0YXRlID09IEhBTF9DT1JESUNfU1RBVEVfUkVTRVQpCisgIHsKKyAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCisgICAgaGNvcmRpYy0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKKworICAgIC8qIFJlc2V0IGNhbGxiYWNrcyB0byBsZWdhY3kgZnVuY3Rpb25zICovCisgICAgaGNvcmRpYy0+RXJyb3JDYWxsYmFjayAgICAgICAgID0gSEFMX0NPUkRJQ19FcnJvckNhbGxiYWNrOyAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIEVycm9yQ2FsbGJhY2sgKi8KKyAgICBoY29yZGljLT5DYWxjdWxhdGVDcGx0Q2FsbGJhY2sgPSBIQUxfQ09SRElDX0NhbGN1bGF0ZUNwbHRDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsgQ2FsY3VsYXRlQ3BsdENhbGxiYWNrICovCisKKyAgICBpZiAoaGNvcmRpYy0+TXNwSW5pdENhbGxiYWNrID09IE5VTEwpCisgICAgeworICAgICAgaGNvcmRpYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0NPUkRJQ19Nc3BJbml0OyAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBNc3BJbml0ICovCisgICAgfQorCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCisgICAgaGNvcmRpYy0+TXNwSW5pdENhbGxiYWNrKGhjb3JkaWMpOworICB9CisjZWxzZQorICBpZiAoaGNvcmRpYy0+U3RhdGUgPT0gSEFMX0NPUkRJQ19TVEFURV9SRVNFVCkKKyAgeworICAgIC8qIEFsbG9jYXRlIGxvY2sgcmVzb3VyY2UgYW5kIGluaXRpYWxpemUgaXQgKi8KKyAgICBoY29yZGljLT5Mb2NrID0gSEFMX1VOTE9DS0VEOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCisgICAgSEFMX0NPUkRJQ19Nc3BJbml0KGhjb3JkaWMpOworICB9CisjZW5kaWYgLyogKFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUykgKi8KKworICAvKiBTZXQgQ09SRElDIGVycm9yIGNvZGUgdG8gbm9uZSAqLworICBoY29yZGljLT5FcnJvckNvZGUgPSBIQUxfQ09SRElDX0VSUk9SX05PTkU7CisKKyAgLyogUmVzZXQgcEluQnVmZiBhbmQgcE91dEJ1ZmYgKi8KKyAgaGNvcmRpYy0+cEluQnVmZiA9IE5VTEw7CisgIGhjb3JkaWMtPnBPdXRCdWZmID0gTlVMTDsKKworICAvKiBSZXNldCBOYkNhbGNUb09yZGVyIGFuZCBOYkNhbGNUb0dldCAqLworICBoY29yZGljLT5OYkNhbGNUb09yZGVyID0gMFU7CisgIGhjb3JkaWMtPk5iQ2FsY1RvR2V0ID0gMFU7CisKKyAgLyogUmVzZXQgRE1BRGlyZWN0aW9uICovCisgIGhjb3JkaWMtPkRNQURpcmVjdGlvbiA9IENPUkRJQ19ETUFfRElSX05PTkU7CisKKyAgLyogQ2hhbmdlIENPUkRJQyBwZXJpcGhlcmFsIHN0YXRlICovCisgIGhjb3JkaWMtPlN0YXRlID0gSEFMX0NPUkRJQ19TVEFURV9SRUFEWTsKKworICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgRGVJbml0aWFsaXplIHRoZSBDT1JESUMgcGVyaXBoZXJhbC4KKyAgKiBAcGFyYW0gIGhjb3JkaWMgcG9pbnRlciB0byBhIENPUkRJQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DT1JESUNfRGVJbml0KENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKQoreworICAvKiBDaGVjayB0aGUgQ09SRElDIGhhbmRsZSBhbGxvY2F0aW9uICovCisgIGlmIChoY29yZGljID09IE5VTEwpCisgIHsKKyAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19DT1JESUNfQUxMX0lOU1RBTkNFKGhjb3JkaWMtPkluc3RhbmNlKSk7CisKKyAgLyogQ2hhbmdlIENPUkRJQyBwZXJpcGhlcmFsIHN0YXRlICovCisgIGhjb3JkaWMtPlN0YXRlID0gSEFMX0NPUkRJQ19TVEFURV9CVVNZOworCisjaWYgVVNFX0hBTF9DT1JESUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEKKyAgaWYgKGhjb3JkaWMtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCisgIHsKKyAgICBoY29yZGljLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9DT1JESUNfTXNwRGVJbml0OworICB9CisKKyAgLyogRGUtSW5pdGlhbGl6ZSB0aGUgbG93IGxldmVsIGhhcmR3YXJlICovCisgIGhjb3JkaWMtPk1zcERlSW5pdENhbGxiYWNrKGhjb3JkaWMpOworI2Vsc2UKKyAgLyogRGUtSW5pdGlhbGl6ZSB0aGUgbG93IGxldmVsIGhhcmR3YXJlOiBDTE9DSywgTlZJQywgRE1BICovCisgIEhBTF9DT1JESUNfTXNwRGVJbml0KGhjb3JkaWMpOworI2VuZGlmIC8qIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisgIC8qIFNldCBDT1JESUMgZXJyb3IgY29kZSB0byBub25lICovCisgIGhjb3JkaWMtPkVycm9yQ29kZSA9IEhBTF9DT1JESUNfRVJST1JfTk9ORTsKKworICAvKiBSZXNldCBwSW5CdWZmIGFuZCBwT3V0QnVmZiAqLworICBoY29yZGljLT5wSW5CdWZmID0gTlVMTDsKKyAgaGNvcmRpYy0+cE91dEJ1ZmYgPSBOVUxMOworCisgIC8qIFJlc2V0IE5iQ2FsY1RvT3JkZXIgYW5kIE5iQ2FsY1RvR2V0ICovCisgIGhjb3JkaWMtPk5iQ2FsY1RvT3JkZXIgPSAwVTsKKyAgaGNvcmRpYy0+TmJDYWxjVG9HZXQgPSAwVTsKKworICAvKiBSZXNldCBETUFEaXJlY3Rpb24gKi8KKyAgaGNvcmRpYy0+RE1BRGlyZWN0aW9uID0gQ09SRElDX0RNQV9ESVJfTk9ORTsKKworICAvKiBDaGFuZ2UgQ09SRElDIHBlcmlwaGVyYWwgc3RhdGUgKi8KKyAgaGNvcmRpYy0+U3RhdGUgPSBIQUxfQ09SRElDX1NUQVRFX1JFU0VUOworCisgIC8qIFJlc2V0IExvY2sgKi8KKyAgaGNvcmRpYy0+TG9jayA9IEhBTF9VTkxPQ0tFRDsKKworICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgSW5pdGlhbGl6ZSB0aGUgQ09SRElDIE1TUC4KKyAgKiBAcGFyYW0gIGhjb3JkaWMgQ09SRElDIGhhbmRsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0NPUkRJQ19Nc3BJbml0KENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChoY29yZGljKTsKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0NPUkRJQ19Nc3BJbml0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgICAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIERlSW5pdGlhbGl6ZSB0aGUgQ09SRElDIE1TUC4KKyAgKiBAcGFyYW0gIGhjb3JkaWMgQ09SRElDIGhhbmRsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0NPUkRJQ19Nc3BEZUluaXQoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMpCit7CisgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgVU5VU0VEKGhjb3JkaWMpOworCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfQ09SRElDX01zcERlSW5pdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAgKi8KK30KKworI2lmIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxCisvKioKKyAgKiBAYnJpZWYgIFJlZ2lzdGVyIGEgQ09SRElDIENhbGxCYWNrLgorICAqICAgICAgICAgVG8gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2suCisgICogQHBhcmFtICBoY29yZGljIHBvaW50ZXIgdG8gYSBDT1JESUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENPUkRJQyBtb2R1bGUKKyAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHJlZ2lzdGVyZWQKKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ09SRElDX0VSUk9SX0NCX0lEIGVycm9yIENhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ09SRElDX0NBTENVTEFURV9DUExUX0NCX0lEIGNhbGN1bGF0ZSBjb21wbGV0ZSBDYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NPUkRJQ19NU1BJTklUX0NCX0lEIE1zcEluaXQgY2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DT1JESUNfTVNQREVJTklUX0NCX0lEIE1zcERlSW5pdCBjYWxsYmFjayBJRAorICAqIEBwYXJhbSAgcENhbGxiYWNrIHBvaW50ZXIgdG8gdGhlIENhbGxiYWNrIGZ1bmN0aW9uCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ09SRElDX1JlZ2lzdGVyQ2FsbGJhY2soQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMsIEhBTF9DT1JESUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwgdm9pZCAoKiBwQ2FsbGJhY2spKENPUkRJQ19IYW5kbGVUeXBlRGVmICpfaGNvcmRpYykpCit7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKworICBpZiAocENhbGxiYWNrID09IE5VTEwpCisgIHsKKyAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICBoY29yZGljLT5FcnJvckNvZGUgfD0gSEFMX0NPUkRJQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworCisgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICBpZiAoaGNvcmRpYy0+U3RhdGUgPT0gSEFMX0NPUkRJQ19TVEFURV9SRUFEWSkKKyAgeworICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKKyAgICB7CisgICAgICBjYXNlIEhBTF9DT1JESUNfRVJST1JfQ0JfSUQgOgorICAgICAgICBoY29yZGljLT5FcnJvckNhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfQ09SRElDX0NBTENVTEFURV9DUExUX0NCX0lEIDoKKyAgICAgICAgaGNvcmRpYy0+Q2FsY3VsYXRlQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfQ09SRElDX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoY29yZGljLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9DT1JESUNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGNvcmRpYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlIGlmIChoY29yZGljLT5TdGF0ZSA9PSBIQUxfQ09SRElDX1NUQVRFX1JFU0VUKQorICB7CisgICAgc3dpdGNoIChDYWxsYmFja0lEKQorICAgIHsKKyAgICAgIGNhc2UgSEFMX0NPUkRJQ19NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGNvcmRpYy0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfQ09SRElDX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhjb3JkaWMtPk1zcERlSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBoY29yZGljLT5FcnJvckNvZGUgfD0gSEFMX0NPUkRJQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworCisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgaGNvcmRpYy0+RXJyb3JDb2RlIHw9IEhBTF9DT1JESUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKworICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgIH0KKworICByZXR1cm4gc3RhdHVzOworfQorI2VuZGlmIC8qIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisjaWYgVVNFX0hBTF9DT1JESUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEKKy8qKgorICAqIEBicmllZiAgVW5yZWdpc3RlciBhIENPUkRJQyBDYWxsQmFjay4KKyAgKiAgICAgICAgIENPUkRJQyBjYWxsYmFjayBpcyByZWRpcmVjdGVkIHRvIHRoZSB3ZWFrIHByZWRlZmluZWQgY2FsbGJhY2suCisgICogQHBhcmFtICBoY29yZGljIHBvaW50ZXIgdG8gYSBDT1JESUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENPUkRJQyBtb2R1bGUKKyAgKiBAcGFyYW0gIENhbGxiYWNrSUQgSUQgb2YgdGhlIGNhbGxiYWNrIHRvIGJlIHVucmVnaXN0ZXJlZAorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DT1JESUNfRVJST1JfQ0JfSUQgZXJyb3IgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9DT1JESUNfQ0FMQ1VMQVRFX0NQTFRfQ0JfSUQgY2FsY3VsYXRlIGNvbXBsZXRlIENhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfQ09SRElDX01TUElOSVRfQ0JfSUQgTXNwSW5pdCBjYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0NPUkRJQ19NU1BERUlOSVRfQ0JfSUQgTXNwRGVJbml0IGNhbGxiYWNrIElECisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ09SRElDX1VuUmVnaXN0ZXJDYWxsYmFjayhDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYywgSEFMX0NPUkRJQ19DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lEKQoreworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXMgPSBIQUxfT0s7CisKKyAgaWYgKGhjb3JkaWMtPlN0YXRlID09IEhBTF9DT1JESUNfU1RBVEVfUkVBRFkpCisgIHsKKyAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCisgICAgeworICAgICAgY2FzZSBIQUxfQ09SRElDX0VSUk9SX0NCX0lEIDoKKyAgICAgICAgaGNvcmRpYy0+RXJyb3JDYWxsYmFjayA9IEhBTF9DT1JESUNfRXJyb3JDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0NPUkRJQ19DQUxDVUxBVEVfQ1BMVF9DQl9JRCA6CisgICAgICAgIGhjb3JkaWMtPkNhbGN1bGF0ZUNwbHRDYWxsYmFjayA9IEhBTF9DT1JESUNfQ2FsY3VsYXRlQ3BsdENhbGxiYWNrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfQ09SRElDX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoY29yZGljLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfQ09SRElDX01zcEluaXQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9DT1JESUNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGNvcmRpYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfQ09SRElDX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGNvcmRpYy0+RXJyb3JDb2RlIHw9IEhBTF9DT1JESUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgaWYgKGhjb3JkaWMtPlN0YXRlID09IEhBTF9DT1JESUNfU1RBVEVfUkVTRVQpCisgIHsKKyAgICBzd2l0Y2ggKENhbGxiYWNrSUQpCisgICAgeworICAgICAgY2FzZSBIQUxfQ09SRElDX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoY29yZGljLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfQ09SRElDX01zcEluaXQ7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9DT1JESUNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGNvcmRpYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfQ09SRElDX01zcERlSW5pdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGNvcmRpYy0+RXJyb3JDb2RlIHw9IEhBTF9DT1JESUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisKKyAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICB9CisKKyAgcmV0dXJuIHN0YXR1czsKK30KKyNlbmRpZiAvKiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgKiAgQGJyaWVmICAgIENvbnRyb2wgZnVuY3Rpb25zLgorICoKK0B2ZXJiYXRpbQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zICMjIyMjCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFsuLl0gIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBmdW5jdGlvbnMgYWxsb3dpbmcgdG86CisgICAgICAoKykgQ29uZmlndXJlIHRoZSBDT1JESUMgcGVyaXBoZXJhbDogZnVuY3Rpb24sIHByZWNpc2lvbiwgc2NhbGluZyBmYWN0b3IsCisgICAgICAgICAgbnVtYmVyIG9mIGlucHV0IGRhdGEgYW5kIG91dHB1dCBkYXRhLCBzaXplIG9mIGlucHV0IGRhdGEgYW5kIG91dHB1dCBkYXRhLgorICAgICAgKCspIENhbGN1bGF0ZSBvdXRwdXQgZGF0YSBvZiBDT1JESUMgcHJvY2Vzc2luZyBvbiBpbnB1dCBkYXRlLCB1c2luZyB0aGUKKyAgICAgICAgICBleGlzdGluZyBDT1JESUMgY29uZmlndXJhdGlvbgorICAgIFsuLl0gIEZvdXIgcHJvY2Vzc2luZyBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgY2FsY3VsYXRpb246CisgICAgICAoKykgUG9sbGluZyBtb2RlCisgICAgICAoKykgUG9sbGluZyBtb2RlLCB3aXRoIFplcm8tT3ZlcmhlYWQgcmVnaXN0ZXIgYWNjZXNzCisgICAgICAoKykgSW50ZXJydXB0IG1vZGUKKyAgICAgICgrKSBETUEgbW9kZQorCitAZW5kdmVyYmF0aW0KKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgQ09SRElDIHByb2Nlc3NpbmcgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQKKyAgICAgICAgICAgIHBhcmFtZXRlcnMgaW4gdGhlIENPUkRJQ19Db25maWdUeXBlRGVmIHN0cnVjdHVyZS4KKyAgKiBAcGFyYW0gIGhjb3JkaWMgcG9pbnRlciB0byBhIENPUkRJQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ09SRElDIG1vZHVsZQorICAqIEBwYXJhbSAgc0NvbmZpZyBwb2ludGVyIHRvIGEgQ09SRElDX0NvbmZpZ1R5cGVEZWYgc3RydWN0dXJlIHRoYXQKKyAgKiAgICAgICAgIGNvbnRhaW5zIHRoZSBDT1JESUMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DT1JESUNfQ29uZmlndXJlKENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljLCBDT1JESUNfQ29uZmlnVHlwZURlZiAqc0NvbmZpZykKK3sKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19DT1JESUNfRlVOQ1RJT04oc0NvbmZpZy0+RnVuY3Rpb24pKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0NPUkRJQ19QUkVDSVNJT04oc0NvbmZpZy0+UHJlY2lzaW9uKSk7CisgIGFzc2VydF9wYXJhbShJU19DT1JESUNfU0NBTEUoc0NvbmZpZy0+U2NhbGUpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0NPUkRJQ19OQldSSVRFKHNDb25maWctPk5iV3JpdGUpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0NPUkRJQ19OQlJFQUQoc0NvbmZpZy0+TmJSZWFkKSk7CisgIGFzc2VydF9wYXJhbShJU19DT1JESUNfSU5TSVpFKHNDb25maWctPkluU2l6ZSkpOworICBhc3NlcnRfcGFyYW0oSVNfQ09SRElDX09VVFNJWkUoc0NvbmZpZy0+T3V0U2l6ZSkpOworCisgIC8qIENoZWNrIGhhbmRsZSBzdGF0ZSBpcyByZWFkeSAqLworICBpZiAoaGNvcmRpYy0+U3RhdGUgPT0gSEFMX0NPUkRJQ19TVEFURV9SRUFEWSkKKyAgeworICAgIC8qIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaW4gQ09SRElDIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyAgICBNT0RJRllfUkVHKGhjb3JkaWMtPkluc3RhbmNlLT5DU1IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgKENPUkRJQ19DU1JfRlVOQyB8IENPUkRJQ19DU1JfUFJFQ0lTSU9OIHwgQ09SRElDX0NTUl9TQ0FMRSB8ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgQ09SRElDX0NTUl9OQVJHUyB8IENPUkRJQ19DU1JfTlJFUyB8IENPUkRJQ19DU1JfQVJHU0laRSB8IENPUkRJQ19DU1JfUkVTU0laRSksIFwKKyAgICAgICAgICAgICAgIChzQ29uZmlnLT5GdW5jdGlvbiB8IHNDb25maWctPlByZWNpc2lvbiB8IHNDb25maWctPlNjYWxlIHwgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHNDb25maWctPk5iV3JpdGUgfCBzQ29uZmlnLT5OYlJlYWQgfCBzQ29uZmlnLT5JblNpemUgfCBzQ29uZmlnLT5PdXRTaXplKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogU2V0IENPUkRJQyBlcnJvciBjb2RlICovCisgICAgaGNvcmRpYy0+RXJyb3JDb2RlIHw9IEhBTF9DT1JESUNfRVJST1JfTk9UX1JFQURZOworCisgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgICogQGJyaWVmICBDYXJyeSBvdXQgZGF0YSBvZiBDT1JESUMgcHJvY2Vzc2luZyBpbiBwb2xsaW5nIG1vZGUsCisgICogICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGV4aXN0aW5nIENPUkRJQyBjb25maWd1cmF0aW9uLgorICAqIEBwYXJhbSAgaGNvcmRpYyBwb2ludGVyIHRvIGEgQ09SRElDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDT1JESUMgbW9kdWxlLgorICAqIEBwYXJhbSAgcEluQnVmZiBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIGlucHV0IGRhdGEgZm9yIENPUkRJQyBwcm9jZXNzaW5nLgorICAqIEBwYXJhbSAgcE91dEJ1ZmYgUG9pbnRlciB0byBidWZmZXIgd2hlcmUgb3V0cHV0IGRhdGEgb2YgQ09SRElDIHByb2Nlc3Npbmcgd2lsbCBiZSBzdG9yZWQuCisgICogQHBhcmFtICBOYkNhbGMgTnVtYmVyIG9mIENPUkRJQyBjYWxjdWxhdGlvbiB0byBwcm9jZXNzLgorICAqIEBwYXJhbSAgVGltZW91dCBTcGVjaWZ5IFRpbWVvdXQgdmFsdWUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DT1JESUNfQ2FsY3VsYXRlKENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljLCBpbnQzMl90ICpwSW5CdWZmLCBpbnQzMl90ICpwT3V0QnVmZiwgdWludDMyX3QgTmJDYWxjLCB1aW50MzJfdCBUaW1lb3V0KQoreworICB1aW50MzJfdCB0aWNrc3RhcnQ7CisgIHVpbnQzMl90IGluZGV4OworICBpbnQzMl90ICpwX3RtcF9pbl9idWZmID0gcEluQnVmZjsKKyAgaW50MzJfdCAqcF90bXBfb3V0X2J1ZmYgPSBwT3V0QnVmZjsKKworICAvKiBDaGVjayBwYXJhbWV0ZXJzIHNldHRpbmcgKi8KKyAgaWYgKChwSW5CdWZmID09IE5VTEwpIHx8IChwT3V0QnVmZiA9PSBOVUxMKSB8fCAoTmJDYWxjID09IDBVKSkKKyAgeworICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX1BBUkFNOworCisgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBDaGVjayBoYW5kbGUgc3RhdGUgaXMgcmVhZHkgKi8KKyAgaWYgKGhjb3JkaWMtPlN0YXRlID09IEhBTF9DT1JESUNfU1RBVEVfUkVBRFkpCisgIHsKKyAgICAvKiBSZXNldCBDT1JESUMgZXJyb3IgY29kZSAqLworICAgIGhjb3JkaWMtPkVycm9yQ29kZSA9IEhBTF9DT1JESUNfRVJST1JfTk9ORTsKKworICAgIC8qIENoYW5nZSB0aGUgQ09SRElDIHN0YXRlICovCisgICAgaGNvcmRpYy0+U3RhdGUgPSBIQUxfQ09SRElDX1NUQVRFX0JVU1k7CisKKyAgICAvKiBHZXQgdGljayAqLworICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisKKyAgICAvKiBXcml0ZSBvZiBpbnB1dCBkYXRhIGluIFdyaXRlIERhdGEgcmVnaXN0ZXIsIGFuZCBpbmNyZW1lbnQgaW5wdXQgYnVmZmVyIHBvaW50ZXIgKi8KKyAgICBDT1JESUNfV3JpdGVJbkRhdGFJbmNyZW1lbnRQdHIoaGNvcmRpYywgJnBfdG1wX2luX2J1ZmYpOworCisgICAgLyogQ2FsY3VsYXRpb24gaXMgc3RhcnRlZC4KKyAgICAgICBQcm92aWRlIG5leHQgc2V0IG9mIGlucHV0IGRhdGEsIHVudGlsIG51bWJlciBvZiBjYWxjdWxhdGlvbiBpcyBhY2hpZXZlZCAqLworICAgIGZvciAoaW5kZXggPSAoTmJDYWxjIC0gMVUpOyBpbmRleCA+IDBVOyBpbmRleC0tKQorICAgIHsKKyAgICAgIC8qIFdyaXRlIG9mIGlucHV0IGRhdGEgaW4gV3JpdGUgRGF0YSByZWdpc3RlciwgYW5kIGluY3JlbWVudCBpbnB1dCBidWZmZXIgcG9pbnRlciAqLworICAgICAgQ09SRElDX1dyaXRlSW5EYXRhSW5jcmVtZW50UHRyKGhjb3JkaWMsICZwX3RtcF9pbl9idWZmKTsKKworICAgICAgLyogV2FpdCBmb3IgUlJEWSBmbGFnIHRvIGJlIHJhaXNlZCAqLworICAgICAgZG8KKyAgICAgIHsKKyAgICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCisgICAgICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gVGltZW91dCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBTZXQgQ09SRElDIGVycm9yIGNvZGUgKi8KKyAgICAgICAgICAgIGhjb3JkaWMtPkVycm9yQ29kZSA9IEhBTF9DT1JESUNfRVJST1JfVElNRU9VVDsKKworICAgICAgICAgICAgLyogQ2hhbmdlIHRoZSBDT1JESUMgc3RhdGUgKi8KKyAgICAgICAgICAgIGhjb3JkaWMtPlN0YXRlID0gSEFMX0NPUkRJQ19TVEFURV9SRUFEWTsKKworICAgICAgICAgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICAgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHdoaWxlIChIQUxfSVNfQklUX0NMUihoY29yZGljLT5JbnN0YW5jZS0+Q1NSLCBDT1JESUNfQ1NSX1JSRFkpKTsKKworICAgICAgLyogUmVhZCBvdXRwdXQgZGF0YSBmcm9tIFJlYWQgRGF0YSByZWdpc3RlciwgYW5kIGluY3JlbWVudCBvdXRwdXQgYnVmZmVyIHBvaW50ZXIgKi8KKyAgICAgIENPUkRJQ19SZWFkT3V0RGF0YUluY3JlbWVudFB0cihoY29yZGljLCAmcF90bXBfb3V0X2J1ZmYpOworICAgIH0KKworICAgIC8qIFJlYWQgb3V0cHV0IGRhdGEgZnJvbSBSZWFkIERhdGEgcmVnaXN0ZXIsIGFuZCBpbmNyZW1lbnQgb3V0cHV0IGJ1ZmZlciBwb2ludGVyICovCisgICAgQ09SRElDX1JlYWRPdXREYXRhSW5jcmVtZW50UHRyKGhjb3JkaWMsICZwX3RtcF9vdXRfYnVmZik7CisKKyAgICAvKiBDaGFuZ2UgdGhlIENPUkRJQyBzdGF0ZSAqLworICAgIGhjb3JkaWMtPlN0YXRlID0gSEFMX0NPUkRJQ19TVEFURV9SRUFEWTsKKworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX09LOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIFNldCBDT1JESUMgZXJyb3IgY29kZSAqLworICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX05PVF9SRUFEWTsKKworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2Fycnkgb3V0IGRhdGEgb2YgQ09SRElDIHByb2Nlc3NpbmcgaW4gWmVyby1PdmVyaGVhZCBtb2RlIChvdXRwdXQgZGF0YSBiZWluZyByZWFkCisgICogICAgICAgICBzb29uIGFzIGlucHV0IGRhdGEgYXJlIHdyaXR0ZW4pLCBhY2NvcmRpbmcgdG8gdGhlIGV4aXN0aW5nIENPUkRJQyBjb25maWd1cmF0aW9uLgorICAqIEBwYXJhbSAgaGNvcmRpYyBwb2ludGVyIHRvIGEgQ09SRElDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDT1JESUMgbW9kdWxlLgorICAqIEBwYXJhbSAgcEluQnVmZiBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIGlucHV0IGRhdGEgZm9yIENPUkRJQyBwcm9jZXNzaW5nLgorICAqIEBwYXJhbSAgcE91dEJ1ZmYgUG9pbnRlciB0byBidWZmZXIgd2hlcmUgb3V0cHV0IGRhdGEgb2YgQ09SRElDIHByb2Nlc3Npbmcgd2lsbCBiZSBzdG9yZWQuCisgICogQHBhcmFtICBOYkNhbGMgTnVtYmVyIG9mIENPUkRJQyBjYWxjdWxhdGlvbiB0byBwcm9jZXNzLgorICAqIEBwYXJhbSAgVGltZW91dCBTcGVjaWZ5IFRpbWVvdXQgdmFsdWUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9DT1JESUNfQ2FsY3VsYXRlWk8oQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMsIGludDMyX3QgKnBJbkJ1ZmYsIGludDMyX3QgKnBPdXRCdWZmLCB1aW50MzJfdCBOYkNhbGMsIHVpbnQzMl90IFRpbWVvdXQpCit7CisgIHVpbnQzMl90IHRpY2tzdGFydDsKKyAgdWludDMyX3QgaW5kZXg7CisgIGludDMyX3QgKnBfdG1wX2luX2J1ZmYgPSBwSW5CdWZmOworICBpbnQzMl90ICpwX3RtcF9vdXRfYnVmZiA9IHBPdXRCdWZmOworCisgIC8qIENoZWNrIHBhcmFtZXRlcnMgc2V0dGluZyAqLworICBpZiAoKHBJbkJ1ZmYgPT0gTlVMTCkgfHwgKHBPdXRCdWZmID09IE5VTEwpIHx8IChOYkNhbGMgPT0gMFUpKQorICB7CisgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgaGNvcmRpYy0+RXJyb3JDb2RlIHw9IEhBTF9DT1JESUNfRVJST1JfUEFSQU07CisKKyAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIGhhbmRsZSBzdGF0ZSBpcyByZWFkeSAqLworICBpZiAoaGNvcmRpYy0+U3RhdGUgPT0gSEFMX0NPUkRJQ19TVEFURV9SRUFEWSkKKyAgeworICAgIC8qIFJlc2V0IENPUkRJQyBlcnJvciBjb2RlICovCisgICAgaGNvcmRpYy0+RXJyb3JDb2RlID0gSEFMX0NPUkRJQ19FUlJPUl9OT05FOworCisgICAgLyogQ2hhbmdlIHRoZSBDT1JESUMgc3RhdGUgKi8KKyAgICBoY29yZGljLT5TdGF0ZSA9IEhBTF9DT1JESUNfU1RBVEVfQlVTWTsKKworICAgIC8qIEdldCB0aWNrICovCisgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAgIC8qIFdyaXRlIG9mIGlucHV0IGRhdGEgaW4gV3JpdGUgRGF0YSByZWdpc3RlciwgYW5kIGluY3JlbWVudCBpbnB1dCBidWZmZXIgcG9pbnRlciAqLworICAgIENPUkRJQ19Xcml0ZUluRGF0YUluY3JlbWVudFB0cihoY29yZGljLCAmcF90bXBfaW5fYnVmZik7CisKKyAgICAvKiBDYWxjdWxhdGlvbiBpcyBzdGFydGVkLgorICAgICAgIFByb3ZpZGUgbmV4dCBzZXQgb2YgaW5wdXQgZGF0YSwgdW50aWwgbnVtYmVyIG9mIGNhbGN1bGF0aW9uIGlzIGFjaGlldmVkICovCisgICAgZm9yIChpbmRleCA9IChOYkNhbGMgLSAxVSk7IGluZGV4ID4gMFU7IGluZGV4LS0pCisgICAgeworICAgICAgLyogV3JpdGUgb2YgaW5wdXQgZGF0YSBpbiBXcml0ZSBEYXRhIHJlZ2lzdGVyLCBhbmQgaW5jcmVtZW50IGlucHV0IGJ1ZmZlciBwb2ludGVyICovCisgICAgICBDT1JESUNfV3JpdGVJbkRhdGFJbmNyZW1lbnRQdHIoaGNvcmRpYywgJnBfdG1wX2luX2J1ZmYpOworCisgICAgICAvKiBSZWFkIG91dHB1dCBkYXRhIGZyb20gUmVhZCBEYXRhIHJlZ2lzdGVyLCBhbmQgaW5jcmVtZW50IG91dHB1dCBidWZmZXIgcG9pbnRlcgorICAgICAgICAgVGhlIHJlYWRpbmcgaXMgcGVyZm9ybWVkIGluIFplcm8tT3ZlcmhlYWQgbW9kZToKKyAgICAgICAgIHJlYWRpbmcgaXMgb3JkZXJlZCBpbW1lZGlhdGVseSB3aXRob3V0IHdhaXRpbmcgcmVzdWx0IHJlYWR5IGZsYWcgKi8KKyAgICAgIENPUkRJQ19SZWFkT3V0RGF0YUluY3JlbWVudFB0cihoY29yZGljLCAmcF90bXBfb3V0X2J1ZmYpOworCisgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KKyAgICAgIGlmIChUaW1lb3V0ICE9IEhBTF9NQVhfREVMQVkpCisgICAgICB7CisgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBUaW1lb3V0KQorICAgICAgICB7CisgICAgICAgICAgLyogU2V0IENPUkRJQyBlcnJvciBjb2RlICovCisgICAgICAgICAgaGNvcmRpYy0+RXJyb3JDb2RlID0gSEFMX0NPUkRJQ19FUlJPUl9USU1FT1VUOworCisgICAgICAgICAgLyogQ2hhbmdlIHRoZSBDT1JESUMgc3RhdGUgKi8KKyAgICAgICAgICBoY29yZGljLT5TdGF0ZSA9IEhBTF9DT1JESUNfU1RBVEVfUkVBRFk7CisKKyAgICAgICAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisgICAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIFJlYWQgb3V0cHV0IGRhdGEgZnJvbSBSZWFkIERhdGEgcmVnaXN0ZXIsIGFuZCBpbmNyZW1lbnQgb3V0cHV0IGJ1ZmZlciBwb2ludGVyCisgICAgICAgVGhlIHJlYWRpbmcgaXMgcGVyZm9ybWVkIGluIFplcm8tT3ZlcmhlYWQgbW9kZToKKyAgICAgICByZWFkaW5nIGlzIG9yZGVyZWQgaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIHJlc3VsdCByZWFkeSBmbGFnICovCisgICAgQ09SRElDX1JlYWRPdXREYXRhSW5jcmVtZW50UHRyKGhjb3JkaWMsICZwX3RtcF9vdXRfYnVmZik7CisKKyAgICAvKiBDaGFuZ2UgdGhlIENPUkRJQyBzdGF0ZSAqLworICAgIGhjb3JkaWMtPlN0YXRlID0gSEFMX0NPUkRJQ19TVEFURV9SRUFEWTsKKworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX09LOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIFNldCBDT1JESUMgZXJyb3IgY29kZSAqLworICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX05PVF9SRUFEWTsKKworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2Fycnkgb3V0IGRhdGEgb2YgQ09SRElDIHByb2Nlc3NpbmcgaW4gaW50ZXJydXB0IG1vZGUsCisgICogICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGV4aXN0aW5nIENPUkRJQyBjb25maWd1cmF0aW9uLgorICAqIEBwYXJhbSAgaGNvcmRpYyBwb2ludGVyIHRvIGEgQ09SRElDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDT1JESUMgbW9kdWxlLgorICAqIEBwYXJhbSAgcEluQnVmZiBQb2ludGVyIHRvIGJ1ZmZlciBjb250YWluaW5nIGlucHV0IGRhdGEgZm9yIENPUkRJQyBwcm9jZXNzaW5nLgorICAqIEBwYXJhbSAgcE91dEJ1ZmYgUG9pbnRlciB0byBidWZmZXIgd2hlcmUgb3V0cHV0IGRhdGEgb2YgQ09SRElDIHByb2Nlc3Npbmcgd2lsbCBiZSBzdG9yZWQuCisgICogQHBhcmFtICBOYkNhbGMgTnVtYmVyIG9mIENPUkRJQyBjYWxjdWxhdGlvbiB0byBwcm9jZXNzLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0NPUkRJQ19DYWxjdWxhdGVfSVQoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMsIGludDMyX3QgKnBJbkJ1ZmYsIGludDMyX3QgKnBPdXRCdWZmLCB1aW50MzJfdCBOYkNhbGMpCit7CisgIGludDMyX3QgKnRtcF9wSW5CdWZmID0gcEluQnVmZjsKKworICAvKiBDaGVjayBwYXJhbWV0ZXJzIHNldHRpbmcgKi8KKyAgaWYgKChwSW5CdWZmID09IE5VTEwpIHx8IChwT3V0QnVmZiA9PSBOVUxMKSB8fCAoTmJDYWxjID09IDBVKSkKKyAgeworICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX1BBUkFNOworCisgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBDaGVjayBoYW5kbGUgc3RhdGUgaXMgcmVhZHkgKi8KKyAgaWYgKGhjb3JkaWMtPlN0YXRlID09IEhBTF9DT1JESUNfU1RBVEVfUkVBRFkpCisgIHsKKyAgICAvKiBSZXNldCBDT1JESUMgZXJyb3IgY29kZSAqLworICAgIGhjb3JkaWMtPkVycm9yQ29kZSA9IEhBTF9DT1JESUNfRVJST1JfTk9ORTsKKworICAgIC8qIENoYW5nZSB0aGUgQ09SRElDIHN0YXRlICovCisgICAgaGNvcmRpYy0+U3RhdGUgPSBIQUxfQ09SRElDX1NUQVRFX0JVU1k7CisKKyAgICAvKiBTdG9yZSB0aGUgYnVmZmVycyBhZGRyZXNzZXMgYW5kIG51bWJlciBvZiBjYWxjdWxhdGlvbnMgaW4gaGFuZGxlLAorICAgICAgIHByb3Zpc2lvbmluZyBpbml0aWFsIHdyaXRlIG9mIGlucHV0IGRhdGEgdGhhdCB3aWxsIGJlIGRvbmUgKi8KKyAgICBpZiAoSEFMX0lTX0JJVF9TRVQoaGNvcmRpYy0+SW5zdGFuY2UtPkNTUiwgQ09SRElDX0NTUl9OQVJHUykpCisgICAgeworICAgICAgLyogVHdvIHdyaXRlcyBvZiBpbnB1dCBkYXRhIGFyZSBleHBlY3RlZCAqLworICAgICAgdG1wX3BJbkJ1ZmYrKzsKKyAgICAgIHRtcF9wSW5CdWZmKys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBPbmUgd3JpdGUgb2YgaW5wdXQgZGF0YSBpcyBleHBlY3RlZCAqLworICAgICAgdG1wX3BJbkJ1ZmYrKzsKKyAgICB9CisgICAgaGNvcmRpYy0+cEluQnVmZiA9IHRtcF9wSW5CdWZmOworICAgIGhjb3JkaWMtPnBPdXRCdWZmID0gcE91dEJ1ZmY7CisgICAgaGNvcmRpYy0+TmJDYWxjVG9PcmRlciA9IE5iQ2FsYyAtIDFVOworICAgIGhjb3JkaWMtPk5iQ2FsY1RvR2V0ID0gTmJDYWxjOworCisgICAgLyogRW5hYmxlIFJlc3VsdCBSZWFkeSBJbnRlcnJ1cHQgKi8KKyAgICBfX0hBTF9DT1JESUNfRU5BQkxFX0lUKGhjb3JkaWMsIENPUkRJQ19JVF9JRU4pOworCisgICAgLyogU2V0IGJhY2sgcG9pbnRlciB0byBzdGFydCBvZiBpbnB1dCBkYXRhIGJ1ZmZlciAqLworICAgIHRtcF9wSW5CdWZmID0gcEluQnVmZjsKKworICAgIC8qIEluaXRpYXRlIHRoZSBwcm9jZXNzaW5nIGJ5IHByb3ZpZGluZyBpbnB1dCBkYXRhCisgICAgICAgaW4gdGhlIFdyaXRlIERhdGEgcmVnaXN0ZXIgKi8KKyAgICBXUklURV9SRUcoaGNvcmRpYy0+SW5zdGFuY2UtPldEQVRBLCAodWludDMyX3QpKnRtcF9wSW5CdWZmKTsKKworICAgIC8qIENoZWNrIGlmIHNlY29uZCB3cml0ZSBvZiBpbnB1dCBkYXRhIGlzIGV4cGVjdGVkICovCisgICAgaWYgKEhBTF9JU19CSVRfU0VUKGhjb3JkaWMtPkluc3RhbmNlLT5DU1IsIENPUkRJQ19DU1JfTkFSR1MpKQorICAgIHsKKyAgICAgIC8qIEluY3JlbWVudCBwb2ludGVyIHRvIGlucHV0IGRhdGEgKi8KKyAgICAgIHRtcF9wSW5CdWZmKys7CisKKyAgICAgIC8qIFBlcmZvcm0gc2Vjb25kIHdyaXRlIG9mIGlucHV0IGRhdGEgKi8KKyAgICAgIFdSSVRFX1JFRyhoY29yZGljLT5JbnN0YW5jZS0+V0RBVEEsICh1aW50MzJfdCkqdG1wX3BJbkJ1ZmYpOworICAgIH0KKworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX09LOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIFNldCBDT1JESUMgZXJyb3IgY29kZSAqLworICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX05PVF9SRUFEWTsKKworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgQ2Fycnkgb3V0IGlucHV0IGFuZC9vciBvdXRwdXQgZGF0YSBvZiBDT1JESUMgcHJvY2Vzc2luZyBpbiBETUEgbW9kZSwKKyAgKiAgICAgICAgIGFjY29yZGluZyB0byB0aGUgZXhpc3RpbmcgQ09SRElDIGNvbmZpZ3VyYXRpb24uCisgICogQHBhcmFtICBoY29yZGljIHBvaW50ZXIgdG8gYSBDT1JESUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENPUkRJQyBtb2R1bGUuCisgICogQHBhcmFtICBwSW5CdWZmIFBvaW50ZXIgdG8gYnVmZmVyIGNvbnRhaW5pbmcgaW5wdXQgZGF0YSBmb3IgQ09SRElDIHByb2Nlc3NpbmcuCisgICogQHBhcmFtICBwT3V0QnVmZiBQb2ludGVyIHRvIGJ1ZmZlciB3aGVyZSBvdXRwdXQgZGF0YSBvZiBDT1JESUMgcHJvY2Vzc2luZyB3aWxsIGJlIHN0b3JlZC4KKyAgKiBAcGFyYW0gIE5iQ2FsYyBOdW1iZXIgb2YgQ09SRElDIGNhbGN1bGF0aW9uIHRvIHByb2Nlc3MuCisgICogQHBhcmFtICBETUFEaXJlY3Rpb24gRGlyZWN0aW9uIG9mIERNQSB0cmFuc2ZlcnMuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBAcmVmIENPUkRJQ19ETUFfRGlyZWN0aW9uIENPUkRJQyBETUEgZGlyZWN0aW9uCisgICogQG5vdGUgICBwSW5CdWZmIG9yIHBPdXRCdWZmIGlzIHVudXNlZCBpbiBjYXNlIG9mIHVuaXF1ZSBETUFEaXJlY3Rpb24gdHJhbnNmZXIsIGFuZCBjYW4KKyAgKiAgICAgICAgIGJlIHNldCB0byBOVUxMIHZhbHVlIGluIHRoaXMgY2FzZS4KKyAgKiBAbm90ZSAgIHBJbkJ1ZmYgYW5kIHBPdXRCdWZmIGJ1ZmZlcnMgbXVzdCBiZSAzMi1iaXQgYWxpZ25lZCB0byBlbnN1cmUgYSBjb3JyZWN0CisgICogICAgICAgICBETUEgdHJhbnNmZXIgdG8gYW5kIGZyb20gdGhlIFBlcmlwaGVyYWwuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfQ09SRElDX0NhbGN1bGF0ZV9ETUEoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMsIGludDMyX3QgKnBJbkJ1ZmYsIGludDMyX3QgKnBPdXRCdWZmLCB1aW50MzJfdCBOYkNhbGMsIHVpbnQzMl90IERNQURpcmVjdGlvbikKK3sKKyAgdWludDMyX3Qgc2l6ZWluYnVmZjsKKyAgdWludDMyX3Qgc2l6ZW91dGJ1ZmY7CisgIHVpbnQzMl90IGlucHV0YWRkcjsKKyAgdWludDMyX3Qgb3V0cHV0YWRkcjsKKworICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfQ09SRElDX0RNQV9ESVJFQ1RJT04oRE1BRGlyZWN0aW9uKSk7CisKKyAgLyogQ2hlY2sgcGFyYW1ldGVycyBzZXR0aW5nICovCisgIGlmIChOYkNhbGMgPT0gMFUpCisgIHsKKyAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICBoY29yZGljLT5FcnJvckNvZGUgfD0gSEFMX0NPUkRJQ19FUlJPUl9QQVJBTTsKKworICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgaWYgQ09SRElDIERNQSBkaXJlY3Rpb24gIk91dCIgaXMgcmVxdWVzdGVkICovCisgIGlmICgoRE1BRGlyZWN0aW9uID09IENPUkRJQ19ETUFfRElSX09VVCkgfHwgKERNQURpcmVjdGlvbiA9PSBDT1JESUNfRE1BX0RJUl9JTl9PVVQpKQorICB7CisgICAgLyogQ2hlY2sgcGFyYW1ldGVycyBzZXR0aW5nICovCisgICAgaWYgKHBPdXRCdWZmID09IE5VTEwpCisgICAgeworICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICBoY29yZGljLT5FcnJvckNvZGUgfD0gSEFMX0NPUkRJQ19FUlJPUl9QQVJBTTsKKworICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgIH0KKworICAvKiBDaGVjayBpZiBDT1JESUMgRE1BIGRpcmVjdGlvbiAiSW4iIGlzIHJlcXVlc3RlZCAqLworICBpZiAoKERNQURpcmVjdGlvbiA9PSBDT1JESUNfRE1BX0RJUl9JTikgfHwgKERNQURpcmVjdGlvbiA9PSBDT1JESUNfRE1BX0RJUl9JTl9PVVQpKQorICB7CisgICAgLyogQ2hlY2sgcGFyYW1ldGVycyBzZXR0aW5nICovCisgICAgaWYgKHBJbkJ1ZmYgPT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX1BBUkFNOworCisgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgfQorCisgIGlmIChoY29yZGljLT5TdGF0ZSA9PSBIQUxfQ09SRElDX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogUmVzZXQgQ09SRElDIGVycm9yIGNvZGUgKi8KKyAgICBoY29yZGljLT5FcnJvckNvZGUgPSBIQUxfQ09SRElDX0VSUk9SX05PTkU7CisKKyAgICAvKiBDaGFuZ2UgdGhlIENPUkRJQyBzdGF0ZSAqLworICAgIGhjb3JkaWMtPlN0YXRlID0gSEFMX0NPUkRJQ19TVEFURV9CVVNZOworCisgICAgLyogR2V0IERNQSBkaXJlY3Rpb24gKi8KKyAgICBoY29yZGljLT5ETUFEaXJlY3Rpb24gPSBETUFEaXJlY3Rpb247CisKKyAgICAvKiBDaGVjayBpZiBDT1JESUMgRE1BIGRpcmVjdGlvbiAiT3V0IiBpcyByZXF1ZXN0ZWQgKi8KKyAgICBpZiAoKERNQURpcmVjdGlvbiA9PSBDT1JESUNfRE1BX0RJUl9PVVQpIHx8IChETUFEaXJlY3Rpb24gPT0gQ09SRElDX0RNQV9ESVJfSU5fT1VUKSkKKyAgICB7CisgICAgICAvKiBTZXQgdGhlIENPUkRJQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICAgIGhjb3JkaWMtPmhkbWFPdXQtPlhmZXJDcGx0Q2FsbGJhY2sgPSBDT1JESUNfRE1BT3V0Q3BsdDsKKyAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgICBoY29yZGljLT5oZG1hT3V0LT5YZmVyRXJyb3JDYWxsYmFjayA9IENPUkRJQ19ETUFFcnJvcjsKKworICAgICAgLyogQ2hlY2sgbnVtYmVyIG9mIG91dHB1dCBkYXRhIGF0IGVhY2ggY2FsY3VsYXRpb24sCisgICAgICAgICB0byByZXRyaWV2ZSB0aGUgc2l6ZSBvZiBvdXRwdXQgZGF0YSBidWZmZXIgKi8KKyAgICAgIGlmIChIQUxfSVNfQklUX1NFVChoY29yZGljLT5JbnN0YW5jZS0+Q1NSLCBDT1JESUNfQ1NSX05SRVMpKQorICAgICAgeworICAgICAgICBzaXplb3V0YnVmZiA9IDJVICogTmJDYWxjOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBzaXplb3V0YnVmZiA9IE5iQ2FsYzsKKyAgICAgIH0KKworICAgICAgb3V0cHV0YWRkciA9ICh1aW50MzJfdClwT3V0QnVmZjsKKworICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtIG1hbmFnaW5nIENPUkRJQyBvdXRwdXQgZGF0YSByZWFkICovCisgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChoY29yZGljLT5oZG1hT3V0LCAodWludDMyX3QpJmhjb3JkaWMtPkluc3RhbmNlLT5SREFUQSwgb3V0cHV0YWRkciwgc2l6ZW91dGJ1ZmYpICE9IEhBTF9PSykKKyAgICAgIHsKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX0RNQTsKKworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisKKyAgICAgIC8qIEVuYWJsZSBvdXRwdXQgZGF0YSBSZWFkIERNQSByZXF1ZXN0cyAqLworICAgICAgU0VUX0JJVChoY29yZGljLT5JbnN0YW5jZS0+Q1NSLCBDT1JESUNfRE1BX1JFTik7CisgICAgfQorCisgICAgLyogQ2hlY2sgaWYgQ09SRElDIERNQSBkaXJlY3Rpb24gIkluIiBpcyByZXF1ZXN0ZWQgKi8KKyAgICBpZiAoKERNQURpcmVjdGlvbiA9PSBDT1JESUNfRE1BX0RJUl9JTikgfHwgKERNQURpcmVjdGlvbiA9PSBDT1JESUNfRE1BX0RJUl9JTl9PVVQpKQorICAgIHsKKyAgICAgIC8qIFNldCB0aGUgQ09SRElDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICAgICAgaGNvcmRpYy0+aGRtYUluLT5YZmVyQ3BsdENhbGxiYWNrID0gQ09SRElDX0RNQUluQ3BsdDsKKyAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgICBoY29yZGljLT5oZG1hSW4tPlhmZXJFcnJvckNhbGxiYWNrID0gQ09SRElDX0RNQUVycm9yOworCisgICAgICAvKiBDaGVjayBudW1iZXIgb2YgaW5wdXQgZGF0YSBleHBlY3RlZCBmb3IgZWFjaCBjYWxjdWxhdGlvbiwKKyAgICAgICAgIHRvIHJldHJpZXZlIHRoZSBzaXplIG9mIGlucHV0IGRhdGEgYnVmZmVyICovCisgICAgICBpZiAoSEFMX0lTX0JJVF9TRVQoaGNvcmRpYy0+SW5zdGFuY2UtPkNTUiwgQ09SRElDX0NTUl9OQVJHUykpCisgICAgICB7CisgICAgICAgIHNpemVpbmJ1ZmYgPSAyVSAqIE5iQ2FsYzsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgc2l6ZWluYnVmZiA9IE5iQ2FsYzsKKyAgICAgIH0KKworICAgICAgaW5wdXRhZGRyICA9ICh1aW50MzJfdClwSW5CdWZmOworCisgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gbWFuYWdpbmcgQ09SRElDIGlucHV0IGRhdGEgd3JpdGUgKi8KKyAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGhjb3JkaWMtPmhkbWFJbiwgaW5wdXRhZGRyLCAodWludDMyX3QpJmhjb3JkaWMtPkluc3RhbmNlLT5XREFUQSwgc2l6ZWluYnVmZikgIT0gSEFMX09LKQorICAgICAgeworICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGNvcmRpYy0+RXJyb3JDb2RlIHw9IEhBTF9DT1JESUNfRVJST1JfRE1BOworCisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKworICAgICAgLyogRW5hYmxlIGlucHV0IGRhdGEgV3JpdGUgRE1BIHJlcXVlc3QgKi8KKyAgICAgIFNFVF9CSVQoaGNvcmRpYy0+SW5zdGFuY2UtPkNTUiwgQ09SRElDX0RNQV9XRU4pOworICAgIH0KKworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX09LOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIFNldCBDT1JESUMgZXJyb3IgY29kZSAqLworICAgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX05PVF9SRUFEWTsKKworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgQ2FsbGJhY2sgZnVuY3Rpb25zCisgKiAgQGJyaWVmICAgIENhbGxiYWNrIGZ1bmN0aW9ucy4KKyAqCitAdmVyYmF0aW0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgQ2FsbGJhY2sgZnVuY3Rpb25zICAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBbLi5dICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgSW50ZXJydXB0aW9uIGFuZCBETUEgY2FsbGJhY2sgZnVuY3Rpb25zOgorICAgICAgKCspIERNQSBvciBJbnRlcnJ1cHQgY2FsY3VsYXRlIGNvbXBsZXRlCisgICAgICAoKykgRE1BIG9yIEludGVycnVwdCBlcnJvcgorCitAZW5kdmVyYmF0aW0KKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIENPUkRJQyBlcnJvciBjYWxsYmFjay4KKyAgKiBAcGFyYW0gIGhjb3JkaWMgcG9pbnRlciB0byBhIENPUkRJQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ09SRElDIG1vZHVsZQorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0NPUkRJQ19FcnJvckNhbGxiYWNrKENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChoY29yZGljKTsKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkOyB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0NPUkRJQ19FcnJvckNhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgICAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIENPUkRJQyBjYWxjdWxhdGUgY29tcGxldGUgY2FsbGJhY2suCisgICogQHBhcmFtICBoY29yZGljIHBvaW50ZXIgdG8gYSBDT1JESUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENPUkRJQyBtb2R1bGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fd2VhayB2b2lkIEhBTF9DT1JESUNfQ2FsY3VsYXRlQ3BsdENhbGxiYWNrKENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChoY29yZGljKTsKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkOyB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0NPUkRJQ19DYWxjdWxhdGVDcGx0Q2FsbGJhY2sgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKyAgICovCit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgQ09SRElDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDQgSVJRIGhhbmRsZXIgbWFuYWdlbWVudAorICogIEBicmllZiAgICBJUlEgaGFuZGxlci4KKyAqCitAdmVyYmF0aW0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgIyMjIyMgSVJRIGhhbmRsZXIgbWFuYWdlbWVudCAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1suLl0gIFRoaXMgc2VjdGlvbiBwcm92aWRlcyBJUlEgaGFuZGxlciBmdW5jdGlvbi4KKworQGVuZHZlcmJhdGltCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBIYW5kbGUgQ09SRElDIGludGVycnVwdCByZXF1ZXN0LgorICAqIEBwYXJhbSAgaGNvcmRpYyBwb2ludGVyIHRvIGEgQ09SRElDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDT1JESUMgbW9kdWxlCisgICogQHJldHZhbCBOb25lCisgICovCit2b2lkIEhBTF9DT1JESUNfSVJRSGFuZGxlcihDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYykKK3sKKyAgLyogQ2hlY2sgaWYgY2FsY3VsYXRpb24gY29tcGxldGUgaW50ZXJydXB0IGlzIGVuYWJsZWQgYW5kIGlmIHJlc3VsdCByZWFkeQorICAgICBmbGFnIGlzIHJhaXNlZCAqLworICBpZiAoX19IQUxfQ09SRElDX0dFVF9JVF9TT1VSQ0UoaGNvcmRpYywgQ09SRElDX0lUX0lFTikgIT0gMFUpCisgIHsKKyAgICBpZiAoX19IQUxfQ09SRElDX0dFVF9GTEFHKGhjb3JkaWMsIENPUkRJQ19GTEFHX1JSRFkpICE9IDBVKQorICAgIHsKKyAgICAgIC8qIERlY3JlbWVudCBudW1iZXIgb2YgY2FsY3VsYXRpb25zIHRvIGdldCAqLworICAgICAgaGNvcmRpYy0+TmJDYWxjVG9HZXQtLTsKKworICAgICAgLyogUmVhZCBvdXRwdXQgZGF0YSBmcm9tIFJlYWQgRGF0YSByZWdpc3RlciwgYW5kIGluY3JlbWVudCBvdXRwdXQgYnVmZmVyIHBvaW50ZXIgKi8KKyAgICAgIENPUkRJQ19SZWFkT3V0RGF0YUluY3JlbWVudFB0cihoY29yZGljLCAmKGhjb3JkaWMtPnBPdXRCdWZmKSk7CisKKyAgICAgIC8qIENoZWNrIGlmIGNhbGN1bGF0aW9ucyBhcmUgc3RpbGwgdG8gYmUgb3JkZXJlZCAqLworICAgICAgaWYgKGhjb3JkaWMtPk5iQ2FsY1RvT3JkZXIgPiAwVSkKKyAgICAgIHsKKyAgICAgICAgLyogRGVjcmVtZW50IG51bWJlciBvZiBjYWxjdWxhdGlvbnMgdG8gb3JkZXIgKi8KKyAgICAgICAgaGNvcmRpYy0+TmJDYWxjVG9PcmRlci0tOworCisgICAgICAgIC8qIENvbnRpbnVlIHRoZSBwcm9jZXNzaW5nIGJ5IHByb3ZpZGluZyBhbm90aGVyIHdyaXRlIG9mIGlucHV0IGRhdGEKKyAgICAgICAgICAgaW4gdGhlIFdyaXRlIERhdGEgcmVnaXN0ZXIsIGFuZCBpbmNyZW1lbnQgaW5wdXQgYnVmZmVyIHBvaW50ZXIgKi8KKyAgICAgICAgQ09SRElDX1dyaXRlSW5EYXRhSW5jcmVtZW50UHRyKGhjb3JkaWMsICYoaGNvcmRpYy0+cEluQnVmZikpOworICAgICAgfQorCisgICAgICAvKiBDaGVjayBpZiBhbGwgY2FsY3VsYXRpb25zIHJlc3VsdHMgYXJlIGdvdCAqLworICAgICAgaWYgKGhjb3JkaWMtPk5iQ2FsY1RvR2V0ID09IDBVKQorICAgICAgeworICAgICAgICAvKiBEaXNhYmxlIFJlc3VsdCBSZWFkeSBJbnRlcnJ1cHQgKi8KKyAgICAgICAgX19IQUxfQ09SRElDX0RJU0FCTEVfSVQoaGNvcmRpYywgQ09SRElDX0lUX0lFTik7CisKKyAgICAgICAgLyogQ2hhbmdlIHRoZSBDT1JESUMgc3RhdGUgKi8KKyAgICAgICAgaGNvcmRpYy0+U3RhdGUgPSBIQUxfQ09SRElDX1NUQVRFX1JFQURZOworCisgICAgICAgIC8qIENhbGwgY2FsY3VsYXRpb24gY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMQorICAgICAgICAvKkNhbGwgcmVnaXN0ZXJlZCBjYWxsYmFjayovCisgICAgICAgIGhjb3JkaWMtPkNhbGN1bGF0ZUNwbHRDYWxsYmFjayhoY29yZGljKTsKKyNlbHNlCisgICAgICAgIC8qQ2FsbCBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2sqLworICAgICAgICBIQUxfQ09SRElDX0NhbGN1bGF0ZUNwbHRDYWxsYmFjayhoY29yZGljKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBDT1JESUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNSBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucworICogIEBicmllZiAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zLgorICoKK0B2ZXJiYXRpbQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucyAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBbLi5dCisgICAgVGhpcyBzdWJzZWN0aW9uIHBlcm1pdHMgdG8gZ2V0IGluIHJ1bi10aW1lIHRoZSBzdGF0dXMgb2YgdGhlIHBlcmlwaGVyYWwuCisKK0BlbmR2ZXJiYXRpbQorICAqIEB7CisgICovCisKKy8qKgorICAqIEBicmllZiAgUmV0dXJuIHRoZSBDT1JESUMgaGFuZGxlIHN0YXRlLgorICAqIEBwYXJhbSAgaGNvcmRpYyBwb2ludGVyIHRvIGEgQ09SRElDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDT1JESUMgbW9kdWxlCisgICogQHJldHZhbCBIQUwgc3RhdGUKKyAgKi8KK0hBTF9DT1JESUNfU3RhdGVUeXBlRGVmIEhBTF9DT1JESUNfR2V0U3RhdGUoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMpCit7CisgIC8qIFJldHVybiBDT1JESUMgaGFuZGxlIHN0YXRlICovCisgIHJldHVybiBoY29yZGljLT5TdGF0ZTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gdGhlIENPUkRJQyBwZXJpcGhlcmFsIGVycm9yLgorICAqIEBwYXJhbSAgaGNvcmRpYyBwb2ludGVyIHRvIGEgQ09SRElDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDT1JESUMgbW9kdWxlCisgICogQG5vdGUgICBUaGUgcmV0dXJuZWQgZXJyb3IgaXMgYSBiaXQtbWFwIGNvbWJpbmF0aW9uIG9mIHBvc3NpYmxlIGVycm9ycworICAqIEByZXR2YWwgRXJyb3IgYml0LW1hcAorICAqLwordWludDMyX3QgSEFMX0NPUkRJQ19HZXRFcnJvcihDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYykKK3sKKyAgLyogUmV0dXJuIENPUkRJQyBlcnJvciBjb2RlICovCisgIHJldHVybiBoY29yZGljLT5FcnJvckNvZGU7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBDT1JESUNfUHJpdmF0ZV9GdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIFdyaXRlIGlucHV0IGRhdGEgZm9yIENPUkRJQyBwcm9jZXNzaW5nLCBhbmQgaW5jcmVtZW50IGlucHV0IGJ1ZmZlciBwb2ludGVyLgorICAqIEBwYXJhbSAgaGNvcmRpYyBwb2ludGVyIHRvIGEgQ09SRElDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDT1JESUMgbW9kdWxlLgorICAqIEBwYXJhbSAgcHBJbkJ1ZmYgUG9pbnRlciB0byBwb2ludGVyIHRvIGlucHV0IGJ1ZmZlci4KKyAgKiBAcmV0dmFsIG5vbmUKKyAgKi8KK3N0YXRpYyB2b2lkIENPUkRJQ19Xcml0ZUluRGF0YUluY3JlbWVudFB0cihDT1JESUNfSGFuZGxlVHlwZURlZiAqaGNvcmRpYywgaW50MzJfdCAqKnBwSW5CdWZmKQoreworICAvKiBGaXJzdCB3cml0ZSBvZiBpbnB1dCBkYXRhIGluIHRoZSBXcml0ZSBEYXRhIHJlZ2lzdGVyICovCisgIFdSSVRFX1JFRyhoY29yZGljLT5JbnN0YW5jZS0+V0RBVEEsICh1aW50MzJfdCkgKipwcEluQnVmZik7CisKKyAgLyogSW5jcmVtZW50IGlucHV0IGRhdGEgcG9pbnRlciAqLworICAoKnBwSW5CdWZmKSsrOworCisgIC8qIENoZWNrIGlmIHNlY29uZCB3cml0ZSBvZiBpbnB1dCBkYXRhIGlzIGV4cGVjdGVkICovCisgIGlmIChIQUxfSVNfQklUX1NFVChoY29yZGljLT5JbnN0YW5jZS0+Q1NSLCBDT1JESUNfQ1NSX05BUkdTKSkKKyAgeworICAgIC8qIFNlY29uZCB3cml0ZSBvZiBpbnB1dCBkYXRhIGluIHRoZSBXcml0ZSBEYXRhIHJlZ2lzdGVyICovCisgICAgV1JJVEVfUkVHKGhjb3JkaWMtPkluc3RhbmNlLT5XREFUQSwgKHVpbnQzMl90KSAqKnBwSW5CdWZmKTsKKworICAgIC8qIEluY3JlbWVudCBpbnB1dCBkYXRhIHBvaW50ZXIgKi8KKyAgICAoKnBwSW5CdWZmKSsrOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgUmVhZCBvdXRwdXQgZGF0YSBvZiBDT1JESUMgcHJvY2Vzc2luZywgYW5kIGluY3JlbWVudCBvdXRwdXQgYnVmZmVyIHBvaW50ZXIuCisgICogQHBhcmFtICBoY29yZGljIHBvaW50ZXIgdG8gYSBDT1JESUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENPUkRJQyBtb2R1bGUuCisgICogQHBhcmFtICBwcE91dEJ1ZmYgUG9pbnRlciB0byBwb2ludGVyIHRvIG91dHB1dCBidWZmZXIuCisgICogQHJldHZhbCBub25lCisgICovCitzdGF0aWMgdm9pZCBDT1JESUNfUmVhZE91dERhdGFJbmNyZW1lbnRQdHIoQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMsIGludDMyX3QgKipwcE91dEJ1ZmYpCit7CisgIC8qIEZpcnN0IHJlYWQgb2Ygb3V0cHV0IGRhdGEgZnJvbSB0aGUgUmVhZCBEYXRhIHJlZ2lzdGVyICovCisgICoqcHBPdXRCdWZmID0gKGludDMyX3QpUkVBRF9SRUcoaGNvcmRpYy0+SW5zdGFuY2UtPlJEQVRBKTsKKworICAvKiBJbmNyZW1lbnQgb3V0cHV0IGRhdGEgcG9pbnRlciAqLworICAoKnBwT3V0QnVmZikrKzsKKworICAvKiBDaGVjayBpZiBzZWNvbmQgcmVhZCBvZiBvdXRwdXQgZGF0YSBpcyBleHBlY3RlZCAqLworICBpZiAoSEFMX0lTX0JJVF9TRVQoaGNvcmRpYy0+SW5zdGFuY2UtPkNTUiwgQ09SRElDX0NTUl9OUkVTKSkKKyAgeworICAgIC8qIFNlY29uZCByZWFkIG9mIG91dHB1dCBkYXRhIGZyb20gdGhlIFJlYWQgRGF0YSByZWdpc3RlciAqLworICAgICoqcHBPdXRCdWZmID0gKGludDMyX3QpUkVBRF9SRUcoaGNvcmRpYy0+SW5zdGFuY2UtPlJEQVRBKTsKKworICAgIC8qIEluY3JlbWVudCBvdXRwdXQgZGF0YSBwb2ludGVyICovCisgICAgKCpwcE91dEJ1ZmYpKys7CisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBETUEgQ09SRElDIElucHV0IERhdGEgcHJvY2VzcyBjb21wbGV0ZSBjYWxsYmFjay4KKyAgKiBAcGFyYW0gIGhkbWEgRE1BIGhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3N0YXRpYyB2b2lkIENPUkRJQ19ETUFJbkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCit7CisgIENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljID0gKENPUkRJQ19IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CisKKyAgLyogRGlzYWJsZSB0aGUgRE1BIHRyYW5zZmVyIGZvciBpbnB1dCByZXF1ZXN0ICovCisgIENMRUFSX0JJVChoY29yZGljLT5JbnN0YW5jZS0+Q1NSLCBDT1JESUNfRE1BX1dFTik7CisKKyAgLyogQ2hlY2sgaWYgRE1BIGRpcmVjdGlvbiBpcyBDT1JESUMgSW5wdXQgb25seSAobm8gRE1BIGZvciBDT1JESUMgT3V0cHV0KSAqLworICBpZiAoaGNvcmRpYy0+RE1BRGlyZWN0aW9uID09IENPUkRJQ19ETUFfRElSX0lOKQorICB7CisgICAgLyogQ2hhbmdlIHRoZSBDT1JESUMgRE1BIGRpcmVjdGlvbiB0byBub25lICovCisgICAgaGNvcmRpYy0+RE1BRGlyZWN0aW9uID0gQ09SRElDX0RNQV9ESVJfTk9ORTsKKworICAgIC8qIENoYW5nZSB0aGUgQ09SRElDIHN0YXRlIHRvIHJlYWR5ICovCisgICAgaGNvcmRpYy0+U3RhdGUgPSBIQUxfQ09SRElDX1NUQVRFX1JFQURZOworCisgICAgLyogQ2FsbCBjYWxjdWxhdGlvbiBjb21wbGV0ZSBjYWxsYmFjayAqLworI2lmIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxCisgICAgLypDYWxsIHJlZ2lzdGVyZWQgY2FsbGJhY2sqLworICAgIGhjb3JkaWMtPkNhbGN1bGF0ZUNwbHRDYWxsYmFjayhoY29yZGljKTsKKyNlbHNlCisgICAgLypDYWxsIGxlZ2FjeSB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFjayovCisgICAgSEFMX0NPUkRJQ19DYWxjdWxhdGVDcGx0Q2FsbGJhY2soaGNvcmRpYyk7CisjZW5kaWYgLyogVVNFX0hBTF9DT1JESUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBETUEgQ09SRElDIE91dHB1dCBEYXRhIHByb2Nlc3MgY29tcGxldGUgY2FsbGJhY2suCisgICogQHBhcmFtICBoZG1hIERNQSBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBDT1JESUNfRE1BT3V0Q3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKK3sKKyAgQ09SRElDX0hhbmRsZVR5cGVEZWYgKmhjb3JkaWMgPSAoQ09SRElDX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKworICAvKiBEaXNhYmxlIHRoZSBETUEgdHJhbnNmZXIgZm9yIG91dHB1dCByZXF1ZXN0ICovCisgIENMRUFSX0JJVChoY29yZGljLT5JbnN0YW5jZS0+Q1NSLCBDT1JESUNfRE1BX1JFTik7CisKKyAgLyogQ2hhbmdlIHRoZSBDT1JESUMgRE1BIGRpcmVjdGlvbiB0byBub25lICovCisgIGhjb3JkaWMtPkRNQURpcmVjdGlvbiA9IENPUkRJQ19ETUFfRElSX05PTkU7CisKKyAgLyogQ2hhbmdlIHRoZSBDT1JESUMgc3RhdGUgdG8gcmVhZHkgKi8KKyAgaGNvcmRpYy0+U3RhdGUgPSBIQUxfQ09SRElDX1NUQVRFX1JFQURZOworCisgIC8qIENhbGwgY2FsY3VsYXRpb24gY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMQorICAvKkNhbGwgcmVnaXN0ZXJlZCBjYWxsYmFjayovCisgIGhjb3JkaWMtPkNhbGN1bGF0ZUNwbHRDYWxsYmFjayhoY29yZGljKTsKKyNlbHNlCisgIC8qQ2FsbCBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgY2FsbGJhY2sqLworICBIQUxfQ09SRElDX0NhbGN1bGF0ZUNwbHRDYWxsYmFjayhoY29yZGljKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KK30KKworLyoqCisgICogQGJyaWVmICBETUEgQ09SRElDIGNvbW11bmljYXRpb24gZXJyb3IgY2FsbGJhY2suCisgICogQHBhcmFtICBoZG1hIERNQSBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBDT1JESUNfRE1BRXJyb3IoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCit7CisgIENPUkRJQ19IYW5kbGVUeXBlRGVmICpoY29yZGljID0gKENPUkRJQ19IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CisKKyAgLyogU2V0IENPUkRJQyBoYW5kbGUgc3RhdGUgdG8gZXJyb3IgKi8KKyAgaGNvcmRpYy0+U3RhdGUgPSBIQUxfQ09SRElDX1NUQVRFX1JFQURZOworCisgIC8qIFNldCBDT1JESUMgaGFuZGxlIGVycm9yIGNvZGUgdG8gRE1BIGVycm9yICovCisgIGhjb3JkaWMtPkVycm9yQ29kZSB8PSBIQUxfQ09SRElDX0VSUk9SX0RNQTsKKworICAvKiBDYWxsIHVzZXIgY2FsbGJhY2sgKi8KKyNpZiBVU0VfSEFMX0NPUkRJQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMQorICAvKkNhbGwgcmVnaXN0ZXJlZCBjYWxsYmFjayovCisgIGhjb3JkaWMtPkVycm9yQ2FsbGJhY2soaGNvcmRpYyk7CisjZWxzZQorICAvKkNhbGwgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGNhbGxiYWNrKi8KKyAgSEFMX0NPUkRJQ19FcnJvckNhbGxiYWNrKGhjb3JkaWMpOworI2VuZGlmIC8qIFVTRV9IQUxfQ09SRElDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworfQorCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisjZW5kaWYgLyogSEFMX0NPUkRJQ19NT0RVTEVfRU5BQkxFRCAqLworI2VuZGlmIC8qIENPUkRJQyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfY3J5cC5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfY3J5cC5jCmluZGV4IDJkOGJlYjQuLjA0MDdjNjUgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX2NyeXAuYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF9jcnlwLmMKQEAgLTEwMyw2ICsxMDMsOCBAQAogICAgICAgICAgKCMjKSBQYXlsb2FkIHBoYXNlOiBJUCBwcm9jZXNzZXMgdGhlIHBsYWludGV4dCAoUCkgd2l0aCBoYXNoIGNvbXB1dGF0aW9uICsga2V5c3RyZWFtCiAgICAgICAgICAgZW5jcnlwdGlvbiArIGRhdGEgWE9SaW5nLiBJdCB3b3JrcyBpbiBhIHNpbWlsYXIgd2F5IGZvciBjaXBoZXJ0ZXh0IChDKS4KICAgICAgICAgICgjIykgRmluYWwgcGhhc2U6IElQIGdlbmVyYXRlcyB0aGUgYXV0aGVudGljYXRlZCB0YWcgKFQpIHVzaW5nIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEuCisgICAgICAgICAgSEFMX0NSWVBFeF9BRVNHQ01fR2VuZXJhdGVBdXRoVEFHIEFQSSB1c2VkIGluIHRoaXMgcGhhc2UgdG8gZ2VuZXJhdGUgNCB3b3JkcyB3aGljaCBjb3JyZXNwb25kCisgICAgICAgICAgdG8gdGhlIFRhZy4gdXNlciBzaG91bGQgY29uc2lkZXIgb25seSBwYXJ0IG9mIHRoaXMgNCB3b3JkcywgaWYgVGFnIGxlbmd0aCBpcyBsZXNzIHRoYW4gMTI4IGJpdHMuIAogICAgICAgKCMpICBzdHJ1Y3R1cmUgb2YgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gaW4gR0NNIGlzIGRlZmluZWQgYXMgYmVsb3cgIDoKICAgICAgICAgICgjIykgMTYgYnl0ZXMgSW5pdGlhbCBDb3VudGVyIEJsb2NrIChJQ0IpY29tcG9zZWQgb2YgSVYgYW5kIGNvdW50ZXIKICAgICAgICAgICgjIykgVGhlIGF1dGhlbnRpY2F0ZWQgaGVhZGVyIEEgKGFsc28ga25vd3MgYXMgQWRkaXRpb25hbCBBdXRoZW50aWNhdGlvbiBEYXRhIEFBRCkKQEAgLTE0Myw2ICsxNDUsOCBAQAogICAgICAgICAgKCMjKSBQYXlsb2FkIHBoYXNlOiBJUCBwcm9jZXNzZXMgdGhlIHBsYWludGV4dCAoUCkgd2l0aCBoYXNoIGNvbXB1dGF0aW9uICsga2V5c3RyZWFtCiAgICAgICAgICAgZW5jcnlwdGlvbiArIGRhdGEgWE9SaW5nLiBJdCB3b3JrcyBpbiBhIHNpbWlsYXIgd2F5IGZvciBjaXBoZXJ0ZXh0IChDKS4KICAgICAgICAgICgjIykgRmluYWwgcGhhc2U6IElQIGdlbmVyYXRlcyB0aGUgYXV0aGVudGljYXRlZCB0YWcgKFQpIHVzaW5nIHRoZSBsYXN0IGJsb2NrIG9mIGRhdGEuCisgICAgICAgICBIQUxfQ1JZUEV4X0FFU0NDTV9HZW5lcmF0ZUF1dGhUQUcgQVBJIHVzZWQgaW4gdGhpcyBwaGFzZSB0byBnZW5lcmF0ZSA0IHdvcmRzIHdoaWNoIGNvcnJlc3BvbmQgdG8gdGhlIFRhZy4KKyAgICAgICAgIHVzZXIgc2hvdWxkIGNvbnNpZGVyIG9ubHkgcGFydCBvZiB0aGlzIDQgd29yZHMsIGlmIFRhZyBsZW5ndGggaXMgbGVzcyB0aGFuIDEyOCBiaXRzCiAKICAgKioqIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAqKioKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTkwMCw3ICs5MDQsNyBAQAogICAqIEBwYXJhbSAgaGNyeXA6IHBvaW50ZXIgdG8gYSBDUllQX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBDUllQIG1vZHVsZQogICAqIEBwYXJhbSAgSW5wdXQ6IFBvaW50ZXIgdG8gdGhlIGlucHV0IGJ1ZmZlciAocGxhaW50ZXh0KQotICAqIEBwYXJhbSAgU2l6ZTogTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgYnVmZmVyIGluIHdvcmQuCisgICogQHBhcmFtICBTaXplOiBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBidWZmZXIgZWl0aGVyIGluIHdvcmQgb3IgaW4gYnl0ZSwgYWNjb3JkaW5nIHRvIERhdGFXaWR0aFVuaXQuCiAgICogQHBhcmFtICBPdXRwdXQ6IFBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIoY2lwaGVydGV4dCkKICAgKiBAcGFyYW0gIFRpbWVvdXQ6IFNwZWNpZnkgVGltZW91dCB2YWx1ZQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwpAQCAtMTAzMCw3ICsxMDM0LDcgQEAKICAgKiBAcGFyYW0gIGhjcnlwOiBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ1JZUCBtb2R1bGUKICAgKiBAcGFyYW0gIElucHV0OiBQb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKGNpcGhlcnRleHQgKQotICAqIEBwYXJhbSAgU2l6ZTogTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgYnVmZmVyIGluIHdvcmQuCisgICogQHBhcmFtICBTaXplOiBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBidWZmZXIgZWl0aGVyIGluIHdvcmQgb3IgaW4gYnl0ZSwgYWNjb3JkaW5nIHRvIERhdGFXaWR0aFVuaXQKICAgKiBAcGFyYW0gIE91dHB1dDogUG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlcihwbGFpbnRleHQpCiAgICogQHBhcmFtICBUaW1lb3V0OiBTcGVjaWZ5IFRpbWVvdXQgdmFsdWUKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKQEAgLTExNjEsNyArMTE2NSw3IEBACiAgICogQHBhcmFtICBoY3J5cDogcG9pbnRlciB0byBhIENSWVBfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENSWVAgbW9kdWxlCiAgICogQHBhcmFtICBJbnB1dDogUG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChwbGFpbnRleHQpCi0gICogQHBhcmFtICBTaXplOiBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBidWZmZXIgaW4gd29yZAorICAqIEBwYXJhbSAgU2l6ZTogTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgYnVmZmVyIGVpdGhlciBpbiB3b3JkIG9yIGluIGJ5dGUsIGFjY29yZGluZyB0byBEYXRhV2lkdGhVbml0CiAgICogQHBhcmFtICBPdXRwdXQ6IFBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIoY2lwaGVydGV4dCkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTEyNzgsNyArMTI4Miw3IEBACiAgICogQHBhcmFtICBoY3J5cDogcG9pbnRlciB0byBhIENSWVBfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENSWVAgbW9kdWxlCiAgICogQHBhcmFtICBJbnB1dDogUG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChjaXBoZXJ0ZXh0ICkKLSAgKiBAcGFyYW0gIFNpemU6IExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IGJ1ZmZlciBpbiB3b3JkLgorICAqIEBwYXJhbSAgU2l6ZTogTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgYnVmZmVyIGVpdGhlciBpbiB3b3JkIG9yIGluIGJ5dGUsIGFjY29yZGluZyB0byBEYXRhV2lkdGhVbml0CiAgICogQHBhcmFtICBPdXRwdXQ6IFBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIocGxhaW50ZXh0KQogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMTM5Nyw3ICsxNDAxLDcgQEAKICAgKiBAcGFyYW0gIGhjcnlwOiBwb2ludGVyIHRvIGEgQ1JZUF9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgQ1JZUCBtb2R1bGUKICAgKiBAcGFyYW0gIElucHV0OiBQb2ludGVyIHRvIHRoZSBpbnB1dCBidWZmZXIgKHBsYWludGV4dCkKLSAgKiBAcGFyYW0gIFNpemU6IExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IGJ1ZmZlciBpbiB3b3JkLgorICAqIEBwYXJhbSAgU2l6ZTogTGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgYnVmZmVyIGVpdGhlciBpbiB3b3JkIG9yIGluIGJ5dGUsIGFjY29yZGluZyB0byBEYXRhV2lkdGhVbml0CiAgICogQHBhcmFtICBPdXRwdXQ6IFBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIoY2lwaGVydGV4dCkKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTE1NTAsNyArMTU1NCw3IEBACiAgICogQHBhcmFtICBoY3J5cDogcG9pbnRlciB0byBhIENSWVBfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENSWVAgbW9kdWxlCiAgICogQHBhcmFtICBJbnB1dDogUG9pbnRlciB0byB0aGUgaW5wdXQgYnVmZmVyIChjaXBoZXJ0ZXh0ICkKLSAgKiBAcGFyYW0gIFNpemU6IExlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IGJ1ZmZlciBpbiB3b3JkCisgICogQHBhcmFtICBTaXplOiBMZW5ndGggb2YgdGhlIHBsYWludGV4dCBidWZmZXIgZWl0aGVyIGluIHdvcmQgb3IgaW4gYnl0ZSwgYWNjb3JkaW5nIHRvIERhdGFXaWR0aFVuaXQKICAgKiBAcGFyYW0gIE91dHB1dDogUG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlcihwbGFpbnRleHQpCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9jcnlwX2V4LmMgYi9TcmMvc3RtMzJoN3h4X2hhbF9jcnlwX2V4LmMKaW5kZXggZDA4OGY1Ni4uYThhOTRhYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfY3J5cF9leC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2NyeXBfZXguYwpAQCAtMTAzLDYgKzEwMyw5IEBACiAgICogQHBhcmFtICBoY3J5cDogcG9pbnRlciB0byBhIENSWVBfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENSWVAgbW9kdWxlCiAgICogQHBhcmFtICBBdXRoVGFnOiBQb2ludGVyIHRvIHRoZSBhdXRoZW50aWNhdGlvbiBidWZmZXIKKyAgKiAgICAgICAgIHRoZSBBdXRoVGFnIGdlbmVyYXRlZCBoZXJlIGlzIDEyOGJpdHMgbGVuZ3RoLCBpZiB0aGUgVEFHIGxlbmd0aCBpcyAKKyAgKiAgICAgICAgIGxlc3MgdGhhbiAxMjhiaXRzLCB1c2VyIHNob3VsZCBjb25zaWRlciBvbmx5IHRoZSB2YWxpZCBwYXJ0IG9mIEF1dGhUYWcKKyAgKiAgICAgICAgIGJ1ZmZlciB3aGljaCBjb3JyZXNwb25kIGV4YWN0bHkgdG8gVEFHIGxlbmd0aC4gIAogICAqIEBwYXJhbSAgVGltZW91dDogVGltZW91dCBkdXJhdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMjYwLDYgKzI2Myw5IEBACiAgICogQHBhcmFtICBoY3J5cDogcG9pbnRlciB0byBhIENSWVBfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIENSWVAgbW9kdWxlCiAgICogQHBhcmFtICBBdXRoVGFnOiBQb2ludGVyIHRvIHRoZSBhdXRoZW50aWNhdGlvbiBidWZmZXIKKyAgKiAgICAgICAgIHRoZSBBdXRoVGFnIGdlbmVyYXRlZCBoZXJlIGlzIDEyOGJpdHMgbGVuZ3RoLCBpZiB0aGUgVEFHIGxlbmd0aCBpcyAKKyAgKiAgICAgICAgIGxlc3MgdGhhbiAxMjhiaXRzLCB1c2VyIHNob3VsZCBjb25zaWRlciBvbmx5IHRoZSB2YWxpZCBwYXJ0IG9mIEF1dGhUYWcKKyAgKiAgICAgICAgIGJ1ZmZlciB3aGljaCBjb3JyZXNwb25kIGV4YWN0bHkgdG8gVEFHIGxlbmd0aC4gIAogICAqIEBwYXJhbSAgVGltZW91dDogVGltZW91dCBkdXJhdGlvbgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfZGNtaS5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfZGNtaS5jCmluZGV4IDI4Y2EyMTYuLjQ2OTA2ZTAgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX2RjbWkuYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF9kY21pLmMKQEAgLTQ2Miw3ICs0NjIsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0RDTUlfU3RvcChEQ01JX0hhbmRsZVR5cGVEZWYgKmhkY21pKQogewotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IEhBTF9USU1FT1VUX0RDTUlfU1RPUCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvIDEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBIQUxfVElNRU9VVF9EQ01JX1NUT1AgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLyAxMDAwVSk7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAogICAvKiBQcm9jZXNzIGxvY2tlZCAqLwpAQCAtNTE2LDcgKzUxNiw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRENNSV9TdXNwZW5kKERDTUlfSGFuZGxlVHlwZURlZiAqaGRjbWkpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gSEFMX1RJTUVPVVRfRENNSV9TVE9QICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8gMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IEhBTF9USU1FT1VUX0RDTUlfU1RPUCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvIDEwMDBVKTsKICAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOwogCiAgIC8qIFByb2Nlc3MgbG9ja2VkICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9kZnNkbS5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfZGZzZG0uYwppbmRleCA3NWEzYTU4Li5lNzNjZDgwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9kZnNkbS5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2Rmc2RtLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogICAvKiBTZXQgYW5hbG9nIHdhdGNoZG9nIHBhcmFtZXRlcnMgKi8KICAgaGRmc2RtX2NoYW5uZWwtPkluc3RhbmNlLT5DSEFXU0NEUiAmPSB+KERGU0RNX0NIQVdTQ0RSX0FXRk9SRCB8IERGU0RNX0NIQVdTQ0RSX0FXRk9TUik7CiAgIGhkZnNkbV9jaGFubmVsLT5JbnN0YW5jZS0+Q0hBV1NDRFIgfD0gKGhkZnNkbV9jaGFubmVsLT5Jbml0LkF3ZC5GaWx0ZXJPcmRlciB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGhkZnNkbV9jaGFubmVsLT5Jbml0LkF3ZC5PdmVyc2FtcGxpbmcgLSAxVSkgPDwgREZTRE1fQ0hBV1NDRFJfQVdGT1NSX1BvcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGhkZnNkbV9jaGFubmVsLT5Jbml0LkF3ZC5PdmVyc2FtcGxpbmcgLSAxVSkgPDwgREZTRE1fQ0hBV1NDRFJfQVdGT1NSX1BvcykpOwogCiAgIC8qIFNldCBjaGFubmVsIG9mZnNldCBhbmQgcmlnaHQgYml0IHNoaWZ0ICovCiAgIGhkZnNkbV9jaGFubmVsLT5JbnN0YW5jZS0+Q0hDRkdSMiAmPSB+KERGU0RNX0NIQ0ZHUjJfT0ZGU0VUIHwgREZTRE1fQ0hDRkdSMl9EVFJCUyk7CkBAIC02ODAsMzggKzY4MCwzOCBAQAogICB7CiAgICAgc3dpdGNoIChDYWxsYmFja0lEKQogICAgIHsKLSAgICBjYXNlIEhBTF9ERlNETV9DSEFOTkVMX0NLQUJfQ0JfSUQgOgotICAgICAgaGRmc2RtX2NoYW5uZWwtPkNrYWJDYWxsYmFjayA9IEhBTF9ERlNETV9DaGFubmVsQ2thYkNhbGxiYWNrOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREZTRE1fQ0hBTk5FTF9TQ0RfQ0JfSUQgOgotICAgICAgaGRmc2RtX2NoYW5uZWwtPlNjZENhbGxiYWNrID0gSEFMX0RGU0RNX0NoYW5uZWxTY2RDYWxsYmFjazsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSEFMX0RGU0RNX0NIQU5ORUxfTVNQSU5JVF9DQl9JRCA6Ci0gICAgICBoZGZzZG1fY2hhbm5lbC0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0RGU0RNX0NoYW5uZWxNc3BJbml0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIQUxfREZTRE1fQ0hBTk5FTF9NU1BERUlOSVRfQ0JfSUQgOgotICAgICAgaGRmc2RtX2NoYW5uZWwtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0RGU0RNX0NoYW5uZWxNc3BEZUluaXQ7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0IDoKLSAgICAgIC8qIHVwZGF0ZSByZXR1cm4gc3RhdHVzICovCi0gICAgICBzdGF0dXMgPSBIQUxfRVJST1I7Ci0gICAgICBicmVhazsKKyAgICAgIGNhc2UgSEFMX0RGU0RNX0NIQU5ORUxfQ0tBQl9DQl9JRCA6CisgICAgICAgIGhkZnNkbV9jaGFubmVsLT5Da2FiQ2FsbGJhY2sgPSBIQUxfREZTRE1fQ2hhbm5lbENrYWJDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9ERlNETV9DSEFOTkVMX1NDRF9DQl9JRCA6CisgICAgICAgIGhkZnNkbV9jaGFubmVsLT5TY2RDYWxsYmFjayA9IEhBTF9ERlNETV9DaGFubmVsU2NkQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfREZTRE1fQ0hBTk5FTF9NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGRmc2RtX2NoYW5uZWwtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9ERlNETV9DaGFubmVsTXNwSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9ERlNETV9DSEFOTkVMX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhkZnNkbV9jaGFubmVsLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9ERlNETV9DaGFubmVsTXNwRGVJbml0OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlIGlmKEhBTF9ERlNETV9DSEFOTkVMX1NUQVRFX1JFU0VUID09IGhkZnNkbV9jaGFubmVsLT5TdGF0ZSkKICAgewogICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKICAgICB7Ci0gICAgY2FzZSBIQUxfREZTRE1fQ0hBTk5FTF9NU1BJTklUX0NCX0lEIDoKLSAgICAgIGhkZnNkbV9jaGFubmVsLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfREZTRE1fQ2hhbm5lbE1zcEluaXQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEhBTF9ERlNETV9DSEFOTkVMX01TUERFSU5JVF9DQl9JRCA6Ci0gICAgICBoZGZzZG1fY2hhbm5lbC0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfREZTRE1fQ2hhbm5lbE1zcERlSW5pdDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQgOgotICAgICAgLyogdXBkYXRlIHJldHVybiBzdGF0dXMgKi8KLSAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKLSAgICAgIGJyZWFrOworICAgICAgY2FzZSBIQUxfREZTRE1fQ0hBTk5FTF9NU1BJTklUX0NCX0lEIDoKKyAgICAgICAgaGRmc2RtX2NoYW5uZWwtPk1zcEluaXRDYWxsYmFjayA9IEhBTF9ERlNETV9DaGFubmVsTXNwSW5pdDsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEhBTF9ERlNETV9DSEFOTkVMX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhkZnNkbV9jaGFubmVsLT5Nc3BEZUluaXRDYWxsYmFjayA9IEhBTF9ERlNETV9DaGFubmVsTXNwRGVJbml0OworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiB1cGRhdGUgcmV0dXJuIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgfQogICBlbHNlCkBAIC0xMDk0LDcgKzEwOTQsNyBAQAogICAgIC8qIENvbmZpZ3VyZSB0aHJlc2hvbGQgYW5kIGJyZWFrIHNpZ25hbHMgKi8KICAgICBoZGZzZG1fY2hhbm5lbC0+SW5zdGFuY2UtPkNIQVdTQ0RSICY9IH4oREZTRE1fQ0hBV1NDRFJfQktTQ0QgfCBERlNETV9DSEFXU0NEUl9TQ0RUKTsKICAgICBoZGZzZG1fY2hhbm5lbC0+SW5zdGFuY2UtPkNIQVdTQ0RSIHw9ICgoQnJlYWtTaWduYWwgPDwgREZTRE1fQ0hBV1NDRFJfQktTQ0RfUG9zKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZXNob2xkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlc2hvbGQpOwogCiAgICAgLyogU3RhcnQgc2hvcnQgY2lyY3VpdCBkZXRlY3Rpb24gKi8KICAgICBoZGZzZG1fY2hhbm5lbC0+SW5zdGFuY2UtPkNIQ0ZHUjEgfD0gREZTRE1fQ0hDRkdSMV9TQ0RFTjsKQEAgLTEyNjMsNyArMTI2Myw3IEBACiAgICAgLyogQ29uZmlndXJlIHRocmVzaG9sZCBhbmQgYnJlYWsgc2lnbmFscyAqLwogICAgIGhkZnNkbV9jaGFubmVsLT5JbnN0YW5jZS0+Q0hBV1NDRFIgJj0gfihERlNETV9DSEFXU0NEUl9CS1NDRCB8IERGU0RNX0NIQVdTQ0RSX1NDRFQpOwogICAgIGhkZnNkbV9jaGFubmVsLT5JbnN0YW5jZS0+Q0hBV1NDRFIgfD0gKChCcmVha1NpZ25hbCA8PCBERlNETV9DSEFXU0NEUl9CS1NDRF9Qb3MpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlc2hvbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVzaG9sZCk7CiAKICAgICAvKiBTdGFydCBzaG9ydCBjaXJjdWl0IGRldGVjdGlvbiAqLwogICAgIGhkZnNkbV9jaGFubmVsLT5JbnN0YW5jZS0+Q0hDRkdSMSB8PSBERlNETV9DSENGR1IxX1NDREVOOwpAQCAtMTkxMSwxNCArMTkxMSwxNCBAQAogCiAgIC8qIENoZWNrIERGU0RNIGZpbHRlciBzdGF0ZSAqLwogICBpZigoaGRmc2RtX2ZpbHRlci0+U3RhdGUgIT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRVNFVCkgJiYKLSAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlICE9IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfRVJST1IpKQorICAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlICE9IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfRVJST1IpKQogICB7CiAgICAgLyogQ29uZmlndXJlIGNoYW5uZWwgYW5kIGNvbnRpbnVvdXMgbW9kZSBmb3IgcmVndWxhciBjb252ZXJzaW9uICovCiAgICAgaGRmc2RtX2ZpbHRlci0+SW5zdGFuY2UtPkZMVENSMSAmPSB+KERGU0RNX0ZMVENSMV9SQ0ggfCBERlNETV9GTFRDUjFfUkNPTlQpOwogICAgIGlmKENvbnRpbnVvdXNNb2RlID09IERGU0RNX0NPTlRJTlVPVVNfQ09OVl9PTikKICAgICB7CiAgICAgICBoZGZzZG1fZmlsdGVyLT5JbnN0YW5jZS0+RkxUQ1IxIHw9ICh1aW50MzJfdCkgKCgoQ2hhbm5lbCAmIERGU0RNX01TQl9NQVNLKSA8PCBERlNETV9GTFRDUjFfTVNCX1JDSF9PRkZTRVQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZTRE1fRkxUQ1IxX1JDT05UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERlNETV9GTFRDUjFfUkNPTlQpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTk1NCw3ICsxOTU0LDcgQEAKIAogICAvKiBDaGVjayBERlNETSBmaWx0ZXIgc3RhdGUgKi8KICAgaWYoKGhkZnNkbV9maWx0ZXItPlN0YXRlICE9IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVTRVQpICYmCi0gICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0VSUk9SKSkKKyAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0VSUk9SKSkKICAgewogICAgIC8qIENvbmZpZ3VyZSBjaGFubmVsIGZvciBpbmplY3RlZCBjb252ZXJzaW9uICovCiAgICAgaGRmc2RtX2ZpbHRlci0+SW5zdGFuY2UtPkZMVEpDSEdSID0gKHVpbnQzMl90KSAoQ2hhbm5lbCAmIERGU0RNX0xTQl9NQVNLKTsKQEAgLTE5NjIsNyArMTk2Miw3IEBACiAgICAgaGRmc2RtX2ZpbHRlci0+SW5qZWN0ZWRDaGFubmVsc05iciA9IERGU0RNX0dldEluakNoYW5uZWxzTmJyKENoYW5uZWwpOwogICAgIC8qIFVwZGF0ZSBudW1iZXIgb2YgaW5qZWN0ZWQgY2hhbm5lbHMgcmVtYWluaW5nICovCiAgICAgaGRmc2RtX2ZpbHRlci0+SW5qQ29udlJlbWFpbmluZyA9IChoZGZzZG1fZmlsdGVyLT5JbmplY3RlZFNjYW5Nb2RlID09IEVOQUJMRSkgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGZzZG1fZmlsdGVyLT5JbmplY3RlZENoYW5uZWxzTmJyIDogMVU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkZnNkbV9maWx0ZXItPkluamVjdGVkQ2hhbm5lbHNOYnIgOiAxVTsKICAgfQogICBlbHNlCiAgIHsKQEAgLTIwMjIsNyArMjAyMiw3IEBACiAKICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFQURZKSB8fCBcCi0gICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0lOSikpCisgICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9JTkopKQogICB7CiAgICAgLyogU3RhcnQgcmVndWxhciBjb252ZXJzaW9uICovCiAgICAgREZTRE1fUmVnQ29udlN0YXJ0KGhkZnNkbV9maWx0ZXIpOwpAQCAtMjA1Miw3ICsyMDUyLDcgQEAKIAogICAvKiBDaGVjayBERlNETSBmaWx0ZXIgc3RhdGUgKi8KICAgaWYoKGhkZnNkbV9maWx0ZXItPlN0YXRlICE9IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHKSAmJiBcCi0gICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFR19JTkopKQorICAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlICE9IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHX0lOSikpCiAgIHsKICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKQEAgLTIwOTEsNyArMjA5MSw3IEBACiAgICAgfQogICAgIC8qIFVwZGF0ZSBERlNETSBmaWx0ZXIgc3RhdGUgb25seSBpZiBub3QgY29udGludW91cyBjb252ZXJzaW9uIGFuZCBTVyB0cmlnZ2VyICovCiAgICAgaWYoKGhkZnNkbV9maWx0ZXItPlJlZ3VsYXJDb250TW9kZSA9PSBERlNETV9DT05USU5VT1VTX0NPTlZfT0ZGKSAmJiBcCi0gICAgICAgKGhkZnNkbV9maWx0ZXItPlJlZ3VsYXJUcmlnZ2VyID09IERGU0RNX0ZJTFRFUl9TV19UUklHR0VSKSkKKyAgICAgICAgKGhkZnNkbV9maWx0ZXItPlJlZ3VsYXJUcmlnZ2VyID09IERGU0RNX0ZJTFRFUl9TV19UUklHR0VSKSkKICAgICB7CiAgICAgICBoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9IChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFRykgPyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVBRFkgOiBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0lOSjsKQEAgLTIxMTYsNyArMjExNiw3IEBACiAKICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFRykgJiYgXAotICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgIT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUdfSU5KKSkKKyAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFR19JTkopKQogICB7CiAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKQEAgLTIxNDYsNyArMjE0Niw3IEBACiAKICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFQURZKSB8fCBcCi0gICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0lOSikpCisgICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9JTkopKQogICB7CiAgICAgLyogRW5hYmxlIGludGVycnVwdHMgZm9yIHJlZ3VsYXIgY29udmVyc2lvbnMgKi8KICAgICBoZGZzZG1fZmlsdGVyLT5JbnN0YW5jZS0+RkxUQ1IyIHw9IChERlNETV9GTFRDUjJfUkVPQ0lFIHwgREZTRE1fRkxUQ1IyX1JPVlJJRSk7CkBAIC0yMTc3LDcgKzIxNzcsNyBAQAogCiAgIC8qIENoZWNrIERGU0RNIGZpbHRlciBzdGF0ZSAqLwogICBpZigoaGRmc2RtX2ZpbHRlci0+U3RhdGUgIT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUcpICYmIFwKLSAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlICE9IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHX0lOSikpCisgICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgIT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUdfSU5KKSkKICAgewogICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CkBAIC0yMjI3LDIxICsyMjI3LDIxIEBACiAgIH0KICAgLyogQ2hlY2sgcGFyYW1ldGVycyBjb21wYXRpYmlsaXR5ICovCiAgIGVsc2UgaWYoKGhkZnNkbV9maWx0ZXItPlJlZ3VsYXJUcmlnZ2VyID09IERGU0RNX0ZJTFRFUl9TV19UUklHR0VSKSAmJiBcCi0gICAgICAgICAgKGhkZnNkbV9maWx0ZXItPlJlZ3VsYXJDb250TW9kZSA9PSBERlNETV9DT05USU5VT1VTX0NPTlZfT0ZGKSAmJiBcCi0gICAgICAgICAgKGhkZnNkbV9maWx0ZXItPmhkbWFSZWctPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKSAmJiBcCi0gICAgICAgICAgKExlbmd0aCAhPSAxVSkpCisgICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5SZWd1bGFyQ29udE1vZGUgPT0gREZTRE1fQ09OVElOVU9VU19DT05WX09GRikgJiYgXAorICAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+aGRtYVJlZy0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpICYmIFwKKyAgICAgICAgICAgKExlbmd0aCAhPSAxVSkpCiAgIHsKICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgIH0KICAgZWxzZSBpZigoaGRmc2RtX2ZpbHRlci0+UmVndWxhclRyaWdnZXIgPT0gREZTRE1fRklMVEVSX1NXX1RSSUdHRVIpICYmIFwKLSAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+UmVndWxhckNvbnRNb2RlID09IERGU0RNX0NPTlRJTlVPVVNfQ09OVl9PRkYpICYmIFwKLSAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+aGRtYVJlZy0+SW5pdC5Nb2RlID09IERNQV9DSVJDVUxBUikpCisgICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5SZWd1bGFyQ29udE1vZGUgPT0gREZTRE1fQ09OVElOVU9VU19DT05WX09GRikgJiYgXAorICAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+aGRtYVJlZy0+SW5pdC5Nb2RlID09IERNQV9DSVJDVUxBUikpCiAgIHsKICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgIH0KICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGVsc2UgaWYoKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVBRFkpIHx8IFwKLSAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9JTkopKQorICAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9JTkopKQogICB7CiAgICAgLyogU2V0IGNhbGxiYWNrcyBvbiBETUEgaGFuZGxlciAqLwogICAgIGhkZnNkbV9maWx0ZXItPmhkbWFSZWctPlhmZXJDcGx0Q2FsbGJhY2sgPSBERlNETV9ETUFSZWd1bGFyQ29udkNwbHQ7CkBAIC0yMjUxLDcgKzIyNTEsNyBAQAogCiAgICAgLyogU3RhcnQgRE1BIGluIGludGVycnVwdCBtb2RlICovCiAgICAgaWYoSEFMX0RNQV9TdGFydF9JVChoZGZzZG1fZmlsdGVyLT5oZG1hUmVnLCAodWludDMyX3QpJmhkZnNkbV9maWx0ZXItPkluc3RhbmNlLT5GTFRSREFUQVIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgIHsKICAgICAgIC8qIFNldCBERlNETSBmaWx0ZXIgaW4gZXJyb3Igc3RhdGUgKi8KICAgICAgIGhkZnNkbV9maWx0ZXItPlN0YXRlID0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9FUlJPUjsKQEAgLTIzMDQsMjEgKzIzMDQsMjEgQEAKICAgfQogICAvKiBDaGVjayBwYXJhbWV0ZXJzIGNvbXBhdGliaWxpdHkgKi8KICAgZWxzZSBpZigoaGRmc2RtX2ZpbHRlci0+UmVndWxhclRyaWdnZXIgPT0gREZTRE1fRklMVEVSX1NXX1RSSUdHRVIpICYmIFwKLSAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+UmVndWxhckNvbnRNb2RlID09IERGU0RNX0NPTlRJTlVPVVNfQ09OVl9PRkYpICYmIFwKLSAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+aGRtYVJlZy0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpICYmIFwKLSAgICAgICAgICAoTGVuZ3RoICE9IDFVKSkKKyAgICAgICAgICAgKGhkZnNkbV9maWx0ZXItPlJlZ3VsYXJDb250TW9kZSA9PSBERlNETV9DT05USU5VT1VTX0NPTlZfT0ZGKSAmJiBcCisgICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5oZG1hUmVnLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkgJiYgXAorICAgICAgICAgICAoTGVuZ3RoICE9IDFVKSkKICAgewogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQogICBlbHNlIGlmKChoZGZzZG1fZmlsdGVyLT5SZWd1bGFyVHJpZ2dlciA9PSBERlNETV9GSUxURVJfU1dfVFJJR0dFUikgJiYgXAotICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5SZWd1bGFyQ29udE1vZGUgPT0gREZTRE1fQ09OVElOVU9VU19DT05WX09GRikgJiYgXAotICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5oZG1hUmVnLT5Jbml0Lk1vZGUgPT0gRE1BX0NJUkNVTEFSKSkKKyAgICAgICAgICAgKGhkZnNkbV9maWx0ZXItPlJlZ3VsYXJDb250TW9kZSA9PSBERlNETV9DT05USU5VT1VTX0NPTlZfT0ZGKSAmJiBcCisgICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5oZG1hUmVnLT5Jbml0Lk1vZGUgPT0gRE1BX0NJUkNVTEFSKSkKICAgewogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQogICAvKiBDaGVjayBERlNETSBmaWx0ZXIgc3RhdGUgKi8KICAgZWxzZSBpZigoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUFEWSkgfHwgXAotICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0lOSikpCisgICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0lOSikpCiAgIHsKICAgICAvKiBTZXQgY2FsbGJhY2tzIG9uIERNQSBoYW5kbGVyICovCiAgICAgaGRmc2RtX2ZpbHRlci0+aGRtYVJlZy0+WGZlckNwbHRDYWxsYmFjayA9IERGU0RNX0RNQVJlZ3VsYXJDb252Q3BsdDsKQEAgLTIzMjgsNyArMjMyOCw3IEBACiAKICAgICAvKiBTdGFydCBETUEgaW4gaW50ZXJydXB0IG1vZGUgKi8KICAgICBpZihIQUxfRE1BX1N0YXJ0X0lUKGhkZnNkbV9maWx0ZXItPmhkbWFSZWcsICh1aW50MzJfdCkoJmhkZnNkbV9maWx0ZXItPkluc3RhbmNlLT5GTFRSREFUQVIpICsgMlUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgIHsKICAgICAgIC8qIFNldCBERlNETSBmaWx0ZXIgaW4gZXJyb3Igc3RhdGUgKi8KICAgICAgIGhkZnNkbV9maWx0ZXItPlN0YXRlID0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9FUlJPUjsKQEAgLTIzNjMsNyArMjM2Myw3IEBACiAKICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFRykgJiYgXAotICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgIT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUdfSU5KKSkKKyAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFR19JTkopKQogICB7CiAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKQEAgLTI0MzMsNyArMjQzMyw3IEBACiAKICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFQURZKSB8fCBcCi0gICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFRykpCisgICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUcpKQogICB7CiAgICAgLyogU3RhcnQgaW5qZWN0ZWQgY29udmVyc2lvbiAqLwogICAgIERGU0RNX0luakNvbnZTdGFydChoZGZzZG1fZmlsdGVyKTsKQEAgLTI0NjMsNyArMjQ2Myw3IEBACiAKICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0lOSikgJiYgXAotICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgIT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUdfSU5KKSkKKyAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFR19JTkopKQogICB7CiAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgIHJldHVybiBIQUxfRVJST1I7CkBAIC0yNTE0LDcgKzI1MTQsNyBAQAogCiAgICAgICAvKiBlbmQgb2YgaW5qZWN0ZWQgc2VxdWVuY2UsIHJlc2V0IHRoZSB2YWx1ZSAqLwogICAgICAgaGRmc2RtX2ZpbHRlci0+SW5qQ29udlJlbWFpbmluZyA9IChoZGZzZG1fZmlsdGVyLT5JbmplY3RlZFNjYW5Nb2RlID09IEVOQUJMRSkgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkZnNkbV9maWx0ZXItPkluamVjdGVkQ2hhbm5lbHNOYnIgOiAxVTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGZzZG1fZmlsdGVyLT5JbmplY3RlZENoYW5uZWxzTmJyIDogMVU7CiAgICAgfQogCiAgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtMjUzNyw3ICsyNTM3LDcgQEAKIAogICAvKiBDaGVjayBERlNETSBmaWx0ZXIgc3RhdGUgKi8KICAgaWYoKGhkZnNkbV9maWx0ZXItPlN0YXRlICE9IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfSU5KKSAmJiBcCi0gICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFR19JTkopKQorICAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlICE9IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHX0lOSikpCiAgIHsKICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwpAQCAtMjU2Nyw3ICsyNTY3LDcgQEAKIAogICAvKiBDaGVjayBERlNETSBmaWx0ZXIgc3RhdGUgKi8KICAgaWYoKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVBRFkpIHx8IFwKLSAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHKSkKKyAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFRykpCiAgIHsKICAgICAvKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgaW5qZWN0ZWQgY29udmVyc2lvbnMgKi8KICAgICBoZGZzZG1fZmlsdGVyLT5JbnN0YW5jZS0+RkxUQ1IyIHw9IChERlNETV9GTFRDUjJfSkVPQ0lFIHwgREZTRE1fRkxUQ1IyX0pPVlJJRSk7CkBAIC0yNTk4LDcgKzI1OTgsNyBAQAogCiAgIC8qIENoZWNrIERGU0RNIGZpbHRlciBzdGF0ZSAqLwogICBpZigoaGRmc2RtX2ZpbHRlci0+U3RhdGUgIT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9JTkopICYmIFwKLSAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlICE9IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHX0lOSikpCisgICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgIT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUdfSU5KKSkKICAgewogICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CkBAIC0yNjQ4LDE5ICsyNjQ4LDE5IEBACiAgIH0KICAgLyogQ2hlY2sgcGFyYW1ldGVycyBjb21wYXRpYmlsaXR5ICovCiAgIGVsc2UgaWYoKGhkZnNkbV9maWx0ZXItPkluamVjdGVkVHJpZ2dlciA9PSBERlNETV9GSUxURVJfU1dfVFJJR0dFUikgJiYgXAotICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5oZG1hSW5qLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkgJiYgXAotICAgICAgICAgIChMZW5ndGggPiBoZGZzZG1fZmlsdGVyLT5JbmpDb252UmVtYWluaW5nKSkKKyAgICAgICAgICAgKGhkZnNkbV9maWx0ZXItPmhkbWFJbmotPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKSAmJiBcCisgICAgICAgICAgIChMZW5ndGggPiBoZGZzZG1fZmlsdGVyLT5JbmpDb252UmVtYWluaW5nKSkKICAgewogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQogICBlbHNlIGlmKChoZGZzZG1fZmlsdGVyLT5JbmplY3RlZFRyaWdnZXIgPT0gREZTRE1fRklMVEVSX1NXX1RSSUdHRVIpICYmIFwKLSAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+aGRtYUluai0+SW5pdC5Nb2RlID09IERNQV9DSVJDVUxBUikpCisgICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5oZG1hSW5qLT5Jbml0Lk1vZGUgPT0gRE1BX0NJUkNVTEFSKSkKICAgewogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQogICAvKiBDaGVjayBERlNETSBmaWx0ZXIgc3RhdGUgKi8KICAgZWxzZSBpZigoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUFEWSkgfHwgXAotICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFRykpCisgICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFRykpCiAgIHsKICAgICAvKiBTZXQgY2FsbGJhY2tzIG9uIERNQSBoYW5kbGVyICovCiAgICAgaGRmc2RtX2ZpbHRlci0+aGRtYUluai0+WGZlckNwbHRDYWxsYmFjayA9IERGU0RNX0RNQUluamVjdGVkQ29udkNwbHQ7CkBAIC0yNjcwLDcgKzI2NzAsNyBAQAogCiAgICAgLyogU3RhcnQgRE1BIGluIGludGVycnVwdCBtb2RlICovCiAgICAgaWYoSEFMX0RNQV9TdGFydF9JVChoZGZzZG1fZmlsdGVyLT5oZG1hSW5qLCAodWludDMyX3QpJmhkZnNkbV9maWx0ZXItPkluc3RhbmNlLT5GTFRKREFUQVIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgIHsKICAgICAgIC8qIFNldCBERlNETSBmaWx0ZXIgaW4gZXJyb3Igc3RhdGUgKi8KICAgICAgIGhkZnNkbV9maWx0ZXItPlN0YXRlID0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9FUlJPUjsKQEAgLTI3MjMsMTkgKzI3MjMsMTkgQEAKICAgfQogICAvKiBDaGVjayBwYXJhbWV0ZXJzIGNvbXBhdGliaWxpdHkgKi8KICAgZWxzZSBpZigoaGRmc2RtX2ZpbHRlci0+SW5qZWN0ZWRUcmlnZ2VyID09IERGU0RNX0ZJTFRFUl9TV19UUklHR0VSKSAmJiBcCi0gICAgICAgICAgKGhkZnNkbV9maWx0ZXItPmhkbWFJbmotPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKSAmJiBcCi0gICAgICAgICAgKExlbmd0aCA+IGhkZnNkbV9maWx0ZXItPkluakNvbnZSZW1haW5pbmcpKQorICAgICAgICAgICAoaGRmc2RtX2ZpbHRlci0+aGRtYUluai0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpICYmIFwKKyAgICAgICAgICAgKExlbmd0aCA+IGhkZnNkbV9maWx0ZXItPkluakNvbnZSZW1haW5pbmcpKQogICB7CiAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAgIGVsc2UgaWYoKGhkZnNkbV9maWx0ZXItPkluamVjdGVkVHJpZ2dlciA9PSBERlNETV9GSUxURVJfU1dfVFJJR0dFUikgJiYgXAotICAgICAgICAgIChoZGZzZG1fZmlsdGVyLT5oZG1hSW5qLT5Jbml0Lk1vZGUgPT0gRE1BX0NJUkNVTEFSKSkKKyAgICAgICAgICAgKGhkZnNkbV9maWx0ZXItPmhkbWFJbmotPkluaXQuTW9kZSA9PSBETUFfQ0lSQ1VMQVIpKQogICB7CiAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CiAgIC8qIENoZWNrIERGU0RNIGZpbHRlciBzdGF0ZSAqLwogICBlbHNlIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFQURZKSB8fCBcCi0gICAgICAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHKSkKKyAgICAgICAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHKSkKICAgewogICAgIC8qIFNldCBjYWxsYmFja3Mgb24gRE1BIGhhbmRsZXIgKi8KICAgICBoZGZzZG1fZmlsdGVyLT5oZG1hSW5qLT5YZmVyQ3BsdENhbGxiYWNrID0gREZTRE1fRE1BSW5qZWN0ZWRDb252Q3BsdDsKQEAgLTI3NDUsNyArMjc0NSw3IEBACiAKICAgICAvKiBTdGFydCBETUEgaW4gaW50ZXJydXB0IG1vZGUgKi8KICAgICBpZihIQUxfRE1BX1N0YXJ0X0lUKGhkZnNkbV9maWx0ZXItPmhkbWFJbmosICh1aW50MzJfdCkoJmhkZnNkbV9maWx0ZXItPkluc3RhbmNlLT5GTFRKREFUQVIpICsgMlUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQorICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgcERhdGEsIExlbmd0aCkgIT0gSEFMX09LKQogICAgIHsKICAgICAgIC8qIFNldCBERlNETSBmaWx0ZXIgaW4gZXJyb3Igc3RhdGUgKi8KICAgICAgIGhkZnNkbV9maWx0ZXItPlN0YXRlID0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9FUlJPUjsKQEAgLTI3ODAsNyArMjc4MCw3IEBACiAKICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0lOSikgJiYgXAotICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgIT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUdfSU5KKSkKKyAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSAhPSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFR19JTkopKQogICB7CiAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKQEAgLTI4NTYsNyArMjg1Niw3IEBACiAKICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFU0VUKSB8fCBcCi0gICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0VSUk9SKSkKKyAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0VSUk9SKSkKICAgewogICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CkBAIC0yODk4LDcgKzI4OTgsNyBAQAogCiAgIC8qIENoZWNrIERGU0RNIGZpbHRlciBzdGF0ZSAqLwogICBpZigoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRVNFVCkgfHwgXAotICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9FUlJPUikpCisgICAgICAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9FUlJPUikpCiAgIHsKICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCiAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwpAQCAtMjk0MCw3ICsyOTQwLDcgQEAKIAogICAvKiBDaGVjayBERlNETSBmaWx0ZXIgc3RhdGUgKi8KICAgaWYoKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVTRVQpIHx8IFwKLSAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfRVJST1IpKQorICAgICAgKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfRVJST1IpKQogICB7CiAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLwogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKQEAgLTI5NzEsNyArMjk3MSw3IEBACiAKICAgLyogQ2hlY2sgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFU0VUKSB8fCBcCi0gICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0VSUk9SKSkKKyAgICAgIChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0VSUk9SKSkKICAgewogICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CkBAIC0zMTEzLDcgKzMxMTMsNyBAQAogCiAgIC8qIENoZWNrIGlmIG92ZXJydW4gb2NjdXJzIGR1cmluZyByZWd1bGFyIGNvbnZlcnNpb24gKi8KICAgaWYoKCh0ZW1wX2ZsdGlzciAmIERGU0RNX0ZMVElTUl9ST1ZSRikgIT0gMFUpICYmIFwKLSAgICAgKCh0ZW1wX2ZsdGNyMiAmIERGU0RNX0ZMVENSMl9ST1ZSSUUpICE9IDBVKSkKKyAgICAgICgodGVtcF9mbHRjcjIgJiBERlNETV9GTFRDUjJfUk9WUklFKSAhPSAwVSkpCiAgIHsKICAgICAvKiBDbGVhciByZWd1bGFyIG92ZXJydW4gZmxhZyAqLwogICAgIGhkZnNkbV9maWx0ZXItPkluc3RhbmNlLT5GTFRJQ1IgPSBERlNETV9GTFRJQ1JfQ0xSUk9WUkY7CkBAIC0zMTMwLDcgKzMxMzAsNyBAQAogICB9CiAgIC8qIENoZWNrIGlmIG92ZXJydW4gb2NjdXJzIGR1cmluZyBpbmplY3RlZCBjb252ZXJzaW9uICovCiAgIGVsc2UgaWYoKCh0ZW1wX2ZsdGlzciAmIERGU0RNX0ZMVElTUl9KT1ZSRikgIT0gMFUpICYmIFwKLSAgICAgICAgICAoKHRlbXBfZmx0Y3IyICYgREZTRE1fRkxUQ1IyX0pPVlJJRSkgIT0gMFUpKQorICAgICAgICAgICAoKHRlbXBfZmx0Y3IyICYgREZTRE1fRkxUQ1IyX0pPVlJJRSkgIT0gMFUpKQogICB7CiAgICAgLyogQ2xlYXIgaW5qZWN0ZWQgb3ZlcnJ1biBmbGFnICovCiAgICAgaGRmc2RtX2ZpbHRlci0+SW5zdGFuY2UtPkZMVElDUiA9IERGU0RNX0ZMVElDUl9DTFJKT1ZSRjsKQEAgLTMxNDcsNyArMzE0Nyw3IEBACiAgIH0KICAgLyogQ2hlY2sgaWYgZW5kIG9mIHJlZ3VsYXIgY29udmVyc2lvbiAqLwogICBlbHNlIGlmKCgodGVtcF9mbHRpc3IgJiBERlNETV9GTFRJU1JfUkVPQ0YpICE9IDBVKSAmJiBcCi0gICAgICAgICAgKCh0ZW1wX2ZsdGNyMiAmIERGU0RNX0ZMVENSMl9SRU9DSUUpICE9IDBVKSkKKyAgICAgICAgICAgKCh0ZW1wX2ZsdGNyMiAmIERGU0RNX0ZMVENSMl9SRU9DSUUpICE9IDBVKSkKICAgewogICAgIC8qIENhbGwgcmVndWxhciBjb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfREZTRE1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC0zMTU4LDcgKzMxNTgsNyBAQAogCiAgICAgLyogRW5kIG9mIGNvbnZlcnNpb24gaWYgbW9kZSBpcyBub3QgY29udGludW91cyBhbmQgc29mdHdhcmUgdHJpZ2dlciAqLwogICAgIGlmKChoZGZzZG1fZmlsdGVyLT5SZWd1bGFyQ29udE1vZGUgPT0gREZTRE1fQ09OVElOVU9VU19DT05WX09GRikgJiYgXAotICAgICAgIChoZGZzZG1fZmlsdGVyLT5SZWd1bGFyVHJpZ2dlciA9PSBERlNETV9GSUxURVJfU1dfVFJJR0dFUikpCisgICAgICAgIChoZGZzZG1fZmlsdGVyLT5SZWd1bGFyVHJpZ2dlciA9PSBERlNETV9GSUxURVJfU1dfVFJJR0dFUikpCiAgICAgewogICAgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciByZWd1bGFyIGNvbnZlcnNpb25zICovCiAgICAgICBoZGZzZG1fZmlsdGVyLT5JbnN0YW5jZS0+RkxUQ1IyICY9IH4oREZTRE1fRkxUQ1IyX1JFT0NJRSk7CkBAIC0zMTcwLDcgKzMxNzAsNyBAQAogICB9CiAgIC8qIENoZWNrIGlmIGVuZCBvZiBpbmplY3RlZCBjb252ZXJzaW9uICovCiAgIGVsc2UgaWYoKCh0ZW1wX2ZsdGlzciAmIERGU0RNX0ZMVElTUl9KRU9DRikgIT0gMFUpICYmIFwKLSAgICAgICAgICAoKHRlbXBfZmx0Y3IyICYgREZTRE1fRkxUQ1IyX0pFT0NJRSkgIT0gMFUpKQorICAgICAgICAgICAoKHRlbXBfZmx0Y3IyICYgREZTRE1fRkxUQ1IyX0pFT0NJRSkgIT0gMFUpKQogICB7CiAgICAgLyogQ2FsbCBpbmplY3RlZCBjb252ZXJzaW9uIGNvbXBsZXRlIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfREZTRE1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCkBAIC0zMTk1LDEyICszMTk1LDEyIEBACiAgICAgICB9CiAgICAgICAvKiBlbmQgb2YgaW5qZWN0ZWQgc2VxdWVuY2UsIHJlc2V0IHRoZSB2YWx1ZSAqLwogICAgICAgaGRmc2RtX2ZpbHRlci0+SW5qQ29udlJlbWFpbmluZyA9IChoZGZzZG1fZmlsdGVyLT5JbmplY3RlZFNjYW5Nb2RlID09IEVOQUJMRSkgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkZnNkbV9maWx0ZXItPkluamVjdGVkQ2hhbm5lbHNOYnIgOiAxVTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGZzZG1fZmlsdGVyLT5JbmplY3RlZENoYW5uZWxzTmJyIDogMVU7CiAgICAgfQogICB9CiAgIC8qIENoZWNrIGlmIGFuYWxvZyB3YXRjaGRvZyBvY2N1cnMgKi8KICAgZWxzZSBpZigoKHRlbXBfZmx0aXNyICYgREZTRE1fRkxUSVNSX0FXREYpICE9IDBVKSAmJiBcCi0gICAgICAgICAgKCh0ZW1wX2ZsdGNyMiAmIERGU0RNX0ZMVENSMl9BV0RJRSkgIT0gMFUpKQorICAgICAgICAgICAoKHRlbXBfZmx0Y3IyICYgREZTRE1fRkxUQ1IyX0FXRElFKSAhPSAwVSkpCiAgIHsKICAgICB1aW50MzJfdCByZWc7CiAgICAgdWludDMyX3QgdGhyZXNob2xkOwpAQCAtMzIzMiw4ICszMjMyLDggQEAKICAgfQogICAvKiBDaGVjayBpZiBjbG9jayBhYnNlbmNlIG9jY3VycyAqLwogICBlbHNlIGlmKChoZGZzZG1fZmlsdGVyLT5JbnN0YW5jZSA9PSBmaWx0ZXIwSW5zdGFuY2UpICYmIFwKLSAgICAgICAgICgodGVtcF9mbHRpc3IgJiBERlNETV9GTFRJU1JfQ0tBQkYpICE9IDBVKSAmJiBcCi0gICAgICAgICAoKHRlbXBfZmx0Y3IyICYgREZTRE1fRkxUQ1IyX0NLQUJJRSkgIT0gMFUpKQorICAgICAgICAgICAoKHRlbXBfZmx0aXNyICYgREZTRE1fRkxUSVNSX0NLQUJGKSAhPSAwVSkgJiYgXAorICAgICAgICAgICAoKHRlbXBfZmx0Y3IyICYgREZTRE1fRkxUQ1IyX0NLQUJJRSkgIT0gMFUpKQogICB7CiAgICAgdWludDMyX3QgcmVnOwogICAgIHVpbnQzMl90IGNoYW5uZWwgPSAwOwpAQCAtMzI2NSw4ICszMjY1LDggQEAKICAgfQogICAvKiBDaGVjayBpZiBzaG9ydCBjaXJjdWl0IGRldGVjdGlvbiBvY2N1cnMgKi8KICAgZWxzZSBpZigoaGRmc2RtX2ZpbHRlci0+SW5zdGFuY2UgPT0gZmlsdGVyMEluc3RhbmNlKSAmJiBcCi0gICAgICAgICAoKHRlbXBfZmx0aXNyICYgREZTRE1fRkxUSVNSX1NDREYpICE9IDBVKSAmJiBcCi0gICAgICAgICAoKHRlbXBfZmx0Y3IyICYgREZTRE1fRkxUQ1IyX1NDRElFKSAhPSAwVSkpCisgICAgICAgICAgICgodGVtcF9mbHRpc3IgJiBERlNETV9GTFRJU1JfU0NERikgIT0gMFUpICYmIFwKKyAgICAgICAgICAgKCh0ZW1wX2ZsdGNyMiAmIERGU0RNX0ZMVENSMl9TQ0RJRSkgIT0gMFUpKQogICB7CiAgICAgdWludDMyX3QgcmVnOwogICAgIHVpbnQzMl90IGNoYW5uZWwgPSAwOwpAQCAtMzYwOSw3ICszNjA5LDcgQEAKICAgfQogICBlbHNlIC8qIERGU0RNMV9DaGFubmVsNyAqLwogICB7Ci0gICAgICBjaGFubmVsID0gNzsKKyAgICBjaGFubmVsID0gNzsKICAgfQogCiAgIHJldHVybiBjaGFubmVsOwpAQCAtMzY0OCwxMiArMzY0OCwxMiBAQAogICAgICAgfQogICAgICAgLyogVXBkYXRlIHJlbWFpbmluZyBpbmplY3RlZCBjb252ZXJzaW9ucyAqLwogICAgICAgaGRmc2RtX2ZpbHRlci0+SW5qQ29udlJlbWFpbmluZyA9IChoZGZzZG1fZmlsdGVyLT5JbmplY3RlZFNjYW5Nb2RlID09IEVOQUJMRSkgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkZnNkbV9maWx0ZXItPkluamVjdGVkQ2hhbm5lbHNOYnIgOiAxVTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGZzZG1fZmlsdGVyLT5JbmplY3RlZENoYW5uZWxzTmJyIDogMVU7CiAgICAgfQogICB9CiAgIC8qIFVwZGF0ZSBERlNETSBmaWx0ZXIgc3RhdGUgKi8KICAgaGRmc2RtX2ZpbHRlci0+U3RhdGUgPSAoaGRmc2RtX2ZpbHRlci0+U3RhdGUgPT0gSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUFEWSkgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHIDogSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUdfSU5KOworICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHIDogSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUdfSU5KOwogfQogCiAvKioKQEAgLTM2ODQsMTIgKzM2ODQsMTIgQEAKICAgICB9CiAgICAgLyogVXBkYXRlIHJlbWFpbmluZyBpbmplY3RlZCBjb252ZXJzaW9ucyAqLwogICAgIGhkZnNkbV9maWx0ZXItPkluakNvbnZSZW1haW5pbmcgPSAoaGRmc2RtX2ZpbHRlci0+SW5qZWN0ZWRTY2FuTW9kZSA9PSBFTkFCTEUpID8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRmc2RtX2ZpbHRlci0+SW5qZWN0ZWRDaGFubmVsc05iciA6IDFVOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGZzZG1fZmlsdGVyLT5JbmplY3RlZENoYW5uZWxzTmJyIDogMVU7CiAgIH0KIAogICAvKiBVcGRhdGUgREZTRE0gZmlsdGVyIHN0YXRlICovCiAgIGhkZnNkbV9maWx0ZXItPlN0YXRlID0gKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHKSA/IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUFEWSA6IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfSU5KOworICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVBRFkgOiBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0lOSjsKIH0KIAogLyoqCkBAIC0zNzI2LDcgKzM3MjYsNyBAQAogCiAgICAgLyogSWYgcmVndWxhciBjb252ZXJzaW9uIHdhcyBpbiBwcm9ncmVzcywgcmVzdGFydCBpdCAqLwogICAgIGlmKChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFRykgJiYgXAotICAgICAgIChoZGZzZG1fZmlsdGVyLT5SZWd1bGFyVHJpZ2dlciA9PSBERlNETV9GSUxURVJfU1dfVFJJR0dFUikpCisgICAgICAgIChoZGZzZG1fZmlsdGVyLT5SZWd1bGFyVHJpZ2dlciA9PSBERlNETV9GSUxURVJfU1dfVFJJR0dFUikpCiAgICAgewogICAgICAgaGRmc2RtX2ZpbHRlci0+SW5zdGFuY2UtPkZMVENSMSB8PSBERlNETV9GTFRDUjFfUlNXU1RBUlQ7CiAgICAgfQpAQCAtMzc2NiwxOCArMzc2NiwxOCBAQAogCiAgIC8qIElmIHJlZ3VsYXIgY29udmVyc2lvbiB3YXMgaW4gcHJvZ3Jlc3MsIHJlc3RhcnQgaXQgKi8KICAgaWYoKGhkZnNkbV9maWx0ZXItPlN0YXRlID09IEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVHX0lOSikgJiYgXAotICAgICAoaGRmc2RtX2ZpbHRlci0+UmVndWxhclRyaWdnZXIgPT0gREZTRE1fRklMVEVSX1NXX1RSSUdHRVIpKQorICAgICAgKGhkZnNkbV9maWx0ZXItPlJlZ3VsYXJUcmlnZ2VyID09IERGU0RNX0ZJTFRFUl9TV19UUklHR0VSKSkKICAgewogICAgIGhkZnNkbV9maWx0ZXItPkluc3RhbmNlLT5GTFRDUjEgfD0gREZTRE1fRkxUQ1IxX1JTV1NUQVJUOwogICB9CiAKICAgLyogVXBkYXRlIHJlbWFpbmluZyBpbmplY3RlZCBjb252ZXJzaW9ucyAqLwogICBoZGZzZG1fZmlsdGVyLT5JbmpDb252UmVtYWluaW5nID0gKGhkZnNkbV9maWx0ZXItPkluamVjdGVkU2Nhbk1vZGUgPT0gRU5BQkxFKSA/IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGZzZG1fZmlsdGVyLT5JbmplY3RlZENoYW5uZWxzTmJyIDogMVU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZGZzZG1fZmlsdGVyLT5JbmplY3RlZENoYW5uZWxzTmJyIDogMVU7CiAKICAgLyogVXBkYXRlIERGU0RNIGZpbHRlciBzdGF0ZSAqLwogICBoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9IChoZGZzZG1fZmlsdGVyLT5TdGF0ZSA9PSBIQUxfREZTRE1fRklMVEVSX1NUQVRFX0lOSikgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEhBTF9ERlNETV9GSUxURVJfU1RBVEVfUkVBRFkgOiBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBIQUxfREZTRE1fRklMVEVSX1NUQVRFX1JFQURZIDogSEFMX0RGU0RNX0ZJTFRFUl9TVEFURV9SRUc7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfZG1hLmMgYi9TcmMvc3RtMzJoN3h4X2hhbF9kbWEuYwppbmRleCBhZWFiYzk1Li42YThiY2U1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9kbWEuYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF9kbWEuYwpAQCAtNTI5LDcgKzUyOSw5IEBACiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCisjaWYgZGVmaW5lZCAoQkRNQTEpIC8qIE5vIERNQU1VWCBhdmFpbGFibGUgZm9yIEJETUExIGF2YWlsYWJsZSBvbiAgU1RNMzJIN0F4L0J4IGRldmljZXMgb25seSAqLwogICBpZihJU19ETUFfRE1BTVVYX0FMTF9JTlNUQU5DRShoZG1hLT5JbnN0YW5jZSkgIT0gMFUpIC8qIE5vIERNQU1VWCBhdmFpbGFibGUgZm9yIEJETUExICovCisjZW5kaWYgLyogQkRNQTEgKi8KICAgewogICAgIC8qIEluaXRpYWxpemUgcGFyYW1ldGVycyBmb3IgRE1BTVVYIGNoYW5uZWwgOgogICAgIERNQW11eENoYW5uZWwsIERNQW11eENoYW5uZWxTdGF0dXMgYW5kIERNQW11eENoYW5uZWxTdGF0dXNNYXNrICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9kdHMuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2R0cy5jCmluZGV4IDExOTYzMTcuLmUyNzc0ZDEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX2R0cy5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2R0cy5jCkBAIC03Niw2ICs3NiwxMCBAQAogICovCiAjZGVmaW5lIFRTX1RJTUVPVVRfTVMgICAgICg1VUwpCiAKKy8qKgorICAqIEB9CisgICovCisKIC8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX2V0aC5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfZXRoLmMKaW5kZXggYTM0ZDQ0ZS4uMDMzNzM5ZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfZXRoLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfZXRoLmMKQEAgLTc5MSwxOSArNzkxLDE5IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfRVRIX1N0YXJ0X0lUKEVUSF9IYW5kbGVUeXBlRGVmICpoZXRoKQogewotICB1aW50MzJfdCBkZXNjaW5kZXggPSAwLCBjb3VudGVyOwotICBFVEhfRE1BRGVzY1R5cGVEZWYgKmRtYXJ4ZGVzYyA9IChFVEhfRE1BRGVzY1R5cGVEZWYgKiloZXRoLT5SeERlc2NMaXN0LlJ4RGVzY1tkZXNjaW5kZXhdOworICB1aW50MzJfdCBkZXNjaW5kZXg7CisKKyAgRVRIX0RNQURlc2NUeXBlRGVmICpkbWFyeGRlc2M7CiAKICAgaWYoaGV0aC0+Z1N0YXRlID09IEhBTF9FVEhfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBoZXRoLT5nU3RhdGUgPSBIQUxfRVRIX1NUQVRFX0JVU1k7CiAKICAgICAvKiBTZXQgSU9DIGJpdCB0byBhbGwgUnggZGVzY3JpcHRvcnMgKi8KLSAgICBmb3IoY291bnRlcj0gMDsgY291bnRlciA8ICh1aW50MzJfdClFVEhfUlhfREVTQ19DTlQ7IGNvdW50ZXIrKykKKyAgICBmb3IoZGVzY2luZGV4ID0gMDsgZGVzY2luZGV4IDwgKHVpbnQzMl90KUVUSF9SWF9ERVNDX0NOVDsgZGVzY2luZGV4KyspCiAgICAgewotICAgICAgU0VUX0JJVChkbWFyeGRlc2MtPkRFU0MzLCBFVEhfRE1BUlhOREVTQ1JGX0lPQyk7Ci0gICAgICBJTkNSX1JYX0RFU0NfSU5ERVgoZGVzY2luZGV4LCAxVSk7CiAgICAgICBkbWFyeGRlc2MgPSAoRVRIX0RNQURlc2NUeXBlRGVmICopaGV0aC0+UnhEZXNjTGlzdC5SeERlc2NbZGVzY2luZGV4XTsKKyAgICAgIFNFVF9CSVQoZG1hcnhkZXNjLT5ERVNDMywgRVRIX0RNQVJYTkRFU0NSRl9JT0MpOwogICAgIH0KIAogICAgIC8qIHNhdmUgSVQgbW9kZSB0byBFVEggSGFuZGxlICovCkBAIC04MjcsOSArODI3LDYgQEAKICAgICAvKiBDbGVhciBUeCBhbmQgUnggcHJvY2VzcyBzdG9wcGVkIGZsYWdzICovCiAgICAgaGV0aC0+SW5zdGFuY2UtPkRNQUNTUiB8PSAoRVRIX0RNQUNTUl9UUFMgfCBFVEhfRE1BQ1NSX1JQUyk7CiAKLSAgICBoZXRoLT5nU3RhdGUgPSBIQUxfRVRIX1NUQVRFX1JFQURZOwotICAgIGhldGgtPlJ4U3RhdGUgPSBIQUxfRVRIX1NUQVRFX0JVU1lfUlg7Ci0KICAgICAvKiBFbmFibGUgRVRIIERNQSBpbnRlcnJ1cHRzOgogICAgIC0gVHggY29tcGxldGUgaW50ZXJydXB0CiAgICAgLSBSeCBjb21wbGV0ZSBpbnRlcnJ1cHQKQEAgLTgzOCw2ICs4MzUsOSBAQAogICAgIF9fSEFMX0VUSF9ETUFfRU5BQkxFX0lUKGhldGgsIChFVEhfRE1BQ0lFUl9OSUUgfCBFVEhfRE1BQ0lFUl9SSUUgfCBFVEhfRE1BQ0lFUl9USUUgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVRIX0RNQUNJRVJfRkJFRSB8IEVUSF9ETUFDSUVSX0FJRSkpOwogCisgICAgaGV0aC0+Z1N0YXRlID0gSEFMX0VUSF9TVEFURV9SRUFEWTsKKyAgICBoZXRoLT5SeFN0YXRlID0gSEFMX0VUSF9TVEFURV9CVVNZX1JYOworCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQogICBlbHNlCkBAIC04OTQsOCArODk0LDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9FVEhfU3RvcF9JVChFVEhfSGFuZGxlVHlwZURlZiAqaGV0aCkKIHsKLSAgRVRIX0RNQURlc2NUeXBlRGVmICpkbWFyeGRlc2MgPSAoRVRIX0RNQURlc2NUeXBlRGVmICopaGV0aC0+UnhEZXNjTGlzdC5SeERlc2NbMF07Ci0gIHVpbnQzMl90IGluZGV4OworICBFVEhfRE1BRGVzY1R5cGVEZWYgKmRtYXJ4ZGVzYzsKKyAgdWludDMyX3QgZGVzY2luZGV4OwogCiAgIGlmKGhldGgtPmdTdGF0ZSAhPSBIQUxfRVRIX1NUQVRFX1JFU0VUKQogICB7CkBAIC05MDQsOCArOTA0LDExIEBACiAKICAgICAvKiBEaXNhYmxlIGludHJydXB0czoKICAgICAtIFR4IGNvbXBsZXRlIGludGVycnVwdAotICAgIC0gUnggY29tcGxldGUgaW50ZXJydXB0ICAgICAqLwotICAgIF9fSEFMX0VUSF9ETUFfRElTQUJMRV9JVChoZXRoLCAoRVRIX0RNQV9OT1JNQUxfSVQgfCBFVEhfRE1BX1JYX0lUIHwgRVRIX0RNQV9UWF9JVCkpOworICAgIC0gUnggY29tcGxldGUgaW50ZXJydXB0CisgICAgLSBGYXRhbCBidXMgaW50ZXJydXB0CisgICAgKi8KKyAgICBfX0hBTF9FVEhfRE1BX0RJU0FCTEVfSVQoaGV0aCwgKEVUSF9ETUFDSUVSX05JRSB8IEVUSF9ETUFDSUVSX1JJRSB8IEVUSF9ETUFDSUVSX1RJRSAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVEhfRE1BQ0lFUl9GQkVFIHwgRVRIX0RNQUNJRVJfQUlFKSk7CiAKICAgICAvKiBEaXNhYmxlIHRoZSBETUEgdHJhbnNtaXNzaW9uICovCiAgICAgQ0xFQVJfQklUKGhldGgtPkluc3RhbmNlLT5ETUFDVENSLCBFVEhfRE1BQ1RDUl9TVCk7CkBAIC05MjMsOCArOTI2LDkgQEAKICAgICBDTEVBUl9CSVQoaGV0aC0+SW5zdGFuY2UtPk1BQ0NSLCBFVEhfTUFDQ1JfVEUpOwogCiAgICAgLyogQ2xlYXIgSU9DIGJpdCB0byBhbGwgUnggZGVzY3JpcHRvcnMgKi8KLSAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8ICh1aW50MzJfdClFVEhfUlhfREVTQ19DTlQ7IGluZGV4KyspCisgICAgZm9yKGRlc2NpbmRleCA9IDA7IGRlc2NpbmRleCA8ICh1aW50MzJfdClFVEhfUlhfREVTQ19DTlQ7IGRlc2NpbmRleCsrKQogICAgIHsKKyAgICAgIGRtYXJ4ZGVzYyA9IChFVEhfRE1BRGVzY1R5cGVEZWYgKiloZXRoLT5SeERlc2NMaXN0LlJ4RGVzY1tkZXNjaW5kZXhdOwogICAgICAgQ0xFQVJfQklUKGRtYXJ4ZGVzYy0+REVTQzMsIEVUSF9ETUFSWE5ERVNDUkZfSU9DKTsKICAgICB9CiAKQEAgLTEwMDEsMTUgKzEwMDUsMTIgQEAKICAgICAgICAgaWYoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0ICkgPiBUaW1lb3V0KSB8fCAoVGltZW91dCA9PSAwVSkpCiAgICAgICAgIHsKICAgICAgICAgICBoZXRoLT5FcnJvckNvZGUgfD0gSEFMX0VUSF9FUlJPUl9USU1FT1VUOwotICAgICAgICAgIGhldGgtPmdTdGF0ZSA9IEhBTF9FVEhfU1RBVEVfUkVBRFk7CisgICAgICAgICAgaGV0aC0+Z1N0YXRlID0gSEFMX0VUSF9TVEFURV9FUlJPUjsKICAgICAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCi0gICAgLyogU2V0IEVUSCBIQUwgU3RhdGUgdG8gUmVhZHkgKi8KLSAgICBoZXRoLT5nU3RhdGUgPSBIQUxfRVRIX1NUQVRFX1JFQURZOwotCiAgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KQEAgLTEwMzAsNiArMTAzMSw3IEBACiB7CiAgIGlmKHBUeENvbmZpZyA9PSBOVUxMKQogICB7CisgICAgaGV0aC0+RXJyb3JDb2RlIHw9IEhBTF9FVEhfRVJST1JfUEFSQU07CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCkBAIC0xMDM4LDcgKzEwNDAsNyBAQAogICAgIC8qIENvbmZpZyBETUEgVHggZGVzY3JpcHRvciBieSBUeCBQYWNrZXQgaW5mbyAqLwogICAgIGlmIChFVEhfUHJlcGFyZV9UeF9EZXNjcmlwdG9ycyhoZXRoLCBwVHhDb25maWcsIDEpICE9IEhBTF9FVEhfRVJST1JfTk9ORSkKICAgICB7Ci0gICAgICBoZXRoLT5FcnJvckNvZGUgPSBIQUxfRVRIX0VSUk9SX0JVU1k7CisgICAgICBoZXRoLT5FcnJvckNvZGUgfD0gSEFMX0VUSF9FUlJPUl9CVVNZOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAKQEAgLTExNDgsNiArMTE1MCw4IEBACiAgIC8qIEJ1aWxkIERlc2NyaXB0b3JzIGlmIGFuIGluY29tcGxldGUgUGFja2V0IGlzIHJlY2VpdmVkICovCiAgIGlmKGFwcGRlc2NjbnQgPiAwVSkKICAgeworICAgIGRtYXJ4ZGVzY2xpc3QtPkN1clJ4RGVzYyA9IGRlc2NpZHg7CisgICAgZG1hcnhkZXNjbGlzdC0+Rmlyc3RBcHBEZXNjID0gZmlyc3RhcHBkZXNjaWR4OwogICAgIGRlc2NpZHggPSBmaXJzdGFwcGRlc2NpZHg7CiAgICAgZG1hcnhkZXNjID0gKEVUSF9ETUFEZXNjVHlwZURlZiAqKWRtYXJ4ZGVzY2xpc3QtPlJ4RGVzY1tkZXNjaWR4XTsKIApAQCAtMTE2OCwxMiArMTE3MiwxNyBAQAogICAgICAgewogICAgICAgICBTRVRfQklUKGRtYXJ4ZGVzYy0+REVTQzMsIEVUSF9ETUFSWE5ERVNDUkZfSU9DKTsKICAgICAgIH0KLQotICAgICAgLyogSW5jcmVtZW50IHJ4IGRlc2NyaXB0b3IgaW5kZXggKi8KLSAgICAgIElOQ1JfUlhfREVTQ19JTkRFWChkZXNjaWR4LCAxVSk7Ci0gICAgICAvKiBHZXQgZGVzY3JpcHRvciBhZGRyZXNzICovCi0gICAgICBkbWFyeGRlc2MgPSAoRVRIX0RNQURlc2NUeXBlRGVmICopZG1hcnhkZXNjbGlzdC0+UnhEZXNjW2Rlc2NpZHhdOworICAgICAgaWYoZGVzY3NjYW5jbnQgPCAoYXBwZGVzY2NudCAtIDFVKSkKKyAgICAgIHsKKyAgICAgICAgLyogSW5jcmVtZW50IHJ4IGRlc2NyaXB0b3IgaW5kZXggKi8KKyAgICAgICAgSU5DUl9SWF9ERVNDX0lOREVYKGRlc2NpZHgsIDFVKTsKKyAgICAgICAgLyogR2V0IGRlc2NyaXB0b3IgYWRkcmVzcyAqLworICAgICAgICBkbWFyeGRlc2MgPSAoRVRIX0RNQURlc2NUeXBlRGVmICopZG1hcnhkZXNjbGlzdC0+UnhEZXNjW2Rlc2NpZHhdOworICAgICAgfQogICAgIH0KKworICAgIC8qIFNldCB0aGUgVGFpbCBwb2ludGVyIGFkZHJlc3MgdG8gdGhlIGxhc3QgcnggZGVzY3JpcHRvciBob2xkIGJ5IHRoZSBhcHAgKi8KKyAgICBXUklURV9SRUcoaGV0aC0+SW5zdGFuY2UtPkRNQUNSRFRQUiwgKHVpbnQzMl90KWRtYXJ4ZGVzYyk7CiAgIH0KIAogICAvKiBGaWxsIGluZm9ybWF0aW9uIHRvIFJ4IGRlc2NyaXB0b3JzIGxpc3Q6IE5vIHJlY2VpdmVkIFBhY2tldCAqLwpAQCAtMTIzNCw3ICsxMjQzLDcgQEAKICAgICBpZihkbWFyeGRlc2MtPkJhY2t1cEFkZHIxICE9IDBVKQogICAgIHsKICAgICAgIC8qIFBvaW50IHRvIG5leHQgYnVmZmVyICovCi0gICAgICByeGJ1ZmYgPSAoc3RydWN0IF9fRVRIX0J1ZmZlclR5cGVEZWYgKilyeGJ1ZmYtPm5leHQ7CisgICAgICByeGJ1ZmYgPSByeGJ1ZmYtPm5leHQ7CiAgICAgICAvKiBHZXQgQWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgYnVmZmVyIGFkZHJlc3MgKi8KICAgICAgIHJ4YnVmZi0+YnVmZmVyID0gKHVpbnQ4X3QgKikgZG1hcnhkZXNjLT5CYWNrdXBBZGRyMTsKICAgICAgIHJ4YnVmZi0+bGVuID0gIGhldGgtPkluaXQuUnhCdWZmTGVuOwpAQCAtMTI1Miw3ICsxMjYxLDcgQEAKICAgICBkbWFyeGRlc2MgPSAoRVRIX0RNQURlc2NUeXBlRGVmICopZG1hcnhkZXNjbGlzdC0+UnhEZXNjW2Rlc2NpZHhdOwogCiAgICAgLyogUG9pbnQgdG8gbmV4dCBidWZmZXIgKi8KLSAgICByeGJ1ZmYgPSAoc3RydWN0IF9fRVRIX0J1ZmZlclR5cGVEZWYgKilyeGJ1ZmYtPm5leHQ7CisgICAgcnhidWZmID0gcnhidWZmLT5uZXh0OwogICB9CiAKICAgLyogbGFzdCBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICovCkBAIC0xMjcyLDcgKzEyODEsNyBAQAogICAgIC8qIEdldCB0aGUgTGVuZ3RoIG9mIHRoZSBmaXJzdCBidWZmZXIgYWRkcmVzcyAqLwogICAgIHJ4YnVmZi0+bGVuID0gaGV0aC0+SW5pdC5SeEJ1ZmZMZW47CiAgICAgLyogUG9pbnQgdG8gbmV4dCBidWZmZXIgKi8KLSAgICByeGJ1ZmYgPSAoc3RydWN0IF9fRVRIX0J1ZmZlclR5cGVEZWYgKilyeGJ1ZmYtPm5leHQ7CisgICAgcnhidWZmID0gcnhidWZmLT5uZXh0OwogICAgIC8qIEdldCB0aGUgQWRkcmVzcyB0aGUgTGVuZ3RoIG9mIHRoZSBzZWNvbmQgYnVmZmVyIGFkZHJlc3MgKi8KICAgICByeGJ1ZmYtPmJ1ZmZlciA9ICh1aW50OF90ICopIGRtYXJ4ZGVzYy0+QmFja3VwQWRkcjE7CiAgICAgcnhidWZmLT5sZW4gPSAgbGFzdGRlc2NsZW4gLSAoaGV0aC0+SW5pdC5SeEJ1ZmZMZW4pOwpAQCAtMTQzNSw3ICsxNDQ0LDcgQEAKICAgICAgIFNFVF9CSVQoZG1hcnhkZXNjLT5ERVNDMywgRVRIX0RNQVJYTkRFU0NSRl9JT0MpOwogICAgIH0KIAotICAgIGlmKGRlc2NzY2FuIDwgKGRtYXJ4ZGVzY2xpc3QtPkFwcERlc2NOYnIgLSAxVSkpCisgICAgaWYoZGVzY3NjYW4gPCAodG90YWxhcHBkZXNjbmJyIC0gMVUpKQogICAgIHsKICAgICAgIC8qIEluY3JlbWVudCByeCBkZXNjcmlwdG9yIGluZGV4ICovCiAgICAgICBJTkNSX1JYX0RFU0NfSU5ERVgoZGVzY2luZGV4LCAxVSk7CkBAIC0xNDUwLDYgKzE0NTksOSBAQAogICAvKiByZXNldCB0aGUgQXBwbGljYXRpb24gZGVzYyBudW1iZXIgKi8KICAgV1JJVEVfUkVHKGRtYXJ4ZGVzY2xpc3QtPkFwcERlc2NOYnIsIDApOwogCisgIC8qICByZXNldCB0aGUgYXBwbGljYXRpb24gY29udGV4dCBkZXNjcmlwdG9yICovCisgIFdSSVRFX1JFRyhoZXRoLT5SeERlc2NMaXN0LkFwcENvbnRleHREZXNjLCAwKTsKKwogICByZXR1cm4gSEFMX09LOwogfQogCkBAIC0yMzkwLDYgKzI0MDIsMTAgQEAKICAgKiBAfQogICAqLwogCisvKiogQGFkZHRvZ3JvdXAgRVRIX1ByaXZhdGVfRnVuY3Rpb25zICAgRVRIIFByaXZhdGUgRnVuY3Rpb25zCisgICogQHsKKyAgKi8KKwogc3RhdGljIHZvaWQgRVRIX1NldE1BQ0NvbmZpZyhFVEhfSGFuZGxlVHlwZURlZiAqaGV0aCwgIEVUSF9NQUNDb25maWdUeXBlRGVmICptYWNjb25mKQogewogICB1aW50MzJfdCBtYWNyZWd2YWw7CkBAIC0yNzAzLDcgKzI3MTksNyBAQAogICBXUklURV9SRUcoaGV0aC0+SW5zdGFuY2UtPkRNQUNSRExBUiwgKHVpbnQzMl90KSBoZXRoLT5Jbml0LlJ4RGVzYyk7CiAKICAgLyogU2V0IFJlY2VpdmUgRGVzY3JpcHRvciBUYWlsIHBvaW50ZXIgQWRkcmVzcyAqLwotICBXUklURV9SRUcoaGV0aC0+SW5zdGFuY2UtPkRNQUNSRFRQUiwgKCh1aW50MzJfdCkoaGV0aC0+SW5pdC5SeERlc2MgKyAoKCh1aW50MzJfdCkoRVRIX1JYX0RFU0NfQ05UIC0gMSkpKnNpemVvZihFVEhfRE1BRGVzY1R5cGVEZWYpKSkpKTsKKyAgV1JJVEVfUkVHKGhldGgtPkluc3RhbmNlLT5ETUFDUkRUUFIsICgodWludDMyX3QpKGhldGgtPkluaXQuUnhEZXNjICsgKHVpbnQzMl90KShFVEhfUlhfREVTQ19DTlQgLSAxKSkpKTsKIH0KIAogLyoqCkBAIC0yOTAwLDcgKzI5MTYsNyBAQAogICAgIGRlc2NuYnIgKz0gMVU7CiAKICAgICAvKiBHZXQgdGhlIG5leHQgVHggYnVmZmVyIGluIHRoZSBsaXN0ICovCi0gICAgdHhidWZmZXIgPSAoc3RydWN0IF9fRVRIX0J1ZmZlclR5cGVEZWYgKil0eGJ1ZmZlci0+bmV4dDsKKyAgICB0eGJ1ZmZlciA9IHR4YnVmZmVyLT5uZXh0OwogCiAgICAgLyogU2V0IGhlYWRlciBvciBidWZmZXIgMSBhZGRyZXNzICovCiAgICAgV1JJVEVfUkVHKGRtYXR4ZGVzYy0+REVTQzAsICh1aW50MzJfdCl0eGJ1ZmZlci0+YnVmZmVyKTsKQEAgLTI5MTAsNyArMjkyNiw3IEBACiAgICAgaWYgKHR4YnVmZmVyLT5uZXh0ICE9IE5VTEwpCiAgICAgewogICAgICAgLyogR2V0IHRoZSBuZXh0IFR4IGJ1ZmZlciBpbiB0aGUgbGlzdCAqLwotICAgICAgdHhidWZmZXIgPSAoc3RydWN0IF9fRVRIX0J1ZmZlclR5cGVEZWYgKil0eGJ1ZmZlci0+bmV4dDsKKyAgICAgIHR4YnVmZmVyID0gdHhidWZmZXItPm5leHQ7CiAgICAgICAvKiBTZXQgYnVmZmVyIDIgYWRkcmVzcyAqLwogICAgICAgV1JJVEVfUkVHKGRtYXR4ZGVzYy0+REVTQzEsICh1aW50MzJfdCl0eGJ1ZmZlci0+YnVmZmVyKTsKICAgICAgIC8qIFNldCBidWZmZXIgMiBMZW5ndGggKi8KQEAgLTI5ODIsNiArMjk5OCw5IEBACiB9CiAjZW5kaWYgLyogVVNFX0hBTF9FVEhfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAKKy8qKgorICAqIEB9CisgICovCiAKIC8qKgogICAqIEB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9mZGNhbi5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfZmRjYW4uYwppbmRleCBmYjRiMGZhLi4zNWI1MWI2IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9mZGNhbi5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2ZkY2FuLmMKQEAgLTE4NSw2ICsxODUsOCBAQAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmg3eHhfaGFsLmgiCiAKKyNpZiBkZWZpbmVkKEZEQ0FOMSkKKwogLyoqIEBhZGR0b2dyb3VwIFNUTTMySDd4eF9IQUxfRHJpdmVyCiAgICogQHsKICAgKi8KQEAgLTIwMiw2ICsyMDQsNyBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIEZEQ0FOX1RJTUVPVVRfVkFMVUUgMTBVCisjZGVmaW5lIEZEQ0FOX1RJTUVPVVRfQ09VTlQgNTBVCiAKICNkZWZpbmUgRkRDQU5fVFhfRVZFTlRfRklGT19NQVNLIChGRENBTl9JUl9URUZMIHwgRkRDQU5fSVJfVEVGRiB8IEZEQ0FOX0lSX1RFRlcgfCBGRENBTl9JUl9URUZOKQogI2RlZmluZSBGRENBTl9SWF9GSUZPMF9NQVNLIChGRENBTl9JUl9SRjBMIHwgRkRDQU5fSVJfUkYwRiB8IEZEQ0FOX0lSX1JGMFcgfCBGRENBTl9JUl9SRjBOKQpAQCAtMjYxOCw3ICsyNjIxLDcgQEAKICAgICB3aGlsZSAoKGhmZGNhbi0+SW5zdGFuY2UtPkNDQ1IgJiBGRENBTl9DQ0NSX0lOSVQpID09IDBVKQogICAgIHsKICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX1ZBTFVFKQorICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX0NPVU5UKQogICAgICAgewogICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwogICAgICAgICBoZmRjYW4tPkVycm9yQ29kZSB8PSBIQUxfRkRDQU5fRVJST1JfVElNRU9VVDsKQEAgLTI2NDMsNyArMjY0Niw3IEBACiAgICAgd2hpbGUgKChoZmRjYW4tPkluc3RhbmNlLT5DQ0NSICYgRkRDQU5fQ0NDUl9DU0EpID09IEZEQ0FOX0NDQ1JfQ1NBKQogICAgIHsKICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX1ZBTFVFKQorICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX0NPVU5UKQogICAgICAgewogICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwogICAgICAgICBoZmRjYW4tPkVycm9yQ29kZSB8PSBIQUxfRkRDQU5fRVJST1JfVElNRU9VVDsKQEAgLTI5MzQsOCArMjkzNywyMCBAQAogICAgICAgfQogICAgICAgZWxzZQogICAgICAgeworICAgICAgICAvKiBDaGVjayB0aGF0IHRoZSBSeCBGSUZPIDAgaXMgZnVsbCAmIG92ZXJ3cml0ZSBtb2RlIGlzIG9uKi8KKyAgICAgICAgaWYoKChoZmRjYW4tPkluc3RhbmNlLT5SWEYwUyAmIEZEQ0FOX1JYRjBTX0YwRikgPj4gRkRDQU5fUlhGMFNfRjBGX1BvcykgPT0gMVUpCisgICAgICAgIHsKKyAgICAgICAgICBpZigoKGhmZGNhbi0+SW5zdGFuY2UtPlJYRjBDICYgRkRDQU5fUlhGMENfRjBPTSkgPj4gRkRDQU5fUlhGMENfRjBPTV9Qb3MpID09IEZEQ0FOX1JYX0ZJRk9fT1ZFUldSSVRFKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdoZW4gb3ZlcndyaXRlIHN0YXR1cyBpcyBvbiBkaXNjYXJkIGZpcnN0IG1lc3NhZ2UgaW4gRklGTyAqLworICAgICAgICAgICAgR2V0SW5kZXggPSAxVTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBDYWxjdWxhdGUgUnggRklGTyAwIGVsZW1lbnQgaW5kZXgqLworICAgICAgICBHZXRJbmRleCArPSAoKGhmZGNhbi0+SW5zdGFuY2UtPlJYRjBTICYgRkRDQU5fUlhGMFNfRjBHSSkgPj4gRkRDQU5fUlhGMFNfRjBHSV9Qb3MpOworCiAgICAgICAgIC8qIENhbGN1bGF0ZSBSeCBGSUZPIDAgZWxlbWVudCBhZGRyZXNzICovCi0gICAgICAgIEdldEluZGV4ID0gKChoZmRjYW4tPkluc3RhbmNlLT5SWEYwUyAmIEZEQ0FOX1JYRjBTX0YwR0kpID4+IEZEQ0FOX1JYRjBTX0YwR0lfUG9zKTsKICAgICAgICAgUnhBZGRyZXNzID0gKHVpbnQzMl90ICopKGhmZGNhbi0+bXNnUmFtLlJ4RklGTzBTQSArIChHZXRJbmRleCAqIGhmZGNhbi0+SW5pdC5SeEZpZm8wRWxtdFNpemUgKiA0VSkpOwogICAgICAgfQogICAgIH0KQEAgLTI5NjAsOCArMjk3NSwyMCBAQAogICAgICAgfQogICAgICAgZWxzZQogICAgICAgeworICAgICAgICAvKiBDaGVjayB0aGF0IHRoZSBSeCBGSUZPIDEgaXMgZnVsbCAmIG92ZXJ3cml0ZSBtb2RlIGlzIG9uKi8KKyAgICAgICAgaWYoKChoZmRjYW4tPkluc3RhbmNlLT5SWEYxUyAmIEZEQ0FOX1JYRjFTX0YxRikgPj4gRkRDQU5fUlhGMVNfRjFGX1BvcykgPT0gMVUpCisgICAgICAgIHsKKyAgICAgICAgICBpZigoKGhmZGNhbi0+SW5zdGFuY2UtPlJYRjFDICYgRkRDQU5fUlhGMUNfRjFPTSkgPj4gRkRDQU5fUlhGMUNfRjFPTV9Qb3MpID09IEZEQ0FOX1JYX0ZJRk9fT1ZFUldSSVRFKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdoZW4gb3ZlcndyaXRlIHN0YXR1cyBpcyBvbiBkaXNjYXJkIGZpcnN0IG1lc3NhZ2UgaW4gRklGTyAqLworICAgICAgICAgICAgR2V0SW5kZXggPSAxVTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBDYWxjdWxhdGUgUnggRklGTyAxIGVsZW1lbnQgaW5kZXgqLworICAgICAgICBHZXRJbmRleCArPSAoKGhmZGNhbi0+SW5zdGFuY2UtPlJYRjFTICYgRkRDQU5fUlhGMVNfRjFHSSkgPj4gRkRDQU5fUlhGMVNfRjFHSV9Qb3MpOworCiAgICAgICAgIC8qIENhbGN1bGF0ZSBSeCBGSUZPIDEgZWxlbWVudCBhZGRyZXNzICovCi0gICAgICAgIEdldEluZGV4ID0gKChoZmRjYW4tPkluc3RhbmNlLT5SWEYxUyAmIEZEQ0FOX1JYRjFTX0YxR0kpID4+IEZEQ0FOX1JYRjFTX0YxR0lfUG9zKTsKICAgICAgICAgUnhBZGRyZXNzID0gKHVpbnQzMl90ICopKGhmZGNhbi0+bXNnUmFtLlJ4RklGTzFTQSArIChHZXRJbmRleCAqIGhmZGNhbi0+SW5pdC5SeEZpZm8xRWxtdFNpemUgKiA0VSkpOwogICAgICAgfQogICAgIH0KQEAgLTMxMjAsNyArMzE0Nyw3IEBACiAgICAgICBwVHhFdmVudC0+SWRlbnRpZmllciA9ICgqVHhFdmVudEFkZHJlc3MgJiBGRENBTl9FTEVNRU5UX01BU0tfRVhUSUQpOwogICAgIH0KIAotICAgIC8qIFJldHJpZXZlIFJ4RnJhbWVUeXBlICovCisgICAgLyogUmV0cmlldmUgVHhGcmFtZVR5cGUgKi8KICAgICBwVHhFdmVudC0+VHhGcmFtZVR5cGUgPSAoKlR4RXZlbnRBZGRyZXNzICYgRkRDQU5fRUxFTUVOVF9NQVNLX1JUUik7CiAKICAgICAvKiBSZXRyaWV2ZSBFcnJvclN0YXRlSW5kaWNhdG9yICovCkBAIC0zMTI5LDcgKzMxNTYsNyBAQAogICAgIC8qIEluY3JlbWVudCBUeEV2ZW50QWRkcmVzcyBwb2ludGVyIHRvIHNlY29uZCB3b3JkIG9mIFR4IEV2ZW50IEZJRk8gZWxlbWVudCAqLwogICAgIFR4RXZlbnRBZGRyZXNzKys7CiAKLSAgICAvKiBSZXRyaWV2ZSBSeFRpbWVzdGFtcCAqLworICAgIC8qIFJldHJpZXZlIFR4VGltZXN0YW1wICovCiAgICAgcFR4RXZlbnQtPlR4VGltZXN0YW1wID0gKCpUeEV2ZW50QWRkcmVzcyAmIEZEQ0FOX0VMRU1FTlRfTUFTS19UUyk7CiAKICAgICAvKiBSZXRyaWV2ZSBEYXRhTGVuZ3RoICovCkBAIC0zODAxLDcgKzM4MjgsNyBAQAogICAgIHdoaWxlICgoaGZkY2FuLT50dGNhbi0+VFRPQ04gJiBGRENBTl9UVE9DTl9MQ0tDKSAhPSAwVSkKICAgICB7CiAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9WQUxVRSkKKyAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9DT1VOVCkKICAgICAgIHsKICAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgICAgaGZkY2FuLT5FcnJvckNvZGUgfD0gSEFMX0ZEQ0FOX0VSUk9SX1RJTUVPVVQ7CkBAIC0zODc1LDcgKzM5MDIsNyBAQAogICAgIHdoaWxlICgoaGZkY2FuLT50dGNhbi0+VFRPQ04gJiBGRENBTl9UVE9DTl9MQ0tDKSAhPSAwVSkKICAgICB7CiAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9WQUxVRSkKKyAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9DT1VOVCkKICAgICAgIHsKICAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgICAgaGZkY2FuLT5FcnJvckNvZGUgfD0gSEFMX0ZEQ0FOX0VSUk9SX1RJTUVPVVQ7CkBAIC0zOTMxLDcgKzM5NTgsNyBAQAogICAgIHdoaWxlICgoaGZkY2FuLT50dGNhbi0+VFRPQ04gJiBGRENBTl9UVE9DTl9MQ0tDKSAhPSAwVSkKICAgICB7CiAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9WQUxVRSkKKyAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9DT1VOVCkKICAgICAgIHsKICAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgICAgaGZkY2FuLT5FcnJvckNvZGUgfD0gSEFMX0ZEQ0FOX0VSUk9SX1RJTUVPVVQ7CkBAIC00MDAwLDcgKzQwMjcsNyBAQAogICAgIHdoaWxlICgoaGZkY2FuLT50dGNhbi0+VFRPQ04gJiBGRENBTl9UVE9DTl9MQ0tDKSAhPSAwVSkKICAgICB7CiAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9WQUxVRSkKKyAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9DT1VOVCkKICAgICAgIHsKICAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgICAgaGZkY2FuLT5FcnJvckNvZGUgfD0gSEFMX0ZEQ0FOX0VSUk9SX1RJTUVPVVQ7CkBAIC00MDM2LDcgKzQwNjMsNyBAQAogICAgICAgd2hpbGUgKChoZmRjYW4tPnR0Y2FuLT5UVFRNSyAmIEZEQ0FOX1RUVE1LX0xDS00pICE9IDBVKQogICAgICAgewogICAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX1ZBTFVFKQorICAgICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfQ09VTlQpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwogICAgICAgICAgIGhmZGNhbi0+RXJyb3JDb2RlIHw9IEhBTF9GRENBTl9FUlJPUl9USU1FT1VUOwpAQCAtNDA2MCw3ICs0MDg3LDcgQEAKICAgICAgIHdoaWxlICgoaGZkY2FuLT50dGNhbi0+VFRPQ04gJiBGRENBTl9UVE9DTl9MQ0tDKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCi0gICAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9WQUxVRSkKKyAgICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX0NPVU5UKQogICAgICAgICB7CiAgICAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgICAgICBoZmRjYW4tPkVycm9yQ29kZSB8PSBIQUxfRkRDQU5fRVJST1JfVElNRU9VVDsKQEAgLTQxMTEsNyArNDEzOCw3IEBACiAgICAgd2hpbGUgKChoZmRjYW4tPnR0Y2FuLT5UVE9DTiAmIEZEQ0FOX1RUT0NOX0xDS0MpICE9IDBVKQogICAgIHsKICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX1ZBTFVFKQorICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX0NPVU5UKQogICAgICAgewogICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwogICAgICAgICBoZmRjYW4tPkVycm9yQ29kZSB8PSBIQUxfRkRDQU5fRVJST1JfVElNRU9VVDsKQEAgLTQxNjEsNyArNDE4OCw3IEBACiAgICAgd2hpbGUgKChoZmRjYW4tPnR0Y2FuLT5UVE9DTiAmIEZEQ0FOX1RUT0NOX0xDS0MpICE9IDBVKQogICAgIHsKICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX1ZBTFVFKQorICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX0NPVU5UKQogICAgICAgewogICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwogICAgICAgICBoZmRjYW4tPkVycm9yQ29kZSB8PSBIQUxfRkRDQU5fRVJST1JfVElNRU9VVDsKQEAgLTQyMTMsNyArNDI0MCw3IEBACiAgICAgICB3aGlsZSAoKGhmZGNhbi0+dHRjYW4tPlRUT0NOICYgRkRDQU5fVFRPQ05fTENLQykgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfVkFMVUUpCisgICAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9DT1VOVCkKICAgICAgICAgewogICAgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCiAgICAgICAgICAgaGZkY2FuLT5FcnJvckNvZGUgfD0gSEFMX0ZEQ0FOX0VSUk9SX1RJTUVPVVQ7CkBAIC00Mjc0LDcgKzQzMDEsNyBAQAogICAgICAgd2hpbGUgKChoZmRjYW4tPnR0Y2FuLT5UVE9DTiAmIEZEQ0FOX1RUT0NOX0xDS0MpICE9IDBVKQogICAgICAgewogICAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX1ZBTFVFKQorICAgICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfQ09VTlQpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwogICAgICAgICAgIGhmZGNhbi0+RXJyb3JDb2RlIHw9IEhBTF9GRENBTl9FUlJPUl9USU1FT1VUOwpAQCAtNDMzNSw3ICs0MzYyLDcgQEAKICAgICAgIHdoaWxlICgoaGZkY2FuLT50dGNhbi0+VFRPQ04gJiBGRENBTl9UVE9DTl9MQ0tDKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCi0gICAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9WQUxVRSkKKyAgICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX0NPVU5UKQogICAgICAgICB7CiAgICAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgICAgICBoZmRjYW4tPkVycm9yQ29kZSB8PSBIQUxfRkRDQU5fRVJST1JfVElNRU9VVDsKQEAgLTQzOTYsNyArNDQyMyw3IEBACiAgICAgICB3aGlsZSAoKGhmZGNhbi0+dHRjYW4tPlRUT0NOICYgRkRDQU5fVFRPQ05fTENLQykgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfVkFMVUUpCisgICAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9DT1VOVCkKICAgICAgICAgewogICAgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCiAgICAgICAgICAgaGZkY2FuLT5FcnJvckNvZGUgfD0gSEFMX0ZEQ0FOX0VSUk9SX1RJTUVPVVQ7CkBAIC00NDU5LDcgKzQ0ODYsNyBAQAogICAgICAgd2hpbGUgKChoZmRjYW4tPnR0Y2FuLT5UVE9DTiAmIEZEQ0FOX1RUT0NOX0xDS0MpICE9IDBVKQogICAgICAgewogICAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX1ZBTFVFKQorICAgICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfQ09VTlQpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwogICAgICAgICAgIGhmZGNhbi0+RXJyb3JDb2RlIHw9IEhBTF9GRENBTl9FUlJPUl9USU1FT1VUOwpAQCAtNDUyMCw3ICs0NTQ3LDcgQEAKICAgICAgIHdoaWxlICgoaGZkY2FuLT50dGNhbi0+VFRPQ04gJiBGRENBTl9UVE9DTl9MQ0tDKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCi0gICAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9WQUxVRSkKKyAgICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX0NPVU5UKQogICAgICAgICB7CiAgICAgICAgICAgLyogVXBkYXRlIGVycm9yIGNvZGUgKi8KICAgICAgICAgICBoZmRjYW4tPkVycm9yQ29kZSB8PSBIQUxfRkRDQU5fRVJST1JfVElNRU9VVDsKQEAgLTQ1OTAsNyArNDYxNyw3IEBACiAgICAgICB3aGlsZSAoKGhmZGNhbi0+dHRjYW4tPlRUT0NOICYgRkRDQU5fVFRPQ05fTENLQykgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIC8qIENoZWNrIGZvciB0aGUgVGltZW91dCAqLwotICAgICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfVkFMVUUpCisgICAgICAgIGlmIChDb3VudGVyID4gRkRDQU5fVElNRU9VVF9DT1VOVCkKICAgICAgICAgewogICAgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCiAgICAgICAgICAgaGZkY2FuLT5FcnJvckNvZGUgfD0gSEFMX0ZEQ0FOX0VSUk9SX1RJTUVPVVQ7CkBAIC00NjYwLDcgKzQ2ODcsNyBAQAogICAgICAgd2hpbGUgKChoZmRjYW4tPnR0Y2FuLT5UVE9DTiAmIEZEQ0FOX1RUT0NOX0xDS0MpICE9IDBVKQogICAgICAgewogICAgICAgICAvKiBDaGVjayBmb3IgdGhlIFRpbWVvdXQgKi8KLSAgICAgICAgaWYgKENvdW50ZXIgPiBGRENBTl9USU1FT1VUX1ZBTFVFKQorICAgICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfQ09VTlQpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBVcGRhdGUgZXJyb3IgY29kZSAqLwogICAgICAgICAgIGhmZGNhbi0+RXJyb3JDb2RlIHw9IEhBTF9GRENBTl9FUlJPUl9USU1FT1VUOwpAQCAtNDc2NCw3ICs0NzkxLDcgQEAKICAgICB3aGlsZSAoKGhmZGNhbi0+dHRjYW4tPlRUT0NOICYgRkRDQU5fVFRPQ05fTENLQykgIT0gMFUpCiAgICAgewogICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCi0gICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfVkFMVUUpCisgICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfQ09VTlQpCiAgICAgICB7CiAgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCiAgICAgICAgIGhmZGNhbi0+RXJyb3JDb2RlIHw9IEhBTF9GRENBTl9FUlJPUl9USU1FT1VUOwpAQCAtNDgxNCw3ICs0ODQxLDcgQEAKICAgICB3aGlsZSAoKGhmZGNhbi0+dHRjYW4tPlRUT0NOICYgRkRDQU5fVFRPQ05fTENLQykgIT0gMFUpCiAgICAgewogICAgICAgLyogQ2hlY2sgZm9yIHRoZSBUaW1lb3V0ICovCi0gICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfVkFMVUUpCisgICAgICBpZiAoQ291bnRlciA+IEZEQ0FOX1RJTUVPVVRfQ09VTlQpCiAgICAgICB7CiAgICAgICAgIC8qIFVwZGF0ZSBlcnJvciBjb2RlICovCiAgICAgICAgIGhmZGNhbi0+RXJyb3JDb2RlIHw9IEhBTF9GRENBTl9FUlJPUl9USU1FT1VUOwpAQCAtNjE2Niw0ICs2MTkzLDYgQEAKICAgKiBAfQogICAqLwogCisjZW5kaWYgLyogRkRDQU4xICovCisKIC8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9mbGFzaC5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfZmxhc2guYwppbmRleCA3ZjNiYzEwLi42MzgzZGE1IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9mbGFzaC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2ZsYXNoLmMKQEAgLTEwNSw3ICsxMDUsNiBAQAogICAqIEB7CiAgICovCiAjZGVmaW5lIEZMQVNIX1RJTUVPVVRfVkFMVUUgICAgICAgICAgICAgIDUwMDAwVSAvKiA1MCBzICovCi0KIC8qKgogICAqIEB9CiAgICovCkBAIC0xNjYsMTAgKzE2NSwxNiBAQAogICB7CiAgICAgYmFuayA9IEZMQVNIX0JBTktfMTsKICAgfQotICBlbHNlCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQorICBlbHNlIGlmKElTX0ZMQVNIX1BST0dSQU1fQUREUkVTU19CQU5LMihGbGFzaEFkZHJlc3MpKQogICB7CiAgICAgYmFuayA9IEZMQVNIX0JBTktfMjsKICAgfQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLworICBlbHNlCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CiAKICAgLyogUmVzZXQgZXJyb3IgY29kZSAqLwogICBwRmxhc2guRXJyb3JDb2RlID0gSEFMX0ZMQVNIX0VSUk9SX05PTkU7CkBAIC0xNzksNiArMTg0LDcgQEAKIAogICBpZihzdGF0dXMgPT0gSEFMX09LKQogICB7CisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogICAgIGlmKGJhbmsgPT0gRkxBU0hfQkFOS18xKQogICAgIHsKICNpZiBkZWZpbmVkIChGTEFTSF9PUFRDUl9QR19PVFApCkBAIC0xOTksNiArMjA1LDIwIEBACiAgICAgICAvKiBTZXQgUEcgYml0ICovCiAgICAgICBTRVRfQklUKEZMQVNILT5DUjIsIEZMQVNIX0NSX1BHKTsKICAgICB9CisjZWxzZSAvKiBTaW5nbGUgQmFuayAqLworI2lmIGRlZmluZWQgKEZMQVNIX09QVENSX1BHX09UUCkKKyAgICAgIGlmIChUeXBlUHJvZ3JhbSA9PSBGTEFTSF9UWVBFUFJPR1JBTV9PVFBXT1JEKQorICAgICAgeworICAgICAgICAvKiBTZXQgT1RQX1BHIGJpdCAqLworICAgICAgICBTRVRfQklUKEZMQVNILT5PUFRDUiwgRkxBU0hfT1BUQ1JfUEdfT1RQKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBGTEFTSF9PUFRDUl9QR19PVFAgKi8KKyAgICAgIHsKKyAgICAgICAgLyogU2V0IFBHIGJpdCAqLworICAgICAgICBTRVRfQklUKEZMQVNILT5DUjEsIEZMQVNIX0NSX1BHKTsKKyAgICAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogICAgIF9fSVNCKCk7CiAgICAgX19EU0IoKTsKQEAgLTIyOCw2ICsyNDgsNyBAQAogICAgIC8qIFdhaXQgZm9yIGxhc3Qgb3BlcmF0aW9uIHRvIGJlIGNvbXBsZXRlZCAqLwogICAgIHN0YXR1cyA9IEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCh1aW50MzJfdClGTEFTSF9USU1FT1VUX1ZBTFVFLCBiYW5rKTsKIAorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICNpZiBkZWZpbmVkIChGTEFTSF9PUFRDUl9QR19PVFApCiAgICAgaWYgKFR5cGVQcm9ncmFtID09IEZMQVNIX1RZUEVQUk9HUkFNX09UUFdPUkQpCiAgICAgewpAQCAtMjQ4LDYgKzI2OSwyMCBAQAogICAgICAgICBDTEVBUl9CSVQoRkxBU0gtPkNSMiwgRkxBU0hfQ1JfUEcpOwogICAgICAgfQogICAgIH0KKyNlbHNlIC8qIFNpbmdsZSBCYW5rICovCisjaWYgZGVmaW5lZCAoRkxBU0hfT1BUQ1JfUEdfT1RQKQorICAgIGlmIChUeXBlUHJvZ3JhbSA9PSBGTEFTSF9UWVBFUFJPR1JBTV9PVFBXT1JEKQorICAgIHsKKyAgICAgIC8qIElmIHRoZSBwcm9ncmFtIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGRpc2FibGUgdGhlIE9UUF9QRyAqLworICAgICAgQ0xFQVJfQklUKEZMQVNILT5PUFRDUiwgRkxBU0hfT1BUQ1JfUEdfT1RQKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEZMQVNIX09QVENSX1BHX09UUCAqLworICAgIHsKKyAgICAgIC8qIElmIHRoZSBwcm9ncmFtIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGRpc2FibGUgdGhlIFBHICovCisgICAgICBDTEVBUl9CSVQoRkxBU0gtPkNSMSwgRkxBU0hfQ1JfUEcpOworICAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KICAgfQogCiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KQEAgLTI5MSwxMCArMzI2LDE2IEBACiAgIHsKICAgICBiYW5rID0gRkxBU0hfQkFOS18xOwogICB9Ci0gIGVsc2UKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCisgIGVsc2UgaWYoSVNfRkxBU0hfUFJPR1JBTV9BRERSRVNTX0JBTksyKEZsYXNoQWRkcmVzcykpCiAgIHsKICAgICBiYW5rID0gRkxBU0hfQkFOS18yOwogICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCisgIGVsc2UKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KIAogICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8KICAgc3RhdHVzID0gRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24oKHVpbnQzMl90KUZMQVNIX1RJTUVPVVRfVkFMVUUsIGJhbmspOwpAQCAtMzA4LDYgKzM0OSw3IEBACiAgIHsKICAgICBwRmxhc2guQWRkcmVzcyA9IEZsYXNoQWRkcmVzczsKIAorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgICBpZihiYW5rID09IEZMQVNIX0JBTktfMSkKICAgICB7CiAgICAgICAvKiBTZXQgaW50ZXJuYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIElSUSBoYW5kbGVyICovCkBAIC0zNTIsNiArMzk0LDMyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfSVRfU1RSQkVSUl9CQU5LMiB8IEZMQVNIX0lUX0lOQ0VSUl9CQU5LMik7CiAjZW5kaWYgLyogRkxBU0hfQ1JfT1BFUlJJRSAqLwogICAgIH0KKyNlbHNlIC8qIFNpbmdsZSBCYW5rICovCisgICAgLyogU2V0IGludGVybmFsIHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBJUlEgaGFuZGxlciAqLworICAgIHBGbGFzaC5Qcm9jZWR1cmVPbkdvaW5nID0gRkxBU0hfUFJPQ19QUk9HUkFNX0JBTksxOworCisjaWYgZGVmaW5lZCAoRkxBU0hfT1BUQ1JfUEdfT1RQKQorICAgIGlmIChUeXBlUHJvZ3JhbSA9PSBGTEFTSF9UWVBFUFJPR1JBTV9PVFBXT1JEKQorICAgIHsKKyAgICAgIC8qIFNldCBPVFBfUEcgYml0ICovCisgICAgICBTRVRfQklUKEZMQVNILT5PUFRDUiwgRkxBU0hfT1BUQ1JfUEdfT1RQKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8qIEZMQVNIX09QVENSX1BHX09UUCAqLworICAgIHsKKyAgICAgIC8qIFNldCBQRyBiaXQgKi8KKyAgICAgIFNFVF9CSVQoRkxBU0gtPkNSMSwgRkxBU0hfQ1JfUEcpOworICAgIH0KKworICAgICAgLyogRW5hYmxlIEVuZCBvZiBPcGVyYXRpb24gYW5kIEVycm9yIGludGVycnVwdHMgZm9yIEJhbmsgMSAqLworI2lmIGRlZmluZWQgKEZMQVNIX0NSX09QRVJSSUUpCisgICAgICBfX0hBTF9GTEFTSF9FTkFCTEVfSVRfQkFOSzEoRkxBU0hfSVRfRU9QX0JBTksxICAgICB8IEZMQVNIX0lUX1dSUEVSUl9CQU5LMSB8IEZMQVNIX0lUX1BHU0VSUl9CQU5LMSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9JVF9TVFJCRVJSX0JBTksxIHwgRkxBU0hfSVRfSU5DRVJSX0JBTksxIHwgRkxBU0hfSVRfT1BFUlJfQkFOSzEpOworI2Vsc2UKKyAgICAgIF9fSEFMX0ZMQVNIX0VOQUJMRV9JVF9CQU5LMShGTEFTSF9JVF9FT1BfQkFOSzEgICAgIHwgRkxBU0hfSVRfV1JQRVJSX0JBTksxIHwgRkxBU0hfSVRfUEdTRVJSX0JBTksxIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0lUX1NUUkJFUlJfQkFOSzEgfCBGTEFTSF9JVF9JTkNFUlJfQkFOSzEpOworI2VuZGlmIC8qIEZMQVNIX0NSX09QRVJSSUUgKi8KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogICAgIF9fSVNCKCk7CiAgICAgX19EU0IoKTsKQEAgLTQ2MCw3ICs1MjgsOCBAQAogICAgIH0KICAgfQogCi0gIC8qIENoZWNrIEZMQVNIIEJhbmsyIEVuZCBvZiBPcGVyYXRpb24gZmxhZyAgKi8KKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCisgLyogQ2hlY2sgRkxBU0ggQmFuazIgRW5kIG9mIE9wZXJhdGlvbiBmbGFnICAqLwogICBpZihfX0hBTF9GTEFTSF9HRVRfRkxBR19CQU5LMihGTEFTSF9TUl9FT1ApICE9IFJFU0VUKQogICB7CiAgICAgaWYocEZsYXNoLlByb2NlZHVyZU9uR29pbmcgPT0gRkxBU0hfUFJPQ19TRUNURVJBU0VfQkFOSzIpCkBAIC01MjcsNiArNTk2LDcgQEAKICAgICAgIH0KICAgICB9CiAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogICAvKiBDaGVjayBGTEFTSCBCYW5rMSBvcGVyYXRpb24gZXJyb3IgZmxhZ3MgKi8KICNpZiBkZWZpbmVkIChGTEFTSF9TUl9PUEVSUikKQEAgLTU3MSw2ICs2NDEsNyBAQAogICAgIEhBTF9GTEFTSF9PcGVyYXRpb25FcnJvckNhbGxiYWNrKHRlbXApOwogICB9CiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgIC8qIENoZWNrIEZMQVNIIEJhbmsyIG9wZXJhdGlvbiBlcnJvciBmbGFncyAqLwogI2lmIGRlZmluZWQgKEZMQVNIX1NSX09QRVJSKQogICBlcnJvcmZsYWcgPSBGTEFTSC0+U1IyICYgKChGTEFTSF9GTEFHX1dSUEVSUl9CQU5LMiB8IEZMQVNIX0ZMQUdfUEdTRVJSX0JBTksyIHwgRkxBU0hfRkxBR19TVFJCRVJSX0JBTksyIHwgXApAQCAtNjEzLDYgKzY4NCw3IEBACiAgICAgLyogRkxBU0ggZXJyb3IgaW50ZXJydXB0IHVzZXIgY2FsbGJhY2sgKi8KICAgICBIQUxfRkxBU0hfT3BlcmF0aW9uRXJyb3JDYWxsYmFjayh0ZW1wKTsKICAgfQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogCiAgIGlmKHBGbGFzaC5Qcm9jZWR1cmVPbkdvaW5nID09IEZMQVNIX1BST0NfTk9ORSkKICAgewpAQCAtNjIxLDE3ICs2OTMsMjEgQEAKICAgICBfX0hBTF9GTEFTSF9ESVNBQkxFX0lUX0JBTksxKEZMQVNIX0lUX0VPUF9CQU5LMSAgICB8IEZMQVNIX0lUX1dSUEVSUl9CQU5LMSB8IEZMQVNIX0lUX1BHU0VSUl9CQU5LMSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0lUX1NUUkJFUlJfQkFOSzEgfCBGTEFTSF9JVF9JTkNFUlJfQkFOSzEgfCBGTEFTSF9JVF9PUEVSUl9CQU5LMSk7CiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgICAgLyogRGlzYWJsZSBCYW5rMiBPcGVyYXRpb24gYW5kIEVycm9yIHNvdXJjZSBpbnRlcnJ1cHQgKi8KICAgICBfX0hBTF9GTEFTSF9ESVNBQkxFX0lUX0JBTksyKEZMQVNIX0lUX0VPUF9CQU5LMiAgICB8IEZMQVNIX0lUX1dSUEVSUl9CQU5LMiB8IEZMQVNIX0lUX1BHU0VSUl9CQU5LMiB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0lUX1NUUkJFUlJfQkFOSzIgfCBGTEFTSF9JVF9JTkNFUlJfQkFOSzIgfCBGTEFTSF9JVF9PUEVSUl9CQU5LMik7CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAjZWxzZQogICAgIC8qIERpc2FibGUgQmFuazEgT3BlcmF0aW9uIGFuZCBFcnJvciBzb3VyY2UgaW50ZXJydXB0ICovCiAgICAgX19IQUxfRkxBU0hfRElTQUJMRV9JVF9CQU5LMShGTEFTSF9JVF9FT1BfQkFOSzEgICAgfCBGTEFTSF9JVF9XUlBFUlJfQkFOSzEgfCBGTEFTSF9JVF9QR1NFUlJfQkFOSzEgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGTEFTSF9JVF9TVFJCRVJSX0JBTksxIHwgRkxBU0hfSVRfSU5DRVJSX0JBTksxKTsKIAorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgICAvKiBEaXNhYmxlIEJhbmsyIE9wZXJhdGlvbiBhbmQgRXJyb3Igc291cmNlIGludGVycnVwdCAqLwogICAgIF9fSEFMX0ZMQVNIX0RJU0FCTEVfSVRfQkFOSzIoRkxBU0hfSVRfRU9QX0JBTksyICAgIHwgRkxBU0hfSVRfV1JQRVJSX0JBTksyIHwgRkxBU0hfSVRfUEdTRVJSX0JBTksyIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkxBU0hfSVRfU1RSQkVSUl9CQU5LMiB8IEZMQVNIX0lUX0lOQ0VSUl9CQU5LMik7CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAjZW5kaWYgLyogRkxBU0hfQ1JfT1BFUlJJRSAqLwogCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwpAQCAtNzE0LDYgKzc5MCw3IEBACiAgICAgfQogICB9CiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgIGlmKFJFQURfQklUKEZMQVNILT5DUjIsIEZMQVNIX0NSX0xPQ0spICE9IDBVKQogICB7CiAgICAgLyogQXV0aG9yaXplIHRoZSBGTEFTSCBCYW5rMiBSZWdpc3RlcnMgYWNjZXNzICovCkBAIC03MjYsNiArODAzLDcgQEAKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAKICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTc0NSw2ICs4MjMsNyBAQAogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgLyogU2V0IHRoZSBMT0NLIEJpdCB0byBsb2NrIHRoZSBGTEFTSCBCYW5rMiBDb250cm9sIFJlZ2lzdGVyIGFjY2VzcyAqLwogICBTRVRfQklUKEZMQVNILT5DUjIsIEZMQVNIX0NSX0xPQ0spOwogCkBAIC03NTMsNiArODMyLDcgQEAKICAgewogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogICByZXR1cm4gSEFMX09LOwogfQpAQCAtODEwLDEwICs4OTAsMTIgQEAKICAgewogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgZWxzZSBpZiAoRkxBU0hfQ1JDX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCh1aW50MzJfdClGTEFTSF9USU1FT1VUX1ZBTFVFLCBGTEFTSF9CQU5LXzIpICE9IEhBTF9PSykKICAgewogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogICBlbHNlCiAgIHsKICAgICBzdGF0dXMgPSBIQUxfT0s7CkBAIC05MDgsMjAgKzk5MCwyMiBAQAogICAgICBFdmVuIGlmIHRoZSBGTEFTSCBvcGVyYXRpb24gZmFpbHMsIHRoZSBRVyBmbGFnIHdpbGwgYmUgcmVzZXQgYW5kIGFuIGVycm9yCiAgICAgIGZsYWcgd2lsbCBiZSBzZXQgKi8KIAotICB1aW50MzJfdCBic3lmbGFnLCBlcnJvcmZsYWc7CisgIHVpbnQzMl90IGJzeWZsYWcgPSBGTEFTSF9GTEFHX1FXX0JBTksxOworICB1aW50MzJfdCBlcnJvcmZsYWcgPSBGTEFTSC0+U1IxICYgRkxBU0hfRkxBR19BTExfRVJST1JTX0JBTksxOwogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCiAgIGFzc2VydF9wYXJhbShJU19GTEFTSF9CQU5LX0VYQ0xVU0lWRShCYW5rKSk7CiAKLSAgLyogU2VsZWN0IGJzeWZsYWcgZGVwZW5kaW5nIG9uIEJhbmsgKi8KLSAgaWYoQmFuayA9PSBGTEFTSF9CQU5LXzEpCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQorCisgIGlmIChCYW5rID09IEZMQVNIX0JBTktfMikKICAgewotICAgIGJzeWZsYWcgPSBGTEFTSF9GTEFHX1FXX0JBTksxOwotICB9Ci0gIGVsc2UKLSAgeworICAgIC8qIEdldCBFcnJvciBGbGFncyAqLworICAgIGVycm9yZmxhZyA9IChGTEFTSC0+U1IyICYgRkxBU0hfRkxBR19BTExfRVJST1JTX0JBTksyKSB8IDB4ODAwMDAwMDBVOworICAgIC8qIFNlbGVjdCBic3lmbGFnIGRlcGVuZGluZyBvbiBCYW5rICovCiAgICAgYnN5ZmxhZyA9IEZMQVNIX0ZMQUdfUVdfQkFOSzI7CiAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogICB3aGlsZShfX0hBTF9GTEFTSF9HRVRfRkxBRyhic3lmbGFnKSkKICAgewpAQCAtOTM0LDE4ICsxMDE4LDggQEAKICAgICB9CiAgIH0KIAotICAvKiBHZXQgRXJyb3IgRmxhZ3MgKi8KLSAgaWYgKEJhbmsgPT0gRkxBU0hfQkFOS18xKQotICB7Ci0gICAgZXJyb3JmbGFnID0gRkxBU0gtPlNSMSAmIEZMQVNIX0ZMQUdfQUxMX0VSUk9SU19CQU5LMTsKLSAgfQotICBlbHNlCi0gIHsKLSAgICBlcnJvcmZsYWcgPSAoRkxBU0gtPlNSMiAmIEZMQVNIX0ZMQUdfQUxMX0VSUk9SU19CQU5LMikgfCAweDgwMDAwMDAwVTsKLSAgfQotCi0gIC8qIEluIGNhc2Ugb2YgZXJyb3IgcmVwb3J0ZWQgaW4gRmxhc2ggU1IxIG9yIFNSMiByZWdpc3RlcnMgKEVDQ0Mgbm90IG1hbmFnZWQgYXMgYW4gZXJyb3IpICovCi0gIGlmKChlcnJvcmZsYWcgJiAweDdERkZGRkZGVSkgIT0gMFUpCisgIC8qIEluIGNhc2Ugb2YgZXJyb3IgcmVwb3J0ZWQgaW4gRmxhc2ggU1IxIG9yIFNSMiByZWdpc3RlciAqLworICBpZigoZXJyb3JmbGFnICYgMHg3RkZGRkZGRlUpICE9IDBVKQogICB7CiAgICAgLypTYXZlIHRoZSBlcnJvciBjb2RlKi8KICAgICBwRmxhc2guRXJyb3JDb2RlIHw9IGVycm9yZmxhZzsKQEAgLTk2NSw2ICsxMDM5LDcgQEAKICAgICAgIF9fSEFMX0ZMQVNIX0NMRUFSX0ZMQUdfQkFOSzEoRkxBU0hfRkxBR19FT1BfQkFOSzEpOwogICAgIH0KICAgfQorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgZWxzZQogICB7CiAgICAgaWYgKF9fSEFMX0ZMQVNIX0dFVF9GTEFHX0JBTksyKEZMQVNIX0ZMQUdfRU9QX0JBTksyKSkKQEAgLTk3Myw2ICsxMDQ4LDcgQEAKICAgICAgIF9fSEFMX0ZMQVNIX0NMRUFSX0ZMQUdfQkFOSzIoRkxBU0hfRkxBR19FT1BfQkFOSzIpOwogICAgIH0KICAgfQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xMDY0LDYgKzExNDAsNyBAQAogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9CiAgIH0KKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgIGVsc2UKICAgewogICAgIGlmIChfX0hBTF9GTEFTSF9HRVRfRkxBR19CQU5LMihGTEFTSF9GTEFHX0NSQ1JERVJSX0JBTksyKSkKQEAgLTEwNzcsNiArMTE1NCw3IEBACiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KICAgfQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogCiAgIC8qIElmIHRoZXJlIGlzIG5vIGVycm9yIGZsYWcgc2V0ICovCiAgIHJldHVybiBIQUxfT0s7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9mbGFzaF9leC5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfZmxhc2hfZXguYwppbmRleCAzM2Y5ZTg3Li5kYzQ1ZDRhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9mbGFzaF9leC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2ZsYXNoX2V4LmMKQEAgLTQ1LDYgKzQ1LDggQEAKICAgICAgICAgKCsrKSBQQ1JPUCBwcm90ZWN0aW9uIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgcGVyIGJhbmsKICAgICAgICAgKCsrKSBTZWN1cmUgYXJlYSBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHBlciBiYW5rCiAgICAgICAgICgrKykgQ29yZSBCb290IGFkZHJlc3MgY29uZmlndXJhdGlvbgorICAgICAgICAoKyspIFRDTSAvIEFYSSBzaGFyZWQgUkFNIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgKCsrKSBDUFUgRnJlcXVlbmN5IEJvb3N0IGNvbmZpZ3VyYXRpb24KIAogICAgICAgKCMpIEZMQVNIIE1lbW9yeSBMb2NrIGFuZCB1bmxvY2sgcGVyIEJhbms6IEhBTF9GTEFTSEV4X0xvY2tfQmFuazEoKSwgSEFMX0ZMQVNIRXhfVW5sb2NrX0JhbmsxKCksCiAgICAgICAgICAgSEFMX0ZMQVNIRXhfTG9ja19CYW5rMigpIGFuZCBIQUxfRkxBU0hFeF9VbmxvY2tfQmFuazIoKSBmdW5jdGlvbnMKQEAgLTEyMywxMiArMTI1LDIyIEBACiAjaWYgZGVmaW5lZCAoRFVBTF9DT1JFKQogc3RhdGljIHZvaWQgRkxBU0hfT0JfQ000Qm9vdEFkZENvbmZpZyh1aW50MzJfdCBCb290T3B0aW9uLCB1aW50MzJfdCBCb290QWRkcmVzczAsIHVpbnQzMl90IEJvb3RBZGRyZXNzMSk7CiBzdGF0aWMgdm9pZCBGTEFTSF9PQl9HZXRDTTRCb290QWRkKHVpbnQzMl90ICpCb290QWRkcmVzczAsIHVpbnQzMl90ICpCb290QWRkcmVzczEpOwotI2VuZGlmIC8qIERVQUxfQ09SRSAqLworI2VuZGlmIC8qRFVBTF9DT1JFKi8KIAogI2lmIGRlZmluZWQgKEZMQVNIX09UUEJMX0xPQ0tCTCkKIHN0YXRpYyB2b2lkIEZMQVNIX09CX09UUF9Mb2NrQ29uZmlnKHVpbnQzMl90IE9UUF9CbG9jayk7CiBzdGF0aWMgdWludDMyX3QgRkxBU0hfT0JfT1RQX0dldExvY2sodm9pZCk7CiAjZW5kaWYgLyogRkxBU0hfT1RQQkxfTE9DS0JMICovCisKKyNpZiBkZWZpbmVkIChGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRUQpCitzdGF0aWMgdm9pZCBGTEFTSF9PQl9TaGFyZWRSQU1fQ29uZmlnKHVpbnQzMl90IFNoYXJlZFJhbUNvbmZpZyk7CitzdGF0aWMgdWludDMyX3QgRkxBU0hfT0JfU2hhcmVkUkFNX0dldENvbmZpZyh2b2lkKTsKKyNlbmRpZiAvKiBGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRUQgKi8KKworI2lmIGRlZmluZWQgKEZMQVNIX09QVFNSMl9DUFVGUkVRX0JPT1NUKQorc3RhdGljIHZvaWQgRkxBU0hfT0JfQ1BVRnJlcV9Cb29zdENvbmZpZyh1aW50MzJfdCBGcmVxQm9vc3QpOworc3RhdGljIHVpbnQzMl90IEZMQVNIX09CX0NQVUZyZXFfR2V0Qm9vc3Qodm9pZCk7CisjZW5kaWYgLyogRkxBU0hfT1BUU1IyX0NQVUZSRVFfQk9PU1QgKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0xODcsNiArMTk5LDcgQEAKICAgICB9CiAgIH0KIAorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgLyogV2FpdCBmb3IgbGFzdCBvcGVyYXRpb24gdG8gYmUgY29tcGxldGVkIG9uIEJhbmsyICovCiAgIGlmKChwRXJhc2VJbml0LT5CYW5rcyAmIEZMQVNIX0JBTktfMikgPT0gRkxBU0hfQkFOS18yKQogICB7CkBAIC0xOTUsNiArMjA4LDcgQEAKICAgICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgICB9CiAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogICBpZihzdGF0dXMgPT0gSEFMX09LKQogICB7CkBAIC0yMDMsNyArMjE3LDcgQEAKICAgICAgIC8qIE1hc3MgZXJhc2UgdG8gYmUgZG9uZSAqLwogICAgICAgRkxBU0hfTWFzc0VyYXNlKHBFcmFzZUluaXQtPlZvbHRhZ2VSYW5nZSwgcEVyYXNlSW5pdC0+QmFua3MpOwogCi0gICAgICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8KKyAgICAgIC8qIFdhaXQgZm9yIGxhc3Qgb3BlcmF0aW9uIHRvIGJlIGNvbXBsZXRlZCBvbiBCYW5rIDEgKi8KICAgICAgIGlmKChwRXJhc2VJbml0LT5CYW5rcyAmIEZMQVNIX0JBTktfMSkgPT0gRkxBU0hfQkFOS18xKQogICAgICAgewogICAgICAgICBpZihGTEFTSF9XYWl0Rm9yTGFzdE9wZXJhdGlvbigodWludDMyX3QpRkxBU0hfVElNRU9VVF9WQUxVRSwgRkxBU0hfQkFOS18xKSAhPSBIQUxfT0spCkBAIC0yMTMsNiArMjI3LDggQEAKICAgICAgICAgLyogaWYgdGhlIGVyYXNlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZWQsIGRpc2FibGUgdGhlIEJhbmsxIEJFUiBCaXQgKi8KICAgICAgICAgRkxBU0gtPkNSMSAmPSAofkZMQVNIX0NSX0JFUik7CiAgICAgICB9CisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQorICAgICAgLyogV2FpdCBmb3IgbGFzdCBvcGVyYXRpb24gdG8gYmUgY29tcGxldGVkIG9uIEJhbmsgMiAqLwogICAgICAgaWYoKHBFcmFzZUluaXQtPkJhbmtzICYgRkxBU0hfQkFOS18yKSA9PSBGTEFTSF9CQU5LXzIpCiAgICAgICB7CiAgICAgICAgIGlmKEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCh1aW50MzJfdClGTEFTSF9USU1FT1VUX1ZBTFVFLCBGTEFTSF9CQU5LXzIpICE9IEhBTF9PSykKQEAgLTIyMiw2ICsyMzgsNyBAQAogICAgICAgICAvKiBpZiB0aGUgZXJhc2Ugb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgZGlzYWJsZSB0aGUgQmFuazIgQkVSIEJpdCAqLwogICAgICAgICBGTEFTSC0+Q1IyICY9ICh+RkxBU0hfQ1JfQkVSKTsKICAgICAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTI0MSw2ICsyNTgsNyBAQAogICAgICAgICAgIC8qIElmIHRoZSBlcmFzZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLCBkaXNhYmxlIHRoZSBTRVIgQml0ICovCiAgICAgICAgICAgRkxBU0gtPkNSMSAmPSAofihGTEFTSF9DUl9TRVIgfCBGTEFTSF9DUl9TTkIpKTsKICAgICAgICAgfQorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgICAgICAgaWYoKHBFcmFzZUluaXQtPkJhbmtzICYgRkxBU0hfQkFOS18yKSA9PSBGTEFTSF9CQU5LXzIpCiAgICAgICAgIHsKICAgICAgICAgICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8KQEAgLTI0OSw2ICsyNjcsNyBAQAogICAgICAgICAgIC8qIElmIHRoZSBlcmFzZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLCBkaXNhYmxlIHRoZSBTRVIgQml0ICovCiAgICAgICAgICAgRkxBU0gtPkNSMiAmPSAofihGTEFTSF9DUl9TRVIgfCBGTEFTSF9DUl9TTkIpKTsKICAgICAgICAgfQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogCiAgICAgICAgIGlmKHN0YXR1cyAhPSBIQUxfT0spCiAgICAgICAgIHsKQEAgLTI4Nyw3ICszMDYsNyBAQAogICAvKiBSZXNldCBlcnJvciBjb2RlICovCiAgIHBGbGFzaC5FcnJvckNvZGUgPSBIQUxfRkxBU0hfRVJST1JfTk9ORTsKIAotICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgKi8KKyAgLyogV2FpdCBmb3IgbGFzdCBvcGVyYXRpb24gdG8gYmUgY29tcGxldGVkIG9uIEJhbmsgMSAqLwogICBpZigocEVyYXNlSW5pdC0+QmFua3MgJiBGTEFTSF9CQU5LXzEpID09IEZMQVNIX0JBTktfMSkKICAgewogICAgIGlmKEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCh1aW50MzJfdClGTEFTSF9USU1FT1VUX1ZBTFVFLCBGTEFTSF9CQU5LXzEpICE9IEhBTF9PSykKQEAgLTI5Niw2ICszMTUsOCBAQAogICAgIH0KICAgfQogCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQorICAvKiBXYWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBiZSBjb21wbGV0ZWQgb24gQmFuayAyICovCiAgIGlmKChwRXJhc2VJbml0LT5CYW5rcyAmIEZMQVNIX0JBTktfMikgPT0gRkxBU0hfQkFOS18yKQogICB7CiAgICAgaWYoRkxBU0hfV2FpdEZvckxhc3RPcGVyYXRpb24oKHVpbnQzMl90KUZMQVNIX1RJTUVPVVRfVkFMVUUsIEZMQVNIX0JBTktfMikgIT0gSEFMX09LKQpAQCAtMzAzLDYgKzMyNCw3IEBACiAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7CiAgICAgfQogICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAKICAgaWYgKHN0YXR1cyAhPSBIQUxfT0spCiAgIHsKQEAgLTMyMiw2ICszNDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0lUX1NUUkJFUlJfQkFOSzEgfCBGTEFTSF9JVF9JTkNFUlJfQkFOSzEpOwogI2VuZGlmIC8qIEZMQVNIX0NSX09QRVJSSUUgKi8KICAgICB9CisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogICAgIGlmKChwRXJhc2VJbml0LT5CYW5rcyAmIEZMQVNIX0JBTktfMikgPT0gRkxBU0hfQkFOS18yKQogICAgIHsKICAgICAgIC8qIEVuYWJsZSBFbmQgb2YgT3BlcmF0aW9uIGFuZCBFcnJvciBpbnRlcnJ1cHRzIGZvciBCYW5rIDIgKi8KQEAgLTMzMyw2ICszNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMQVNIX0lUX1NUUkJFUlJfQkFOSzIgfCBGTEFTSF9JVF9JTkNFUlJfQkFOSzIpOwogI2VuZGlmIC8qIEZMQVNIX0NSX09QRVJSSUUgKi8KICAgICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAKICAgICBpZihwRXJhc2VJbml0LT5UeXBlRXJhc2UgPT0gRkxBU0hfVFlQRUVSQVNFX01BU1NFUkFTRSkKICAgICB7CkBAIC0zNDEsMTAgKzM2NSwxMiBAQAogICAgICAgewogICAgICAgICBwRmxhc2guUHJvY2VkdXJlT25Hb2luZyA9IEZMQVNIX1BST0NfTUFTU0VSQVNFX0JBTksxOwogICAgICAgfQorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgICAgIGVsc2UgaWYocEVyYXNlSW5pdC0+QmFua3MgPT0gRkxBU0hfQkFOS18yKQogICAgICAgewogICAgICAgICBwRmxhc2guUHJvY2VkdXJlT25Hb2luZyA9IEZMQVNIX1BST0NfTUFTU0VSQVNFX0JBTksyOwogICAgICAgfQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogICAgICAgZWxzZQogICAgICAgewogICAgICAgICBwRmxhc2guUHJvY2VkdXJlT25Hb2luZyA9IEZMQVNIX1BST0NfQUxMQkFOS19NQVNTRVJBU0U7CkBAIC0zNTUsNiArMzgxLDcgQEAKICAgICBlbHNlCiAgICAgewogICAgICAgLyogRXJhc2UgYnkgc2VjdG9yIHRvIGJlIGRvbmUgKi8KKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgICAgICBpZihwRXJhc2VJbml0LT5CYW5rcyA9PSBGTEFTSF9CQU5LXzEpCiAgICAgICB7CiAgICAgICAgIHBGbGFzaC5Qcm9jZWR1cmVPbkdvaW5nID0gRkxBU0hfUFJPQ19TRUNURVJBU0VfQkFOSzE7CkBAIC0zNjMsNiArMzkwLDkgQEAKICAgICAgIHsKICAgICAgICAgcEZsYXNoLlByb2NlZHVyZU9uR29pbmcgPSBGTEFTSF9QUk9DX1NFQ1RFUkFTRV9CQU5LMjsKICAgICAgIH0KKyNlbHNlCisgICAgICBwRmxhc2guUHJvY2VkdXJlT25Hb2luZyA9IEZMQVNIX1BST0NfU0VDVEVSQVNFX0JBTksxOworI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogCiAgICAgICBwRmxhc2guTmJTZWN0b3JzVG9FcmFzZSA9IHBFcmFzZUluaXQtPk5iU2VjdG9yczsKICAgICAgIHBGbGFzaC5TZWN0b3IgPSBwRXJhc2VJbml0LT5TZWN0b3I7CkBAIC00MDEsMTAgKzQzMSwxMiBAQAogICB7CiAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwogICB9CisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogICBlbHNlIGlmKEZMQVNIX1dhaXRGb3JMYXN0T3BlcmF0aW9uKCh1aW50MzJfdClGTEFTSF9USU1FT1VUX1ZBTFVFLCBGTEFTSF9CQU5LXzIpICE9IEhBTF9PSykKICAgewogICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKICAgfQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogICBlbHNlCiAgIHsKICAgICBzdGF0dXMgPSBIQUxfT0s7CkBAIC00OTEsNiArNTIzLDIyIEBACiAgICAgICBGTEFTSF9PQl9PVFBfTG9ja0NvbmZpZyhwT0JJbml0LT5PVFBCbG9ja0xvY2spOwogICAgIH0KICNlbmRpZiAvKiBGTEFTSF9PVFBCTF9MT0NLQkwgKi8KKworI2lmIGRlZmluZWQoRkxBU0hfT1BUU1IyX1RDTV9BWElfU0hBUkVEKQorICAgIC8qIFRDTSAvIEFYSSBTaGFyZWQgUkFNIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBpZigocE9CSW5pdC0+T3B0aW9uVHlwZSAmIE9QVElPTkJZVEVfU0hBUkVEX1JBTSkgPT0gT1BUSU9OQllURV9TSEFSRURfUkFNKQorICAgIHsKKyAgICAgIEZMQVNIX09CX1NoYXJlZFJBTV9Db25maWcocE9CSW5pdC0+U2hhcmVkUmFtQ29uZmlnKTsKKyAgICB9CisjZW5kaWYgLyogRkxBU0hfT1BUU1IyX1RDTV9BWElfU0hBUkVEICovCisKKyNpZiBkZWZpbmVkKEZMQVNIX09QVFNSMl9DUFVGUkVRX0JPT1NUKQorICAgIC8qIENQVSBGcmVxdWVuY3kgQm9vc3QgY29uZmlndXJhdGlvbiAqLworICAgIGlmKChwT0JJbml0LT5PcHRpb25UeXBlICYgT1BUSU9OQllURV9GUkVRX0JPT1NUKSA9PSBPUFRJT05CWVRFX0ZSRVFfQk9PU1QpCisgICAgeworICAgICAgRkxBU0hfT0JfQ1BVRnJlcV9Cb29zdENvbmZpZyhwT0JJbml0LT5GcmVxQm9vc3RTdGF0ZSk7CisgICAgfQorI2VuZGlmIC8qIEZMQVNIX09QVFNSMl9DUFVGUkVRX0JPT1NUICovCiAgIH0KIAogICAvKiBQcm9jZXNzIFVubG9ja2VkICovCkBAIC01MjEsNyArNTY5LDExIEBACiAgIC8qR2V0IEJPUiBMZXZlbCovCiAgIHBPQkluaXQtPkJPUkxldmVsID0gRkxBU0hfT0JfR2V0Qk9SKCk7CiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgIGlmICgocE9CSW5pdC0+QmFua3MgPT0gRkxBU0hfQkFOS18xKSB8fCAocE9CSW5pdC0+QmFua3MgPT0gRkxBU0hfQkFOS18yKSkKKyNlbHNlCisgIGlmIChwT0JJbml0LT5CYW5rcyA9PSBGTEFTSF9CQU5LXzEpCisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAgIHsKICAgICBwT0JJbml0LT5PcHRpb25UeXBlIHw9IChPUFRJT05CWVRFX1dSUCB8IE9QVElPTkJZVEVfUENST1AgfCBPUFRJT05CWVRFX1NFQ1VSRV9BUkVBKTsKIApAQCAtNTUyLDYgKzYwNCwyMCBAQAogICAvKiBHZXQgT1RQIEJsb2NrIExvY2sgKi8KICAgcE9CSW5pdC0+T1RQQmxvY2tMb2NrID0gRkxBU0hfT0JfT1RQX0dldExvY2soKTsKICNlbmRpZiAvKiBGTEFTSF9PVFBCTF9MT0NLQkwgKi8KKworI2lmIGRlZmluZWQgKEZMQVNIX09QVFNSMl9UQ01fQVhJX1NIQVJFRCkKKyAgcE9CSW5pdC0+T3B0aW9uVHlwZSB8PSBPUFRJT05CWVRFX1NIQVJFRF9SQU07CisKKyAgLyogR2V0IFRDTSAvIEFYSSBTaGFyZWQgUkFNICovCisgIHBPQkluaXQtPlNoYXJlZFJhbUNvbmZpZyA9IEZMQVNIX09CX1NoYXJlZFJBTV9HZXRDb25maWcoKTsKKyNlbmRpZiAvKiBGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRUQgKi8KKworI2lmIGRlZmluZWQgKEZMQVNIX09QVFNSMl9DUFVGUkVRX0JPT1NUKQorICBwT0JJbml0LT5PcHRpb25UeXBlIHw9IE9QVElPTkJZVEVfRlJFUV9CT09TVDsKKworICAvKiBHZXQgQ1BVIEZyZXF1ZW5jeSBCb29zdCAqLworICBwT0JJbml0LT5GcmVxQm9vc3RTdGF0ZSA9IEZMQVNIX09CX0NQVUZyZXFfR2V0Qm9vc3QoKTsKKyNlbmRpZiAvKiBGTEFTSF9PUFRTUjJfQ1BVRlJFUV9CT09TVCAqLwogfQogCiAvKioKQEAgLTU4Nyw2ICs2NTMsNyBAQAogICByZXR1cm4gSEFMX09LOwogfQogCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogLyoqCiAgICogQGJyaWVmICBVbmxvY2sgdGhlIEZMQVNIIEJhbmsyIGNvbnRyb2wgcmVnaXN0ZXJzIGFjY2VzcwogICAqIEByZXR2YWwgSEFMIFN0YXR1cwpAQCAtNjE5LDYgKzY4Niw3IEBACiAgIFNFVF9CSVQoRkxBU0gtPkNSMiwgRkxBU0hfQ1JfTE9DSyk7CiAgIHJldHVybiBIQUxfT0s7CiB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAKIC8qCiAgICogQGJyaWVmICBQZXJmb3JtIGEgQ1JDIGNvbXB1dGF0aW9uIG9uIHRoZSBzcGVjaWZpZWQgRkxBU0ggbWVtb3J5IGFyZWEKQEAgLTY5Myw2ICs3NjEsNyBAQAogICAgICAgLyogQ2xlYXIgQ1JDIGZsYWdzICovCiAgICAgICBfX0hBTF9GTEFTSF9DTEVBUl9GTEFHX0JBTksxKEZMQVNIX0ZMQUdfQ1JDRU5EX0JBTksxIHwgRkxBU0hfRkxBR19DUkNSREVSUl9CQU5LMSk7CiAgICAgfQorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgICBlbHNlCiAgICAgewogICAgICAgLyogRW5hYmxlIENSQyBmZWF0dXJlICovCkBAIC03NDEsNiArODEwLDcgQEAKICAgICAgIC8qIENsZWFyIENSQyBmbGFncyAqLwogICAgICAgX19IQUxfRkxBU0hfQ0xFQVJfRkxBR19CQU5LMihGTEFTSF9GTEFHX0NSQ0VORF9CQU5LMiB8IEZMQVNIX0ZMQUdfQ1JDUkRFUlJfQkFOSzIpOwogICAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KICAgfQogCiAgIHJldHVybiBzdGF0dXM7CkBAIC03ODcsNiArODU3LDcgQEAKICNlbmRpZiAvKiBGTEFTSF9DUl9QU0laRSAqLwogICBhc3NlcnRfcGFyYW0oSVNfRkxBU0hfQkFOSyhCYW5rcykpOwogCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogICAvKiBGbGFzaCBNYXNzIEVyYXNlICovCiAgIGlmKChCYW5rcyAmIEZMQVNIX0JBTktfQk9USCkgPT0gRkxBU0hfQkFOS19CT1RIKQogICB7CkBAIC04MDQsNiArODc1LDcgQEAKICAgICBGTEFTSC0+T1BUQ1IgfD0gRkxBU0hfT1BUQ1JfTUVSOwogICB9CiAgIGVsc2UKKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KICAgewogICAgIC8qIFByb2NlZWQgdG8gZXJhc2UgRmxhc2ggQmFuayAgKi8KICAgICBpZigoQmFua3MgJiBGTEFTSF9CQU5LXzEpID09IEZMQVNIX0JBTktfMSkKQEAgLTgxNyw2ICs4ODksOCBAQAogICAgICAgLyogRXJhc2UgQmFuazEgKi8KICAgICAgIEZMQVNILT5DUjEgfD0gKEZMQVNIX0NSX0JFUiB8IEZMQVNIX0NSX1NUQVJUKTsKICAgICB9CisKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgICAgaWYoKEJhbmtzICYgRkxBU0hfQkFOS18yKSA9PSBGTEFTSF9CQU5LXzIpCiAgICAgewogI2lmIGRlZmluZWQgKEZMQVNIX0NSX1BTSVpFKQpAQCAtODI4LDYgKzkwMiw3IEBACiAgICAgICAvKiBFcmFzZSBCYW5rMiAqLwogICAgICAgRkxBU0gtPkNSMiB8PSAoRkxBU0hfQ1JfQkVSIHwgRkxBU0hfQ1JfU1RBUlQpOwogICAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KICAgfQogfQogCkBAIC04NzQsNiArOTQ5LDcgQEAKICNlbmRpZiAvKiBGTEFTSF9DUl9QU0laRSAqLwogICB9CiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgIGlmKChCYW5rcyAmIEZMQVNIX0JBTktfMikgPT0gRkxBU0hfQkFOS18yKQogICB7CiAjaWYgZGVmaW5lZCAoRkxBU0hfQ1JfUFNJWkUpCkBAIC04ODgsNiArOTY0LDcgQEAKICAgICBGTEFTSC0+Q1IyIHw9IChGTEFTSF9DUl9TRVIgfCAoU2VjdG9yIDw8IEZMQVNIX0NSX1NOQl9Qb3MpIHwgRkxBU0hfQ1JfU1RBUlQpOwogI2VuZGlmIC8qIEZMQVNIX0NSX1BTSVpFICovCiAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIH0KIAogLyoqCkBAIC05MTYsMTEgKzk5MywxMyBAQAogICAgIEZMQVNILT5XUFNOX1BSRzEgJj0gKH4oV1JQU2VjdG9yICYgRkxBU0hfV1BTTl9XUlBTTikpOwogICB9CiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgIGlmKChCYW5rcyAmIEZMQVNIX0JBTktfMikgPT0gRkxBU0hfQkFOS18yKQogICB7CiAgICAgLyogRW5hYmxlIFdyaXRlIFByb3RlY3Rpb24gZm9yIGJhbmsgMiAqLwogICAgIEZMQVNILT5XUFNOX1BSRzIgJj0gKH4oV1JQU2VjdG9yICYgRkxBU0hfV1BTTl9XUlBTTikpOwogICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiB9CiAKIC8qKgpAQCAtOTQ5LDExICsxMDI4LDEzIEBACiAgICAgRkxBU0gtPldQU05fUFJHMSB8PSAoV1JQU2VjdG9yICYgRkxBU0hfV1BTTl9XUlBTTik7CiAgIH0KIAorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgaWYoKEJhbmtzICYgRkxBU0hfQkFOS18yKSA9PSBGTEFTSF9CQU5LXzIpCiAgIHsKICAgICAvKiBEaXNhYmxlIFdyaXRlIFByb3RlY3Rpb24gZm9yIGJhbmsgMiAqLwogICAgIEZMQVNILT5XUFNOX1BSRzIgfD0gKFdSUFNlY3RvciAmIEZMQVNIX1dQU05fV1JQU04pOwogICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiB9CiAKIC8qKgpAQCAtOTc4LDE1ICsxMDU5LDE3IEBACiB7CiAgIHVpbnQzMl90IHJlZ3ZhbHVlID0gMFU7CiAKLSAgaWYoKEJhbmsgJiBGTEFTSF9CQU5LX0JPVEgpID09IEZMQVNIX0JBTktfMSkKKyAgaWYoQmFuayA9PSBGTEFTSF9CQU5LXzEpCiAgIHsKICAgICByZWd2YWx1ZSA9IEZMQVNILT5XUFNOX0NVUjE7CiAgIH0KIAotICBpZigoQmFuayAmIEZMQVNIX0JBTktfQk9USCkgPT0gRkxBU0hfQkFOS18yKQorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKKyAgaWYoQmFuayA9PSBGTEFTSF9CQU5LXzIpCiAgIHsKICAgICByZWd2YWx1ZSA9IEZMQVNILT5XUFNOX0NVUjI7CiAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogICAoKldSUFNlY3RvcikgPSAofnJlZ3ZhbHVlKSAmIEZMQVNIX1dQU05fV1JQU047CiAKQEAgLTExOTksNyArMTI4Miw5IEBACiAgICAgb3B0cl9yZWdfdmFsIHw9IChVc2VyQ29uZmlnICYgRkxBU0hfT1BUU1JfQkNNNyk7CiAgICAgb3B0cl9yZWdfbWFzayB8PSBGTEFTSF9PUFRTUl9CQ003OwogICB9CisjZW5kaWYgLyogRFVBTF9DT1JFICovCiAKKyNpZiBkZWZpbmVkIChGTEFTSF9PUFRTUl9OUlNUX1NUT1BfRDIpCiAgIGlmKChVc2VyVHlwZSAmIE9CX1VTRVJfTlJTVF9TVE9QX0QyKSAhPSAwVSkKICAgewogICAgIC8qIE5SU1RfU1RPUCBvcHRpb24gYnl0ZSBzaG91bGQgYmUgbW9kaWZpZWQgKi8KQEAgLTEyMTksNyArMTMwNCw5IEBACiAgICAgb3B0cl9yZWdfdmFsIHw9IChVc2VyQ29uZmlnICYgRkxBU0hfT1BUU1JfTlJTVF9TVEJZX0QyKTsKICAgICBvcHRyX3JlZ19tYXNrIHw9IEZMQVNIX09QVFNSX05SU1RfU1RCWV9EMjsKICAgfQotI2VuZGlmIC8qIERVQUxfQ09SRSAqLworI2VuZGlmIC8qIEZMQVNIX09QVFNSX05SU1RfU1RPUF9EMiAqLworCisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogICBpZigoVXNlclR5cGUgJiBPQl9VU0VSX1NXQVBfQkFOSykgIT0gMFUpCiAgIHsKICAgICAvKiBTV0FQX0JBTktfT1BUIG9wdGlvbiBieXRlIHNob3VsZCBiZSBtb2RpZmllZCAqLwpAQCAtMTIyOSw2ICsxMzE2LDcgQEAKICAgICBvcHRyX3JlZ192YWwgfD0gKFVzZXJDb25maWcgJiBGTEFTSF9PUFRTUl9TV0FQX0JBTktfT1BUKTsKICAgICBvcHRyX3JlZ19tYXNrIHw9IEZMQVNIX09QVFNSX1NXQVBfQkFOS19PUFQ7CiAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIAogICBpZigoVXNlclR5cGUgJiBPQl9VU0VSX0lPSFNMVikgIT0gMFUpCiAgIHsKQEAgLTEzMjUsNiArMTQxMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIFBDUk9QQ29uZmlnOwogICB9CiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgIGlmKChCYW5rcyAmIEZMQVNIX0JBTktfMikgPT0gRkxBU0hfQkFOS18yKQogICB7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0ZMQVNIX1BST0dSQU1fQUREUkVTU19CQU5LMihQQ1JPUFN0YXJ0QWRkcikpOwpAQCAtMTMzNSw2ICsxNDI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgKCgoUENST1BFbmRBZGRyIC0gRkxBU0hfQkFOSzJfQkFTRSkgPj4gOCkgPDwgRkxBU0hfUFJBUl9QUk9UX0FSRUFfRU5EX1BvcykgfCBcCiAgICAgICAgICAgICAgICAgICAgICAgIFBDUk9QQ29uZmlnOwogICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiB9CiAKIC8qKgpAQCAtMTM2MCwxNyArMTQ1MCwxOSBAQAogICB1aW50MzJfdCByZWd2YWx1ZSA9IDA7CiAgIHVpbnQzMl90IGJhbmtCYXNlID0gMDsKIAotICBpZigoQmFuayAmIEZMQVNIX0JBTktfQk9USCkgPT0gRkxBU0hfQkFOS18xKQorICBpZihCYW5rID09IEZMQVNIX0JBTktfMSkKICAgewogICAgIHJlZ3ZhbHVlID0gRkxBU0gtPlBSQVJfQ1VSMTsKICAgICBiYW5rQmFzZSA9IEZMQVNIX0JBTksxX0JBU0U7CiAgIH0KIAotICBpZigoQmFuayAmIEZMQVNIX0JBTktfQk9USCkgPT0gRkxBU0hfQkFOS18yKQorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKKyAgaWYoQmFuayA9PSBGTEFTSF9CQU5LXzIpCiAgIHsKICAgICByZWd2YWx1ZSA9IEZMQVNILT5QUkFSX0NVUjI7CiAgICAgYmFua0Jhc2UgPSBGTEFTSF9CQU5LMl9CQVNFOwogICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiAKICAgKCpQQ1JPUENvbmZpZykgPSAgKHJlZ3ZhbHVlICYgRkxBU0hfUFJBUl9ETUVQKTsKIApAQCAtMTU2MSw2ICsxNjUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgKFNlY3VyZUFyZWFDb25maWcgJiBGTEFTSF9TQ0FSX0RNRVMpOwogICB9CiAKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCiAgIGlmKChCYW5rcyAmIEZMQVNIX0JBTktfMikgPT0gRkxBU0hfQkFOS18yKQogICB7CiAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KQEAgLTE1NzIsNiArMTY2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICgoKFNlY3VyZUFyZWFFbmRBZGRyIC0gRkxBU0hfQkFOSzJfQkFTRSkgPj4gOCkgPDwgRkxBU0hfU0NBUl9TRUNfQVJFQV9FTkRfUG9zKSB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgKFNlY3VyZUFyZWFDb25maWcgJiBGTEFTSF9TQ0FSX0RNRVMpOwogICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiB9CiAKIC8qKgpAQCAtMTU4OSwxNyArMTY4MywxOSBAQAogICB1aW50MzJfdCBiYW5rQmFzZSA9IDA7CiAKICAgLyogQ2hlY2sgQmFuayBwYXJhbWV0ZXIgdmFsdWUgKi8KLSAgaWYoKEJhbmsgJiBGTEFTSF9CQU5LX0JPVEgpID09IEZMQVNIX0JBTktfMSkKKyAgaWYoQmFuayA9PSBGTEFTSF9CQU5LXzEpCiAgIHsKICAgICByZWd2YWx1ZSA9IEZMQVNILT5TQ0FSX0NVUjE7CiAgICAgYmFua0Jhc2UgPSBGTEFTSF9CQU5LMV9CQVNFOwogICB9CiAKLSAgaWYoKEJhbmsgJiBGTEFTSF9CQU5LX0JPVEgpID09IEZMQVNIX0JBTktfMikKKyNpZiBkZWZpbmVkIChEVUFMX0JBTkspCisgIGlmKEJhbmsgPT0gRkxBU0hfQkFOS18yKQogICB7CiAgICAgcmVndmFsdWUgPSBGTEFTSC0+U0NBUl9DVVIyOwogICAgIGJhbmtCYXNlID0gRkxBU0hfQkFOSzJfQkFTRTsKICAgfQorI2VuZGlmIC8qIERVQUxfQkFOSyAqLwogCiAgIC8qIEdldCB0aGUgc2VjdXJlIGFyZWEgc2V0dGluZ3MgKi8KICAgKCpTZWN1cmVBcmVhQ29uZmlnKSA9IChyZWd2YWx1ZSAmIEZMQVNIX1NDQVJfRE1FUyk7CkBAIC0xNjI3LDYgKzE3MjMsNyBAQAogICAgIC8qIFNlbGVjdCBDUkMgU2VjdG9yIGFuZCBhY3RpdmF0ZSBBRERfU0VDVCBiaXQgKi8KICAgICBGTEFTSC0+Q1JDQ1IxIHw9IFNlY3RvciB8IEZMQVNIX0NSQ0NSX0FERF9TRUNUOwogICB9CisjaWYgZGVmaW5lZCAoRFVBTF9CQU5LKQogICBlbHNlCiAgIHsKICAgICAvKiBDbGVhciBDUkMgc2VjdG9yICovCkBAIC0xNjM1LDYgKzE3MzIsNyBAQAogICAgIC8qIFNlbGVjdCBDUkMgU2VjdG9yIGFuZCBhY3RpdmF0ZSBBRERfU0VDVCBiaXQgKi8KICAgICBGTEFTSC0+Q1JDQ1IyIHw9IFNlY3RvciB8IEZMQVNIX0NSQ0NSX0FERF9TRUNUOwogICB9CisjZW5kaWYgLyogRFVBTF9CQU5LICovCiB9CiAKIC8qKgpAQCAtMTY1NSw2ICsxNzUzLDcgQEAKICAgICBGTEFTSC0+Q1JDU0FERDEgPSBDUkNTdGFydEFkZHI7CiAgICAgRkxBU0gtPkNSQ0VBREQxID0gQ1JDRW5kQWRkcjsKICAgfQorI2lmIGRlZmluZWQgKERVQUxfQkFOSykKICAgZWxzZQogICB7CiAgICAgYXNzZXJ0X3BhcmFtKElTX0ZMQVNIX1BST0dSQU1fQUREUkVTU19CQU5LMihDUkNTdGFydEFkZHIpKTsKQEAgLTE2NjQsNiArMTc2Myw3IEBACiAgICAgRkxBU0gtPkNSQ1NBREQyID0gQ1JDU3RhcnRBZGRyOwogICAgIEZMQVNILT5DUkNFQUREMiA9IENSQ0VuZEFkZHI7CiAgIH0KKyNlbmRpZiAvKiBEVUFMX0JBTksgKi8KIH0KIC8qKgogICAqIEB9CkBAIC0xNjk2LDYgKzE3OTYsNjAgQEAKIH0KICNlbmRpZiAvKiBGTEFTSF9PVFBCTF9MT0NLQkwgKi8KIAorI2lmIGRlZmluZWQgKEZMQVNIX09QVFNSMl9UQ01fQVhJX1NIQVJFRCkKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBUQ00gLyBBWEkgU2hhcmVkIFJBTS4KKyAgKiBAcGFyYW0gIFNoYXJlZFJhbUNvbmZpZyBzcGVjaWZpZXMgdGhlIFNoYXJlZCBSQU0gY29uZmlndXJhdGlvbi4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkxBU0hFeF9PQl9UQ01fQVhJX1NIQVJFRAorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgRkxBU0hfT0JfU2hhcmVkUkFNX0NvbmZpZyh1aW50MzJfdCBTaGFyZWRSYW1Db25maWcpCit7CisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19PQl9VU0VSX1RDTV9BWElfU0hBUkVEKFNoYXJlZFJhbUNvbmZpZykpOworCisgIC8qIENvbmZpZ3VyZSB0aGUgVENNIC8gQVhJIFNoYXJlZCBSQU0gaW4gdGhlIG9wdGlvbiBieXRlcyByZWdpc3RlciAqLworICBNT0RJRllfUkVHKEZMQVNILT5PUFRTUjJfUFJHLCBGTEFTSF9PUFRTUjJfVENNX0FYSV9TSEFSRUQsIFNoYXJlZFJhbUNvbmZpZyk7Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBUQ00gLyBBWEkgU2hhcmVkIFJBTSBjb25maWd1cnRpb24uCisgICogQHJldHZhbCBTaGFyZWRSYW1Db25maWcgcmV0dXJucyB0aGUgVENNIC8gQVhJIFNoYXJlZCBSQU0gY29uZmlndXJhdGlvbi4KKyAgKiAgICAgICAgIFRoaXMgcmV0dXJuIHZhbHVlIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkxBU0hFeF9PQl9UQ01fQVhJX1NIQVJFRAorICAqLworc3RhdGljIHVpbnQzMl90IEZMQVNIX09CX1NoYXJlZFJBTV9HZXRDb25maWcodm9pZCkKK3sKKyAgcmV0dXJuIChGTEFTSC0+T1BUU1IyX0NVUiAmIEZMQVNIX09QVFNSMl9UQ01fQVhJX1NIQVJFRCk7OworfQorI2VuZGlmIC8qIEZMQVNIX09QVFNSMl9UQ01fQVhJX1NIQVJFRCAqLworCisjaWYgZGVmaW5lZCAoRkxBU0hfT1BUU1IyX0NQVUZSRVFfQk9PU1QpCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgQ1BVIEZyZXF1ZW5jeSBCb29zdC4KKyAgKiBAcGFyYW0gIEZyZXFCb29zdCBzcGVjaWZpZXMgdGhlIENQVSBGcmVxdWVuY3kgQm9vc3Qgc3RhdGUuCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZMQVNIRXhfT0JfQ1BVRlJFUV9CT09TVAorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgRkxBU0hfT0JfQ1BVRnJlcV9Cb29zdENvbmZpZyh1aW50MzJfdCBGcmVxQm9vc3QpCit7CisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19PQl9VU0VSX0NQVUZSRVFfQk9PU1QoRnJlcUJvb3N0KSk7CisKKyAgLyogQ29uZmlndXJlIHRoZSBDUFUgRnJlcXVlbmN5IEJvb3N0IGluIHRoZSBvcHRpb24gYnl0ZXMgcmVnaXN0ZXIgKi8KKyAgTU9ESUZZX1JFRyhGTEFTSC0+T1BUU1IyX1BSRywgRkxBU0hfT1BUU1IyX0NQVUZSRVFfQk9PU1QsIEZyZXFCb29zdCk7Cit9CisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBDUFUgRnJlcXVlbmN5IEJvb3N0IHN0YXRlLgorICAqIEByZXR2YWwgRnJlcUJvb3N0IHJldHVybnMgdGhlIENQVSBGcmVxdWVuY3kgQm9vc3Qgc3RhdGUuCisgICogICAgICAgICBUaGlzIHJldHVybiB2YWx1ZSBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZMQVNIRXhfT0JfQ1BVRlJFUV9CT09TVAorICAqLworc3RhdGljIHVpbnQzMl90IEZMQVNIX09CX0NQVUZyZXFfR2V0Qm9vc3Qodm9pZCkKK3sKKyAgcmV0dXJuIChGTEFTSC0+T1BUU1IyX0NVUiAmIEZMQVNIX09QVFNSMl9DUFVGUkVRX0JPT1NUKTs7Cit9CisjZW5kaWYgLyogRkxBU0hfT1BUU1IyX0NQVUZSRVFfQk9PU1QgKi8KKwogI2VuZGlmIC8qIEhBTF9GTEFTSF9NT0RVTEVfRU5BQkxFRCAqLwogCiAvKioKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX2ZtYWMuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2ZtYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTU5MjEwCi0tLSAvZGV2L251bGwKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfZm1hYy5jCkBAIC0wLDAgKzEsMjUyMCBAQAorLyoqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIEBmaWxlICAgIHN0bTMyaDd4eF9oYWxfZm1hYy5jCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBGTUFDIEhBTCBtb2R1bGUgZHJpdmVyLgorICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKKyAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIEZNQUMgcGVyaXBoZXJhbDoKKyAgKiAgICAgICAgICAgKyBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCisgICogICAgICAgICAgICsgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucworICAqICAgICAgICAgICArIENhbGxiYWNrIGZ1bmN0aW9ucworICAqICAgICAgICAgICArIElSUSBoYW5kbGVyIG1hbmFnZW1lbnQKKyAgKiAgICAgICAgICAgKyBQZXJpcGhlcmFsIFN0YXRlIGZ1bmN0aW9ucworICAqCisgICogIEB2ZXJiYXRpbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgICAgVGhlIEZNQUMgSEFMIGRyaXZlciBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzOgorCisgICAgICAoIykgSW5pdGlhbGl6ZSB0aGUgRk1BQyBsb3cgbGV2ZWwgcmVzb3VyY2VzIGJ5IGltcGxlbWVudGluZyB0aGUgSEFMX0ZNQUNfTXNwSW5pdCgpOgorICAgICAgICAgICgrKykgRW5hYmxlIHRoZSBGTUFDIGludGVyZmFjZSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfRk1BQ19DTEtfRU5BQkxFKCkuCisgICAgICAgICAgKCsrKSBJbiBjYXNlIG9mIHVzaW5nIGludGVycnVwdHMgKGUuZy4gYWNjZXNzIGNvbmZpZ3VyZWQgYXMgRk1BQ19CVUZGRVJfQUNDRVNTX0lUKToKKyAgICAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgRk1BQyBpbnRlcnJ1cHQgcHJpb3JpdHkgdXNpbmcgSEFMX05WSUNfU2V0UHJpb3JpdHkoKS4KKyAgICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgRk1BQyBJUlEgaGFuZGxlciB1c2luZyBIQUxfTlZJQ19FbmFibGVJUlEoKS4KKyAgICAgICAgICAgICAgICgrKyspIEluIEZNQUMgSVJRIGhhbmRsZXIsIGNhbGwgSEFMX0ZNQUNfSVJRSGFuZGxlcigpLgorICAgICAgICAgICgrKykgSW4gY2FzZSBvZiB1c2luZyBETUEgdG8gY29udHJvbCBkYXRhIHRyYW5zZmVyIChlLmcuIGFjY2VzcyBjb25maWd1cmVkCisgICAgICAgICAgICAgICBhcyBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BKToKKyAgICAgICAgICAgICAgICgrKyspIEVuYWJsZSB0aGUgRE1BMSBpbnRlcmZhY2UgY2xvY2sgdXNpbmcgX19IQUxfUkNDX0RNQTFfQ0xLX0VOQUJMRSgpLgorICAgICAgICAgICAgICAgKCsrKykgRW5hYmxlIHRoZSBETUFNVVgxIGludGVyZmFjZSBjbG9jayB1c2luZyBfX0hBTF9SQ0NfRE1BTVVYMV9DTEtfRU5BQkxFKCkuCisgICAgICAgICAgICAgICAoKysrKSBJZiB0aGUgaW5pdGlhbGlzYXRpb24gb2YgdGhlIGludGVybmFsIGJ1ZmZlcnMgKGNvZWZmaWNpZW50cywgaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpIGlzIGRvbmUgdmlhIERNQSwgY29uZmlndXJlIGFuZCBlbmFibGUgb25lIERNQSBjaGFubmVsIGZvcgorICAgICAgICAgICAgICAgICAgICAgbWFuYWdpbmcgZGF0YSB0cmFuc2ZlciBmcm9tIG1lbW9yeSB0byBtZW1vcnkgKHByZWxvYWQgY2hhbm5lbCkuCisgICAgICAgICAgICAgICAoKysrKSBJZiB0aGUgaW5wdXQgYnVmZmVyIGlzIGFjY2Vzc2VkIHZpYSBETUEsIGNvbmZpZ3VyZSBhbmQgZW5hYmxlIG9uZQorICAgICAgICAgICAgICAgICAgICAgRE1BIGNoYW5uZWwgZm9yIG1hbmFnaW5nIGRhdGEgdHJhbnNmZXIgZnJvbSBtZW1vcnkgdG8gcGVyaXBoZXJhbAorICAgICAgICAgICAgICAgICAgICAgKGlucHV0IGNoYW5uZWwpLgorICAgICAgICAgICAgICAgKCsrKykgSWYgdGhlIG91dHB1dCBidWZmZXIgaXMgYWNjZXNzZWQgdmlhIERNQSwgY29uZmlndXJlIGFuZCBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgIG9uZSBETUEgY2hhbm5lbCBmb3IgbWFuYWdpbmcgZGF0YSB0cmFuc2ZlciBmcm9tIHBlcmlwaGVyYWwgdG8KKyAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSAob3V0cHV0IGNoYW5uZWwpLgorICAgICAgICAgICAgICAgKCsrKykgQXNzb2NpYXRlIHRoZSBpbml0aWFsaXplZCBETUEgaGFuZGxlKHMpIHRvIHRoZSBGTUFDIERNQSBoYW5kbGUocykKKyAgICAgICAgICAgICAgICAgICAgIHVzaW5nIF9fSEFMX0xJTktETUEoKS4KKyAgICAgICAgICAgICAgICgrKyspIENvbmZpZ3VyZSB0aGUgcHJpb3JpdHkgYW5kIGVuYWJsZSB0aGUgTlZJQyBmb3IgdGhlIHRyYW5zZmVyIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgb24gdGhlIGVuYWJsZWQgRE1BIGNoYW5uZWwocykgdXNpbmcgSEFMX05WSUNfU2V0UHJpb3JpdHkoKQorICAgICAgICAgICAgICAgICAgICAgYW5kIEhBTF9OVklDX0VuYWJsZUlSUSgpLgorCisgICAgICAoIykgSW5pdGlhbGl6ZSB0aGUgRk1BQyBIQUwgdXNpbmcgSEFMX0ZNQUNfSW5pdCgpLiBUaGlzIGZ1bmN0aW9uCisgICAgICAgICAgcmVzb3J0cyB0byBIQUxfRk1BQ19Nc3BJbml0KCkgZm9yIGxvdy1sZXZlbCBpbml0aWFsaXphdGlvbi4KKworICAgICAgKCMpIENvbmZpZ3VyZSB0aGUgRk1BQyBwcm9jZXNzaW5nIChmaWx0ZXIpIHVzaW5nIEhBTF9GTUFDX0ZpbHRlckNvbmZpZygpCisgICAgICAgICAgb3IgSEFMX0ZNQUNfRmlsdGVyQ29uZmlnX0RNQSgpLgorICAgICAgICAgIFRoaXMgZnVuY3Rpb246CisgICAgICAgICAgKCsrKSBEZWZpbmVzIHRoZSBtZW1vcnkgYXJlYSB3aXRoaW4gdGhlIEZNQUMgaW50ZXJuYWwgbWVtb3J5CisgICAgICAgICAgICAgICAoaW5wdXQsIGNvZWZmaWNpZW50cywgb3V0cHV0KSBhbmQgdGhlIGFzc29jaWF0ZWQgdGhyZXNob2xkIChpbnB1dCwgb3V0cHV0KS4KKyAgICAgICAgICAoKyspIENvbmZpZ3VyZXMgdGhlIGZpbHRlciBhbmQgaXRzIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAoKysrKSBGaW5pdGUgSW1wdWxzZSBSZXNwb25zZSAoRklSKSBmaWx0ZXIgKGFsc28ga25vd24gYXMgY29udm9sdXRpb24pLgorICAgICAgICAgICAgICAgKCsrKykgSW5maW5pdGUgSW1wdWxzZSBSZXNwb25zZSAoSUlSKSBmaWx0ZXIgKGRpcmVjdCBmb3JtIDEpLgorICAgICAgICAgICgrKykgQ2hvb3NlIHRoZSB3YXkgdG8gYWNjZXNzIHRvIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnM6IG5vbmUsIHBvbGxpbmcsCisgICAgICAgICAgICAgICBETUEsIElULiAibm9uZSIgbWVhbnMgdGhlIGlucHV0IGFuZC9vciBvdXRwdXQgZGF0YSB3aWxsIGJlIGhhbmRsZWQgYnkKKyAgICAgICAgICAgICAgIGFub3RoZXIgSVAgKEFEQywgREFDLCBldGMuKS4KKyAgICAgICAgICAoKyspIEVuYWJsZSB0aGUgZXJyb3IgaW50ZXJydXB0aW9ucyBpbiB0aGUgaW5wdXQgYWNjZXNzIGFuZC9vciB0aGUgb3V0cHV0CisgICAgICAgICAgICAgICBhY2Nlc3MgaXMgZG9uZSB0aHJvdWdoIElUL0RNQS4gSWYgYW4gZXJyb3Igb2NjdXJzLCB0aGUgaW50ZXJydXB0aW9uCisgICAgICAgICAgICAgICB3aWxsIGJlIHRyaWdnZXJlZCBpbiBsb29wLiBJbiBvcmRlciB0byByZWNvdmVyLCB0aGUgdXNlciB3aWxsIGhhdmUKKyAgICAgICAgICAgICAgIHRvIHJlc2V0IHRoZSBJUCB3aXRoIHRoZSBzZXF1ZW5jZSBIQUxfRk1BQ19EZUluaXQgLyBIQUxfRk1BQ19Jbml0LgorICAgICAgICAgICAgICAgT3B0aW9uYWxseSwgaGUgY2FuIGFsc28gZGlzYWJsZSB0aGUgaW50ZXJydXB0IHVzaW5nIF9fSEFMX0ZNQUNfRElTQUJMRV9JVDsKKyAgICAgICAgICAgICAgIHRoZSBlcnJvciBzdGF0dXMgd2lsbCBiZSBrZXB0LCBidXQgbm8gbW9yZSBpbnRlcnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQuCisgICAgICAgICAgKCsrKSBXcml0ZSB0aGUgcHJvdmlkZWQgY29lZmZpY2llbnRzIGludG8gdGhlIGludGVybmFsIG1lbW9yeSB1c2luZyBwb2xsaW5nCisgICAgICAgICAgICAgICBtb2RlIChIQUxfRk1BQ19GaWx0ZXJDb25maWcoKSkgb3IgRE1BIChIQUxfRk1BQ19GaWx0ZXJDb25maWdfRE1BKCkpLgorICAgICAgICAgICAgICAgSW4gdGhlIERNQSBjYXNlLCBIQUxfRk1BQ19GaWx0ZXJDb25maWdDYWxsYmFjaygpIGlzIGNhbGxlZCB3aGVuCisgICAgICAgICAgICAgICB0aGUgaGFuZGxpbmcgaXMgb3Zlci4KKworICAgICAgICgjKSBPcHRpb25hbGx5LCB0aGUgdXNlciBjYW4gZW5hYmxlIHRoZSBlcnJvciBpbnRlcnJ1cHRpb24gcmVsYXRlZCB0bworICAgICAgICAgICBzYXR1cmF0aW9uIGJ5IGNhbGxpbmcgX19IQUxfRk1BQ19FTkFCTEVfSVQuIFRoaXMgaGVscHMgaW4gZGVidWdnaW5nIHRoZQorICAgICAgICAgICBmaWx0ZXIuIElmIGEgc2F0dXJhdGlvbiBvY2N1cnMsIHRoZSBpbnRlcnJ1cHRpb24gd2lsbCBiZSB0cmlnZ2VyZWQgaW4gbG9vcC4KKyAgICAgICAgICAgSW4gb3JkZXIgdG8gcmVjb3ZlciwgdGhlIHVzZXIgd2lsbCBoYXZlIHRvOgorICAgICAgICAgICAoKyspIERpc2FibGUgdGhlIGludGVycnVwdGlvbiBieSBjYWxsaW5nIF9fSEFMX0ZNQUNfRElTQUJMRV9JVCBpZgorICAgICAgICAgICAgICAgIGhlIHdpc2hlcyB0byBjb250aW51ZSBhbGwgdGhlIHNhbWUuCisgICAgICAgICAgICgrKykgUmVzZXQgdGhlIElQIHdpdGggdGhlIHNlcXVlbmNlIEhBTF9GTUFDX0RlSW5pdCAvIEhBTF9GTUFDX0luaXQuCisKKyAgICAgICAoIykgT3B0aW9uYWxseSwgcHJlbG9hZCBpbnB1dCAoRklSLCBJSVIpIGFuZCBvdXRwdXQgKElJUikgZGF0YSB1c2luZworICAgICAgICAgICBIQUxfRk1BQ19GaWx0ZXJQcmVsb2FkKCkgb3IgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZF9ETUEoKS4KKyAgICAgICAgICAgSW4gdGhlIERNQSBjYXNlLCBIQUxfRk1BQ19GaWx0ZXJQcmVsb2FkQ2FsbGJhY2soKSBpcyBjYWxsZWQgd2hlbgorICAgICAgICAgICB0aGUgaGFuZGxpbmcgaXMgb3Zlci4KKyAgICAgICAgICAgVGhpcyBzdGVwIGlzIG9wdGlvbmFsIGFzIHRoZSBmaWx0ZXIgY2FuIGJlIHN0YXJ0ZWQgd2l0aG91dCBwcmVsb2FkZWQKKyAgICAgICAgICAgZGF0YS4KKworICAgICAgICgjKSBTdGFydCB0aGUgRk1BQyBwcm9jZXNzaW5nIChmaWx0ZXIpIHVzaW5nIEhBTF9GTUFDX0ZpbHRlclN0YXJ0KCkuCisgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gYWxzbyBjb25maWd1cmVzIHRoZSBvdXRwdXQgYnVmZmVyIHRoYXQgd2lsbCBiZSBmaWxsZWQgZnJvbQorICAgICAgICAgICB0aGUgY2lyY3VsYXIgaW50ZXJuYWwgb3V0cHV0IGJ1ZmZlci4gVGhlIGZ1bmN0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgd2l0aG91dCB1cGRhdGluZyB0aGUgcHJvdmlkZWQgYnVmZmVyLiBUaGUgSVAgcHJvY2Vzc2luZyB3aWxsIGJlIGFjdGl2ZSB1bnRpbAorICAgICAgICAgICBIQUxfRk1BQ19GaWx0ZXJTdG9wKCkgaXMgY2FsbGVkLgorCisgICAgICAgKCMpIElmIHRoZSBpbnB1dCBpbnRlcm5hbCBidWZmZXIgaXMgYWNjZXNzZWQgdmlhIERNQSwgSEFMX0ZNQUNfSGFsZkdldERhdGFDYWxsYmFjaygpCisgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHRvIGluZGljYXRlIHRoYXQgaGFsZiBvZiB0aGUgaW5wdXQgYnVmZmVyIGhhcyBiZWVuIGhhbmRsZWQuCisKKyAgICAgICAoIykgSWYgdGhlIGlucHV0IGludGVybmFsIGJ1ZmZlciBpcyBhY2Nlc3NlZCB2aWEgRE1BIG9yIGludGVycnVwdCwgSEFMX0ZNQUNfR2V0RGF0YUNhbGxiYWNrKCkKKyAgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgdG8gcmVxdWlyZSBuZXcgaW5wdXQgZGF0YS4gSXQgd2lsbCBiZSBwcm92aWRlZCB0aHJvdWdoCisgICAgICAgICAgIEhBTF9GTUFDX0FwcGVuZEZpbHRlckRhdGEoKSBpZiB0aGUgRE1BIGlzbid0IGluIGNpcmN1bGFyIG1vZGUuCisKKyAgICAgICAoIykgSWYgdGhlIG91dHB1dCBpbnRlcm5hbCBidWZmZXIgaXMgYWNjZXNzZWQgdmlhIERNQSwgSEFMX0ZNQUNfSGFsZk91dHB1dERhdGFSZWFkeUNhbGxiYWNrKCkKKyAgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgdG8gaW5kaWNhdGUgdGhhdCBoYWxmIG9mIHRoZSBvdXRwdXQgYnVmZmVyIGhhcyBiZWVuIGhhbmRsZWQuCisKKyAgICAgICAoIykgSWYgdGhlIG91dHB1dCBpbnRlcm5hbCBidWZmZXIgaXMgYWNjZXNzZWQgdmlhIERNQSBvciBpbnRlcnJ1cHQsCisgICAgICAgICAgIEhBTF9GTUFDX091dHB1dERhdGFSZWFkeUNhbGxiYWNrKCkgd2lsbCBiZSBjYWxsZWQgdG8gcmVxdWlyZSBhIG5ldyBvdXRwdXQKKyAgICAgICAgICAgYnVmZmVyLiBJdCB3aWxsIGJlIHByb3ZpZGVkIHRocm91Z2ggSEFMX0ZNQUNfQ29uZmlnRmlsdGVyT3V0cHV0QnVmZmVyKCkKKyAgICAgICAgICAgaWYgdGhlIERNQSBpc24ndCBpbiBjaXJjdWxhciBtb2RlLgorCisgICAgICAgKCMpIEluIGFsbCBtb2RlcyBleGNlcHQgbm9uZSwgcHJvdmlkZSBuZXcgaW5wdXQgZGF0YSB0byBiZSBwcm9jZXNzZWQgdmlhIEhBTF9GTUFDX0FwcGVuZEZpbHRlckRhdGEoKS4KKyAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSB0aGUgcHJldmlvdXMgaW5wdXQgZGF0YSBoYXMgYmVlbiBoYW5kbGVkCisgICAgICAgICAgICh0aGUgcHJlbG9hZGVkIGlucHV0IGRhdGEgaXNuJ3QgY29uY2VybmVkKS4KKworICAgICAgICgjKSBJbiBhbGwgbW9kZXMgZXhjZXB0IG5vbmUsIHByb3ZpZGUgYSBuZXcgb3V0cHV0IGJ1ZmZlciB0byBiZSBmaWxsZWQgdmlhCisgICAgICAgICAgIEhBTF9GTUFDX0NvbmZpZ0ZpbHRlck91dHB1dEJ1ZmZlcigpLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIHRoZSBwcmV2aW91cworICAgICAgICAgICB1c2VyJ3Mgb3V0cHV0IGJ1ZmZlciBoYXMgYmVlbiBmaWxsZWQuCisKKyAgICAgICAoIykgSW4gcG9sbGluZyBtb2RlLCBoYW5kbGUgdGhlIGlucHV0IGFuZCBvdXRwdXQgZGF0YSB1c2luZyBIQUxfRk1BQ19Qb2xsRmlsdGVyRGF0YSgpLgorICAgICAgICAgICBUaGlzIGZ1bmN0aW9uOgorICAgICAgICAgICAoKyspIFdyaXRlIHRoZSB1c2VyJ3MgaW5wdXQgZGF0YSAocHJvdmlkZWQgdmlhIEhBTF9GTUFDX0FwcGVuZEZpbHRlckRhdGEoKSkKKyAgICAgICAgICAgICAgICBpbnRvIHRoZSBGTUFDIGlucHV0IG1lbW9yeSBhcmVhLgorICAgICAgICAgICAoKyspIFJlYWQgdGhlIEZNQUMgb3V0cHV0IG1lbW9yeSBhcmVhIGFuZCB3cml0ZSBpdCBpbnRvIHRoZSB1c2VyJ3Mgb3V0cHV0IGJ1ZmZlci4KKyAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZWl0aGVyIHdoZW46CisgICAgICAgICAgICgrKykgdGhlIHVzZXIncyBvdXRwdXQgYnVmZmVyIGlzIGZpbGxlZC4KKyAgICAgICAgICAgKCsrKSB0aGUgdXNlcidzIGlucHV0IGJ1ZmZlciBoYXMgYmVlbiBoYW5kbGVkLgorICAgICAgICAgICBUaGUgdW51c2VkIGRhdGEgKHVucmVhZCBpbnB1dCBkYXRhIG9yIGZyZWUgb3V0cHV0IGRhdGEpIHdpbGwgbm90IGJlIHNhdmVkLgorICAgICAgICAgICBUaGUgdXNlciB3aWxsIGhhdmUgdG8gdXNlIHRoZSB1cGRhdGVkIGlucHV0IGFuZCBvdXRwdXQgc2l6ZXMgdG8ga2VlcCB0cmFjaworICAgICAgICAgICBvZiB0aGVtLgorCisgICAgICAgKCMpIFN0b3AgdGhlIEZNQUMgcHJvY2Vzc2luZyAoZmlsdGVyKSB1c2luZyBIQUxfRk1BQ19GaWx0ZXJTdG9wKCkuCisKKyAgICAgICAoIykgQ2FsbCBIQUxfRk1BQ19EZUluaXQoKSB0byBkZS1pbml0aWFsaXplIHRoZSBGTUFDIHBlcmlwaGVyYWwuIFRoaXMgZnVuY3Rpb24KKyAgICAgICAgICAgcmVzb3J0cyB0byBIQUxfRk1BQ19Nc3BEZUluaXQoKSBmb3IgbG93LWxldmVsIGRlLWluaXRpYWxpemF0aW9uLgorCisgICMjIyMjIENhbGxiYWNrIHJlZ2lzdHJhdGlvbiAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBbLi5dCisgICAgICBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1Mgd2hlbiBzZXQgdG8gMQorICAgICAgYWxsb3dzIHRoZSB1c2VyIHRvIGNvbmZpZ3VyZSBkeW5hbWljYWxseSB0aGUgZHJpdmVyIGNhbGxiYWNrcy4KKworICAgIFsuLl0KKyAgICAgIFVzZSBGdW5jdGlvbiBAcmVmIEhBTF9GTUFDX1JlZ2lzdGVyQ2FsbGJhY2soKSB0byByZWdpc3RlciBhIHVzZXIgY2FsbGJhY2suCisgICAgICBGdW5jdGlvbiBAcmVmIEhBTF9GTUFDX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAgICAgICgrKSBFcnJvckNhbGxiYWNrICAgICAgICAgICAgICAgOiBFcnJvciBDYWxsYmFjay4KKyAgICAgICgrKSBIYWxmR2V0RGF0YUNhbGxiYWNrICAgICAgICAgOiBHZXQgSGFsZiBEYXRhIENhbGxiYWNrLgorICAgICAgKCspIEdldERhdGFDYWxsYmFjayAgICAgICAgICAgICA6IEdldCBEYXRhIENhbGxiYWNrLgorICAgICAgKCspIEhhbGZPdXRwdXREYXRhUmVhZHlDYWxsYmFjayA6IEhhbGYgT3V0cHV0IERhdGEgUmVhZHkgQ2FsbGJhY2suCisgICAgICAoKykgT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2sgICAgIDogT3V0cHV0IERhdGEgUmVhZHkgQ2FsbGJhY2suCisgICAgICAoKykgRmlsdGVyQ29uZmlnQ2FsbGJhY2sgICAgICAgIDogRmlsdGVyIENvbmZpZ3VyYXRpb24gQ2FsbGJhY2suCisgICAgICAoKykgRmlsdGVyUHJlbG9hZENhbGxiYWNrICAgICAgIDogRmlsdGVyIFByZWxvYWQgQ2FsbGJhY2suCisgICAgICAoKykgTXNwSW5pdENhbGxiYWNrICAgICAgICAgICAgIDogRk1BQyBNc3BJbml0LgorICAgICAgKCspIE1zcERlSW5pdENhbGxiYWNrICAgICAgICAgICA6IEZNQUMgTXNwRGVJbml0LgorICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsIHRoZSBDYWxsYmFjayBJRAorICAgICAgYW5kIGEgcG9pbnRlciB0byB0aGUgdXNlciBjYWxsYmFjayBmdW5jdGlvbi4KKworICAgIFsuLl0KKyAgICAgIFVzZSBmdW5jdGlvbiBAcmVmIEhBTF9GTUFDX1VuUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlc2V0IGEgY2FsbGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLgorICAgICAgQHJlZiBIQUxfRk1BQ19VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUKKyAgICAgIGFuZCB0aGUgQ2FsbGJhY2sgSUQuCisgICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgorICAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICAgICAgICAgICA6IEVycm9yIENhbGxiYWNrLgorICAgICAgKCspIEhhbGZHZXREYXRhQ2FsbGJhY2sgICAgICAgICA6IEdldCBIYWxmIERhdGEgQ2FsbGJhY2suCisgICAgICAoKykgR2V0RGF0YUNhbGxiYWNrICAgICAgICAgICAgIDogR2V0IERhdGEgQ2FsbGJhY2suCisgICAgICAoKykgSGFsZk91dHB1dERhdGFSZWFkeUNhbGxiYWNrIDogSGFsZiBPdXRwdXQgRGF0YSBSZWFkeSBDYWxsYmFjay4KKyAgICAgICgrKSBPdXRwdXREYXRhUmVhZHlDYWxsYmFjayAgICAgOiBPdXRwdXQgRGF0YSBSZWFkeSBDYWxsYmFjay4KKyAgICAgICgrKSBGaWx0ZXJDb25maWdDYWxsYmFjayAgICAgICAgOiBGaWx0ZXIgQ29uZmlndXJhdGlvbiBDYWxsYmFjay4KKyAgICAgICgrKSBGaWx0ZXJQcmVsb2FkQ2FsbGJhY2sgICAgICAgOiBGaWx0ZXIgUHJlbG9hZCBDYWxsYmFjay4KKyAgICAgICgrKSBNc3BJbml0Q2FsbGJhY2sgICAgICAgICAgICAgOiBGTUFDIE1zcEluaXQuCisgICAgICAoKykgTXNwRGVJbml0Q2FsbGJhY2sgICAgICAgICAgIDogRk1BQyBNc3BEZUluaXQuCisKKyAgICBbLi5dCisgICAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfRk1BQ19Jbml0KCkgYW5kIHdoZW4gdGhlIHN0YXRlIGlzIEhBTF9GTUFDX1NUQVRFX1JFU0VUCisgICAgICBhbGwgY2FsbGJhY2tzIGFyZSBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zOgorICAgICAgZXhhbXBsZXMgQHJlZiBIQUxfRk1BQ19UeENwbHRDYWxsYmFjaygpLCBAcmVmIEhBTF9GTUFDX1J4SGFsZkNwbHRDYWxsYmFjaygpLgorICAgICAgRXhjZXB0aW9uIGRvbmUgZm9yIE1zcEluaXQgYW5kIE1zcERlSW5pdCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVzcGVjdGl2ZWx5CisgICAgICByZXNldCB0byB0aGUgbGVnYWN5IHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9ucyBpbiB0aGUgQHJlZiBIQUxfRk1BQ19Jbml0KCkKKyAgICAgIGFuZCBAcmVmIEhBTF9GTUFDX0RlSW5pdCgpIG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgICAgSWYgbm90LCBNc3BJbml0IG9yIE1zcERlSW5pdCBhcmUgbm90IG51bGwsIHRoZSBAcmVmIEhBTF9GTUFDX0luaXQoKSBhbmQgQHJlZiBIQUxfRk1BQ19EZUluaXQoKQorICAgICAga2VlcCBhbmQgdXNlIHRoZSB1c2VyIE1zcEluaXQvTXNwRGVJbml0IGNhbGxiYWNrcyAocmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KKworICAgIFsuLl0KKyAgICAgIENhbGxiYWNrcyBjYW4gYmUgcmVnaXN0ZXJlZC91bnJlZ2lzdGVyZWQgaW4gSEFMX0ZNQUNfU1RBVEVfUkVBRFkgc3RhdGUgb25seS4KKyAgICAgIEV4Y2VwdGlvbiBkb25lIE1zcEluaXQvTXNwRGVJbml0IHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkCisgICAgICBpbiBIQUxfRk1BQ19TVEFURV9SRUFEWSBvciBIQUxfRk1BQ19TVEFURV9SRVNFVCBzdGF0ZSwgdGh1cyByZWdpc3RlcmVkICh1c2VyKQorICAgICAgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCisgICAgICBJbiB0aGF0IGNhc2UgZmlyc3QgcmVnaXN0ZXIgdGhlIE1zcEluaXQvTXNwRGVJbml0IHVzZXIgY2FsbGJhY2tzCisgICAgICB1c2luZyBAcmVmIEhBTF9GTUFDX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBAcmVmIEhBTF9GTUFDX0RlSW5pdCgpCisgICAgICBvciBAcmVmIEhBTF9GTUFDX0luaXQoKSBmdW5jdGlvbi4KKworICAgIFsuLl0KKyAgICAgIFdoZW4gdGhlIGNvbXBpbGF0aW9uIGRlZmluZSBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTIGlzIHNldCB0byAwIG9yCisgICAgICBub3QgZGVmaW5lZCwgdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUKKyAgICAgIGFuZCB3ZWFrIChzdXJjaGFyZ2VkKSBjYWxsYmFja3MgYXJlIHVzZWQuCisKKworICBAZW5kdmVyYmF0aW0KKyAgKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKKyAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovCisKKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaW5jbHVkZSAic3RtMzJoN3h4X2hhbC5oIgorCisjaWYgZGVmaW5lZChGTUFDKQorI2lmZGVmIEhBTF9GTUFDX01PRFVMRV9FTkFCTEVECisKKy8qKiBAYWRkdG9ncm91cCBTVE0zMkg3eHhfSEFMX0RyaXZlcgorICAqIEB7CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQyBGTUFDCisgICogQGJyaWVmICAgIEZNQUMgSEFMIGRyaXZlciBtb2R1bGVzCisgICogQHsKKyAgKi8KKworLyogRXh0ZXJuYWwgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgdHlwZWRlZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCAgRk1BQ19Qcml2YXRlX0NvbnN0YW50cyAgIEZNQUMgUHJpdmF0ZSBDb25zdGFudHMKKyAgKiBAeworICAqLworCisjZGVmaW5lIE1BWF9GSUxURVJfREFUQV9TSVpFX1RPX0hBTkRMRSAoKHVpbnQxNl90KSAweEZGVSkKKyNkZWZpbmUgUFJFTE9BRF9BQ0NFU1NfRE1BICAgICAweDAwVQorI2RlZmluZSBQUkVMT0FEX0FDQ0VTU19QT0xMSU5HIDB4MDFVCisjZGVmaW5lIFBPTExJTkdfRElTQUJMRUQgICAgICAgMFUKKyNkZWZpbmUgUE9MTElOR19FTkFCTEVEICAgICAgICAxVQorI2RlZmluZSBQT0xMSU5HX05PVF9TVE9QUEVEICAgIDBVCisjZGVmaW5lIFBPTExJTkdfU1RPUFBFRCAgICAgICAgMVUKKworLyoqCisgICogQH0KKyAgKi8KKworLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAZGVmZ3JvdXAgIEZNQUNfUHJpdmF0ZV9NYWNyb3MgICBGTUFDIFByaXZhdGUgTWFjcm9zCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBHZXQgdGhlIFgxIG1lbW9yeSBhcmVhIHNpemUuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIEZNQUMgaGFuZGxlLgorICAqIEByZXR2YWwgWDFfQlVGX1NJWkUKKyAgKi8KKyNkZWZpbmUgRk1BQ19HRVRfWDFfU0laRShfX0hBTkRMRV9fKSBcCisgICgoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlgxQlVGQ0ZHKSAmIChGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFKSkgPj4gKEZNQUNfWDFCVUZDRkdfWDFfQlVGX1NJWkVfUG9zKSkKKworLyoqCisgICogQGJyaWVmICBHZXQgdGhlIFgxIHdhdGVybWFyay4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gRk1BQyBoYW5kbGUuCisgICogQHJldHZhbCBGVUxMX1dNCisgICovCisjZGVmaW5lIEZNQUNfR0VUX1gxX0ZVTExfV00oX19IQU5ETEVfXykgXAorICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPlgxQlVGQ0ZHKSAmIChGTUFDX1gxQlVGQ0ZHX0ZVTExfV00pKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgWDIgbWVtb3J5IGFyZWEgc2l6ZS4KKyAgKiBAcGFyYW0gIF9fSEFORExFX18gRk1BQyBoYW5kbGUuCisgICogQHJldHZhbCBYMl9CVUZfU0laRQorICAqLworI2RlZmluZSBGTUFDX0dFVF9YMl9TSVpFKF9fSEFORExFX18pIFwKKyAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+WDJCVUZDRkcpICYgKEZNQUNfWDJCVUZDRkdfWDJfQlVGX1NJWkUpKSA+PiAoRk1BQ19YMkJVRkNGR19YMl9CVUZfU0laRV9Qb3MpKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgWSBtZW1vcnkgYXJlYSBzaXplLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGTUFDIGhhbmRsZS4KKyAgKiBAcmV0dmFsIFlfQlVGX1NJWkUKKyAgKi8KKyNkZWZpbmUgRk1BQ19HRVRfWV9TSVpFKF9fSEFORExFX18pIFwKKyAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+WUJVRkNGRykgJiAoRk1BQ19ZQlVGQ0ZHX1lfQlVGX1NJWkUpKSA+PiAoRk1BQ19ZQlVGQ0ZHX1lfQlVGX1NJWkVfUG9zKSkKKworLyoqCisgICogQGJyaWVmICBHZXQgdGhlIFkgd2F0ZXJtYXJrLgorICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGTUFDIGhhbmRsZS4KKyAgKiBAcmV0dmFsIEVNUFRZX1dNCisgICovCisjZGVmaW5lIEZNQUNfR0VUX1lfRU1QVFlfV00oX19IQU5ETEVfXykgXAorICAoKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPllCVUZDRkcpICYgKEZNQUNfWUJVRkNGR19FTVBUWV9XTSkpCisKKy8qKgorICAqIEBicmllZiAgR2V0IHRoZSBzdGFydCBiaXQgc3RhdGUuCisgICogQHBhcmFtICBfX0hBTkRMRV9fIEZNQUMgaGFuZGxlLgorICAqIEByZXR2YWwgU1RBUlQKKyAgKi8KKyNkZWZpbmUgRk1BQ19HRVRfU1RBUlRfQklUKF9fSEFORExFX18pIFwKKyAgKCgoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+UEFSQU0pICYgKEZNQUNfUEFSQU1fU1RBUlQpKSA+PiAoRk1BQ19QQVJBTV9TVEFSVF9Qb3MpKQorCisvKioKKyAgKiBAYnJpZWYgIEdldCB0aGUgdGhyZXNob2xkIG1hdGNoaW5nIHRoZSB3YXRlcm1hay4KKyAgKiBAcGFyYW0gIF9fV01fXyBXYXRlcm1hcmsgdmFsdWUuCisgICogQHJldHZhbCBUSFJFU0hPTEQKKyAgKi8KKyNkZWZpbmUgRk1BQ19HRVRfVEhSRVNIT0xEX0ZST01fV00oX19XTV9fKSAoKF9fV01fXyA9PSBGTUFDX1RIUkVTSE9MRF8xKT8gMVU6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fV01fXyA9PSBGTUFDX1RIUkVTSE9MRF8yKT8gMlU6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fV01fXyA9PSBGTUFDX1RIUkVTSE9MRF80KT8gNFU6OFUpCisKKy8qKgorICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgdGhyZXNob2xkIGlzIGFwcGxpY2FibGUuCisgICogQHBhcmFtICBfX1NJWkVfXyBTaXplIG9mIHRoZSBtYXRjaGluZyBidWZmZXIuCisgICogQHBhcmFtICBfX1dNX18gV2F0ZXJtYXJrIHZhbHVlLgorICAqIEBwYXJhbSAgX19BQ0NFU1NfXyBBY2Nlc3MgdG8gdGhlIGJ1ZmZlciAocG9sbGluZywgaXQsIGRtYSwgbm9uZSkuCisgICogQHJldHZhbCBUSFJFU0hPTEQKKyAgKi8KKyNkZWZpbmUgSVNfRk1BQ19USFJFU0hPTERfQVBQTElDQUJMRShfX1NJWkVfXywgX19XTV9fLCBfX0FDQ0VTU19fKSAoKCAoX19TSVpFX18pID49ICgoKF9fV01fXykgPT0gRk1BQ19USFJFU0hPTERfMSk/IDFVOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1dNX18pID09IEZNQUNfVEhSRVNIT0xEXzIpPyAyVTogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19XTV9fKSA9PSBGTUFDX1RIUkVTSE9MRF80KT8gNFU6OFUpKSYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKF9fQUNDRVNTX18pID09IEZNQUNfQlVGRkVSX0FDQ0VTU19ETUEpJiYoKF9fV01fXykgPT0gRk1BQ19USFJFU0hPTERfMSkpfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX0FDQ0VTU19fICkhPSBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BKSkpCisKKy8qKgorICAqIEB9CisgICovCisKKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTUFDX1Jlc2V0KEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpOworc3RhdGljIHZvaWQgRk1BQ19SZXNldERhdGFQb2ludGVycyhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKK3N0YXRpYyB2b2lkIEZNQUNfUmVzZXRPdXRwdXRTdGF0ZUFuZERhdGFQb2ludGVycyhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKTsKK3N0YXRpYyB2b2lkIEZNQUNfUmVzZXRJbnB1dFN0YXRlQW5kRGF0YVBvaW50ZXJzKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNQUNfRmlsdGVyQ29uZmlnKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiAqc0NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IFByZWxvYWRBY2Nlc3MpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNQUNfRmlsdGVyUHJlbG9hZChGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBpbnQxNl90ICpwSW5wdXQsIHVpbnQ4X3QgSW5wdXRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpwT3V0cHV0LCB1aW50OF90IE91dHB1dFNpemUsIHVpbnQ4X3QgUHJlbG9hZEFjY2Vzcyk7CitzdGF0aWMgdm9pZCBGTUFDX1dyaXRlUHJlbG9hZERhdGFJbmNyZW1lbnRQdHIoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqKnBwRGF0YSwgdWludDhfdCBTaXplKTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTUFDX1dhaXRPblN0YXJ0VW50aWxUaW1lb3V0KEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIHVpbnQzMl90IFRpY2tzdGFydCwgdWludDMyX3QgVGltZW91dCk7CitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1BQ19BcHBlbmRGaWx0ZXJEYXRhVXBkYXRlU3RhdGUoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcElucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwSW5wdXRTaXplKTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTUFDX0NvbmZpZ0ZpbHRlck91dHB1dEJ1ZmZlclVwZGF0ZVN0YXRlKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIGludDE2X3QgKnBPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcE91dHB1dFNpemUpOworc3RhdGljIHZvaWQgRk1BQ19Xcml0ZURhdGFJbmNyZW1lbnRQdHIoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgdWludDE2X3QgTWF4U2l6ZVRvV3JpdGUpOworc3RhdGljIHZvaWQgRk1BQ19SZWFkRGF0YUluY3JlbWVudFB0cihGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCB1aW50MTZfdCBNYXhTaXplVG9SZWFkKTsKK3N0YXRpYyB2b2lkIEZNQUNfRE1BSGFsZkdldERhdGEoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgRk1BQ19ETUFHZXREYXRhKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkIEZNQUNfRE1BSGFsZk91dHB1dERhdGFSZWFkeShETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CitzdGF0aWMgdm9pZCBGTUFDX0RNQU91dHB1dERhdGFSZWFkeShETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CitzdGF0aWMgdm9pZCBGTUFDX0RNQUZpbHRlckNvbmZpZyhETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CitzdGF0aWMgdm9pZCBGTUFDX0RNQUZpbHRlclByZWxvYWQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgRk1BQ19ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CisKKy8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19FeHBvcnRlZF9GdW5jdGlvbnMgRk1BQyBFeHBvcnRlZCBGdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMSBJbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCisgICogQGJyaWVmICAgIEluaXRpYWxpemF0aW9uIGFuZCBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCitAdmVyYmF0aW0KKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICMjIyMjICAgICAgIEluaXRpYWxpemF0aW9uIGFuZCBkZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgICAgICAgIyMjIyMKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXSBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvOgorICAgICAgKCspIEluaXRpYWxpemUgdGhlIEZNQUMgcGVyaXBoZXJhbCBhbmQgdGhlIGFzc29jaWF0ZWQgaGFuZGxlCisgICAgICAoKykgRGVJbml0aWFsaXplIHRoZSBGTUFDIHBlcmlwaGVyYWwKKyAgICAgICgrKSBJbml0aWFsaXplIHRoZSBGTUFDIE1TUCAoTUNVIFNwZWNpZmljIFBhY2thZ2UpCisgICAgICAoKykgRGUtSW5pdGlhbGl6ZSB0aGUgRk1BQyBNU1AKKworICAgIFsuLl0KKworQGVuZHZlcmJhdGltCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBJbml0aWFsaXplIHRoZSBGTUFDIHBlcmlwaGVyYWwgYW5kIHRoZSBhc3NvY2lhdGVkIGhhbmRsZS4KKyAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfSW5pdChGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKQoreworICAvKiBDaGVjayB0aGUgRk1BQyBoYW5kbGUgYWxsb2NhdGlvbiAqLworICBpZiAoaGZtYWMgPT0gTlVMTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBDaGVjayB0aGUgaW5zdGFuY2UgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfQUxMX0lOU1RBTkNFKGhmbWFjLT5JbnN0YW5jZSkpOworCisgIGlmIChoZm1hYy0+U3RhdGUgPT0gSEFMX0ZNQUNfU1RBVEVfUkVTRVQpCisgIHsKKyAgICAvKiBBbGxvY2F0ZSBsb2NrIHJlc291cmNlIGFuZCBpbml0aWFsaXplIGl0ICovCisgICAgaGZtYWMtPkxvY2sgPSBIQUxfVU5MT0NLRUQ7CisKKyNpZiAoVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICAgIC8qIFJlZ2lzdGVyIHRoZSBkZWZhdWx0IGNhbGxiYWNrIGZ1bmN0aW9ucyAqLworICAgIGhmbWFjLT5FcnJvckNhbGxiYWNrID0gSEFMX0ZNQUNfRXJyb3JDYWxsYmFjazsKKyAgICBoZm1hYy0+SGFsZkdldERhdGFDYWxsYmFjayA9IEhBTF9GTUFDX0hhbGZHZXREYXRhQ2FsbGJhY2s7CisgICAgaGZtYWMtPkdldERhdGFDYWxsYmFjayA9IEhBTF9GTUFDX0dldERhdGFDYWxsYmFjazsKKyAgICBoZm1hYy0+SGFsZk91dHB1dERhdGFSZWFkeUNhbGxiYWNrID0gSEFMX0ZNQUNfSGFsZk91dHB1dERhdGFSZWFkeUNhbGxiYWNrOworICAgIGhmbWFjLT5PdXRwdXREYXRhUmVhZHlDYWxsYmFjayA9IEhBTF9GTUFDX091dHB1dERhdGFSZWFkeUNhbGxiYWNrOworICAgIGhmbWFjLT5GaWx0ZXJDb25maWdDYWxsYmFjayA9IEhBTF9GTUFDX0ZpbHRlckNvbmZpZ0NhbGxiYWNrOworICAgIGhmbWFjLT5GaWx0ZXJQcmVsb2FkQ2FsbGJhY2sgPSBIQUxfRk1BQ19GaWx0ZXJQcmVsb2FkQ2FsbGJhY2s7CisKKyAgICBpZiAoaGZtYWMtPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQorICAgIHsKKyAgICAgIGhmbWFjLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfRk1BQ19Nc3BJbml0OworICAgIH0KKworICAgIC8qIEluaXQgdGhlIGxvdyBsZXZlbCBoYXJkd2FyZSAqLworICAgIGhmbWFjLT5Nc3BJbml0Q2FsbGJhY2soaGZtYWMpOworI2Vsc2UKKyAgICAvKiBJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKi8KKyAgICBIQUxfRk1BQ19Nc3BJbml0KGhmbWFjKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgIH0KKworICAvKiBSZXNldCBwSW5wdXQgYW5kIHBPdXRwdXQgKi8KKyAgaGZtYWMtPkZpbHRlclBhcmFtID0gMFVMOworICBGTUFDX1Jlc2V0RGF0YVBvaW50ZXJzKGhmbWFjKTsKKworICAvKiBSZXNldCBGTUFDIHVuaXQgKGludGVybmFsIHBvaW50ZXJzKSAqLworICBpZiAoRk1BQ19SZXNldChoZm1hYykgPT0gSEFMX1RJTUVPVVQpCisgIHsKKyAgICAvKiBVcGRhdGUgRk1BQyBlcnJvciBjb2RlIGFuZCBGTUFDIHBlcmlwaGVyYWwgc3RhdGUgKi8KKyAgICBoZm1hYy0+RXJyb3JDb2RlID0gSEFMX0ZNQUNfRVJST1JfUkVTRVQ7CisgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfVElNRU9VVDsKKworICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICBfX0hBTF9VTkxPQ0soaGZtYWMpOworCisgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICB9CisKKyAgLyogVXBkYXRlIEZNQUMgZXJyb3IgY29kZSBhbmQgRk1BQyBwZXJpcGhlcmFsIHN0YXRlICovCisgIGhmbWFjLT5FcnJvckNvZGUgPSBIQUxfRk1BQ19FUlJPUl9OT05FOworICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9SRUFEWTsKKworICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgIF9fSEFMX1VOTE9DSyhoZm1hYyk7CisKKyAgcmV0dXJuIEhBTF9PSzsKK30KKworLyoqCisgICogQGJyaWVmICBEZS1pbml0aWFsaXplIHRoZSBGTUFDIHBlcmlwaGVyYWwuCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQyBzdHJ1Y3R1cmUuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19EZUluaXQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKK3sKKyAgLyogQ2hlY2sgdGhlIEZNQUMgaGFuZGxlIGFsbG9jYXRpb24gKi8KKyAgaWYgKGhmbWFjID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfQUxMX0lOU1RBTkNFKGhmbWFjLT5JbnN0YW5jZSkpOworCisgIC8qIENoYW5nZSBGTUFDIHBlcmlwaGVyYWwgc3RhdGUgKi8KKyAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfQlVTWTsKKworICAvKiBTZXQgRk1BQyBlcnJvciBjb2RlIHRvIG5vbmUgKi8KKyAgaGZtYWMtPkVycm9yQ29kZSA9IEhBTF9GTUFDX0VSUk9SX05PTkU7CisKKyAgLyogUmVzZXQgcElucHV0IGFuZCBwT3V0cHV0ICovCisgIGhmbWFjLT5GaWx0ZXJQYXJhbSA9IDBVTDsKKyAgRk1BQ19SZXNldERhdGFQb2ludGVycyhoZm1hYyk7CisKKyNpZiAoVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICBpZiAoaGZtYWMtPk1zcERlSW5pdENhbGxiYWNrID09IE5VTEwpCisgIHsKKyAgICBoZm1hYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfRk1BQ19Nc3BEZUluaXQ7CisgIH0KKyAgLyogRGVJbml0IHRoZSBsb3cgbGV2ZWwgaGFyZHdhcmUgKi8KKyAgaGZtYWMtPk1zcERlSW5pdENhbGxiYWNrKGhmbWFjKTsKKyNlbHNlCisgIC8qIERlSW5pdCB0aGUgbG93IGxldmVsIGhhcmR3YXJlOiBDTE9DSywgTlZJQywgRE1BICovCisgIEhBTF9GTUFDX01zcERlSW5pdChoZm1hYyk7CisjZW5kaWYgLyogVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisgIC8qIENoYW5nZSBGTUFDIHBlcmlwaGVyYWwgc3RhdGUgKi8KKyAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfUkVTRVQ7CisKKyAgLyogUmVsZWFzZSBMb2NrICovCisgIF9fSEFMX1VOTE9DSyhoZm1hYyk7CisKKyAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICByZXR1cm4gSEFMX09LOworfQorCisvKioKKyAgKiBAYnJpZWYgIEluaXRpYWxpemUgdGhlIEZNQUMgTVNQLgorICAqIEBwYXJhbSAgaGZtYWMgRk1BQyBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCitfX3dlYWsgdm9pZCBIQUxfRk1BQ19Nc3BJbml0KEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCit7CisgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgVU5VU0VEKGhmbWFjKTsKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0ZNQUNfTXNwSW5pdCBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAgKi8KK30KKworLyoqCisgICogQGJyaWVmICBEZS1pbml0aWFsaXplIHRoZSBGTUFDIE1TUC4KKyAgKiBAcGFyYW0gIGhmbWFjIEZNQUMgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0ZNQUNfTXNwRGVJbml0KEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCit7CisgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgVU5VU0VEKGhmbWFjKTsKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0ZNQUNfTXNwRGVJbml0IGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCisgICAqLworfQorCisjaWYgKFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKy8qKgorICAqIEBicmllZiAgUmVnaXN0ZXIgYSBVc2VyIEZNQUMgQ2FsbGJhY2sKKyAgKiAgICAgICAgIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgd2VhayBwcmVkZWZpbmVkIGNhbGxiYWNrLgorICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgorICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgcmVnaXN0ZXJlZC4KKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19FUlJPUl9DQl9JRCBFcnJvciBDYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0ZNQUNfSEFMRl9HRVRfREFUQV9DQl9JRCBHZXQgSGFsZiBEYXRhIENhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19HRVRfREFUQV9DQl9JRCBHZXQgRGF0YSBDYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0ZNQUNfSEFMRl9PVVRQVVRfREFUQV9SRUFEWV9DQl9JRCBIYWxmIE91dHB1dCBEYXRhIFJlYWR5IENhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19PVVRQVVRfREFUQV9SRUFEWV9DQl9JRCBPdXRwdXQgRGF0YSBSZWFkeSBDYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0ZNQUNfRklMVEVSX0NPTkZJR19DQl9JRCBGaWx0ZXIgQ29uZmlndXJhdGlvbiBDYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0ZNQUNfRklMVEVSX1BSRUxPQURfQ0JfSUQgRmlsdGVyIFByZWxvYWQgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9GTUFDX01TUElOSVRfQ0JfSUQgRk1BQyBNc3BJbml0IElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19NU1BERUlOSVRfQ0JfSUQgRk1BQyBNc3BEZUluaXQgSUQKKyAgKiBAcGFyYW0gIHBDYWxsYmFjayBwb2ludGVyIHRvIHRoZSBDYWxsYmFjayBmdW5jdGlvbi4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX1JlZ2lzdGVyQ2FsbGJhY2soRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgSEFMX0ZNQUNfQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZNQUNfQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjaykKK3sKKyAgSEFMX1N0YXR1c1R5cGVEZWYgc3RhdHVzID0gSEFMX09LOworCisgIGlmIChwQ2FsbGJhY2sgPT0gTlVMTCkKKyAgeworICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKyAgLyogUHJvY2VzcyBsb2NrZWQgKi8KKyAgX19IQUxfTE9DSyhoZm1hYyk7CisKKyAgaWYgKEhBTF9GTUFDX1NUQVRFX1JFQURZID09IGhmbWFjLT5TdGF0ZSkKKyAgeworICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKKyAgICB7CisgICAgICBjYXNlIEhBTF9GTUFDX0VSUk9SX0NCX0lEIDoKKyAgICAgICAgaGZtYWMtPkVycm9yQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9GTUFDX0hBTEZfR0VUX0RBVEFfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+SGFsZkdldERhdGFDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0ZNQUNfR0VUX0RBVEFfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+R2V0RGF0YUNhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfRk1BQ19IQUxGX09VVFBVVF9EQVRBX1JFQURZX0NCX0lEIDoKKyAgICAgICAgaGZtYWMtPkhhbGZPdXRwdXREYXRhUmVhZHlDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0ZNQUNfT1VUUFVUX0RBVEFfUkVBRFlfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+T3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9GTUFDX0ZJTFRFUl9DT05GSUdfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+RmlsdGVyQ29uZmlnQ2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9GTUFDX0ZJTFRFUl9QUkVMT0FEX0NCX0lEIDoKKyAgICAgICAgaGZtYWMtPkZpbHRlclByZWxvYWRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0ZNQUNfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhmbWFjLT5Nc3BJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9GTUFDX01TUERFSU5JVF9DQl9JRCA6CisgICAgICAgIGhmbWFjLT5Nc3BEZUluaXRDYWxsYmFjayA9IHBDYWxsYmFjazsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworCisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgaWYgKEhBTF9GTUFDX1NUQVRFX1JFU0VUID09IGhmbWFjLT5TdGF0ZSkKKyAgeworICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKKyAgICB7CisgICAgICBjYXNlIEhBTF9GTUFDX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+TXNwSW5pdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfRk1BQ19NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0IDoKKyAgICAgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfSU5WQUxJRF9DQUxMQkFDSzsKKworICAgICAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgICAgIHN0YXR1cyA9ICBIQUxfRVJST1I7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICBoZm1hYy0+RXJyb3JDb2RlIHw9IEhBTF9GTUFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisKKyAgICAvKiBSZXR1cm4gZXJyb3Igc3RhdHVzICovCisgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFJlbGVhc2UgTG9jayAqLworICBfX0hBTF9VTkxPQ0soaGZtYWMpOworCisgIHJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICAqIEBicmllZiAgVW5yZWdpc3RlciBhIEZNQUMgQ2FsbEJhY2suCisgICogICAgICAgICBGTUFDIGNhbGxiYWNrIGlzIHJlZGlyZWN0ZWQgdG8gdGhlIHdlYWsgcHJlZGVmaW5lZCBjYWxsYmFjay4KKyAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZQorICAqIEBwYXJhbSAgQ2FsbGJhY2tJRCBJRCBvZiB0aGUgY2FsbGJhY2sgdG8gYmUgdW5yZWdpc3RlcmVkLgorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9GTUFDX0VSUk9SX0NCX0lEIEVycm9yIENhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19IQUxGX0dFVF9EQVRBX0NCX0lEIEdldCBIYWxmIERhdGEgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9GTUFDX0dFVF9EQVRBX0NCX0lEIEdldCBEYXRhIENhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19IQUxGX09VVFBVVF9EQVRBX1JFQURZX0NCX0lEIEhhbGYgT3V0cHV0IERhdGEgUmVhZHkgQ2FsbGJhY2sgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9GTUFDX09VVFBVVF9EQVRBX1JFQURZX0NCX0lEIE91dHB1dCBEYXRhIFJlYWR5IENhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19GSUxURVJfQ09ORklHX0NCX0lEIEZpbHRlciBDb25maWd1cmF0aW9uIENhbGxiYWNrIElECisgICogICAgICAgICAgIEBhcmcgQHJlZiBIQUxfRk1BQ19GSUxURVJfUFJFTE9BRF9DQl9JRCBGaWx0ZXIgUHJlbG9hZCBDYWxsYmFjayBJRAorICAqICAgICAgICAgICBAYXJnIEByZWYgSEFMX0ZNQUNfTVNQSU5JVF9DQl9JRCBGTUFDIE1zcEluaXQgSUQKKyAgKiAgICAgICAgICAgQGFyZyBAcmVmIEhBTF9GTUFDX01TUERFSU5JVF9DQl9JRCBGTUFDIE1zcERlSW5pdCBJRAorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZNQUNfVW5SZWdpc3RlckNhbGxiYWNrKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIEhBTF9GTUFDX0NhbGxiYWNrSURUeXBlRGVmIENhbGxiYWNrSUQpCit7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKworICAvKiBQcm9jZXNzIGxvY2tlZCAqLworICBfX0hBTF9MT0NLKGhmbWFjKTsKKworICBpZiAoSEFMX0ZNQUNfU1RBVEVfUkVBRFkgPT0gaGZtYWMtPlN0YXRlKQorICB7CisgICAgc3dpdGNoIChDYWxsYmFja0lEKQorICAgIHsKKyAgICAgIGNhc2UgSEFMX0ZNQUNfRVJST1JfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+RXJyb3JDYWxsYmFjayA9IEhBTF9GTUFDX0Vycm9yQ2FsbGJhY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBFcnJvckNhbGxiYWNrICAgICAgICAgICAgICAgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0ZNQUNfSEFMRl9HRVRfREFUQV9DQl9JRCA6CisgICAgICAgIGhmbWFjLT5IYWxmR2V0RGF0YUNhbGxiYWNrID0gSEFMX0ZNQUNfSGFsZkdldERhdGFDYWxsYmFjazsgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIEhhbGZHZXREYXRhQ2FsbGJhY2sgICAgICAgICAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfRk1BQ19HRVRfREFUQV9DQl9JRCA6CisgICAgICAgIGhmbWFjLT5HZXREYXRhQ2FsbGJhY2sgPSBIQUxfRk1BQ19HZXREYXRhQ2FsbGJhY2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIEdldERhdGFDYWxsYmFjayAgICAgICAgICAgICAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfRk1BQ19IQUxGX09VVFBVVF9EQVRBX1JFQURZX0NCX0lEIDoKKyAgICAgICAgaGZtYWMtPkhhbGZPdXRwdXREYXRhUmVhZHlDYWxsYmFjayA9IEhBTF9GTUFDX0hhbGZPdXRwdXREYXRhUmVhZHlDYWxsYmFjazsgLyogTGVnYWN5IHdlYWsgSGFsZk91dHB1dERhdGFSZWFkeUNhbGxiYWNrICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9GTUFDX09VVFBVVF9EQVRBX1JFQURZX0NCX0lEIDoKKyAgICAgICAgaGZtYWMtPk91dHB1dERhdGFSZWFkeUNhbGxiYWNrID0gSEFMX0ZNQUNfT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2s7ICAgICAgICAgLyogTGVnYWN5IHdlYWsgT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2sgICAgICovCisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEhBTF9GTUFDX0ZJTFRFUl9DT05GSUdfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+RmlsdGVyQ29uZmlnQ2FsbGJhY2sgPSBIQUxfRk1BQ19GaWx0ZXJDb25maWdDYWxsYmFjazsgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBGaWx0ZXJDb25maWdDYWxsYmFjayAgICAgICAgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0ZNQUNfRklMVEVSX1BSRUxPQURfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+RmlsdGVyUHJlbG9hZENhbGxiYWNrID0gSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZENhbGxiYWNrOyAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBGaWx0ZXJQcmVsb2FkQ2FsbGJhY2sgICAgICAgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0ZNQUNfTVNQSU5JVF9DQl9JRCA6CisgICAgICAgIGhmbWFjLT5Nc3BJbml0Q2FsbGJhY2sgPSBIQUxfRk1BQ19Nc3BJbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExlZ2FjeSB3ZWFrIE1zcEluaXRDYWxsYmFjayAgICAgICAgICAgICAqLworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBIQUxfRk1BQ19NU1BERUlOSVRfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+TXNwRGVJbml0Q2FsbGJhY2sgPSBIQUxfRk1BQ19Nc3BEZUluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgICAgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQgOgorICAgICAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGUgKi8KKyAgICAgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworCisgICAgICAgIC8qIFJldHVybiBlcnJvciBzdGF0dXMgKi8KKyAgICAgICAgc3RhdHVzID0gIEhBTF9FUlJPUjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGVsc2UgaWYgKEhBTF9GTUFDX1NUQVRFX1JFU0VUID09IGhmbWFjLT5TdGF0ZSkKKyAgeworICAgIHN3aXRjaCAoQ2FsbGJhY2tJRCkKKyAgICB7CisgICAgICBjYXNlIEhBTF9GTUFDX01TUElOSVRfQ0JfSUQgOgorICAgICAgICBoZm1hYy0+TXNwSW5pdENhbGxiYWNrID0gSEFMX0ZNQUNfTXNwSW5pdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgSEFMX0ZNQUNfTVNQREVJTklUX0NCX0lEIDoKKyAgICAgICAgaGZtYWMtPk1zcERlSW5pdENhbGxiYWNrID0gSEFMX0ZNQUNfTXNwRGVJbml0OworICAgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdCA6CisgICAgICAgIC8qIFVwZGF0ZSB0aGUgZXJyb3IgY29kZSAqLworICAgICAgICBoZm1hYy0+RXJyb3JDb2RlIHw9IEhBTF9GTUFDX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0s7CisKKyAgICAgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgICAgICBzdGF0dXMgPSAgSEFMX0VSUk9SOworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogVXBkYXRlIHRoZSBlcnJvciBjb2RlICovCisgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9JTlZBTElEX0NBTExCQUNLOworCisgICAgLyogUmV0dXJuIGVycm9yIHN0YXR1cyAqLworICAgIHN0YXR1cyA9IEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFJlbGVhc2UgTG9jayAqLworICBfX0hBTF9VTkxPQ0soaGZtYWMpOworCisgIHJldHVybiBzdGF0dXM7Cit9CisjZW5kaWYgLyogVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisvKioKKyAgKiBAfQorICAqLworCisvKiogQGRlZmdyb3VwIEZNQUNfRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMiBQZXJpcGhlcmFsIENvbnRyb2wgZnVuY3Rpb25zCisgICogQGJyaWVmICAgIENvbnRyb2wgZnVuY3Rpb25zLgorICAqCitAdmVyYmF0aW0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBDb250cm9sIGZ1bmN0aW9ucyAjIyMjIworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBbLi5dICBUaGlzIHNlY3Rpb24gcHJvdmlkZXMgZnVuY3Rpb25zIGFsbG93aW5nIHRvOgorICAgICAgKCspIENvbmZpZ3VyZSB0aGUgRk1BQyBwZXJpcGhlcmFsOiBtZW1vcnkgYXJlYSwgZmlsdGVyIHR5cGUgYW5kIHBhcmFtZXRlcnMsCisgICAgICAgICAgd2F5IHRvIGFjY2VzcyB0byB0aGUgaW5wdXQgYW5kIG91dHB1dCBtZW1vcnkgYXJlYSAobm9uZSwgcG9sbGluZywgSVQsIERNQSkuCisgICAgICAoKykgU3RhcnQgdGhlIEZNQUMgcHJvY2Vzc2luZyAoZmlsdGVyKS4KKyAgICAgICgrKSBIYW5kbGUgdGhlIGlucHV0IGRhdGEgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIGludG8gRk1BQy4KKyAgICAgICgrKSBIYW5kbGUgdGhlIG91dHB1dCBkYXRhIHByb3ZpZGVkIGJ5IEZNQUMuCisgICAgICAoKykgU3RvcCB0aGUgRk1BQyBwcm9jZXNzaW5nIChmaWx0ZXIpLgorCitAZW5kdmVyYmF0aW0KKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIENvbmZpZ3VyZSB0aGUgRk1BQyBmaWx0ZXIgYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzCisgICogICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUuCisgICogICAgICAgICBUaGUgcHJvdmlkZWQgZGF0YSB3aWxsIGJlIGxvYWRlZCB1c2luZyBwb2xsaW5nIG1vZGUuCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCisgICogQHBhcmFtICBzQ29uZmlnIHBvaW50ZXIgdG8gYSBGTUFDX0ZpbHRlckNvbmZpZ1R5cGVEZWYgc3RydWN0dXJlIHRoYXQKKyAgKiAgICAgICAgIGNvbnRhaW5zIHRoZSBGTUFDIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19GaWx0ZXJDb25maWcoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmICpzQ29uZmlnKQoreworICByZXR1cm4gKEZNQUNfRmlsdGVyQ29uZmlnKGhmbWFjLCBzQ29uZmlnLCBQUkVMT0FEX0FDQ0VTU19QT0xMSU5HKSk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBGTUFDIGZpbHRlciBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMKKyAgKiAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmIHN0cnVjdHVyZS4KKyAgKiAgICAgICAgIFRoZSBwcm92aWRlZCBkYXRhIHdpbGwgYmUgbG9hZGVkIHVzaW5nIERNQS4KKyAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZS4KKyAgKiBAcGFyYW0gIHNDb25maWcgcG9pbnRlciB0byBhIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdAorICAqICAgICAgICAgY29udGFpbnMgdGhlIEZNQUMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlckNvbmZpZ19ETUEoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmICpzQ29uZmlnKQoreworICByZXR1cm4gKEZNQUNfRmlsdGVyQ29uZmlnKGhmbWFjLCBzQ29uZmlnLCBQUkVMT0FEX0FDQ0VTU19ETUEpKTsKK30KKworLyoqCisgICogQGJyaWVmICBQcmVsb2FkIHRoZSBpbnB1dCAoRklSLCBJSVIpIGFuZCBvdXRwdXQgZGF0YSAoSUlSKSBvZiB0aGUgRk1BQyBmaWx0ZXIuCisgICogICAgICAgICBUaGV5IHdpbGwgYmUgdXNlZCBieSBGTUFDIGFzIHNvb24gYXMgSEFMX0ZNQUNfRmlsdGVyU3RhcnQgaXMgY2FsbGVkLgorICAqICAgICAgICAgVGhlIHByb3ZpZGVkIGRhdGEgd2lsbCBiZSBsb2FkZWQgdXNpbmcgcG9sbGluZyBtb2RlLgorICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgorICAqIEBwYXJhbSAgcElucHV0IFByZWxvYWRpbmcgb2YgdGhlIGZpcnN0IGVsZW1lbnRzIG9mIHRoZSBpbnB1dCBidWZmZXIgKFgxKS4KKyAgKiAgICAgICAgIElmIG5vdCBuZWVkZWQgKG5vIGRhdGEgYXZhaWxhYmxlIHdoZW4gc3RhcnRpbmcpLCBpdCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgICogQHBhcmFtICBJbnB1dFNpemUgU2l6ZSBvZiB0aGUgaW5wdXQgdmVjdG9yLgorICAqICAgICAgICAgQXMgcElucHV0IGlzIHVzZWQgZm9yIHByZWxvYWRpbmcgZGF0YSwgaXQgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoZSBpbnB1dCBtZW1vcnkgYXJlYS4KKyAgKiBAcGFyYW0gIHBPdXRwdXQgW0lJUl0gUHJlbG9hZGluZyBvZiB0aGUgZmlyc3QgZWxlbWVudHMgb2YgdGhlIG91dHB1dCB2ZWN0b3IgKFkpLgorICAqICAgICAgICAgSWYgbm90IG5lZWRlZCwgaXQgc2hvdWxkIGJlIHNldCB0byBOVUxMLgorICAqIEBwYXJhbSAgT3V0cHV0U2l6ZSBTaXplIG9mIHRoZSBvdXRwdXQgdmVjdG9yLgorICAqICAgICAgICAgQXMgcE91dHB1dCBpcyB1c2VkIGZvciBwcmVsb2FkaW5nIGRhdGEsIGl0IGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB0aGUgb3V0cHV0IG1lbW9yeSBhcmVhLgorICAqIEBub3RlICAgVGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0IGJ1ZmZlcnMgY2FuIGJlIGZpbGxlZCBieSBjYWxsaW5nIHNldmVyYWwgdGltZXMgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZAorICAqICAgICAgICAgKGVhY2ggY2FsbCBmaWxsaW5nIHBhcnRseSB0aGUgYnVmZmVycykuIEluIGNhc2Ugb2Ygb3ZlcmZsb3cgKHRvbyBtdWNoIGRhdGEgcHJvdmlkZWQgdGhyb3VnaAorICAqICAgICAgICAgYWxsIHRoZXNlIGNhbGxzKSwgYW4gZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlclByZWxvYWQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcElucHV0LCB1aW50OF90IElucHV0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MTZfdCAqcE91dHB1dCwgdWludDhfdCBPdXRwdXRTaXplKQoreworICByZXR1cm4gKEZNQUNfRmlsdGVyUHJlbG9hZChoZm1hYywgcElucHV0LCBJbnB1dFNpemUsIHBPdXRwdXQsIE91dHB1dFNpemUsIFBSRUxPQURfQUNDRVNTX1BPTExJTkcpKTsKK30KKworLyoqCisgICogQGJyaWVmICBQcmVsb2FkIHRoZSBpbnB1dCAoRklSLCBJSVIpIGFuZCBvdXRwdXQgZGF0YSAoSUlSKSBvZiB0aGUgRk1BQyBmaWx0ZXIuCisgICogICAgICAgICBUaGV5IHdpbGwgYmUgdXNlZCBieSBGTUFDIGFzIHNvb24gYXMgSEFMX0ZNQUNfRmlsdGVyU3RhcnQgaXMgY2FsbGVkLgorICAqICAgICAgICAgVGhlIHByb3ZpZGVkIGRhdGEgd2lsbCBiZSBsb2FkZWQgdXNpbmcgRE1BLgorICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgorICAqIEBwYXJhbSAgcElucHV0IFByZWxvYWRpbmcgb2YgdGhlIGZpcnN0IGVsZW1lbnRzIG9mIHRoZSBpbnB1dCBidWZmZXIgKFgxKS4KKyAgKiAgICAgICAgIElmIG5vdCBuZWVkZWQgKG5vIGRhdGEgYXZhaWxhYmxlIHdoZW4gc3RhcnRpbmcpLCBpdCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgICogQHBhcmFtICBJbnB1dFNpemUgU2l6ZSBvZiB0aGUgaW5wdXQgdmVjdG9yLgorICAqICAgICAgICAgQXMgcElucHV0IGlzIHVzZWQgZm9yIHByZWxvYWRpbmcgZGF0YSwgaXQgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoZSBpbnB1dCBtZW1vcnkgYXJlYS4KKyAgKiBAcGFyYW0gIHBPdXRwdXQgW0lJUl0gUHJlbG9hZGluZyBvZiB0aGUgZmlyc3QgZWxlbWVudHMgb2YgdGhlIG91dHB1dCB2ZWN0b3IgKFkpLgorICAqICAgICAgICAgSWYgbm90IG5lZWRlZCwgaXQgc2hvdWxkIGJlIHNldCB0byBOVUxMLgorICAqIEBwYXJhbSAgT3V0cHV0U2l6ZSBTaXplIG9mIHRoZSBvdXRwdXQgdmVjdG9yLgorICAqICAgICAgICAgQXMgcE91dHB1dCBpcyB1c2VkIGZvciBwcmVsb2FkaW5nIGRhdGEsIGl0IGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB0aGUgb3V0cHV0IG1lbW9yeSBhcmVhLgorICAqIEBub3RlICAgVGhlIGlucHV0IGFuZCB0aGUgb3V0cHV0IGJ1ZmZlcnMgY2FuIGJlIGZpbGxlZCBieSBjYWxsaW5nIHNldmVyYWwgdGltZXMgSEFMX0ZNQUNfRmlsdGVyUHJlbG9hZAorICAqICAgICAgICAgKGVhY2ggY2FsbCBmaWxsaW5nIHBhcnRseSB0aGUgYnVmZmVycykuIEluIGNhc2Ugb2Ygb3ZlcmZsb3cgKHRvbyBtdWNoIGRhdGEgcHJvdmlkZWQgdGhyb3VnaAorICAqICAgICAgICAgYWxsIHRoZXNlIGNhbGxzKSwgYW4gZXJyb3Igd2lsbCBiZSByZXR1cm5lZC4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlclByZWxvYWRfRE1BKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIGludDE2X3QgKnBJbnB1dCwgdWludDhfdCBJbnB1dFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpwT3V0cHV0LCB1aW50OF90IE91dHB1dFNpemUpCit7CisgIHJldHVybiAoRk1BQ19GaWx0ZXJQcmVsb2FkKGhmbWFjLCBwSW5wdXQsIElucHV0U2l6ZSwgcE91dHB1dCwgT3V0cHV0U2l6ZSwgUFJFTE9BRF9BQ0NFU1NfRE1BKSk7Cit9CisKKworLyoqCisgICogQGJyaWVmICBTdGFydCB0aGUgRk1BQyBwcm9jZXNzaW5nIGFjY29yZGluZyB0byB0aGUgZXhpc3RpbmcgRk1BQyBjb25maWd1cmF0aW9uLgorICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgorICAqIEBwYXJhbSAgcE91dHB1dCBwb2ludGVyIHRvIGJ1ZmZlciB3aGVyZSBvdXRwdXQgZGF0YSBvZiBGTUFDIHByb2Nlc3Npbmcgd2lsbCBiZSBzdG9yZWQKKyAgKiAgICAgICAgIGluIHRoZSBuZXh0IHN0ZXBzLgorICAqICAgICAgICAgSWYgaXQgaXMgc2V0IHRvIE5VTEwsIHRoZSBvdXRwdXQgd2lsbCBub3QgYmUgcmVhZCBhbmQgaXQgd2lsbCBiZSB1cCB0bworICAqICAgICAgICAgYW4gZXh0ZXJuYWwgSVAgdG8gZW1wdHkgdGhlIG91dHB1dCBidWZmZXIuCisgICogQHBhcmFtICBwT3V0cHV0U2l6ZSBwb2ludGVyIHRvIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiBUaGUgbnVtYmVyIG9mIHJlYWQgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gaGVyZS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0ZpbHRlclN0YXJ0KEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIGludDE2X3QgKnBPdXRwdXQsIHVpbnQxNl90ICpwT3V0cHV0U2l6ZSkKK3sKKyAgdWludDMyX3QgdG1wY3IgPSAwVUw7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKKworICAvKiBDaGVjayB0aGUgU1RBUlQgYml0IHN0YXRlICovCisgIGlmIChGTUFDX0dFVF9TVEFSVF9CSVQoaGZtYWMpICE9IDBVTCkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBDaGVjayB0aGF0IGEgdmFsaWQgY29uZmlndXJhdGlvbiB3YXMgZG9uZSBwcmV2aW91c2x5ICovCisgIGlmIChoZm1hYy0+RmlsdGVyUGFyYW0gPT0gMFVMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIGhhbmRsZSBzdGF0ZSBpcyByZWFkeSAqLworICBpZiAoaGZtYWMtPlN0YXRlID09IEhBTF9GTUFDX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogQ2hhbmdlIHRoZSBGTUFDIHN0YXRlICovCisgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfQlVTWTsKKworICAgIC8qIENSOiBDb25maWd1cmUgdGhlIGlucHV0IGFjY2VzcyAoZXJyb3IgaW50ZXJydXB0aW9ucyBlbmFibGVkIG9ubHkgZm9yIElUIG9yIERNQSkgKi8KKyAgICBpZiAoaGZtYWMtPklucHV0QWNjZXNzID09IEZNQUNfQlVGRkVSX0FDQ0VTU19ETUEpCisgICAgeworICAgICAgdG1wY3IgfD0gRk1BQ19ETUFfV0VOOworICAgIH0KKyAgICBlbHNlIGlmIChoZm1hYy0+SW5wdXRBY2Nlc3MgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX0lUKQorICAgIHsKKyAgICAgIHRtcGNyIHw9IEZNQUNfSVRfV0lFTjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICB9CisKKyAgICAvKiBDUjogQ29uZmlndXJlIHRoZSBvdXRwdXQgYWNjZXNzIChlcnJvciBpbnRlcnJ1cHRpb25zIGVuYWJsZWQgb25seSBmb3IgSVQgb3IgRE1BKSAqLworICAgIGlmIChoZm1hYy0+T3V0cHV0QWNjZXNzID09IEZNQUNfQlVGRkVSX0FDQ0VTU19ETUEpCisgICAgeworICAgICAgdG1wY3IgfD0gRk1BQ19ETUFfUkVOOworICAgIH0KKyAgICBlbHNlIGlmIChoZm1hYy0+T3V0cHV0QWNjZXNzID09IEZNQUNfQlVGRkVSX0FDQ0VTU19JVCkKKyAgICB7CisgICAgICB0bXBjciB8PSBGTUFDX0lUX1JJRU47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgfQorCisgICAgLyogQ1I6IFdyaXRlIHRoZSBjb25maWd1cmF0aW9uICovCisgICAgTU9ESUZZX1JFRyhoZm1hYy0+SW5zdGFuY2UtPkNSLCBcCisgICAgICAgICAgICAgICBGTUFDX0lUX1JJRU4gfCBGTUFDX0lUX1dJRU4gfCBGTUFDX0RNQV9SRU4gfCBGTUFDX0NSX0RNQVdFTiwgXAorICAgICAgICAgICAgICAgdG1wY3IpOworCisgICAgLyogUmVnaXN0ZXIgdGhlIG5ldyBvdXRwdXQgYnVmZmVyICovCisgICAgc3RhdHVzID0gRk1BQ19Db25maWdGaWx0ZXJPdXRwdXRCdWZmZXJVcGRhdGVTdGF0ZShoZm1hYywgcE91dHB1dCwgcE91dHB1dFNpemUpOworCisgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgICAgeworICAgICAgLyogUEFSQU06IFN0YXJ0IHRoZSBmaWx0ZXIgKCB0aGlzIGNhbiBnZW5lcmF0ZSBpbnRlcnJ1cHRzIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBIQUxfRk1BQ19GaWx0ZXJTdGFydCApICovCisgICAgICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5QQVJBTSwgKHVpbnQzMl90KShoZm1hYy0+RmlsdGVyUGFyYW0pKTsKKyAgICB9CisKKyAgICAvKiBSZXNldCB0aGUgYnVzeSBmbGFnIChkbyBub3Qgb3ZlcndyaXRlIHRoZSBwb3NzaWJsZSB3cml0ZSBhbmQgcmVhZCBmbGFnKSAqLworICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFQURZOworCisgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICAgIHJldHVybiBzdGF0dXM7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIFByb3ZpZGUgYSBuZXcgaW5wdXQgYnVmZmVyIHRoYXQgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgRk1BQworICAqICAgICAgICAgaW5wdXQgbWVtb3J5IGFyZWEuCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCisgICogQHBhcmFtICBwSW5wdXQgTmV3IGlucHV0IHZlY3RvciAoYWRkaXRpb25hbCBpbnB1dCBkYXRhKS4KKyAgKiBAcGFyYW0gIHBJbnB1dFNpemUgU2l6ZSBvZiB0aGUgaW5wdXQgdmVjdG9yIChpZiBhbGwgdGhlIGRhdGEgY2FuJ3QgYmUKKyAgKiAgICAgICAgIHdyaXR0ZW4sIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgZGF0YSByZWFkIGZyb20gRk1BQykuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19BcHBlbmRGaWx0ZXJEYXRhKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIGludDE2X3QgKnBJbnB1dCwgdWludDE2X3QgKnBJbnB1dFNpemUpCit7CisgIC8qIENoZWNrIHRoZSBTVEFSVCBiaXQgc3RhdGUgKi8KKyAgaWYgKEZNQUNfR0VUX1NUQVJUX0JJVChoZm1hYykgPT0gMFVMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzICovCisgIGlmICgocElucHV0ID09IE5VTEwpIHx8IChwSW5wdXRTaXplID09IE5VTEwpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorICBpZiAoKnBJbnB1dFNpemUgPT0gMFUpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgdGhlIEZNQUMgY29uZmlndXJhdGlvbiAqLworICBpZiAoaGZtYWMtPklucHV0QWNjZXNzID09IEZNQUNfQlVGRkVSX0FDQ0VTU19OT05FKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIHdoZXRoZXIgdGhlIHByZXZpb3VzIGlucHV0IHZlY3RvciBoYXMgYmVlbiBoYW5kbGVkICovCisgIGlmICgoaGZtYWMtPnBJbnB1dFNpemUgIT0gTlVMTCkgJiYgKGhmbWFjLT5JbnB1dEN1cnJlbnRTaXplIDwgKiAoaGZtYWMtPnBJbnB1dFNpemUpKSkKKyAgeworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorCisgIC8qIENoZWNrIHRoYXQgRk1BQyB3YXMgaW5pdGlhbGl6ZWQgYW5kIHRoYXQgbm8gd3JpdGluZyBpcyBhbHJlYWR5IG9uZ29pbmcgKi8KKyAgaWYgKGhmbWFjLT5XclN0YXRlID09IEhBTF9GTUFDX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogUmVnaXN0ZXIgdGhlIG5ldyBpbnB1dCBidWZmZXIgKi8KKyAgICByZXR1cm4gKEZNQUNfQXBwZW5kRmlsdGVyRGF0YVVwZGF0ZVN0YXRlKGhmbWFjLCBwSW5wdXQsIHBJbnB1dFNpemUpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgUHJvdmlkZSBhIG5ldyBvdXRwdXQgYnVmZmVyIHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBkYXRhCisgICogICAgICAgICBjb21wdXRlZCBieSBGTUFDIHVuaXQuCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCisgICogQHBhcmFtICBwT3V0cHV0IE5ldyBvdXRwdXQgdmVjdG9yLgorICAqIEBwYXJhbSAgcE91dHB1dFNpemUgU2l6ZSBvZiB0aGUgb3V0cHV0IHZlY3RvciAoaWYgdGhlIHZlY3RvciBjYW4ndAorICAqICAgICAgICAgYmUgZW50aXJlbHkgZmlsbGVkLCBwT3V0cHV0U2l6ZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiBkYXRhIHJlYWQgZnJvbSBGTUFDKS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX0NvbmZpZ0ZpbHRlck91dHB1dEJ1ZmZlcihGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBpbnQxNl90ICpwT3V0cHV0LCB1aW50MTZfdCAqcE91dHB1dFNpemUpCit7CisgIC8qIENoZWNrIHRoZSBTVEFSVCBiaXQgc3RhdGUgKi8KKyAgaWYgKEZNQUNfR0VUX1NUQVJUX0JJVChoZm1hYykgPT0gMFVMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzICovCisgIGlmICgocE91dHB1dCA9PSBOVUxMKSB8fCAocE91dHB1dFNpemUgPT0gTlVMTCkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIGlmICgqcE91dHB1dFNpemUgPT0gMFUpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgdGhlIEZNQUMgY29uZmlndXJhdGlvbiAqLworICBpZiAoaGZtYWMtPk91dHB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfTk9ORSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBDaGVjayB3aGV0aGVyIHRoZSBwcmV2aW91cyBvdXRwdXQgdmVjdG9yIGhhcyBiZWVuIGhhbmRsZWQgKi8KKyAgaWYgKChoZm1hYy0+cE91dHB1dFNpemUgIT0gTlVMTCkgJiYgKGhmbWFjLT5PdXRwdXRDdXJyZW50U2l6ZSA8ICogKGhmbWFjLT5wT3V0cHV0U2l6ZSkpKQorICB7CisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9CisKKyAgLyogQ2hlY2sgdGhhdCBGTUFDIHdhcyBpbml0aWFsaXplZCBhbmQgdGhhdCBub3QgcmVhZGluZyBpcyBhbHJlYWR5IG9uZ29pbmcgKi8KKyAgaWYgKGhmbWFjLT5SZFN0YXRlID09IEhBTF9GTUFDX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogUmVnaXN0ZXIgdGhlIG5ldyBvdXRwdXQgYnVmZmVyICovCisgICAgcmV0dXJuIChGTUFDX0NvbmZpZ0ZpbHRlck91dHB1dEJ1ZmZlclVwZGF0ZVN0YXRlKGhmbWFjLCBwT3V0cHV0LCBwT3V0cHV0U2l6ZSkpOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBXcml0ZSB0aGUgcHJldmlvdXNseSBwcm92aWRlZCB1c2VyJ3MgaW5wdXQgZGF0YSBhbmQKKyAgKiAgICAgICAgIGZpbGwgdGhlIHByZXZpb3VzbHkgcHJvdmlkZWQgdXNlcidzIG91dHB1dCBidWZmZXIsCisgICogICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGV4aXN0aW5nIEZNQUMgY29uZmlndXJhdGlvbiAocG9sbGluZyBtb2RlIG9ubHkpLgorICAqICAgICAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgd2hlbiB0aGUgaW5wdXQgZGF0YSBoYXMgYmVlbiBoYW5kbGVkIG9yCisgICogICAgICAgICB3aGVuIHRoZSBvdXRwdXQgZGF0YSBpcyBmaWxsZWQuIFRoZSBwb3NzaWJsZSB1bnVzZWQgZGF0YSBpc24ndAorICAqICAgICAgICAga2VwdC4gSXQgd2lsbCBiZSB1cCB0byB0aGUgdXNlciB0byBoYW5kbGUgaXQuIFRoZSBwcmV2aW91c2x5CisgICogICAgICAgICBwcm92aWRlZCBwSW5wdXRTaXplIGFuZCBwT3V0cHV0U2l6ZSB3aWxsIGJlIHVzZWQgdG8gaW5kaWNhdGUgdG8gdGhlCisgICogICAgICAgICBzaXplIG9mIHRoZSByZWFkL3dyaXR0ZW4gZGF0YSB0byB0aGUgdXNlci4KKyAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZS4KKyAgKiBAcGFyYW0gIFRpbWVvdXQgdGltZW91dCB2YWx1ZS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9GTUFDX1BvbGxGaWx0ZXJEYXRhKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIHVpbnQzMl90IFRpbWVvdXQpCit7CisgIHVpbnQzMl90IHRpY2tzdGFydDsKKyAgdWludDhfdCBpbnBvbGxpbmc7CisgIHVpbnQ4X3QgaW5wb2xsaW5nb3ZlciA9IFBPTExJTkdfTk9UX1NUT1BQRUQ7CisgIHVpbnQ4X3Qgb3V0cG9sbGluZzsKKyAgdWludDhfdCBvdXRwb2xsaW5nb3ZlciA9IFBPTExJTkdfTk9UX1NUT1BQRUQ7CisKKyAgLyogQ2hlY2sgdGhlIFNUQVJUIGJpdCBzdGF0ZSAqLworICBpZiAoRk1BQ19HRVRfU1RBUlRfQklUKGhmbWFjKSA9PSAwVUwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKworICAvKiBHZXQgdGhlIGlucHV0IGFuZCBvdXRwdXQgbW9kZSAoaWYgbm8gYnVmZmVyIHdhcyBwcmV2aW91c2x5IHByb3ZpZGVkLCBub3RoaW5nIHdpbGwgYmUgcmVhZC93cml0dGVuKSAqLworICBpZiAoKGhmbWFjLT5JbnB1dEFjY2VzcyAgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX1BPTExJTkcpICYmIChoZm1hYy0+cElucHV0ICAhPSBOVUxMKSkKKyAgeworICAgIGlucG9sbGluZyA9IFBPTExJTkdfRU5BQkxFRDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBpbnBvbGxpbmcgPSBQT0xMSU5HX0RJU0FCTEVEOworICB9CisgIGlmICgoaGZtYWMtPk91dHB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfUE9MTElORykgJiYgKGhmbWFjLT5wT3V0cHV0ICE9IE5VTEwpKQorICB7CisgICAgb3V0cG9sbGluZyA9IFBPTExJTkdfRU5BQkxFRDsKKyAgfQorICBlbHNlCisgIHsKKyAgICBvdXRwb2xsaW5nID0gUE9MTElOR19ESVNBQkxFRDsKKyAgfQorCisgIC8qIENoZWNrIHRoZSBjb25maWd1cmF0aW9uICovCisgIGlmICgoaW5wb2xsaW5nID09IFBPTExJTkdfRElTQUJMRUQpICYmIChvdXRwb2xsaW5nID09IFBPTExJTkdfRElTQUJMRUQpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIGhhbmRsZSBzdGF0ZSBpcyByZWFkeSAqLworICBpZiAoaGZtYWMtPlN0YXRlID09IEhBTF9GTUFDX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogQ2hhbmdlIHRoZSBGTUFDIHN0YXRlICovCisgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfQlVTWTsKKworICAgIC8qIEdldCB0aWNrICovCisgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAgIC8qIExvb3Agb24gcmVhZGluZyBhbmQgd3JpdGluZyB1bnRpbCB0aW1lb3V0ICovCisgICAgd2hpbGUgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA8IFRpbWVvdXQpCisgICAgeworICAgICAgLyogWDE6IENoZWNrIHRoZSBtb2RlOiBwb2xsaW5nIG9yIG5vbmUgKi8KKyAgICAgIGlmIChpbnBvbGxpbmcgIT0gUE9MTElOR19ESVNBQkxFRCkKKyAgICAgIHsKKyAgICAgICAgRk1BQ19Xcml0ZURhdGFJbmNyZW1lbnRQdHIoaGZtYWMsIE1BWF9GSUxURVJfREFUQV9TSVpFX1RPX0hBTkRMRSk7CisgICAgICAgIGlmIChoZm1hYy0+SW5wdXRDdXJyZW50U2l6ZSA9PSAqKGhmbWFjLT5wSW5wdXRTaXplKSkKKyAgICAgICAgeworICAgICAgICAgIGlucG9sbGluZ292ZXIgPSBQT0xMSU5HX1NUT1BQRUQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogWTogQ2hlY2sgdGhlIG1vZGU6IHBvbGxpbmcgb3Igbm9uZSAqLworICAgICAgaWYgKG91dHBvbGxpbmcgIT0gUE9MTElOR19ESVNBQkxFRCkKKyAgICAgIHsKKyAgICAgICAgRk1BQ19SZWFkRGF0YUluY3JlbWVudFB0cihoZm1hYywgTUFYX0ZJTFRFUl9EQVRBX1NJWkVfVE9fSEFORExFKTsKKyAgICAgICAgaWYgKGhmbWFjLT5PdXRwdXRDdXJyZW50U2l6ZSA9PSAqKGhmbWFjLT5wT3V0cHV0U2l6ZSkpCisgICAgICAgIHsKKyAgICAgICAgICBvdXRwb2xsaW5nb3ZlciA9IFBPTExJTkdfU1RPUFBFRDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBFeGl0IGlmIHRoZXJlIGlzbid0IGRhdGEgdG8gaGFuZGxlIGFueW1vcmUgb24gb25lIHNpZGUgb3IgYW5vdGhlciAqLworICAgICAgaWYgKChpbnBvbGxpbmdvdmVyICE9IFBPTExJTkdfTk9UX1NUT1BQRUQpIHx8IChvdXRwb2xsaW5nb3ZlciAhPSBQT0xMSU5HX05PVF9TVE9QUEVEKSkKKyAgICAgIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgLyogQ2hhbmdlIHRoZSBGTUFDIHN0YXRlOyB1cGRhdGUgdGhlIGlucHV0IGFuZCBvdXRwdXQgc2l6ZXM7IHJlc2V0IHRoZSBpbmRleGVzICovCisgICAgaWYgKGlucG9sbGluZyAhPSBQT0xMSU5HX0RJU0FCTEVEKQorICAgIHsKKyAgICAgICgqKGhmbWFjLT5wSW5wdXRTaXplKSkgID0gaGZtYWMtPklucHV0Q3VycmVudFNpemU7CisgICAgICBGTUFDX1Jlc2V0SW5wdXRTdGF0ZUFuZERhdGFQb2ludGVycyhoZm1hYyk7CisgICAgfQorICAgIGlmIChvdXRwb2xsaW5nICE9IFBPTExJTkdfRElTQUJMRUQpCisgICAgeworICAgICAgKCooaGZtYWMtPnBPdXRwdXRTaXplKSkgPSBoZm1hYy0+T3V0cHV0Q3VycmVudFNpemU7CisgICAgICBGTUFDX1Jlc2V0T3V0cHV0U3RhdGVBbmREYXRhUG9pbnRlcnMoaGZtYWMpOworICAgIH0KKworICAgIC8qIFJlc2V0IHRoZSBidXN5IGZsYWcgKGRvIG5vdCBvdmVyd3JpdGUgdGhlIHBvc3NpYmxlIHdyaXRlIGFuZCByZWFkIGZsYWcpICovCisgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfUkVBRFk7CisKKyAgICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSBUaW1lb3V0KQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfT0s7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBTdG9wIHRoZSBGTUFDIHByb2Nlc3NpbmcuCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfRk1BQ19GaWx0ZXJTdG9wKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCit7CisKKyAgLyogQ2hlY2sgdGhlIFNUQVJUIGJpdCBzdGF0ZSAqLworICBpZiAoRk1BQ19HRVRfU1RBUlRfQklUKGhmbWFjKSA9PSAwVUwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgaGFuZGxlIHN0YXRlIGlzIHJlYWR5ICovCisgIGlmIChoZm1hYy0+U3RhdGUgPT0gSEFMX0ZNQUNfU1RBVEVfUkVBRFkpCisgIHsKKyAgICAvKiBTZXQgdGhlIFNUQVJUIGJpdCB0byAwIChzdG9wIHRoZSBwcmV2aW91c2x5IGNvbmZpZ3VyZWQgZmlsdGVyKSAqLworICAgIENMRUFSX0JJVChoZm1hYy0+SW5zdGFuY2UtPlBBUkFNLCBGTUFDX1BBUkFNX1NUQVJUKTsKKworICAgIC8qIERpc2FibGUgdGhlIGludGVycnVwdHMgaW4gb3JkZXIgdG8gYXZvaWQgY3Jvc3NpbmcgY2FzZXMgKi8KKyAgICBDTEVBUl9CSVQoaGZtYWMtPkluc3RhbmNlLT5DUiwgRk1BQ19ETUFfUkVOIHwgRk1BQ19ETUFfV0VOIHwgRk1BQ19JVF9SSUVOIHwgRk1BQ19JVF9XSUVOKTsKKworICAgIC8qIEluIGNhc2Ugb2YgSVQsIHVwZGF0ZSB0aGUgc2l6ZXMgKi8KKyAgICBpZiAoKGhmbWFjLT5JbnB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfSVQpICYmIChoZm1hYy0+cElucHV0ICE9IE5VTEwpKQorICAgIHsKKyAgICAgICgqKGhmbWFjLT5wSW5wdXRTaXplKSkgID0gaGZtYWMtPklucHV0Q3VycmVudFNpemU7CisgICAgfQorICAgIGlmICgoaGZtYWMtPk91dHB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfSVQpICYmIChoZm1hYy0+cE91dHB1dCAhPSBOVUxMKSkKKyAgICB7CisgICAgICAoKihoZm1hYy0+cE91dHB1dFNpemUpKSA9IGhmbWFjLT5PdXRwdXRDdXJyZW50U2l6ZTsKKyAgICB9CisKKyAgICAvKiBSZXNldCBGTUFDIHVuaXQgKGludGVybmFsIHBvaW50ZXJzKSAqLworICAgIGlmIChGTUFDX1Jlc2V0KGhmbWFjKSA9PSBIQUxfVElNRU9VVCkKKyAgICB7CisgICAgICAvKiBVcGRhdGUgRk1BQyBlcnJvciBjb2RlIGFuZCBGTUFDIHBlcmlwaGVyYWwgc3RhdGUgKi8KKyAgICAgIGhmbWFjLT5FcnJvckNvZGUgPSBIQUxfRk1BQ19FUlJPUl9SRVNFVDsKKyAgICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1RJTUVPVVQ7CisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgfQorCisgICAgLyogUmVzZXQgdGhlIGRhdGEgcG9pbnRlcnMgKi8KKyAgICBGTUFDX1Jlc2V0RGF0YVBvaW50ZXJzKGhmbWFjKTsKKworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX09LOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBGTUFDX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDMgQ2FsbGJhY2sgZnVuY3Rpb25zCisgICogQGJyaWVmICAgIENhbGxiYWNrIGZ1bmN0aW9ucy4KKyAgKgorQHZlcmJhdGltCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAgICAgICAgICAgICMjIyMjIENhbGxiYWNrIGZ1bmN0aW9ucyAgIyMjIyMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXSAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIEludGVycnVwdGlvbiBhbmQgRE1BIGNhbGxiYWNrIGZ1bmN0aW9uczoKKyAgICAgICgrKSBETUEgb3IgSW50ZXJydXB0OiB0aGUgdXNlcidzIGlucHV0IGRhdGEgaXMgaGFsZiB3cml0dGVuIChETUEgb25seSkKKyAgICAgICAgICBvciBjb21wbGV0ZWx5IHdyaXR0ZW4uCisgICAgICAoKykgRE1BIG9yIEludGVycnVwdDogdGhlIHVzZXIncyBvdXRwdXQgYnVmZmVyIGlzIGhhbGYgZmlsbGVkIChETUEgb25seSkKKyAgICAgICAgICBvciBjb21wbGV0ZWx5IGZpbGxlZC4KKyAgICAgICgrKSBETUEgb3IgSW50ZXJydXB0OiBlcnJvciBoYW5kbGluZy4KKworQGVuZHZlcmJhdGltCisgICogQHsKKyAgKi8KKworLyoqCisgICogQGJyaWVmICBGTUFDIGVycm9yIGNhbGxiYWNrLgorICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0ZNQUNfRXJyb3JDYWxsYmFjayhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChoZm1hYyk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZDsgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9GTUFDX0Vycm9yQ2FsbGJhY2sgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUuCisgICAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIEZNQUMgZ2V0IGhhbGYgZGF0YSBjYWxsYmFjay4KKyAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fd2VhayB2b2lkIEhBTF9GTUFDX0hhbGZHZXREYXRhQ2FsbGJhY2soRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaGZtYWMpOworCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQ7IHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfRk1BQ19IYWxmR2V0RGF0YUNhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlLgorICAgKi8KK30KKworLyoqCisgICogQGJyaWVmICBGTUFDIGdldCBkYXRhIGNhbGxiYWNrLgorICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0ZNQUNfR2V0RGF0YUNhbGxiYWNrKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCit7CisgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KKyAgVU5VU0VEKGhmbWFjKTsKKworICAvKiBOT1RFIDogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG1vZGlmaWVkOyB3aGVuIHRoZSBjYWxsYmFjayBpcyBuZWVkZWQsCisgICAgICAgICAgICB0aGUgSEFMX0ZNQUNfR2V0RGF0YUNhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlLgorICAgKi8KK30KKworLyoqCisgICogQGJyaWVmICBGTUFDIGhhbGYgb3V0cHV0IGRhdGEgcmVhZHkgY2FsbGJhY2suCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCisgICogQHJldHZhbCBOb25lCisgICovCitfX3dlYWsgdm9pZCBIQUxfRk1BQ19IYWxmT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2soRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaGZtYWMpOworCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQ7IHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfRk1BQ19IYWxmT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2sgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUuCisgICAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIEZNQUMgb3V0cHV0IGRhdGEgcmVhZHkgY2FsbGJhY2suCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCisgICogQHJldHZhbCBOb25lCisgICovCitfX3dlYWsgdm9pZCBIQUxfRk1BQ19PdXRwdXREYXRhUmVhZHlDYWxsYmFjayhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChoZm1hYyk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZDsgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9GTUFDX091dHB1dERhdGFSZWFkeUNhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlLgorICAgKi8KK30KKworLyoqCisgICogQGJyaWVmICBGTUFDIGZpbHRlciBjb25maWd1cmF0aW9uIGNhbGxiYWNrLgorICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworX193ZWFrIHZvaWQgSEFMX0ZNQUNfRmlsdGVyQ29uZmlnQ2FsbGJhY2soRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaGZtYWMpOworCisgIC8qIE5PVEUgOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgbW9kaWZpZWQ7IHdoZW4gdGhlIGNhbGxiYWNrIGlzIG5lZWRlZCwKKyAgICAgICAgICAgIHRoZSBIQUxfRk1BQ19GaWx0ZXJDb25maWdDYWxsYmFjayBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZS4KKyAgICovCit9CisKKy8qKgorICAqIEBicmllZiAgRk1BQyBmaWx0ZXIgcHJlbG9hZCBjYWxsYmFjay4KKyAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fd2VhayB2b2lkIEhBTF9GTUFDX0ZpbHRlclByZWxvYWRDYWxsYmFjayhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKQoreworICAvKiBQcmV2ZW50IHVudXNlZCBhcmd1bWVudChzKSBjb21waWxhdGlvbiB3YXJuaW5nICovCisgIFVOVVNFRChoZm1hYyk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZDsgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9GTUFDX0ZpbHRlclByZWxvYWRDYWxsYmFjayBjYW4gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZS4KKyAgICovCit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0IElSUSBoYW5kbGVyIG1hbmFnZW1lbnQKKyAgKiBAYnJpZWYgICAgSVJRIGhhbmRsZXIuCisgICoKK0B2ZXJiYXRpbQorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAjIyMjIyBJUlEgaGFuZGxlciBtYW5hZ2VtZW50ICMjIyMjCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorWy4uXSAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIElSUSBoYW5kbGVyIGZ1bmN0aW9uLgorCitAZW5kdmVyYmF0aW0KKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIEhhbmRsZSBGTUFDIGludGVycnVwdCByZXF1ZXN0LgorICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBIQUxfRk1BQ19JUlFIYW5kbGVyKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCit7CisgIHVpbnQzMl90IGl0c291cmNlOworCisgIC8qIENoZWNrIGlmIHRoZSByZWFkIGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBpZiBZIGJ1ZmZlciBlbXB0eSBmbGFnIGlzbid0IHNldCAqLworICBpdHNvdXJjZSA9IF9fSEFMX0ZNQUNfR0VUX0lUX1NPVVJDRShoZm1hYywgRk1BQ19JVF9SSUVOKTsKKyAgaWYgKChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfWUVNUFRZKSA9PSAwVSkgJiYgKGl0c291cmNlICE9IDBVTCkpCisgIHsKKyAgICAvKiBSZWFkIHNvbWUgZGF0YSBpZiBwb3NzaWJsZSAoWSBzaXplIGlzIHVzZWQgYXMgYSBwc2V1ZG8gdGltZW91dCBpbiBvcmRlcgorICAgICAgIHRvIG5vdCBnZXQgc3R1Y2sgdG9vIGxvbmcgdW5kZXIgSVQgaWYgRk1BQyBrZWVwcyBvbiBwcm9jZXNzaW5nIGlucHV0CisgICAgICAgZGF0YSByZWxvYWRlZCB2aWEgRE1BIGZvciBpbnN0YW5jZSkuICovCisgICAgaWYgKGhmbWFjLT5wT3V0cHV0ICE9IE5VTEwpCisgICAgeworICAgICAgRk1BQ19SZWFkRGF0YUluY3JlbWVudFB0cihoZm1hYywgKHVpbnQxNl90KUZNQUNfR0VUX1lfU0laRShoZm1hYykpOworICAgIH0KKworICAgIC8qIEluZGljYXRlIHRoYXQgZGF0YSBpcyByZWFkeSB0byBiZSByZWFkICovCisgICAgaWYgKChoZm1hYy0+cE91dHB1dCA9PSBOVUxMKSB8fCAoaGZtYWMtPk91dHB1dEN1cnJlbnRTaXplID09ICooaGZtYWMtPnBPdXRwdXRTaXplKSkpCisgICAgeworICAgICAgLyogUmVzZXQgdGhlIHBvaW50ZXJzIHRvIGluZGljYXRlIG5ldyBkYXRhIHdpbGwgYmUgbmVlZGVkICovCisgICAgICBGTUFDX1Jlc2V0T3V0cHV0U3RhdGVBbmREYXRhUG9pbnRlcnMoaGZtYWMpOworCisgICAgICAvKiBDYWxsIHRoZSBvdXRwdXQgZGF0YSByZWFkeSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgICBoZm1hYy0+T3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2soaGZtYWMpOworI2Vsc2UKKyAgICAgIEhBTF9GTUFDX091dHB1dERhdGFSZWFkeUNhbGxiYWNrKGhmbWFjKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgfQorICB9CisKKyAgLyogQ2hlY2sgaWYgdGhlIHdyaXRlIGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBpZiBYMSBidWZmZXIgZnVsbCBmbGFnIGlzbid0IHNldCAqLworICBpdHNvdXJjZSA9IF9fSEFMX0ZNQUNfR0VUX0lUX1NPVVJDRShoZm1hYywgRk1BQ19JVF9XSUVOKTsKKyAgaWYgKChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfWDFGVUxMKSA9PSAwVSkgJiYgKGl0c291cmNlICE9IDBVTCkpCisgIHsKKyAgICAvKiBXcml0ZSBzb21lIGRhdGEgaWYgcG9zc2libGUgKFgxIHNpemUgaXMgdXNlZCBhcyBhIHBzZXVkbyB0aW1lb3V0IGluIG9yZGVyCisgICAgICAgdG8gbm90IGdldCBzdHVjayB0b28gbG9uZyB1bmRlciBJVCBpZiBGTUFDIGtlZXAgb24gcHJvY2Vzc2luZyBpbnB1dAorICAgICAgIGRhdGEgd2hlcmVhcyBpdHMgb3V0cHV0IGVtcHRpZWQgdmlhIERNQSBmb3IgaW5zdGFuY2UpLiAqLworICAgIGlmIChoZm1hYy0+cElucHV0ICE9IE5VTEwpCisgICAgeworICAgICAgRk1BQ19Xcml0ZURhdGFJbmNyZW1lbnRQdHIoaGZtYWMsICh1aW50MTZfdClGTUFDX0dFVF9YMV9TSVpFKGhmbWFjKSk7CisgICAgfQorCisgICAgLyogSW5kaWNhdGUgdGhhdCBuZXcgZGF0YSB3aWxsIGJlIG5lZWRlZCAqLworICAgIGlmICgoaGZtYWMtPnBJbnB1dCA9PSBOVUxMKSB8fCAoaGZtYWMtPklucHV0Q3VycmVudFNpemUgPT0gKihoZm1hYy0+cElucHV0U2l6ZSkpKQorICAgIHsKKyAgICAgIC8qIFJlc2V0IHRoZSBwb2ludGVycyB0byBpbmRpY2F0ZSBuZXcgZGF0YSB3aWxsIGJlIG5lZWRlZCAqLworICAgICAgRk1BQ19SZXNldElucHV0U3RhdGVBbmREYXRhUG9pbnRlcnMoaGZtYWMpOworCisgICAgICAvKiBDYWxsIHRoZSBnZXQgZGF0YSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgICBoZm1hYy0+R2V0RGF0YUNhbGxiYWNrKGhmbWFjKTsKKyNlbHNlCisgICAgICBIQUxfRk1BQ19HZXREYXRhQ2FsbGJhY2soaGZtYWMpOworI2VuZGlmIC8qIFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICB9CisgIH0KKworICAvKiBDaGVjayBpZiB0aGUgb3ZlcmZsb3cgZXJyb3IgaW50ZXJydXB0IGlzIGVuYWJsZWQgYW5kIGlmIG92ZXJmbG93IGVycm9yIGZsYWcgaXMgcmFpc2VkICovCisgIGl0c291cmNlID0gX19IQUxfRk1BQ19HRVRfSVRfU09VUkNFKGhmbWFjLCBGTUFDX0lUX09WRkxJRU4pOworICBpZiAoKF9fSEFMX0ZNQUNfR0VUX0ZMQUcoaGZtYWMsIEZNQUNfRkxBR19PVkZMKSAhPSAwVSkgJiYgKGl0c291cmNlICE9IDBVTCkpCisgIHsKKyAgICBoZm1hYy0+RXJyb3JDb2RlIHw9IEhBTF9GTUFDX0VSUk9SX09WRkw7CisgIH0KKworICAvKiBDaGVjayBpZiB0aGUgdW5kZXJmbG93IGVycm9yIGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBpZiB1bmRlcmZsb3cgZXJyb3IgZmxhZyBpcyByYWlzZWQgKi8KKyAgaXRzb3VyY2UgPSBfX0hBTF9GTUFDX0dFVF9JVF9TT1VSQ0UoaGZtYWMsIEZNQUNfSVRfVU5GTElFTik7CisgIGlmICgoX19IQUxfRk1BQ19HRVRfRkxBRyhoZm1hYywgRk1BQ19GTEFHX1VORkwpICE9IDBVKSAmJiAoaXRzb3VyY2UgIT0gMFVMKSkKKyAgeworICAgIGhmbWFjLT5FcnJvckNvZGUgfD0gSEFMX0ZNQUNfRVJST1JfVU5GTDsKKyAgfQorCisgIC8qIENoZWNrIGlmIHRoZSBzYXR1cmF0aW9uIGVycm9yIGludGVycnVwdCBpcyBlbmFibGVkIGFuZCBpZiBzYXR1cmF0aW9uIGVycm9yIGZsYWcgaXMgcmFpc2VkICovCisgIGl0c291cmNlID0gX19IQUxfRk1BQ19HRVRfSVRfU09VUkNFKGhmbWFjLCBGTUFDX0lUX1NBVElFTik7CisgIGlmICgoX19IQUxfRk1BQ19HRVRfRkxBRyhoZm1hYywgRk1BQ19GTEFHX1NBVCkgIT0gMFUpICYmIChpdHNvdXJjZSAhPSAwVUwpKQorICB7CisgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9TQVQ7CisgIH0KKworICAvKiBDYWxsIHRoZSBlcnJvciBjYWxsYmFjayBpZiBhbiBlcnJvciBvY2N1cnJlZCAqLworICBpZiAoaGZtYWMtPkVycm9yQ29kZSAhPSBIQUxfRk1BQ19FUlJPUl9OT05FKQorICB7CisgICAgLyogQ2FsbCB0aGUgZXJyb3IgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICAgIGhmbWFjLT5FcnJvckNhbGxiYWNrKGhmbWFjKTsKKyNlbHNlCisgICAgSEFMX0ZNQUNfRXJyb3JDYWxsYmFjayhoZm1hYyk7CisjZW5kaWYgLyogVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICB9Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKiBAZGVmZ3JvdXAgRk1BQ19FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA1IFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zCisgICogQGJyaWVmICAgIFBlcmlwaGVyYWwgU3RhdGUgZnVuY3Rpb25zLgorICAqCitAdmVyYmF0aW0KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgIyMjIyMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgIFRoaXMgc3Vic2VjdGlvbiBwZXJtaXRzIHRvIGdldCBpbiBydW4tdGltZSB0aGUgc3RhdHVzIG9mIHRoZSBwZXJpcGhlcmFsLgorCitAZW5kdmVyYmF0aW0KKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiB0aGUgRk1BQyBoYW5kbGUgc3RhdGUuCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCisgICogQHJldHZhbCBIQUwgc3RhdGUKKyAgKi8KK0hBTF9GTUFDX1N0YXRlVHlwZURlZiBIQUxfRk1BQ19HZXRTdGF0ZShGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKQoreworICAvKiBSZXR1cm4gRk1BQyBoYW5kbGUgc3RhdGUgKi8KKyAgcmV0dXJuIGhmbWFjLT5TdGF0ZTsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gdGhlIEZNQUMgcGVyaXBoZXJhbCBlcnJvci4KKyAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZS4KKyAgKiBAbm90ZSAgIFRoZSByZXR1cm5lZCBlcnJvciBpcyBhIGJpdC1tYXAgY29tYmluYXRpb24gb2YgcG9zc2libGUgZXJyb3JzLgorICAqIEByZXR2YWwgRXJyb3IgYml0LW1hcAorICAqLwordWludDMyX3QgSEFMX0ZNQUNfR2V0RXJyb3IoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKK3sKKyAgLyogUmV0dXJuIEZNQUMgZXJyb3IgY29kZSAqLworICByZXR1cm4gaGZtYWMtPkVycm9yQ29kZTsKK30KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqIEBkZWZncm91cCBGTUFDX1ByaXZhdGVfRnVuY3Rpb25zIEZNQUMgUHJpdmF0ZSBGdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKioKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEZNQUMgUHJpdmF0ZSBGdW5jdGlvbnMgIyMjIyMKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICovCisvKioKKyAgKiBAYnJpZWYgIFBlcmZvcm0gYSByZXNldCBvZiB0aGUgRk1BQyB1bml0LgorICAqIEBwYXJhbSAgaGZtYWMgRk1BQyBoYW5kbGUuCisgICogQHJldHZhbCBGTUFDIHN0YXR1cworICAqLworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNQUNfUmVzZXQoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKK3sKKyAgdWludDMyX3QgdGlja3N0YXJ0OworCisgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIC8qIFBlcmZvcm0gdGhlIHJlc2V0ICovCisgIFNFVF9CSVQoaGZtYWMtPkluc3RhbmNlLT5DUiwgRk1BQ19DUl9SRVNFVCk7CisKKyAgLyogV2FpdCB1bnRpbCBmbGFnIGlzIHJlc2V0ICovCisgIHdoaWxlIChSRUFEX0JJVChoZm1hYy0+SW5zdGFuY2UtPkNSLCBGTUFDX0NSX1JFU0VUKSAhPSAwVUwpCisgIHsKKyAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gSEFMX0ZNQUNfUkVTRVRfVElNRU9VVF9WQUxVRSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgfQorICB9CisKKyAgaGZtYWMtPkVycm9yQ29kZSA9IEhBTF9GTUFDX0VSUk9SX05PTkU7CisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmVzZXQgdGhlIGRhdGEgcG9pbnRlcnMgb2YgdGhlIEZNQUMgdW5pdC4KKyAgKiBAcGFyYW0gIGhmbWFjIEZNQUMgaGFuZGxlLgorICAqIEByZXR2YWwgRk1BQyBzdGF0dXMKKyAgKi8KK3N0YXRpYyB2b2lkIEZNQUNfUmVzZXREYXRhUG9pbnRlcnMoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYykKK3sKKyAgRk1BQ19SZXNldElucHV0U3RhdGVBbmREYXRhUG9pbnRlcnMoaGZtYWMpOworICBGTUFDX1Jlc2V0T3V0cHV0U3RhdGVBbmREYXRhUG9pbnRlcnMoaGZtYWMpOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJlc2V0IHRoZSBpbnB1dCBkYXRhIHBvaW50ZXJzIG9mIHRoZSBGTUFDIHVuaXQuCisgICogQHBhcmFtICBoZm1hYyBGTUFDIGhhbmRsZS4KKyAgKiBAcmV0dmFsIEZNQUMgc3RhdHVzCisgICovCitzdGF0aWMgdm9pZCBGTUFDX1Jlc2V0SW5wdXRTdGF0ZUFuZERhdGFQb2ludGVycyhGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjKQoreworICBoZm1hYy0+cElucHV0ID0gTlVMTDsKKyAgaGZtYWMtPnBJbnB1dFNpemUgPSBOVUxMOworICBoZm1hYy0+SW5wdXRDdXJyZW50U2l6ZSA9IDBVOworICBoZm1hYy0+V3JTdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFQURZOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJlc2V0IHRoZSBvdXRwdXQgZGF0YSBwb2ludGVycyBvZiB0aGUgRk1BQyB1bml0LgorICAqIEBwYXJhbSAgaGZtYWMgRk1BQyBoYW5kbGUuCisgICogQHJldHZhbCBGTUFDIHN0YXR1cworICAqLworc3RhdGljIHZvaWQgRk1BQ19SZXNldE91dHB1dFN0YXRlQW5kRGF0YVBvaW50ZXJzKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMpCit7CisgIGhmbWFjLT5wT3V0cHV0ID0gTlVMTDsKKyAgaGZtYWMtPnBPdXRwdXRTaXplID0gTlVMTDsKKyAgaGZtYWMtPk91dHB1dEN1cnJlbnRTaXplID0gMFU7CisgIGhmbWFjLT5SZFN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfUkVBRFk7Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBGTUFDIGZpbHRlciBhY2NvcmRpbmcgdG8gdGhlIHBhcmFtZXRlcnMKKyAgICAgICAgICAgIHNwZWNpZmllZCBpbiB0aGUgRk1BQ19GaWx0ZXJDb25maWdUeXBlRGVmIHN0cnVjdHVyZS4KKyAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZS4KKyAgKiBAcGFyYW0gIHNDb25maWcgcG9pbnRlciB0byBhIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdAorICAqICAgICAgICAgY29udGFpbnMgdGhlIEZNQUMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyAgKiBAcGFyYW0gIFByZWxvYWRBY2Nlc3MgYnVmZmVyIHByZWxvYWQgbWV0aG9kCisgICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICBAYXJnIEByZWYgUFJFTE9BRF9BQ0NFU1NfUE9MTElORyBwcmVsb2FkaW5nIHVzaW5nIENQVQorICAqICAgICAgICAgICBAYXJnIEByZWYgUFJFTE9BRF9BQ0NFU1NfRE1BIEdldCBwcmVsb2FkaW5nIHVzaW5nIERNQQorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNQUNfRmlsdGVyQ29uZmlnKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIEZNQUNfRmlsdGVyQ29uZmlnVHlwZURlZiAqc0NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IFByZWxvYWRBY2Nlc3MpCit7CisgIHVpbnQzMl90IHRpY2tzdGFydDsKKyAgdWludDMyX3QgdG1wY3I7CisjaWYgZGVmaW5lZChVU0VfRlVMTF9BU1NFUlQpCisgIHVpbnQzMl90IHgyc2l6ZTsKKyNlbmRpZiAvKiBVU0VfRlVMTF9BU1NFUlQgKi8KKworICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19USFJFU0hPTEQoc0NvbmZpZy0+SW5wdXRUaHJlc2hvbGQpKTsKKyAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfVEhSRVNIT0xEKHNDb25maWctPk91dHB1dFRocmVzaG9sZCkpOworICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19CVUZGRVJfQUNDRVNTKHNDb25maWctPklucHV0QWNjZXNzKSk7CisgIGFzc2VydF9wYXJhbShJU19GTUFDX0JVRkZFUl9BQ0NFU1Moc0NvbmZpZy0+T3V0cHV0QWNjZXNzKSk7CisgIGFzc2VydF9wYXJhbShJU19GTUFDX0NMSVBfU1RBVEUoc0NvbmZpZy0+Q2xpcCkpOworICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19GSUxURVJfRlVOQ1RJT04oc0NvbmZpZy0+RmlsdGVyKSk7CisgIGFzc2VydF9wYXJhbShJU19GTUFDX1BBUkFNX1Aoc0NvbmZpZy0+RmlsdGVyLCBzQ29uZmlnLT5QKSk7CisgIGFzc2VydF9wYXJhbShJU19GTUFDX1BBUkFNX1Eoc0NvbmZpZy0+RmlsdGVyLCBzQ29uZmlnLT5RKSk7CisgIGFzc2VydF9wYXJhbShJU19GTUFDX1BBUkFNX1Ioc0NvbmZpZy0+RmlsdGVyLCBzQ29uZmlnLT5SKSk7CisKKyAgLyogQ2hlY2sgdGhlIFNUQVJUIGJpdCBzdGF0ZSAqLworICBpZiAoRk1BQ19HRVRfU1RBUlRfQklUKGhmbWFjKSAhPSAwVUwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgaGFuZGxlIHN0YXRlIGlzIHJlYWR5ICovCisgIGlmIChoZm1hYy0+U3RhdGUgPT0gSEFMX0ZNQUNfU1RBVEVfUkVBRFkpCisgIHsKKyAgICAvKiBDaGFuZ2UgdGhlIEZNQUMgc3RhdGUgKi8KKyAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9CVVNZOworCisgICAgLyogR2V0IHRpY2sgKi8KKyAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgICAgLyogSW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBubyB2YWxpZCBjb25maWd1cmF0aW9uIGRvbmUgKi8KKyAgICBoZm1hYy0+RmlsdGVyUGFyYW0gPSAwVUw7CisKKyAgICAvKiBGTUFDX1gxQlVGQ0ZHOiBDb25maWd1cmUgdGhlIGlucHV0IGJ1ZmZlciB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSBpZiByZXF1aXJlZCAqLworICAgIGlmIChzQ29uZmlnLT5JbnB1dEJ1ZmZlclNpemUgIT0gMFUpCisgICAgeworICAgICAgTU9ESUZZX1JFRyhoZm1hYy0+SW5zdGFuY2UtPlgxQlVGQ0ZHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIChGTUFDX1gxQlVGQ0ZHX1gxX0JBU0UgfCBGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKCgoKCh1aW50MzJfdCkoc0NvbmZpZy0+SW5wdXRCYXNlQWRkcmVzcykpIDw8IEZNQUNfWDFCVUZDRkdfWDFfQkFTRV9Qb3MpICAgICAmIEZNQUNfWDFCVUZDRkdfWDFfQkFTRSkgfCBcCisgICAgICAgICAgICAgICAgICAoKCgodWludDMyX3QpKHNDb25maWctPklucHV0QnVmZmVyU2l6ZSkpICA8PCBGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFX1BvcykgJiBGTUFDX1gxQlVGQ0ZHX1gxX0JVRl9TSVpFKSkpOworICAgIH0KKworICAgIC8qIEZNQUNfWDFCVUZDRkc6IENvbmZpZ3VyZSB0aGUgaW5wdXQgdGhyZXNob2xkIGlmIHZhbGlkIHdoZW4gY29tcGFyZWQgdG8gdGhlIGNvbmZpZ3VyZWQgWDEgc2l6ZSAqLworICAgIGlmIChzQ29uZmlnLT5JbnB1dFRocmVzaG9sZCAhPSBGTUFDX1RIUkVTSE9MRF9OT19WQUxVRSkKKyAgICB7CisgICAgICAvKiBDaGVjayB0aGUgcGFyYW1ldGVyICovCisgICAgICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19USFJFU0hPTERfQVBQTElDQUJMRShGTUFDX0dFVF9YMV9TSVpFKGhmbWFjKSwgc0NvbmZpZy0+SW5wdXRUaHJlc2hvbGQsIHNDb25maWctPklucHV0QWNjZXNzKSk7CisKKyAgICAgIE1PRElGWV9SRUcoaGZtYWMtPkluc3RhbmNlLT5YMUJVRkNGRywgXAorICAgICAgICAgICAgICAgICBGTUFDX1gxQlVGQ0ZHX0ZVTExfV00sICAgICBcCisgICAgICAgICAgICAgICAgICgoc0NvbmZpZy0+SW5wdXRUaHJlc2hvbGQpICYgRk1BQ19YMUJVRkNGR19GVUxMX1dNKSk7CisgICAgfQorCisgICAgLyogRk1BQ19YMkJVRkNGRzogQ29uZmlndXJlIHRoZSBjb2VmZmljaWVudCBidWZmZXIgd2l0aGluIHRoZSBpbnRlcm5hbCBtZW1vcnkgKi8KKyAgICBpZiAoc0NvbmZpZy0+Q29lZmZCdWZmZXJTaXplICE9IDBVKQorICAgIHsKKyAgICAgIE1PRElGWV9SRUcoaGZtYWMtPkluc3RhbmNlLT5YMkJVRkNGRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoRk1BQ19YMkJVRkNGR19YMl9CQVNFIHwgRk1BQ19YMkJVRkNGR19YMl9CVUZfU0laRSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICgoKCgodWludDMyX3QpKHNDb25maWctPkNvZWZmQmFzZUFkZHJlc3MpKSA8PCBGTUFDX1gyQlVGQ0ZHX1gyX0JBU0VfUG9zKSAgICAgJiBGTUFDX1gyQlVGQ0ZHX1gyX0JBU0UpIHwgXAorICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShzQ29uZmlnLT5Db2VmZkJ1ZmZlclNpemUpKSAgPDwgRk1BQ19YMkJVRkNGR19YMl9CVUZfU0laRV9Qb3MpICYgRk1BQ19YMkJVRkNGR19YMl9CVUZfU0laRSkpKTsKKyAgICB9CisKKyAgICAvKiBGTUFDX1lCVUZDRkc6IENvbmZpZ3VyZSB0aGUgb3V0cHV0IGJ1ZmZlciB3aXRoaW4gdGhlIGludGVybmFsIG1lbW9yeSBpZiByZXF1aXJlZCAqLworICAgIGlmIChzQ29uZmlnLT5PdXRwdXRCdWZmZXJTaXplICE9IDBVKQorICAgIHsKKyAgICAgIE1PRElGWV9SRUcoaGZtYWMtPkluc3RhbmNlLT5ZQlVGQ0ZHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAoRk1BQ19ZQlVGQ0ZHX1lfQkFTRSB8IEZNQUNfWUJVRkNGR19ZX0JVRl9TSVpFKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICgoKCgodWludDMyX3QpKHNDb25maWctPk91dHB1dEJhc2VBZGRyZXNzKSkgPDwgRk1BQ19ZQlVGQ0ZHX1lfQkFTRV9Qb3MpICAgICAmIEZNQUNfWUJVRkNGR19ZX0JBU0UpIHwgICAgXAorICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShzQ29uZmlnLT5PdXRwdXRCdWZmZXJTaXplKSkgIDw8IEZNQUNfWUJVRkNGR19ZX0JVRl9TSVpFX1BvcykgJiBGTUFDX1lCVUZDRkdfWV9CVUZfU0laRSkpKTsKKyAgICB9CisKKyAgICAvKiBGTUFDX1lCVUZDRkc6IENvbmZpZ3VyZSB0aGUgb3V0cHV0IHRocmVzaG9sZCBpZiB2YWxpZCB3aGVuIGNvbXBhcmVkIHRvIHRoZSBjb25maWd1cmVkIFkgc2l6ZSAqLworICAgIGlmIChzQ29uZmlnLT5PdXRwdXRUaHJlc2hvbGQgIT0gRk1BQ19USFJFU0hPTERfTk9fVkFMVUUpCisgICAgeworICAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlciAqLworICAgICAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfVEhSRVNIT0xEX0FQUExJQ0FCTEUoRk1BQ19HRVRfWV9TSVpFKGhmbWFjKSwgc0NvbmZpZy0+T3V0cHV0VGhyZXNob2xkLCBzQ29uZmlnLT5PdXRwdXRBY2Nlc3MpKTsKKworICAgICAgTU9ESUZZX1JFRyhoZm1hYy0+SW5zdGFuY2UtPllCVUZDRkcsIFwKKyAgICAgICAgICAgICAgICAgRk1BQ19ZQlVGQ0ZHX0VNUFRZX1dNLCAgICBcCisgICAgICAgICAgICAgICAgICgoc0NvbmZpZy0+T3V0cHV0VGhyZXNob2xkKSAmIEZNQUNfWUJVRkNGR19FTVBUWV9XTSkpOworICAgIH0KKworICAgIC8qIENSOiBDb25maWd1cmUgdGhlIGNsaXAgZmVhdHVyZSAqLworICAgIHRtcGNyID0gc0NvbmZpZy0+Q2xpcCAmIEZNQUNfQ1JfQ0xJUEVOOworCisgICAgLyogQ1I6IElmIElUIG9yIERNQSB3aWxsIGJlIHVzZWQsIGVuYWJsZSBlcnJvciBpbnRlcnJ1cHRzLgorICAgICAgKiBCZWluZyBtb3JlIGEgZGVidWdnaW5nIGZlYXR1cmUsIEZNQUNfQ1JfU0FUSUVOIGlzbid0IGVuYWJsZWQgYnkgZGVmYXVsdC4gKi8KKyAgICBpZiAoKHNDb25maWctPklucHV0QWNjZXNzICA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BKSB8fCAoc0NvbmZpZy0+SW5wdXRBY2Nlc3MgID09IEZNQUNfQlVGRkVSX0FDQ0VTU19JVCkgfHwKKyAgICAgICAgKHNDb25maWctPk91dHB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BKSB8fCAoc0NvbmZpZy0+T3V0cHV0QWNjZXNzID09IEZNQUNfQlVGRkVSX0FDQ0VTU19JVCkpCisgICAgeworICAgICAgdG1wY3IgfD0gRk1BQ19JVF9VTkZMSUVOIHwgRk1BQ19JVF9PVkZMSUVOOworICAgIH0KKworICAgIC8qIENSOiB3cml0ZSB0aGUgdmFsdWUgKi8KKyAgICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5DUiwgdG1wY3IpOworCisgICAgLyogU2F2ZSB0aGUgaW5wdXQvb3V0cHV0IGFjY2Vzc2VzIGluIG9yZGVyIHRvIGNvbmZpZ3VyZSBSSUVOLCBXSUVOLCBETUFSRU4gYW5kIERNQVdFTiBkdXJpbmcgZmlsdGVyIHN0YXJ0ICovCisgICAgaGZtYWMtPklucHV0QWNjZXNzID0gc0NvbmZpZy0+SW5wdXRBY2Nlc3M7CisgICAgaGZtYWMtPk91dHB1dEFjY2VzcyA9IHNDb25maWctPk91dHB1dEFjY2VzczsKKworICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIGNvbmZpZ3VyZWQgWDIgaXMgYmlnIGVub3VnaCBmb3IgdGhlIGZpbHRlciAqLworI2lmIGRlZmluZWQoVVNFX0ZVTExfQVNTRVJUKQorICAgIHgyc2l6ZSA9IEZNQUNfR0VUX1gyX1NJWkUoaGZtYWMpOworI2VuZGlmIC8qIFVTRV9GVUxMX0FTU0VSVCAqLworICAgIGFzc2VydF9wYXJhbSgoKHNDb25maWctPkZpbHRlciA9PSBGTUFDX0ZVTkNfQ09OVk9fRklSKSAmJiAoeDJzaXplID49IHNDb25maWctPlApKSB8fCBcCisgICAgICAgICAgICAgICAgICgoc0NvbmZpZy0+RmlsdGVyID09IEZNQUNfRlVOQ19JSVJfRElSRUNUX0ZPUk1fMSkgJiYgKHgyc2l6ZSA+PSAoKHVpbnQzMl90KXNDb25maWctPlAgKyAodWludDMyX3Qpc0NvbmZpZy0+USkpKSk7CisKKyAgICAvKiBCdWlsZCB0aGUgUEFSQU0gdmFsdWUgdGhhdCB3aWxsIGJlIHVzZWQgd2hlbiBzdGFydGluZyB0aGUgZmlsdGVyICovCisgICAgaGZtYWMtPkZpbHRlclBhcmFtID0gKEZNQUNfUEFSQU1fU1RBUlQgfCBzQ29uZmlnLT5GaWx0ZXIgfCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCh1aW50MzJfdCkoc0NvbmZpZy0+UCkpIDw8IEZNQUNfUEFSQU1fUF9Qb3MpICYgRk1BQ19QQVJBTV9QKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHVpbnQzMl90KShzQ29uZmlnLT5RKSkgPDwgRk1BQ19QQVJBTV9RX1BvcykgJiBGTUFDX1BBUkFNX1EpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgodWludDMyX3QpKHNDb25maWctPlIpKSA8PCBGTUFDX1BBUkFNX1JfUG9zKSAmIEZNQUNfUEFSQU1fUikpOworCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgY29lZmZpY2llbnQgYnVmZmVyIGlmIHJlcXVpcmVkIChwQ29lZmZBIGZvciBGSVIgb25seSkgKi8KKyAgICBpZiAoKHNDb25maWctPnBDb2VmZkIgIT0gTlVMTCkgJiYgKHNDb25maWctPkNvZWZmQlNpemUgIT0gMFUpKQorICAgIHsKKyAgICAgIC8qIEZJUi9JSVI6IFRoZSBwcm92aWRlZCBjb2VmZmljaWVudHMgc2hvdWxkIG1hdGNoIFgyIHNpemUgKi8KKyAgICAgIGFzc2VydF9wYXJhbSgoKHVpbnQzMl90KXNDb25maWctPkNvZWZmQVNpemUgKyAodWludDMyX3Qpc0NvbmZpZy0+Q29lZmZCU2l6ZSkgPD0geDJzaXplKTsKKyAgICAgIC8qIEZJUi9JSVI6IFRoZSBzaXplIG9mIHBDb2VmZkIgc2hvdWxkIG1hdGNoIHRoZSBwYXJhbWV0ZXIgUCAqLworICAgICAgYXNzZXJ0X3BhcmFtKHNDb25maWctPkNvZWZmQlNpemUgPj0gc0NvbmZpZy0+UCk7CisgICAgICAvKiBwQ29lZmZBIHNob3VsZCBiZSBwcm92aWRlZCBmb3IgSUlSIGJ1dCBub3QgZm9yIEZJUiAqLworICAgICAgLyogSUlSIDogaWYgcENvZWZmQiBpcyBwcm92aWRlZCwgcENvZWZmQSBzaG91bGQgYWxzbyBiZSB0aGVyZSAqLworICAgICAgLyogSUlSOiBUaGUgc2l6ZSBvZiBwQ29lZmZBIHNob3VsZCBtYXRjaCB0aGUgcGFyYW1ldGVyIFEgKi8KKyAgICAgIGFzc2VydF9wYXJhbSgoKHNDb25maWctPkZpbHRlciA9PSBGTUFDX0ZVTkNfQ09OVk9fRklSKSAmJgorICAgICAgICAgICAgICAgICAgICAoc0NvbmZpZy0+cENvZWZmQSA9PSBOVUxMKSAmJiAoc0NvbmZpZy0+Q29lZmZBU2l6ZSA9PSAwVSkpIHx8CisgICAgICAgICAgICAgICAgICAgKChzQ29uZmlnLT5GaWx0ZXIgPT0gRk1BQ19GVU5DX0lJUl9ESVJFQ1RfRk9STV8xKSAmJgorICAgICAgICAgICAgICAgICAgICAoc0NvbmZpZy0+cENvZWZmQSAhPSBOVUxMKSAmJiAoc0NvbmZpZy0+Q29lZmZBU2l6ZSAhPSAwVSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKHNDb25maWctPkNvZWZmQVNpemUgPj0gc0NvbmZpZy0+USkpKTsKKworICAgICAgLyogV3JpdGUgbnVtYmVyIG9mIHZhbHVlcyB0byBiZSBsb2FkZWQsIHRoZSBkYXRhIGxvYWQgZnVuY3Rpb24gYW5kIHN0YXJ0IHRoZSBvcGVyYXRpb24gKi8KKyAgICAgIFdSSVRFX1JFRyhoZm1hYy0+SW5zdGFuY2UtPlBBUkFNLCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKCgodWludDMyX3QpKHNDb25maWctPkNvZWZmQlNpemUpIDw8IEZNQUNfUEFSQU1fUF9Qb3MpIHwgXAorICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShzQ29uZmlnLT5Db2VmZkFTaXplKSA8PCBGTUFDX1BBUkFNX1FfUG9zKSB8IFwKKyAgICAgICAgICAgICAgICAgRk1BQ19GVU5DX0xPQURfWDIgfCBGTUFDX1BBUkFNX1NUQVJUKSk7CisKKyAgICAgIGlmIChQcmVsb2FkQWNjZXNzID09IFBSRUxPQURfQUNDRVNTX1BPTExJTkcpCisgICAgICB7CisgICAgICAgIC8qIExvYWQgdGhlIGJ1ZmZlciBpbnRvIHRoZSBpbnRlcm5hbCBtZW1vcnkgKi8KKyAgICAgICAgRk1BQ19Xcml0ZVByZWxvYWREYXRhSW5jcmVtZW50UHRyKGhmbWFjLCAmKHNDb25maWctPnBDb2VmZkIpLCBzQ29uZmlnLT5Db2VmZkJTaXplKTsKKworICAgICAgICAvKiBMb2FkIHBDb2VmZkEgaWYgbmVlZGVkICovCisgICAgICAgIGlmICgoc0NvbmZpZy0+cENvZWZmQSAhPSBOVUxMKSAmJiAoc0NvbmZpZy0+Q29lZmZBU2l6ZSAhPSAwVSkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBMb2FkIHRoZSBidWZmZXIgaW50byB0aGUgaW50ZXJuYWwgbWVtb3J5ICovCisgICAgICAgICAgRk1BQ19Xcml0ZVByZWxvYWREYXRhSW5jcmVtZW50UHRyKGhmbWFjLCAmKHNDb25maWctPnBDb2VmZkEpLCBzQ29uZmlnLT5Db2VmZkFTaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFdhaXQgZm9yIHRoZSBlbmQgb2YgdGhlIHdyaXRpbmcgKi8KKyAgICAgICAgaWYgKEZNQUNfV2FpdE9uU3RhcnRVbnRpbFRpbWVvdXQoaGZtYWMsIHRpY2tzdGFydCwgSEFMX0ZNQUNfVElNRU9VVF9WQUxVRSkgIT0gSEFMX09LKQorICAgICAgICB7CisgICAgICAgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfVElNRU9VVDsKKyAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGFuZ2UgdGhlIEZNQUMgc3RhdGUgKi8KKyAgICAgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfUkVBRFk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGhmbWFjLT5wSW5wdXQgPSBzQ29uZmlnLT5wQ29lZmZBOworICAgICAgICBoZm1hYy0+SW5wdXRDdXJyZW50U2l6ZSA9IHNDb25maWctPkNvZWZmQVNpemU7CisKKyAgICAgICAgLyogU2V0IHRoZSBGTUFDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICAgICAgICBoZm1hYy0+aGRtYVByZWxvYWQtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVyQ3BsdENhbGxiYWNrID0gRk1BQ19ETUFGaWx0ZXJDb25maWc7CisgICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckVycm9yQ2FsbGJhY2sgPSBGTUFDX0RNQUVycm9yOworCisgICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSBtYW5hZ2luZyBGTUFDIHByZWxvYWQgZGF0YSB3cml0ZSAqLworICAgICAgICByZXR1cm4gKEhBTF9ETUFfU3RhcnRfSVQoaGZtYWMtPmhkbWFQcmVsb2FkLCAodWludDMyX3Qpc0NvbmZpZy0+cENvZWZmQiwgKHVpbnQzMl90KSZoZm1hYy0+SW5zdGFuY2UtPldEQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc0NvbmZpZy0+Q29lZmZCU2l6ZSkpOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogQ2hhbmdlIHRoZSBGTUFDIHN0YXRlICovCisgICAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9SRUFEWTsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorCisgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgcmV0dXJuIEhBTF9PSzsKK30KKworLyoqCisgICogQGJyaWVmICBQcmVsb2FkIHRoZSBpbnB1dCAoRklSLCBJSVIpIGFuZCBvdXRwdXQgZGF0YSAoSUlSKSBvZiB0aGUgRk1BQyBmaWx0ZXIuCisgICogICAgICAgICBUaGV5IHdpbGwgYmUgdXNlZCBieSBGTUFDIGFzIHNvb24gYXMgSEFMX0ZNQUNfRmlsdGVyU3RhcnQgaXMgY2FsbGVkLgorICAqIEBwYXJhbSAgaGZtYWMgcG9pbnRlciB0byBhIEZNQUNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEZNQUMgbW9kdWxlLgorICAqIEBwYXJhbSAgcElucHV0IFByZWxvYWRpbmcgb2YgdGhlIGZpcnN0IGVsZW1lbnRzIG9mIHRoZSBpbnB1dCBidWZmZXIgKFgxKS4KKyAgKiAgICAgICAgIElmIG5vdCBuZWVkZWQgKG5vIGRhdGEgYXZhaWxhYmxlIHdoZW4gc3RhcnRpbmcpLCBpdCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgICogQHBhcmFtICBJbnB1dFNpemUgU2l6ZSBvZiB0aGUgaW5wdXQgdmVjdG9yLgorICAqICAgICAgICAgQXMgcElucHV0IGlzIHVzZWQgZm9yIHByZWxvYWRpbmcgZGF0YSwgaXQgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoZSBpbnB1dCBtZW1vcnkgYXJlYS4KKyAgKiBAcGFyYW0gIHBPdXRwdXQgW0lJUl0gUHJlbG9hZGluZyBvZiB0aGUgZmlyc3QgZWxlbWVudHMgb2YgdGhlIG91dHB1dCB2ZWN0b3IgKFkpLgorICAqICAgICAgICAgSWYgbm90IG5lZWRlZCwgaXQgc2hvdWxkIGJlIHNldCB0byBOVUxMLgorICAqIEBwYXJhbSAgT3V0cHV0U2l6ZSBTaXplIG9mIHRoZSBvdXRwdXQgdmVjdG9yLgorICAqICAgICAgICAgQXMgcE91dHB1dCBpcyB1c2VkIGZvciBwcmVsb2FkaW5nIGRhdGEsIGl0IGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB0aGUgb3V0cHV0IG1lbW9yeSBhcmVhLgorICAqIEBwYXJhbSAgUHJlbG9hZEFjY2VzcyBidWZmZXIgcHJlbG9hZCBtZXRob2QKKyAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgIEBhcmcgQHJlZiBQUkVMT0FEX0FDQ0VTU19QT0xMSU5HIHByZWxvYWRpbmcgdXNpbmcgQ1BVCisgICogICAgICAgICAgIEBhcmcgQHJlZiBQUkVMT0FEX0FDQ0VTU19ETUEgR2V0IHByZWxvYWRpbmcgdXNpbmcgRE1BCisgICogQG5vdGUgICBUaGUgaW5wdXQgYW5kIHRoZSBvdXRwdXQgYnVmZmVycyBjYW4gYmUgZmlsbGVkIGJ5IGNhbGxpbmcgc2V2ZXJhbCB0aW1lcyBIQUxfRk1BQ19GaWx0ZXJQcmVsb2FkCisgICogICAgICAgICAoZWFjaCBjYWxsIGZpbGxpbmcgcGFydGx5IHRoZSBidWZmZXJzKS4gSW4gY2FzZSBvZiBvdmVyZmxvdyAodG9vIG11Y2ggZGF0YSBwcm92aWRlZCB0aHJvdWdoCisgICogICAgICAgICBhbGwgdGhlc2UgY2FsbHMpLCBhbiBlcnJvciB3aWxsIGJlIHJldHVybmVkLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIEZNQUNfRmlsdGVyUHJlbG9hZChGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBpbnQxNl90ICpwSW5wdXQsIHVpbnQ4X3QgSW5wdXRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90ICpwT3V0cHV0LCB1aW50OF90IE91dHB1dFNpemUsIHVpbnQ4X3QgUHJlbG9hZEFjY2VzcykKK3sKKyAgdWludDMyX3QgdGlja3N0YXJ0OworCisgIC8qIENoZWNrIHRoZSBTVEFSVCBiaXQgc3RhdGUgKi8KKyAgaWYgKEZNQUNfR0VUX1NUQVJUX0JJVChoZm1hYykgIT0gMFVMKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIHRoYXQgYSB2YWxpZCBjb25maWd1cmF0aW9uIHdhcyBkb25lIHByZXZpb3VzbHkgKi8KKyAgaWYgKGhmbWFjLT5GaWx0ZXJQYXJhbSA9PSAwVUwpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgdGhlIHByZWxvYWQgaW5wdXQgYnVmZmVycyBpc24ndCB0b28gYmlnICovCisgIGlmICgoSW5wdXRTaXplID4gRk1BQ19HRVRfWDFfU0laRShoZm1hYykpICYmIChwSW5wdXQgIT0gTlVMTCkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgdGhlIHByZWxvYWQgb3V0cHV0IGJ1ZmZlciBpc24ndCB0b28gYmlnICovCisgIGlmICgoT3V0cHV0U2l6ZSA+IEZNQUNfR0VUX1lfU0laRShoZm1hYykpICYmIChwT3V0cHV0ICE9IE5VTEwpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIGhhbmRsZSBzdGF0ZSBpcyByZWFkeSAqLworICBpZiAoaGZtYWMtPlN0YXRlID09IEhBTF9GTUFDX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogQ2hhbmdlIHRoZSBGTUFDIHN0YXRlICovCisgICAgaGZtYWMtPlN0YXRlID0gSEFMX0ZNQUNfU1RBVEVfQlVTWTsKKworICAgIC8qIEdldCB0aWNrICovCisgICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKKworICAgIC8qIFByZWxvYWQgdGhlIGlucHV0IGJ1ZmZlciBpZiByZXF1aXJlZCAqLworICAgIGlmICgocElucHV0ICE9IE5VTEwpICYmIChJbnB1dFNpemUgIT0gMFUpKQorICAgIHsKKyAgICAgIC8qIFdyaXRlIG51bWJlciBvZiB2YWx1ZXMgdG8gYmUgbG9hZGVkLCB0aGUgZGF0YSBsb2FkIGZ1bmN0aW9uIGFuZCBzdGFydCB0aGUgb3BlcmF0aW9uICovCisgICAgICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5QQVJBTSwgXAorICAgICAgICAgICAgICAgICgoKHVpbnQzMl90KUlucHV0U2l6ZSA8PCBGTUFDX1BBUkFNX1BfUG9zKSB8IEZNQUNfRlVOQ19MT0FEX1gxIHwgRk1BQ19QQVJBTV9TVEFSVCkpOworCisgICAgICBpZiAoUHJlbG9hZEFjY2VzcyA9PSBQUkVMT0FEX0FDQ0VTU19QT0xMSU5HKQorICAgICAgeworICAgICAgICAvKiBMb2FkIHRoZSBidWZmZXIgaW50byB0aGUgaW50ZXJuYWwgbWVtb3J5ICovCisgICAgICAgIEZNQUNfV3JpdGVQcmVsb2FkRGF0YUluY3JlbWVudFB0cihoZm1hYywgJnBJbnB1dCwgSW5wdXRTaXplKTsKKworICAgICAgICAvKiBXYWl0IGZvciB0aGUgZW5kIG9mIHRoZSB3cml0aW5nICovCisgICAgICAgIGlmIChGTUFDX1dhaXRPblN0YXJ0VW50aWxUaW1lb3V0KGhmbWFjLCB0aWNrc3RhcnQsIEhBTF9GTUFDX1RJTUVPVVRfVkFMVUUpICE9IEhBTF9PSykKKyAgICAgICAgeworICAgICAgICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1RJTUVPVVQ7CisgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGhmbWFjLT5wSW5wdXQgPSBwT3V0cHV0OworICAgICAgICBoZm1hYy0+SW5wdXRDdXJyZW50U2l6ZSA9IE91dHB1dFNpemU7CisKKyAgICAgICAgLyogU2V0IHRoZSBGTUFDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICAgICAgICBoZm1hYy0+aGRtYVByZWxvYWQtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICAgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVyQ3BsdENhbGxiYWNrID0gRk1BQ19ETUFGaWx0ZXJQcmVsb2FkOworICAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLworICAgICAgICBoZm1hYy0+aGRtYVByZWxvYWQtPlhmZXJFcnJvckNhbGxiYWNrID0gRk1BQ19ETUFFcnJvcjsKKworICAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gbWFuYWdpbmcgRk1BQyBwcmVsb2FkIGRhdGEgd3JpdGUgKi8KKyAgICAgICAgcmV0dXJuIChIQUxfRE1BX1N0YXJ0X0lUKGhmbWFjLT5oZG1hUHJlbG9hZCwgKHVpbnQzMl90KXBJbnB1dCwgKHVpbnQzMl90KSZoZm1hYy0+SW5zdGFuY2UtPldEQVRBLCBJbnB1dFNpemUpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBQcmVsb2FkIHRoZSBvdXRwdXQgYnVmZmVyIGlmIHJlcXVpcmVkICovCisgICAgaWYgKChwT3V0cHV0ICE9IE5VTEwpICYmIChPdXRwdXRTaXplICE9IDBVKSkKKyAgICB7CisgICAgICAvKiBXcml0ZSBudW1iZXIgb2YgdmFsdWVzIHRvIGJlIGxvYWRlZCwgdGhlIGRhdGEgbG9hZCBmdW5jdGlvbiBhbmQgc3RhcnQgdGhlIG9wZXJhdGlvbiAqLworICAgICAgV1JJVEVfUkVHKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIFwKKyAgICAgICAgICAgICAgICAoKCh1aW50MzJfdClPdXRwdXRTaXplIDw8IEZNQUNfUEFSQU1fUF9Qb3MpIHwgRk1BQ19GVU5DX0xPQURfWSB8IEZNQUNfUEFSQU1fU1RBUlQpKTsKKworICAgICAgaWYgKFByZWxvYWRBY2Nlc3MgPT0gUFJFTE9BRF9BQ0NFU1NfUE9MTElORykKKyAgICAgIHsKKyAgICAgICAgLyogTG9hZCB0aGUgYnVmZmVyIGludG8gdGhlIGludGVybmFsIG1lbW9yeSAqLworICAgICAgICBGTUFDX1dyaXRlUHJlbG9hZERhdGFJbmNyZW1lbnRQdHIoaGZtYWMsICZwT3V0cHV0LCBPdXRwdXRTaXplKTsKKworICAgICAgICAvKiBXYWl0IGZvciB0aGUgZW5kIG9mIHRoZSB3cml0aW5nICovCisgICAgICAgIGlmIChGTUFDX1dhaXRPblN0YXJ0VW50aWxUaW1lb3V0KGhmbWFjLCB0aWNrc3RhcnQsIEhBTF9GTUFDX1RJTUVPVVRfVkFMVUUpICE9IEhBTF9PSykKKyAgICAgICAgeworICAgICAgICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1RJTUVPVVQ7CisgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGhmbWFjLT5wSW5wdXQgPSBOVUxMOworICAgICAgICBoZm1hYy0+SW5wdXRDdXJyZW50U2l6ZSA9IDBVOworCisgICAgICAgIC8qIFNldCB0aGUgRk1BQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICAgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IE5VTEw7CisgICAgICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckNwbHRDYWxsYmFjayA9IEZNQUNfRE1BRmlsdGVyUHJlbG9hZDsKKyAgICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICAgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVyRXJyb3JDYWxsYmFjayA9IEZNQUNfRE1BRXJyb3I7CisKKyAgICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtIG1hbmFnaW5nIEZNQUMgcHJlbG9hZCBkYXRhIHdyaXRlICovCisgICAgICAgIHJldHVybiAoSEFMX0RNQV9TdGFydF9JVChoZm1hYy0+aGRtYVByZWxvYWQsICh1aW50MzJfdClwT3V0cHV0LCAodWludDMyX3QpJmhmbWFjLT5JbnN0YW5jZS0+V0RBVEEsIE91dHB1dFNpemUpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBVcGRhdGUgdGhlIGVycm9yIGNvZGVzICovCisgICAgaWYgKF9fSEFMX0ZNQUNfR0VUX0ZMQUcoaGZtYWMsIEZNQUNfRkxBR19PVkZMKSkKKyAgICB7CisgICAgICBoZm1hYy0+RXJyb3JDb2RlIHw9IEhBTF9GTUFDX0VSUk9SX09WRkw7CisgICAgfQorICAgIGlmIChfX0hBTF9GTUFDX0dFVF9GTEFHKGhmbWFjLCBGTUFDX0ZMQUdfVU5GTCkpCisgICAgeworICAgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9VTkZMOworICAgIH0KKworICAgIC8qIENoYW5nZSB0aGUgRk1BQyBzdGF0ZSAqLworICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFQURZOworCisgICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLworICAgIGlmIChoZm1hYy0+RXJyb3JDb2RlID09IEhBTF9GTUFDX0VSUk9SX05PTkUpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KK30KKworLyoqCisgICogQGJyaWVmICBXcml0ZSBkYXRhIGludG8gRk1BQyBpbnRlcm5hbCBtZW1vcnkgdGhyb3VnaCBXREFUQSBhbmQgaW5jcmVtZW50IGlucHV0IGJ1ZmZlciBwb2ludGVyLgorICAqICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgd2l0aCBwcmVsb2FkIGZ1bmN0aW9ucy4KKyAgKiBAcGFyYW0gIGhmbWFjIHBvaW50ZXIgdG8gYSBGTUFDX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBGTUFDIG1vZHVsZS4KKyAgKiBAcGFyYW0gIHBwRGF0YSBwb2ludGVyIHRvIHBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyLgorICAqIEBwYXJhbSAgU2l6ZSBzaXplIG9mIHRoZSBkYXRhIGJ1ZmZlci4KKyAgKiBAcmV0dmFsIG5vbmUKKyAgKi8KK3N0YXRpYyB2b2lkIEZNQUNfV3JpdGVQcmVsb2FkRGF0YUluY3JlbWVudFB0cihGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCBpbnQxNl90ICoqcHBEYXRhLCB1aW50OF90IFNpemUpCit7CisgIHVpbnQ4X3QgaW5kZXg7CisKKyAgLyogTG9hZCB0aGUgYnVmZmVyIGludG8gdGhlIGludGVybmFsIG1lbW9yeSAqLworICBmb3IgKGluZGV4ID0gU2l6ZTsgaW5kZXggPiAwVTsgaW5kZXgtLSkKKyAgeworICAgIFdSSVRFX1JFRyhoZm1hYy0+SW5zdGFuY2UtPldEQVRBLCAoKCh1aW50MzJfdCkoKigqcHBEYXRhKSkpICYgRk1BQ19XREFUQV9XREFUQSkpOworICAgICgqcHBEYXRhKSsrOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgSGFuZGxlIEZNQUMgRnVuY3Rpb24gVGltZW91dC4KKyAgKiBAcGFyYW0gIGhmbWFjIEZNQUMgaGFuZGxlLgorICAqIEBwYXJhbSAgVGlja3N0YXJ0IFRpY2sgc3RhcnQgdmFsdWUuCisgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24uCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1BQ19XYWl0T25TdGFydFVudGlsVGltZW91dChGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCB1aW50MzJfdCBUaWNrc3RhcnQsIHVpbnQzMl90IFRpbWVvdXQpCit7CisgIC8qIFdhaXQgdW50aWwgZmxhZyBjaGFuZ2VzICovCisgIHdoaWxlIChSRUFEX0JJVChoZm1hYy0+SW5zdGFuY2UtPlBBUkFNLCBGTUFDX1BBUkFNX1NUQVJUKSAhPSAwVUwpCisgIHsKKyAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSBUaWNrc3RhcnQpID4gVGltZW91dCkKKyAgICB7CisgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICBfX0hBTF9VTkxPQ0soaGZtYWMpOworCisgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgfQorICB9CisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmVnaXN0ZXIgdGhlIG5ldyBpbnB1dCBidWZmZXIsIHVwZGF0ZSBETUEgY29uZmlndXJhdGlvbgorICAqICAgICAgICAgaWYgbmVlZGVkIGFuZCBjaGFuZ2UgdGhlIEZNQUMgc3RhdGUuCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCisgICogQHBhcmFtICBwSW5wdXQgTmV3IGlucHV0IHZlY3RvciAoYWRkaXRpb25hbCBpbnB1dCBkYXRhKS4KKyAgKiBAcGFyYW0gIHBJbnB1dFNpemUgU2l6ZSBvZiB0aGUgaW5wdXQgdmVjdG9yIChpZiBhbGwgdGhlIGRhdGEgY2FuJ3QgYmUKKyAgKiAgICAgICAgIHdyaXR0ZW4sIGl0IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgZGF0YSByZWFkIGZyb20gRk1BQykuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgRk1BQ19BcHBlbmRGaWx0ZXJEYXRhVXBkYXRlU3RhdGUoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgaW50MTZfdCAqcElucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpwSW5wdXRTaXplKQoreworICAvKiBDaGFuZ2UgdGhlIEZNQUMgc3RhdGUgKi8KKyAgaGZtYWMtPldyU3RhdGUgPSBIQUxfRk1BQ19TVEFURV9CVVNZX1dSOworCisgIC8qIFJlc2V0IHRoZSBjdXJyZW50IHNpemUgKi8KKyAgaGZtYWMtPklucHV0Q3VycmVudFNpemUgPSAwVTsKKworICAvKiBIYW5kbGUgdGhlIHBvaW50ZXIgZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBhY2Nlc3MgKi8KKyAgaWYgKGhmbWFjLT5JbnB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BKQorICB7CisgICAgaGZtYWMtPnBJbnB1dCA9IE5VTEw7CisgICAgaGZtYWMtPnBJbnB1dFNpemUgPSBOVUxMOworCisgICAgLyogU2V0IHRoZSBGTUFDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICAgIGhmbWFjLT5oZG1hSW4tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gRk1BQ19ETUFIYWxmR2V0RGF0YTsKKyAgICBoZm1hYy0+aGRtYUluLT5YZmVyQ3BsdENhbGxiYWNrID0gRk1BQ19ETUFHZXREYXRhOworICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgaGZtYWMtPmhkbWFJbi0+WGZlckVycm9yQ2FsbGJhY2sgPSBGTUFDX0RNQUVycm9yOworCisgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtIG1hbmFnaW5nIEZNQUMgaW5wdXQgZGF0YSB3cml0ZSAqLworICAgIHJldHVybiAoSEFMX0RNQV9TdGFydF9JVChoZm1hYy0+aGRtYUluLCAodWludDMyX3QpcElucHV0LCAodWludDMyX3QpJmhmbWFjLT5JbnN0YW5jZS0+V0RBVEEsICpwSW5wdXRTaXplKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgLyogVXBkYXRlIHRoZSBpbnB1dCBkYXRhIGluZm9ybWF0aW9uIChwb2xsaW5nLCBJVCkgKi8KKyAgICBoZm1hYy0+cElucHV0ID0gcElucHV0OworICAgIGhmbWFjLT5wSW5wdXRTaXplID0gcElucHV0U2l6ZTsKKyAgfQorCisgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgcmV0dXJuIEhBTF9PSzsKK30KKworLyoqCisgICogQGJyaWVmICBSZWdpc3RlciB0aGUgbmV3IG91dHB1dCBidWZmZXIsIHVwZGF0ZSBETUEgY29uZmlndXJhdGlvbgorICAqICAgICAgICAgaWYgbmVlZGVkIGFuZCBjaGFuZ2UgdGhlIEZNQUMgc3RhdGUuCisgICogQHBhcmFtICBoZm1hYyBwb2ludGVyIHRvIGEgRk1BQ19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgRk1BQyBtb2R1bGUuCisgICogQHBhcmFtICBwT3V0cHV0IE5ldyBvdXRwdXQgdmVjdG9yLgorICAqIEBwYXJhbSAgcE91dHB1dFNpemUgU2l6ZSBvZiB0aGUgb3V0cHV0IHZlY3RvciAoaWYgdGhlIHZlY3RvciBjYW4ndAorICAqICAgICAgICAgYmUgZW50aXJlbHkgZmlsbGVkLCBwT3V0cHV0U2l6ZSB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVyCisgICogICAgICAgICBvZiBkYXRhIHJlYWQgZnJvbSBGTUFDKS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBGTUFDX0NvbmZpZ0ZpbHRlck91dHB1dEJ1ZmZlclVwZGF0ZVN0YXRlKEZNQUNfSGFuZGxlVHlwZURlZiAqaGZtYWMsIGludDE2X3QgKnBPdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqcE91dHB1dFNpemUpCit7CisgIC8qIFJlc2V0IHRoZSBjdXJyZW50IHNpemUgKi8KKyAgaGZtYWMtPk91dHB1dEN1cnJlbnRTaXplID0gMFU7CisKKyAgLyogQ2hlY2sgd2hldGhlciBhIHZhbGlkIHBvaW50ZXIgd2FzIHByb3ZpZGVkICovCisgIGlmICgocE91dHB1dCA9PSBOVUxMKSB8fCAocE91dHB1dFNpemUgPT0gTlVMTCkgfHwgKCpwT3V0cHV0U2l6ZSA9PSAwVUwpKQorICB7CisgICAgLyogVGhlIHVzZXIgd2lsbCBoYXZlIHRvIHByb3ZpZGUgYSB2YWxpZCBjb25maWd1cmF0aW9uIGxhdGVyICovCisgICAgaGZtYWMtPnBPdXRwdXQgPSBOVUxMOworICAgIGhmbWFjLT5wT3V0cHV0U2l6ZSA9IE5VTEw7CisgICAgaGZtYWMtPlJkU3RhdGUgPSBIQUxfRk1BQ19TVEFURV9SRUFEWTsKKyAgfQorICAvKiBIYW5kbGUgdGhlIHBvaW50ZXIgZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBhY2Nlc3MgKi8KKyAgZWxzZSBpZiAoaGZtYWMtPk91dHB1dEFjY2VzcyA9PSBGTUFDX0JVRkZFUl9BQ0NFU1NfRE1BKQorICB7CisgICAgaGZtYWMtPnBPdXRwdXQgPSBOVUxMOworICAgIGhmbWFjLT5wT3V0cHV0U2l6ZSA9IE5VTEw7CisgICAgaGZtYWMtPlJkU3RhdGUgPSBIQUxfRk1BQ19TVEFURV9CVVNZX1JEOworCisgICAgLyogU2V0IHRoZSBGTUFDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICAgIGhmbWFjLT5oZG1hT3V0LT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IEZNQUNfRE1BSGFsZk91dHB1dERhdGFSZWFkeTsKKyAgICBoZm1hYy0+aGRtYU91dC0+WGZlckNwbHRDYWxsYmFjayA9IEZNQUNfRE1BT3V0cHV0RGF0YVJlYWR5OworICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgaGZtYWMtPmhkbWFPdXQtPlhmZXJFcnJvckNhbGxiYWNrID0gRk1BQ19ETUFFcnJvcjsKKworICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSBtYW5hZ2luZyBGTUFDIG91dHB1dCBkYXRhIHJlYWQgKi8KKyAgICByZXR1cm4gKEhBTF9ETUFfU3RhcnRfSVQoaGZtYWMtPmhkbWFPdXQsICh1aW50MzJfdCkmaGZtYWMtPkluc3RhbmNlLT5SREFUQSwgKHVpbnQzMl90KXBPdXRwdXQsICpwT3V0cHV0U2l6ZSkpOworICB9CisgIGVsc2UgaWYgKGhmbWFjLT5PdXRwdXRBY2Nlc3MgPT0gRk1BQ19CVUZGRVJfQUNDRVNTX05PTkUpCisgIHsKKyAgICBoZm1hYy0+cE91dHB1dCA9IE5VTEw7CisgICAgaGZtYWMtPnBPdXRwdXRTaXplID0gTlVMTDsKKyAgICBoZm1hYy0+UmRTdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFQURZOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIFVwZGF0ZSB0aGUgb3V0cHV0IGRhdGEgaW5mb3JtYXRpb24gKHBvbGxpbmcsIElUKSAqLworICAgIGhmbWFjLT5wT3V0cHV0ID0gcE91dHB1dDsKKyAgICBoZm1hYy0+cE91dHB1dFNpemUgPSBwT3V0cHV0U2l6ZTsKKyAgICBoZm1hYy0+UmRTdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX0JVU1lfUkQ7CisgIH0KKworICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCisgIHJldHVybiBIQUxfT0s7Cit9CisKKy8qKgorICAqIEBicmllZiAgUmVhZCBhdmFpbGFibGUgb3V0cHV0IGRhdGEgdW50aWwgWSBFTVBUWSBpcyBzZXQuCisgICogQHBhcmFtICBoZm1hYyBGTUFDIGhhbmRsZS4KKyAgKiBAcGFyYW0gIE1heFNpemVUb1JlYWQgTWF4aW11bSBudW1iZXIgb2YgZGF0YSB0byByZWFkICh0aGlzIHNlcnZlcyBhcyBhIHRpbWVvdXQKKyAgKiAgICAgICAgIGlmIEZNQUMgY29udGludW91c2x5IHdyaXRlcyBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyKS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK3N0YXRpYyB2b2lkIEZNQUNfUmVhZERhdGFJbmNyZW1lbnRQdHIoRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYywgdWludDE2X3QgTWF4U2l6ZVRvUmVhZCkKK3sKKyAgdWludDE2X3QgbWF4c2l6ZTsKKyAgdWludDE2X3QgdGhyZXNob2xkOworICB1aW50MzJfdCB0bXB2YWx1ZTsKKworICAvKiBDaGVjayBpZiB0aGVyZSBpcyBkYXRhIHRvIHJlYWQgKi8KKyAgaWYgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+U1IsIEZNQUNfU1JfWUVNUFRZKSAhPSAwVUwpCisgIHsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBHZXQgdGhlIG1heGltdW0gaW5kZXggKG5vIHdhaXQgYWxsb3dlZCwgbm8gb3ZlcnN0ZXBwaW5nIG9mIHRoZSBvdXRwdXQgYnVmZmVyKSAqLworICBpZiAoKGhmbWFjLT5PdXRwdXRDdXJyZW50U2l6ZSArIE1heFNpemVUb1JlYWQpID4gKihoZm1hYy0+cE91dHB1dFNpemUpKQorICB7CisgICAgbWF4c2l6ZSA9ICooaGZtYWMtPnBPdXRwdXRTaXplKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBtYXhzaXplID0gaGZtYWMtPk91dHB1dEN1cnJlbnRTaXplICsgTWF4U2l6ZVRvUmVhZDsKKyAgfQorCisgIC8qIFJlYWQgdW50aWwgdGhlcmUgaXMgbm8gbW9yZSByb29tIG9yIG5vIG1vcmUgZGF0YSAqLworICBkbworICB7CisgICAgLyogSWYgdGhlcmUgaXMgbm8gbW9yZSByb29tLCByZXR1cm4gKi8KKyAgICBpZiAoIShoZm1hYy0+T3V0cHV0Q3VycmVudFNpemUgPCBtYXhzaXplKSkKKyAgICB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogUmVhZCB0aGUgYXZhaWxhYmxlIGRhdGEgKi8KKyAgICB0bXB2YWx1ZSA9ICgoUkVBRF9SRUcoaGZtYWMtPkluc3RhbmNlLT5SREFUQSkpJiBGTUFDX1JEQVRBX1JEQVRBKTsKKyAgICAqKGhmbWFjLT5wT3V0cHV0KSA9IChpbnQxNl90KXRtcHZhbHVlOworICAgIGhmbWFjLT5wT3V0cHV0Kys7CisgICAgaGZtYWMtPk91dHB1dEN1cnJlbnRTaXplKys7CisgIH0gd2hpbGUgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+U1IsIEZNQUNfU1JfWUVNUFRZKSA9PSAwVUwpOworCisgIC8qIFkgYnVmZmVyIGVtcHR5IGZsYWcgaGFzIGp1c3QgYmUgcmFpc2VkLCByZWFkIHRoZSB0aHJlc2hvbGQgKi8KKyAgdGhyZXNob2xkID0gKHVpbnQxNl90KUZNQUNfR0VUX1RIUkVTSE9MRF9GUk9NX1dNKEZNQUNfR0VUX1lfRU1QVFlfV00oaGZtYWMpKSAtIDFVOworCisgIC8qIFVwZGF0ZSB0aGUgbWF4aW11bSBzaXplIGlmIG5lZWRlZCAobGltaXRlZCBkYXRhIGF2YWlsYWJsZSkgKi8KKyAgaWYgKChoZm1hYy0+T3V0cHV0Q3VycmVudFNpemUgKyB0aHJlc2hvbGQpIDwgbWF4c2l6ZSkKKyAgeworICAgIG1heHNpemUgPSBoZm1hYy0+T3V0cHV0Q3VycmVudFNpemUgKyB0aHJlc2hvbGQ7CisgIH0KKworICAvKiBSZWFkIHRoZSBhdmFpbGFibGUgZGF0YSAqLworICB3aGlsZSAoaGZtYWMtPk91dHB1dEN1cnJlbnRTaXplIDwgbWF4c2l6ZSkKKyAgeworICAgIHRtcHZhbHVlID0gKChSRUFEX1JFRyhoZm1hYy0+SW5zdGFuY2UtPlJEQVRBKSkmIEZNQUNfUkRBVEFfUkRBVEEpOworICAgICooaGZtYWMtPnBPdXRwdXQpID0gKGludDE2X3QpdG1wdmFsdWU7CisgICAgaGZtYWMtPnBPdXRwdXQrKzsKKyAgICBoZm1hYy0+T3V0cHV0Q3VycmVudFNpemUrKzsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIFdyaXRlIGF2YWlsYWJsZSBpbnB1dCBkYXRhIHVudGlsIFgxIEZVTEwgaXMgc2V0LgorICAqIEBwYXJhbSAgaGZtYWMgRk1BQyBoYW5kbGUuCisgICogQHBhcmFtICBNYXhTaXplVG9Xcml0ZSBNYXhpbXVtIG51bWJlciBvZiBkYXRhIHRvIHdyaXRlICh0aGlzIHNlcnZlcyBhcyBhIHRpbWVvdXQKKyAgKiAgICAgICAgIGlmIEZNQUMgY29udGludW91c2x5IGVtcHRpZXMgdGhlIGlucHV0IGJ1ZmZlcikuCisgICogQHJldHZhbCBIQUwgc3RhdHVzCisgICovCitzdGF0aWMgdm9pZCBGTUFDX1dyaXRlRGF0YUluY3JlbWVudFB0cihGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjLCB1aW50MTZfdCBNYXhTaXplVG9Xcml0ZSkKK3sKKyAgdWludDE2X3QgbWF4c2l6ZTsKKyAgdWludDE2X3QgdGhyZXNob2xkOworCisgIC8qIENoZWNrIGlmIHRoZXJlIGlzIHJvb20gaW4gRk1BQyAqLworICBpZiAoUkVBRF9CSVQoaGZtYWMtPkluc3RhbmNlLT5TUiwgRk1BQ19TUl9YMUZVTEwpICE9IDBVTCkKKyAgeworICAgIHJldHVybjsKKyAgfQorCisgIC8qIEdldCB0aGUgbWF4aW11bSBpbmRleCAobm8gd2FpdCBhbGxvd2VkLCBubyBvdmVyc3RlcHBpbmcgb2YgdGhlIG91dHB1dCBidWZmZXIpICovCisgIGlmICgoaGZtYWMtPklucHV0Q3VycmVudFNpemUgKyBNYXhTaXplVG9Xcml0ZSkgPiAqKGhmbWFjLT5wSW5wdXRTaXplKSkKKyAgeworICAgIG1heHNpemUgPSAqKGhmbWFjLT5wSW5wdXRTaXplKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBtYXhzaXplID0gaGZtYWMtPklucHV0Q3VycmVudFNpemUgKyBNYXhTaXplVG9Xcml0ZTsKKyAgfQorCisgIC8qIFdyaXRlIHVudGlsIHRoZXJlIGlzIG5vIG1vcmUgcm9vbSBvciBubyBtb3JlIGRhdGEgKi8KKyAgZG8KKyAgeworICAgIC8qIElmIHRoZXJlIGlzIG5vIG1vcmUgcm9vbSwgcmV0dXJuICovCisgICAgaWYgKCEoaGZtYWMtPklucHV0Q3VycmVudFNpemUgPCBtYXhzaXplKSkKKyAgICB7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogV3JpdGUgdGhlIGF2YWlsYWJsZSBkYXRhICovCisgICAgV1JJVEVfUkVHKGhmbWFjLT5JbnN0YW5jZS0+V0RBVEEsICgoKHVpbnQzMl90KSgqKGhmbWFjLT5wSW5wdXQpKSkgJiBGTUFDX1dEQVRBX1dEQVRBKSk7CisgICAgaGZtYWMtPnBJbnB1dCsrOworICAgIGhmbWFjLT5JbnB1dEN1cnJlbnRTaXplKys7CisgIH0gd2hpbGUgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+U1IsIEZNQUNfU1JfWDFGVUxMKSA9PSAwVUwpOworCisgIC8qIFgxIGJ1ZmZlciBmdWxsIGZsYWcgaGFzIGp1c3QgYmUgcmFpc2VkLCByZWFkIHRoZSB0aHJlc2hvbGQgKi8KKyAgdGhyZXNob2xkID0gKHVpbnQxNl90KUZNQUNfR0VUX1RIUkVTSE9MRF9GUk9NX1dNKEZNQUNfR0VUX1gxX0ZVTExfV00oaGZtYWMpKSAtIDFVOworCisgIC8qIFVwZGF0ZSB0aGUgbWF4aW11bSBzaXplIGlmIG5lZWRlZCAobGltaXRlZCBkYXRhIGF2YWlsYWJsZSkgKi8KKyAgaWYgKChoZm1hYy0+SW5wdXRDdXJyZW50U2l6ZSArIHRocmVzaG9sZCkgPCBtYXhzaXplKQorICB7CisgICAgbWF4c2l6ZSA9IGhmbWFjLT5JbnB1dEN1cnJlbnRTaXplICsgdGhyZXNob2xkOworICB9CisKKyAgLyogV3JpdGUgdGhlIGF2YWlsYWJsZSBkYXRhICovCisgIHdoaWxlIChoZm1hYy0+SW5wdXRDdXJyZW50U2l6ZSA8IG1heHNpemUpCisgIHsKKyAgICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5XREFUQSwgKCgodWludDMyX3QpKCooaGZtYWMtPnBJbnB1dCkpKSAmIEZNQUNfV0RBVEFfV0RBVEEpKTsKKyAgICBoZm1hYy0+cElucHV0Kys7CisgICAgaGZtYWMtPklucHV0Q3VycmVudFNpemUrKzsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIERNQSBGTUFDIElucHV0IERhdGEgcHJvY2VzcyBoYWxmIGNvbXBsZXRlIGNhbGxiYWNrLgorICAqIEBwYXJhbSAgaGRtYSBETUEgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgRk1BQ19ETUFIYWxmR2V0RGF0YShETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKK3sKKyAgRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyA9IChGTUFDX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKworICAvKiBDYWxsIGhhbGYgZ2V0IGRhdGEgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICBoZm1hYy0+SGFsZkdldERhdGFDYWxsYmFjayhoZm1hYyk7CisjZWxzZQorICBIQUxfRk1BQ19IYWxmR2V0RGF0YUNhbGxiYWNrKGhmbWFjKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCit9CisKKy8qKgorICAqIEBicmllZiAgRE1BIEZNQUMgSW5wdXQgRGF0YSBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrLgorICAqIEBwYXJhbSAgaGRtYSBETUEgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgRk1BQ19ETUFHZXREYXRhKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjID0gKEZNQUNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OworCisgIC8qIFJlc2V0IHRoZSBwb2ludGVycyB0byBpbmRpY2F0ZSBuZXcgZGF0YSB3aWxsIGJlIG5lZWRlZCAqLworICBGTUFDX1Jlc2V0SW5wdXRTdGF0ZUFuZERhdGFQb2ludGVycyhoZm1hYyk7CisKKyAgLyogQ2FsbCBnZXQgZGF0YSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgIGhmbWFjLT5HZXREYXRhQ2FsbGJhY2soaGZtYWMpOworI2Vsc2UKKyAgSEFMX0ZNQUNfR2V0RGF0YUNhbGxiYWNrKGhmbWFjKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCit9CisKKy8qKgorICAqIEBicmllZiAgRE1BIEZNQUMgT3V0cHV0IERhdGEgcHJvY2VzcyBoYWxmIGNvbXBsZXRlIGNhbGxiYWNrLgorICAqIEBwYXJhbSAgaGRtYSBETUEgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgRk1BQ19ETUFIYWxmT3V0cHV0RGF0YVJlYWR5KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjID0gKEZNQUNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OworCisgIC8qIENhbGwgaGFsZiBvdXRwdXQgZGF0YSByZWFkeSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgIGhmbWFjLT5IYWxmT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2soaGZtYWMpOworI2Vsc2UKKyAgSEFMX0ZNQUNfSGFsZk91dHB1dERhdGFSZWFkeUNhbGxiYWNrKGhmbWFjKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCit9CisKKy8qKgorICAqIEBicmllZiAgRE1BIEZNQUMgT3V0cHV0IERhdGEgcHJvY2VzcyBjb21wbGV0ZSBjYWxsYmFjay4KKyAgKiBAcGFyYW0gIGhkbWEgRE1BIGhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3N0YXRpYyB2b2lkIEZNQUNfRE1BT3V0cHV0RGF0YVJlYWR5KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjID0gKEZNQUNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OworCisgIC8qIFJlc2V0IHRoZSBwb2ludGVycyB0byBpbmRpY2F0ZSBuZXcgZGF0YSB3aWxsIGJlIG5lZWRlZCAqLworICBGTUFDX1Jlc2V0T3V0cHV0U3RhdGVBbmREYXRhUG9pbnRlcnMoaGZtYWMpOworCisgIC8qIENhbGwgb3V0cHV0IGRhdGEgcmVhZHkgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICBoZm1hYy0+T3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2soaGZtYWMpOworI2Vsc2UKKyAgSEFMX0ZNQUNfT3V0cHV0RGF0YVJlYWR5Q2FsbGJhY2soaGZtYWMpOworI2VuZGlmIC8qIFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KK30KKworLyoqCisgICogQGJyaWVmICBETUEgRk1BQyBGaWx0ZXIgQ29uZmlndXJhdGlvbiBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrLgorICAqIEBwYXJhbSAgaGRtYSBETUEgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgRk1BQ19ETUFGaWx0ZXJDb25maWcoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCit7CisgIHVpbnQ4X3QgaW5kZXg7CisKKyAgRk1BQ19IYW5kbGVUeXBlRGVmICpoZm1hYyA9IChGTUFDX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKKworICAvKiBJZiBuZWVkZWQsIHdyaXRlIENvZWZmQSBhbmQgZXhpdCAqLworICBpZiAoaGZtYWMtPnBJbnB1dCAhPSBOVUxMKQorICB7CisgICAgLyogU2V0IHRoZSBGTUFDIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBOVUxMOworICAgIGhmbWFjLT5oZG1hUHJlbG9hZC0+WGZlckNwbHRDYWxsYmFjayA9IEZNQUNfRE1BRmlsdGVyQ29uZmlnOworICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCisgICAgaGZtYWMtPmhkbWFQcmVsb2FkLT5YZmVyRXJyb3JDYWxsYmFjayA9IEZNQUNfRE1BRXJyb3I7CisKKyAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gbWFuYWdpbmcgRk1BQyBwcmVsb2FkIGRhdGEgd3JpdGUgKi8KKyAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChoZm1hYy0+aGRtYVByZWxvYWQsICh1aW50MzJfdCloZm1hYy0+cElucHV0LCAodWludDMyX3QpJmhmbWFjLT5JbnN0YW5jZS0+V0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgaGZtYWMtPklucHV0Q3VycmVudFNpemUpID09IEhBTF9PSykKKyAgICB7CisgICAgICBoZm1hYy0+cElucHV0ID0gTlVMTDsKKyAgICAgIGhmbWFjLT5JbnB1dEN1cnJlbnRTaXplID0gMFU7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogSWYgbm90IGV4aXRlZCwgdGhlcmUgd2FzIGFuIGVycm9yOiBzZXQgRk1BQyBoYW5kbGUgc3RhdGUgdG8gZXJyb3IgKi8KKyAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9FUlJPUjsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBXYWl0IGZvciB0aGUgZW5kIG9mIHRoZSB3cml0aW5nICovCisgICAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IDB4RkZVOyBpbmRleCsrKQorICAgIHsKKyAgICAgIGlmIChSRUFEX0JJVChoZm1hYy0+SW5zdGFuY2UtPlBBUkFNLCBGTUFDX1BBUkFNX1NUQVJUKSA9PSAwVSkKKyAgICAgIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgLyogSWYgJ1NUQVJUJyBpcyBzdGlsbCBzZXQsIHRoZXJlIHdhcyBhbiBlcnJvcjogc2V0IEZNQUMgaGFuZGxlIHN0YXRlIHRvIGVycm9yICovCisgICAgaWYgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIEZNQUNfUEFSQU1fU1RBUlQpICE9IDBVTCkKKyAgICB7CisgICAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9USU1FT1VUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogQ2hhbmdlIHRoZSBGTUFDIHN0YXRlICovCisgICAgICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9SRUFEWTsKKworICAgICAgLyogQ2FsbCBvdXRwdXQgZGF0YSByZWFkeSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgICBoZm1hYy0+RmlsdGVyQ29uZmlnQ2FsbGJhY2soaGZtYWMpOworI2Vsc2UKKyAgICAgIEhBTF9GTUFDX0ZpbHRlckNvbmZpZ0NhbGxiYWNrKGhmbWFjKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgICAgICByZXR1cm47CisgICAgfQorICB9CisKKyAgLyogSWYgbm90IGV4aXRlZCwgdGhlcmUgd2FzIGFuIGVycm9yOiBzZXQgRk1BQyBoYW5kbGUgZXJyb3IgY29kZSB0byBETUEgZXJyb3IgKi8KKyAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9ETUE7CisKKyAgLyogQ2FsbCB1c2VyIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgaGZtYWMtPkVycm9yQ2FsbGJhY2soaGZtYWMpOworI2Vsc2UKKyAgSEFMX0ZNQUNfRXJyb3JDYWxsYmFjayhoZm1hYyk7CisjZW5kaWYgLyogVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCit9CisKKy8qKgorICAqIEBicmllZiAgRE1BIEZNQUMgRmlsdGVyIENvbmZpZ3VyYXRpb24gcHJvY2VzcyBjb21wbGV0ZSBjYWxsYmFjay4KKyAgKiBAcGFyYW0gIGhkbWEgRE1BIGhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3N0YXRpYyB2b2lkIEZNQUNfRE1BRmlsdGVyUHJlbG9hZChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSkKK3sKKyAgdWludDhfdCBpbmRleDsKKworICBGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjID0gKEZNQUNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OworCisgIC8qIFdhaXQgZm9yIHRoZSBlbmQgb2YgdGhlIFgxIHdyaXRpbmcgKi8KKyAgZm9yIChpbmRleCA9IDBVOyBpbmRleCA8IDB4RkZVOyBpbmRleCsrKQorICB7CisgICAgaWYgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIEZNQUNfUEFSQU1fU1RBUlQpID09IDBVTCkKKyAgICB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAvKiBJZiAnU1RBUlQnIGlzIHN0aWxsIHNldCwgdGhlcmUgd2FzIGFuIGVycm9yOiBzZXQgRk1BQyBoYW5kbGUgc3RhdGUgdG8gZXJyb3IgKi8KKyAgaWYgKFJFQURfQklUKGhmbWFjLT5JbnN0YW5jZS0+UEFSQU0sIEZNQUNfUEFSQU1fU1RBUlQpICE9IDBVTCkKKyAgeworICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1RJTUVPVVQ7CisgICAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9USU1FT1VUOworICB9CisgIC8qIElmIG5lZWRlZCwgcHJlbG9hZCBZIGJ1ZmZlciAqLworICBlbHNlIGlmICgoaGZtYWMtPnBJbnB1dCAhPSBOVUxMKSAmJiAoaGZtYWMtPklucHV0Q3VycmVudFNpemUgIT0gMFUpKQorICB7CisgICAgLyogV3JpdGUgbnVtYmVyIG9mIHZhbHVlcyB0byBiZSBsb2FkZWQsIHRoZSBkYXRhIGxvYWQgZnVuY3Rpb24gYW5kIHN0YXJ0IHRoZSBvcGVyYXRpb24gKi8KKyAgICBXUklURV9SRUcoaGZtYWMtPkluc3RhbmNlLT5QQVJBTSwgXAorICAgICAgICAgICAgICAoKCh1aW50MzJfdCkoaGZtYWMtPklucHV0Q3VycmVudFNpemUpIDw8IEZNQUNfUEFSQU1fUF9Qb3MpIHwgRk1BQ19GVU5DX0xPQURfWSB8IEZNQUNfUEFSQU1fU1RBUlQpKTsKKworICAgIC8qIFNldCB0aGUgRk1BQyBETUEgdHJhbnNmZXIgY29tcGxldGUgY2FsbGJhY2sgKi8KKyAgICBoZm1hYy0+aGRtYVByZWxvYWQtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gTlVMTDsKKyAgICBoZm1hYy0+aGRtYVByZWxvYWQtPlhmZXJDcGx0Q2FsbGJhY2sgPSBGTUFDX0RNQUZpbHRlclByZWxvYWQ7CisgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KKyAgICBoZm1hYy0+aGRtYVByZWxvYWQtPlhmZXJFcnJvckNhbGxiYWNrID0gRk1BQ19ETUFFcnJvcjsKKworICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSBtYW5hZ2luZyBGTUFDIHByZWxvYWQgZGF0YSB3cml0ZSAqLworICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGhmbWFjLT5oZG1hUHJlbG9hZCwgKHVpbnQzMl90KWhmbWFjLT5wSW5wdXQsICh1aW50MzJfdCkmaGZtYWMtPkluc3RhbmNlLT5XREFUQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZm1hYy0+SW5wdXRDdXJyZW50U2l6ZSkgPT0gSEFMX09LKQorICAgIHsKKyAgICAgIGhmbWFjLT5wSW5wdXQgPSBOVUxMOworICAgICAgaGZtYWMtPklucHV0Q3VycmVudFNpemUgPSAwVTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBJZiBub3QgZXhpdGVkLCB0aGVyZSB3YXMgYW4gZXJyb3IgKi8KKyAgICBoZm1hYy0+RXJyb3JDb2RlID0gSEFMX0ZNQUNfRVJST1JfRE1BOworICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX0VSUk9SOworICB9CisgIGVsc2UKKyAgeworICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgfQorCisgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KKyAgaWYgKGhmbWFjLT5FcnJvckNvZGUgPT0gSEFMX0ZNQUNfRVJST1JfTk9ORSkKKyAgeworICAgIC8qIENoYW5nZSB0aGUgRk1BQyBzdGF0ZSAqLworICAgIGhmbWFjLT5TdGF0ZSA9IEhBTF9GTUFDX1NUQVRFX1JFQURZOworCisgICAgLyogQ2FsbCBvdXRwdXQgZGF0YSByZWFkeSBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgaGZtYWMtPkZpbHRlclByZWxvYWRDYWxsYmFjayhoZm1hYyk7CisjZWxzZQorICAgIEhBTF9GTUFDX0ZpbHRlclByZWxvYWRDYWxsYmFjayhoZm1hYyk7CisjZW5kaWYgLyogVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICB9CisgIGVsc2UKKyAgeworICAgIC8qIENhbGwgdXNlciBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCisgICAgaGZtYWMtPkVycm9yQ2FsbGJhY2soaGZtYWMpOworI2Vsc2UKKyAgICBIQUxfRk1BQ19FcnJvckNhbGxiYWNrKGhmbWFjKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0ZNQUNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCisgIH0KK30KKworCisvKioKKyAgKiBAYnJpZWYgIERNQSBGTUFDIGNvbW11bmljYXRpb24gZXJyb3IgY2FsbGJhY2suCisgICogQHBhcmFtICBoZG1hIERNQSBoYW5kbGUuCisgICogQHJldHZhbCBOb25lCisgICovCitzdGF0aWMgdm9pZCBGTUFDX0RNQUVycm9yKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBGTUFDX0hhbmRsZVR5cGVEZWYgKmhmbWFjID0gKEZNQUNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OworCisgIC8qIFNldCBGTUFDIGhhbmRsZSBzdGF0ZSB0byBlcnJvciAqLworICBoZm1hYy0+U3RhdGUgPSBIQUxfRk1BQ19TVEFURV9FUlJPUjsKKworICAvKiBTZXQgRk1BQyBoYW5kbGUgZXJyb3IgY29kZSB0byBETUEgZXJyb3IgKi8KKyAgaGZtYWMtPkVycm9yQ29kZSB8PSBIQUxfRk1BQ19FUlJPUl9ETUE7CisKKyAgLyogQ2FsbCB1c2VyIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfRk1BQ19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgaGZtYWMtPkVycm9yQ2FsbGJhY2soaGZtYWMpOworI2Vsc2UKKyAgSEFMX0ZNQUNfRXJyb3JDYWxsYmFjayhoZm1hYyk7CisjZW5kaWYgLyogVVNFX0hBTF9GTUFDX1JFR0lTVEVSX0NBTExCQUNLUyAqLworfQorLyoqCisgICogQH0KKyAgKi8KKworCisvKioKKyAgKiBAfQorICAqLworCisvKioKKyAgKiBAfQorICAqLworCisjZW5kaWYgLyogSEFMX0ZNQUNfTU9EVUxFX0VOQUJMRUQgKi8KKyNlbmRpZiAvKiBGTUFDICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9oY2QuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2hjZC5jCmluZGV4IGE3ZjI5NjguLjQ1ZDgwNjEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX2hjZC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2hjZC5jCkBAIC0xMTcwLDYgKzExNzAsMTMgQEAKICAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9BSEJFUlIpOwogICAgIF9fSEFMX0hDRF9VTk1BU0tfSEFMVF9IQ19JTlQoY2hfbnVtKTsKICAgfQorICBlbHNlIGlmICgoVVNCeF9IQyhjaF9udW0pLT5IQ0lOVCAmIFVTQl9PVEdfSENJTlRfQkJFUlIpID09IFVTQl9PVEdfSENJTlRfQkJFUlIpCisgIHsKKyAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9CQkVSUik7CisgICAgaGhjZC0+aGNbY2hfbnVtXS5zdGF0ZSA9IEhDX0JCTEVSUjsKKyAgICBfX0hBTF9IQ0RfVU5NQVNLX0hBTFRfSENfSU5UKGNoX251bSk7CisgICAgKHZvaWQpVVNCX0hDX0hhbHQoaGhjZC0+SW5zdGFuY2UsICh1aW50OF90KWNoX251bSk7CisgIH0KICAgZWxzZSBpZiAoKFVTQnhfSEMoY2hfbnVtKS0+SENJTlQgJiBVU0JfT1RHX0hDSU5UX0FDSykgPT0gVVNCX09UR19IQ0lOVF9BQ0spCiAgIHsKICAgICBfX0hBTF9IQ0RfQ0xFQVJfSENfSU5UKGNoX251bSwgVVNCX09UR19IQ0lOVF9BQ0spOwpAQCAtMTIzNCw2ICsxMjQxLDcgQEAKICAgICBlbHNlIGlmIChoaGNkLT5oY1tjaF9udW1dLmVwX3R5cGUgPT0gRVBfVFlQRV9JU09DKQogICAgIHsKICAgICAgIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlID0gVVJCX0RPTkU7CisgICAgICBoaGNkLT5oY1tjaF9udW1dLnRvZ2dsZV9pbiBePSAxVTsKIAogI2lmIChVU0VfSEFMX0hDRF9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVUpCiAgICAgICBoaGNkLT5IQ19Ob3RpZnlVUkJDaGFuZ2VDYWxsYmFjayhoaGNkLCAodWludDhfdCljaF9udW0sIGhoY2QtPmhjW2NoX251bV0udXJiX3N0YXRlKTsKQEAgLTEyODksNiArMTI5NywxMSBAQAogICAgICAgdG1wcmVnIHw9IFVTQl9PVEdfSENDSEFSX0NIRU5BOwogICAgICAgVVNCeF9IQyhjaF9udW0pLT5IQ0NIQVIgPSB0bXByZWc7CiAgICAgfQorICAgIGVsc2UgaWYgKGhoY2QtPmhjW2NoX251bV0uc3RhdGUgPT0gSENfQkJMRVJSKQorICAgIHsKKyAgICAgIGhoY2QtPmhjW2NoX251bV0uRXJyQ250Kys7CisgICAgICBoaGNkLT5oY1tjaF9udW1dLnVyYl9zdGF0ZSA9IFVSQl9FUlJPUjsKKyAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgIC8qIC4uLiAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfaHJ0aW0uYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2hydGltLmMKaW5kZXggZmNiOTMxOS4uOTE0OTMwYyAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfaHJ0aW0uYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF9ocnRpbS5jCkBAIC01MTMyLDExICs1MTMyLDExIEBACiAgICogQHBhcmFtICBUaW1lcnMgVGltZXIgY291bnRlcihzKSB0byBzdG9wCiAgICogICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfTUFTVEVSCi0gICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX0EKLSAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfQgotICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9DCi0gICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX0QKLSAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfRQorICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9USU1FUl9BCisgICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX1RJTUVSX0IKKyAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfVElNRVJfQworICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9USU1FUl9ECisgICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX1RJTUVSX0UKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKiBAbm90ZSBUaGUgY291bnRlciBvZiBhIHRpbWVyIGlzIHN0b3BwZWQgb25seSBpZiBhbGwgdGltZXIgb3V0cHV0cyBhcmUgZGlzYWJsZWQKICAgKi8KQEAgLTUxNjksMTEgKzUxNjksMTEgQEAKICAgKiBAcGFyYW0gIFRpbWVycyBUaW1lciBjb3VudGVyKHMpIHRvIHN0YXJ0CiAgICogICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKICAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfTUFTVEVSCi0gICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX0EKLSAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfQgotICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9DCi0gICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX0QKLSAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfRQorICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9USU1FUl9BCisgICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX1RJTUVSX0IKKyAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfVElNRVJfQworICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9USU1FUl9ECisgICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX1RJTUVSX0UKICAgKiBAbm90ZSBIUlRJTSBpbnRlcnJ1cHRzIChlLmcuIGZhdWx0cyBpbnRlcnJ1cHRzKSBhbmQgaW50ZXJydXB0cyByZWxhdGVkCiAgICogICAgICAgdG8gdGhlIHRpbWVycyB0byBzdGFydCBhcmUgZW5hYmxlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbi4KICAgKiAgICAgICBJbnRlcnJ1cHRzIHRvIGVuYWJsZSBhcmUgc2VsZWN0ZWQgdGhyb3VnaCBIQUxfSFJUSU1fV2F2ZWZvcm1UaW1lckNvbmZpZwpAQCAtNTIzMywxMSArNTIzMywxMSBAQAogICAqIEBwYXJhbSAgVGltZXJzIFRpbWVyIGNvdW50ZXIocykgdG8gc3RvcAogICAqICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX01BU1RFUgotICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9BCi0gICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX0IKLSAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfQwotICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9ECi0gICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX0UKKyAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfVElNRVJfQQorICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9USU1FUl9CCisgICogICAgICAgICAgICAgICAgICAgQGFyZyBIUlRJTV9USU1FUklEX1RJTUVSX0MKKyAgKiAgICAgICAgICAgICAgICAgICBAYXJnIEhSVElNX1RJTUVSSURfVElNRVJfRAorICAqICAgICAgICAgICAgICAgICAgIEBhcmcgSFJUSU1fVElNRVJJRF9USU1FUl9FCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICogQG5vdGUgVGhlIGNvdW50ZXIgb2YgYSB0aW1lciBpcyBzdG9wcGVkIG9ubHkgaWYgYWxsIHRpbWVyIG91dHB1dHMgYXJlIGRpc2FibGVkCiAgICogQG5vdGUgQWxsIGVuYWJsZWQgdGltZXIgcmVsYXRlZCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX2hzZW0uYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2hzZW0uYwppbmRleCBiYmE2M2Y2Li43OGFlNDNiIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9oc2VtLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfaHNlbS5jCkBAIC0xMDEsNiArMTAxLDEwIEBACiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpZiBkZWZpbmVkKERVQUxfQ09SRSkKKy8qKiBAZGVmZ3JvdXAgSFNFTV9Qcml2YXRlX0NvbnN0YW50cyAgSFNFTSBQcml2YXRlIENvbnN0YW50cworICAqIEB7CisgICovCisKICNpZm5kZWYgSFNFTV9SX01BU1RFUklECiAjZGVmaW5lIEhTRU1fUl9NQVNURVJJRCBIU0VNX1JfQ09SRUlECiAjZW5kaWYKQEAgLTExMiw2ICsxMTYsMTAgQEAKICNpZm5kZWYgSFNFTV9DUl9NQVNURVJJRAogI2RlZmluZSBIU0VNX0NSX01BU1RFUklEIEhTRU1fQ1JfQ09SRUlECiAjZW5kaWYKKworLyoqCisgICogQH0KKyAgKi8gIAogI2VuZGlmIC8qIERVQUxfQ09SRSAqLwogLyogUHJpdmF0ZSBtYWNybyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9pMmMuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2kyYy5jCmluZGV4IGE5ZTc0MDguLmNlY2RiYjQgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX2kyYy5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2kyYy5jCkBAIC0zMjAzLDcgKzMyMDMsNyBAQAogICAgICAgSTJDX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKGhpMmMpOwogCiAgICAgICAvKiBVcGRhdGUgeGZlcm1vZGUgYWNjb3JkaW5nbHkgaWYgbm8gcmVsb2FkIGlzIG5lY2Vzc2FyeSAqLwotICAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA8IE1BWF9OQllURV9TSVpFKQorICAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA8PSBNQVhfTkJZVEVfU0laRSkKICAgICAgIHsKICAgICAgICAgeGZlcm1vZGUgPSBoaTJjLT5YZmVyT3B0aW9uczsKICAgICAgIH0KQEAgLTMyODgsNyArMzI4OCw3IEBACiAgICAgICBJMkNfQ29udmVydE90aGVyWGZlck9wdGlvbnMoaGkyYyk7CiAKICAgICAgIC8qIFVwZGF0ZSB4ZmVybW9kZSBhY2NvcmRpbmdseSBpZiBubyByZWxvYWQgaXMgbmVjZXNzYXJ5ICovCi0gICAgICBpZiAoaGkyYy0+WGZlckNvdW50IDwgTUFYX05CWVRFX1NJWkUpCisgICAgICBpZiAoaGkyYy0+WGZlckNvdW50IDw9IE1BWF9OQllURV9TSVpFKQogICAgICAgewogICAgICAgICB4ZmVybW9kZSA9IGhpMmMtPlhmZXJPcHRpb25zOwogICAgICAgfQpAQCAtMzQ0OSw3ICszNDQ5LDcgQEAKICAgICAgIEkyQ19Db252ZXJ0T3RoZXJYZmVyT3B0aW9ucyhoaTJjKTsKIAogICAgICAgLyogVXBkYXRlIHhmZXJtb2RlIGFjY29yZGluZ2x5IGlmIG5vIHJlbG9hZCBpcyBuZWNlc3NhcnkgKi8KLSAgICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPCBNQVhfTkJZVEVfU0laRSkKKyAgICAgIGlmIChoaTJjLT5YZmVyQ291bnQgPD0gTUFYX05CWVRFX1NJWkUpCiAgICAgICB7CiAgICAgICAgIHhmZXJtb2RlID0gaGkyYy0+WGZlck9wdGlvbnM7CiAgICAgICB9CkBAIC0zNTM0LDcgKzM1MzQsNyBAQAogICAgICAgSTJDX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKGhpMmMpOwogCiAgICAgICAvKiBVcGRhdGUgeGZlcm1vZGUgYWNjb3JkaW5nbHkgaWYgbm8gcmVsb2FkIGlzIG5lY2Vzc2FyeSAqLwotICAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA8IE1BWF9OQllURV9TSVpFKQorICAgICAgaWYgKGhpMmMtPlhmZXJDb3VudCA8PSBNQVhfTkJZVEVfU0laRSkKICAgICAgIHsKICAgICAgICAgeGZlcm1vZGUgPSBoaTJjLT5YZmVyT3B0aW9uczsKICAgICAgIH0KQEAgLTU0NzcsNyArNTQ3Nyw3IEBACiB7CiAgIHVpbnQzMl90IHRtcGVycm9yOwogICB1aW50MzJfdCB0bXBJVEZsYWdzID0gSVRGbGFnczsKLSAgdWludDMyX3QgdG1wOworICBfX0lPIHVpbnQzMl90IHRtcHJlZzsKIAogICAvKiBDbGVhciBTVE9QIEZsYWcgKi8KICAgX19IQUxfSTJDX0NMRUFSX0ZMQUcoaGkyYywgSTJDX0ZMQUdfU1RPUEYpOwpAQCAtNTUxOCw5ICs1NTE4LDggQEAKICAgaWYgKChoaTJjLT5TdGF0ZSA9PSBIQUxfSTJDX1NUQVRFX0FCT1JUKSAmJiAoSTJDX0NIRUNLX0ZMQUcodG1wSVRGbGFncywgSTJDX0ZMQUdfUlhORSkgIT0gUkVTRVQpKQogICB7CiAgICAgLyogUmVhZCBkYXRhIGZyb20gUlhEUiAqLwotICAgIHRtcCA9ICh1aW50OF90KWhpMmMtPkluc3RhbmNlLT5SWERSOwotCi0gICAgVU5VU0VEKHRtcCk7CisgICAgdG1wcmVnID0gKHVpbnQ4X3QpaGkyYy0+SW5zdGFuY2UtPlJYRFI7CisgICAgVU5VU0VEKHRtcHJlZyk7CiAgIH0KIAogICAvKiBGbHVzaCBUWCByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfaTJjX2V4LmMgYi9TcmMvc3RtMzJoN3h4X2hhbF9pMmNfZXguYwppbmRleCA2ZDhiMjhhLi5mNTY4YzNlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9pMmNfZXguYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF9pMmNfZXguYwpAQCAtMjc2LDYgKzI3Niw4IEBACiAgICogICAgICAgIG9ubHkgYnkgdXNpbmcgSTJDX0ZBU1RNT0RFUExVU19JMkMzIHBhcmFtZXRlci4KICAgKiBAbm90ZSAgRm9yIGFsbCBJMkM0IHBpbnMgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IGNhbiBiZSBlbmFibGVkCiAgICogICAgICAgIG9ubHkgYnkgdXNpbmcgSTJDX0ZBU1RNT0RFUExVU19JMkM0IHBhcmFtZXRlci4KKyAgKiBAbm90ZSAgRm9yIGFsbCBJMkM1IHBpbnMgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IGNhbiBiZSBlbmFibGVkCisgICogICAgICAgIG9ubHkgYnkgdXNpbmcgSTJDX0ZBU1RNT0RFUExVU19JMkM1IHBhcmFtZXRlci4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KIHZvaWQgSEFMX0kyQ0V4X0VuYWJsZUZhc3RNb2RlUGx1cyh1aW50MzJfdCBDb25maWdGYXN0TW9kZVBsdXMpCkBAIC0zMDUsNiArMzA3LDggQEAKICAgKiAgICAgICAgb25seSBieSB1c2luZyBJMkNfRkFTVE1PREVQTFVTX0kyQzMgcGFyYW1ldGVyLgogICAqIEBub3RlICBGb3IgYWxsIEkyQzQgcGlucyBmYXN0IG1vZGUgcGx1cyBkcml2aW5nIGNhcGFiaWxpdHkgY2FuIGJlIGRpc2FibGVkCiAgICogICAgICAgIG9ubHkgYnkgdXNpbmcgSTJDX0ZBU1RNT0RFUExVU19JMkM0IHBhcmFtZXRlci4KKyAgKiBAbm90ZSAgRm9yIGFsbCBJMkM1IHBpbnMgZmFzdCBtb2RlIHBsdXMgZHJpdmluZyBjYXBhYmlsaXR5IGNhbiBiZSBkaXNhYmxlZAorICAqICAgICAgICBvbmx5IGJ5IHVzaW5nIEkyQ19GQVNUTU9ERVBMVVNfSTJDNSBwYXJhbWV0ZXIuCiAgICogQHJldHZhbCBOb25lCiAgICovCiB2b2lkIEhBTF9JMkNFeF9EaXNhYmxlRmFzdE1vZGVQbHVzKHVpbnQzMl90IENvbmZpZ0Zhc3RNb2RlUGx1cykKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX2kycy5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfaTJzLmMKaW5kZXggODY0ZWE0Yi4uZmExYTdjYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfaTJzLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfaTJzLmMKQEAgLTExNCw2ICsxMTQsNyBAQAogICAgICAgICAgIEZ1bmN0aW9uIEhBTF9JMlNfUmVnaXN0ZXJDYWxsYmFjaygpIGFsbG93cyB0byByZWdpc3RlciBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICAgICAgKCspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IEkyUyBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKICAgICAgICAgICAgICgrKSBSeENwbHRDYWxsYmFjayAgICAgICAgOiBJMlMgUnggQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKykgVHhSeENwbHRDYWxsYmFjayAgICAgIDogSTJTIFR4UnggQ29tcGxldGVkIGNhbGxiYWNrCiAgICAgICAgICAgICAoKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCiAgICAgICAgICAgICAoKykgUnhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCiAgICAgICAgICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgIDogSTJTIEVycm9yIGNhbGxiYWNrCkBAIC0xMzAsNiArMTMxLDcgQEAKICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICAgICAgICAgKCspIFR4Q3BsdENhbGxiYWNrICAgICAgICA6IEkyUyBUeCBDb21wbGV0ZWQgY2FsbGJhY2sKICAgICAgICAgICAgICgrKSBSeENwbHRDYWxsYmFjayAgICAgICAgOiBJMlMgUnggQ29tcGxldGVkIGNhbGxiYWNrCisgICAgICAgICAgICAoKykgVHhSeENwbHRDYWxsYmFjayAgICAgIDogSTJTIFR4UnggQ29tcGxldGVkIGNhbGxiYWNrCiAgICAgICAgICAgICAoKykgVHhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFR4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCiAgICAgICAgICAgICAoKykgUnhIYWxmQ3BsdENhbGxiYWNrICAgIDogSTJTIFJ4IEhhbGYgQ29tcGxldGVkIGNhbGxiYWNrCiAgICAgICAgICAgICAoKykgRXJyb3JDYWxsYmFjayAgICAgICAgIDogSTJTIEVycm9yIGNhbGxiYWNrCkBAIC0yMDEsNiArMjAzLDggQEAKIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgSTJTX0RNQVR4SGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgICAgICAgICAgICAgICBJMlNfRE1BUnhDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgSTJTX0RNQVJ4SGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOworc3RhdGljIHZvaWQgICAgICAgICAgICAgICBJMlNFeF9ETUFUeFJ4Q3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CitzdGF0aWMgdm9pZCAgICAgICAgICAgICAgIEkyU0V4X0RNQVR4UnhIYWxmQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgIEkyU19ETUFFcnJvcihETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgIEkyU19UcmFuc21pdF8xNkJpdF9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CiBzdGF0aWMgdm9pZCAgICAgICAgICAgICAgIEkyU19UcmFuc21pdF8zMkJpdF9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycyk7CkBAIC0yOTAsOCArMjk0LDEwIEBACiAgICAgLyogSW5pdCB0aGUgSTJTIENhbGxiYWNrIHNldHRpbmdzICovCiAgICAgaGkycy0+VHhDcGx0Q2FsbGJhY2sgICAgICAgPSBIQUxfSTJTX1R4Q3BsdENhbGxiYWNrOyAgICAgICAgICAvKiBMZWdhY3kgd2VhayBUeENwbHRDYWxsYmFjayAgICAgICAqLwogICAgIGhpMnMtPlJ4Q3BsdENhbGxiYWNrICAgICAgID0gSEFMX0kyU19SeENwbHRDYWxsYmFjazsgICAgICAgICAgLyogTGVnYWN5IHdlYWsgUnhDcGx0Q2FsbGJhY2sgICAgICAgKi8KKyAgICBoaTJzLT5UeFJ4Q3BsdENhbGxiYWNrICAgICA9IEhBTF9JMlNFeF9UeFJ4Q3BsdENhbGxiYWNrOyAgICAgIC8qIExlZ2FjeSB3ZWFrIFR4UnhDcGx0Q2FsbGJhY2sgICAgICovCiAgICAgaGkycy0+VHhIYWxmQ3BsdENhbGxiYWNrICAgPSBIQUxfSTJTX1R4SGFsZkNwbHRDYWxsYmFjazsgICAgICAvKiBMZWdhY3kgd2VhayBUeEhhbGZDcGx0Q2FsbGJhY2sgICAqLwogICAgIGhpMnMtPlJ4SGFsZkNwbHRDYWxsYmFjayAgID0gSEFMX0kyU19SeEhhbGZDcGx0Q2FsbGJhY2s7ICAgICAgLyogTGVnYWN5IHdlYWsgUnhIYWxmQ3BsdENhbGxiYWNrICAgKi8KKyAgICBoaTJzLT5UeFJ4SGFsZkNwbHRDYWxsYmFjayA9IEhBTF9JMlNFeF9UeFJ4SGFsZkNwbHRDYWxsYmFjazsgIC8qIExlZ2FjeSB3ZWFrIFR4UnhIYWxmQ3BsdENhbGxiYWNrICovCiAgICAgaGkycy0+RXJyb3JDYWxsYmFjayAgICAgICAgPSBIQUxfSTJTX0Vycm9yQ2FsbGJhY2s7ICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBFcnJvckNhbGxiYWNrICAgICAgICAqLwogCiAgICAgaWYgKGhpMnMtPk1zcEluaXRDYWxsYmFjayA9PSBOVUxMKQpAQCAtNTU4LDYgKzU2NCwxMCBAQAogICAgICAgICBoaTJzLT5SeENwbHRDYWxsYmFjayA9IHBDYWxsYmFjazsKICAgICAgICAgYnJlYWs7CiAKKyAgICAgIGNhc2UgSEFMX0kyU19UWF9SWF9DT01QTEVURV9DQl9JRCA6CisgICAgICAgIGhpMnMtPlR4UnhDcGx0Q2FsbGJhY2sgPSBwQ2FsbGJhY2s7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICAgIGNhc2UgSEFMX0kyU19UWF9IQUxGX0NPTVBMRVRFX0NCX0lEIDoKICAgICAgICAgaGkycy0+VHhIYWxmQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwogICAgICAgICBicmVhazsKQEAgLTU2Niw2ICs1NzYsMTEgQEAKICAgICAgICAgaGkycy0+UnhIYWxmQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOwogICAgICAgICBicmVhazsKIAorCisgICAgICBjYXNlIEhBTF9JMlNfVFhfUlhfSEFMRl9DT01QTEVURV9DQl9JRCA6CisgICAgICAgIGhpMnMtPlR4UnhIYWxmQ3BsdENhbGxiYWNrID0gcENhbGxiYWNrOworICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgICBjYXNlIEhBTF9JMlNfRVJST1JfQ0JfSUQgOgogICAgICAgICBoaTJzLT5FcnJvckNhbGxiYWNrID0gcENhbGxiYWNrOwogICAgICAgICBicmVhazsKQEAgLTY0OSw2ICs2NjQsMTAgQEAKICAgICAgICAgaGkycy0+UnhDcGx0Q2FsbGJhY2sgPSBIQUxfSTJTX1J4Q3BsdENhbGxiYWNrOyAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBSeENwbHRDYWxsYmFjayAgICAgICAqLwogICAgICAgICBicmVhazsKIAorICAgICAgY2FzZSBIQUxfSTJTX1RYX1JYX0NPTVBMRVRFX0NCX0lEIDoKKyAgICAgICAgaGkycy0+VHhSeENwbHRDYWxsYmFjayA9IEhBTF9JMlNFeF9UeFJ4Q3BsdENhbGxiYWNrOyAgICAgICAgICAvKiBMZWdhY3kgd2VhayBUeFJ4Q3BsdENhbGxiYWNrICAgICAqLworICAgICAgICBicmVhazsKKwogICAgICAgY2FzZSBIQUxfSTJTX1RYX0hBTEZfQ09NUExFVEVfQ0JfSUQgOgogICAgICAgICBoaTJzLT5UeEhhbGZDcGx0Q2FsbGJhY2sgPSBIQUxfSTJTX1R4SGFsZkNwbHRDYWxsYmFjazsgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFR4SGFsZkNwbHRDYWxsYmFjayAgICovCiAgICAgICAgIGJyZWFrOwpAQCAtNjU3LDYgKzY3NiwxMCBAQAogICAgICAgICBoaTJzLT5SeEhhbGZDcGx0Q2FsbGJhY2sgPSBIQUxfSTJTX1J4SGFsZkNwbHRDYWxsYmFjazsgICAgICAgIC8qIExlZ2FjeSB3ZWFrIFJ4SGFsZkNwbHRDYWxsYmFjayAgICovCiAgICAgICAgIGJyZWFrOwogCisgICAgICBjYXNlIEhBTF9JMlNfVFhfUlhfSEFMRl9DT01QTEVURV9DQl9JRCA6CisgICAgICAgIGhpMnMtPlR4UnhIYWxmQ3BsdENhbGxiYWNrID0gSEFMX0kyU0V4X1R4UnhIYWxmQ3BsdENhbGxiYWNrOyAgLyogTGVnYWN5IHdlYWsgVHhSeEhhbGZDcGx0Q2FsbGJhY2sgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICAgIAogICAgICAgY2FzZSBIQUxfSTJTX0VSUk9SX0NCX0lEIDoKICAgICAgICAgaGkycy0+RXJyb3JDYWxsYmFjayA9IEhBTF9JMlNfRXJyb3JDYWxsYmFjazsgICAgICAgICAgICAgICAgICAvKiBMZWdhY3kgd2VhayBFcnJvckNhbGxiYWNrICAgICAgICAqLwogICAgICAgICBicmVhazsKQEAgLTc0MSwxOCArNzY0LDIyIEBACiAgICAgKCMpIEJsb2NraW5nIG1vZGUgZnVuY3Rpb25zIGFyZSA6CiAgICAgICAgICgrKykgSEFMX0kyU19UcmFuc21pdCgpCiAgICAgICAgICgrKykgSEFMX0kyU19SZWNlaXZlKCkKKyAgICAgICAgKCsrKSBIQUxfSTJTRXhfVHJhbnNtaXRSZWNlaXZlKCkKIAogICAgICgjKSBOby1CbG9ja2luZyBtb2RlIGZ1bmN0aW9ucyB3aXRoIEludGVycnVwdCBhcmUgOgogICAgICAgICAoKyspIEhBTF9JMlNfVHJhbnNtaXRfSVQoKQogICAgICAgICAoKyspIEhBTF9JMlNfUmVjZWl2ZV9JVCgpCisgICAgICAgICgrKykgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZV9JVCgpCiAKICAgICAoIykgTm8tQmxvY2tpbmcgbW9kZSBmdW5jdGlvbnMgd2l0aCBETUEgYXJlIDoKICAgICAgICAgKCsrKSBIQUxfSTJTX1RyYW5zbWl0X0RNQSgpCiAgICAgICAgICgrKykgSEFMX0kyU19SZWNlaXZlX0RNQSgpCisgICAgICAgICgrKykgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZV9ETUEoKQogCiAgICAgKCMpIEEgc2V0IG9mIFRyYW5zZmVyIENvbXBsZXRlIENhbGxiYWNrcyBhcmUgcHJvdmlkZWQgaW4gbm9uIEJsb2NraW5nIG1vZGU6CiAgICAgICAgICgrKykgSEFMX0kyU19UeENwbHRDYWxsYmFjaygpCiAgICAgICAgICgrKykgSEFMX0kyU19SeENwbHRDYWxsYmFjaygpCisgICAgICAgICgrKykgSEFMX0kyU0V4X1R4UnhDcGx0Q2FsbGJhY2soKQogICAgICAgICAoKyspIEhBTF9JMlNfRXJyb3JDYWxsYmFjaygpCiAKIEBlbmR2ZXJiYXRpbQpAQCAtOTM3LDcgKzk2NCw3IEBACiAgIC8qIFJlY2VpdmUgZGF0YSAqLwogICB3aGlsZSAoaGkycy0+UnhYZmVyQ291bnQgPiAwVUwpCiAgIHsKLSAgICAvKiBXYWl0IHVudGlsIFJYTkUgZmxhZyBpcyBzZXQgKi8KKyAgICAvKiBXYWl0IHVudGlsIFJYUCBmbGFnIGlzIHNldCAqLwogICAgIGlmIChJMlNfV2FpdEZsYWdTdGF0ZVVudGlsVGltZW91dChoaTJzLCBJMlNfRkxBR19SWFAsIFNFVCwgVGltZW91dCkgIT0gSEFMX09LKQogICAgIHsKICAgICAgIC8qIFNldCB0aGUgZXJyb3IgY29kZSAqLwpAQCAtOTgzLDYgKzEwMTAsMTU5IEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgRnVsbC1EdXBsZXggVHJhbnNtaXQvUmVjZWl2ZSBkYXRhIGluIGJsb2NraW5nIG1vZGUuCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcGFyYW0gIHBUeERhdGEgYSAxNi1iaXQgcG9pbnRlciB0byB0aGUgVHJhbnNtaXQgZGF0YSBidWZmZXIuCisgICogQHBhcmFtICBwUnhEYXRhIGEgMTYtYml0IHBvaW50ZXIgdG8gdGhlIFJlY2VpdmUgZGF0YSBidWZmZXIuCisgICogQHBhcmFtICBTaXplIG51bWJlciBvZiBkYXRhIHNhbXBsZSB0byBiZSBzZW50OgorICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKKyAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAorICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqIEBwYXJhbSAgVGltZW91dCBUaW1lb3V0IGR1cmF0aW9uCisgICogQG5vdGUgICBUaGUgSTJTIGlzIGtlcHQgZW5hYmxlZCBhdCB0aGUgZW5kIG9mIHRyYW5zYWN0aW9uIHRvIGF2b2lkIHRoZSBjbG9jayBkZS1zeW5jaHJvbml6YXRpb24KKyAgKiAgICAgICAgIGJldHdlZW4gTWFzdGVyIGFuZCBTbGF2ZShleGFtcGxlOiBhdWRpbyBzdHJlYW1pbmcpLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfSTJTRXhfVHJhbnNtaXRSZWNlaXZlKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcFR4RGF0YSwgdWludDE2X3QgKnBSeERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IFNpemUsIHVpbnQzMl90IFRpbWVvdXQpCit7CisgIHVpbnQzMl90IHRtcF9UeFhmZXJDb3VudDsKKyAgdWludDMyX3QgdG1wX1J4WGZlckNvdW50OworICB1aW50MzJfdCB0aWNrc3RhcnQ7CisKKyNpZiBkZWZpbmVkIChfX0dOVUNfXykKKyAgX19JTyB1aW50MTZfdCAqcHR4ZHJfMTZiaXRzID0gKF9fSU8gdWludDE2X3QgKikoJihoaTJzLT5JbnN0YW5jZS0+VFhEUikpOworICBfX0lPIHVpbnQxNl90ICpwcnhkcl8xNmJpdHMgPSAoX19JTyB1aW50MTZfdCAqKSgmKGhpMnMtPkluc3RhbmNlLT5SWERSKSk7CisjZW5kaWYgLyogX19HTlVDX18gKi8KKworICBpZiAoaGkycy0+U3RhdGUgIT0gSEFMX0kyU19TVEFURV9SRUFEWSkKKyAgeworICAgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KKworICBpZiAoKHBUeERhdGEgPT0gTlVMTCkgfHwgKHBSeERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpKQorICB7CisgICAgcmV0dXJuICBIQUxfRVJST1I7CisgIH0KKworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhpMnMpOworCisgIC8qIEluaXQgdGlja3N0YXJ0IGZvciB0aW1lb3V0IG1hbmFnZW1lbnQqLworICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIGhpMnMtPlR4WGZlclNpemUgID0gU2l6ZTsKKyAgaGkycy0+VHhYZmVyQ291bnQgPSBTaXplOworICBoaTJzLT5wVHhCdWZmUHRyICA9IHBUeERhdGE7CisgIGhpMnMtPlJ4WGZlclNpemUgID0gU2l6ZTsKKyAgaGkycy0+UnhYZmVyQ291bnQgPSBTaXplOworICBoaTJzLT5wUnhCdWZmUHRyICA9IHBSeERhdGE7CisKKyAgdG1wX1R4WGZlckNvdW50ID0gaGkycy0+VHhYZmVyQ291bnQ7CisgIHRtcF9SeFhmZXJDb3VudCA9IGhpMnMtPlJ4WGZlckNvdW50OworCisgIC8qIFNldCBzdGF0ZSBhbmQgcmVzZXQgZXJyb3IgY29kZSAqLworICBoaTJzLT5FcnJvckNvZGUgPSBIQUxfSTJTX0VSUk9SX05PTkU7CisgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9CVVNZX1RYX1JYOworCisgIC8qIENoZWNrIGlmIHRoZSBJMlMgaXMgYWxyZWFkeSBlbmFibGVkICovCisgIGlmICgoaGkycy0+SW5zdGFuY2UtPkNSMSAmIFNQSV9DUjFfU1BFKSAhPSBTUElfQ1IxX1NQRSkKKyAgeworICAgIC8qIEVuYWJsZSBJMlMgcGVyaXBoZXJhbCAqLworICAgIF9fSEFMX0kyU19FTkFCTEUoaGkycyk7CisgIH0KKworICAvKiBTdGFydCB0aGUgdHJhbnNmZXIgKi8KKyAgU0VUX0JJVChoaTJzLT5JbnN0YW5jZS0+Q1IxLCBTUElfQ1IxX0NTVEFSVCk7CisKKyAgd2hpbGUgKCh0bXBfVHhYZmVyQ291bnQgPiAwVUwpIHx8ICh0bXBfUnhYZmVyQ291bnQgPiAwVUwpKQorICB7CisgICAgaWYgKChfX0hBTF9JMlNfR0VUX0ZMQUcoaGkycywgSTJTX0ZMQUdfVFhQKSA9PSBTRVQpICYmICh0bXBfVHhYZmVyQ291bnQgIT0gMFVMKSkKKyAgICB7CisgICAgICBpZiAoKGhpMnMtPkluaXQuRGF0YUZvcm1hdCA9PSBJMlNfREFUQUZPUk1BVF8yNEIpIHx8IChoaTJzLT5Jbml0LkRhdGFGb3JtYXQgPT0gSTJTX0RBVEFGT1JNQVRfMzJCKSkKKyAgICAgIHsKKyAgICAgICAgLyogVHJhbnNtaXQgZGF0YSBpbiAzMiBCaXQgbW9kZSAqLworICAgICAgICBoaTJzLT5JbnN0YW5jZS0+VFhEUiA9ICooKHVpbnQzMl90ICopaGkycy0+cFR4QnVmZlB0cik7CisgICAgICAgIGhpMnMtPnBUeEJ1ZmZQdHIgKz0gMjsKKyAgICAgICAgdG1wX1R4WGZlckNvdW50LS07CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIFRyYW5zbWl0IGRhdGEgaW4gMTYgQml0IG1vZGUgKi8KKyNpZiBkZWZpbmVkIChfX0dOVUNfXykKKyAgICAgICAgKnB0eGRyXzE2Yml0cyA9ICooKHVpbnQxNl90ICopaGkycy0+cFR4QnVmZlB0cik7CisjZWxzZQorICAgICAgICAqKChfX0lPIHVpbnQxNl90ICopJmhpMnMtPkluc3RhbmNlLT5UWERSKSA9ICooKHVpbnQxNl90ICopaGkycy0+cFR4QnVmZlB0cik7CisjZW5kaWYgLyogX19HTlVDX18gKi8KKworICAgICAgICBoaTJzLT5wVHhCdWZmUHRyKys7CisgICAgICAgIHRtcF9UeFhmZXJDb3VudC0tOworICAgICAgfQorCisgICAgICAvKiBDaGVjayBpZiBhbiB1bmRlcnJ1biBvY2N1cnMgKi8KKyAgICAgIGlmIChfX0hBTF9JMlNfR0VUX0ZMQUcoaGkycywgSTJTX0ZMQUdfVURSKSA9PSBTRVQpCisgICAgICB7CisgICAgICAgIC8qIENsZWFyIHVuZGVycnVuIGZsYWcgKi8KKyAgICAgICAgX19IQUxfSTJTX0NMRUFSX1VEUkZMQUcoaGkycyk7CisKKyAgICAgICAgLyogU2V0IHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX1VEUik7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKChfX0hBTF9JMlNfR0VUX0ZMQUcoaGkycywgSTJTX0ZMQUdfUlhQKSA9PSBTRVQpICYmICh0bXBfUnhYZmVyQ291bnQgIT0gMFVMKSkKKyAgICB7CisgICAgICBpZiAoKGhpMnMtPkluaXQuRGF0YUZvcm1hdCA9PSBJMlNfREFUQUZPUk1BVF8yNEIpIHx8IChoaTJzLT5Jbml0LkRhdGFGb3JtYXQgPT0gSTJTX0RBVEFGT1JNQVRfMzJCKSkKKyAgICAgIHsKKyAgICAgICAgLyogUmVjZWl2ZSBkYXRhIGluIDMyIEJpdCBtb2RlICovCisgICAgICAgICooKHVpbnQzMl90ICopaGkycy0+cFJ4QnVmZlB0cikgPSBoaTJzLT5JbnN0YW5jZS0+UlhEUjsKKyAgICAgICAgaGkycy0+cFJ4QnVmZlB0ciArPSAyOworICAgICAgICB0bXBfUnhYZmVyQ291bnQtLTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgLyogUmVjZWl2ZSBkYXRhIGluIDE2IEJpdCBtb2RlICovCisjaWYgZGVmaW5lZCAoX19HTlVDX18pCisgICAgICAgICooKHVpbnQxNl90ICopaGkycy0+cFJ4QnVmZlB0cikgPSAqcHJ4ZHJfMTZiaXRzOworI2Vsc2UKKyAgICAgICAgKigodWludDE2X3QgKiloaTJzLT5wUnhCdWZmUHRyKSA9ICooKF9fSU8gdWludDE2X3QgKikmaGkycy0+SW5zdGFuY2UtPlJYRFIpOworI2VuZGlmIC8qIF9fR05VQ19fICovCisgICAgICAgIGhpMnMtPnBSeEJ1ZmZQdHIrKzsKKyAgICAgICAgdG1wX1J4WGZlckNvdW50LS07CisgICAgICB9CisKKyAgICAgIC8qIENoZWNrIGlmIGFuIG92ZXJydW4gb2NjdXJzICovCisgICAgICBpZiAoX19IQUxfSTJTX0dFVF9GTEFHKGhpMnMsIEkyU19GTEFHX09WUikgPT0gU0VUKQorICAgICAgeworICAgICAgICAvKiBDbGVhciBvdmVycnVuIGZsYWcgKi8KKyAgICAgICAgX19IQUxfSTJTX0NMRUFSX09WUkZMQUcoaGkycyk7CisKKyAgICAgICAgLyogU2V0IHRoZSBlcnJvciBjb2RlICovCisgICAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX09WUik7CisgICAgICB9CisgICAgfQorCisgICAgLyogVGltZW91dCBtYW5hZ2VtZW50ICovCisgICAgaWYgKCgoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID49ICBUaW1lb3V0KSAmJiAoVGltZW91dCAhPSBIQUxfTUFYX0RFTEFZKSkgfHwgKFRpbWVvdXQgPT0gMFUpKQorICAgIHsKKyAgICAgIC8qIFNldCB0aGUgZXJyb3IgY29kZSAqLworICAgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfVElNRU9VVCk7CisgICAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisgICAgICBfX0hBTF9VTkxPQ0soaGkycyk7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgfQorCisgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKKyAgX19IQUxfVU5MT0NLKGhpMnMpOworICByZXR1cm4gSEFMX09LOworfQorCisvKioKICAgKiBAYnJpZWYgIFRyYW5zbWl0IGFuIGFtb3VudCBvZiBkYXRhIGluIG5vbi1ibG9ja2luZyBtb2RlIHdpdGggSW50ZXJydXB0CiAgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKQEAgLTExMTcsNyArMTI5Nyw3IEBACiAgICAgLyogRW5hYmxlIEkyUyBwZXJpcGhlcmFsICovCiAgICAgX19IQUxfSTJTX0VOQUJMRShoaTJzKTsKICAgfQotICAvKiBFbmFibGUgUlhORSBhbmQgRVJSIGludGVycnVwdCAqLworICAvKiBFbmFibGUgUlhQIGFuZCBFUlIgaW50ZXJydXB0ICovCiAgIF9fSEFMX0kyU19FTkFCTEVfSVQoaGkycywgKEkyU19JVF9SWFAgfCBJMlNfSVRfT1ZSKSk7CiAKICAgLyogRW5hYmxlIFRJRlJFIGludGVycnVwdCBpZiB0aGUgbW9kZSBpcyBTbGF2ZSAgKi8KQEAgLTExMzQsNiArMTMxNCw4NiBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIEZ1bGwtRHVwbGV4IFRyYW5zbWl0L1JlY2VpdmUgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB1c2luZyBJbnRlcnJ1cHQKKyAgKiBAcGFyYW0gIGhpMnMgcG9pbnRlciB0byBhIEkyU19IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgSTJTIG1vZHVsZQorICAqIEBwYXJhbSAgcFR4RGF0YSBhIDE2LWJpdCBwb2ludGVyIHRvIHRoZSBUcmFuc21pdCBkYXRhIGJ1ZmZlci4KKyAgKiBAcGFyYW0gIHBSeERhdGEgYSAxNi1iaXQgcG9pbnRlciB0byB0aGUgUmVjZWl2ZSBkYXRhIGJ1ZmZlci4KKyAgKiBAcGFyYW0gIFNpemUgbnVtYmVyIG9mIGRhdGEgc2FtcGxlIHRvIGJlIHNlbnQ6CisgICogQG5vdGUgICBXaGVuIGEgMTYtYml0IGRhdGEgZnJhbWUgb3IgYSAxNi1iaXQgZGF0YSBmcmFtZSBleHRlbmRlZCBpcyBzZWxlY3RlZCBkdXJpbmcgdGhlIEkyUworICAqICAgICAgICAgY29uZmlndXJhdGlvbiBwaGFzZSwgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoCisgICogICAgICAgICBpbiB0aGUgdHJhbnNhY3Rpb24gYW5kIHdoZW4gYSAyNC1iaXQgZGF0YSBmcmFtZSBvciBhIDMyLWJpdCBkYXRhIGZyYW1lIGlzIHNlbGVjdGVkCisgICogICAgICAgICB0aGUgU2l6ZSBwYXJhbWV0ZXIgbWVhbnMgdGhlIG51bWJlciBvZiAxNi1iaXQgZGF0YSBsZW5ndGguCisgICogQG5vdGUgICBUaGUgSTJTIGlzIGtlcHQgZW5hYmxlZCBhdCB0aGUgZW5kIG9mIHRyYW5zYWN0aW9uIHRvIGF2b2lkIHRoZSBjbG9jayBkZS1zeW5jaHJvbml6YXRpb24KKyAgKiAgICAgICAgIGJldHdlZW4gTWFzdGVyIGFuZCBTbGF2ZShleGFtcGxlOiBhdWRpbyBzdHJlYW1pbmcpLgorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0kyU0V4X1RyYW5zbWl0UmVjZWl2ZV9JVChJMlNfSGFuZGxlVHlwZURlZiAqaGkycywgdWludDE2X3QgKnBUeERhdGEsIHVpbnQxNl90ICpwUnhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplKQoreworICBpZiAoaGkycy0+U3RhdGUgIT0gSEFMX0kyU19TVEFURV9SRUFEWSkKKyAgeworICAgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KKworICBpZiAoKHBUeERhdGEgPT0gTlVMTCkgfHwgKHBSeERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpKQorICB7CisgICAgcmV0dXJuICBIQUxfRVJST1I7CisgIH0KKworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhpMnMpOworCisgIGhpMnMtPnBUeEJ1ZmZQdHIgPSBwVHhEYXRhOworICBoaTJzLT5wUnhCdWZmUHRyID0gcFJ4RGF0YTsKKworICBoaTJzLT5UeFhmZXJTaXplICA9IFNpemU7CisgIGhpMnMtPlR4WGZlckNvdW50ID0gU2l6ZTsKKyAgaGkycy0+UnhYZmVyU2l6ZSAgPSBTaXplOworICBoaTJzLT5SeFhmZXJDb3VudCA9IFNpemU7CisKKyAgaGkycy0+RXJyb3JDb2RlID0gSEFMX0kyU19FUlJPUl9OT05FOworICBoaTJzLT5TdGF0ZSAgICAgPSBIQUxfSTJTX1NUQVRFX0JVU1lfVFhfUlg7CisKKworICAgIC8qIFNldCB0aGUgZnVuY3Rpb24gZm9yIElUIHRyZWF0bWVudCAqLworICBpZiAoKGhpMnMtPkluaXQuRGF0YUZvcm1hdCA9PSBJMlNfREFUQUZPUk1BVF8yNEIpIHx8IChoaTJzLT5Jbml0LkRhdGFGb3JtYXQgPT0gSTJTX0RBVEFGT1JNQVRfMzJCKSkKKyAgeworICAgIGhpMnMtPlR4SVNSID0gSTJTX1RyYW5zbWl0XzMyQml0X0lUOworICAgIGhpMnMtPlJ4SVNSID0gSTJTX1JlY2VpdmVfMzJCaXRfSVQ7CisgIH0KKyAgZWxzZQorICB7CisgICAgaGkycy0+VHhJU1IgPSBJMlNfVHJhbnNtaXRfMTZCaXRfSVQ7CisgICAgaGkycy0+UnhJU1IgPSBJMlNfUmVjZWl2ZV8xNkJpdF9JVDsKKyAgfQorCisgICAgLyogQ2hlY2sgaWYgdGhlIEkyUyBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKyAgaWYgKChoaTJzLT5JbnN0YW5jZS0+Q1IxICYgU1BJX0NSMV9TUEUpICE9IFNQSV9DUjFfU1BFKQorICB7CisgICAgLyogRW5hYmxlIEkyUyBwZXJpcGhlcmFsICovCisgICAgX19IQUxfSTJTX0VOQUJMRShoaTJzKTsKKyAgfQorCisgIC8qIEVuYWJsZSBUWFAsIFJYUCwgRFhQLCBVRFIsIE9WUiBpbnRlcnJ1cHRzICovCisgIF9fSEFMX0kyU19FTkFCTEVfSVQoaGkycywgKEkyU19JVF9UWFAgfCBJMlNfSVRfUlhQIHwgSTJTX0lUX0RYUCB8IEkyU19JVF9VRFIgfCBJMlNfSVRfT1ZSKSk7CisKKyAgLyogRW5hYmxlIFRJRlJFIGludGVycnVwdCBpZiB0aGUgbW9kZSBpcyBTbGF2ZSAgKi8KKyAgaWYgKGhpMnMtPkluaXQuTW9kZSA9PSBJMlNfTU9ERV9TTEFWRV9GVUxMRFVQTEVYKQorICB7CisgICAgX19IQUxfSTJTX0VOQUJMRV9JVChoaTJzLCBJMlNfSVRfRlJFKTsKKyAgfQorCisgIC8qIFN0YXJ0IHRoZSB0cmFuc2ZlciAqLworICBTRVRfQklUKGhpMnMtPkluc3RhbmNlLT5DUjEsIFNQSV9DUjFfQ1NUQVJUKTsKKworICBfX0hBTF9VTkxPQ0soaGkycyk7CisgIHJldHVybiBIQUxfT0s7CisKK30KKworLyoqCiAgICogQGJyaWVmICBUcmFuc21pdCBhbiBhbW91bnQgb2YgZGF0YSBpbiBub24tYmxvY2tpbmcgbW9kZSB3aXRoIERNQQogICAqIEBwYXJhbSAgaGkycyBwb2ludGVyIHRvIGEgSTJTX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBJMlMgbW9kdWxlCkBAIC0xMTg3LDcgKzE0NDcsNyBAQAogICAvKiBFbmFibGUgdGhlIFR4IERNQSBTdHJlYW0vQ2hhbm5lbCAqLwogICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaGkycy0+aGRtYXR4LCAodWludDMyX3QpaGkycy0+cFR4QnVmZlB0ciwgKHVpbnQzMl90KSZoaTJzLT5JbnN0YW5jZS0+VFhEUiwgaGkycy0+VHhYZmVyU2l6ZSkpCiAgIHsKLSAgICAvKiBVcGRhdGUgU1BJIGVycm9yIGNvZGUgKi8KKyAgICAvKiBVcGRhdGUgSTJTIGVycm9yIGNvZGUgKi8KICAgICBTRVRfQklUKGhpMnMtPkVycm9yQ29kZSwgSEFMX0kyU19FUlJPUl9ETUEpOwogICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKIApAQCAtMTIzNCw3ICsxNDk0LDcgQEAKIHsKICAgaWYgKChwRGF0YSA9PSBOVUxMKSB8fCAoU2l6ZSA9PSAwVUwpKQogICB7Ci0gICAgcmV0dXJuICBIQUxfRVJST1I7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIC8qIFByb2Nlc3MgTG9ja2VkICovCkBAIC0xMjcxLDcgKzE1MzEsMTEyIEBACiAgIC8qIEVuYWJsZSB0aGUgUnggRE1BIFN0cmVhbS9DaGFubmVsICovCiAgIGlmIChIQUxfT0sgIT0gSEFMX0RNQV9TdGFydF9JVChoaTJzLT5oZG1hcngsICh1aW50MzJfdCkmaGkycy0+SW5zdGFuY2UtPlJYRFIsICh1aW50MzJfdCloaTJzLT5wUnhCdWZmUHRyLCBoaTJzLT5SeFhmZXJTaXplKSkKICAgewotICAgIC8qIFVwZGF0ZSBTUEkgZXJyb3IgY29kZSAqLworICAgIC8qIFVwZGF0ZSBJMlMgZXJyb3IgY29kZSAqLworICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX0RNQSk7CisgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworCisgICAgX19IQUxfVU5MT0NLKGhpMnMpOworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBDaGVjayBpZiB0aGUgSTJTIFJ4IHJlcXVlc3QgaXMgYWxyZWFkeSBlbmFibGVkICovCisgIGlmIChIQUxfSVNfQklUX0NMUihoaTJzLT5JbnN0YW5jZS0+Q0ZHMSwgU1BJX0NGRzFfUlhETUFFTikpCisgIHsKKyAgICAvKiBFbmFibGUgUnggRE1BIFJlcXVlc3QgKi8KKyAgICBTRVRfQklUKGhpMnMtPkluc3RhbmNlLT5DRkcxLCBTUElfQ0ZHMV9SWERNQUVOKTsKKyAgfQorCisgIC8qIENoZWNrIGlmIHRoZSBJMlMgaXMgYWxyZWFkeSBlbmFibGVkICovCisgIGlmIChIQUxfSVNfQklUX0NMUihoaTJzLT5JbnN0YW5jZS0+Q1IxLCBTUElfQ1IxX1NQRSkpCisgIHsKKyAgICAvKiBFbmFibGUgSTJTIHBlcmlwaGVyYWwgKi8KKyAgICBfX0hBTF9JMlNfRU5BQkxFKGhpMnMpOworICB9CisKKyAgLyogU3RhcnQgdGhlIHRyYW5zZmVyICovCisgIFNFVF9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMSwgU1BJX0NSMV9DU1RBUlQpOworCisgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgcmV0dXJuIEhBTF9PSzsKK30KKworLyoqCisgICogQGJyaWVmICBGdWxsLUR1cGxleCBUcmFuc21pdC9SZWNlaXZlIGRhdGEgaW4gbm9uLWJsb2NraW5nIG1vZGUgdXNpbmcgRE1BCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcGFyYW0gIHBUeERhdGEgYSAxNi1iaXQgcG9pbnRlciB0byB0aGUgVHJhbnNtaXQgZGF0YSBidWZmZXIuCisgICogQHBhcmFtICBwUnhEYXRhIGEgMTYtYml0IHBvaW50ZXIgdG8gdGhlIFJlY2VpdmUgZGF0YSBidWZmZXIuCisgICogQHBhcmFtICBTaXplIG51bWJlciBvZiBkYXRhIHNhbXBsZSB0byBiZSBzZW50OgorICAqIEBub3RlICAgV2hlbiBhIDE2LWJpdCBkYXRhIGZyYW1lIG9yIGEgMTYtYml0IGRhdGEgZnJhbWUgZXh0ZW5kZWQgaXMgc2VsZWN0ZWQgZHVyaW5nIHRoZSBJMlMKKyAgKiAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGhhc2UsIHRoZSBTaXplIHBhcmFtZXRlciBtZWFucyB0aGUgbnVtYmVyIG9mIDE2LWJpdCBkYXRhIGxlbmd0aAorICAqICAgICAgICAgaW4gdGhlIHRyYW5zYWN0aW9uIGFuZCB3aGVuIGEgMjQtYml0IGRhdGEgZnJhbWUgb3IgYSAzMi1iaXQgZGF0YSBmcmFtZSBpcyBzZWxlY3RlZAorICAqICAgICAgICAgdGhlIFNpemUgcGFyYW1ldGVyIG1lYW5zIHRoZSBudW1iZXIgb2YgMTYtYml0IGRhdGEgbGVuZ3RoLgorICAqIEBub3RlICAgVGhlIEkyUyBpcyBrZXB0IGVuYWJsZWQgYXQgdGhlIGVuZCBvZiB0cmFuc2FjdGlvbiB0byBhdm9pZCB0aGUgY2xvY2sgZGUtc3luY2hyb25pemF0aW9uCisgICogICAgICAgICBiZXR3ZWVuIE1hc3RlciBhbmQgU2xhdmUoZXhhbXBsZTogYXVkaW8gc3RyZWFtaW5nKS4KKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9JMlNFeF9UcmFuc21pdFJlY2VpdmVfRE1BKEkyU19IYW5kbGVUeXBlRGVmICpoaTJzLCB1aW50MTZfdCAqcFR4RGF0YSwgdWludDE2X3QgKnBSeERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBTaXplKQoreworICBpZiAoaGkycy0+U3RhdGUgIT0gSEFMX0kyU19TVEFURV9SRUFEWSkKKyAgeworICAgIF9fSEFMX1VOTE9DSyhoaTJzKTsKKyAgICByZXR1cm4gSEFMX0JVU1k7CisgIH0KKworICBpZiAoKHBUeERhdGEgPT0gTlVMTCkgfHwgKHBSeERhdGEgPT0gTlVMTCkgfHwgKFNpemUgPT0gMFUpKQorICB7CisgICAgcmV0dXJuICBIQUxfRVJST1I7CisgIH0KKworICAvKiBQcm9jZXNzIExvY2tlZCAqLworICBfX0hBTF9MT0NLKGhpMnMpOworCisgIGhpMnMtPnBUeEJ1ZmZQdHIgPSBwVHhEYXRhOworICBoaTJzLT5wUnhCdWZmUHRyID0gcFJ4RGF0YTsKKworICBoaTJzLT5UeFhmZXJTaXplICA9IFNpemU7CisgIGhpMnMtPlR4WGZlckNvdW50ID0gU2l6ZTsKKyAgaGkycy0+UnhYZmVyU2l6ZSAgPSBTaXplOworICBoaTJzLT5SeFhmZXJDb3VudCA9IFNpemU7CisKKyAgaGkycy0+RXJyb3JDb2RlICAgPSBIQUxfSTJTX0VSUk9SX05PTkU7CisgIGhpMnMtPlN0YXRlICAgICAgID0gSEFMX0kyU19TVEFURV9CVVNZX1RYX1JYOworCisgIC8qIFJlc2V0IHRoZSBUeC9SeCBETUEgYml0cyAqLworICBDTEVBUl9CSVQoaGkycy0+SW5zdGFuY2UtPkNGRzEsIFNQSV9DRkcxX1RYRE1BRU4gfCBTUElfQ0ZHMV9SWERNQUVOKTsKKworICAvKiBTZXQgdGhlIEkyUyBSeCBETUEgSGFsZiB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICBoaTJzLT5oZG1hcngtPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gSTJTRXhfRE1BVHhSeEhhbGZDcGx0OworCisgIC8qIFNldCB0aGUgSTJTIFJ4IERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLworICBoaTJzLT5oZG1hcngtPlhmZXJDcGx0Q2FsbGJhY2sgID0gSTJTRXhfRE1BVHhSeENwbHQ7CisKKyAgLyogU2V0IHRoZSBJMlMgUnggRE1BIGVycm9yIGNhbGxiYWNrICovCisgIGhpMnMtPmhkbWFyeC0+WGZlckVycm9yQ2FsbGJhY2sgPSBJMlNfRE1BRXJyb3I7CisKKyAgLyogRW5hYmxlIHRoZSBUeCBETUEgU3RyZWFtL0NoYW5uZWwgKi8KKyAgaWYgKEhBTF9PSyAhPSBIQUxfRE1BX1N0YXJ0X0lUKGhpMnMtPmhkbWF0eCwgKHVpbnQzMl90KWhpMnMtPnBUeEJ1ZmZQdHIsICh1aW50MzJfdCkmaGkycy0+SW5zdGFuY2UtPlRYRFIsIGhpMnMtPlR4WGZlclNpemUpKQorICB7CisgICAgLyogVXBkYXRlIEkyUyBlcnJvciBjb2RlICovCisgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfRE1BKTsKKyAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisKKyAgICBfX0hBTF9VTkxPQ0soaGkycyk7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIENoZWNrIGlmIHRoZSBJMlMgVHggcmVxdWVzdCBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KKyAgaWYgKEhBTF9JU19CSVRfQ0xSKGhpMnMtPkluc3RhbmNlLT5DRkcxLCBTUElfQ0ZHMV9UWERNQUVOKSkKKyAgeworICAgIC8qIEVuYWJsZSBUeCBETUEgUmVxdWVzdCAqLworICAgIFNFVF9CSVQoaGkycy0+SW5zdGFuY2UtPkNGRzEsIFNQSV9DRkcxX1RYRE1BRU4pOworICB9CisKKyAgICAvKiBFbmFibGUgdGhlIFJ4IERNQSBTdHJlYW0vQ2hhbm5lbCAqLworICBpZiAoSEFMX09LICE9IEhBTF9ETUFfU3RhcnRfSVQoaGkycy0+aGRtYXJ4LCAodWludDMyX3QpJmhpMnMtPkluc3RhbmNlLT5SWERSLCAodWludDMyX3QpaGkycy0+cFJ4QnVmZlB0ciwgaGkycy0+UnhYZmVyU2l6ZSkpCisgIHsKKyAgICAvKiBVcGRhdGUgSTJTIGVycm9yIGNvZGUgKi8KICAgICBTRVRfQklUKGhpMnMtPkVycm9yQ29kZSwgSEFMX0kyU19FUlJPUl9ETUEpOwogICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKIApAQCAtMTMxMCwxMyArMTY3NSwxMyBAQAogewogICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICBfX0hBTF9MT0NLKGhpMnMpOwotICAKKwogICB1aW50MzJfdCB0aWNrc3RhcnQ7CiAKICAgLyogR2V0IHRpY2sgKi8KICAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLSAgCi0gIAorCisKICAgLyogQ2hlY2sgaWYgdGhlIEkyUyBwZXJpcGhlcmFsIGlzIGluIG1hc3RlciBtb2RlICovCiAgIGlmIChJU19JMlNfTUFTVEVSKGhpMnMtPkluaXQuTW9kZSkpCiAgIHsKQEAgLTEzMzAsNyArMTY5NSw3IEBACiAgICAgICBfX0hBTF9VTkxPQ0soaGkycyk7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIFNFVF9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMSwgU1BJX0NSMV9DU1VTUCk7CiAKICAgICB3aGlsZSAoSEFMX0lTX0JJVF9TRVQoaGkycy0+SW5zdGFuY2UtPkNSMSwgU1BJX0NSMV9DU1RBUlQpICE9IDBVTCkKQEAgLTEzMzksMzUgKzE3MDQsMzUgQEAKICAgICAgIHsKICAgICAgICAgLyogU2V0IHRoZSBJMlMgU3RhdGUgcmVhZHkgKi8KICAgICAgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOwotICAgICAgICAKKwogICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgICAgIF9fSEFMX1VOTE9DSyhoaTJzKTsKLSAgICAgICAgIAorCiAgICAgICAgIFNFVF9CSVQoaGkycy0+RXJyb3JDb2RlLCBIQUxfSTJTX0VSUk9SX1RJTUVPVVQpOwogICAgICAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CiAgICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICAvKiBEaXNhYmxlIEkyUyBwZXJpcGhlcmFsICovCiAgICAgX19IQUxfSTJTX0RJU0FCTEUoaGkycyk7Ci0gICAgICAKKwogICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKLSAgCisKICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCiAgICAgX19IQUxfVU5MT0NLKGhpMnMpOwogCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQotICBlbHNlIAorICBlbHNlCiAgIHsKICAgICAvKiBTZXQgZXJyb3IgY29kZSB0byBub3Qgc3VwcG9ydGVkICovCiAgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfTk9UX1NVUFBPUlRFRCk7CiAgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOwotICAgIAorCiAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwogICAgIF9fSEFMX1VOTE9DSyhoaTJzKTsKLSAgICAKKwogICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIH0KQEAgLTEzOTAsMTQgKzE3NTUsMTQgQEAKICAgICBfX0hBTF9VTkxPQ0soaGkycyk7CiAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQotICAKKwogICAvKiBTZXQgc3RhdGUgYW5kIHJlc2V0IGVycm9yIGNvZGUgKi8KICAgaGkycy0+U3RhdGUgICAgICAgPSBIQUxfSTJTX1NUQVRFX0JVU1k7CiAgIGhpMnMtPkVycm9yQ29kZSAgID0gSEFMX0kyU19FUlJPUl9OT05FOwotICAKKwogICAvKiBFbmFibGUgSTJTIHBlcmlwaGVyYWwgKi8KICAgX19IQUxfSTJTX0VOQUJMRShoaTJzKTsKLSAgCisKICAgLyogU3RhcnQgdGhlIHRyYW5zZmVyICovCiAgIFNFVF9CSVQoaGkycy0+SW5zdGFuY2UtPkNSMSwgU1BJX0NSMV9DU1RBUlQpOwogCkBAIC0xNDE3LDcgKzE3ODIsNyBAQAogewogICBIQUxfU3RhdHVzVHlwZURlZiBlcnJvcmNvZGUgPSBIQUxfT0s7CiAgIC8qIFRoZSBMb2NrIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIEFQSSB0byBhbGxvdyB0aGUgdXNlciBhcHBsaWNhdGlvbgotICAgICB0byBjYWxsIHRoZSBIQUwgU1BJIEFQSSB1bmRlciBjYWxsYmFja3MgSEFMX0kyU19UeENwbHRDYWxsYmFjaygpIG9yIEhBTF9JMlNfUnhDcGx0Q2FsbGJhY2soKQorICAgICB0byBjYWxsIHRoZSBIQUwgSTJTIEFQSSB1bmRlciBjYWxsYmFja3MgSEFMX0kyU19UeENwbHRDYWxsYmFjaygpIG9yIEhBTF9JMlNfUnhDcGx0Q2FsbGJhY2soKQogICAgICB3aGVuIGNhbGxpbmcgSEFMX0RNQV9BYm9ydCgpIEFQSSB0aGUgRE1BIFRYIG9yIFJYIFRyYW5zZmVyIGNvbXBsZXRlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQKICAgICAgYW5kIHRoZSBjb3JyZXNwb25kIGNhbGwgYmFjayBpcyBleGVjdXRlZCBIQUxfSTJTX1R4Q3BsdENhbGxiYWNrKCkgb3IgSEFMX0kyU19SeENwbHRDYWxsYmFjaygpCiAgICAgICovCkBAIC0xNDY0LDY3ICsxODI5LDEzNiBAQAogICAqLwogdm9pZCBIQUxfSTJTX0lSUUhhbmRsZXIoSTJTX0hhbmRsZVR5cGVEZWYgKmhpMnMpCiB7Ci0gIHVpbnQzMl90IGl0c291cmNlID0gaGkycy0+SW5zdGFuY2UtPklFUjsKLSAgdWludDMyX3QgaXRmbGFnICAgPSBoaTJzLT5JbnN0YW5jZS0+U1I7Ci0gIHVpbnQzMl90IHRyaWdnZXIgID0gaXRzb3VyY2UgJiBpdGZsYWc7CisgIHVpbnQzMl90IGkyc2llciAgID0gaGkycy0+SW5zdGFuY2UtPklFUjsKKyAgdWludDMyX3QgaTJzc3IgICAgPSBoaTJzLT5JbnN0YW5jZS0+U1I7CisgIHVpbnQzMl90IHRyaWdnZXIgID0gaTJzaWVyICYgaTJzc3I7CiAKLSAgLyogSTJTIGluIG1vZGUgUmVjZWl2ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgaWYgKChJMlNfQ0hFQ0tfRkxBRyhpdGZsYWcsIEkyU19GTEFHX09WUikgPT0gUkVTRVQpICYmIEhBTF9JU19CSVRfU0VUKHRyaWdnZXIsIEkyU19GTEFHX1JYUCkpCisgIGlmIChoaTJzLT5TdGF0ZSA9PSBIQUxfSTJTX1NUQVRFX0JVU1lfUlgpCiAgIHsKLSAgICBoaTJzLT5SeElTUihoaTJzKTsKLSAgfQorICAgIC8qIEkyUyBpbiBtb2RlIFJlY2VpdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgaWYgKEhBTF9JU19CSVRfU0VUKHRyaWdnZXIsIEkyU19GTEFHX1JYUCkgJiYgSEFMX0lTX0JJVF9DTFIodHJpZ2dlciwgSTJTX0ZMQUdfT1ZSKSkKKyAgICB7CisgICAgICBoaTJzLT5SeElTUihoaTJzKTsKKyAgICB9CiAKLSAgLyogSTJTIGluIG1vZGUgVHJhbnNtaXR0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICBpZiAoKEkyU19DSEVDS19GTEFHKGl0ZmxhZywgSTJTX0ZMQUdfVURSKSA9PSBSRVNFVCkgJiYgSEFMX0lTX0JJVF9TRVQodHJpZ2dlciwgSTJTX0ZMQUdfVFhQKSkKLSAgewotICAgIGhpMnMtPlR4SVNSKGhpMnMpOwotICB9Ci0KLSAgLyogSTJTIGludGVycnVwdCBlcnJvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgaWYgKCh0cmlnZ2VyICYgKEkyU19GTEFHX09WUnwgSTJTX0ZMQUdfVURSIHwgSTJTX0ZMQUdfRlJFKSkgIT0gMFVMKQotICB7Ci0gICAgLyogSTJTIE92ZXJydW4gZXJyb3IgaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgaWYgKEkyU19DSEVDS19GTEFHKGl0ZmxhZywgSTJTX0ZMQUdfT1ZSKSAhPSBSRVNFVCkKKyAgICAvKiBJMlMgT3ZlcnJ1biBlcnJvciBpbnRlcnJ1cHQgb2NjdXJyZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgaWYgKEhBTF9JU19CSVRfU0VUKHRyaWdnZXIsIEkyU19GTEFHX09WUikpCiAgICAgewogICAgICAgLyogRGlzYWJsZSBSWFAgYW5kIEVSUiBpbnRlcnJ1cHQgKi8KICAgICAgIF9fSEFMX0kyU19ESVNBQkxFX0lUKGhpMnMsIChJMlNfSVRfUlhQIHwgSTJTX0lUX0VSUikpOwogCisgICAgICAvKiBDbGVhciBPdmVycnVuIGZsYWcgKi8KKyAgICAgIF9fSEFMX0kyU19DTEVBUl9PVlJGTEFHKGhpMnMpOworCisgICAgICAvKiBTZXQgdGhlIEkyUyBTdGF0ZSByZWFkeSAqLworICAgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworCisKICAgICAgIC8qIFNldCB0aGUgZXJyb3IgY29kZSBhbmQgZXhlY3V0ZSBlcnJvciBjYWxsYmFjayovCiAgICAgICBTRVRfQklUKGhpMnMtPkVycm9yQ29kZSwgSEFMX0kyU19FUlJPUl9PVlIpOwotICAgICAgX19IQUxfSTJTX0NMRUFSX09WUkZMQUcoaGkycyk7CisgICAgICAvKiBDYWxsIHVzZXIgZXJyb3IgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVTCkKKyAgICAgIGhpMnMtPkVycm9yQ2FsbGJhY2soaGkycyk7CisjZWxzZQorICAgICAgSEFMX0kyU19FcnJvckNhbGxiYWNrKGhpMnMpOworI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgIH0KKyAgfQorCisgIGlmIChoaTJzLT5TdGF0ZSA9PSBIQUxfSTJTX1NUQVRFX0JVU1lfVFgpCisgIHsKKyAgICAvKiBJMlMgaW4gbW9kZSBUcmFuc21pdHRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgaWYgKEhBTF9JU19CSVRfU0VUKHRyaWdnZXIsIEkyU19GTEFHX1RYUCkgJiYgSEFMX0lTX0JJVF9DTFIodHJpZ2dlciwgSTJTX0ZMQUdfVURSKSkKKyAgICB7CisgICAgICBoaTJzLT5UeElTUihoaTJzKTsKICAgICB9CiAKICAgICAvKiBJMlMgVW5kZXJydW4gZXJyb3IgaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSAgICBpZiAoSTJTX0NIRUNLX0ZMQUcoaXRmbGFnLCBJMlNfRkxBR19VRFIpICE9IFJFU0VUKQorICAgIGlmIChIQUxfSVNfQklUX1NFVCh0cmlnZ2VyLCBJMlNfRkxBR19VRFIpKQogICAgIHsKICAgICAgIC8qIERpc2FibGUgVFhQIGFuZCBFUlIgaW50ZXJydXB0ICovCiAgICAgICBfX0hBTF9JMlNfRElTQUJMRV9JVChoaTJzLCAoSTJTX0lUX1RYUCB8IEkyU19JVF9FUlIpKTsKIAorICAgICAgLyogQ2xlYXIgVW5kZXJydW4gZmxhZyAqLworICAgICAgX19IQUxfSTJTX0NMRUFSX1VEUkZMQUcoaGkycyk7CisKKyAgICAgIC8qIFNldCB0aGUgSTJTIFN0YXRlIHJlYWR5ICovCisgICAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisKICAgICAgIC8qIFNldCB0aGUgZXJyb3IgY29kZSBhbmQgZXhlY3V0ZSBlcnJvciBjYWxsYmFjayovCiAgICAgICBTRVRfQklUKGhpMnMtPkVycm9yQ29kZSwgSEFMX0kyU19FUlJPUl9VRFIpOwotICAgICAgX19IQUxfSTJTX0NMRUFSX1VEUkZMQUcoaGkycyk7CisgICAgICAvKiBDYWxsIHVzZXIgZXJyb3IgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVTCkKKyAgICAgIGhpMnMtPkVycm9yQ2FsbGJhY2soaGkycyk7CisjZWxzZQorICAgICAgSEFMX0kyU19FcnJvckNhbGxiYWNrKGhpMnMpOworI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAgIH0KKyAgfQorICBpZiAoaGkycy0+U3RhdGUgPT0gSEFMX0kyU19TVEFURV9CVVNZX1RYX1JYKQorICB7CisgICAgLyogSTJTIGluIG1vZGUgVHJhbnNtaXR0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIGlmIChIQUxfSVNfQklUX1NFVCh0cmlnZ2VyLCBJMlNfRkxBR19EWFApKQorICAgIHsKKyAgICAgIGhpMnMtPlR4SVNSKGhpMnMpOworICAgICAgaGkycy0+UnhJU1IoaGkycyk7CisgICAgfQorICAgIC8qIEkyUyBpbiBtb2RlIFJlY2VpdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgaWYgKEhBTF9JU19CSVRfU0VUKHRyaWdnZXIsIEkyU19GTEFHX1JYUCkgJiYgSEFMX0lTX0JJVF9DTFIodHJpZ2dlciwgSTJTX0ZMQUdfRFhQKSkKKyAgICB7CisgICAgICBoaTJzLT5SeElTUihoaTJzKTsKKyAgICB9CisgICAgLyogSTJTIGluIG1vZGUgVHJhbnNtaXR0ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIGlmIChIQUxfSVNfQklUX1NFVCh0cmlnZ2VyLCBJMlNfRkxBR19UWFApICYmIEhBTF9JU19CSVRfQ0xSKHRyaWdnZXIsIEkyU19GTEFHX0RYUCkpCisgICAgeworICAgICAgaGkycy0+VHhJU1IoaGkycyk7CiAgICAgfQogCi0gICAgLyogSTJTIEZyYW1lIGVycm9yIGludGVycnVwdCBvY2N1cnJlZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgaWYgKEkyU19DSEVDS19GTEFHKGl0ZmxhZywgSTJTX0ZMQUdfRlJFKSAhPSBSRVNFVCkKKyAgICAvKiBJMlMgVW5kZXJydW4gZXJyb3IgaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICBpZiAoSEFMX0lTX0JJVF9TRVQodHJpZ2dlciwgSTJTX0ZMQUdfVURSKSkKICAgICB7Ci0gICAgICAvKiBEaXNhYmxlIEZSRSBhbmQgRVJSIGludGVycnVwdCAqLwotICAgICAgX19IQUxfSTJTX0RJU0FCTEVfSVQoaGkycywgKEkyU19JVF9GUkUgfCBJMlNfSVRfRVJSKSk7CisgICAgICAvKiBEaXNhYmxlIFRYUCBhbmQgRVJSIGludGVycnVwdCAqLworICAgICAgX19IQUxfSTJTX0RJU0FCTEVfSVQoaGkycywgKEkyU19JVF9UWFAgfCBJMlNfSVRfRVJSKSk7CisKKyAgICAgIC8qIENsZWFyIFVuZGVycnVuIGZsYWcgKi8KKyAgICAgIF9fSEFMX0kyU19DTEVBUl9VRFJGTEFHKGhpMnMpOworCisgICAgICAvKiBTZXQgdGhlIEkyUyBTdGF0ZSByZWFkeSAqLworICAgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOwogCiAgICAgICAvKiBTZXQgdGhlIGVycm9yIGNvZGUgYW5kIGV4ZWN1dGUgZXJyb3IgY2FsbGJhY2sqLwotICAgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfRlJFKTsKLSAgICAgIF9fSEFMX0kyU19DTEVBUl9GUkVGTEFHKGhpMnMpOworICAgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfVURSKTsKKyAgICAgIC8qIENhbGwgdXNlciBlcnJvciBjYWxsYmFjayAqLworI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVVMKQorICAgICAgaGkycy0+RXJyb3JDYWxsYmFjayhoaTJzKTsKKyNlbHNlCisgICAgICBIQUxfSTJTX0Vycm9yQ2FsbGJhY2soaGkycyk7CisjZW5kaWYgLyogVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTICovCiAgICAgfQogCi0gICAgLyogU2V0IHRoZSBJMlMgU3RhdGUgcmVhZHkgKi8KLSAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisgICAgLyogSTJTIE92ZXJydW4gZXJyb3IgaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgIGlmIChIQUxfSVNfQklUX1NFVCh0cmlnZ2VyLCBJMlNfRkxBR19PVlIpKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgUlhQIGFuZCBFUlIgaW50ZXJydXB0ICovCisgICAgICBfX0hBTF9JMlNfRElTQUJMRV9JVChoaTJzLCAoSTJTX0lUX1JYUCB8IEkyU19JVF9FUlIpKTsKIAotICAgIC8qIENhbGwgdXNlciBlcnJvciBjYWxsYmFjayAqLworICAgICAgLyogQ2xlYXIgT3ZlcnJ1biBmbGFnICovCisgICAgICBfX0hBTF9JMlNfQ0xFQVJfT1ZSRkxBRyhoaTJzKTsKKworICAgICAgLyogU2V0IHRoZSBJMlMgU3RhdGUgcmVhZHkgKi8KKyAgICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKKworCisgICAgICAvKiBTZXQgdGhlIGVycm9yIGNvZGUgYW5kIGV4ZWN1dGUgZXJyb3IgY2FsbGJhY2sqLworICAgICAgU0VUX0JJVChoaTJzLT5FcnJvckNvZGUsIEhBTF9JMlNfRVJST1JfT1ZSKTsKKworICAgICAgLyogQ2FsbCB1c2VyIGVycm9yIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVUwpCi0gICAgaGkycy0+RXJyb3JDYWxsYmFjayhoaTJzKTsKKyAgICAgIGhpMnMtPkVycm9yQ2FsbGJhY2soaGkycyk7CiAjZWxzZQotICAgIEhBTF9JMlNfRXJyb3JDYWxsYmFjayhoaTJzKTsKKyAgICAgIEhBTF9JMlNfRXJyb3JDYWxsYmFjayhoaTJzKTsKICNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKyAgICB9CiAgIH0KIH0KIApAQCAtMTU5Myw2ICsyMDI3LDM4IEBACiB9CiAKIC8qKgorICAqIEBicmllZiAgUnggVHJhbnNmZXIgaGFsZiBjb21wbGV0ZWQgY2FsbGJhY2tzCisgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK19fd2VhayB2b2lkIEhBTF9JMlNFeF9UeFJ4SGFsZkNwbHRDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaGkycyk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9JMlNfUnhIYWxmQ3BsdENhbGxiYWNrIGNvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKKyAgICovCit9CisKKy8qKgorICAqIEBicmllZiAgUnggVHJhbnNmZXIgY29tcGxldGVkIGNhbGxiYWNrcworICAqIEBwYXJhbSAgaGkycyBwb2ludGVyIHRvIGEgSTJTX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKKyAgKiAgICAgICAgIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBJMlMgbW9kdWxlCisgICogQHJldHZhbCBOb25lCisgICovCitfX3dlYWsgdm9pZCBIQUxfSTJTRXhfVHhSeENwbHRDYWxsYmFjayhJMlNfSGFuZGxlVHlwZURlZiAqaGkycykKK3sKKyAgLyogUHJldmVudCB1bnVzZWQgYXJndW1lbnQocykgY29tcGlsYXRpb24gd2FybmluZyAqLworICBVTlVTRUQoaGkycyk7CisKKyAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gU2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAorICAgICAgICAgICAgdGhlIEhBTF9JMlNfUnhDcGx0Q2FsbGJhY2sgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQorICAgKi8KK30KKworLyoqCiAgICogQGJyaWVmICBJMlMgZXJyb3IgY2FsbGJhY2tzCiAgICogQHBhcmFtICBoaTJzIHBvaW50ZXIgdG8gYSBJMlNfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucwogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIEkyUyBtb2R1bGUKQEAgLTE3NDMsNiArMjIwOSw0MiBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIERNQSBJMlMgdHJhbnNtaXQgcmVjZWl2ZSBwcm9jZXNzIGNvbXBsZXRlIGNhbGxiYWNrCisgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gYSBETUFfSGFuZGxlVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucworICAqICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgRE1BIG1vZHVsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3N0YXRpYyB2b2lkIEkyU0V4X0RNQVR4UnhDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBJMlNfSGFuZGxlVHlwZURlZiAqaGkycyA9IChJMlNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OworCisgIC8qIENhbGwgdXNlciBUeFJ4IGNvbXBsZXRlIGNhbGxiYWNrICovCisjaWYgKFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVSkKKyAgaGkycy0+VHhSeENwbHRDYWxsYmFjayhoaTJzKTsKKyNlbHNlCisgIEhBTF9JMlNFeF9UeFJ4Q3BsdENhbGxiYWNrKGhpMnMpOworI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLworfQorCisvKioKKyAgKiBAYnJpZWYgIERNQSBJMlMgdHJhbnNtaXQgcmVjZWl2ZSBwcm9jZXNzIGhhbGYgY29tcGxldGUgY2FsbGJhY2sKKyAgKiBAcGFyYW0gIGhkbWEgcG9pbnRlciB0byBhIERNQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCisgICogICAgICAgICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgbW9kdWxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLworc3RhdGljIHZvaWQgSTJTRXhfRE1BVHhSeEhhbGZDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBJMlNfSGFuZGxlVHlwZURlZiAqaGkycyA9IChJMlNfSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OworCisgIC8qIENhbGwgdXNlciBUeFJ4IEhhbGYgY29tcGxldGUgY2FsbGJhY2sgKi8KKyNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVKQorICBoaTJzLT5UeFJ4SGFsZkNwbHRDYWxsYmFjayhoaTJzKTsKKyNlbHNlCisgIEhBTF9JMlNFeF9UeFJ4SGFsZkNwbHRDYWxsYmFjayhoaTJzKTsKKyNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KK30KKworLyoqCiAgICogQGJyaWVmICBETUEgSTJTIGNvbW11bmljYXRpb24gZXJyb3IgY2FsbGJhY2sKICAgKiBAcGFyYW0gIGhkbWEgcG9pbnRlciB0byBhIERNQV9IYW5kbGVUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCiAgICogICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBETUEgbW9kdWxlLgpAQCAtMTc5MCwxMCArMjI5MiwxMyBAQAogCiAgIGlmIChoaTJzLT5UeFhmZXJDb3VudCA9PSAwVUwpCiAgIHsKLSAgICAvKiBEaXNhYmxlIFRYRSBhbmQgRVJSIGludGVycnVwdCAqLworICAgIC8qIERpc2FibGUgVFhQIGFuZCBFUlIgaW50ZXJydXB0ICovCiAgICAgX19IQUxfSTJTX0RJU0FCTEVfSVQoaGkycywgKEkyU19JVF9UWFAgfCBJMlNfSVRfRVJSKSk7CiAKLSAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CisgICAgaWYgKChoaTJzLT5Jbml0Lk1vZGUgPT0gSTJTX01PREVfU0xBVkVfVFgpIHx8KGhpMnMtPkluaXQuTW9kZSA9PSBJMlNfTU9ERV9NQVNURVJfVFgpKQorICAgIHsKKyAgICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKKyAgICB9CiAgICAgLyogQ2FsbCB1c2VyIFR4IGNvbXBsZXRlIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVUwpCiAgICAgaGkycy0+VHhDcGx0Q2FsbGJhY2soaGkycyk7CkBAIC0xODE4LDEwICsyMzIzLDEzIEBACiAKICAgaWYgKGhpMnMtPlR4WGZlckNvdW50ID09IDBVTCkKICAgewotICAgIC8qIERpc2FibGUgVFhFIGFuZCBFUlIgaW50ZXJydXB0ICovCisgICAgLyogRGlzYWJsZSBUWFAgYW5kIEVSUiBpbnRlcnJ1cHQgKi8KICAgICBfX0hBTF9JMlNfRElTQUJMRV9JVChoaTJzLCAoSTJTX0lUX1RYUCB8IEkyU19JVF9FUlIpKTsKIAotICAgIGhpMnMtPlN0YXRlID0gSEFMX0kyU19TVEFURV9SRUFEWTsKKyAgICBpZiAoKGhpMnMtPkluaXQuTW9kZSA9PSBJMlNfTU9ERV9TTEFWRV9UWCkgfHwoaGkycy0+SW5pdC5Nb2RlID09IEkyU19NT0RFX01BU1RFUl9UWCkpCisgICAgeworICAgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOworICAgIH0KICAgICAvKiBDYWxsIHVzZXIgVHggY29tcGxldGUgY2FsbGJhY2sgKi8KICNpZiAoVVNFX0hBTF9JMlNfUkVHSVNURVJfQ0FMTEJBQ0tTID09IDFVTCkKICAgICBoaTJzLT5UeENwbHRDYWxsYmFjayhoaTJzKTsKQEAgLTE4NTIsMTUgKzIzNjAsMzcgQEAKIAogICBpZiAoaGkycy0+UnhYZmVyQ291bnQgPT0gMFVMKQogICB7Ci0gICAgLyogRGlzYWJsZSBSWE5FIGFuZCBFUlIgaW50ZXJydXB0ICovCi0gICAgX19IQUxfSTJTX0RJU0FCTEVfSVQoaGkycywgKEkyU19JVF9SWFAgfCBJMlNfSVRfRVJSKSk7CisgICAgaWYgKElTX0kyU19GVUxMRFVQTEVYKGhpMnMtPkluaXQuTW9kZSkpCisgICAgeworICAgICAgLyogRGlzYWJsZSBUWFAsIFJYUCwgRFhQLCBFUlIgaW50ZXJydXB0cyAqLworICAgICAgX19IQUxfSTJTX0RJU0FCTEVfSVQoaGkycywgKEkyU19JVF9UWFAgfCBJMlNfSVRfUlhQIHwgSTJTX0lUX0RYUCB8IEkyU19JVF9FUlIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgUlhQIGFuZCBFUlIgaW50ZXJydXB0ICovCisgICAgICBfX0hBTF9JMlNfRElTQUJMRV9JVChoaTJzLCAoSTJTX0lUX1JYUCB8IEkyU19JVF9FUlIpKTsKKyAgICB9CiAKICAgICBoaTJzLT5TdGF0ZSA9IEhBTF9JMlNfU1RBVEVfUkVBRFk7CiAgICAgLyogQ2FsbCB1c2VyIFJ4IGNvbXBsZXRlIGNhbGxiYWNrICovCiAjaWYgKFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxVUwpCi0gICAgaGkycy0+UnhDcGx0Q2FsbGJhY2soaGkycyk7CisgICAgaWYgKElTX0kyU19GVUxMRFVQTEVYKGhpMnMtPkluaXQuTW9kZSkpCisgICAgeworICAgICAgaGkycy0+VHhSeENwbHRDYWxsYmFjayhoaTJzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhpMnMtPlJ4Q3BsdENhbGxiYWNrKGhpMnMpOworICAgIH0KICNlbHNlCi0gICAgSEFMX0kyU19SeENwbHRDYWxsYmFjayhoaTJzKTsKKyAgICBpZiAoSVNfSTJTX0ZVTExEVVBMRVgoaGkycy0+SW5pdC5Nb2RlKSkKKyAgICB7CisgICAgICBIQUxfSTJTRXhfVHhSeENwbHRDYWxsYmFjayhoaTJzKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIEhBTF9JMlNfUnhDcGx0Q2FsbGJhY2soaGkycyk7CisgICAgfQogI2VuZGlmIC8qIFVTRV9IQUxfSTJTX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogICB9CiB9CkBAIC0xODgwLDE1ICsyNDEwLDM3IEBACiAKICAgaWYgKGhpMnMtPlJ4WGZlckNvdW50ID09IDBVTCkKICAgewotICAgIC8qIERpc2FibGUgUlhORSBhbmQgRVJSIGludGVycnVwdCAqLwotICAgIF9fSEFMX0kyU19ESVNBQkxFX0lUKGhpMnMsIChJMlNfSVRfUlhQIHwgSTJTX0lUX0VSUikpOworICAgIGlmIChJU19JMlNfRlVMTERVUExFWChoaTJzLT5Jbml0Lk1vZGUpKQorICAgIHsKKyAgICAgIC8qIERpc2FibGUgVFhQLCBSWFAsIERYUCwgRVJSIGludGVycnVwdHMgKi8KKyAgICAgIF9fSEFMX0kyU19ESVNBQkxFX0lUKGhpMnMsIChJMlNfSVRfVFhQIHwgSTJTX0lUX1JYUCB8IEkyU19JVF9EWFAgfCBJMlNfSVRfRVJSKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBEaXNhYmxlIFJYUCBhbmQgRVJSIGludGVycnVwdCAqLworICAgICAgX19IQUxfSTJTX0RJU0FCTEVfSVQoaGkycywgKEkyU19JVF9SWFAgfCBJMlNfSVRfRVJSKSk7CisgICAgfQogCiAgICAgaGkycy0+U3RhdGUgPSBIQUxfSTJTX1NUQVRFX1JFQURZOwogICAgIC8qIENhbGwgdXNlciBSeCBjb21wbGV0ZSBjYWxsYmFjayAqLwogI2lmIChVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMVVMKQotICAgIGhpMnMtPlJ4Q3BsdENhbGxiYWNrKGhpMnMpOworICAgIGlmIChJU19JMlNfRlVMTERVUExFWChoaTJzLT5Jbml0Lk1vZGUpKQorICAgIHsKKyAgICAgIGhpMnMtPlR4UnhDcGx0Q2FsbGJhY2soaGkycyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBoaTJzLT5SeENwbHRDYWxsYmFjayhoaTJzKTsKKyAgICB9CiAjZWxzZQotICAgIEhBTF9JMlNfUnhDcGx0Q2FsbGJhY2soaGkycyk7CisgICAgaWYgKElTX0kyU19GVUxMRFVQTEVYKGhpMnMtPkluaXQuTW9kZSkpCisgICAgeworICAgICAgSEFMX0kyU0V4X1R4UnhDcGx0Q2FsbGJhY2soaGkycyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBIQUxfSTJTX1J4Q3BsdENhbGxiYWNrKGhpMnMpOworICAgIH0KICNlbmRpZiAvKiBVU0VfSEFMX0kyU19SRUdJU1RFUl9DQUxMQkFDS1MgKi8KICAgfQogfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfaTJzX2V4LmMgYi9TcmMvc3RtMzJoN3h4X2hhbF9pMnNfZXguYwppbmRleCA3OTRhNDU1Li5kYWQxYzU4IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9pMnNfZXguYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF9pMnNfZXguYwpAQCAtNSwxMyArNSw3IEBACiAgICogQGJyaWVmICAgSTJTIEhBTCBtb2R1bGUgZHJpdmVyLgogICAqICAgICAgICAgIFRoaXMgZmlsZSBwcm92aWRlcyBmaXJtd2FyZSBmdW5jdGlvbnMgdG8gbWFuYWdlIHRoZSBmb2xsb3dpbmcKICAgKiAgICAgICAgICBmdW5jdGlvbmFsaXRpZXMgb2YgSTJTIGV4dGVuc2lvbiBwZXJpcGhlcmFsOgotICAqICAgICAgICAgICArIEV4dGVuc2lvbiBmZWF0dXJlcyBGdW5jdGlvbnMKLSAgKgotICBAdmVyYmF0aW0KLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICMjIyMjIEkyUyBFeHRlbnNpb24gZmVhdHVyZXMgIyMjIyMKLSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIFRoZSBJMlMgRnVsbCBkdXBsZXggZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgSEFMIERyaXZlciAgCisgICogICAgICAgICAgICsgRXh0ZW5zaW9uIGZlYXR1cmVzIEZ1bmN0aW9ucyAKICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICogQGF0dGVudGlvbgogICAqCkBAIC0yNSw0ICsxOSwxNSBAQAogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqLworICAKKy8qKgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICA9PT09PSBJMlMgRlVMTCBEVVBMRVggRkVBVFVSRSA9PT09PQorICAgICAgIEkyUyBGdWxsIER1cGxleCBBUElzIGFyZSBhdmFpbGFibGUgaW4gc3RtMzJoN3h4X2hhbF9pMnMuYy8uaAorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKi8KKworCisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIFNUTWljcm9lbGVjdHJvbmljcyAqKioqKkVORCBPRiBGSUxFKioqKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX2l3ZGcuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX2l3ZGcuYwppbmRleCAwMmJhZjBhLi5kOTBiZmIxIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9pd2RnLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfaXdkZy5jCkBAIC0xNiwzNCArMTYsNDQgQEAKICAgICAoKykgVGhlIElXREcgY2FuIGJlIHN0YXJ0ZWQgYnkgZWl0aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlIChjb25maWd1cmFibGUKICAgICAgICAgdGhyb3VnaCBvcHRpb24gYnl0ZSkuCiAKLSAgICAoKykgVGhlIElXREcgaXMgY2xvY2tlZCBieSBMb3ctU3BlZWQgY2xvY2sgKExTSSkgYW5kIHRodXMgc3RheXMgYWN0aXZlIGV2ZW4KLSAgICAgICAgaWYgdGhlIG1haW4gY2xvY2sgZmFpbHMuCisgICAgKCspIFRoZSBJV0RHIGlzIGNsb2NrZWQgYnkgdGhlIExvdy1TcGVlZCBJbnRlcm5hbCBjbG9jayAoTFNJKSBhbmQgdGh1cyBzdGF5cworICAgICAgICBhY3RpdmUgZXZlbiBpZiB0aGUgbWFpbiBjbG9jayBmYWlscy4KIAotICAgICgrKSBPbmNlIHRoZSBJV0RHIGlzIHN0YXJ0ZWQsIHRoZSBMU0kgaXMgZm9yY2VkIE9OIGFuZCBib3RoIGNhbiBub3QgYmUKKyAgICAoKykgT25jZSB0aGUgSVdERyBpcyBzdGFydGVkLCB0aGUgTFNJIGlzIGZvcmNlZCBPTiBhbmQgYm90aCBjYW5ub3QgYmUKICAgICAgICAgZGlzYWJsZWQuIFRoZSBjb3VudGVyIHN0YXJ0cyBjb3VudGluZyBkb3duIGZyb20gdGhlIHJlc2V0IHZhbHVlICgweEZGRikuCiAgICAgICAgIFdoZW4gaXQgcmVhY2hlcyB0aGUgZW5kIG9mIGNvdW50IHZhbHVlICgweDAwMCkgYSByZXNldCBzaWduYWwgaXMKICAgICAgICAgZ2VuZXJhdGVkIChJV0RHIHJlc2V0KS4KIAogICAgICgrKSBXaGVuZXZlciB0aGUga2V5IHZhbHVlIDB4MDAwMCBBQUFBIGlzIHdyaXR0ZW4gaW4gdGhlIElXREdfS1IgcmVnaXN0ZXIsCi0gICAgICAgIHRoZSBJV0RHX1JMUiB2YWx1ZSBpcyByZWxvYWRlZCBpbiB0aGUgY291bnRlciBhbmQgdGhlIHdhdGNoZG9nIHJlc2V0IGlzCi0gICAgICAgIHByZXZlbnRlZC4KKyAgICAgICAgdGhlIElXREdfUkxSIHZhbHVlIGlzIHJlbG9hZGVkIGludG8gdGhlIGNvdW50ZXIgYW5kIHRoZSB3YXRjaGRvZyByZXNldAorICAgICAgICBpcyBwcmV2ZW50ZWQuCiAKICAgICAoKykgVGhlIElXREcgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIFZERCB2b2x0YWdlIGRvbWFpbiB0aGF0IGlzIHN0aWxsIGZ1bmN0aW9uYWwKLSAgICAgICAgaW4gU1RPUCBhbmQgU1RBTkRCWSBtb2RlIChJV0RHIHJlc2V0IGNhbiB3YWtlLXVwIGZyb20gU1RBTkRCWSkuCisgICAgICAgIGluIFNUT1AgYW5kIFNUQU5EQlkgbW9kZSAoSVdERyByZXNldCBjYW4gd2FrZSB1cCB0aGUgQ1BVIGZyb20gU1RBTkRCWSkuCiAgICAgICAgIElXREdSU1QgZmxhZyBpbiBSQ0NfQ1NSIHJlZ2lzdGVyIGNhbiBiZSB1c2VkIHRvIGluZm9ybSB3aGVuIGFuIElXREcKICAgICAgICAgcmVzZXQgb2NjdXJzLgogCi0gICAgKCspIERlYnVnIG1vZGUgOiBXaGVuIHRoZSBtaWNyb2NvbnRyb2xsZXIgZW50ZXJzIGRlYnVnIG1vZGUgKGNvcmUgaGFsdGVkKSwKKyAgICAoKykgRGVidWcgbW9kZTogV2hlbiB0aGUgbWljcm9jb250cm9sbGVyIGVudGVycyBkZWJ1ZyBtb2RlIChjb3JlIGhhbHRlZCksCiAgICAgICAgIHRoZSBJV0RHIGNvdW50ZXIgZWl0aGVyIGNvbnRpbnVlcyB0byB3b3JrIG5vcm1hbGx5IG9yIHN0b3BzLCBkZXBlbmRpbmcKICAgICAgICAgb24gREJHX0lXREdfU1RPUCBjb25maWd1cmF0aW9uIGJpdCBpbiBEQkcgbW9kdWxlLCBhY2Nlc3NpYmxlIHRocm91Z2gKICAgICAgICAgX19IQUxfREJHTUNVX0ZSRUVaRV9JV0RHMSgpIG9yIF9fSEFMX0RCR01DVV9GUkVFWkUyX0lXREcyKCkgYW5kCiAgICAgICAgIF9fSEFMX0RCR01DVV9VbkZyZWV6ZV9JV0RHMSBvciBfX0hBTF9EQkdNQ1VfVW5GcmVlemUyX0lXREcyKCkgbWFjcm9zLgogCiAgICAgWy4uXSBNaW4tbWF4IHRpbWVvdXQgdmFsdWUgQDMyS0h6IChMU0kpOiB+MTI1dXMgLyB+MzIuN3MKLSAgICAgICAgIFRoZSBJV0RHIHRpbWVvdXQgbWF5IHZhcnkgZHVlIHRvIExTSSBmcmVxdWVuY3kgZGlzcGVyc2lvbi4gU1RNMzJIN3h4Ci0gICAgICAgICBkZXZpY2VzIHByb3ZpZGUgdGhlIGNhcGFiaWxpdHkgdG8gbWVhc3VyZSB0aGUgTFNJIGZyZXF1ZW5jeSAoTFNJIGNsb2NrCi0gICAgICAgICBjb25uZWN0ZWQgaW50ZXJuYWxseSB0byBUSU0xNiBDSDEgaW5wdXQgY2FwdHVyZSkuIFRoZSBtZWFzdXJlZCB2YWx1ZQotICAgICAgICAgY2FuIGJlIHVzZWQgdG8gaGF2ZSBhbiBJV0RHIHRpbWVvdXQgd2l0aCBhbiBhY2NlcHRhYmxlIGFjY3VyYWN5LgorICAgICAgICAgVGhlIElXREcgdGltZW91dCBtYXkgdmFyeSBkdWUgdG8gTFNJIGNsb2NrIGZyZXF1ZW5jeSBkaXNwZXJzaW9uLgorICAgICAgICAgU1RNMzJIN3h4IGRldmljZXMgcHJvdmlkZSB0aGUgY2FwYWJpbGl0eSB0byBtZWFzdXJlIHRoZSBMU0kgY2xvY2sKKyAgICAgICAgIGZyZXF1ZW5jeSAoTFNJIGNsb2NrIGlzIGludGVybmFsbHkgY29ubmVjdGVkIHRvIFRJTTE2IENIMSBpbnB1dCBjYXB0dXJlKS4KKyAgICAgICAgIFRoZSBtZWFzdXJlZCB2YWx1ZSBjYW4gYmUgdXNlZCB0byBoYXZlIGFuIElXREcgdGltZW91dCB3aXRoIGFuCisgICAgICAgICBhY2NlcHRhYmxlIGFjY3VyYWN5LgorCisgICAgWy4uXSBEZWZhdWx0IHRpbWVvdXQgdmFsdWUgKG5lY2Vzc2FyeSBmb3IgSVdER19TUiBzdGF0dXMgcmVnaXN0ZXIgdXBkYXRlKToKKyAgICAgICAgIENvbnN0YW50IExTSV9WQUxVRSBpcyBkZWZpbmVkIGJhc2VkIG9uIHRoZSBub21pbmFsIExTSSBjbG9jayBmcmVxdWVuY3kuCisgICAgICAgICBUaGlzIGZyZXF1ZW5jeSBiZWluZyBzdWJqZWN0IHRvIHZhcmlhdGlvbnMgYXMgbWVudGlvbmVkIGFib3ZlLCB0aGUgCisgICAgICAgICBkZWZhdWx0IHRpbWVvdXQgdmFsdWUgKGRlZmluZWQgdGhyb3VnaCBjb25zdGFudCBIQUxfSVdER19ERUZBVUxUX1RJTUVPVVQKKyAgICAgICAgIGJlbG93KSBtYXkgYmVjb21lIHRvbyBzaG9ydCBvciB0b28gbG9uZy4KKyAgICAgICAgIEluIHN1Y2ggY2FzZXMsIHRoaXMgZGVmYXVsdCB0aW1lb3V0IHZhbHVlIGNhbiBiZSB0dW5lZCBieSByZWRlZmluaW5nCisgICAgICAgICB0aGUgY29uc3RhbnQgTFNJX1ZBTFVFIGF0IHVzZXItYXBwbGljYXRpb24gbGV2ZWwgKGJhc2VkLCBmb3IgaW5zdGFuY2UsCisgICAgICAgICBvbiB0aGUgbWVhc3VyZWQgTFNJIGNsb2NrIGZyZXF1ZW5jeSBhcyBleHBsYWluZWQgYWJvdmUpLgogCiAgICAgICAgICAgICAgICAgICAgICAjIyMjIyBIb3cgdG8gdXNlIHRoaXMgZHJpdmVyICMjIyMjCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTA5LDEwICsxMTksMTQgQEAKIC8qKiBAZGVmZ3JvdXAgSVdER19Qcml2YXRlX0RlZmluZXMgSVdERyBQcml2YXRlIERlZmluZXMKICAgKiBAewogICAqLwotLyogU3RhdHVzIHJlZ2lzdGVyIG5lZWQgNSBSQyBMU0kgZGl2aWRlZCBieSBwcmVzY2FsZXIgY2xvY2sgdG8gYmUgdXBkYXRlZC4gV2l0aAotICAgaGlnaGVyIHByZXNjYWxlciAoMjU2KSwgYW5kIGFjY29yZGluZyB0byBMU0kgdmFyaWF0aW9uLCB3ZSBuZWVkIHRvIHdhaXQgYXQKLSAgIGxlYXN0IDYgY3ljbGVzIHNvIDQ4IG1zLiAqLwotI2RlZmluZSBIQUxfSVdER19ERUZBVUxUX1RJTUVPVVQgICAgICAgICAgICA0OHUKKy8qIFN0YXR1cyByZWdpc3RlciBuZWVkcyB1cCB0byA1IExTSSBjbG9jayBwZXJpb2RzIGRpdmlkZWQgYnkgdGhlIGNsb2NrCisgICBwcmVzY2FsZXIgdG8gYmUgdXBkYXRlZC4gVGhlIG51bWJlciBvZiBMU0kgY2xvY2sgcGVyaW9kcyBpcyB1cHBlci1yb3VuZGVkIHRvCisgICA2IGZvciB0aGUgdGltZW91dCB2YWx1ZSBjYWxjdWxhdGlvbi4KKyAgIFRoZSB0aW1lb3V0IHZhbHVlIGlzIGFsc28gY2FsY3VsYXRlZCB1c2luZyB0aGUgaGlnaGVzdCBwcmVzY2FsZXIgKDI1NikgYW5kCisgICB0aGUgTFNJX1ZBTFVFIGNvbnN0YW50LiBUaGUgdmFsdWUgb2YgdGhpcyBjb25zdGFudCBjYW4gYmUgY2hhbmdlZCBieSB0aGUgdXNlcgorICAgdG8gdGFrZSBpbnRvIGFjY291bnQgcG9zc2libGUgTFNJIGNsb2NrIHBlcmlvZCB2YXJpYXRpb25zLgorICAgVGhlIHRpbWVvdXQgdmFsdWUgaXMgbXVsdGlwbGllZCBieSAxMDAwIHRvIGJlIGNvbnZlcnRlZCBpbiBtaWxsaXNlY29uZHMuICovCisjZGVmaW5lIEhBTF9JV0RHX0RFRkFVTFRfVElNRU9VVCAoKDZVTCAqIDI1NlVMICogMTAwMFVMKSAvIExTSV9WQUxVRSkKIC8qKgogICAqIEB9CiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9qcGVnLmMgYi9TcmMvc3RtMzJoN3h4X2hhbF9qcGVnLmMKaW5kZXggMjIzNTc0Zi4uMTYwYjBmNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfanBlZy5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX2pwZWcuYwpAQCAtMjIzLDE1ICsyMjMsMTUgQEAKICAgKiBAewogICAqLwogCisjaWZkZWYgSEFMX0pQRUdfTU9EVUxFX0VOQUJMRUQKKworI2lmIGRlZmluZWQgKEpQRUcpCisKIC8qKiBAZGVmZ3JvdXAgSlBFRyBKUEVHCiAgICogQGJyaWVmIEpQRUcgSEFMIG1vZHVsZSBkcml2ZXIuCiAgICogQHsKICAgKi8KIAotI2lmZGVmIEhBTF9KUEVHX01PRFVMRV9FTkFCTEVECi0KLSNpZiBkZWZpbmVkIChKUEVHKQotCiAvKiBQcml2YXRlIGRlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIEpQRUdfUHJpdmF0ZV9Db25zdGFudHMKICAgKiBAewpAQCAtNDE4NiwxMSArNDE4NiwxMiBAQAogICAqIEB9CiAgICovCiAKLSNlbmRpZiAvKiBKUEVHICovCi0jZW5kaWYgLyogSEFMX0pQRUdfTU9EVUxFX0VOQUJMRUQgKi8KIC8qKgogICAqIEB9CiAgICovCisjZW5kaWYgLyogSlBFRyAqLworI2VuZGlmIC8qIEhBTF9KUEVHX01PRFVMRV9FTkFCTEVEICovCisKIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX21tYy5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfbW1jLmMKaW5kZXggMjI3YTFhNC4uYWQ2OTMzNCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfbW1jLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfbW1jLmMKQEAgLTM4NywxMyArMzg3LDE3IEBACiB7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIE1NQ19Jbml0VHlwZURlZiBJbml0OworICB1aW50MzJfdCBzZG1tY19jbGs7CiAKICAgLyogRGVmYXVsdCBTRE1NQyBwZXJpcGhlcmFsIGNvbmZpZ3VyYXRpb24gZm9yIE1NQyBjYXJkIGluaXRpYWxpemF0aW9uICovCiAgIEluaXQuQ2xvY2tFZGdlICAgICAgICAgICA9IFNETU1DX0NMT0NLX0VER0VfUklTSU5HOwogICBJbml0LkNsb2NrUG93ZXJTYXZlICAgICAgPSBTRE1NQ19DTE9DS19QT1dFUl9TQVZFX0RJU0FCTEU7CiAgIEluaXQuQnVzV2lkZSAgICAgICAgICAgICA9IFNETU1DX0JVU19XSURFXzFCOwogICBJbml0LkhhcmR3YXJlRmxvd0NvbnRyb2wgPSBTRE1NQ19IQVJEV0FSRV9GTE9XX0NPTlRST0xfRElTQUJMRTsKLSAgSW5pdC5DbG9ja0RpdiAgICAgICAgICAgID0gU0RNTUNfSU5JVF9DTEtfRElWOworCisgIC8qIEluaXQgQ2xvY2sgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgdG8gNDAwS2h6Ki8KKyAgc2RtbWNfY2xrICAgICA9IEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKFJDQ19QRVJJUEhDTEtfU0RNTUMpOworICBJbml0LkNsb2NrRGl2ID0gc2RtbWNfY2xrLygyVSo0MDAwMDBVKTsKIAogICAvKiBJbml0aWFsaXplIFNETU1DIHBlcmlwaGVyYWwgaW50ZXJmYWNlIHdpdGggZGVmYXVsdCBjb25maWd1cmF0aW9uICovCiAgICh2b2lkKVNETU1DX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOwpAQCAtNDAxLDYgKzQwNSwxOSBAQAogICAvKiBTZXQgUG93ZXIgU3RhdGUgdG8gT04gKi8KICAgKHZvaWQpU0RNTUNfUG93ZXJTdGF0ZV9PTihobW1jLT5JbnN0YW5jZSk7CiAKKyAgLyogd2FpdCA3NCBDeWNsZXM6IHJlcXVpcmVkIHBvd2VyIHVwIHdhaXRpbmcgdGltZSBiZWZvcmUgc3RhcnRpbmcKKyAgICAgdGhlIE1NQyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSAqLworICBzZG1tY19jbGsgPSBzZG1tY19jbGsvKDJVKkluaXQuQ2xvY2tEaXYpOworCisgIGlmKHNkbW1jX2NsayAhPSAwVSkKKyAgeworICAgIEhBTF9EZWxheSgxVSsgKDc0VSoxMDAwVS8oc2RtbWNfY2xrKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIEhBTF9EZWxheSgyVSk7CisgIH0KKwogICAvKiBJZGVudGlmeSBjYXJkIG9wZXJhdGluZyB2b2x0YWdlICovCiAgIGVycm9yc3RhdGUgPSBNTUNfUG93ZXJPTihobW1jKTsKICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCkBAIC0xMzMwLDcgKzEzNDcsNyBAQAogICAgIH0KIAogICAgIC8qIFNlbmQgQ01EMzggRVJBU0UgKi8KLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2UoaG1tYy0+SW5zdGFuY2UpOworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRFcmFzZShobW1jLT5JbnN0YW5jZSwgMFVMKTsKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKICAgICB7CiAgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLwpAQCAtMjA3NywxMCArMjA5NCwxMCBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19Db25maWdXaWRlQnVzT3BlcmF0aW9uKE1NQ19IYW5kbGVUeXBlRGVmICpobW1jLCB1aW50MzJfdCBXaWRlTW9kZSkKIHsKLSAgX19JTyB1aW50MzJfdCBjb3VudCA9IDBVOworICB1aW50MzJfdCBjb3VudDsKICAgU0RNTUNfSW5pdFR5cGVEZWYgSW5pdDsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKLSAgdWludDMyX3QgcmVzcG9uc2UgPSAwVSwgYnVzeSA9IDBVOworICB1aW50MzJfdCByZXNwb25zZSA9IDBVOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19TRE1NQ19CVVNfV0lERShXaWRlTW9kZSkpOwpAQCAtMjA5MSwxMDIgKzIxMDgsNzkgQEAKICAgaWYoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfOEIpCiAgIHsKICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwMjAwVSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0gICAgfQogICB9CiAgIGVsc2UgaWYoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfNEIpCiAgIHsKICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwMTAwVSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0gICAgfQogICB9CiAgIGVsc2UgaWYoV2lkZU1vZGUgPT0gU0RNTUNfQlVTX1dJREVfMUIpCiAgIHsKICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQjcwMDAwVSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgewotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7Ci0gICAgfQogICB9CiAgIGVsc2UKICAgewogICAgIC8qIFdpZGVNb2RlIGlzIG5vdCBhIHZhbGlkIGFyZ3VtZW50Ki8KLSAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9QQVJBTTsKKyAgICBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9QQVJBTTsKICAgfQogCiAgIC8qIENoZWNrIGZvciBzd2l0Y2ggZXJyb3IgYW5kIHZpb2xhdGlvbiBvZiB0aGUgdHJpYWwgbnVtYmVyIG9mIHNlbmRpbmcgQ01EIDEzICovCi0gIHdoaWxlKGJ1c3kgPT0gMFUpCisgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7Ci0gICAgaWYoY291bnQgPT0gU0RNTUNfTUFYX1RSSUFMKQotICAgIHsKLSAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKLSAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1JFUVVFU1RfTk9UX0FQUExJQ0FCTEU7Ci0gICAgICByZXR1cm4gSEFMX0VSUk9SOwotICAgIH0KLSAgICBjb3VudCsrOwotCiAgICAgLyogV2hpbGUgY2FyZCBpcyBub3QgcmVhZHkgZm9yIGRhdGEgYW5kIHRyaWFsIG51bWJlciBmb3Igc2VuZGluZyBDTUQxMyBpcyBub3QgZXhjZWVkZWQgKi8KLSAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgY291bnQgPSBTRE1NQ19NQVhfVFJJQUw7CisgICAgZG8KICAgICB7Ci0gICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKLSAgICB9Ci0KLSAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLwotICAgIHJlc3BvbnNlID0gU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKTsKLQotICAgIC8qIEdldCBvcGVyYXRpbmcgdm9sdGFnZSovCi0gICAgYnVzeSA9ICgoKHJlc3BvbnNlID4+IDdVKSA9PSAxVSkgPyAwVSA6IDFVKTsKLSAgfQotCi0gIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCi0gIGNvdW50ID0gU0RNTUNfREFUQVRJTUVPVVQ7Ci0gIHdoaWxlKChyZXNwb25zZSAmIDB4MDAwMDAxMDBVKSA9PSAwVSkKLSAgewotICAgIGlmKGNvdW50ID09IDBVKQorICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOworICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgCisgICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLworICAgICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOworICAgICAgY291bnQtLTsKKyAgICB9d2hpbGUoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpOworICAgIAorICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLworICAgIGlmICgoY291bnQgIT0gMFUpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCiAgICAgewotICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOwotICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUkVRVUVTVF9OT1RfQVBQTElDQUJMRTsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAvKiBDaGVjayB0aGUgYml0IFNXSVRDSF9FUlJPUiBvZiB0aGUgZGV2aWNlIHN0YXR1cyAqLworICAgICAgaWYgKChyZXNwb25zZSAmIDB4ODBVKSAhPSAwVSkKKyAgICAgIHsKKyAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX0dFTkVSQUxfVU5LTk9XTl9FUlI7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgU0RNTUMgcGVyaXBoZXJhbCAqLworICAgICAgICBJbml0LkNsb2NrRWRnZSAgICAgICAgICAgPSBobW1jLT5Jbml0LkNsb2NrRWRnZTsKKyAgICAgICAgSW5pdC5DbG9ja1Bvd2VyU2F2ZSAgICAgID0gaG1tYy0+SW5pdC5DbG9ja1Bvd2VyU2F2ZTsKKyAgICAgICAgSW5pdC5CdXNXaWRlICAgICAgICAgICAgID0gV2lkZU1vZGU7CisgICAgICAgIEluaXQuSGFyZHdhcmVGbG93Q29udHJvbCA9IGhtbWMtPkluaXQuSGFyZHdhcmVGbG93Q29udHJvbDsKKyAgICAgICAgSW5pdC5DbG9ja0RpdiAgICAgICAgICAgID0gaG1tYy0+SW5pdC5DbG9ja0RpdjsKKyAgICAgICAgKHZvaWQpU0RNTUNfSW5pdChobW1jLT5JbnN0YW5jZSwgSW5pdCk7CisgICAgICB9CiAgICAgfQotICAgIGNvdW50LS07Ci0KLSAgICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICBlbHNlIGlmIChjb3VudCA9PSAwVSkKICAgICB7Ci0gICAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9USU1FT1VUOwogICAgIH0KLQotICAgIC8qIEdldCBjb21tYW5kIHJlc3BvbnNlICovCi0gICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOwotICB9Ci0KLSAgaWYoaG1tYy0+RXJyb3JDb2RlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKLSAgewotICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCi0gICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKLSAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfUkVBRFk7Ci0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCi0gIHsKLSAgICAvKiBDb25maWd1cmUgdGhlIFNETU1DIHBlcmlwaGVyYWwgKi8KLSAgICBJbml0LkNsb2NrRWRnZSAgICAgICAgICAgPSBobW1jLT5Jbml0LkNsb2NrRWRnZTsKLSAgICBJbml0LkNsb2NrUG93ZXJTYXZlICAgICAgPSBobW1jLT5Jbml0LkNsb2NrUG93ZXJTYXZlOwotICAgIEluaXQuQnVzV2lkZSAgICAgICAgICAgICA9IFdpZGVNb2RlOwotICAgIEluaXQuSGFyZHdhcmVGbG93Q29udHJvbCA9IGhtbWMtPkluaXQuSGFyZHdhcmVGbG93Q29udHJvbDsKLSAgICBJbml0LkNsb2NrRGl2ICAgICAgICAgICAgPSBobW1jLT5Jbml0LkNsb2NrRGl2OwotICAgICh2b2lkKVNETU1DX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOworICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgfQogICB9CiAKICAgLyogQ2hhbmdlIFN0YXRlICovCiAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKIAorICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgeworICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKKyAgICBobW1jLT5FcnJvckNvZGUgfD0gZXJyb3JzdGF0ZTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKICAgcmV0dXJuIEhBTF9PSzsKIH0KIApAQCAtMjQ0OSw2ICsyNDQzLDM5MyBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFBlcmZvcm0gc3BlY2lmaWMgY29tbWFuZHMgc2VxdWVuY2UgZm9yIHRoZSBkaWZmZXJlbnQgdHlwZSBvZiBlcmFzZS4KKyAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKKyAgKiAgICAgICAgIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkuCisgICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEBwYXJhbSAgRXJhc2VUeXBlIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBlcmFzZSB0byBiZSBwZXJmb3JtZWQKKyAgKiAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX0VSQVNFIEVyYXNlIHRoZSBlcmFzZSBncm91cHMgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2CisgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfVFJJTSBFcmFzZSB0aGUgd3JpdGUgYmxvY2tzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNgorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX0RJU0NBUkQgRGlzY2FyZCB0aGUgd3JpdGUgYmxvY2tzIGlkZW50aWZpZWQgYnkgQ01EMzUgJiAzNgorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NFQ1VSRV9FUkFTRSBQZXJmb3JtIGEgc2VjdXJlIHB1cmdlIGFjY29yZGluZyBTUlQgb24gdGhlIGVyYXNlIGdyb3VwcyBpZGVudGlmaWVkIGJ5IENNRDM1ICYgMzYKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMSBNYXJrIHRoZSB3cml0ZSBibG9ja3MgaWRlbnRpZmllZCBieSBDTUQzNSAmIDM2IGZvciBzZWN1cmUgZXJhc2UKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TRUNVUkVfVFJJTV9TVEVQMiBQZXJmb3JtIGEgc2VjdXJlIHB1cmdlIGFjY29yZGluZyBTUlQgb24gdGhlIHdyaXRlIGJsb2NrcyBwcmV2aW91c2x5IGlkZW50aWZpZWQKKyAgKiBAcGFyYW0gIEJsb2NrU3RhcnRBZGQgU3RhcnQgQmxvY2sgYWRkcmVzcworICAqIEBwYXJhbSAgQmxvY2tFbmRBZGQgRW5kIEJsb2NrIGFkZHJlc3MKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfRXJhc2VTZXF1ZW5jZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgdWludDMyX3QgRXJhc2VUeXBlLCB1aW50MzJfdCBCbG9ja1N0YXJ0QWRkLCB1aW50MzJfdCBCbG9ja0VuZEFkZCkKK3sKKyAgdWludDMyX3QgZXJyb3JzdGF0ZTsKKyAgdWludDMyX3Qgc3RhcnRfYWRkID0gQmxvY2tTdGFydEFkZDsKKyAgdWludDMyX3QgZW5kX2FkZCA9IEJsb2NrRW5kQWRkOworICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworCisgIC8qIENoZWNrIHRoZSBlcmFzZSB0eXBlIHZhbHVlIGlzIGNvcnJlY3QgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX01NQ19FUkFTRV9UWVBFKEVyYXNlVHlwZSkpOworCisgIC8qIENoZWNrIHRoZSBjb2hlcmVuY2UgYmV0d2VlbiBzdGFydCBhbmQgZW5kIGFkZHJlc3MgKi8KKyAgaWYoZW5kX2FkZCA8IHN0YXJ0X2FkZCkKKyAgeworICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX1BBUkFNOworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBDaGVjayB0aGF0IHRoZSBlbmQgYWRkcmVzcyBpcyBub3Qgb3V0IG9mIHJhbmdlIG9mIGRldmljZSBtZW1vcnkgKi8KKyAgaWYoZW5kX2FkZCA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKKyAgeworICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBDaGVjayBpZiB0aGUgY2FyZCBjb21tYW5kIGNsYXNzIHN1cHBvcnRzIGVyYXNlIGNvbW1hbmQgKi8KKyAgaWYoKChobW1jLT5NbWNDYXJkLkNsYXNzKSAmIFNETU1DX0NDQ0NfRVJBU0UpID09IDBVKQorICB7CisgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfUkVRVUVTVF9OT1RfQVBQTElDQUJMRTsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogQ2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBkcml2ZXIgKi8KKyAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKKyAgeworICAgIC8qIENoYW5nZSBTdGF0ZSAqLworICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOworCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgY2FyZCBpcyBub3QgbG9ja2VkICovCisgICAgaWYoKFNETU1DX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSkgJiBTRE1NQ19DQVJEX0xPQ0tFRCkgPT0gU0RNTUNfQ0FSRF9MT0NLRUQpCisgICAgeworICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IEhBTF9NTUNfRVJST1JfTE9DS19VTkxPQ0tfRkFJTEVEOworICAgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisKKyAgICAvKiBJbiBjYXNlIG9mIGxvdyBjYXBhY2l0eSBjYXJkLCB0aGUgYWRkcmVzcyBpcyBub3QgYmxvY2sgbnVtYmVyIGJ1dCBieXRlcyAqLworICAgIGlmICgoaG1tYy0+TW1jQ2FyZC5DYXJkVHlwZSkgIT0gTU1DX0hJR0hfQ0FQQUNJVFlfQ0FSRCkKKyAgICB7CisgICAgICBzdGFydF9hZGQgKj0gNTEyVTsKKyAgICAgIGVuZF9hZGQgICAqPSA1MTJVOworICAgIH0KKworICAgIC8qIFNlbmQgQ01EMzUgTU1DX0VSQVNFX0dSUF9TVEFSVCB3aXRoIHN0YXJ0IGFkZHJlc3MgYXMgYXJndW1lbnQgKi8KKyAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kRXJhc2VTdGFydEFkZChobW1jLT5JbnN0YW5jZSwgc3RhcnRfYWRkKTsKKyAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAvKiBTZW5kIENNRDM2IE1NQ19FUkFTRV9HUlBfRU5EIHdpdGggZW5kIGFkZHJlc3MgYXMgYXJndW1lbnQgKi8KKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRFcmFzZUVuZEFkZChobW1jLT5JbnN0YW5jZSwgZW5kX2FkZCk7CisgICAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgIHsKKyAgICAgICAgLyogU2VuZCBDTUQzOCBFUkFTRSB3aXRoIGVyYXNlIHR5cGUgYXMgYXJndW1lbnQgKi8KKyAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEVyYXNlKGhtbWMtPkluc3RhbmNlLCBFcmFzZVR5cGUpOworICAgICAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgIGlmICgoRXJhc2VUeXBlID09IEhBTF9NTUNfU0VDVVJFX0VSQVNFKSB8fCAoRXJhc2VUeXBlID09IEhBTF9NTUNfU0VDVVJFX1RSSU1fU1RFUDIpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdhaXQgdGhhdCB0aGUgZGV2aWNlIGlzIHJlYWR5IGJ5IGNoZWNraW5nIHRoZSBEMCBsaW5lICovCisgICAgICAgICAgICB3aGlsZSgoIV9fSEFMX01NQ19HRVRfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0JVU1lEMEVORCkpICYmIChlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmKChIQUxfR2V0VGljaygpLXRpY2tzdGFydCkgPj0gU0RNTUNfTUFYRVJBU0VUSU1FT1VUKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3JzdGF0ZSA9IEhBTF9NTUNfRVJST1JfVElNRU9VVDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBDbGVhciB0aGUgZmxhZyBjb3JyZXNwb25kaW5nIHRvIGVuZCBEMCBidXMgbGluZSAqLworICAgICAgICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfRkxBR19CVVNZRDBFTkQpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIENoYW5nZSBTdGF0ZSAqLworICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKworICAgIC8qIE1hbmFnZSBlcnJvcnMgKi8KKyAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKKyAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOworCisgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfVElNRU9VVCkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgUGVyZm9ybSBzYW5pdGl6ZSBvcGVyYXRpb24gb24gdGhlIGRldmljZS4KKyAgKiBAbm90ZSAgIFRoaXMgQVBJIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGNoZWNrIG9uIHRoZSBjYXJkIHN0YXRlIHRocm91Z2gKKyAgKiAgICAgICAgIEhBTF9NTUNfR2V0Q2FyZFN0YXRlKCkuCisgICogQHBhcmFtICBobW1jIFBvaW50ZXIgdG8gTU1DIGhhbmRsZQorICAqIEByZXR2YWwgSEFMIHN0YXR1cworICAqLworSEFMX1N0YXR1c1R5cGVEZWYgSEFMX01NQ19TYW5pdGl6ZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYykKK3sKKyAgdWludDMyX3QgZXJyb3JzdGF0ZSwgcmVzcG9uc2UgPSAwVSwgY291bnQ7CisgIHVpbnQzMl90IHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisKKyAgLyogQ2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBkcml2ZXIgKi8KKyAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKKyAgeworICAgIC8qIENoYW5nZSBTdGF0ZSAqLworICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOworCisgICAgLyogSW5kZXggOiAxNjUgLSBWYWx1ZSA6IDB4MDEgKi8KKyAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAweDAzQTUwMTAwVSk7CisgICAgaWYoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgeworICAgICAgLyogV2FpdCB0aGF0IHRoZSBkZXZpY2UgaXMgcmVhZHkgYnkgY2hlY2tpbmcgdGhlIEQwIGxpbmUgKi8KKyAgICAgIHdoaWxlKCghX19IQUxfTU1DX0dFVF9GTEFHKGhtbWMsIFNETU1DX0ZMQUdfQlVTWUQwRU5EKSkgJiYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKSkKKyAgICAgIHsKKyAgICAgICAgaWYoKEhBTF9HZXRUaWNrKCktdGlja3N0YXJ0KSA+PSBTRE1NQ19NQVhFUkFTRVRJTUVPVVQpCisgICAgICAgIHsKKyAgICAgICAgICBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9USU1FT1VUOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIENsZWFyIHRoZSBmbGFnIGNvcnJlc3BvbmRpbmcgdG8gZW5kIEQwIGJ1cyBsaW5lICovCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19GTEFHX0JVU1lEMEVORCk7CisKKyAgICAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgICAgeworICAgICAgICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLworICAgICAgICBjb3VudCA9IFNETU1DX01BWF9UUklBTDsKKyAgICAgICAgZG8KKyAgICAgICAgeworICAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKKyAgICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLworICAgICAgICAgIHJlc3BvbnNlID0gU0RNTUNfR2V0UmVzcG9uc2UoaG1tYy0+SW5zdGFuY2UsIFNETU1DX1JFU1AxKTsKKyAgICAgICAgICBjb3VudC0tOworICAgICAgICB9d2hpbGUoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpOworCisgICAgICAgIC8qIENoZWNrIHRoZSBzdGF0dXMgYWZ0ZXIgdGhlIHN3aXRjaCBjb21tYW5kIGV4ZWN1dGlvbiAqLworICAgICAgICBpZiAoKGNvdW50ICE9IDBVKSAmJiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpKQorICAgICAgICB7CisgICAgICAgICAgLyogQ2hlY2sgdGhlIGJpdCBTV0lUQ0hfRVJST1Igb2YgdGhlIGRldmljZSBzdGF0dXMgKi8KKyAgICAgICAgICBpZiAoKHJlc3BvbnNlICYgMHg4MFUpICE9IDBVKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9HRU5FUkFMX1VOS05PV05fRVJSOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb3VudCA9PSAwVSkKKyAgICAgICAgeworICAgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9USU1FT1VUOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAgIC8qIENoYW5nZSBTdGF0ZSAqLworICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKworICAgIC8qIE1hbmFnZSBlcnJvcnMgKi8KKyAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKKyAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOworCisgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfVElNRU9VVCkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9Cit9CisKKy8qKgorICAqIEBicmllZiAgQ29uZmlndXJlIHRoZSBTZWN1cmUgUmVtb3ZhbCBUeXBlIChTUlQpIGluIHRoZSBFeHRlbmRlZCBDU0QgcmVnaXN0ZXIuCisgICogQG5vdGUgICBUaGlzIEFQSSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBjaGVjayBvbiB0aGUgY2FyZCBzdGF0ZSB0aHJvdWdoCisgICogICAgICAgICBIQUxfTU1DX0dldENhcmRTdGF0ZSgpLgorICAqIEBwYXJhbSAgaG1tYyBQb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gIFNSVE1vZGUgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGVyYXNlIHRvIGJlIHBlcmZvcm1lZAorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU1JUX0VSQVNFIEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gZXJhc2UKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9FUkFTRSBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIG92ZXJ3cml0aW5nIHdpdGggYSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgYW4gZXJhc2UKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9DT01QTF9SQU5ET00gSW5mb3JtYXRpb24gcmVtb3ZlZCBieSBhbiBvdmVyd3JpdGluZyB3aXRoIGEgY2hhcmFjdGVyLCBpdHMgY29tcGxlbWVudCB0aGVuIGEgcmFuZG9tIGNoYXJhY3RlcgorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NSVF9WRU5ET1JfREVGSU5FRCBJbmZvcm1hdGlvbiByZW1vdmVkIHVzaW5nIGEgdmVuZG9yIGRlZmluZWQKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfQ29uZmlnU2VjUmVtb3ZhbFR5cGUoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90IFNSVE1vZGUpCit7CisgIHVpbnQzMl90IHNydCwgZXJyb3JzdGF0ZSwgcmVzcG9uc2UgPSAwVSwgY291bnQ7CisKKyAgLyogQ2hlY2sgdGhlIGVyYXNlIHR5cGUgdmFsdWUgaXMgY29ycmVjdCAqLworICBhc3NlcnRfcGFyYW0oSVNfTU1DX1NSVF9UWVBFKFNSVE1vZGUpKTsKKworICAvKiBDaGVjayB0aGUgc3RhdGUgb2YgdGhlIGRyaXZlciAqLworICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogR2V0IHRoZSBzdXBwb3J0ZWQgdmFsdWVzIGJ5IHRoZSBkZXZpY2UgKi8KKyAgICBpZihIQUxfTU1DX0dldFN1cHBvcnRlZFNlY1JlbW92YWxUeXBlKGhtbWMsICZzcnQpID09IEhBTF9PSykKKyAgICB7CisgICAgICAvKiBDaGFuZ2UgU3RhdGUgKi8KKyAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9CVVNZOworCisgICAgICAvKiBDaGVjayB0aGUgdmFsdWUgcGFzc2VkIGFzIHBhcmFtZXRlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSAqLworICAgICAgaWYoKFNSVE1vZGUgJiBzcnQpICE9IDBVKQorICAgICAgeworICAgICAgICAvKiBJbmRleCA6IDE2IC0gVmFsdWUgOiBTUlRNb2RlICovCisgICAgICAgIHNydCB8PSAoKFBPU0lUSU9OX1ZBTChTUlRNb2RlKSkgPDwgNFUpOworICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU3dpdGNoKGhtbWMtPkluc3RhbmNlLCAoMHgwMzEwMDAwMFUgfCAoc3J0IDw8IDhVKSkpOworICAgICAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCisgICAgICAgICAgY291bnQgPSBTRE1NQ19NQVhfVFJJQUw7CisgICAgICAgICAgZG8KKyAgICAgICAgICB7CisgICAgICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7CisgICAgICAgICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEdldCBjb21tYW5kIHJlc3BvbnNlICovCisgICAgICAgICAgICByZXNwb25zZSA9IFNETU1DX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSk7CisgICAgICAgICAgICBjb3VudC0tOworICAgICAgICAgIH13aGlsZSgoKHJlc3BvbnNlICYgMHgxMDBVKSA9PSAwVSkgJiYgKGNvdW50ICE9IDBVKSk7CisKKyAgICAgICAgICAvKiBDaGVjayB0aGUgc3RhdHVzIGFmdGVyIHRoZSBzd2l0Y2ggY29tbWFuZCBleGVjdXRpb24gKi8KKyAgICAgICAgICBpZiAoKGNvdW50ICE9IDBVKSAmJiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoZWNrIHRoZSBiaXQgU1dJVENIX0VSUk9SIG9mIHRoZSBkZXZpY2Ugc3RhdHVzICovCisgICAgICAgICAgICBpZiAoKHJlc3BvbnNlICYgMHg4MFUpICE9IDBVKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfR0VORVJBTF9VTktOT1dOX0VSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAoY291bnQgPT0gMFUpCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX1RJTUVPVVQ7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9VTlNVUFBPUlRFRF9GRUFUVVJFOworICAgICAgfQorCisgICAgICAvKiBDaGFuZ2UgU3RhdGUgKi8KKyAgICAgIGhtbWMtPlN0YXRlID0gSEFMX01NQ19TVEFURV9SRUFEWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGVycm9yc3RhdGUgPSBTRE1NQ19FUlJPUl9HRU5FUkFMX1VOS05PV05fRVJSOworICAgIH0KKworICAgIC8qIE1hbmFnZSBlcnJvcnMgKi8KKyAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICB7CisgICAgICAvKiBDbGVhciBhbGwgdGhlIHN0YXRpYyBmbGFncyAqLworICAgICAgX19IQUxfTU1DX0NMRUFSX0ZMQUcoaG1tYywgU0RNTUNfU1RBVElDX0ZMQUdTKTsKKyAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfT0s7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybiBIQUxfQlVTWTsKKyAgfQorfQorCisvKioKKyAgKiBAYnJpZWYgIEdldHMgdGhlIHN1cHBvcnRlZCB2YWx1ZXMgb2YgdGhlIHRoZSBTZWN1cmUgUmVtb3ZhbCBUeXBlIChTUlQpLgorICAqIEBwYXJhbSAgaG1tYyBwb2ludGVyIHRvIE1NQyBoYW5kbGUKKyAgKiBAcGFyYW0gIFN1cHBvcnRlZFNSVCBwb2ludGVyIGZvciBzdXBwb3J0ZWQgU1JUIHZhbHVlCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgYSBiaXQgZmllbGQgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIEhBTF9NTUNfU1JUX0VSQVNFIEluZm9ybWF0aW9uIHJlbW92ZWQgYnkgYW4gZXJhc2UKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9FUkFTRSBJbmZvcm1hdGlvbiByZW1vdmVkIGJ5IGFuIG92ZXJ3cml0aW5nIHdpdGggYSBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgYW4gZXJhc2UKKyAgKiAgICAgICAgICAgIEBhcmcgSEFMX01NQ19TUlRfV1JJVEVfQ0hBUl9DT01QTF9SQU5ET00gSW5mb3JtYXRpb24gcmVtb3ZlZCBieSBhbiBvdmVyd3JpdGluZyB3aXRoIGEgY2hhcmFjdGVyLCBpdHMgY29tcGxlbWVudCB0aGVuIGEgcmFuZG9tIGNoYXJhY3RlcgorICAqICAgICAgICAgICAgQGFyZyBIQUxfTU1DX1NSVF9WRU5ET1JfREVGSU5FRCBJbmZvcm1hdGlvbiByZW1vdmVkIHVzaW5nIGEgdmVuZG9yIGRlZmluZWQKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9NTUNfR2V0U3VwcG9ydGVkU2VjUmVtb3ZhbFR5cGUoTU1DX0hhbmRsZVR5cGVEZWYgKmhtbWMsIHVpbnQzMl90ICpTdXBwb3J0ZWRTUlQpCit7CisgIHVpbnQzMl90IHNydCA9IDBVOworICB1aW50MzJfdCBlcnJvcnN0YXRlID0gU0RNTUNfRVJST1JfTk9ORTsKKworICAvKiBDaGVjayB0aGUgc3RhdGUgb2YgdGhlIGRyaXZlciAqLworICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQorICB7CisgICAgLyogQ2hhbmdlIFN0YXRlICovCisgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX0JVU1k7CisKKyAgICAvKiBSZWFkIHRoZSBFeHRlbmRlZCBDU0QgcmVnaXN0ZXIgYW5kIGdldCBleHBlY3RlZCB2YWx1ZSAqLworICAgIGlmKE1NQ19SZWFkRXh0Q1NEKGhtbWMsICZzcnQsIDE2LCAweDBGRkZGRkZGVSkgPT0gSEFMX09LKSAvKiBGaWVsZCBTRUNVUkVfUkVNT1ZBTF9UWVBFIFsxNl0gKi8KKyAgICB7CisgICAgICAqU3VwcG9ydGVkU1JUID0gKHNydCAmIDB4MDAwMDAwMEZVKTsgLyogQml0cyBbMzowXSBvZiBmaWVsZCAxNiAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX0dFTkVSQUxfVU5LTk9XTl9FUlI7CisgICAgfQorCisgICAgLyogQ2hhbmdlIFN0YXRlICovCisgICAgaG1tYy0+U3RhdGUgPSBIQUxfTU1DX1NUQVRFX1JFQURZOworCisgICAgLyogTWFuYWdlIGVycm9ycyAqLworICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX01NQ19FUlJPUl9OT05FKQorICAgIHsKKyAgICAgIC8qIENsZWFyIGFsbCB0aGUgc3RhdGljIGZsYWdzICovCisgICAgICBfX0hBTF9NTUNfQ0xFQVJfRkxBRyhobW1jLCBTRE1NQ19TVEFUSUNfRkxBR1MpOworICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICB9CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuIEhBTF9CVVNZOworICB9Cit9CisKKy8qKgogICAqIEB9CiAgICovCiAKQEAgLTI4MTQsNyArMzE5NSw3IEBACiBzdGF0aWMgdWludDMyX3QgTU1DX0hpZ2hTcGVlZChNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgRnVuY3Rpb25hbFN0YXRlIHN0YXRlKQogewogICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOwotICB1aW50MzJfdCByZXNwb25zZSwgY291bnQ7CisgIHVpbnQzMl90IHJlc3BvbnNlID0gMFUsIGNvdW50OwogICBTRE1NQ19Jbml0VHlwZURlZiBJbml0OwogCiAgIGlmICgoKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX0JVU1NQRUVEKSAhPSAwVSkgJiYgKHN0YXRlID09IERJU0FCTEUpKQpAQCAtMjgzMSw1OSArMzIxMiw2MSBAQAogCiAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7Ci0gICAgLyogQ2hlY2sgZm9yIHN3aXRjaCBlcnJvciAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLworICAgIGNvdW50ID0gU0RNTUNfTUFYX1RSSUFMOworICAgIGRvCiAgICAgeworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOworICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCiAgICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLwogICAgICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOworICAgICAgY291bnQtLTsKKyAgICB9d2hpbGUoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpOworCisgICAgLyogQ2hlY2sgdGhlIHN0YXR1cyBhZnRlciB0aGUgc3dpdGNoIGNvbW1hbmQgZXhlY3V0aW9uICovCisgICAgaWYgKChjb3VudCAhPSAwVSkgJiYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKSkKKyAgICB7CisgICAgICAvKiBDaGVjayB0aGUgYml0IFNXSVRDSF9FUlJPUiBvZiB0aGUgZGV2aWNlIHN0YXR1cyAqLwogICAgICAgaWYgKChyZXNwb25zZSAmIDB4ODBVKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX1VOU1VQUE9SVEVEX0ZFQVRVUkU7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCi0gICAgICAgIGNvdW50ID0gU0RNTUNfTUFYX1RSSUFMOwotICAgICAgICB3aGlsZSgoKHJlc3BvbnNlICYgMHgxMDBVKSA9PSAwVSkgJiYgKGNvdW50ICE9IDBVKSkKLSAgICAgICAgewotICAgICAgICAgIGNvdW50LS07Ci0KLSAgICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gICAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KLSAgICAgICAgICByZXNwb25zZSA9IFNETU1DX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSk7Ci0gICAgICAgIH0KLQogICAgICAgICAvKiBDb25maWd1cmUgaGlnaCBzcGVlZCAqLwotICAgICAgICBpZiAoKGNvdW50ICE9IDBVKSAmJiAoZXJyb3JzdGF0ZSA9PSBIQUxfTU1DX0VSUk9SX05PTkUpKQorICAgICAgICBJbml0LkNsb2NrRWRnZSAgICAgICAgICAgPSBobW1jLT5Jbml0LkNsb2NrRWRnZTsKKyAgICAgICAgSW5pdC5DbG9ja1Bvd2VyU2F2ZSAgICAgID0gaG1tYy0+SW5pdC5DbG9ja1Bvd2VyU2F2ZTsKKyAgICAgICAgSW5pdC5CdXNXaWRlICAgICAgICAgICAgID0gKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX1dJREJVUyk7CisgICAgICAgIEluaXQuSGFyZHdhcmVGbG93Q29udHJvbCA9IGhtbWMtPkluaXQuSGFyZHdhcmVGbG93Q29udHJvbDsKKworICAgICAgICBpZiAoc3RhdGUgPT0gRElTQUJMRSkKICAgICAgICAgewotICAgICAgICAgIEluaXQuQ2xvY2tFZGdlICAgICAgICAgICA9IGhtbWMtPkluaXQuQ2xvY2tFZGdlOwotICAgICAgICAgIEluaXQuQ2xvY2tQb3dlclNhdmUgICAgICA9IGhtbWMtPkluaXQuQ2xvY2tQb3dlclNhdmU7Ci0gICAgICAgICAgSW5pdC5CdXNXaWRlICAgICAgICAgICAgID0gKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX1dJREJVUyk7Ci0gICAgICAgICAgSW5pdC5IYXJkd2FyZUZsb3dDb250cm9sID0gaG1tYy0+SW5pdC5IYXJkd2FyZUZsb3dDb250cm9sOworICAgICAgICAgIEluaXQuQ2xvY2tEaXYgPSBobW1jLT5Jbml0LkNsb2NrRGl2OworICAgICAgICAgICh2b2lkKVNETU1DX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOwogICAgICAgICAgIAotICAgICAgICAgIGlmIChzdGF0ZSA9PSBESVNBQkxFKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEluaXQuQ2xvY2tEaXYgPSBobW1jLT5Jbml0LkNsb2NrRGl2OwotICAgICAgICAgICAgKHZvaWQpU0RNTUNfSW5pdChobW1jLT5JbnN0YW5jZSwgSW5pdCk7Ci0KLSAgICAgICAgICAgIENMRUFSX0JJVChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IsIFNETU1DX0NMS0NSX0JVU1NQRUVEKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgIHsKLSAgICAgICAgICAgIEluaXQuQ2xvY2tEaXYgPSBTRE1NQ19IU3BlZWRfQ0xLX0RJVjsKLSAgICAgICAgICAgICh2b2lkKVNETU1DX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOwotCi0gICAgICAgICAgICBTRVRfQklUKGhtbWMtPkluc3RhbmNlLT5DTEtDUiwgU0RNTUNfQ0xLQ1JfQlVTU1BFRUQpOwotICAgICAgICAgIH0KKyAgICAgICAgICBDTEVBUl9CSVQoaG1tYy0+SW5zdGFuY2UtPkNMS0NSLCBTRE1NQ19DTEtDUl9CVVNTUEVFRCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgSW5pdC5DbG9ja0RpdiA9IFNETU1DX0hTcGVlZF9DTEtfRElWOworICAgICAgICAgICh2b2lkKVNETU1DX0luaXQoaG1tYy0+SW5zdGFuY2UsIEluaXQpOworICAgICAgICAgIAorICAgICAgICAgIFNFVF9CSVQoaG1tYy0+SW5zdGFuY2UtPkNMS0NSLCBTRE1NQ19DTEtDUl9CVVNTUEVFRCk7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CisgICAgZWxzZSBpZiAoY291bnQgPT0gMFUpCisgICAgeworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX1RJTUVPVVQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgfQogICB9CiAKICAgcmV0dXJuIGVycm9yc3RhdGU7CkBAIC0yODk4LDcgKzMyODEsNyBAQAogc3RhdGljIHVpbnQzMl90IE1NQ19ERFJfTW9kZShNTUNfSGFuZGxlVHlwZURlZiAqaG1tYywgRnVuY3Rpb25hbFN0YXRlIHN0YXRlKQogewogICB1aW50MzJfdCBlcnJvcnN0YXRlID0gSEFMX01NQ19FUlJPUl9OT05FOwotICB1aW50MzJfdCByZXNwb25zZSwgY291bnQ7CisgIHVpbnQzMl90IHJlc3BvbnNlID0gMFUsIGNvdW50OwogCiAgIGlmICgoKGhtbWMtPkluc3RhbmNlLT5DTEtDUiAmIFNETU1DX0NMS0NSX0REUikgIT0gMFUpICYmIChzdGF0ZSA9PSBESVNBQkxFKSkKICAgewpAQCAtMjkzMCw0OCArMzMxMyw1MCBAQAogCiAgIGlmKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKQogICB7Ci0gICAgLyogQ2hlY2sgZm9yIHN3aXRjaCBlcnJvciAqLwotICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRTZW5kU3RhdHVzKGhtbWMtPkluc3RhbmNlLCAodWludDMyX3QpKCgodWludDMyX3QpaG1tYy0+TW1jQ2FyZC5SZWxDYXJkQWRkKSA8PCAxNlUpKTsKLSAgICBpZihlcnJvcnN0YXRlID09IEhBTF9NTUNfRVJST1JfTk9ORSkKKyAgICAvKiBXaGlsZSBjYXJkIGlzIG5vdCByZWFkeSBmb3IgZGF0YSBhbmQgdHJpYWwgbnVtYmVyIGZvciBzZW5kaW5nIENNRDEzIGlzIG5vdCBleGNlZWRlZCAqLworICAgIGNvdW50ID0gU0RNTUNfTUFYX1RSSUFMOworICAgIGRvCiAgICAgeworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZFNlbmRTdGF0dXMoaG1tYy0+SW5zdGFuY2UsICh1aW50MzJfdCkoKCh1aW50MzJfdClobW1jLT5NbWNDYXJkLlJlbENhcmRBZGQpIDw8IDE2VSkpOworICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCisgICAgICB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCiAgICAgICAvKiBHZXQgY29tbWFuZCByZXNwb25zZSAqLwogICAgICAgcmVzcG9uc2UgPSBTRE1NQ19HZXRSZXNwb25zZShobW1jLT5JbnN0YW5jZSwgU0RNTUNfUkVTUDEpOworICAgICAgY291bnQtLTsKKyAgICB9d2hpbGUoKChyZXNwb25zZSAmIDB4MTAwVSkgPT0gMFUpICYmIChjb3VudCAhPSAwVSkpOworCisgICAgLyogQ2hlY2sgdGhlIHN0YXR1cyBhZnRlciB0aGUgc3dpdGNoIGNvbW1hbmQgZXhlY3V0aW9uICovCisgICAgaWYgKChjb3VudCAhPSAwVSkgJiYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKSkKKyAgICB7CisgICAgICAvKiBDaGVjayB0aGUgYml0IFNXSVRDSF9FUlJPUiBvZiB0aGUgZGV2aWNlIHN0YXR1cyAqLwogICAgICAgaWYgKChyZXNwb25zZSAmIDB4ODBVKSAhPSAwVSkKICAgICAgIHsKICAgICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX1VOU1VQUE9SVEVEX0ZFQVRVUkU7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIC8qIFdoaWxlIGNhcmQgaXMgbm90IHJlYWR5IGZvciBkYXRhIGFuZCB0cmlhbCBudW1iZXIgZm9yIHNlbmRpbmcgQ01EMTMgaXMgbm90IGV4Y2VlZGVkICovCi0gICAgICAgIGNvdW50ID0gU0RNTUNfTUFYX1RSSUFMOwotICAgICAgICB3aGlsZSgoKHJlc3BvbnNlICYgMHgxMDBVKSA9PSAwVSkgJiYgKGNvdW50ICE9IDBVKSkKLSAgICAgICAgewotICAgICAgICAgIGNvdW50LS07Ci0KLSAgICAgICAgICBlcnJvcnN0YXRlID0gU0RNTUNfQ21kU2VuZFN0YXR1cyhobW1jLT5JbnN0YW5jZSwgKHVpbnQzMl90KSgoKHVpbnQzMl90KWhtbWMtPk1tY0NhcmQuUmVsQ2FyZEFkZCkgPDwgMTZVKSk7Ci0gICAgICAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCi0gICAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogR2V0IGNvbW1hbmQgcmVzcG9uc2UgKi8KLSAgICAgICAgICByZXNwb25zZSA9IFNETU1DX0dldFJlc3BvbnNlKGhtbWMtPkluc3RhbmNlLCBTRE1NQ19SRVNQMSk7Ci0gICAgICAgIH0KLQogICAgICAgICAvKiBDb25maWd1cmUgRERSIG1vZGUgKi8KLSAgICAgICAgaWYgKChjb3VudCAhPSAwVSkgJiYgKGVycm9yc3RhdGUgPT0gSEFMX01NQ19FUlJPUl9OT05FKSkKKyAgICAgICAgaWYgKHN0YXRlID09IERJU0FCTEUpCiAgICAgICAgIHsKLSAgICAgICAgICBpZiAoc3RhdGUgPT0gRElTQUJMRSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBDTEVBUl9CSVQoaG1tYy0+SW5zdGFuY2UtPkNMS0NSLCBTRE1NQ19DTEtDUl9ERFIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgewotICAgICAgICAgICAgU0VUX0JJVChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IsIFNETU1DX0NMS0NSX0REUik7Ci0gICAgICAgICAgfQorICAgICAgICAgIENMRUFSX0JJVChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IsIFNETU1DX0NMS0NSX0REUik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgU0VUX0JJVChobW1jLT5JbnN0YW5jZS0+Q0xLQ1IsIFNETU1DX0NMS0NSX0REUik7CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CisgICAgZWxzZSBpZiAoY291bnQgPT0gMFUpCisgICAgeworICAgICAgZXJyb3JzdGF0ZSA9IFNETU1DX0VSUk9SX1RJTUVPVVQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgfQogICB9CiAKICAgcmV0dXJuIGVycm9yc3RhdGU7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9tbWNfZXguYyBiL1NyYy9zdG0zMmg3eHhfaGFsX21tY19leC5jCmluZGV4IDhlMmQ5MDUuLjZjNDA0Y2EgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX21tY19leC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX21tY19leC5jCkBAIC0zLDEwICszLDEwIEBACiAgICogQGZpbGUgICAgc3RtMzJoN3h4X2hhbF9tbWNfZXguYwogICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCiAgICogQGJyaWVmICAgTU1DIGNhcmQgRXh0ZW5kZWQgSEFMIG1vZHVsZSBkcml2ZXIuCi0gICogICAgICAgICAgVGhpcyBmaWxlIHByb3ZpZGVzIGZpcm13YXJlIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvbGxvd2luZyAKKyAgKiAgICAgICAgICBUaGlzIGZpbGUgcHJvdmlkZXMgZmlybXdhcmUgZnVuY3Rpb25zIHRvIG1hbmFnZSB0aGUgZm9sbG93aW5nCiAgICogICAgICAgICAgZnVuY3Rpb25hbGl0aWVzIG9mIHRoZSBTZWN1cmUgRGlnaXRhbCAoTU1DKSBwZXJpcGhlcmFsOgogICAqICAgICAgICAgICArIEV4dGVuZGVkIGZlYXR1cmVzIGZ1bmN0aW9ucwotICAqICAgICAgICAgCisgICoKICAgQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMgSG93IHRvIHVzZSB0aGlzIGRyaXZlciAjIyMjIwpAQCAtMTYsNyArMTYsNyBAQAogICAgKCspIENvbmZpZ3VyZSBCdWZmZXIwIGFuZCBCdWZmZXIxIHN0YXJ0IGFkZHJlc3MgYW5kIEJ1ZmZlciBzaXplIHVzaW5nIEhBTF9NTUNFeF9Db25maWdETUFNdWx0aUJ1ZmZlcigpIGZ1bmN0aW9uLgogCiAgICAoKykgU3RhcnQgUmVhZCBhbmQgV3JpdGUgZm9yIG11bHRpYnVmZmVyIG1vZGUgdXNpbmcgSEFMX01NQ0V4X1JlYWRCbG9ja3NETUFNdWx0aUJ1ZmZlcigpIGFuZCBIQUxfTU1DRXhfV3JpdGVCbG9ja3NETUFNdWx0aUJ1ZmZlcigpIGZ1bmN0aW9ucy4KLSAgIAorCiAgIEBlbmR2ZXJiYXRpbQogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKiBAYXR0ZW50aW9uCkBAIC0zMCw3ICszMCw3IEBACiAgICogICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQogICAqCiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAqLyAKKyAgKi8KIAogLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpbmNsdWRlICJzdG0zMmg3eHhfaGFsLmgiCkBAIC01NywxNyArNTcsMTkgQEAKICAgKiBAewogICAqLwogCisKKwogLyoqIEBhZGR0b2dyb3VwIE1NQ0V4X0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKLSAqICBAYnJpZWYgICBNdWx0aWJ1ZmZlciBmdW5jdGlvbnMgCisgKiAgQGJyaWVmICAgTXVsdGlidWZmZXIgZnVuY3Rpb25zCiAgKgotQHZlcmJhdGltICAgIAorQHZlcmJhdGltCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICMjIyMjIE11bHRpYnVmZmVyIGZ1bmN0aW9ucyAjIyMjIwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgWy4uXSAgCi0gICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgdGhlIG11bHRpYnVmZmVyIG1vZGUgYW5kIHN0YXJ0IHJlYWQgYW5kIHdyaXRlIAorICBbLi5dCisgICAgVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGZ1bmN0aW9ucyBhbGxvd2luZyB0byBjb25maWd1cmUgdGhlIG11bHRpYnVmZmVyIG1vZGUgYW5kIHN0YXJ0IHJlYWQgYW5kIHdyaXRlCiAgICAgbXVsdGlidWZmZXIgbW9kZSBmb3IgTU1DIEhBTCBkcml2ZXIuCi0gICAgICAKKwogQGVuZHZlcmJhdGltCiAgICogQHsKICAgKi8KQEAgLTg3LDcgKzg5LDcgQEAKICAgICBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UwPSAodWludDMyX3QpIHBEYXRhQnVmZmVyMCA7CiAgICAgaG1tYy0+SW5zdGFuY2UtPklETUFCQVNFMT0gKHVpbnQzMl90KSBwRGF0YUJ1ZmZlcjEgOwogICAgIGhtbWMtPkluc3RhbmNlLT5JRE1BQlNJWkU9ICh1aW50MzJfdCkgKE1NQ19CTE9DS1NJWkUgKiBCdWZmZXJTaXplKTsKLSAgICAKKwogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KICAgZWxzZQpAQCAtOTUsMTIgKzk3LDEyIEBACiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9CiB9Ci0gIAorCiAvKioKICAgKiBAYnJpZWYgIFJlYWRzIGJsb2NrKHMpIGZyb20gYSBzcGVjaWZpZWQgYWRkcmVzcyBpbiBhIGNhcmQuIFRoZSByZWNlaXZlZCBEYXRhIHdpbGwgYmUgc3RvcmVkIGluIEJ1ZmZlcjAgYW5kIEJ1ZmZlcjEuCiAgICogICAgICAgICBCdWZmZXIwLCBCdWZmZXIxIGFuZCBCdWZmZXJTaXplIG5lZWQgdG8gYmUgY29uZmlndXJlZCBieSBmdW5jdGlvbiBIQUxfTU1DRXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIgYmVmb3JlIGNhbGwgdGhpcyBmdW5jdGlvbi4KICAgKiBAcGFyYW0gIGhtbWM6IE1NQyBoYW5kbGUKLSAgKiBAcGFyYW0gIEJsb2NrQWRkOiBCbG9jayBBZGRyZXNzIGZyb20gd2hlcmUgZGF0YSBpcyB0byBiZSByZWFkICAKKyAgKiBAcGFyYW0gIEJsb2NrQWRkOiBCbG9jayBBZGRyZXNzIGZyb20gd2hlcmUgZGF0YSBpcyB0byBiZSByZWFkCiAgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogVG90YWwgbnVtYmVyIG9mIGJsb2NrcyB0byByZWFkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCkBAIC0xMTAsNyArMTEyLDcgQEAKICAgdWludDMyX3QgRG1hQmFzZTBfcmVnLCBEbWFCYXNlMV9yZWc7CiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IGFkZCA9IEJsb2NrQWRkOwotICAKKwogICBpZihobW1jLT5TdGF0ZSA9PSBIQUxfTU1DX1NUQVRFX1JFQURZKQogICB7CiAgICAgaWYoKEJsb2NrQWRkICsgTnVtYmVyT2ZCbG9ja3MpID4gKGhtbWMtPk1tY0NhcmQuTG9nQmxvY2tOYnIpKQpAQCAtMTE4LDE4ICsxMjAsMTkgQEAKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBIQUxfTU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBEbWFCYXNlMF9yZWcgPSBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UwOwogICAgIERtYUJhc2UxX3JlZyA9IGhtbWMtPkluc3RhbmNlLT5JRE1BQkFTRTE7CisKICAgICBpZiAoKGhtbWMtPkluc3RhbmNlLT5JRE1BQlNJWkUgPT0gMFUpIHx8IChEbWFCYXNlMF9yZWcgPT0gMFUpIHx8IChEbWFCYXNlMV9yZWcgPT0gMFUpKQogICAgIHsKICAgICAgIGhtbWMtPkVycm9yQ29kZSA9IEhBTF9NTUNfRVJST1JfQUREUl9PVVRfT0ZfUkFOR0U7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIC8qIEluaXRpYWxpemUgZGF0YSBjb250cm9sIHJlZ2lzdGVyICovCiAgICAgaG1tYy0+SW5zdGFuY2UtPkRDVFJMID0gMDsKLSAgICAKKwogICAgIGhtbWMtPkVycm9yQ29kZSA9IEhBTF9NTUNfRVJST1JfTk9ORTsKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKIApAQCAtMTM3LDggKzE0MCw4IEBACiAgICAgewogICAgICAgYWRkICo9IDUxMlU7CiAgICAgfQotICAgIAotICAgIC8qIENvbmZpZ3VyZSB0aGUgTU1DIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLyAKKworICAgIC8qIENvbmZpZ3VyZSB0aGUgTU1DIERQU00gKERhdGEgUGF0aCBTdGF0ZSBNYWNoaW5lKSAqLwogICAgIGNvbmZpZy5EYXRhVGltZU91dCAgID0gU0RNTUNfREFUQVRJTUVPVVQ7CiAgICAgY29uZmlnLkRhdGFMZW5ndGggICAgPSBNTUNfQkxPQ0tTSVpFICogTnVtYmVyT2ZCbG9ja3M7CiAgICAgY29uZmlnLkRhdGFCbG9ja1NpemUgPSBTRE1NQ19EQVRBQkxPQ0tfU0laRV81MTJCOwpAQCAtMTQ2LDE2ICsxNDksMTYgQEAKICAgICBjb25maWcuVHJhbnNmZXJNb2RlICA9IFNETU1DX1RSQU5TRkVSX01PREVfQkxPQ0s7CiAgICAgY29uZmlnLkRQU00gICAgICAgICAgPSBTRE1NQ19EUFNNX0RJU0FCTEU7CiAgICAgKHZvaWQpU0RNTUNfQ29uZmlnRGF0YShobW1jLT5JbnN0YW5jZSwgJmNvbmZpZyk7Ci0gICAgCisKICAgICBobW1jLT5JbnN0YW5jZS0+RENUUkwgfD0gU0RNTUNfRENUUkxfRklGT1JTVDsKLSAgICAKKwogICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKCBobW1jLT5JbnN0YW5jZSk7Ci0gICAgCi0gICAgaG1tYy0+SW5zdGFuY2UtPklETUFDVFJMID0gU0RNTUNfRU5BQkxFX0lETUFfRE9VQkxFX0JVRkYwOyAKKworICAgIGhtbWMtPkluc3RhbmNlLT5JRE1BQ1RSTCA9IFNETU1DX0VOQUJMRV9JRE1BX0RPVUJMRV9CVUZGMDsKIAogICAgIC8qIFJlYWQgQmxvY2tzIGluIERNQSBtb2RlICovCiAgICAgaG1tYy0+Q29udGV4dCA9IChNTUNfQ09OVEVYVF9SRUFEX01VTFRJUExFX0JMT0NLIHwgTU1DX0NPTlRFWFRfRE1BKTsKLSAgICAKKwogICAgIC8qIFJlYWQgTXVsdGkgQmxvY2sgY29tbWFuZCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRSZWFkTXVsdGlCbG9jayhobW1jLT5JbnN0YW5jZSwgYWRkKTsKICAgICBpZihlcnJvcnN0YXRlICE9IEhBTF9NTUNfRVJST1JfTk9ORSkKQEAgLTE2NCw3ICsxNjcsNyBAQAogICAgICAgaG1tYy0+RXJyb3JDb2RlIHw9IGVycm9yc3RhdGU7CiAgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIF9fSEFMX01NQ19FTkFCTEVfSVQoaG1tYywgKFNETU1DX0lUX0RDUkNGQUlMIHwgU0RNTUNfSVRfRFRJTUVPVVQgfCBTRE1NQ19JVF9SWE9WRVJSIHwgU0RNTUNfSVRfREFUQUVORCB8IFNETU1DX0ZMQUdfSURNQVRFIHwgU0RNTUNfRkxBR19JRE1BQlRDKSk7CiAKICAgICByZXR1cm4gSEFMX09LOwpAQCAtMTczLDE0ICsxNzYsMTQgQEAKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICAgCisKIH0KIAogLyoqCiAgICogQGJyaWVmICBXcml0ZSBibG9jayhzKSB0byBhIHNwZWNpZmllZCBhZGRyZXNzIGluIGEgY2FyZC4gVGhlIHRyYW5zZmVyZWQgRGF0YSBhcmUgc3RvcmVkIGluIEJ1ZmZlcjAgYW5kIEJ1ZmZlcjEuCiAgICogICAgICAgICBCdWZmZXIwLCBCdWZmZXIxIGFuZCBCdWZmZXJTaXplIG5lZWQgdG8gYmUgY29uZmlndXJlZCBieSBmdW5jdGlvbiBIQUxfTU1DRXhfQ29uZmlnRE1BTXVsdGlCdWZmZXIgYmVmb3JlIGNhbGwgdGhpcyBmdW5jdGlvbi4KICAgKiBAcGFyYW0gIGhtbWM6IE1NQyBoYW5kbGUKLSAgKiBAcGFyYW0gIEJsb2NrQWRkOiBCbG9jayBBZGRyZXNzIGZyb20gd2hlcmUgZGF0YSBpcyB0byBiZSByZWFkICAKKyAgKiBAcGFyYW0gIEJsb2NrQWRkOiBCbG9jayBBZGRyZXNzIGZyb20gd2hlcmUgZGF0YSBpcyB0byBiZSByZWFkCiAgICogQHBhcmFtICBOdW1iZXJPZkJsb2NrczogVG90YWwgbnVtYmVyIG9mIGJsb2NrcyB0byByZWFkCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAqLwpAQCAtMTkwLDcgKzE5Myw3IEBACiAgIHVpbnQzMl90IGVycm9yc3RhdGU7CiAgIHVpbnQzMl90IERtYUJhc2UwX3JlZywgRG1hQmFzZTFfcmVnOwogICB1aW50MzJfdCBhZGQgPSBCbG9ja0FkZDsKLSAgCisKICAgaWYoaG1tYy0+U3RhdGUgPT0gSEFMX01NQ19TVEFURV9SRUFEWSkKICAgewogICAgIGlmKChCbG9ja0FkZCArIE51bWJlck9mQmxvY2tzKSA+IChobW1jLT5NbWNDYXJkLkxvZ0Jsb2NrTmJyKSkKQEAgLTE5OCwyOCArMjAxLDI5IEBACiAgICAgICBobW1jLT5FcnJvckNvZGUgfD0gSEFMX01NQ19FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQotICAgIAorCiAgICAgRG1hQmFzZTBfcmVnID0gaG1tYy0+SW5zdGFuY2UtPklETUFCQVNFMDsKICAgICBEbWFCYXNlMV9yZWcgPSBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UxOworCiAgICAgaWYgKChobW1jLT5JbnN0YW5jZS0+SURNQUJTSVpFID09IDBVKSB8fCAoRG1hQmFzZTBfcmVnID09IDBVKSB8fCAoRG1hQmFzZTFfcmVnID09IDBVKSkKICAgICB7CiAgICAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfTU1DX0VSUk9SX0FERFJfT1VUX09GX1JBTkdFOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICAvKiBJbml0aWFsaXplIGRhdGEgY29udHJvbCByZWdpc3RlciAqLwogICAgIGhtbWMtPkluc3RhbmNlLT5EQ1RSTCA9IDA7Ci0gICAgCisKICAgICBobW1jLT5FcnJvckNvZGUgPSBIQUxfTU1DX0VSUk9SX05PTkU7Ci0gICAgCisKICAgICBobW1jLT5TdGF0ZSA9IEhBTF9NTUNfU1RBVEVfQlVTWTsKIAogICAgIGlmICgoaG1tYy0+TW1jQ2FyZC5DYXJkVHlwZSkgIT0gTU1DX0hJR0hfQ0FQQUNJVFlfQ0FSRCkKICAgICB7CiAgICAgICBhZGQgKj0gNTEyVTsKICAgICB9Ci0gICAgCi0gICAgLyogQ29uZmlndXJlIHRoZSBNTUMgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovIAorCisgICAgLyogQ29uZmlndXJlIHRoZSBNTUMgRFBTTSAoRGF0YSBQYXRoIFN0YXRlIE1hY2hpbmUpICovCiAgICAgY29uZmlnLkRhdGFUaW1lT3V0ICAgPSBTRE1NQ19EQVRBVElNRU9VVDsKICAgICBjb25maWcuRGF0YUxlbmd0aCAgICA9IE1NQ19CTE9DS1NJWkUgKiBOdW1iZXJPZkJsb2NrczsKICAgICBjb25maWcuRGF0YUJsb2NrU2l6ZSA9IFNETU1DX0RBVEFCTE9DS19TSVpFXzUxMkI7CkBAIC0yMjcsMTQgKzIzMSwxNCBAQAogICAgIGNvbmZpZy5UcmFuc2Zlck1vZGUgID0gU0RNTUNfVFJBTlNGRVJfTU9ERV9CTE9DSzsKICAgICBjb25maWcuRFBTTSAgICAgICAgICA9IFNETU1DX0RQU01fRElTQUJMRTsKICAgICAodm9pZClTRE1NQ19Db25maWdEYXRhKGhtbWMtPkluc3RhbmNlLCAmY29uZmlnKTsKLSAgICAKKwogICAgIF9fU0RNTUNfQ01EVFJBTlNfRU5BQkxFKCBobW1jLT5JbnN0YW5jZSk7Ci0gICAgCi0gICAgaG1tYy0+SW5zdGFuY2UtPklETUFDVFJMID0gU0RNTUNfRU5BQkxFX0lETUFfRE9VQkxFX0JVRkYwOyAKLSAKKworICAgIGhtbWMtPkluc3RhbmNlLT5JRE1BQ1RSTCA9IFNETU1DX0VOQUJMRV9JRE1BX0RPVUJMRV9CVUZGMDsKKwogICAgIC8qIFdyaXRlIEJsb2NrcyBpbiBETUEgbW9kZSAqLwogICAgIGhtbWMtPkNvbnRleHQgPSAoTU1DX0NPTlRFWFRfV1JJVEVfTVVMVElQTEVfQkxPQ0sgfCBNTUNfQ09OVEVYVF9ETUEpOwotICAgIAorCiAgICAgLyogV3JpdGUgTXVsdGkgQmxvY2sgY29tbWFuZCAqLwogICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRXcml0ZU11bHRpQmxvY2soaG1tYy0+SW5zdGFuY2UsIGFkZCk7CiAgICAgaWYoZXJyb3JzdGF0ZSAhPSBIQUxfTU1DX0VSUk9SX05PTkUpCkBAIC0yNDMsNyArMjQ3LDcgQEAKICAgICAgIGhtbWMtPkVycm9yQ29kZSB8PSBlcnJvcnN0YXRlOwogICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBfX0hBTF9NTUNfRU5BQkxFX0lUKGhtbWMsIChTRE1NQ19JVF9EQ1JDRkFJTCB8IFNETU1DX0lUX0RUSU1FT1VUIHwgU0RNTUNfSVRfVFhVTkRFUlIgfCBTRE1NQ19JVF9EQVRBRU5EIHwgU0RNTUNfRkxBR19JRE1BVEUgfCBTRE1NQ19GTEFHX0lETUFCVEMpKTsKIAogICAgIHJldHVybiBIQUxfT0s7CkBAIC0yNTEsMTggKzI1NSwxOCBAQAogICBlbHNlCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7Ci0gIH0gIAorICB9CiB9CiAKLSAgCisKIC8qKgogICAqIEBicmllZiAgQ2hhbmdlIHRoZSBETUEgQnVmZmVyMCBvciBCdWZmZXIxIGFkZHJlc3Mgb24gdGhlIGZseS4KICAgKiBAcGFyYW0gIGhtbWM6ICAgICAgICAgICBwb2ludGVyIHRvIGEgTU1DX0hhbmRsZVR5cGVEZWYgc3RydWN0dXJlLgotICAqIEBwYXJhbSAgQnVmZmVyOiAgICAgICAgdGhlIGJ1ZmZlciB0byBiZSBjaGFuZ2VkLCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIAorICAqIEBwYXJhbSAgQnVmZmVyOiAgICAgICAgdGhlIGJ1ZmZlciB0byBiZSBjaGFuZ2VkLCBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mCiAgICogICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nIHZhbHVlczogTU1DX0RNQV9CVUZGRVIwIG9yIE1NQ19ETUFfQlVGRkVSMQogICAqIEBwYXJhbSAgcERhdGFCdWZmZXI6ICAgVGhlIG5ldyBhZGRyZXNzCiAgICogQG5vdGUgICBUaGUgQlVGRkVSMCBhZGRyZXNzIGNhbiBiZSBjaGFuZ2VkIG9ubHkgd2hlbiB0aGUgY3VycmVudCB0cmFuc2ZlciB1c2UKLSAgKiAgICAgICAgIEJVRkZFUjEgYW5kIHRoZSBCVUZGRVIxIGFkZHJlc3MgY2FuIGJlIGNoYW5nZWQgb25seSB3aGVuIHRoZSBjdXJyZW50IAorICAqICAgICAgICAgQlVGRkVSMSBhbmQgdGhlIEJVRkZFUjEgYWRkcmVzcyBjYW4gYmUgY2hhbmdlZCBvbmx5IHdoZW4gdGhlIGN1cnJlbnQKICAgKiAgICAgICAgIHRyYW5zZmVyIHVzZSBCVUZGRVIwLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwpAQCAtMjc4LDcgKzI4Miw3IEBACiAgICAgLyogY2hhbmdlIHRoZSBtZW1vcnkxIGFkZHJlc3MgKi8KICAgICBobW1jLT5JbnN0YW5jZS0+SURNQUJBU0UxID0gKHVpbnQzMl90KXBEYXRhQnVmZmVyOwogICB9Ci0gIAorCiAgIHJldHVybiBIQUxfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX290ZmRlYy5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfb3RmZGVjLmMKaW5kZXggMWExOTQwNC4uYTU0ODgyZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfb3RmZGVjLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfb3RmZGVjLmMKQEAgLTU3Nyw3ICs1NzcsNyBAQAogICAqICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIE9URkRFQyBtb2R1bGUKICAgKiBAcGFyYW0gIFJlZ2lvbkluZGV4IGluZGV4IG9mIHJlZ2lvbiB0aGUga2V5cyBvZiB3aGljaCBhcmUgc2V0CiAgICogQHBhcmFtICBwS2V5IHBvaW50ZXIgYXQgc2V0IG9mIGtleXMKLSAgKiBAbm90ZSAgIFRoZSBBUEkgcmVhZHMgdGhlIGtleSBDUkMgY29tcHV0ZWQgYnkgdGhlIHBlcmlwaGVyYWwgYW5kIGNvbXBhcmVzIGl0IHdpdGggdGh6dAorICAqIEBub3RlICAgVGhlIEFQSSByZWFkcyB0aGUga2V5IENSQyBjb21wdXRlZCBieSB0aGUgcGVyaXBoZXJhbCBhbmQgY29tcGFyZXMgaXQgd2l0aCB0aGF0CiAgICogICAgICAgICB0aGVvcmV0aWNhbGx5IGV4cGVjdGVkLiBBbiBlcnJvciBpcyByZXBvcnRlZCBpZiB0aGV5IGFyZSBkaWZmZXJlbnQuCiAgICogQHJldHZhbCBIQUwgc3RhdGUKICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3B3ci5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfcHdyLmMKaW5kZXggYTNkMmExYS4uODhjOGQxYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfcHdyLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfcHdyLmMKQEAgLTI2LDEzICsyNiwxMiBAQAogICAgICAgICAgIHBlcmlwaGVyYWxzLiBUaGUgRDIgZG9tYWluIGNvbnRhaW5zIHBlcmlwaGVyYWxzIGFuZCBhIENQVQogICAgICAgICAgIChDb3J0ZXgtTTQpLiBUaGUgRDMgZG9tYWluIGNvbnRhaW5zIHRoZSBzeXN0ZW0gY29udHJvbCwgSS9PIGxvZ2ljCiAgICAgICAgICAgYW5kIGxvdy1wb3dlciBwZXJpcGhlcmFscy4KLSAgICAgICgrKSBTVE0zMkg3NDMsIFNUTTMySDc1MywgU1RNMzJINzQyIGFuZCBTVE0zMkg3NTAgZGV2aWNlcyBoYXZlIDMgcG93ZXIKLSAgICAgICAgICBkb21haW5zIChEMSwgRDIgYW5kIEQzKS4KKyAgICAgICgrKSBTVE0zMkg3MngsIFNUTTMySDczeCwgU1RNMzJINzQyLCBTVE0zMkg3NDMsIFNUTTMySDc1MCBhbmQgU1RNMzJINzUzIAorICAgICAgICAgIGRldmljZXMgaGF2ZSAzIHBvd2VyIGRvbWFpbnMgKEQxLCBEMiBhbmQgRDMpLgogICAgICAgICAgIFRoZSBkb21haW4gRDEgY29udGFpbnMgYSBDUFUgKENvcnRleC1NNyksIGEgRmxhc2ggbWVtb3J5IGFuZCBzb21lCiAgICAgICAgICAgcGVyaXBoZXJhbHMuIFRoZSBEMiBkb21haW4gY29udGFpbnMgcGVyaXBoZXJhbHMuIFRoZSBEMyBkb21haW5zCiAgICAgICAgICAgY29udGFpbnMgdGhlIHN5c3RlbSBjb250cm9sLCBJL08gbG9naWMgYW5kIGxvdy1wb3dlciBwZXJpcGhlcmFscy4KLSAgICAgICgrKSBTVE0zMkg3QXh4USwgU1RNMzJIN0J4eFEsIFNUTTMySDdBeHh4IGFuZCBTVE0zMkg3Qnh4eCBkZXZpY2VzIGhhdmUgMgotICAgICAgICAgIHBvd2VyIGRvbWFpbnMgKENEIGFuZCBTUkQpLgorICAgICAgKCspIFNUTTMySDdBeHh4IGFuZCBTVE0zMkg3Qnh4eCBkZXZpY2VzIGhhdmUgMiBwb3dlciBkb21haW5zIChDRCBhbmQgU1JEKS4KICAgICAgICAgICBUaGUgY29yZSBkb21haW4gKENEKSBjb250YWlucyBhIENQVSAoQ29ydGV4LU03KSwgYSBGbGFzaAogICAgICAgICAgIG1lbW9yeSBhbmQgcGVyaXBoZXJhbHMuIFRoZSBTbWFydFJ1biBkb21haW4gY29udGFpbnMgdGhlIHN5c3RlbQogICAgICAgICAgIGNvbnRyb2wsIEkvTyBsb2dpYyBhbmQgbG93LXBvd2VyIHBlcmlwaGVyYWxzLgpAQCAtNTAxLDYgKzUwMCw5IEBACiAgICogICAgICAgICAgICAgICAgIFBXUl9XQUtFVVBfUElONV9ISUdILCBQV1JfV0FLRVVQX1BJTjVfTE9XLAogICAqICAgICAgICAgICAgICAgICBQV1JfV0FLRVVQX1BJTjZfSElHSCwgUFdSX1dBS0VVUF9QSU42X0xPVy4KICAgKiBAbm90ZSAgIFBXUl9XQUtFVVBfUElOeCBhbmQgUFdSX1dBS0VVUF9QSU54X0hJR0ggYXJlIGVxdWl2YWxlbnQuCisgICogQG5vdGUgICBUaGUgUFdSX1dBS0VVUF9QSU4zX0hJR0gsIFBXUl9XQUtFVVBfUElOM19MT1csIFBXUl9XQUtFVVBfUElONV9ISUdICisgICogICAgICAgICBhbmQgUFdSX1dBS0VVUF9QSU41X0xPVyBhcmUgYXZhaWxhYmxlIG9ubHkgZm9yIGRldmljZXMgdGhhdCBpbmNsdWRlcworICAqICAgICAgICAgR1BJT0kgcG9ydC4KICAgKiBAcmV0dmFsIE5vbmUuCiAgICovCiB2b2lkIEhBTF9QV1JfRW5hYmxlV2FrZVVwUGluICh1aW50MzJfdCBXYWtlVXBQaW5Qb2xhcml0eSkKQEAgLTUyNyw2ICs1MjksOSBAQAogICAqICAgICAgICAgICAgICAgICBQV1JfV0FLRVVQX1BJTjRfSElHSCwgUFdSX1dBS0VVUF9QSU40X0xPVywKICAgKiAgICAgICAgICAgICAgICAgUFdSX1dBS0VVUF9QSU41X0hJR0gsIFBXUl9XQUtFVVBfUElONV9MT1csCiAgICogICAgICAgICAgICAgICAgIFBXUl9XQUtFVVBfUElONl9ISUdILCBQV1JfV0FLRVVQX1BJTjZfTE9XLgorICAqIEBub3RlICAgVGhlIFBXUl9XQUtFVVBfUElOM19ISUdILCBQV1JfV0FLRVVQX1BJTjNfTE9XLCBQV1JfV0FLRVVQX1BJTjVfSElHSAorICAqICAgICAgICAgYW5kIFBXUl9XQUtFVVBfUElONV9MT1cgYXJlIGF2YWlsYWJsZSBvbmx5IGZvciBkZXZpY2VzIHRoYXQgaW5jbHVkZXMKKyAgKiAgICAgICAgIEdQSU9JIHBvcnQuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogdm9pZCBIQUxfUFdSX0Rpc2FibGVXYWtlVXBQaW4gKHVpbnQzMl90IFdha2VVcFBpbngpCkBAIC02NzUsNiArNjgwLDggQEAKICAgKiBAbm90ZSAgIFRoZSBzeXN0ZW0gZW50ZXJzIFN0YW5kYnkgbW9kZSBvbmx5IHdoZW4gYWxsIGRvbWFpbnMgYXJlIGluIERTVEFOREJZLgogICAqIEBub3RlICAgV2hlbiB0aGUgU3lzdGVtIGV4aXQgU1RBTkRCWSBtb2RlIGJ5IGlzc3VpbmcgYW4gaW50ZXJydXB0IG9yIGEKICAgKiAgICAgICAgIHdha2V1cCBldmVudCwgdGhlIEhTSSBSQyBvc2NpbGxhdG9yIGlzIHNlbGVjdGVkIGFzIHN5c3RlbSBjbG9jay4KKyAgKiBAbm90ZSAgIEl0IGlzIHJlY29tbWVuZGVkIHRvIGRpc2FibGUgYWxsIHJlZ3VsYXRvcnMgYmVmb3JlIGVudHJpbmcgU1RBTkRCWQorICAqICAgICAgICAgbW9kZSBmb3IgcG93ZXIgY29uc3VtcHRpb24gc2F2aW5nIHB1cnBvc2UuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogdm9pZCBIQUxfUFdSX0VudGVyU1RBTkRCWU1vZGUgKHZvaWQpCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9wd3JfZXguYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3B3cl9leC5jCmluZGV4IDczNzBjMjIuLjc3Y2QzMzcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX3B3cl9leC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX3B3cl9leC5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAogICAgKCMpIENhbGwgSEFMX1BXUkV4X0dldE1NQ1ZvbHRhZ2UoKSBhbmQgSEFMX1BXUkV4X0Rpc2FibGVNb25pdG9yaW5nKCkKICAgICAgICBmdW5jdGlvbiB0byBnZXQgVkRETU1DIHZvbHRhZ2UgbGV2ZWwuIFRoaXMgQVBJIGlzIHVzZWQgb25seSBmb3IKLSAgICAgICBTVE0zMkg3QXh4USwgU1RNMzJIN0J4eFEsIFNUTTMySDdBeHh4IGFuZCBTVE0zMkg3Qnh4eCBsaW5lcworICAgICAgIFNUTTMySDdBeHh4IGFuZCBTVE0zMkg3Qnh4eCBsaW5lcwogCiAgICAoIykgQ2FsbCBIQUxfUFdSRXhfQ29uZmlnQVZEKCkgYWZ0ZXIgc2V0dGluZyBwYXJhbWV0ZXIgdG8gYmUgY29uZmlndXJlZAogICAgICAgIChldmVudCBtb2RlIGFuZCB2b2x0YWdlIHRocmVzaG9sZCkgaW4gb3JkZXIgdG8gc2V0IHVwIHRoZSBBbmFsb2cgVm9sdGFnZQpAQCAtMTk1LDkgKzE5NSwxNCBAQAogICAqIEB7CiAgICovCiAvKiBXYWtlLVVwIFBpbnMgRVhUSSByZWdpc3RlciBtYXNrICovCisjaWYgZGVmaW5lZCAoRVhUSV9JTVIyX0lNNTcpCiAjZGVmaW5lIFBXUl9FWFRJX1dBS0VVUF9QSU5TX01BU0sgIChFWFRJX0lNUjJfSU01NSB8IEVYVElfSU1SMl9JTTU2IHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUjJfSU01NyB8IEVYVElfSU1SMl9JTTU4IHxcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRJX0lNUjJfSU01OSB8IEVYVElfSU1SMl9JTTYwKQorI2Vsc2UKKyNkZWZpbmUgUFdSX0VYVElfV0FLRVVQX1BJTlNfTUFTSyAgKEVYVElfSU1SMl9JTTU1IHwgRVhUSV9JTVIyX0lNNTYgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVElfSU1SMl9JTTU4IHwgRVhUSV9JTVIyX0lNNjApCisjZW5kaWYgLyogZGVmaW5lZCAoRVhUSV9JTVIyX0lNNTcpICovCiAKIC8qIFdha2UtVXAgUGlucyBQV1IgUGluIFB1bGwgc2hpZnQgb2Zmc2V0cyAqLwogI2RlZmluZSBQV1JfV0FLRVVQX1BJTlNfUFVMTF9TSElGVF9PRkZTRVQgKDJVKQpAQCAtMzg1LDExICszOTAsNiBAQAogCiAvKioKICAgKiBAYnJpZWYgQ29uZmlndXJlIHRoZSBtYWluIGludGVybmFsIHJlZ3VsYXRvciBvdXRwdXQgdm9sdGFnZS4KLSAgKiBAbm90ZSAgIEZvciBTVE0zMkg3eDMsIFNUTTMySDd4NSwgU1RNMzJIN3g3LCBTVE0zMkg3NDIgYW5kIFNUTTMySDc1MCBsaW5lcywKLSAgKiAgICAgICAgIGNvbmZpZ3VyaW5nIFZvbHRhZ2UgU2NhbGUgMCBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gVmNvcmUgaXMgc3VwcGxpZWQKLSAgKiAgICAgICAgIGZyb20gTERPIChMb3cgRHJvcE91dCkuIFRoZSBTWVNDRkcgQ2xvY2sgbXVzdCBiZSBlbmFibGVkIHRocm91Z2gKLSAgKiAgICAgICAgIF9fSEFMX1JDQ19TWVNDRkdfQ0xLX0VOQUJMRSgpIG1hY3JvIGJlZm9yZSBjb25maWd1cmluZyBWb2x0YWdlCi0gICogICAgICAgICBTY2FsZSAwLgogICAqIEBwYXJhbSAgVm9sdGFnZVNjYWxpbmcgOiBTcGVjaWZpZXMgdGhlIHJlZ3VsYXRvciBvdXRwdXQgdm9sdGFnZSB0byBhY2hpZXZlCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGEgdHJhZGVvZmYgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQgcG93ZXIKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtcHRpb24uCkBAIC00MDIsNiArNDAyLDEzIEBACiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSAyIG1vZGUuCiAgICogICAgICAgICAgICBAYXJnIFBXUl9SRUdVTEFUT1JfVk9MVEFHRV9TQ0FMRTMgOiBSZWd1bGF0b3Igdm9sdGFnZSBvdXRwdXQKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlIDMgbW9kZS4KKyAgKiBAbm90ZSAgIEZvciBTVE0zMkg3NHggYW5kIFNUTTMySDc1eCBsaW5lcywgY29uZmlndXJpbmcgVm9sdGFnZSBTY2FsZSAwIGlzCisgICogICAgICAgICBvbmx5IHBvc3NpYmxlIHdoZW4gVmNvcmUgaXMgc3VwcGxpZWQgZnJvbSBMRE8gKExvdyBEcm9wT3V0KS4gVGhlCisgICogICAgICAgICBTWVNDRkcgQ2xvY2sgbXVzdCBiZSBlbmFibGVkIHRocm91Z2ggX19IQUxfUkNDX1NZU0NGR19DTEtfRU5BQkxFKCkKKyAgKiAgICAgICAgIG1hY3JvIGJlZm9yZSBjb25maWd1cmluZyBWb2x0YWdlIFNjYWxlIDAuCisgICogICAgICAgICBUbyBlbnRlciBsb3cgcG93ZXIgbW9kZSAsIGFuZCBpZiBjdXJyZW50IHJlZ3VsYXRvciB2b2x0YWdlIGlzCisgICogICAgICAgICBWb2x0YWdlIFNjYWxlIDAgdGhlbiBmaXJzdCBzd2l0Y2ggdG8gVm9sdGFnZSBTY2FsZSAxIGJlZm9yZSBlbnRlcmluZworICAqICAgICAgICAgbG93IHBvd2VyIG1vZGUuCiAgICogQHJldHZhbCBIQUwgU3RhdHVzCiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfUFdSRXhfQ29udHJvbFZvbHRhZ2VTY2FsaW5nICh1aW50MzJfdCBWb2x0YWdlU2NhbGluZykKQEAgLTQyMiw2ICs0MjksNyBAQAogICAvKiBTZXQgdGhlIHZvbHRhZ2UgcmFuZ2UgKi8KICAgTU9ESUZZX1JFRyAoUFdSLT5TUkRDUiwgUFdSX1NSRENSX1ZPUywgVm9sdGFnZVNjYWxpbmcpOwogI2Vsc2UKKyNpZiBkZWZpbmVkKFNZU0NGR19QV1JDUl9PREVOKSAvKiBTVE0zMkg3NHh4eCBhbmQgU1RNMzJINzV4eHggbGluZXMgKi8KICAgaWYgKFZvbHRhZ2VTY2FsaW5nID09IFBXUl9SRUdVTEFUT1JfVk9MVEFHRV9TQ0FMRTApCiAgIHsKICAgICBpZiAoKFBXUi0+Q1IzICYgUFdSX0NSM19MRE9FTikgPT0gUFdSX0NSM19MRE9FTikKQEAgLTQ3Niw2ICs0ODQsMTAgQEAKICAgICAvKiBTZXQgdGhlIHZvbHRhZ2UgcmFuZ2UgKi8KICAgICBNT0RJRllfUkVHIChQV1ItPkQzQ1IsIFBXUl9EM0NSX1ZPUywgVm9sdGFnZVNjYWxpbmcpOwogICB9CisjZWxzZSAgLyogU1RNMzJINzJ4eHggYW5kIFNUTTMySDczeHh4IGxpbmVzICovCisgIC8qIFNldCB0aGUgdm9sdGFnZSByYW5nZSAqLworICBNT0RJRllfUkVHKFBXUi0+RDNDUiwgUFdSX0QzQ1JfVk9TLCBWb2x0YWdlU2NhbGluZyk7CisjZW5kaWYgLyogZGVmaW5lZCAoU1lTQ0ZHX1BXUkNSX09ERU4pICovCiAjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1NSRENSX1ZPUykgKi8KIAogICAvKiBHZXQgdGljayAqLwpAQCAtNjE5LDkgKzYzMSw5IEBACiAgICAgICAgICAgKCsrKykgUFdSX1NUT1BFTlRSWV9XRkkgOiBlbnRlciBTVE9QIG1vZGUgd2l0aCBXRkkgaW5zdHJ1Y3Rpb24KICAgICAgICAgICAoKysrKSBQV1JfU1RPUEVOVFJZX1dGRSA6IGVudGVyIFNUT1AgbW9kZSB3aXRoIFdGRSBpbnN0cnVjdGlvbgogICAgICAgICAgKCsrKSBEb21haW46Ci0gICAgICAgICAgKCsrKykgUFdSX0QxX0RPTUFJTiA6IEVudGVycyBEMSBkb21haW4gdG8gRFNUT1AgbW9kZS4KKyAgICAgICAgICAoKysrKSBQV1JfRDFfRE9NQUlOIDogRW50ZXJzIEQxL0NEIGRvbWFpbiB0byBEU1RPUCBtb2RlLgogICAgICAgICAgICgrKyspIFBXUl9EMl9ET01BSU4gOiBFbnRlcnMgRDIgZG9tYWluIHRvIERTVE9QIG1vZGUuCi0gICAgICAgICAgKCsrKykgUFdSX0QzX0RPTUFJTiA6IEVudGVycyBEMyBkb21haW4gdG8gRFNUT1AgbW9kZS4KKyAgICAgICAgICAoKysrKSBQV1JfRDNfRE9NQUlOIDogRW50ZXJzIEQzL1NSRCBkb21haW4gdG8gRFNUT1AgbW9kZS4KIAogICAgICAgKCspIEV4aXQ6CiAgICAgICAgIEFueSBFWFRJIExpbmUgKEludGVybmFsIG9yIEV4dGVybmFsKSBjb25maWd1cmVkIGluIEludGVycnVwdC9FdmVudCBtb2RlLgpAQCAtNjQyLDkgKzY1NCw5IEBACiAgICAgICAgICBUaGUgRFNUQU5EQlkgbW9kZSBpcyBlbnRlcmVkIHVzaW5nIHRoZSBIQUxfUFdSRXhfRW50ZXJTVEFOREJZTW9kZQogICAgICAgICAgKERvbWFpbikgZnVuY3Rpb24gd2l0aDoKICAgICAgICAoKyspIERvbWFpbjoKLSAgICAgICAgKCsrKykgUFdSX0QxX0RPTUFJTiA6IEVudGVycyBEMSBkb21haW4gdG8gRFNUQU5EQlkgbW9kZS4KKyAgICAgICAgKCsrKykgUFdSX0QxX0RPTUFJTiA6IEVudGVycyBEMS9DRCBkb21haW4gdG8gRFNUQU5EQlkgbW9kZS4KICAgICAgICAgKCsrKykgUFdSX0QyX0RPTUFJTiA6IEVudGVycyBEMiBkb21haW4gdG8gRFNUQU5EQlkgbW9kZS4KLSAgICAgICAgKCsrKykgUFdSX0QzX0RPTUFJTiA6IEVudGVycyBEMyBkb21haW4gdG8gRFNUQU5EQlkgbW9kZS4KKyAgICAgICAgKCsrKykgUFdSX0QzX0RPTUFJTiA6IEVudGVycyBEMy9TUkQgZG9tYWluIHRvIERTVEFOREJZIG1vZGUuCiAKICAgICAgICgrKSBFeGl0OgogICAgICAgICBXS1VQIHBpbiByaXNpbmcgb3IgZmFsbGluZyBlZGdlLCBSVEMgYWxhcm0gKEFsYXJtIEEgYW5kIEFsYXJtIEIpLCBSVEMKQEAgLTg1NSw5ICs4NjcsNiBAQAogI2lmIGRlZmluZWQgKFBXUl9DUFVDUl9QRERTX0QyKQogICBlbHNlIGlmIChEb21haW4gPT0gUFdSX0QyX0RPTUFJTikKICAgewotICAgIC8qIEtlZXAgRFNUT1AgbW9kZSB3aGVuIEQyIGRvbWFpbiBlbnRlcnMgRGVlcHNsZWVwICovCi0gICAgQ0xFQVJfQklUIChQV1ItPkNQVUNSLCBQV1JfQ1BVQ1JfUEREU19EMik7Ci0KICNpZiBkZWZpbmVkIChEVUFMX0NPUkUpCiAgICAgLyogQ2hlY2sgY3VycmVudCBjb3JlICovCiAgICAgaWYgKEhBTF9HZXRDdXJyZW50Q1BVSUQgKCkgIT0gQ000X0NQVUlEKQpAQCAtODY5LDYgKzg3OCw5IEBACiAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLyogS2VlcCBEU1RPUCBtb2RlIHdoZW4gRDIgZG9tYWluIGVudGVycyBEZWVwc2xlZXAgKi8KKyAgICBDTEVBUl9CSVQgKFBXUi0+Q1BVMkNSLCBQV1JfQ1BVMkNSX1BERFNfRDIpOworCiAgICAgLyogU2V0IFNMRUVQREVFUCBiaXQgb2YgQ29ydGV4IFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyICovCiAgICAgU0VUX0JJVCAoU0NCLT5TQ1IsIFNDQl9TQ1JfU0xFRVBERUVQX01zayk7CiAKQEAgLTg5MCwxMyArOTAyLDMwIEBACiAKICAgICAvKiBDbGVhciBTTEVFUERFRVAgYml0IG9mIENvcnRleC1NeCBpbiB0aGUgU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgKi8KICAgICBDTEVBUl9CSVQgKFNDQi0+U0NSLCBTQ0JfU0NSX1NMRUVQREVFUF9Nc2spOwotI2VuZGlmIC8qIGRlZmluZWQgKERVQUxfQ09SRSkgKi8KKyNlbHNlCisgICAgLyogS2VlcCBEU1RPUCBtb2RlIHdoZW4gRDIgZG9tYWluIGVudGVycyBEZWVwc2xlZXAgKi8KKyAgICBDTEVBUl9CSVQgKFBXUi0+Q1BVQ1IsIFBXUl9DUFVDUl9QRERTX0QyKTsKKyNlbmRpZiAgLyogZGVmaW5lZCAoRFVBTF9DT1JFKSAqLwogICB9CiAjZW5kaWYgLyogZGVmaW5lZCAoUFdSX0NQVUNSX1BERFNfRDIpICovCiAgIGVsc2UKICAgeworI2lmIGRlZmluZWQgKERVQUxfQ09SRSkKKyAgICAvKiBDaGVjayBjdXJyZW50IGNvcmUgKi8KKyAgICBpZiAoSEFMX0dldEN1cnJlbnRDUFVJRCAoKSA9PSBDTTdfQ1BVSUQpCisgICAgeworICAgICAgLyogS2VlcCBEU1RPUCBtb2RlIHdoZW4gRDMgZG9tYWluIGVudGVycyBEZWVwc2xlZXAgKi8KKyAgICAgIENMRUFSX0JJVCAoUFdSLT5DUFVDUiwgUFdSX0NQVUNSX1BERFNfRDMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyogS2VlcCBEU1RPUCBtb2RlIHdoZW4gRDMgZG9tYWluIGVudGVycyBEZWVwc2xlZXAgKi8KKyAgICAgIENMRUFSX0JJVCAoUFdSLT5DUFUyQ1IsIFBXUl9DUFUyQ1JfUEREU19EMyk7CisgICAgfQorI2Vsc2UKICAgICAvKiBLZWVwIERTVE9QIG1vZGUgd2hlbiBEMy9TUkQgZG9tYWluIGVudGVycyBEZWVwc2xlZXAgKi8KICAgICBDTEVBUl9CSVQgKFBXUi0+Q1BVQ1IsIFBXUl9DUFVDUl9QRERTX0QzKTsKKyNlbmRpZiAgLyogZGVmaW5lZCAoRFVBTF9DT1JFKSAqLwogICB9CiB9CiAKQEAgLTkwNSw2ICs5MzQsNyBAQAogICAqIEBub3RlICAgVGhpcyBBUEkgY2xlYXJzIHRoZSBwZW5kaW5nIGV2ZW50IGluIG9yZGVyIHRvIGVudGVyIGEgZ2l2ZW4gQ1BVCiAgICogICAgICAgICB0byBDU0xFRVAgb3IgQ1NUT1AuIEl0IHNob3VsZCBiZSBjYWxsZWQganVzdCBiZWZvcmUgQVBJcyBwZXJmb3JtaW5nCiAgICogICAgICAgICBlbnRlciBsb3cgcG93ZXIgbW9kZSB1c2luZyBXYWl0IEZvciBFdmVudCByZXF1ZXN0LgorICAqIEBub3RlICAgQ29ydGV4LU03IG11c3QgYmUgaW4gQ1JVTiBtb2RlIHdoZW4gY2FsbGluZyB0aGlzIEFQSSBieSBDb3J0ZXgtTTQuCiAgICogQHJldHZhbCBOb25lLgogICAqLwogdm9pZCBIQUxfUFdSRXhfQ2xlYXJQZW5kaW5nRXZlbnQgKHZvaWQpCkBAIC0xMDI5LDExICsxMDU5LDExIEBACiAgIGVsc2UKICAgewogICAgIC8qIEFsbG93IERTVEFOREJZIG1vZGUgd2hlbiBEMy9TUkQgZG9tYWluIGVudGVycyBEZWVwc2xlZXAgKi8KLSAgICBTRVRfQklUIChQV1ItPiBDUFVDUiwgUFdSX0NQVUNSX1BERFNfRDMpOworICAgIFNFVF9CSVQgKFBXUi0+Q1BVQ1IsIFBXUl9DUFVDUl9QRERTX0QzKTsKIAogI2lmIGRlZmluZWQgKERVQUxfQ09SRSkKICAgICAvKiBBbGxvdyBEU1RBTkRCWSBtb2RlIHdoZW4gRDMvU1JEIGRvbWFpbiBlbnRlcnMgRGVlcHNsZWVwICovCi0gICAgU0VUX0JJVCAoUFdSLT4gQ1BVMkNSLCBQV1JfQ1BVMkNSX1BERFNfRDMpOworICAgIFNFVF9CSVQgKFBXUi0+Q1BVMkNSLCBQV1JfQ1BVMkNSX1BERFNfRDMpOwogI2VuZGlmIC8qIGRlZmluZWQgKERVQUxfQ09SRSkgKi8KICAgfQogfQpAQCAtMTMwOCw2ICsxMzM4LDggQEAKICAgKiAgICAgICAgICAgQGFyZyBQV1JfV0FLRVVQX1BJTjQgOiBEaXNhYmxlIFBDMTMgd2FrZS11cCBQSU4uCiAgICogICAgICAgICAgIEBhcmcgUFdSX1dBS0VVUF9QSU41IDogRGlzYWJsZSBQSTExIHdha2UtdXAgUElOLgogICAqICAgICAgICAgICBAYXJnIFBXUl9XQUtFVVBfUElONiA6IERpc2FibGUgUEMxICB3YWtlLXVwIFBJTi4KKyAgKiBAbm90ZSAgIFRoZSBQV1JfV0FLRVVQX1BJTjMgYW5kIFBXUl9XQUtFVVBfUElONSBhcmUgYXZhaWxhYmxlIG9ubHkgZm9yCisgICogICAgICAgICBkZXZpY2VzIHRoYXQgc3VwcG9ydCBHUElPSSBwb3J0LgogICAqIEByZXR2YWwgTm9uZQogICAqLwogdm9pZCBIQUxfUFdSRXhfRGlzYWJsZVdha2VVcFBpbiAodWludDMyX3QgV2FrZVVwUGluKQpAQCAtMTMzMSw2ICsxMzYzLDggQEAKICAgKiAgICAgICAgICAgIEBhcmcgUFdSX1dBS0VVUF9GTEFHNiAgICA6IEdldCB3YWtldXAgZXZlbnQgcmVjZWl2ZWQgZnJvbSBQQzEuCiAgICogICAgICAgICAgICBAYXJnIFBXUl9XQUtFVVBfRkxBR19BTEwgOiBHZXQgV2FrZXVwIGV2ZW50IHJlY2VpdmVkIGZyb20gYWxsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdha2UgdXAgcGlucy4KKyAgKiBAbm90ZSAgIFRoZSBQV1JfV0FLRVVQX0ZMQUczIGFuZCBQV1JfV0FLRVVQX0ZMQUc1IGFyZSBhdmFpbGFibGUgb25seSBmb3IKKyAgKiAgICAgICAgIGRldmljZXMgdGhhdCBzdXBwb3J0IEdQSU9JIHBvcnQuCiAgICogQHJldHZhbCBUaGUgV2FrZS1VcCBwaW4gZmxhZy4KICAgKi8KIHVpbnQzMl90IEhBTF9QV1JFeF9HZXRXYWtldXBGbGFnICh1aW50MzJfdCBXYWtlVXBGbGFnKQpAQCAtMTM1NCw2ICsxMzg4LDggQEAKICAgKiAgICAgICAgICAgIEBhcmcgUFdSX1dBS0VVUF9GTEFHNiA6IENsZWFyIHRoZSB3YWtldXAgZXZlbnQgcmVjZWl2ZWQgZnJvbSBQQzEuCiAgICogICAgICAgICAgICBAYXJnIFBXUl9XQUtFVVBfRkxBR19BTEwgOiBDbGVhciB0aGUgd2FrZXVwIGV2ZW50cyByZWNlaXZlZCBmcm9tCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCB3YWtlIHVwIHBpbnMuCisgICogQG5vdGUgICBUaGUgUFdSX1dBS0VVUF9GTEFHMyBhbmQgUFdSX1dBS0VVUF9GTEFHNSBhcmUgYXZhaWxhYmxlIG9ubHkgZm9yCisgICogICAgICAgICBkZXZpY2VzIHRoYXQgc3VwcG9ydCBHUElPSSBwb3J0LgogICAqIEByZXR2YWwgSEFMIHN0YXR1cy4KICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9QV1JFeF9DbGVhcldha2V1cEZsYWcgKHVpbnQzMl90IFdha2VVcEZsYWcpCkBAIC0xMzk3LDYgKzE0MzMsNyBAQAogICAgIC8qIFBXUiBXS1VQMiBpbnRlcnJ1cHQgdXNlciBjYWxsYmFjayAqLwogICAgIEhBTF9QV1JFeF9XS1VQMl9DYWxsYmFjayAoKTsKICAgfQorI2lmIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEYzKQogICBlbHNlIGlmIChSRUFEX0JJVCAoUFdSLT5XS1VQRlIsIFBXUl9XS1VQRlJfV0tVUEYzKSAhPSAwVSkKICAgewogICAgIC8qIENsZWFyIFBXUiBXS1VQRjMgZmxhZyAqLwpAQCAtMTQwNSw2ICsxNDQyLDcgQEAKICAgICAvKiBQV1IgV0tVUDMgaW50ZXJydXB0IHVzZXIgY2FsbGJhY2sgKi8KICAgICBIQUxfUFdSRXhfV0tVUDNfQ2FsbGJhY2sgKCk7CiAgIH0KKyNlbmRpZiAvKiBkZWZpbmVkIChQV1JfV0tVUEZSX1dLVVBGMykgKi8KICAgZWxzZSBpZiAoUkVBRF9CSVQgKFBXUi0+V0tVUEZSLCBQV1JfV0tVUEZSX1dLVVBGNCkgIT0gMFUpCiAgIHsKICAgICAvKiBDbGVhciBQV1IgV0tVUEY0IGZsYWcgKi8KQEAgLTE0MTMsNiArMTQ1MSw3IEBACiAgICAgLyogUFdSIFdLVVA0IGludGVycnVwdCB1c2VyIGNhbGxiYWNrICovCiAgICAgSEFMX1BXUkV4X1dLVVA0X0NhbGxiYWNrICgpOwogICB9CisjaWYgZGVmaW5lZCAoUFdSX1dLVVBGUl9XS1VQRjUpCiAgIGVsc2UgaWYgKFJFQURfQklUIChQV1ItPldLVVBGUiwgUFdSX1dLVVBGUl9XS1VQRjUpICE9IDBVKQogICB7CiAgICAgLyogQ2xlYXIgUFdSIFdLVVBGNSBmbGFnICovCkBAIC0xNDIxLDYgKzE0NjAsNyBAQAogICAgIC8qIFBXUiBXS1VQNSBpbnRlcnJ1cHQgdXNlciBjYWxsYmFjayAqLwogICAgIEhBTF9QV1JFeF9XS1VQNV9DYWxsYmFjayAoKTsKICAgfQorI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQRlJfV0tVUEY1KSAqLwogICBlbHNlCiAgIHsKICAgICAvKiBDbGVhciBQV1IgV0tVUEY2IGZsYWcgKi8KQEAgLTE0NTMsNiArMTQ5Myw3IEBACiAgICovCiB9CiAKKyNpZiBkZWZpbmVkIChQV1JfV0tVUEZSX1dLVVBGMykKIC8qKgogICAqIEBicmllZiBQV1IgV0tVUDMgaW50ZXJydXB0IGNhbGxiYWNrLgogICAqIEByZXR2YWwgTm9uZS4KQEAgLTE0NjMsNiArMTUwNCw3IEBACiAgICAgICAgICAgICB0aGUgSEFMX1BXUkV4X1dLVVAzQ2FsbGJhY2sgY2FuIGJlIGltcGxlbWVudGVkIGluIHRoZSB1c2VyIGZpbGUKICAgKi8KIH0KKyNlbmRpZiAvKiBkZWZpbmVkIChQV1JfV0tVUEZSX1dLVVBGMykgKi8KIAogLyoqCiAgICogQGJyaWVmIFBXUiBXS1VQNCBpbnRlcnJ1cHQgY2FsbGJhY2suCkBAIC0xNDc1LDYgKzE1MTcsNyBAQAogICAqLwogfQogCisjaWYgZGVmaW5lZCAoUFdSX1dLVVBGUl9XS1VQRjUpCiAvKioKICAgKiBAYnJpZWYgUFdSIFdLVVA1IGludGVycnVwdCBjYWxsYmFjay4KICAgKiBAcmV0dmFsIE5vbmUuCkBAIC0xNDg1LDYgKzE1MjgsNyBAQAogICAgICAgICAgICAgdGhlIEhBTF9QV1JFeF9XS1VQNUNhbGxiYWNrIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiB0aGUgdXNlciBmaWxlCiAgICovCiB9CisjZW5kaWYgLyogZGVmaW5lZCAoUFdSX1dLVVBGUl9XS1VQRjUpICovCiAKIC8qKgogICAqIEBicmllZiBQV1IgV0tVUDYgaW50ZXJydXB0IGNhbGxiYWNrLgpAQCAtMjAwMywxNCArMjA0NywxNCBAQAogdm9pZCBIQUxfUFdSRXhfUFZEX0FWRF9JUlFIYW5kbGVyICh2b2lkKQogewogICAvKiBDaGVjayBpZiB0aGUgUHJvZ3JhbW1hYmxlIFZvbHRhZ2UgRGV0ZWN0b3IgaXMgZW5hYmxlZCAoUFZEKSAqLwotICBpZihSRUFEX0JJVCAoUFdSLT5DUjEsIFBXUl9DUjFfUFZERU4pICE9IDBVKQorICBpZiAoUkVBRF9CSVQgKFBXUi0+Q1IxLCBQV1JfQ1IxX1BWREVOKSAhPSAwVSkKICAgewogI2lmIGRlZmluZWQgKERVQUxfQ09SRSkKICAgICBpZiAoSEFMX0dldEN1cnJlbnRDUFVJRCAoKSA9PSBDTTdfQ1BVSUQpCiAjZW5kaWYgLyogZGVmaW5lZCAoRFVBTF9DT1JFKSAqLwogICAgIHsKICAgICAgIC8qIENoZWNrIFBXUiBEMS9DRCBFWFRJIGZsYWcgKi8KLSAgICAgIGlmKF9fSEFMX1BXUl9QVkRfRVhUSV9HRVRfRkxBRyAoKSAhPSAwVSkKKyAgICAgIGlmIChfX0hBTF9QV1JfUFZEX0VYVElfR0VUX0ZMQUcgKCkgIT0gMFUpCiAgICAgICB7CiAgICAgICAgIC8qIFBXUiBQVkQgaW50ZXJydXB0IHVzZXIgY2FsbGJhY2sgKi8KICAgICAgICAgSEFMX1BXUl9QVkRDYWxsYmFjayAoKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3JjY19leC5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfcmNjX2V4LmMKaW5kZXggMjJjOWU5NC4uNTA4ZGQ5ZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfcmNjX2V4LmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfcmNjX2V4LmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJDQ0V4X1ByaXZhdGVfZGVmaW5lcyBQcml2YXRlIERlZmluZXMKKy8qKiBAZGVmZ3JvdXAgUkNDRXhfUHJpdmF0ZV9kZWZpbmVzIFJDQ0V4IFByaXZhdGUgRGVmaW5lcwogICogQHsKICAqLwogI2RlZmluZSBQTEwyX1RJTUVPVVRfVkFMVUUgICAgICAgICBQTExfVElNRU9VVF9WQUxVRSAgICAvKiAyIG1zICovCkBAIC01MCwxMiArNTAsMjEgQEAKICAgKiBAfQogICAqLwogCisvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBkZWZncm91cCBSQ0NFeF9Qcml2YXRlX01hY3JvcyBSQ0NFeCBQcml2YXRlIE1hY3JvcworICogQHsKKyAqLworLyoqCisgICogQH0KKyAgKi8KKworLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgUkNDRXhfUExMMl9Db25maWcoUkNDX1BMTDJJbml0VHlwZURlZiAqcGxsMiwgdWludDMyX3QgRGl2aWRlcik7CiBzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgUkNDRXhfUExMM19Db25maWcoUkNDX1BMTDNJbml0VHlwZURlZiAqcGxsMywgdWludDMyX3QgRGl2aWRlcik7CiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJDQ0V4X0V4cG9ydGVkX0Z1bmN0aW9ucyBFeHBvcnRlZCBGdW5jdGlvbnMKKy8qKiBAZGVmZ3JvdXAgUkNDRXhfRXhwb3J0ZWRfRnVuY3Rpb25zIFJDQ0V4IEV4cG9ydGVkIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCiAKQEAgLTg0LDcgKzkzLDcgQEAKICAgKiBAcGFyYW0gIFBlcmlwaENsa0luaXQ6IHBvaW50ZXIgdG8gYW4gUkNDX1BlcmlwaENMS0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0CiAgICogICAgICAgICBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIEV4dGVuZGVkIFBlcmlwaGVyYWxzCiAgICogICAgICAgICBjbG9ja3MgKFNETU1DLCBDS1BFUiwgRk1DLCBRU1BJKiwgT1NQSSosIERTSSwgU1BJNDUsIFNQRElGLCBERlNETTEsIERGU0RNMiosIEZEQ0FOLCBTV1BNSSwgU0FJMjMqLFNBSTJBKiwgU0FJMkIqLCBTQUkxLCBTUEkxMjMsCi0gICogICAgICAgICBVU0FSVDIzNDU3OCwgVVNBUlQxNiAoVVNBUlQxNjkxMCopLCBSTkcsIEhSVElNMSosIEkyQzEyMywgVVNCLCBDRUMsIExQVElNMSwgTFBVQVJUMSwgSTJDNCwgTFBUSU0yLCBMUFRJTTM0NSwgQURDLAorICAqICAgICAgICAgVVNBUlQyMzQ1NzgsIFVTQVJUMTYgKFVTQVJUMTY5MTAqKSwgUk5HLCBIUlRJTTEqLCBJMkMxMjMgKEkyQzEyMzUqKSwgVVNCLCBDRUMsIExQVElNMSwgTFBVQVJUMSwgSTJDNCwgTFBUSU0yLCBMUFRJTTM0NSwgQURDLAogICAqICAgICAgICAgU0FJNEEqLCBTQUk0QiosIFNQSTYsIFJUQykuCiAgICogQG5vdGUgICBDYXJlIG11c3QgYmUgdGFrZW4gd2hlbiBIQUxfUkNDRXhfUGVyaXBoQ0xLQ29uZmlnKCkgaXMgdXNlZCB0byBzZWxlY3QKICAgKiAgICAgICAgIHRoZSBSVEMgY2xvY2sgc291cmNlOyBpbiB0aGlzIGNhc2UgdGhlIEJhY2t1cCBkb21haW4gd2lsbCBiZSByZXNldCBpbgpAQCAtNDEyLDYgKzQyMSwxMyBAQAogICAgICAgLyogSFNJLCBIU0UsIG9yIENTSSBvc2NpbGxhdG9yIGlzIHVzZWQgYXMgc291cmNlIG9mIFNBSTIgY2xvY2sgKi8KICAgICAgIC8qIFNBSTEgY2xvY2sgc291cmNlIGNvbmZpZ3VyYXRpb24gZG9uZSBsYXRlciBhZnRlciBjbG9jayBzZWxlY3Rpb24gY2hlY2sgKi8KICAgICAgIGJyZWFrOworIAorI2lmIGRlZmluZWQoUkNDX1ZFUl8zXzApCisgICAgY2FzZSBSQ0NfU0FJNEFDTEtTT1VSQ0VfU1BESUY6CisgICAgICAvKiBTUERJRiBjbG9jayBpcyB1c2VkIGFzIHNvdXJjZSBvZiBTQUk0QSBjbG9jayAqLworICAgICAgLyogU0FJNEEgY2xvY2sgc291cmNlIGNvbmZpZ3VyYXRpb24gZG9uZSBsYXRlciBhZnRlciBjbG9jayBzZWxlY3Rpb24gY2hlY2sgKi8KKyAgICAgIGJyZWFrOworI2VuZGlmIC8qIFJDQ19WRVJfM18wICovCiAKICAgICBkZWZhdWx0OgogICAgICAgcmV0ID0gSEFMX0VSUk9SOwpAQCAtNDY0LDYgKzQ4MCwxMyBAQAogICAgICAgLyogU0FJMSBjbG9jayBzb3VyY2UgY29uZmlndXJhdGlvbiBkb25lIGxhdGVyIGFmdGVyIGNsb2NrIHNlbGVjdGlvbiBjaGVjayAqLwogICAgICAgYnJlYWs7CiAKKyNpZiBkZWZpbmVkKFJDQ19WRVJfM18wKQorICAgIGNhc2UgUkNDX1NBSTRCQ0xLU09VUkNFX1NQRElGOgorICAgICAgLyogU1BESUYgY2xvY2sgaXMgdXNlZCBhcyBzb3VyY2Ugb2YgU0FJNEIgY2xvY2sgKi8KKyAgICAgIC8qIFNBSTRCIGNsb2NrIHNvdXJjZSBjb25maWd1cmF0aW9uIGRvbmUgbGF0ZXIgYWZ0ZXIgY2xvY2sgc2VsZWN0aW9uIGNoZWNrICovCisgICAgICBicmVhazsKKyNlbmRpZiAvKiBSQ0NfVkVSXzNfMCAqLworCiAgICAgZGVmYXVsdDoKICAgICAgIHJldCA9IEhBTF9FUlJPUjsKICAgICAgIGJyZWFrOwpAQCAtMTI0Nyw3ICsxMjcwLDI1IEBACiAgICAgfQogICB9CiAKLSAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSTJDMS8yLzMgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJMkMxLzIvMy81KiBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgZGVmaW5lZChJMkM1KQorICBpZigoKFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uKSAmIFJDQ19QRVJJUEhDTEtfSTJDMTIzNSkgPT0gUkNDX1BFUklQSENMS19JMkMxMjM1KQorICB7CisgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgICBhc3NlcnRfcGFyYW0oSVNfUkNDX0kyQzEyMzVDTEtTT1VSQ0UoUGVyaXBoQ2xrSW5pdC0+STJjMTIzNUNsb2NrU2VsZWN0aW9uKSk7CisKKyAgICBpZiAoKFBlcmlwaENsa0luaXQtPkkyYzEyMzVDbG9ja1NlbGVjdGlvbiApPT0gUkNDX0kyQzEyMzVDTEtTT1VSQ0VfUExMMyApCisgICAgeworICAgICAgICBpZihSQ0NFeF9QTEwzX0NvbmZpZygmKFBlcmlwaENsa0luaXQtPlBMTDMpLERJVklERVJfUl9VUERBVEUpIT0gSEFMX09LKQorICAgICAgICB7CisgICAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOworICAgICAgICB9CisgICAgfQorCisgICAgICBfX0hBTF9SQ0NfSTJDMTIzNV9DT05GSUcoUGVyaXBoQ2xrSW5pdC0+STJjMTIzNUNsb2NrU2VsZWN0aW9uKTsKKworICB9CisjZWxzZQogICBpZigoKFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uKSAmIFJDQ19QRVJJUEhDTEtfSTJDMTIzKSA9PSBSQ0NfUEVSSVBIQ0xLX0kyQzEyMykKICAgewogICAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCkBAIC0xMjY0LDYgKzEzMDUsNyBAQAogICAgICAgX19IQUxfUkNDX0kyQzEyM19DT05GSUcoUGVyaXBoQ2xrSW5pdC0+STJjMTIzQ2xvY2tTZWxlY3Rpb24pOwogCiAgIH0KKyNlbmRpZiAvKiBJMkM1ICovCiAKICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSTJDNCBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIGlmKCgoUGVyaXBoQ2xrSW5pdC0+UGVyaXBoQ2xvY2tTZWxlY3Rpb24pICYgUkNDX1BFUklQSENMS19JMkM0KSA9PSBSQ0NfUEVSSVBIQ0xLX0kyQzQpCkBAIC0xNDcxLDcgKzE1MTMsNyBAQAogICAgIC8qIENvbmZpZ3VyZSB0aGUgU1dQTUkxIGludGVyZmFjZSBjbG9jayBzb3VyY2UgKi8KICAgICBfX0hBTF9SQ0NfU1dQTUkxX0NPTkZJRyhQZXJpcGhDbGtJbml0LT5Td3BtaTFDbG9ja1NlbGVjdGlvbik7CiAgIH0KLSNpZiBkZWZpbmVkKEhSVElNKQorI2lmIGRlZmluZWQoSFJUSU0xKQogICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIUlRJTTEgY2xvY2sgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tKi8KICAgaWYoKChQZXJpcGhDbGtJbml0LT5QZXJpcGhDbG9ja1NlbGVjdGlvbikgJiBSQ0NfUEVSSVBIQ0xLX0hSVElNMSkgPT0gUkNDX1BFUklQSENMS19IUlRJTTEpCiAgIHsKQEAgLTE0ODEsNyArMTUyMyw3IEBACiAgICAgLyogQ29uZmlndXJlIHRoZSBIUlRJTTEgY2xvY2sgc291cmNlICovCiAgICAgX19IQUxfUkNDX0hSVElNMV9DT05GSUcoUGVyaXBoQ2xrSW5pdC0+SHJ0aW0xQ2xvY2tTZWxlY3Rpb24pOwogICB9Ci0jZW5kaWYgIC8qSFJUSU0qLworI2VuZGlmICAvKkhSVElNMSovCiAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERGU0RNMSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIGlmKCgoUGVyaXBoQ2xrSW5pdC0+UGVyaXBoQ2xvY2tTZWxlY3Rpb24pICYgUkNDX1BFUklQSENMS19ERlNETTEpID09IFJDQ19QRVJJUEhDTEtfREZTRE0xKQogICB7CkBAIC0xNTM2LDcgKzE1NzgsNyBAQAogICAqIEBwYXJhbSAgUGVyaXBoQ2xrSW5pdDogcG9pbnRlciB0byBhbiBSQ0NfUGVyaXBoQ0xLSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQKICAgKiAgICAgICAgIHJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBFeHRlbmRlZCBQZXJpcGhlcmFscyBjbG9ja3MgOgogICAqICAgICAgICAgKFNETU1DLCBDS1BFUiwgRk1DLCBRU1BJKiwgT1NQSSosIERTSSosIFNQSTQ1LCBTUERJRiwgREZTRE0xLCBERlNETTIqLCBGRENBTiwgU1dQTUksIFNBSTIzKiwgU0FJMSwgU1BJMTIzLAotICAqICAgICAgICAgVVNBUlQyMzQ1NzgsIFVTQVJUMTYsIFJORywgSFJUSU0xKiwgSTJDMTIzLCBVU0IsIENFQywgTFBUSU0xLCBMUFVBUlQxLCBJMkM0LCBMUFRJTTIsIExQVElNMzQ1LCBBREMuCisgICogICAgICAgICBVU0FSVDIzNDU3OCwgVVNBUlQxNiwgUk5HLCBIUlRJTTEqLCBJMkMxMjMgKEkyQzEyMzUqKSwgVVNCLCBDRUMsIExQVElNMSwgTFBVQVJUMSwgSTJDNCwgTFBUSU0yLCBMUFRJTTM0NSwgQURDLgogICAqICAgICAgICAgU0FJNEEqLCBTQUk0QiosIFNQSTYsIFJUQywgVElNKS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKgpAQCAtMTU1NCwxNCArMTU5NiwxOCBAQAogCSAgICAgICAgIFJDQ19QRVJJUEhDTEtfQ0VDICAgICB8IFJDQ19QRVJJUEhDTEtfRk1DICAgICAgICAgfCBSQ0NfUEVSSVBIQ0xLX1NQRElGUlggfCBSQ0NfUEVSSVBIQ0xLX1RJTSAgICAgIHwKIAkgICAgICAgICBSQ0NfUEVSSVBIQ0xLX0NLUEVSOwogCisjaWYgZGVmaW5lZChJMkM1KQorUGVyaXBoQ2xrSW5pdC0+UGVyaXBoQ2xvY2tTZWxlY3Rpb24gfD0gUkNDX1BFUklQSENMS19JMkMxMjM1OworI2Vsc2UKIFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uIHw9IFJDQ19QRVJJUEhDTEtfSTJDMTIzOworI2VuZGlmIC8qSTJDNSovCiAjaWYgZGVmaW5lZChSQ0NfQ0RDQ0lQMVJfU0FJMkFTRUwpCiAgIFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uIHw9IFJDQ19QRVJJUEhDTEtfU0FJMkE7CiAjZW5kaWYgLyogUkNDX0NEQ0NJUDFSX1NBSTJBU0VMICovCi0jaWYgZGVmaW5lZChSQ0NfQ0RDQ0lQMVJfU0FJMkJTRUwpCisjaWYgZGVmaW5lZChSQ0NfQ0RDQ0lQMVJfU0FJMkJTRUwpCQkgCiAgIFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uIHw9IFJDQ19QRVJJUEhDTEtfU0FJMkI7CiAjZW5kaWYgLyogUkNDX0NEQ0NJUDFSX1NBSTJCU0VMICovCi0jaWYgZGVmaW5lZChTQUkzKQorI2lmIGRlZmluZWQoU0FJMykJIAogICBQZXJpcGhDbGtJbml0LT5QZXJpcGhDbG9ja1NlbGVjdGlvbiB8PSBSQ0NfUEVSSVBIQ0xLX1NBSTIzOwogI2VuZGlmIC8qIFNBSTMgKi8KICNpZiBkZWZpbmVkKFNBSTQpCkBAIC0xNTc3LDkgKzE2MjMsOSBAQAogI2lmIGRlZmluZWQoT0NUT1NQSTEpIHx8IGRlZmluZWQoT0NUT1NQSTIpCiAgIFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uIHw9IFJDQ19QRVJJUEhDTEtfT1NQSTsKICNlbmRpZiAvKiBPQ1RPU1BJMSB8fCBPQ1RPU1BJMiAqLwotI2lmIGRlZmluZWQoSFJUSU0pCisjaWYgZGVmaW5lZChIUlRJTTEpCiAgIFBlcmlwaENsa0luaXQtPlBlcmlwaENsb2NrU2VsZWN0aW9uIHw9IFJDQ19QRVJJUEhDTEtfSFJUSU0xOwotI2VuZGlmIC8qIEhSVElNICovCisjZW5kaWYgLyogSFJUSU0xICovCiAjaWYgZGVmaW5lZChMVERDKQogICBQZXJpcGhDbGtJbml0LT5QZXJpcGhDbG9ja1NlbGVjdGlvbiB8PSBSQ0NfUEVSSVBIQ0xLX0xUREM7CiAjZW5kaWYgLyogTFREQyAqLwpAQCAtMTYxMSw4ICsxNjU3LDEzIEBACiAgIFBlcmlwaENsa0luaXQtPlVzYXJ0MjM0NTc4Q2xvY2tTZWxlY3Rpb24gID0gX19IQUxfUkNDX0dFVF9VU0FSVDIzNDU3OF9TT1VSQ0UoKTsKICAgLyogR2V0IHRoZSBMUFVBUlQxIGNsb2NrIHNvdXJjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgIFBlcmlwaENsa0luaXQtPkxwdWFydDFDbG9ja1NlbGVjdGlvbiAgICAgID0gX19IQUxfUkNDX0dFVF9MUFVBUlQxX1NPVVJDRSgpOworI2lmIGRlZmluZWQoSTJDNSkKKyAgLyogR2V0IHRoZSBJMkMxLzIvMy81IGNsb2NrIHNvdXJjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgIFBlcmlwaENsa0luaXQtPkkyYzEyMzVDbG9ja1NlbGVjdGlvbiAgICAgICA9IF9fSEFMX1JDQ19HRVRfSTJDMV9TT1VSQ0UoKTsKKyNlbHNlCiAgIC8qIEdldCB0aGUgSTJDMS8yLzMgY2xvY2sgc291cmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICBQZXJpcGhDbGtJbml0LT5JMmMxMjNDbG9ja1NlbGVjdGlvbiAgICAgICA9IF9fSEFMX1JDQ19HRVRfSTJDMV9TT1VSQ0UoKTsKKyNlbmRpZiAvKkkyQzUqLwogICAvKiBHZXQgdGhlIExQVElNMSBjbG9jayBzb3VyY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgUGVyaXBoQ2xrSW5pdC0+THB0aW0xQ2xvY2tTZWxlY3Rpb24gICAgICAgPSBfX0hBTF9SQ0NfR0VUX0xQVElNMV9TT1VSQ0UoKTsKICAgLyogR2V0IHRoZSBMUFRJTTIgY2xvY2sgc291cmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMTc5LDcgKzMyMzAsNyBAQAogICAqIEB9CiAgICovCiAKLS8qKiBAZGVmZ3JvdXAgUkNDRXhfUHJpdmF0ZV9mdW5jdGlvbnMgUHJpdmF0ZSBGdW5jdGlvbnMKKy8qKiBAZGVmZ3JvdXAgUkNDRXhfUHJpdmF0ZV9mdW5jdGlvbnMgUkNDRXggUHJpdmF0ZSBGdW5jdGlvbnMKICAqIEB7CiAgKi8KIC8qKgpAQCAtMzQxNiw3ICszNDY3LDcgQEAKIHsKICAgLyogTk9URSA6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgd2hlbiB0aGUgY2FsbGJhY2sgaXMgbmVlZGVkLAogICAgICAgICAgICAgdGhlIEByZWYgSEFMX1JDQ0V4X0xTRUNTU19DYWxsYmFjayBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIHVzZXIgZmlsZQotICAgKi8KKyAgKi8KIH0KIAogCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9ybmcuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3JuZy5jCmluZGV4IDQyZWIxNzguLjA5YWExZTggMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX3JuZy5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX3JuZy5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAogLyogUHJpdmF0ZSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiogQGRlZmdyb3VwIFJOR19Qcml2YXRlX0RlZmluZXMKKy8qKiBAZGVmZ3JvdXAgUk5HX1ByaXZhdGVfRGVmaW5lcyBSTkcgUHJpdmF0ZSBEZWZpbmVzCiAgICogQHsKICAgKi8KIC8qICBIZWFsdGggdGVzdCBjb250cm9sIHJlZ2lzdGVyIGluZm9ybWF0aW9uIHRvIHVzZSBpbiBDQ00gYWxnb3JpdGhtICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9ybmdfZXguYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3JuZ19leC5jCmluZGV4IDk0YzU4ZjkuLmRhZDQzMjIgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX3JuZ19leC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX3JuZ19leC5jCkBAIC00MCw3ICs0MCw3IEBACiAjaWYgZGVmaW5lZCAoUk5HX0NSX0NPTkRSU1QpCiAvKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qKiBAZGVmZ3JvdXAgUk5HRXhfUHJpdmF0ZV9EZWZpbmVzCisvKiogQGRlZmdyb3VwIFJOR0V4X1ByaXZhdGVfRGVmaW5lcyBSTkdFeCBQcml2YXRlIERlZmluZXMKICAgKiBAewogICAqLwogLyogIEhlYWx0aCB0ZXN0IGNvbnRyb2wgcmVnaXN0ZXIgaW5mb3JtYXRpb24gdG8gdXNlIGluIENDTSBhbGdvcml0aG0gKi8KQEAgLTU1LDcgKzU1LDcgQEAKICAgKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoqIEBkZWZncm91cCBSTkdFeF9Qcml2YXRlX0NvbnN0YW50cyBSTkcgUHJpdmF0ZSBDb25zdGFudHMKKy8qKiBAZGVmZ3JvdXAgUk5HRXhfUHJpdmF0ZV9Db25zdGFudHMgUk5HRXggUHJpdmF0ZSBDb25zdGFudHMKICAgKiBAewogICAqLwogI2RlZmluZSBSTkdfVElNRU9VVF9WQUxVRSAgICAgMlUKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3J0Yy5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfcnRjLmMKaW5kZXggOTcwZjY1MC4uYjE1OGQzOCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfcnRjLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfcnRjLmMKQEAgLTIzMSw4ICsyMzEsNiBAQAogICAvKiBDaGVjayBSVEMgaGFuZGxlciAqLwogICBpZihocnRjICE9IE5VTEwpCiAgIHsKLSAgICBzdGF0dXMgPSBIQUxfT0s7Ci0KICAgICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICAgIGFzc2VydF9wYXJhbShJU19SVENfQUxMX0lOU1RBTkNFKGhydGMtPkluc3RhbmNlKSk7CiAgICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19IT1VSX0ZPUk1BVChocnRjLT5Jbml0LkhvdXJGb3JtYXQpKTsKQEAgLTMxMiwxOCArMzEwLDkgQEAKICAgICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gICAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBpZihSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCi0gICAgewotICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgLyogU2V0IFJUQyBzdGF0ZSAqLwotICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICBzdGF0dXMgPSBIQUxfRVJST1I7Ci0gICAgfQotICAgIGVsc2UKKyAgIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgICBzdGF0dXMgPSBSVENfRW50ZXJJbml0TW9kZShocnRjKTsKKyAgICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgICB7CiAjaWYgZGVmaW5lZChSVENfQ1JfVEFNUE9FKQogICAgICAgLyogQ2xlYXIgUlRDX0NSIEZNVCwgT1NFTCwgUE9MIGFuZCBUQU1QT0UgQml0cyAqLwpAQCAtMzQwLDI1ICszMjksNyBAQAogICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgPSAoaHJ0Yy0+SW5pdC5Bc3luY2hQcmVkaXYgPDwgUlRDX1BSRVJfUFJFRElWX0FfUG9zKSB8IChocnRjLT5Jbml0LlN5bmNoUHJlZGl2IDw8IFJUQ19QUkVSX1BSRURJVl9TX1Bvcyk7CiAKICAgICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotI2lmIGRlZmluZWQoUlRDX0lDU1JfSU5JVCkKLSAgICAgIENMRUFSX0JJVChocnRjLT5JbnN0YW5jZS0+SUNTUiwgUlRDX0lDU1JfSU5JVCk7Ci0jZW5kaWYgLyogUlRDX0lDU1JfSU5JVCAqLwotI2lmIGRlZmluZWQoUlRDX0lTUl9JTklUKQotICAgICAgQ0xFQVJfQklUKGhydGMtPkluc3RhbmNlLT5JU1IsIFJUQ19JU1JfSU5JVCk7Ci0jZW5kaWYgLyogUlRDX0lTUl9JTklUICovCi0KLSAgICAgIC8qIElmICBDUl9CWVBTSEFEIGJpdCA9IDAsIHdhaXQgZm9yIHN5bmNocm8gZWxzZSB0aGlzIGNoZWNrIGlzIG5vdCBuZWVkZWQgKi8KLSAgICAgIGlmKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfQllQU0hBRCkgPT0gMFUpCi0gICAgICB7Ci0gICAgICAgIGlmKEhBTF9SVENfV2FpdEZvclN5bmNocm8oaHJ0YykgIT0gSEFMX09LKQotICAgICAgICB7Ci0gICAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0gICAgICAgICAgc3RhdHVzID0gSEFMX0VSUk9SOwotICAgICAgICB9Ci0gICAgICB9CisgICAgICBzdGF0dXMgPSBSVENfRXhpdEluaXRNb2RlKGhydGMpOwogCiAgICAgICBpZihzdGF0dXMgPT0gSEFMX09LKQogICAgICAgewpAQCAtMzcxLDE0ICszNDIsMTUgQEAKICAgICAgICAgaHJ0Yy0+SW5zdGFuY2UtPk9SICY9IH4oUlRDX09SX0FMQVJNT1VUVFlQRSB8IFJUQ19PUl9PVVRfUk1QKTsKICAgICAgICAgaHJ0Yy0+SW5zdGFuY2UtPk9SIHw9IChocnRjLT5Jbml0Lk91dFB1dFR5cGUgfCBocnRjLT5Jbml0Lk91dFB1dFJlbWFwKTsKICNlbmRpZiAvKiBBTEFSTU9VVFRZUEUgJiYgUlRDX09SX09VVF9STVAgKi8KLQotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgLyogU2V0IFJUQyBzdGF0ZSAqLwotICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CiAgICAgICB9CiAgICAgfQorICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOworICAgIGlmIChzdGF0dXMgPT0gSEFMX09LKQorICAgIHsKKyAgICAgIC8qIFNldCBSVEMgc3RhdGUgKi8KKyAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKKyAgICB9CiAgIH0KIAogICAvKiByZXR1cm4gc3RhdHVzICovCkBAIC0zOTksOCArMzcxLDYgQEAKICAgLyogQ2hlY2sgUlRDIGhhbmRsZXIgKi8KICAgaWYoaHJ0YyAhPSBOVUxMKQogICB7Ci0gICAgc3RhdHVzID0gSEFMX09LOwotCiAgICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgICBhc3NlcnRfcGFyYW0oSVNfUlRDX0FMTF9JTlNUQU5DRShocnRjLT5JbnN0YW5jZSkpOwogCkBAIC00MDksMTkgKzM3OSw5IEBACiAKICAgICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwotCi0gICAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgICBpZihSVENfRW50ZXJJbml0TW9kZShocnRjKSAhPSBIQUxfT0spCi0gICAgewotICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgLyogU2V0IFJUQyBzdGF0ZSAqLwotICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICBzdGF0dXMgPSBIQUxfRVJST1I7Ci0gICAgfQotICAgIGVsc2UKKyAgICAvKiBFbnRlciBJbml0aWFsaXphdGlvbiBtb2RlICovCisgICAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CisgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCiAgICAgewogICAgICAgLyogUmVzZXQgVFIsIERSIGFuZCBDUiByZWdpc3RlcnMgKi8KICAgICAgIGhydGMtPkluc3RhbmNlLT5UUiA9IDB4MDAwMDAwMDBVOwpAQCAtNDM2LDcgKzM5Niw3IEBACiAgICAgICB3aGlsZSAoKChocnRjLT5JbnN0YW5jZS0+SUNTUikgJiBSVENfSUNTUl9XVVRXRikgPT0gMFUpCiAjZW5kaWYgLyogUlRDX0lDU1JfV1VUV0YgKi8KICNpZiBkZWZpbmVkKFJUQ19JU1JfV1VUV0YpCi0gICAgICB3aGlsZSAoKChocnRjLT5JbnN0YW5jZS0+SVNSKSAgJiBSVENfSVNSX1dVVFdGKSAgPT0gMFUpCisgICAgICAgIHdoaWxlICgoKGhydGMtPkluc3RhbmNlLT5JU1IpICAmIFJUQ19JU1JfV1VUV0YpICA9PSAwVSkKICNlbmRpZiAvKiBSVENfSVNSX1dVVFdGICovCiAgICAgICAgIHsKICAgICAgICAgICBpZigoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKQEAgLTQ0Nyw1MyArNDA3LDMzIEBACiAgICAgICAgICAgICAvKiBTZXQgUlRDIHN0YXRlICovCiAgICAgICAgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKIAotICAgICAgICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CiAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICBpZihzdGF0dXMgPT0gSEFMX09LKQotICAgIHsKLSAgICAgIC8qIFJlc2V0IGFsbCBSVEMgQ1IgcmVnaXN0ZXIgYml0cyAqLwotICAgICAgaHJ0Yy0+SW5zdGFuY2UtPkNSICY9IDB4MDAwMDAwMDBVOworICAgICAgLyogRXhpdCBpbml0aWFsaXphdGlvbiBtb2RlICovCisgICAgICBzdGF0dXMgPSBSVENfRXhpdEluaXRNb2RlKGhydGMpOworICAgICAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgICAgICB7CisgICAgICAgIC8qIFJlc2V0IGFsbCBSVEMgQ1IgcmVnaXN0ZXIgYml0cyAqLworICAgICAgICBocnRjLT5JbnN0YW5jZS0+Q1IgJj0gMHgwMDAwMDAwMFU7CiAKLSAgICAgIC8qIFJlc2V0IG90aGVyIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgIGhydGMtPkluc3RhbmNlLT5XVVRSID0gUlRDX1dVVFJfV1VUOwotICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgPSAoKHVpbnQzMl90KShSVENfUFJFUl9QUkVESVZfQSB8IDB4MDAwMDAwRkZVKSk7Ci0gICAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUFSID0gMHgwMDAwMDAwMFU7Ci0gICAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUJSID0gMHgwMDAwMDAwMFU7Ci0gICAgICBocnRjLT5JbnN0YW5jZS0+U0hJRlRSID0gMHgwMDAwMDAwMFU7Ci0gICAgICBocnRjLT5JbnN0YW5jZS0+Q0FMUiA9IDB4MDAwMDAwMDBVOwotICAgICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1BU1NSID0gMHgwMDAwMDAwMFU7Ci0gICAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUJTU1IgPSAweDAwMDAwMDAwVTsKKyAgICAgICAgLyogUmVzZXQgb3RoZXIgUlRDIHJlZ2lzdGVycyAqLworICAgICAgICBocnRjLT5JbnN0YW5jZS0+V1VUUiA9IFJUQ19XVVRSX1dVVDsKKyAgICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlBSRVIgPSAoKHVpbnQzMl90KShSVENfUFJFUl9QUkVESVZfQSB8IDB4MDAwMDAwRkZVKSk7CisgICAgICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQVIgPSAweDAwMDAwMDAwVTsKKyAgICAgICAgaHJ0Yy0+SW5zdGFuY2UtPkFMUk1CUiA9IDB4MDAwMDAwMDBVOworICAgICAgICBocnRjLT5JbnN0YW5jZS0+U0hJRlRSID0gMHgwMDAwMDAwMFU7CisgICAgICAgIGhydGMtPkluc3RhbmNlLT5DQUxSID0gMHgwMDAwMDAwMFU7CisgICAgICAgIGhydGMtPkluc3RhbmNlLT5BTFJNQVNTUiA9IDB4MDAwMDAwMDBVOworICAgICAgICBocnRjLT5JbnN0YW5jZS0+QUxSTUJTU1IgPSAweDAwMDAwMDAwVTsKIAotI2lmIGRlZmluZWQoUlRDX0lDU1JfSU5JVCkKLSAgICAgICAgLyogRXhpdCBpbml0aWFsaXphdGlvbiBtb2RlICovCi0gICAgICAgIENMRUFSX0JJVChocnRjLT5JbnN0YW5jZS0+SUNTUiwgUlRDX0lDU1JfSU5JVCk7Ci0jZW5kaWYgLyogUlRDX0lDU1JfSU5JVCAqLwogI2lmIGRlZmluZWQoUlRDX0lTUl9JTklUKQotICAgICAgICAvKiBSZXNldCBJU1IgcmVnaXN0ZXIgYW5kIGV4aXQgaW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICAgICAgICBocnRjLT5JbnN0YW5jZS0+SVNSID0gMHgwMDAwMDAwMFU7Ci0KICAgICAgICAgLyogUmVzZXQgVGFtcGVyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KICAgICAgICAgaHJ0Yy0+SW5zdGFuY2UtPlRBTVBDUiA9IDB4MDAwMDAwMDBVOwogCiAgICAgICAgIC8qIFJlc2V0IE9wdGlvbiByZWdpc3RlciAqLwogICAgICAgICBocnRjLT5JbnN0YW5jZS0+T1IgPSAweDAwMDAwMDAwVTsKICNlbmRpZiAvKiBSVENfSVNSX0lOSVQgKi8KLQotICAgICAgICAvKiBJZiAgUlRDX0NSX0JZUFNIQUQgYml0ID0gMCwgd2FpdCBmb3Igc3luY2hybyBlbHNlIHRoaXMgY2hlY2sgaXMgbm90IG5lZWRlZCAqLwotICAgICAgICBpZigoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0JZUFNIQUQpID09IDBVKQotICAgICAgICB7Ci0gICAgICAgICAgaWYoSEFMX1JUQ19XYWl0Rm9yU3luY2hybyhocnRjKSAhPSBIQUxfT0spCi0gICAgICAgICAgewotICAgICAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICAgICAgICBzdGF0dXMgPSBIQUxfRVJST1I7Ci0gICAgICAgICAgfQotICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCkBAIC04OTksNiArODM5LDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfU2V0VGltZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgUlRDX1RpbWVUeXBlRGVmICpzVGltZSwgdWludDMyX3QgRm9ybWF0KQogewogICB1aW50MzJfdCB0bXByZWc7CitIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19GT1JNQVQoRm9ybWF0KSk7CkBAIC05MTIsMjIgKzg1Myw5IEBACiAKICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7Ci0KLSAgLyogU2V0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSAgaWYoUlRDX0VudGVySW5pdE1vZGUoaHJ0YykgIT0gSEFMX09LKQotICB7Ci0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBTZXQgUlRDIHN0YXRlICovCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KLSAgZWxzZQorIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgaWYoRm9ybWF0ID09IFJUQ19GT1JNQVRfQklOKQogICAgIHsKQEAgLTk3OSwzOSArOTA3LDIxIEBACiAgICAgaHJ0Yy0+SW5zdGFuY2UtPkNSIHw9ICh1aW50MzJfdCkoc1RpbWUtPkRheUxpZ2h0U2F2aW5nIHwgc1RpbWUtPlN0b3JlT3BlcmF0aW9uKTsKIAogICAgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotI2lmIGRlZmluZWQoUlRDX0lDU1JfSU5JVCkKLSAgICBDTEVBUl9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklDU1IsIFJUQ19JQ1NSX0lOSVQpOwotI2VuZGlmIC8qIFJUQ19JQ1NSX0lOSVQgKi8KLSNpZiBkZWZpbmVkKFJUQ19JU1JfSU5JVCkKLSAgICBDTEVBUl9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklTUiwgUlRDX0lTUl9JTklUKTsKLSNlbmRpZiAvKiBSVENfSVNSX0lOSVQgKi8KLQotICAgIC8qIElmICBDUl9CWVBTSEFEIGJpdCA9IDAsIHdhaXQgZm9yIHN5bmNocm8gZWxzZSB0aGlzIGNoZWNrIGlzIG5vdCBuZWVkZWQgKi8KLSAgICBpZigoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0JZUFNIQUQpID09IDBVKQotICAgIHsKLSAgICAgIGlmKEhBTF9SVENfV2FpdEZvclN5bmNocm8oaHJ0YykgIT0gSEFMX09LKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7Ci0KLSAgICBfX0hBTF9VTkxPQ0soaHJ0Yyk7Ci0KLSAgICByZXR1cm4gSEFMX09LOworICAgIHN0YXR1cyA9IFJUQ19FeGl0SW5pdE1vZGUoaHJ0Yyk7CiAgIH0KKworICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisKKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CisgIH0KKworICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgIF9fSEFMX1VOTE9DSyhocnRjKTsKKworICByZXR1cm4gc3RhdHVzOwogfQogCiAvKioKQEAgLTEwODIsNiArOTkyLDcgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENfU2V0RGF0ZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgUlRDX0RhdGVUeXBlRGVmICpzRGF0ZSwgdWludDMyX3QgRm9ybWF0KQogewogICB1aW50MzJfdCBkYXRldG1wcmVnOworICBIQUxfU3RhdHVzVHlwZURlZiBzdGF0dXM7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1JUQ19GT1JNQVQoRm9ybWF0KSk7CkBAIC0xMTI0LDYwICsxMDM1LDMzIEBACiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIFNldCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0gIGlmKFJUQ19FbnRlckluaXRNb2RlKGhydGMpICE9IEhBTF9PSykKLSAgewotICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwogCi0gICAgLyogU2V0IFJUQyBzdGF0ZSovCi0gICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgIHJldHVybiBIQUxfRVJST1I7Ci0gIH0KLSAgZWxzZQorICAvKiBFbnRlciBJbml0aWFsaXphdGlvbiBtb2RlICovCisgIHN0YXR1cyA9IFJUQ19FbnRlckluaXRNb2RlKGhydGMpOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKICAgewogICAgIC8qIFNldCB0aGUgUlRDX0RSIHJlZ2lzdGVyICovCiAgICAgaHJ0Yy0+SW5zdGFuY2UtPkRSID0gKHVpbnQzMl90KShkYXRldG1wcmVnICYgUlRDX0RSX1JFU0VSVkVEX01BU0spOwogCisKICAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSNpZiBkZWZpbmVkKFJUQ19JQ1NSX0lOSVQpCi0gICAgQ0xFQVJfQklUKGhydGMtPkluc3RhbmNlLT5JQ1NSLCBSVENfSUNTUl9JTklUKTsKLSNlbmRpZiAvKiBSVENfSVNSX0lOSVQgKi8KLSNpZiBkZWZpbmVkKFJUQ19JU1JfSU5JVCkKLSAgICBDTEVBUl9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklTUiwgUlRDX0lTUl9JTklUKTsKLSNlbmRpZiAvKiBSVENfSVNSX0lOSVQgKi8KLQotICAgIC8qIElmICBDUl9CWVBTSEFEIGJpdCA9IDAsIHdhaXQgZm9yIHN5bmNocm8gZWxzZSB0aGlzIGNoZWNrIGlzIG5vdCBuZWVkZWQgKi8KLSAgICBpZigoaHJ0Yy0+SW5zdGFuY2UtPkNSICYgUlRDX0NSX0JZUFNIQUQpID09IDBVKQotICAgIHsKLSAgICAgIGlmKEhBTF9SVENfV2FpdEZvclN5bmNocm8oaHJ0YykgIT0gSEFMX09LKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX0VSUk9SOwotCi0gICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgICAgIHJldHVybiBIQUxfRVJST1I7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFkgOwotCi0gICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgIHJldHVybiBIQUxfT0s7CisgICAgc3RhdHVzID0gUlRDX0V4aXRJbml0TW9kZShocnRjKTsKICAgfQorCisgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLworICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9SRUFEWTsKKyAgfQorCisgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgX19IQUxfVU5MT0NLKGhydGMpOworCisgIHJldHVybiBzdGF0dXM7CisKKwogfQogCiAvKioKQEAgLTIwNTYsNyArMTk0MCw3IEBACiBIQUxfU3RhdHVzVHlwZURlZiBSVENfRW50ZXJJbml0TW9kZShSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKIHsKICAgdWludDMyX3QgdGlja3N0YXJ0OwotCisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKICAgLyogQ2hlY2sgaWYgdGhlIEluaXRpYWxpemF0aW9uIG1vZGUgaXMgc2V0ICovCiAjaWYgZGVmaW5lZChSVENfSUNTUl9JTklURikKICAgaWYoKGhydGMtPkluc3RhbmNlLT5JQ1NSICYgUlRDX0lDU1JfSU5JVEYpID09IDBVKQpAQCAtMjA3MCw3ICsxOTU0LDggQEAKICAgICB7CiAgICAgICBpZigoSEFMX0dldFRpY2soKSAgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCiAgICAgICB7Ci0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKKyAgICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CisgICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9USU1FT1VUOwogICAgICAgfQogICAgIH0KICAgfQpAQCAtMjA4NywxNSArMTk3Miw2MSBAQAogICAgIHsKICAgICAgIGlmKChIQUxfR2V0VGljaygpICAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKICAgICAgIHsKLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICBzdGF0dXMgPSBIQUxfVElNRU9VVDsKKyAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7CiAgICAgICB9CiAgICAgfQogICB9CiAjZW5kaWYgLyogUlRDX0lTUl9JTklURiAqLwogCi0gIHJldHVybiBIQUxfT0s7CisgIHJldHVybiBzdGF0dXM7CiB9CiAKKy8qKgorICAqIEBicmllZiAgRXhpdCB0aGUgUlRDIEluaXRpYWxpemF0aW9uIG1vZGUuCisgICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKKyAgKi8KK0hBTF9TdGF0dXNUeXBlRGVmIFJUQ19FeGl0SW5pdE1vZGUoUlRDX0hhbmRsZVR5cGVEZWYgKmhydGMpCit7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKKworICAvKiBDaGVjayBpZiB0aGUgSW5pdGlhbGl6YXRpb24gbW9kZSBpcyBzZXQgKi8KKyNpZiBkZWZpbmVkKFJUQ19JQ1NSX0lOSVRGKQorCisgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICBDTEVBUl9CSVQoUlRDLT5JQ1NSLCBSVENfSUNTUl9JTklUKTsKKworI2VsaWYgZGVmaW5lZChSVENfSVNSX0lOSVRGKQorCisgIC8qIEV4aXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLworICBDTEVBUl9CSVQoUlRDLT5JU1IsIFJUQ19JU1JfSU5JVEYpOworCisjZW5kaWYgLyogUlRDX0lTUl9JTklURiAqLworICAvKiBJZiBDUl9CWVBTSEFEIGJpdCA9IDAsIHdhaXQgZm9yIHN5bmNocm8gKi8KKyAgaWYgKFJFQURfQklUKFJUQy0+Q1IsIFJUQ19DUl9CWVBTSEFEKSA9PSAwVSkKKyAgeworICAgIGlmIChIQUxfUlRDX1dhaXRGb3JTeW5jaHJvKGhydGMpICE9IEhBTF9PSykKKyAgICB7CisgICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKKyAgICAgIHN0YXR1cyA9IEhBTF9USU1FT1VUOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBDbGVhciBCWVBTSEFEIGJpdCAqLworICAgIENMRUFSX0JJVChSVEMtPkNSLCBSVENfQ1JfQllQU0hBRCk7CisgICAgaWYgKEhBTF9SVENfV2FpdEZvclN5bmNocm8oaHJ0YykgIT0gSEFMX09LKQorICAgIHsKKyAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9USU1FT1VUOworICAgICAgc3RhdHVzID0gSEFMX1RJTUVPVVQ7CisgICAgfQorICAgIC8qIFJlc3RvcmUgQllQU0hBRCBiaXQgKi8KKyAgICBTRVRfQklUKFJUQy0+Q1IsIFJUQ19DUl9CWVBTSEFEKTsKKyAgfQorCisgIHJldHVybiBzdGF0dXM7Cit9CiAKIC8qKgogICAqIEBicmllZiAgQ29udmVydCBhIDIgZGlnaXQgZGVjaW1hbCB0byBCQ0QgZm9ybWF0LgpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfcnRjX2V4LmMgYi9TcmMvc3RtMzJoN3h4X2hhbF9ydGNfZXguYwppbmRleCAwNWQ4MTk1Li5lMWEwZDNhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9ydGNfZXguYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF9ydGNfZXguYwpAQCAtMTEyMSw4ICsxMTIxLDExIEBACiAgIC8qIEFjdGl2ZSBUYW1wZXJzIG11c3Qgbm90IGJlIGFscmVhZHkgZW5hYmxlZCAqLwogICBpZiAoUkVBRF9CSVQoVEFNUC0+QVRPUiwgVEFNUF9BVE9SX0lOSVRTKSAhPSAwVSkKICAgewotICAgIC8qIERpc2FibGUgYWxsIGFjdGl2ZXMgdGFtcGVycyB3aXRoIEhBTF9SVENFeF9EZWFjdGl2YXRlQWN0aXZlVGFtcGVycyBhbmQgdHJ5IGFnYWluICovCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAvKiBEaXNhYmxlIGFsbCBhY3RpdmUgdGFtcGVycyB3aXRoIEhBTF9SVENFeF9EZWFjdGl2YXRlQWN0aXZlVGFtcGVycyAqLworICAgIGlmIChIQUxfUlRDRXhfRGVhY3RpdmF0ZUFjdGl2ZVRhbXBlcnMoaHJ0YykgIT0gSEFMX09LKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQogICB9CiAKICAgLyogU2V0IFRpbWVTdGFtcCBvbiB0YW1wZXIgZGV0ZWN0aW9uICovCkBAIC0xOTg0LDY3ICsxOTg3LDQ4IEBACiAgIC8qIERpc2FibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCi0gIC8qIENoZWNrIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IG9ubHkgd2hlbiB3YWtlIHVwIHRpbWVyIGVuYWJsZWQgKi8KLSAgaWYgKChocnRjLT5JbnN0YW5jZS0+Q1IgJiBSVENfQ1JfV1VURSkgIT0gMFUpCi0gIHsKLSAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOworICAvKiBDbGVhciBXVVRFIGluIFJUQ19DUiB0byBkaXNhYmxlIHRoZSB3YWtldXAgdGltZXIgKi8KKyAgQ0xFQVJfQklUKFJUQy0+Q1IsIFJUQ19DUl9XVVRFKTsKIAotICAgIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyByZXNldCBhbmQgaWYgVGltZSBvdXQgaXMgcmVhY2hlZCBleGl0ICovCi0gICNpZiBkZWZpbmVkKFJUQ19JQ1NSX1dVVFdGKQotICAgIHdoaWxlIChSRUFEX0JJVChocnRjLT5JbnN0YW5jZS0+SUNTUiwgUlRDX0ZMQUdfV1VUV0YpICE9IDBVKQotICAjZW5kaWYgLyogUlRDX0lDU1JfV1VUV0YgKi8KLSAgI2lmIGRlZmluZWQoUlRDX0lTUl9XVVRXRikKLSAgICB3aGlsZShfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VUV0YpICE9IDBVKQotICAjZW5kaWYgLyogUlRDX0lTUl9XVVRXRiAqLworICAvKiBQb2xsIFdVVFdGIHVudGlsIGl0IGlzIHNldCBpbiBSVENfSUNTUiAvIFJUQ19JU1IgdG8gbWFrZSBzdXJlIHRoZSBhY2Nlc3MgdG8gd2FrZXVwIGF1dG9yZWxvYWQKKyAgY291bnRlciBhbmQgdG8gV1VDS1NFTFsyOjBdIGJpdHMgaXMgYWxsb3dlZC4gVGhpcyBzdGVwIG11c3QgYmUgc2tpcHBlZCBpbgorICBjYWxlbmRhciBpbml0aWFsaXphdGlvbiBtb2RlLiAqLworI2lmIGRlZmluZWQoUlRDX0lTUl9JTklURikKKyAgaWYgKFJFQURfQklUKFJUQy0+SVNSLCBSVENfSVNSX0lOSVRGKSA9PSAwVSkKKyNlbmRpZiAvKiBSVENfSVNSX0lOSVRGICovCisjaWYgZGVmaW5lZChSVENfSUNTUl9JTklURikKKyAgICBpZiAoUkVBRF9CSVQoUlRDLT5JQ1NSLCBSVENfSUNTUl9JTklURikgPT0gMFUpCisjZW5kaWYgLyogUlRDX0lDU1JfSU5JVEYgKi8KICAgICB7Ci0gICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCi0gICAgICB7Ci0gICAgICAgIC8qIEVuYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwotICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKKyAgICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CiAKLSAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7CisjaWYgZGVmaW5lZChSVENfSUNTUl9XVVRXRikKKyAgICAgIHdoaWxlIChSRUFEX0JJVChocnRjLT5JbnN0YW5jZS0+SUNTUiwgUlRDX0ZMQUdfV1VUV0YpID09IDBVKQorI2VuZGlmIC8qIFJUQ19JQ1NSX1dVVFdGICovCisjaWYgZGVmaW5lZChSVENfSVNSX1dVVFdGKQorICAgICAgICB3aGlsZShfX0hBTF9SVENfV0FLRVVQVElNRVJfR0VUX0ZMQUcoaHJ0YywgUlRDX0ZMQUdfV1VUV0YpID09IDBVKQorI2VuZGlmIC8qIFJUQ19JU1JfV1VUV0YgKi8KKyAgICAgICAgeworICAgICAgICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KKyAgICAgICAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwogCi0gICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgICAgX19IQUxfVU5MT0NLKGhydGMpOworICAgICAgICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7CiAKLSAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgICAgfQorICAgICAgICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLworICAgICAgICAgICAgX19IQUxfVU5MT0NLKGhydGMpOworCisgICAgICAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICB9Ci0KLSAgX19IQUxfUlRDX1dBS0VVUFRJTUVSX0RJU0FCTEUoaHJ0Yyk7Ci0KLSAgdGlja3N0YXJ0ID0gSEFMX0dldFRpY2soKTsKLQotICAvKiBXYWl0IHRpbGwgUlRDIFdVVFdGIGZsYWcgaXMgc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgI2lmIGRlZmluZWQoUlRDX0lDU1JfV1VUV0YpCi0gICAgd2hpbGUgKFJFQURfQklUKGhydGMtPkluc3RhbmNlLT5JQ1NSLCBSVENfRkxBR19XVVRXRikgPT0gMFUpCi0gICNlbmRpZiAvKiBSVENfSUNTUl9XVVRXRiAqLwotICAjaWYgZGVmaW5lZChSVENfSVNSX1dVVFdGKQotICAgIHdoaWxlKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgPT0gMFUpCi0gICNlbmRpZiAvKiBSVENfSVNSX1dVVFdGICovCi0gIHsKLSAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCi0gICAgewotICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKLQotICAgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1RJTUVPVVQ7Ci0KLSAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KLSAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKLQotICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwotICAgIH0KLSAgfQogCiAgIC8qIENsZWFyIHRoZSBXYWtldXAgVGltZXIgY2xvY2sgc291cmNlIGJpdHMgYW5kIGNvbmZpZ3VyZSB0aGUgY2xvY2sgc291cmNlIGluIENSIHJlZ2lzdGVyICovCi0gIHsKLSAgICB1aW50MzJfdCBDUl90bXAgPSBocnRjLT5JbnN0YW5jZS0+Q1I7Ci0gICAgQ1JfdG1wICY9ICh1aW50MzJfdCl+UlRDX0NSX1dVQ0tTRUw7Ci0gICAgQ1JfdG1wIHw9ICh1aW50MzJfdClXYWtlVXBDbG9jazsKLSAgICBocnRjLT5JbnN0YW5jZS0+Q1IgPSBDUl90bXA7Ci0gIH0KKyAgdWludDMyX3QgQ1JfdG1wID0gaHJ0Yy0+SW5zdGFuY2UtPkNSOworICBDUl90bXAgJj0gKHVpbnQzMl90KX5SVENfQ1JfV1VDS1NFTDsKKyAgQ1JfdG1wIHw9ICh1aW50MzJfdClXYWtlVXBDbG9jazsKKyAgaHJ0Yy0+SW5zdGFuY2UtPkNSID0gQ1JfdG1wOwogCiAgIC8qIENvbmZpZ3VyZSB0aGUgV2FrZXVwIFRpbWVyIGNvdW50ZXIgKi8KICAgaHJ0Yy0+SW5zdGFuY2UtPldVVFIgPSAodWludDMyX3QpV2FrZVVwQ291bnRlcjsKQEAgLTIwODYsNjIgKzIwNzAsNDIgQEAKICAgLyogRGlzYWJsZSB0aGUgd3JpdGUgcHJvdGVjdGlvbiBmb3IgUlRDIHJlZ2lzdGVycyAqLwogICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0RJU0FCTEUoaHJ0Yyk7CiAKLSAgLyogQ2hlY2sgUlRDIFdVVFdGIGZsYWcgaXMgcmVzZXQgb25seSB3aGVuIHdha2UgdXAgdGltZXIgZW5hYmxlZCAqLwotICBpZiAoKGhydGMtPkluc3RhbmNlLT5DUiAmIFJUQ19DUl9XVVRFKSAhPSAwVSkKLSAgewotICAgIHRpY2tzdGFydCA9IEhBTF9HZXRUaWNrKCk7CisgIC8qIENsZWFyIFdVVEUgaW4gUlRDX0NSIHRvIGRpc2FibGUgdGhlIHdha2V1cCB0aW1lciAqLworICBDTEVBUl9CSVQoUlRDLT5DUiwgUlRDX0NSX1dVVEUpOwogCi0gICAgLyogV2FpdCB0aWxsIFJUQyBXVVRXRiBmbGFnIGlzIHJlc2V0IGFuZCBpZiBUaW1lIG91dCBpcyByZWFjaGVkIGV4aXQgKi8KLSAgI2lmIGRlZmluZWQoUlRDX0lDU1JfV1VUV0YpCi0gICAgd2hpbGUgKFJFQURfQklUKGhydGMtPkluc3RhbmNlLT5JQ1NSLCBSVENfRkxBR19XVVRXRikgIT0gMFUpCi0gICNlbmRpZiAvKiBSVENfSUNTUl9XVVRXRiAqLwotICAjaWYgZGVmaW5lZChSVENfSVNSX1dVVFdGKQotICAgIHdoaWxlKF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9HRVRfRkxBRyhocnRjLCBSVENfRkxBR19XVVRXRikgIT0gMFUpCi0gICNlbmRpZiAvKiBSVENfSVNSX1dVVFdGICovCisgIC8qIFBvbGwgV1VUV0YgdW50aWwgaXQgaXMgc2V0IGluIFJUQ19JQ1NSIHRvIG1ha2Ugc3VyZSB0aGUgYWNjZXNzIHRvIHdha2V1cCBhdXRvcmVsb2FkCisgIGNvdW50ZXIgYW5kIHRvIFdVQ0tTRUxbMjowXSBiaXRzIGlzIGFsbG93ZWQuIFRoaXMgc3RlcCBtdXN0IGJlIHNraXBwZWQgaW4KKyAgY2FsZW5kYXIgaW5pdGlhbGl6YXRpb24gbW9kZS4gKi8KKyNpZiBkZWZpbmVkKFJUQ19JU1JfSU5JVEYpCisgIGlmIChSRUFEX0JJVChSVEMtPklTUiwgUlRDX0lTUl9JTklURikgPT0gMFUpCisjZW5kaWYgLyogUlRDX0lTUl9JTklURiAqLworI2lmIGRlZmluZWQoUlRDX0lDU1JfSU5JVEYpCisgICAgaWYgKFJFQURfQklUKFJUQy0+SUNTUiwgUlRDX0lDU1JfSU5JVEYpID09IDBVKQorI2VuZGlmIC8qIFJUQ19JQ1NSX0lOSVRGICovCiAgICAgewotICAgICAgaWYgKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+IFJUQ19USU1FT1VUX1ZBTFVFKQotICAgICAgewotICAgICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CisgICAgICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCi0gICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9USU1FT1VUOworI2lmIGRlZmluZWQoUlRDX0lDU1JfV1VUV0YpCisgICAgICB3aGlsZSAoUkVBRF9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklDU1IsIFJUQ19GTEFHX1dVVFdGKSA9PSAwVSkKKyNlbmRpZiAvKiBSVENfSUNTUl9XVVRXRiAqLworI2lmIGRlZmluZWQoUlRDX0lTUl9XVVRXRikKKyAgICAgICAgd2hpbGUoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVFdGKSA9PSAwVSkKKyNlbmRpZiAvKiBSVENfSVNSX1dVVFdGICovCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKEhBTF9HZXRUaWNrKCkgLSB0aWNrc3RhcnQpID4gUlRDX1RJTUVPVVRfVkFMVUUpCisgICAgICAgICAgeworICAgICAgICAgICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCisgICAgICAgICAgICBfX0hBTF9SVENfV1JJVEVQUk9URUNUSU9OX0VOQUJMRShocnRjKTsKIAotICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKKyAgICAgICAgICAgIGhydGMtPlN0YXRlID0gSEFMX1JUQ19TVEFURV9USU1FT1VUOwogCi0gICAgICAgIHJldHVybiBIQUxfVElNRU9VVDsKLSAgICAgIH0KKyAgICAgICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KKyAgICAgICAgICAgIF9fSEFMX1VOTE9DSyhocnRjKTsKKworICAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOworICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgfQotICAvKiBEaXNhYmxlIHRoZSBXYWtlLVVwIHRpbWVyICovCi0gIF9fSEFMX1JUQ19XQUtFVVBUSU1FUl9ESVNBQkxFKGhydGMpOwotCi0gIC8qIENsZWFyIGZsYWcgV2FrZS1VcCAqLwotICBfX0hBTF9SVENfV0FLRVVQVElNRVJfQ0xFQVJfRkxBRyhocnRjLCBSVENfRkxBR19XVVRGKTsKLQotICB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwotCi0gIC8qIFdhaXQgdGlsbCBSVEMgV1VUV0YgZmxhZyBpcyBzZXQgYW5kIGlmIFRpbWUgb3V0IGlzIHJlYWNoZWQgZXhpdCAqLwotICAjaWYgZGVmaW5lZChSVENfSUNTUl9XVVRXRikKLSAgICB3aGlsZSAoUkVBRF9CSVQoaHJ0Yy0+SW5zdGFuY2UtPklDU1IsIFJUQ19GTEFHX1dVVFdGKSA9PSAwVSkKLSAgI2VuZGlmIC8qIFJUQ19JQ1NSX1dVVFdGICovCi0gICNpZiBkZWZpbmVkKFJUQ19JU1JfV1VUV0YpCi0gICAgd2hpbGUoX19IQUxfUlRDX1dBS0VVUFRJTUVSX0dFVF9GTEFHKGhydGMsIFJUQ19GTEFHX1dVVFdGKSA9PSAwVSkKLSAgI2VuZGlmIC8qIFJUQ19JU1JfV1VUV0YgKi8KLSAgewotICAgIGlmICgoSEFMX0dldFRpY2soKSAtIHRpY2tzdGFydCkgPiBSVENfVElNRU9VVF9WQUxVRSkKLSAgICB7Ci0gICAgICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KLSAgICAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwotCi0gICAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfVElNRU9VVDsKLQotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7Ci0gICAgfQotICB9CiAKICAgLyogQ29uZmlndXJlIHRoZSBXYWtldXAgVGltZXIgY291bnRlciAqLwogICBocnRjLT5JbnN0YW5jZS0+V1VUUiA9ICh1aW50MzJfdClXYWtlVXBDb3VudGVyOwpAQCAtMjczMiw2ICsyNjk2LDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9TZXRSZWZDbG9jayhSVENfSGFuZGxlVHlwZURlZiAqIGhydGMpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhocnRjKTsKIApAQCAtMjc0MCwzOSArMjcwNSwyMyBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKiBTZXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICBpZiAoUlRDX0VudGVySW5pdE1vZGUoaHJ0YykgIT0gSEFMX09LKQotICB7Ci0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBTZXQgUlRDIHN0YXRlKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCisgIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgX19IQUxfUlRDX0NMT0NLUkVGX0RFVEVDVElPTl9FTkFCTEUoaHJ0Yyk7CiAKICAgICAvKiBFeGl0IEluaXRpYWxpemF0aW9uIG1vZGUgKi8KLSNpZiBkZWZpbmVkKFJUQ19JQ1NSX0lOSVQpCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPklDU1IgJj0gKHVpbnQzMl90KX5SVENfSUNTUl9JTklUOwotI2VuZGlmIC8qIFJUQ19JQ1NSX0lOSVQgKi8KLSNpZiBkZWZpbmVkKFJUQ19JU1JfSU5JVCkKLSAgICBocnRjLT5JbnN0YW5jZS0+SVNSICY9ICh1aW50MzJfdCl+UlRDX0lTUl9JTklUOwotI2VuZGlmIC8qIFJUQ19JU1JfSU5JVCAqLworICAgIHN0YXR1cyA9IFJUQ19FeGl0SW5pdE1vZGUoaHJ0Yyk7CiAgIH0KIAogICAvKiBFbmFibGUgdGhlIHdyaXRlIHByb3RlY3Rpb24gZm9yIFJUQyByZWdpc3RlcnMgKi8KICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgLyogQ2hhbmdlIFJUQyBzdGF0ZSAqLwotICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7Ci0KKyAgaWYgKHN0YXR1cyA9PSBIQUxfT0spCisgIHsKKyAgICAvKiBDaGFuZ2UgUlRDIHN0YXRlICovCisgICAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOworICB9CiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgX19IQUxfVU5MT0NLKGhydGMpOwogCkBAIC0yNzg2LDYgKzI3MzUsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1JUQ0V4X0RlYWN0aXZhdGVSZWZDbG9jayhSVENfSGFuZGxlVHlwZURlZiAqIGhydGMpCiB7CisgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1czsKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhocnRjKTsKIApAQCAtMjc5NCwzOCArMjc0NCwyNSBAQAogICAvKiBEaXNhYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRElTQUJMRShocnRjKTsKIAotICAvKiBTZXQgSW5pdGlhbGl6YXRpb24gbW9kZSAqLwotICBpZiAoUlRDX0VudGVySW5pdE1vZGUoaHJ0YykgIT0gSEFMX09LKQotICB7Ci0gICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCi0gICAgX19IQUxfUlRDX1dSSVRFUFJPVEVDVElPTl9FTkFCTEUoaHJ0Yyk7Ci0KLSAgICAvKiBTZXQgUlRDIHN0YXRlKi8KLSAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfRVJST1I7Ci0KLSAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCi0gICAgX19IQUxfVU5MT0NLKGhydGMpOwotCi0gICAgcmV0dXJuIEhBTF9FUlJPUjsKLSAgfQotICBlbHNlCisgIC8qIEVudGVyIEluaXRpYWxpemF0aW9uIG1vZGUgKi8KKyAgc3RhdHVzID0gUlRDX0VudGVySW5pdE1vZGUoaHJ0Yyk7CisgIGlmIChzdGF0dXMgPT0gSEFMX09LKQogICB7CiAgICAgX19IQUxfUlRDX0NMT0NLUkVGX0RFVEVDVElPTl9ESVNBQkxFKGhydGMpOwogCiAgICAgLyogRXhpdCBJbml0aWFsaXphdGlvbiBtb2RlICovCi0jaWYgZGVmaW5lZChSVENfSUNTUl9JTklUKQotICAgIGhydGMtPkluc3RhbmNlLT5JQ1NSICY9ICh1aW50MzJfdCl+UlRDX0lDU1JfSU5JVDsKLSNlbmRpZiAvKiBSVENfSUNTUl9JTklUICovCi0jaWYgZGVmaW5lZChSVENfSVNSX0lOSVQpCi0gICAgaHJ0Yy0+SW5zdGFuY2UtPklTUiAmPSAodWludDMyX3QpflJUQ19JU1JfSU5JVDsKLSNlbmRpZiAvKiBSVENfSVNSX0lOSVQgKi8KKyAgICBzdGF0dXMgPSBSVENfRXhpdEluaXRNb2RlKGhydGMpOwogICB9CiAKICAgLyogRW5hYmxlIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGZvciBSVEMgcmVnaXN0ZXJzICovCiAgIF9fSEFMX1JUQ19XUklURVBST1RFQ1RJT05fRU5BQkxFKGhydGMpOwogCi0gIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KLSAgaHJ0Yy0+U3RhdGUgPSBIQUxfUlRDX1NUQVRFX1JFQURZOworICBpZiAoc3RhdHVzID09IEhBTF9PSykKKyAgeworICAgIC8qIENoYW5nZSBSVEMgc3RhdGUgKi8KKyAgICBocnRjLT5TdGF0ZSA9IEhBTF9SVENfU1RBVEVfUkVBRFk7CisKKyAgfQogCiAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgX19IQUxfVU5MT0NLKGhydGMpOwpAQCAtMjkwMSwxMSArMjgzOCwxNSBAQAogLyoqCiAgICogQGJyaWVmICBJbmNyZW1lbnQgTW9ub3RvbmljIGNvdW50ZXIuCiAgICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcGFyYW0gIEluc3RhbmNlICBNb25vdG9uaWMgY291bnRlciBJbnN0YW5jZQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgOgorICAqICAgICAgICAgICBAYXJnIFJUQ19NT05PVE9OSUNfQ09VTlRFUl8xCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfTW9ub3RvbmljQ291bnRlckluY3JlbWVudChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YykKK0hBTF9TdGF0dXNUeXBlRGVmIEhBTF9SVENFeF9Nb25vdG9uaWNDb3VudGVySW5jcmVtZW50KFJUQ19IYW5kbGVUeXBlRGVmICpocnRjLCAgdWludDMyX3QgSW5zdGFuY2UpCiB7CiAgIFVOVVNFRChocnRjKTsKKyAgVU5VU0VEKEluc3RhbmNlKTsKICAgLyogVGhpcyByZWdpc3RlciBpcyByZWFkLW9ubHkgb25seSBhbmQgaXMgaW5jcmVtZW50ZWQgYnkgb25lIHdoZW4gYSB3cml0ZSBhY2Nlc3MgaXMgZG9uZSB0byB0aGlzCiAgICAgIHJlZ2lzdGVyLiBUaGlzIHJlZ2lzdGVyIGNhbm5vdCByb2xsLW92ZXIgYW5kIGlzIGZyb3plbiB3aGVuIHJlYWNoaW5nIHRoZSBtYXhpbXVtIHZhbHVlLiAqLwogICBDTEVBUl9SRUcoVEFNUC0+Q09VTlRSKTsKQEAgLTI5MTYsMTIgKzI4NTcsMTYgQEAKIC8qKgogICAqIEBicmllZiAgTW9ub3RvbmljIGNvdW50ZXIgaW5jcmVtZW50YXRpb24uCiAgICogQHBhcmFtICBocnRjIFJUQyBoYW5kbGUKKyAgKiBAcGFyYW0gIEluc3RhbmNlICBNb25vdG9uaWMgY291bnRlciBJbnN0YW5jZQorICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgOgorICAqICAgICAgICAgICBAYXJnIFJUQ19NT05PVE9OSUNfQ09VTlRFUl8xCiAgICogQHBhcmFtICBDb3VudGVyIG1vbm90b25pYyBjb3VudGVyIHZhbHVlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1IQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfTW9ub3RvbmljQ291bnRlckdldChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgKkNvdW50ZXIpCitIQUxfU3RhdHVzVHlwZURlZiBIQUxfUlRDRXhfTW9ub3RvbmljQ291bnRlckdldChSVENfSGFuZGxlVHlwZURlZiAqaHJ0YywgdWludDMyX3QgKkNvdW50ZXIsICB1aW50MzJfdCBJbnN0YW5jZSkKIHsKICAgVU5VU0VEKGhydGMpOworICBVTlVTRUQoSW5zdGFuY2UpOwogICAvKiBUaGlzIHJlZ2lzdGVyIGlzIHJlYWQtb25seSBvbmx5IGFuZCBpcyBpbmNyZW1lbnRlZCBieSBvbmUgd2hlbiBhIHdyaXRlIGFjY2VzcyBpcyBkb25lIHRvIHRoaXMKICAgICAgcmVnaXN0ZXIuIFRoaXMgcmVnaXN0ZXIgY2Fubm90IHJvbGwtb3ZlciBhbmQgaXMgZnJvemVuIHdoZW4gcmVhY2hpbmcgdGhlIG1heGltdW0gdmFsdWUuICovCiAgICpDb3VudGVyID0gUkVBRF9SRUcoVEFNUC0+Q09VTlRSKTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3NhaS5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfc2FpLmMKaW5kZXggMzZlN2VlOS4uYmRiZGI2MiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfc2FpLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfc2FpLmMKQEAgLTI0NCw3ICsyNDQsNiBAQAogLyoqIEBkZWZncm91cCBTQUlfUHJpdmF0ZV9Db25zdGFudHMgIFNBSSBQcml2YXRlIENvbnN0YW50cwogICAqIEB7CiAgICovCi0jZGVmaW5lIFNBSV9GSUZPX1NJWkUgICAgICAgICAgICA4VQogI2RlZmluZSBTQUlfREVGQVVMVF9USU1FT1VUICAgICAgNFUKICNkZWZpbmUgU0FJX0xPTkdfVElNRU9VVCAgICAgICAgIDEwMDBVCiAvKioKQEAgLTYxNyw4ICs2MTYsMjYgQEAKICAgICBpZiAoaHNhaS0+SW5pdC5Ob0RpdmlkZXIgPT0gU0FJX01BU1RFUkRJVklERVJfRElTQUJMRSkKICAgICB7CiAgICAgICAvKiBOT0RJViA9IDEgKi8KKyAgICAgIHVpbnQzMl90IHRtcGZyYW1lbGVuZ3RoOworCisgICAgICBpZiAoaHNhaS0+SW5pdC5Qcm90b2NvbCA9PSBTQUlfU1BESUZfUFJPVE9DT0wpCisgICAgICB7CisgICAgICAgIC8qIEZvciBTUERJRiBwcm90b2NvbCwgZnJhbWUgbGVuZ3RoIGlzIHNldCBieSBoYXJkd2FyZSB0byA2NCAqLworICAgICAgICB0bXBmcmFtZWxlbmd0aCA9IDY0VTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGhzYWktPkluaXQuUHJvdG9jb2wgPT0gU0FJX0FDOTdfUFJPVE9DT0wpCisgICAgICB7CisgICAgICAgIC8qIEZvciBBQzk3IHByb3RvY29sLCBmcmFtZSBsZW5ndGggaXMgc2V0IGJ5IGhhcmR3YXJlIHRvIDI1NiAqLworICAgICAgICB0bXBmcmFtZWxlbmd0aCA9IDI1NlU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIEZvciBmcmVlIHByb3RvY29sLCBmcmFtZSBsZW5ndGggaXMgc2V0IGJ5IHVzZXIgKi8KKyAgICAgICAgdG1wZnJhbWVsZW5ndGggPSBoc2FpLT5GcmFtZUluaXQuRnJhbWVMZW5ndGg7CisgICAgICB9CisKICAgICAgIC8qIChmcmVxIHggMTApIHRvIGtlZXAgU2lnbmlmaWNhbnQgZGlnaXRzICovCi0gICAgICB0bXB2YWwgPSAoZnJlcSAqIDEwVSkgLyAoaHNhaS0+SW5pdC5BdWRpb0ZyZXF1ZW5jeSAqIGhzYWktPkZyYW1lSW5pdC5GcmFtZUxlbmd0aCk7CisgICAgICB0bXB2YWwgPSAoZnJlcSAqIDEwVSkgLyAoaHNhaS0+SW5pdC5BdWRpb0ZyZXF1ZW5jeSAqIHRtcGZyYW1lbGVuZ3RoKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTYzNSw4ICs2NTIsMTcgQEAKICAgICB7CiAgICAgICBoc2FpLT5Jbml0Lk1ja2RpdiArPSAxVTsKICAgICB9CisKKyAgICAvKiBGb3IgU1BESUYgcHJvdG9jb2wsIFNBSSBzaGFsbCBwcm92aWRlIGEgYml0IGNsb2NrIHR3aWNlIGZhc3RlciB0aGUgc3ltYm9sLXJhdGUgKi8KKyAgICBpZiAoaHNhaS0+SW5pdC5Qcm90b2NvbCA9PSBTQUlfU1BESUZfUFJPVE9DT0wpCisgICAgeworICAgICAgaHNhaS0+SW5pdC5NY2tkaXYgPSBoc2FpLT5Jbml0Lk1ja2RpdiA+PiAxOworICAgIH0KICAgfQogCisgIC8qIENoZWNrIHRoZSBTQUkgQmxvY2sgbWFzdGVyIGNsb2NrIGRpdmlkZXIgcGFyYW1ldGVyICovCisgIGFzc2VydF9wYXJhbShJU19TQUlfQkxPQ0tfTUFTVEVSX0RJVklERVIoaHNhaS0+SW5pdC5NY2tkaXYpKTsKKwogICAvKiBDb21wdXRlIENLU1RSIGJpdHMgb2YgU0FJIENSMSBhY2NvcmRpbmcgQ2xvY2tTdHJvYmluZyBhbmQgQXVkaW9Nb2RlICovCiAgIGlmICgoaHNhaS0+SW5pdC5BdWRpb01vZGUgPT0gU0FJX01PREVNQVNURVJfVFgpIHx8IChoc2FpLT5Jbml0LkF1ZGlvTW9kZSA9PSBTQUlfTU9ERVNMQVZFX1RYKSkKICAgewpAQCAtMjUwNiw3ICsyNTMyLDcgQEAKICAgKi8KIHN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTQUlfRGlzYWJsZShTQUlfSGFuZGxlVHlwZURlZiAqaHNhaSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTQUlfREVGQVVMVF9USU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDdVIC8gMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNBSV9ERUZBVUxUX1RJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gN1UgLyAxMDAwVSk7CiAgIEhBTF9TdGF0dXNUeXBlRGVmIHN0YXR1cyA9IEhBTF9PSzsKIAogICAvKiBEaXNhYmxlIHRoZSBTQUkgaW5zdGFuY2UgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3NkLmMgYi9TcmMvc3RtMzJoN3h4X2hhbF9zZC5jCmluZGV4IDcwMDY2MGQuLmIyNDY3Y2EgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX3NkLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfc2QuYwpAQCAtNDcyLDcgKzQ3MiwxMCBAQAogICBJbml0LkNsb2NrUG93ZXJTYXZlICAgICAgPSBTRE1NQ19DTE9DS19QT1dFUl9TQVZFX0RJU0FCTEU7CiAgIEluaXQuQnVzV2lkZSAgICAgICAgICAgICA9IFNETU1DX0JVU19XSURFXzFCOwogICBJbml0LkhhcmR3YXJlRmxvd0NvbnRyb2wgPSBTRE1NQ19IQVJEV0FSRV9GTE9XX0NPTlRST0xfRElTQUJMRTsKLSAgSW5pdC5DbG9ja0RpdiAgICAgICAgICAgID0gU0RNTUNfSU5JVF9DTEtfRElWOworCisgIC8qIEluaXQgQ2xvY2sgc2hvdWxkIGJlIGxlc3Mgb3IgZXF1YWwgdG8gNDAwS2h6Ki8KKyAgc2RtbWNfY2xrICAgICA9IEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKFJDQ19QRVJJUEhDTEtfU0RNTUMpOworICBJbml0LkNsb2NrRGl2ID0gc2RtbWNfY2xrLygyVSo0MDAwMDBVKTsKIAogI2lmIChVU0VfU0RfVFJBTlNDRUlWRVIgIT0gMFUpCiAgIGlmIChoc2QtPkluaXQuVHJhbmNlaXZlclByZXNlbnQgPT0gU0RNTUNfVFJBTlNDRUlWRVJfUFJFU0VOVCkKQEAgLTQ5MSw5ICs0OTQsOSBAQAogICAvKiBTZXQgUG93ZXIgU3RhdGUgdG8gT04gKi8KICAgKHZvaWQpU0RNTUNfUG93ZXJTdGF0ZV9PTihoc2QtPkluc3RhbmNlKTsKIAotICAvKiB3YWl0IDc0IEN5Y2xlczogcmVxdWlyZWQgcG93ZXIgdXAgd2FpdGluZyB0aW1lIGJlZm9yZSBzdGFydGluZyAKKyAgLyogd2FpdCA3NCBDeWNsZXM6IHJlcXVpcmVkIHBvd2VyIHVwIHdhaXRpbmcgdGltZSBiZWZvcmUgc3RhcnRpbmcKICAgICAgdGhlIFNEIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlICovCi0gIHNkbW1jX2NsayA9IEhBTF9SQ0NFeF9HZXRQZXJpcGhDTEtGcmVxKFJDQ19QRVJJUEhDTEtfU0RNTUMpLygyVSpTRE1NQ19JTklUX0NMS19ESVYpOworICBzZG1tY19jbGsgPSBzZG1tY19jbGsvKDJVKkluaXQuQ2xvY2tEaXYpOwogCiAgIGlmKHNkbW1jX2NsayAhPSAwVSkKICAgewpAQCAtMTQ3Nyw3ICsxNDgwLDcgQEAKICAgICB9CiAKICAgICAvKiBTZW5kIENNRDM4IEVSQVNFICovCi0gICAgZXJyb3JzdGF0ZSA9IFNETU1DX0NtZEVyYXNlKGhzZC0+SW5zdGFuY2UpOworICAgIGVycm9yc3RhdGUgPSBTRE1NQ19DbWRFcmFzZShoc2QtPkluc3RhbmNlLCAwVUwpOwogICAgIGlmKGVycm9yc3RhdGUgIT0gSEFMX1NEX0VSUk9SX05PTkUpCiAgICAgewogICAgICAgLyogQ2xlYXIgYWxsIHRoZSBzdGF0aWMgZmxhZ3MgKi8KQEAgLTIxMjcsNyArMjEzMCw3IEBACiAgICogQGJyaWVmICBSZXR1cm5zIGluZm9ybWF0aW9uIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgY2FyZCB3aGljaCBhcmUgc3RvcmVkIG9uCiAgICogICAgICAgICB0aGUgQ0lEIHJlZ2lzdGVyLgogICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQotICAqIEBwYXJhbSAgcENJRDogUG9pbnRlciB0byBhIEhBTF9TRF9DYXJkQ0lEVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCAgCisgICogQHBhcmFtICBwQ0lEOiBQb2ludGVyIHRvIGEgSEFMX1NEX0NhcmRDSURUeXBlRGVmIHN0cnVjdHVyZSB0aGF0CiAgICogICAgICAgICBjb250YWlucyBhbGwgQ0lEIHJlZ2lzdGVyIHBhcmFtZXRlcnMKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTIxNjAsNyArMjE2Myw3IEBACiAgICogQGJyaWVmICBSZXR1cm5zIGluZm9ybWF0aW9uIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgY2FyZCB3aGljaCBhcmUgc3RvcmVkIG9uCiAgICogICAgICAgICB0aGUgQ1NEIHJlZ2lzdGVyLgogICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQotICAqIEBwYXJhbSAgcENTRDogUG9pbnRlciB0byBhIEhBTF9TRF9DYXJkQ1NEVHlwZURlZiBzdHJ1Y3R1cmUgdGhhdCAgCisgICogQHBhcmFtICBwQ1NEOiBQb2ludGVyIHRvIGEgSEFMX1NEX0NhcmRDU0RUeXBlRGVmIHN0cnVjdHVyZSB0aGF0CiAgICogICAgICAgICBjb250YWlucyBhbGwgQ1NEIHJlZ2lzdGVyIHBhcmFtZXRlcnMKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KQEAgLTIyNzQsNyArMjI3Nyw3IEBACiAvKioKICAgKiBAYnJpZWYgIEdldHMgdGhlIFNEIHN0YXR1cyBpbmZvLgogICAqIEBwYXJhbSAgaHNkOiBQb2ludGVyIHRvIFNEIGhhbmRsZQotICAqIEBwYXJhbSAgcFN0YXR1czogUG9pbnRlciB0byB0aGUgSEFMX1NEX0NhcmRTdGF0dXNUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IAorICAqIEBwYXJhbSAgcFN0YXR1czogUG9pbnRlciB0byB0aGUgSEFMX1NEX0NhcmRTdGF0dXNUeXBlRGVmIHN0cnVjdHVyZSB0aGF0CiAgICogICAgICAgICB3aWxsIGNvbnRhaW4gdGhlIFNEIGNhcmQgc3RhdHVzIGluZm9ybWF0aW9uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF9zZF9leC5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfc2RfZXguYwppbmRleCA3YzRkYTk5Li5kMTgxMjJkIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9zZF9leC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX3NkX2V4LmMKQEAgLTEyMCw2ICsxMjAsNyBAQAogCiAgICAgRG1hQmFzZTBfcmVnID0gaHNkLT5JbnN0YW5jZS0+SURNQUJBU0UwOwogICAgIERtYUJhc2UxX3JlZyA9IGhzZC0+SW5zdGFuY2UtPklETUFCQVNFMTsKKwogICAgIGlmICgoaHNkLT5JbnN0YW5jZS0+SURNQUJTSVpFID09IDBVKSB8fCAoRG1hQmFzZTBfcmVnID09IDBVKSB8fCAoRG1hQmFzZTFfcmVnID09IDBVKSkKICAgICB7CiAgICAgICBoc2QtPkVycm9yQ29kZSA9IEhBTF9TRF9FUlJPUl9BRERSX09VVF9PRl9SQU5HRTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3NtYXJ0Y2FyZC5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfc21hcnRjYXJkLmMKaW5kZXggOTFiNmJjYi4uMjQ0MDU5NSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfc21hcnRjYXJkLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfc21hcnRjYXJkLmMKQEAgLTEwNyw4ICsxMDcsOCBAQAogICAgIGFsbG93cyB0aGUgdXNlciB0byBjb25maWd1cmUgZHluYW1pY2FsbHkgdGhlIGRyaXZlciBjYWxsYmFja3MuCiAKICAgICBbLi5dCi0gICAgVXNlIEZ1bmN0aW9uIEByZWYgSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVnaXN0ZXIgYSB1c2VyIGNhbGxiYWNrLgotICAgIEZ1bmN0aW9uIEByZWYgSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgYWxsb3dzIHRvIHJlZ2lzdGVyIGZvbGxvd2luZyBjYWxsYmFja3M6CisgICAgVXNlIEZ1bmN0aW9uIEhBTF9TTUFSVENBUkRfUmVnaXN0ZXJDYWxsYmFjaygpIHRvIHJlZ2lzdGVyIGEgdXNlciBjYWxsYmFjay4KKyAgICBGdW5jdGlvbiBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBhbGxvd3MgdG8gcmVnaXN0ZXIgZm9sbG93aW5nIGNhbGxiYWNrczoKICAgICAoKykgVHhDcGx0Q2FsbGJhY2sgICAgICAgICAgICA6IFR4IENvbXBsZXRlIENhbGxiYWNrLgogICAgICgrKSBSeENwbHRDYWxsYmFjayAgICAgICAgICAgIDogUnggQ29tcGxldGUgQ2FsbGJhY2suCiAgICAgKCspIEVycm9yQ2FsbGJhY2sgICAgICAgICAgICAgOiBFcnJvciBDYWxsYmFjay4KQEAgLTEyMyw5ICsxMjMsOSBAQAogICAgIGFuZCBhIHBvaW50ZXIgdG8gdGhlIHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24uCiAKICAgICBbLi5dCi0gICAgVXNlIGZ1bmN0aW9uIEByZWYgSEFMX1NNQVJUQ0FSRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0byByZXNldCBhIGNhbGxiYWNrIHRvIHRoZSBkZWZhdWx0CisgICAgVXNlIGZ1bmN0aW9uIEhBTF9TTUFSVENBUkRfVW5SZWdpc3RlckNhbGxiYWNrKCkgdG8gcmVzZXQgYSBjYWxsYmFjayB0byB0aGUgZGVmYXVsdAogICAgIHdlYWsgKHN1cmNoYXJnZWQpIGZ1bmN0aW9uLgotICAgIEByZWYgSEFMX1NNQVJUQ0FSRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCisgICAgSEFMX1NNQVJUQ0FSRF9VblJlZ2lzdGVyQ2FsbGJhY2soKSB0YWtlcyBhcyBwYXJhbWV0ZXJzIHRoZSBIQUwgcGVyaXBoZXJhbCBoYW5kbGUsCiAgICAgYW5kIHRoZSBDYWxsYmFjayBJRC4KICAgICBUaGlzIGZ1bmN0aW9uIGFsbG93cyB0byByZXNldCBmb2xsb3dpbmcgY2FsbGJhY2tzOgogICAgICgrKSBUeENwbHRDYWxsYmFjayAgICAgICAgICAgIDogVHggQ29tcGxldGUgQ2FsbGJhY2suCkBAIC0xNDAsMTMgKzE0MCwxMyBAQAogICAgICgrKSBNc3BEZUluaXRDYWxsYmFjayAgICAgICAgIDogU01BUlRDQVJEIE1zcERlSW5pdC4KIAogICAgIFsuLl0KLSAgICBCeSBkZWZhdWx0LCBhZnRlciB0aGUgQHJlZiBIQUxfU01BUlRDQVJEX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1NNQVJUQ0FSRF9TVEFURV9SRVNFVAorICAgIEJ5IGRlZmF1bHQsIGFmdGVyIHRoZSBIQUxfU01BUlRDQVJEX0luaXQoKSBhbmQgd2hlbiB0aGUgc3RhdGUgaXMgSEFMX1NNQVJUQ0FSRF9TVEFURV9SRVNFVAogICAgIGFsbCBjYWxsYmFja3MgYXJlIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyB3ZWFrIChzdXJjaGFyZ2VkKSBmdW5jdGlvbnM6Ci0gICAgZXhhbXBsZXMgQHJlZiBIQUxfU01BUlRDQVJEX1R4Q3BsdENhbGxiYWNrKCksIEByZWYgSEFMX1NNQVJUQ0FSRF9SeENwbHRDYWxsYmFjaygpLgorICAgIGV4YW1wbGVzIEhBTF9TTUFSVENBUkRfVHhDcGx0Q2FsbGJhY2soKSwgSEFMX1NNQVJUQ0FSRF9SeENwbHRDYWxsYmFjaygpLgogICAgIEV4Y2VwdGlvbiBkb25lIGZvciBNc3BJbml0IGFuZCBNc3BEZUluaXQgZnVuY3Rpb25zIHRoYXQgYXJlIHJlc3BlY3RpdmVseQotICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBAcmVmIEhBTF9TTUFSVENBUkRfSW5pdCgpCi0gICAgYW5kIEByZWYgSEFMX1NNQVJUQ0FSRF9EZUluaXQoKSBvbmx5IHdoZW4gdGhlc2UgY2FsbGJhY2tzIGFyZSBudWxsIChub3QgcmVnaXN0ZXJlZCBiZWZvcmVoYW5kKS4KLSAgICBJZiBub3QsIE1zcEluaXQgb3IgTXNwRGVJbml0IGFyZSBub3QgbnVsbCwgdGhlIEByZWYgSEFMX1NNQVJUQ0FSRF9Jbml0KCkgYW5kIEByZWYgSEFMX1NNQVJUQ0FSRF9EZUluaXQoKQorICAgIHJlc2V0IHRvIHRoZSBsZWdhY3kgd2VhayAoc3VyY2hhcmdlZCkgZnVuY3Rpb25zIGluIHRoZSBIQUxfU01BUlRDQVJEX0luaXQoKQorICAgIGFuZCBIQUxfU01BUlRDQVJEX0RlSW5pdCgpIG9ubHkgd2hlbiB0aGVzZSBjYWxsYmFja3MgYXJlIG51bGwgKG5vdCByZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgorICAgIElmIG5vdCwgTXNwSW5pdCBvciBNc3BEZUluaXQgYXJlIG5vdCBudWxsLCB0aGUgSEFMX1NNQVJUQ0FSRF9Jbml0KCkgYW5kIEhBTF9TTUFSVENBUkRfRGVJbml0KCkKICAgICBrZWVwIGFuZCB1c2UgdGhlIHVzZXIgTXNwSW5pdC9Nc3BEZUluaXQgY2FsbGJhY2tzIChyZWdpc3RlcmVkIGJlZm9yZWhhbmQpLgogCiAgICAgWy4uXQpAQCAtMTU1LDggKzE1NSw4IEBACiAgICAgaW4gSEFMX1NNQVJUQ0FSRF9TVEFURV9SRUFEWSBvciBIQUxfU01BUlRDQVJEX1NUQVRFX1JFU0VUIHN0YXRlLCB0aHVzIHJlZ2lzdGVyZWQgKHVzZXIpCiAgICAgTXNwSW5pdC9EZUluaXQgY2FsbGJhY2tzIGNhbiBiZSB1c2VkIGR1cmluZyB0aGUgSW5pdC9EZUluaXQuCiAgICAgSW4gdGhhdCBjYXNlIGZpcnN0IHJlZ2lzdGVyIHRoZSBNc3BJbml0L01zcERlSW5pdCB1c2VyIGNhbGxiYWNrcwotICAgIHVzaW5nIEByZWYgSEFMX1NNQVJUQ0FSRF9SZWdpc3RlckNhbGxiYWNrKCkgYmVmb3JlIGNhbGxpbmcgQHJlZiBIQUxfU01BUlRDQVJEX0RlSW5pdCgpCi0gICAgb3IgQHJlZiBIQUxfU01BUlRDQVJEX0luaXQoKSBmdW5jdGlvbi4KKyAgICB1c2luZyBIQUxfU01BUlRDQVJEX1JlZ2lzdGVyQ2FsbGJhY2soKSBiZWZvcmUgY2FsbGluZyBIQUxfU01BUlRDQVJEX0RlSW5pdCgpCisgICAgb3IgSEFMX1NNQVJUQ0FSRF9Jbml0KCkgZnVuY3Rpb24uCiAKICAgICBbLi5dCiAgICAgV2hlbiBUaGUgY29tcGlsYXRpb24gZGVmaW5lIFVTRV9IQUxfU01BUlRDQVJEX1JFR0lTVEVSX0NBTExCQUNLUyBpcyBzZXQgdG8gMCBvcgpAQCAtNzI1LDYyICs3MjUsNjIgQEAKICAgICAoKykgMS41IHN0b3AgYml0cyB3aGVuIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nOiB3aGVyZSBTVE9QPTExIGluIHRoZSBVU0FSVF9DUjIgcmVnaXN0ZXIuCiAKICAgWy4uXQotICAgICgrKSBUaGVyZSBhcmUgdHdvIG1vZGVzIG9mIHRyYW5zZmVyOgotICAgICAgICAoKyspIEJsb2NraW5nIG1vZGU6IFRoZSBjb21tdW5pY2F0aW9uIGlzIHBlcmZvcm1lZCBpbiBwb2xsaW5nIG1vZGUuCisgICAgKCMpIFRoZXJlIGFyZSB0d28gbW9kZXMgb2YgdHJhbnNmZXI6CisgICAgICAgICgjIykgQmxvY2tpbmcgbW9kZTogVGhlIGNvbW11bmljYXRpb24gaXMgcGVyZm9ybWVkIGluIHBvbGxpbmcgbW9kZS4KICAgICAgICAgICAgICBUaGUgSEFMIHN0YXR1cyBvZiBhbGwgZGF0YSBwcm9jZXNzaW5nIGlzIHJldHVybmVkIGJ5IHRoZSBzYW1lIGZ1bmN0aW9uCiAgICAgICAgICAgICAgYWZ0ZXIgZmluaXNoaW5nIHRyYW5zZmVyLgotICAgICAgICAoKyspIE5vbi1CbG9ja2luZyBtb2RlOiBUaGUgY29tbXVuaWNhdGlvbiBpcyBwZXJmb3JtZWQgdXNpbmcgSW50ZXJydXB0cworICAgICAgICAoIyMpIE5vbi1CbG9ja2luZyBtb2RlOiBUaGUgY29tbXVuaWNhdGlvbiBpcyBwZXJmb3JtZWQgdXNpbmcgSW50ZXJydXB0cwogICAgICAgICAgICAgIG9yIERNQSwgdGhlIHJlbGV2YW50IEFQSSdzIHJldHVybiB0aGUgSEFMIHN0YXR1cy4KICAgICAgICAgICAgICBUaGUgZW5kIG9mIHRoZSBkYXRhIHByb2Nlc3Npbmcgd2lsbCBiZSBpbmRpY2F0ZWQgdGhyb3VnaCB0aGUKICAgICAgICAgICAgICBkZWRpY2F0ZWQgU01BUlRDQVJEIElSUSB3aGVuIHVzaW5nIEludGVycnVwdCBtb2RlIG9yIHRoZSBETUEgSVJRIHdoZW4KICAgICAgICAgICAgICB1c2luZyBETUEgbW9kZS4KLSAgICAgICAgKCsrKSBUaGUgSEFMX1NNQVJUQ0FSRF9UeENwbHRDYWxsYmFjaygpLCBIQUxfU01BUlRDQVJEX1J4Q3BsdENhbGxiYWNrKCkgdXNlciBjYWxsYmFja3MKKyAgICAgICAgKCMjKSBUaGUgSEFMX1NNQVJUQ0FSRF9UeENwbHRDYWxsYmFjaygpLCBIQUxfU01BUlRDQVJEX1J4Q3BsdENhbGxiYWNrKCkgdXNlciBjYWxsYmFja3MKICAgICAgICAgICAgICB3aWxsIGJlIGV4ZWN1dGVkIHJlc3BlY3RpdmVseSBhdCB0aGUgZW5kIG9mIHRoZSBUcmFuc21pdCBvciBSZWNlaXZlIHByb2Nlc3MKICAgICAgICAgICAgICBUaGUgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gYSBjb21tdW5pY2F0aW9uCiAgICAgICAgICAgICAgZXJyb3IgaXMgZGV0ZWN0ZWQuCiAKLSAgICAoKykgQmxvY2tpbmcgbW9kZSBBUElzIGFyZSA6Ci0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9UcmFuc21pdCgpCi0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9SZWNlaXZlKCkKKyAgICAoIykgQmxvY2tpbmcgbW9kZSBBUElzIGFyZSA6CisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9UcmFuc21pdCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9SZWNlaXZlKCkKIAotICAgICgrKSBOb24gQmxvY2tpbmcgbW9kZSBBUElzIHdpdGggSW50ZXJydXB0IGFyZSA6Ci0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9UcmFuc21pdF9JVCgpCi0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9SZWNlaXZlX0lUKCkKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX0lSUUhhbmRsZXIoKQorICAgICgjKSBOb24gQmxvY2tpbmcgbW9kZSBBUElzIHdpdGggSW50ZXJydXB0IGFyZSA6CisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9UcmFuc21pdF9JVCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9SZWNlaXZlX0lUKCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX0lSUUhhbmRsZXIoKQogCi0gICAgKCspIE5vbiBCbG9ja2luZyBtb2RlIGZ1bmN0aW9ucyB3aXRoIERNQSBhcmUgOgotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfVHJhbnNtaXRfRE1BKCkKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX1JlY2VpdmVfRE1BKCkKKyAgICAoIykgTm9uIEJsb2NraW5nIG1vZGUgZnVuY3Rpb25zIHdpdGggRE1BIGFyZSA6CisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9UcmFuc21pdF9ETUEoKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfUmVjZWl2ZV9ETUEoKQogCi0gICAgKCspIEEgc2V0IG9mIFRyYW5zZmVyIENvbXBsZXRlIENhbGxiYWNrcyBhcmUgcHJvdmlkZWQgaW4gbm9uIEJsb2NraW5nIG1vZGU6Ci0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9UeENwbHRDYWxsYmFjaygpCi0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9SeENwbHRDYWxsYmFjaygpCi0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkKKyAgICAoIykgQSBzZXQgb2YgVHJhbnNmZXIgQ29tcGxldGUgQ2FsbGJhY2tzIGFyZSBwcm92aWRlZCBpbiBub24gQmxvY2tpbmcgbW9kZToKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX1R4Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX1J4Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX0Vycm9yQ2FsbGJhY2soKQogCiAgIFsuLl0KICAgICAoIykgTm9uLUJsb2NraW5nIG1vZGUgdHJhbnNmZXJzIGNvdWxkIGJlIGFib3J0ZWQgdXNpbmcgQWJvcnQgQVBJJ3MgOgotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfQWJvcnQoKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdCgpCi0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmUoKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfQWJvcnRfSVQoKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdF9JVCgpCi0gICAgICAgICgrKykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmVfSVQoKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfQWJvcnQoKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmUoKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfQWJvcnRfSVQoKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfQWJvcnRUcmFuc21pdF9JVCgpCisgICAgICAgICgjIykgSEFMX1NNQVJUQ0FSRF9BYm9ydFJlY2VpdmVfSVQoKQogCiAgICAgKCMpIEZvciBBYm9ydCBzZXJ2aWNlcyBiYXNlZCBvbiBpbnRlcnJ1cHRzIChIQUxfU01BUlRDQVJEX0Fib3J0eHh4X0lUKSwgYSBzZXQgb2YgQWJvcnQgQ29tcGxldGUgQ2FsbGJhY2tzIGFyZSBwcm92aWRlZDoKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX0Fib3J0Q3BsdENhbGxiYWNrKCkKLSAgICAgICAgKCsrKSBIQUxfU01BUlRDQVJEX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKQotICAgICAgICAoKyspIEhBTF9TTUFSVENBUkRfQWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrKCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX0Fib3J0Q3BsdENhbGxiYWNrKCkKKyAgICAgICAgKCMjKSBIQUxfU01BUlRDQVJEX0Fib3J0VHJhbnNtaXRDcGx0Q2FsbGJhY2soKQorICAgICAgICAoIyMpIEhBTF9TTUFSVENBUkRfQWJvcnRSZWNlaXZlQ3BsdENhbGxiYWNrKCkKIAogICAgICgjKSBJbiBOb24tQmxvY2tpbmcgbW9kZSB0cmFuc2ZlcnMsIHBvc3NpYmxlIGVycm9ycyBhcmUgc3BsaXQgaW50byAyIGNhdGVnb3JpZXMuCiAgICAgICAgIEVycm9ycyBhcmUgaGFuZGxlZCBhcyBmb2xsb3dzIDoKLSAgICAgICAoKyspIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgUmVjb3ZlcmFibGUgYW5kIG5vbiBibG9ja2luZyA6IFRyYW5zZmVyIGNvdWxkIGdvIHRpbGwgZW5kLCBidXQgZXJyb3Igc2V2ZXJpdHkgaXMKLSAgICAgICAgICAgIHRvIGJlIGV2YWx1YXRlZCBieSB1c2VyIDogdGhpcyBjb25jZXJucyBGcmFtZSBFcnJvciwgUGFyaXR5IEVycm9yIG9yIE5vaXNlIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiAuCi0gICAgICAgICAgICBSZWNlaXZlZCBjaGFyYWN0ZXIgaXMgdGhlbiByZXRyaWV2ZWQgYW5kIHN0b3JlZCBpbiBSeCBidWZmZXIsIEVycm9yIGNvZGUgaXMgc2V0IHRvIGFsbG93IHVzZXIgdG8gaWRlbnRpZnkgZXJyb3IgdHlwZSwKLSAgICAgICAgICAgIGFuZCBIQUxfU01BUlRDQVJEX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLiBUcmFuc2ZlciBpcyBrZXB0IG9uZ29pbmcgb24gU01BUlRDQVJEIHNpZGUuCi0gICAgICAgICAgICBJZiB1c2VyIHdhbnRzIHRvIGFib3J0IGl0LCBBYm9ydCBzZXJ2aWNlcyBzaG91bGQgYmUgY2FsbGVkIGJ5IHVzZXIuCi0gICAgICAgKCsrKSBFcnJvciBpcyBjb25zaWRlcmVkIGFzIEJsb2NraW5nIDogVHJhbnNmZXIgY291bGQgbm90IGJlIGNvbXBsZXRlZCBwcm9wZXJseSBhbmQgaXMgYWJvcnRlZC4KLSAgICAgICAgICAgIFRoaXMgY29uY2VybnMgRnJhbWUgRXJyb3IgaW4gSW50ZXJydXB0IG1vZGUgdHJhbm1pc3Npb24sIE92ZXJydW4gRXJyb3IgaW4gSW50ZXJydXB0IG1vZGUgcmVjZXB0aW9uIGFuZCBhbGwgZXJyb3JzIGluIERNQSBtb2RlLgotICAgICAgICAgICAgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeSBlcnJvciB0eXBlLCBhbmQgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4KKyAgICAgICAoIyMpIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgUmVjb3ZlcmFibGUgYW5kIG5vbiBibG9ja2luZyA6IFRyYW5zZmVyIGNvdWxkIGdvIHRpbGwgZW5kLCBidXQgZXJyb3Igc2V2ZXJpdHkgaXMKKyAgICAgICAgICAgdG8gYmUgZXZhbHVhdGVkIGJ5IHVzZXIgOiB0aGlzIGNvbmNlcm5zIEZyYW1lIEVycm9yLCBQYXJpdHkgRXJyb3Igb3IgTm9pc2UgRXJyb3IgaW4gSW50ZXJydXB0IG1vZGUgcmVjZXB0aW9uIC4KKyAgICAgICAgICAgUmVjZWl2ZWQgY2hhcmFjdGVyIGlzIHRoZW4gcmV0cmlldmVkIGFuZCBzdG9yZWQgaW4gUnggYnVmZmVyLCBFcnJvciBjb2RlIGlzIHNldCB0byBhbGxvdyB1c2VyIHRvIGlkZW50aWZ5IGVycm9yIHR5cGUsCisgICAgICAgICAgIGFuZCBIQUxfU01BUlRDQVJEX0Vycm9yQ2FsbGJhY2soKSB1c2VyIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLiBUcmFuc2ZlciBpcyBrZXB0IG9uZ29pbmcgb24gU01BUlRDQVJEIHNpZGUuCisgICAgICAgICAgIElmIHVzZXIgd2FudHMgdG8gYWJvcnQgaXQsIEFib3J0IHNlcnZpY2VzIHNob3VsZCBiZSBjYWxsZWQgYnkgdXNlci4KKyAgICAgICAoIyMpIEVycm9yIGlzIGNvbnNpZGVyZWQgYXMgQmxvY2tpbmcgOiBUcmFuc2ZlciBjb3VsZCBub3QgYmUgY29tcGxldGVkIHByb3Blcmx5IGFuZCBpcyBhYm9ydGVkLgorICAgICAgICAgICBUaGlzIGNvbmNlcm5zIEZyYW1lIEVycm9yIGluIEludGVycnVwdCBtb2RlIHRyYW5taXNzaW9uLCBPdmVycnVuIEVycm9yIGluIEludGVycnVwdCBtb2RlIHJlY2VwdGlvbiBhbmQgYWxsIGVycm9ycyBpbiBETUEgbW9kZS4KKyAgICAgICAgICAgRXJyb3IgY29kZSBpcyBzZXQgdG8gYWxsb3cgdXNlciB0byBpZGVudGlmeSBlcnJvciB0eXBlLCBhbmQgSEFMX1NNQVJUQ0FSRF9FcnJvckNhbGxiYWNrKCkgdXNlciBjYWxsYmFjayBpcyBleGVjdXRlZC4KIAogQGVuZHZlcmJhdGltCiAgICogQHsKQEAgLTgyNCwxNCArODI0LDIzIEBACiAgICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCBmaXJzdCB0byB1cGRhdGUgbW9kZSBmb3IgVFggbWFzdGVyICovCiAgICAgQ0xFQVJfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9VRSk7CiAKLSAgICAvKiBEaXNhYmxlIFJ4LCBlbmFibGUgVHggKi8KLSAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKLSAgICBTRVRfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5SUVIsICh1aW50MTZfdClTTUFSVENBUkRfUlhEQVRBX0ZMVVNIX1JFUVVFU1QpOworICAgIC8qIEluIGNhc2Ugb2YgVFggb25seSBtb2RlLCBpZiBOQUNLIGlzIGVuYWJsZWQsIHRoZSBVU0FSVCBtdXN0IGJlIGFibGUgdG8gbW9uaXRvcgorICAgICAgIHRoZSBiaWRpcmVjdGlvbmFsIGxpbmUgdG8gZGV0ZWN0IGEgTkFDSyBzaWduYWwgaW4gY2FzZSBvZiBwYXJpdHkgZXJyb3IuCisgICAgICAgVGhlcmVmb3JlLCB0aGUgcmVjZWl2ZXIgYmxvY2sgbXVzdCBiZSBlbmFibGVkIGFzIHdlbGwgKFJFIGJpdCBtdXN0IGJlIHNldCkuICovCisgICAgaWYgKChoc21hcnRjYXJkLT5Jbml0Lk1vZGUgPT0gU01BUlRDQVJEX01PREVfVFgpCisgICAgICYmIChoc21hcnRjYXJkLT5Jbml0Lk5BQ0tFbmFibGUgPT0gU01BUlRDQVJEX05BQ0tfRU5BQkxFKSkKKyAgICB7CisgICAgICBTRVRfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9SRSk7CisgICAgfQorICAgIC8qIEVuYWJsZSBUeCAqLwogICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1RFKTsKIAogICAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKIAorICAgIC8qIFBlcmZvcm0gYSBUWC9SWCBGSUZPIEZsdXNoICovCisgICAgX19IQUxfU01BUlRDQVJEX0ZMVVNIX0RSUkVHSVNURVIoaHNtYXJ0Y2FyZCk7CisKICAgICBoc21hcnRjYXJkLT5FcnJvckNvZGUgPSBIQUxfU01BUlRDQVJEX0VSUk9SX05PTkU7CiAgICAgaHNtYXJ0Y2FyZC0+VHhYZmVyU2l6ZSA9IFNpemU7CiAgICAgaHNtYXJ0Y2FyZC0+VHhYZmVyQ291bnQgPSBTaXplOwpAQCAtODUxLDE1ICs4NjAsMjMgQEAKICAgICB7CiAgICAgICByZXR1cm4gSEFMX1RJTUVPVVQ7CiAgICAgfQotICAgIC8qIFJlLWVuYWJsZSBSeCBhdCBlbmQgb2YgdHJhbnNtaXNzaW9uIGlmIGluaXRpYWwgbW9kZSBpcyBSeC9UeCAqLwotICAgIGlmIChoc21hcnRjYXJkLT5Jbml0Lk1vZGUgPT0gU01BUlRDQVJEX01PREVfVFhfUlgpCisKKyAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsIGZpcnN0IHRvIHVwZGF0ZSBtb2RlICovCisgICAgQ0xFQVJfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9VRSk7CisgICAgaWYgKChoc21hcnRjYXJkLT5Jbml0Lk1vZGUgPT0gU01BUlRDQVJEX01PREVfVFgpCisgICAgICYmIChoc21hcnRjYXJkLT5Jbml0Lk5BQ0tFbmFibGUgPT0gU01BUlRDQVJEX05BQ0tfRU5BQkxFKSkKICAgICB7Ci0gICAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsIGZpcnN0IHRvIHVwZGF0ZSBtb2RlcyAqLwotICAgICAgQ0xFQVJfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9VRSk7Ci0gICAgICBTRVRfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9SRSk7Ci0gICAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKKyAgICAgIC8qIEluIGNhc2Ugb2YgVFggb25seSBtb2RlLCBpZiBOQUNLIGlzIGVuYWJsZWQsIHJlY2VpdmVyIGJsb2NrIGhhcyBiZWVuIGVuYWJsZWQKKyAgICAgICAgIGZvciBUcmFuc21pdCBwaGFzZS4gRGlzYWJsZSB0aGlzIHJlY2VpdmVyIGJsb2NrLiAqLworICAgICAgQ0xFQVJfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9SRSk7CiAgICAgfQorICAgIGlmICgoaHNtYXJ0Y2FyZC0+SW5pdC5Nb2RlID09IFNNQVJUQ0FSRF9NT0RFX1RYX1JYKQorICAgICB8fCAoaHNtYXJ0Y2FyZC0+SW5pdC5OQUNLRW5hYmxlID09IFNNQVJUQ0FSRF9OQUNLX0VOQUJMRSkpCisgICAgeworICAgICAgLyogUGVyZm9ybSBhIFRYIEZJRk8gRmx1c2ggYXQgZW5kIG9mIFR4IHBoYXNlLCBhcyBhbGwgc2VudCBieXRlcyBhcmUgYXBwZWFyaW5nIGluIFJ4IERhdGEgcmVnaXN0ZXIgKi8KKyAgICAgIF9fSEFMX1NNQVJUQ0FSRF9GTFVTSF9EUlJFR0lTVEVSKGhzbWFydGNhcmQpOworICAgIH0KKyAgICBTRVRfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9VRSk7CiAKICAgICAvKiBBdCBlbmQgb2YgVHggcHJvY2VzcywgcmVzdG9yZSBoc21hcnRjYXJkLT5nU3RhdGUgdG8gUmVhZHkgKi8KICAgICBoc21hcnRjYXJkLT5nU3RhdGUgPSBIQUxfU01BUlRDQVJEX1NUQVRFX1JFQURZOwpAQCAtOTgwLDE0ICs5OTcsMjMgQEAKICAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsIGZpcnN0IHRvIHVwZGF0ZSBtb2RlIGZvciBUWCBtYXN0ZXIgKi8KICAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKIAotICAgIC8qIERpc2FibGUgUngsIGVuYWJsZSBUeCAqLwotICAgIENMRUFSX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUkUpOwotICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPlJRUiwgKHVpbnQxNl90KVNNQVJUQ0FSRF9SWERBVEFfRkxVU0hfUkVRVUVTVCk7CisgICAgLyogSW4gY2FzZSBvZiBUWCBvbmx5IG1vZGUsIGlmIE5BQ0sgaXMgZW5hYmxlZCwgdGhlIFVTQVJUIG11c3QgYmUgYWJsZSB0byBtb25pdG9yCisgICAgICAgdGhlIGJpZGlyZWN0aW9uYWwgbGluZSB0byBkZXRlY3QgYSBOQUNLIHNpZ25hbCBpbiBjYXNlIG9mIHBhcml0eSBlcnJvci4KKyAgICAgICBUaGVyZWZvcmUsIHRoZSByZWNlaXZlciBibG9jayBtdXN0IGJlIGVuYWJsZWQgYXMgd2VsbCAoUkUgYml0IG11c3QgYmUgc2V0KS4gKi8KKyAgICBpZiAoKGhzbWFydGNhcmQtPkluaXQuTW9kZSA9PSBTTUFSVENBUkRfTU9ERV9UWCkKKyAgICAgJiYgKGhzbWFydGNhcmQtPkluaXQuTkFDS0VuYWJsZSA9PSBTTUFSVENBUkRfTkFDS19FTkFCTEUpKQorICAgIHsKKyAgICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKKyAgICB9CisgICAgLyogRW5hYmxlIFR4ICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVEUpOwogCiAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVUUpOwogCisgICAgLyogUGVyZm9ybSBhIFRYL1JYIEZJRk8gRmx1c2ggKi8KKyAgICBfX0hBTF9TTUFSVENBUkRfRkxVU0hfRFJSRUdJU1RFUihoc21hcnRjYXJkKTsKKwogICAgIC8qIENvbmZpZ3VyZSBUeCBpbnRlcnJ1cHQgcHJvY2Vzc2luZyAqLwogICAgIGlmIChoc21hcnRjYXJkLT5GaWZvTW9kZSA9PSBTTUFSVENBUkRfRklGT01PREVfRU5BQkxFKQogICAgIHsKQEAgLTExMjgsMTQgKzExNTQsMjMgQEAKICAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsIGZpcnN0IHRvIHVwZGF0ZSBtb2RlIGZvciBUWCBtYXN0ZXIgKi8KICAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKIAotICAgIC8qIERpc2FibGUgUngsIGVuYWJsZSBUeCAqLwotICAgIENMRUFSX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUkUpOwotICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPlJRUiwgKHVpbnQxNl90KVNNQVJUQ0FSRF9SWERBVEFfRkxVU0hfUkVRVUVTVCk7CisgICAgLyogSW4gY2FzZSBvZiBUWCBvbmx5IG1vZGUsIGlmIE5BQ0sgaXMgZW5hYmxlZCwgdGhlIFVTQVJUIG11c3QgYmUgYWJsZSB0byBtb25pdG9yCisgICAgICAgdGhlIGJpZGlyZWN0aW9uYWwgbGluZSB0byBkZXRlY3QgYSBOQUNLIHNpZ25hbCBpbiBjYXNlIG9mIHBhcml0eSBlcnJvci4KKyAgICAgICBUaGVyZWZvcmUsIHRoZSByZWNlaXZlciBibG9jayBtdXN0IGJlIGVuYWJsZWQgYXMgd2VsbCAoUkUgYml0IG11c3QgYmUgc2V0KS4gKi8KKyAgICBpZiAoKGhzbWFydGNhcmQtPkluaXQuTW9kZSA9PSBTTUFSVENBUkRfTU9ERV9UWCkKKyAgICAgJiYgKGhzbWFydGNhcmQtPkluaXQuTkFDS0VuYWJsZSA9PSBTTUFSVENBUkRfTkFDS19FTkFCTEUpKQorICAgIHsKKyAgICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKKyAgICB9CisgICAgLyogRW5hYmxlIFR4ICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVEUpOwogCiAgICAgLyogRW5hYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgICAgU0VUX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVUUpOwogCisgICAgLyogUGVyZm9ybSBhIFRYL1JYIEZJRk8gRmx1c2ggKi8KKyAgICBfX0hBTF9TTUFSVENBUkRfRkxVU0hfRFJSRUdJU1RFUihoc21hcnRjYXJkKTsKKwogICAgIC8qIFNldCB0aGUgU01BUlRDQVJEIERNQSB0cmFuc2ZlciBjb21wbGV0ZSBjYWxsYmFjayAqLwogICAgIGhzbWFydGNhcmQtPmhkbWF0eC0+WGZlckNwbHRDYWxsYmFjayA9IFNNQVJUQ0FSRF9ETUFUcmFuc21pdENwbHQ7CiAKQEAgLTI5NjYsMTUgKzMwMDEsMjIgQEAKICAgICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0VJRSk7CiAgIH0KIAotICAvKiBSZS1lbmFibGUgUnggYXQgZW5kIG9mIHRyYW5zbWlzc2lvbiBpZiBpbml0aWFsIG1vZGUgaXMgUngvVHggKi8KLSAgaWYgKGhzbWFydGNhcmQtPkluaXQuTW9kZSA9PSBTTUFSVENBUkRfTU9ERV9UWF9SWCkKKyAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCBmaXJzdCB0byB1cGRhdGUgbW9kZSAqLworICBDTEVBUl9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1VFKTsKKyAgaWYgKChoc21hcnRjYXJkLT5Jbml0Lk1vZGUgPT0gU01BUlRDQVJEX01PREVfVFgpCisgICAmJiAoaHNtYXJ0Y2FyZC0+SW5pdC5OQUNLRW5hYmxlID09IFNNQVJUQ0FSRF9OQUNLX0VOQUJMRSkpCiAgIHsKLSAgICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsIGZpcnN0IHRvIHVwZGF0ZSBtb2RlcyAqLwotICAgIENMRUFSX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfVUUpOwotICAgIFNFVF9CSVQoaHNtYXJ0Y2FyZC0+SW5zdGFuY2UtPkNSMSwgVVNBUlRfQ1IxX1JFKTsKLSAgICAvKiBFbmFibGUgdGhlIFBlcmlwaGVyYWwgKi8KLSAgICBTRVRfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9VRSk7CisgICAgLyogSW4gY2FzZSBvZiBUWCBvbmx5IG1vZGUsIGlmIE5BQ0sgaXMgZW5hYmxlZCwgcmVjZWl2ZXIgYmxvY2sgaGFzIGJlZW4gZW5hYmxlZAorICAgICAgIGZvciBUcmFuc21pdCBwaGFzZS4gRGlzYWJsZSB0aGlzIHJlY2VpdmVyIGJsb2NrLiAqLworICAgIENMRUFSX0JJVChoc21hcnRjYXJkLT5JbnN0YW5jZS0+Q1IxLCBVU0FSVF9DUjFfUkUpOwogICB9CisgIGlmICgoaHNtYXJ0Y2FyZC0+SW5pdC5Nb2RlID09IFNNQVJUQ0FSRF9NT0RFX1RYX1JYKQorICAgfHwgKGhzbWFydGNhcmQtPkluaXQuTkFDS0VuYWJsZSA9PSBTTUFSVENBUkRfTkFDS19FTkFCTEUpKQorICB7CisgICAgLyogUGVyZm9ybSBhIFRYIEZJRk8gRmx1c2ggYXQgZW5kIG9mIFR4IHBoYXNlLCBhcyBhbGwgc2VudCBieXRlcyBhcmUgYXBwZWFyaW5nIGluIFJ4IERhdGEgcmVnaXN0ZXIgKi8KKyAgICBfX0hBTF9TTUFSVENBUkRfRkxVU0hfRFJSRUdJU1RFUihoc21hcnRjYXJkKTsKKyAgfQorICBTRVRfQklUKGhzbWFydGNhcmQtPkluc3RhbmNlLT5DUjEsIFVTQVJUX0NSMV9VRSk7CiAKICAgLyogVHggcHJvY2VzcyBpcyBlbmRlZCwgcmVzdG9yZSBoc21hcnRjYXJkLT5nU3RhdGUgdG8gUmVhZHkgKi8KICAgaHNtYXJ0Y2FyZC0+Z1N0YXRlID0gSEFMX1NNQVJUQ0FSRF9TVEFURV9SRUFEWTsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3NtYXJ0Y2FyZF9leC5jIGIvU3JjL3N0bTMyaDd4eF9oYWxfc21hcnRjYXJkX2V4LmMKaW5kZXggYWMwZTQ3My4uNzA0MzU3NSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfc21hcnRjYXJkX2V4LmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfc21hcnRjYXJkX2V4LmMKQEAgLTU5LDEwICs1OSwxMCBAQAogICAqIEB7CiAgICovCiAvKiBVQVJUIFJYIEZJRk8gZGVwdGggKi8KLSNkZWZpbmUgUlhfRklGT19ERVBUSCA4VQorI2RlZmluZSBSWF9GSUZPX0RFUFRIIDE2VQogCiAvKiBVQVJUIFRYIEZJRk8gZGVwdGggKi8KLSNkZWZpbmUgVFhfRklGT19ERVBUSCA4VQorI2RlZmluZSBUWF9GSUZPX0RFUFRIIDE2VQogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3NtYnVzLmMgYi9TcmMvc3RtMzJoN3h4X2hhbF9zbWJ1cy5jCmluZGV4IDk5YWI4ODUuLjY4NDBhZDkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX3NtYnVzLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfc21idXMuYwpAQCAtMjAzLDE4ICsyMDMsMTggQEAKIC8qKiBAYWRkdG9ncm91cCBTTUJVU19Qcml2YXRlX0Z1bmN0aW9ucyBTTUJVUyBQcml2YXRlIEZ1bmN0aW9ucwogICAqIEB7CiAgICovCi1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChzdHJ1Y3QgX19TTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdHVzLCB1aW50MzJfdCBUaW1lb3V0KTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19XYWl0T25GbGFnVW50aWxUaW1lb3V0KFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsIHVpbnQzMl90IFRpbWVvdXQpOwogCi1zdGF0aWMgdm9pZCBTTUJVU19FbmFibGVfSVJRKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgSW50ZXJydXB0UmVxdWVzdCk7Ci1zdGF0aWMgdm9pZCBTTUJVU19EaXNhYmxlX0lSUShzdHJ1Y3QgX19TTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEludGVycnVwdFJlcXVlc3QpOwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNNQlVTX01hc3Rlcl9JU1Ioc3RydWN0IF9fU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBTdGF0dXNGbGFncyk7Ci1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfU2xhdmVfSVNSKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpOworc3RhdGljIHZvaWQgU01CVVNfRW5hYmxlX0lSUShTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEludGVycnVwdFJlcXVlc3QpOworc3RhdGljIHZvaWQgU01CVVNfRGlzYWJsZV9JUlEoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBJbnRlcnJ1cHRSZXF1ZXN0KTsKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19NYXN0ZXJfSVNSKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpOworc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNNQlVTX1NsYXZlX0lTUihTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IFN0YXR1c0ZsYWdzKTsKIAotc3RhdGljIHZvaWQgU01CVVNfQ29udmVydE90aGVyWGZlck9wdGlvbnMoc3RydWN0IF9fU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzKTsKK3N0YXRpYyB2b2lkIFNNQlVTX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cyk7CiAKLXN0YXRpYyB2b2lkIFNNQlVTX0lURXJyb3JIYW5kbGVyKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cyk7CitzdGF0aWMgdm9pZCBTTUJVU19JVEVycm9ySGFuZGxlcihTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMpOwogCi1zdGF0aWMgdm9pZCBTTUJVU19UcmFuc2ZlckNvbmZpZyhzdHJ1Y3QgX19TTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsICB1aW50MTZfdCBEZXZBZGRyZXNzLCB1aW50OF90IFNpemUsIHVpbnQzMl90IE1vZGUsIHVpbnQzMl90IFJlcXVlc3QpOworc3RhdGljIHZvaWQgU01CVVNfVHJhbnNmZXJDb25maWcoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCAgdWludDE2X3QgRGV2QWRkcmVzcywgdWludDhfdCBTaXplLCB1aW50MzJfdCBNb2RlLCB1aW50MzJfdCBSZXF1ZXN0KTsKIC8qKgogICAqIEB9CiAgICovCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogICAqIEBwYXJhbSAgU3RhdHVzRmxhZ3MgVmFsdWUgb2YgSW50ZXJydXB0IEZsYWdzLgogICAqIEByZXR2YWwgSEFMIHN0YXR1cwogICAqLwotc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFNNQlVTX01hc3Rlcl9JU1Ioc3RydWN0IF9fU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBTdGF0dXNGbGFncykKK3N0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19NYXN0ZXJfSVNSKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpCiB7CiAgIHVpbnQxNl90IERldkFkZHJlc3M7CiAKQEAgLTIwODUsNyArMjA4NSw3IEBACiAgICogQHBhcmFtICBTdGF0dXNGbGFncyBWYWx1ZSBvZiBJbnRlcnJ1cHQgRmxhZ3MuCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1zdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfU2xhdmVfSVNSKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfU2xhdmVfSVNSKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgU3RhdHVzRmxhZ3MpCiB7CiAgIHVpbnQ4X3QgVHJhbnNmZXJEaXJlY3Rpb247CiAgIHVpbnQxNl90IFNsYXZlQWRkckNvZGU7CkBAIC0yMzQxLDcgKzIzNDEsNyBAQAogICAqIEBwYXJhbSAgSW50ZXJydXB0UmVxdWVzdCBWYWx1ZSBvZiBAcmVmIFNNQlVTX0ludGVycnVwdF9jb25maWd1cmF0aW9uX2RlZmluaXRpb24uCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCiAgICovCi1zdGF0aWMgdm9pZCBTTUJVU19FbmFibGVfSVJRKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgSW50ZXJydXB0UmVxdWVzdCkKK3N0YXRpYyB2b2lkIFNNQlVTX0VuYWJsZV9JUlEoU01CVVNfSGFuZGxlVHlwZURlZiAqaHNtYnVzLCB1aW50MzJfdCBJbnRlcnJ1cHRSZXF1ZXN0KQogewogICB1aW50MzJfdCB0bXBpc3IgPSAwVUw7CiAKQEAgLTIzODEsNyArMjM4MSw3IEBACiAgICogQHBhcmFtICBJbnRlcnJ1cHRSZXF1ZXN0IFZhbHVlIG9mIEByZWYgU01CVVNfSW50ZXJydXB0X2NvbmZpZ3VyYXRpb25fZGVmaW5pdGlvbi4KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXN0YXRpYyB2b2lkIFNNQlVTX0Rpc2FibGVfSVJRKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgSW50ZXJydXB0UmVxdWVzdCkKK3N0YXRpYyB2b2lkIFNNQlVTX0Rpc2FibGVfSVJRKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgSW50ZXJydXB0UmVxdWVzdCkKIHsKICAgdWludDMyX3QgdG1waXNyID0gMFVMOwogICB1aW50MzJfdCB0bXBzdGF0ZSA9IGhzbWJ1cy0+U3RhdGU7CkBAIC0yNDUzLDcgKzI0NTMsNyBAQAogICAqIEBwYXJhbSAgaHNtYnVzIFNNQlVTIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFNNQlVTX0lURXJyb3JIYW5kbGVyKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cykKK3N0YXRpYyB2b2lkIFNNQlVTX0lURXJyb3JIYW5kbGVyKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cykKIHsKICAgdWludDMyX3QgaXRmbGFncyAgID0gUkVBRF9SRUcoaHNtYnVzLT5JbnN0YW5jZS0+SVNSKTsKICAgdWludDMyX3QgaXRzb3VyY2VzID0gUkVBRF9SRUcoaHNtYnVzLT5JbnN0YW5jZS0+Q1IxKTsKQEAgLTI1NTQsNyArMjU1NCw3IEBACiAgICogQHBhcmFtICBUaW1lb3V0IFRpbWVvdXQgZHVyYXRpb24KICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXN0YXRpYyBIQUxfU3RhdHVzVHlwZURlZiBTTUJVU19XYWl0T25GbGFnVW50aWxUaW1lb3V0KHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgdWludDMyX3QgRmxhZywgRmxhZ1N0YXR1cyBTdGF0dXMsIHVpbnQzMl90IFRpbWVvdXQpCitzdGF0aWMgSEFMX1N0YXR1c1R5cGVEZWYgU01CVVNfV2FpdE9uRmxhZ1VudGlsVGltZW91dChTTUJVU19IYW5kbGVUeXBlRGVmICpoc21idXMsIHVpbnQzMl90IEZsYWcsIEZsYWdTdGF0dXMgU3RhdHVzLCB1aW50MzJfdCBUaW1lb3V0KQogewogICB1aW50MzJfdCB0aWNrc3RhcnQgPSBIQUxfR2V0VGljaygpOwogCkBAIC0yNjAzLDcgKzI2MDMsNyBAQAogICAqICAgICBAYXJnIEByZWYgU01CVVNfR0VORVJBVEVfU1RBUlRfV1JJVEUgR2VuZXJhdGUgUmVzdGFydCBmb3Igd3JpdGUgcmVxdWVzdC4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFNNQlVTX1RyYW5zZmVyQ29uZmlnKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwgdWludDMyX3QgUmVxdWVzdCkKK3N0YXRpYyB2b2lkIFNNQlVTX1RyYW5zZmVyQ29uZmlnKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cywgIHVpbnQxNl90IERldkFkZHJlc3MsIHVpbnQ4X3QgU2l6ZSwgdWludDMyX3QgTW9kZSwgdWludDMyX3QgUmVxdWVzdCkKIHsKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1NNQlVTX0FMTF9JTlNUQU5DRShoc21idXMtPkluc3RhbmNlKSk7CkBAIC0yNjIwLDcgKzI2MjAsNyBAQAogICAqIEBwYXJhbSAgaHNtYnVzIFNNQlVTIGhhbmRsZS4KICAgKiBAcmV0dmFsIE5vbmUKICAgKi8KLXN0YXRpYyB2b2lkIFNNQlVTX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKHN0cnVjdCBfX1NNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cykKK3N0YXRpYyB2b2lkIFNNQlVTX0NvbnZlcnRPdGhlclhmZXJPcHRpb25zKFNNQlVTX0hhbmRsZVR5cGVEZWYgKmhzbWJ1cykKIHsKICAgLyogaWYgdXNlciBzZXQgWGZlck9wdGlvbnMgdG8gU01CVVNfT1RIRVJfRlJBTUVfTk9fUEVDICAgKi8KICAgLyogaXQgcmVxdWVzdCBpbXBsaWNpdGx5IHRvIGdlbmVyYXRlIGEgcmVzdGFydCBjb25kaXRpb24gKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3NwZGlmcnguYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3NwZGlmcnguYwppbmRleCBjNjg3NTBjLi4xZjc4NzI3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9zcGRpZnJ4LmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfc3BkaWZyeC5jCkBAIC04NTMsNyArODUzLDcgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9TUERJRlJYX1JlY2VpdmVEYXRhRmxvd19JVChTUERJRlJYX0hhbmRsZVR5cGVEZWYgKmhzcGRpZiwgdWludDMyX3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IFNQRElGUlhfVElNRU9VVF9WQUxVRSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAyNFUgLyAxMDAwVSk7CisgIHVpbnQzMl90IGNvdW50ID0gU1BESUZSWF9USU1FT1VUX1ZBTFVFICogKFN5c3RlbUNvcmVDbG9jayAvIDI0VSAvIDEwMDBVKTsKIAogICBjb25zdCBIQUxfU1BESUZSWF9TdGF0ZVR5cGVEZWYgdGVtcFN0YXRlID0gaHNwZGlmLT5TdGF0ZTsKIApAQCAtOTM4LDcgKzkzOCw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1BESUZSWF9SZWNlaXZlQ3RybEZsb3dfSVQoU1BESUZSWF9IYW5kbGVUeXBlRGVmICpoc3BkaWYsIHVpbnQzMl90ICpwRGF0YSwgdWludDE2X3QgU2l6ZSkKIHsKLSAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTUERJRlJYX1RJTUVPVVRfVkFMVUUgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMjRVIC8gMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNQRElGUlhfVElNRU9VVF9WQUxVRSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAyNFUgLyAxMDAwVSk7CiAKICAgY29uc3QgSEFMX1NQRElGUlhfU3RhdGVUeXBlRGVmIHRlbXBTdGF0ZSA9IGhzcGRpZi0+U3RhdGU7CiAKQEAgLTEwMjMsNyArMTAyMyw3IEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfU1BESUZSWF9SZWNlaXZlRGF0YUZsb3dfRE1BKFNQRElGUlhfSGFuZGxlVHlwZURlZiAqaHNwZGlmLCB1aW50MzJfdCAqcERhdGEsIHVpbnQxNl90IFNpemUpCiB7Ci0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU1BESUZSWF9USU1FT1VUX1ZBTFVFICogKFN5c3RlbUNvcmVDbG9jayAvIDI0VSAvIDEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBTUERJRlJYX1RJTUVPVVRfVkFMVUUgKiAoU3lzdGVtQ29yZUNsb2NrIC8gMjRVIC8gMTAwMFUpOwogCiAgIGNvbnN0IEhBTF9TUERJRlJYX1N0YXRlVHlwZURlZiB0ZW1wU3RhdGUgPSBoc3BkaWYtPlN0YXRlOwogCkBAIC0xMTI0LDcgKzExMjQsNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1NQRElGUlhfUmVjZWl2ZUN0cmxGbG93X0RNQShTUERJRlJYX0hhbmRsZVR5cGVEZWYgKmhzcGRpZiwgdWludDMyX3QgKnBEYXRhLCB1aW50MTZfdCBTaXplKQogewotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IFNQRElGUlhfVElNRU9VVF9WQUxVRSAqIChTeXN0ZW1Db3JlQ2xvY2sgLyAyNFUgLyAxMDAwVSk7CisgIHVpbnQzMl90IGNvdW50ID0gU1BESUZSWF9USU1FT1VUX1ZBTFVFICogKFN5c3RlbUNvcmVDbG9jayAvIDI0VSAvIDEwMDBVKTsKIAogICBjb25zdCBIQUxfU1BESUZSWF9TdGF0ZVR5cGVEZWYgdGVtcFN0YXRlID0gaHNwZGlmLT5TdGF0ZTsKIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfc3BpLmMgYi9TcmMvc3RtMzJoN3h4X2hhbF9zcGkuYwppbmRleCBhNGVlYWU0Li45MGVmYzdhIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF9zcGkuYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF9zcGkuYwpAQCAtMTMyMSwyMCArMTMyMSwyMCBAQAogICAgICAgICBoc3BpLT5SeFhmZXJDb3VudCAtLTsKICAgICAgICAgaW5pdGlhbF9SeFhmZXJDb3VudCA9IGhzcGktPlJ4WGZlckNvdW50OwogICAgICAgfQotICAgIH0KIAotICAgIC8qIFRpbWVvdXQgbWFuYWdlbWVudCAqLwotICAgIGlmICgoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgJiYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkpIHx8IChUaW1lb3V0ID09IDBVKSkKLSAgICB7Ci0gICAgICAvKiBDYWxsIHN0YW5kYXJkIGNsb3NlIHByb2NlZHVyZSB3aXRoIGVycm9yIGNoZWNrICovCi0gICAgICBTUElfQ2xvc2VUcmFuc2Zlcihoc3BpKTsKLQotICAgICAgLyogUHJvY2VzcyBVbmxvY2tlZCAqLwotICAgICAgX19IQUxfVU5MT0NLKGhzcGkpOwotCi0gICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9USU1FT1VUKTsKLSAgICAgIGhzcGktPlN0YXRlID0gSEFMX1NQSV9TVEFURV9SRUFEWTsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICAvKiBUaW1lb3V0IG1hbmFnZW1lbnQgKi8KKyAgICAgIGlmICgoKChIQUxfR2V0VGljaygpIC0gdGlja3N0YXJ0KSA+PSAgVGltZW91dCkgJiYgKFRpbWVvdXQgIT0gSEFMX01BWF9ERUxBWSkpIHx8IChUaW1lb3V0ID09IDBVKSkKKyAgICAgIHsKKyAgICAgICAgLyogQ2FsbCBzdGFuZGFyZCBjbG9zZSBwcm9jZWR1cmUgd2l0aCBlcnJvciBjaGVjayAqLworICAgICAgICBTUElfQ2xvc2VUcmFuc2Zlcihoc3BpKTsKKyAgICAgIAorICAgICAgICAvKiBQcm9jZXNzIFVubG9ja2VkICovCisgICAgICAgIF9fSEFMX1VOTE9DSyhoc3BpKTsKKyAgICAgIAorICAgICAgICBTRVRfQklUKGhzcGktPkVycm9yQ29kZSwgSEFMX1NQSV9FUlJPUl9USU1FT1VUKTsKKyAgICAgICAgaHNwaS0+U3RhdGUgPSBIQUxfU1BJX1NUQVRFX1JFQURZOworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQogICAgIH0KICAgfQogICAvKiBUcmFuc21pdCBhbmQgUmVjZWl2ZSBkYXRhIGluIDE2IEJpdCBtb2RlICovCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF90aW0uYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3RpbS5jCmluZGV4IGYxMTY1YjQuLjY3OGVmYzkgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX3RpbS5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX3RpbS5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAogLyogUHJpdmF0ZSB0eXBlZGVmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBQcml2YXRlIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoqIEBhZGR0b2dyb3VwIFRJTV9Qcml2YXRlX0Z1bmN0aW9ucwpAQCAtMjIxLDYgKzIyMSw3IEBACiBzdGF0aWMgdm9pZCBUSU1fSVRSeF9TZXRDb25maWcoVElNX1R5cGVEZWYgKlRJTXgsIHVpbnQzMl90IElucHV0VHJpZ2dlclNvdXJjZSk7CiBzdGF0aWMgdm9pZCBUSU1fRE1BUGVyaW9kRWxhcHNlZENwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgVElNX0RNQVBlcmlvZEVsYXBzZWRIYWxmQ3BsdChETUFfSGFuZGxlVHlwZURlZiAqaGRtYSk7CitzdGF0aWMgdm9pZCBUSU1fRE1BRGVsYXlQdWxzZUNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgVElNX0RNQVRyaWdnZXJDcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKIHN0YXRpYyB2b2lkIFRJTV9ETUFUcmlnZ2VySGFsZkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIEhBTF9TdGF0dXNUeXBlRGVmIFRJTV9TbGF2ZVRpbWVyX1NldENvbmZpZyhUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwKQEAgLTMwNiw2ICszMDcsMTMgQEAKICAgLyogU2V0IHRoZSBUaW1lIEJhc2UgY29uZmlndXJhdGlvbiAqLwogICBUSU1fQmFzZV9TZXRDb25maWcoaHRpbS0+SW5zdGFuY2UsICZodGltLT5Jbml0KTsKIAorICAvKiBJbml0aWFsaXplIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCisgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBzdGF0ZSovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIApAQCAtMzM5LDYgKzM0NywxMyBAQAogICBIQUxfVElNX0Jhc2VfTXNwRGVJbml0KGh0aW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsKKworICAvKiBDaGFuZ2UgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworCiAgIC8qIENoYW5nZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUOwogCkBAIC0zOTEsNiArNDA2LDEyIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIHN0YXRlICovCisgIGlmIChodGltLT5TdGF0ZSAhPSBIQUxfVElNX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCiAgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOwogCkBAIC00MDEsOSArNDIyLDYgQEAKICAgICBfX0hBTF9USU1fRU5BQkxFKGh0aW0pOwogICB9CiAKLSAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtNDE4LDEzICs0MzYsMTAgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCi0gIC8qIFNldCB0aGUgVElNIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOwotCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBUSU0gc3RhdGUqLworICAvKiBTZXQgdGhlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwpAQCAtNDQzLDYgKzQ1OCwxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBzdGF0ZSAqLworICBpZiAoaHRpbS0+U3RhdGUgIT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBzdGF0ZSAqLworICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKwogICAvKiBFbmFibGUgdGhlIFRJTSBVcGRhdGUgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX1VQREFURSk7CiAKQEAgLTQ2NiwxMiArNDkwLDE2IEBACiB7CiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKKyAgCiAgIC8qIERpc2FibGUgdGhlIFRJTSBVcGRhdGUgaW50ZXJydXB0ICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFX0lUKGh0aW0sIFRJTV9JVF9VUERBVEUpOwogCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gc3RhdGUgKi8KKyAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQ5MCw2ICs1MTgsNyBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCisgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCiAgIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CkBAIC01MDcsNyArNTM2LDcgQEAKICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIC8qIFNldCB0aGUgRE1BIFBlcmlvZCBlbGFwc2VkIGNhbGxiYWNrcyAqLwpAQCAtNTU1LDcgKzU4NCw3IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCisgIC8qIFNldCB0aGUgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCkBAIC02MzgsNiArNjY3LDEzIEBACiAgIC8qIEluaXQgdGhlIGJhc2UgdGltZSBmb3IgdGhlIE91dHB1dCBDb21wYXJlICovCiAgIFRJTV9CYXNlX1NldENvbmZpZyhodGltLT5JbnN0YW5jZSwgICZodGltLT5Jbml0KTsKIAorICAvKiBJbml0aWFsaXplIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCisgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBzdGF0ZSovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIApAQCAtNjcxLDYgKzcwNywxMyBAQAogICBIQUxfVElNX09DX01zcERlSW5pdChodGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7CisKKyAgLyogQ2hhbmdlIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKwogICAvKiBDaGFuZ2UgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRVNFVDsKIApAQCAtNzMwLDYgKzc3MywxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBPdXRwdXQgY29tcGFyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKQEAgLTc4MCw2ICs4MzIsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtODAyLDYgKzg1NywxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtOTE4LDYgKzk4Miw5IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC05NDIsMTEgKzEwMDksMTIgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAotICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgocERhdGEgPT0gTlVMTCkgJiYgKExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC05NTQsMTIgKzEwMjIsMTIgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICBzd2l0Y2ggKENoYW5uZWwpCkBAIC0xMTMyLDggKzEyMDAsOCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMTIxNSw2ICsxMjgzLDEzIEBACiAgIC8qIEluaXQgdGhlIGJhc2UgdGltZSBmb3IgdGhlIFBXTSAqLwogICBUSU1fQmFzZV9TZXRDb25maWcoaHRpbS0+SW5zdGFuY2UsICZodGltLT5Jbml0KTsKIAorICAvKiBJbml0aWFsaXplIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCisgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBzdGF0ZSovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIApAQCAtMTI0OCw2ICsxMzIzLDEzIEBACiAgIEhBTF9USU1fUFdNX01zcERlSW5pdChodGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7CisKKyAgLyogQ2hhbmdlIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVF9BTEwoaHRpbSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKwogICAvKiBDaGFuZ2UgVElNIHN0YXRlICovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRVNFVDsKIApAQCAtMTMwNyw2ICsxMzg5LDE1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIENhcHR1cmUgY29tcGFyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKQEAgLTEzNTcsOCArMTQ0OCw4IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xMzgxLDYgKzE0NzIsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTE0OTcsNiArMTU5Nyw5IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xNTIxLDExICsxNjI0LDEyIEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBpZiAoKHBEYXRhID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCiAgICAgewpAQCAtMTUzMywxMiArMTYzNywxMiBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuIEhBTF9FUlJPUjsKICAgfQogCiAgIHN3aXRjaCAoQ2hhbm5lbCkKQEAgLTE3MTAsOCArMTgxNCw4IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0xNzkzLDYgKzE4OTcsMTMgQEAKICAgLyogSW5pdCB0aGUgYmFzZSB0aW1lIGZvciB0aGUgaW5wdXQgY2FwdHVyZSAqLwogICBUSU1fQmFzZV9TZXRDb25maWcoaHRpbS0+SW5zdGFuY2UsICZodGltLT5Jbml0KTsKIAorICAvKiBJbml0aWFsaXplIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCisgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBzdGF0ZSovCiAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKIApAQCAtMTgyNiw2ICsxOTM3LDEzIEBACiAgIEhBTF9USU1fSUNfTXNwRGVJbml0KGh0aW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsKKworICAvKiBDaGFuZ2UgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVRfQUxMKGh0aW0sIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUX0FMTChodGltLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworCiAgIC8qIENoYW5nZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUOwogCkBAIC0xODc5LDEwICsxOTk3LDIzIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX1N0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogewogICB1aW50MzJfdCB0bXBzbWNyOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgKi8KICAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIApAQCAtMTkxOSw2ICsyMDUwLDEwIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xOTM3LDEwICsyMDcyLDIzIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogewogICB1aW50MzJfdCB0bXBzbWNyOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBDaGFubmVsKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMjA0NCw2ICsyMTkyLDEwIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yMDY0LDE2ICsyMjE2LDIxIEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0lDX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCwgdWludDMyX3QgKnBEYXRhLCB1aW50MTZfdCBMZW5ndGgpCiB7CiAgIHVpbnQzMl90IHRtcHNtY3I7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfQ0NfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAotICBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9CVVNZKQorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsIHN0YXRlICovCisgIGlmICgoY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKKyAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKChjaGFubmVsX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7CiAgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTIwODEsMTIgKzIyMzgsMTMgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KIAogICBzd2l0Y2ggKENoYW5uZWwpCkBAIC0yMjAyLDYgKzIzNjAsOSBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9DQ19JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCisgIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLworICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKKwogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CkBAIC0yMjQwLDE0ICsyNDAxLDEyIEBACiAgICAgICBicmVhazsKICAgfQogCi0gIC8qIERpc2FibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwotICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCwgVElNX0NDeF9ESVNBQkxFKTsKLQogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCi0gIC8qIENoYW5nZSB0aGUgaHRpbSBzdGF0ZSAqLwotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMjI4NCw2ICsyNDQzLDkgQEAKICAgKiAgICAgICAgIHJlcXVpcmVzIGEgdGltZXIgcmVzZXQgdG8gYXZvaWQgdW5leHBlY3RlZCBkaXJlY3Rpb24KICAgKiAgICAgICAgIGR1ZSB0byBESVIgYml0IHJlYWRvbmx5IGluIGNlbnRlciBhbGlnbmVkIG1vZGUuCiAgICogICAgICAgICBFeDogY2FsbCBAcmVmIEhBTF9USU1fT25lUHVsc2VfRGVJbml0KCkgYmVmb3JlIEhBTF9USU1fT25lUHVsc2VfSW5pdCgpCisgICogQG5vdGUgICBXaGVuIHRoZSB0aW1lciBpbnN0YW5jZSBpcyBpbml0aWFsaXplZCBpbiBPbmUgUHVsc2UgbW9kZSwgdGltZXIKKyAgKiAgICAgICAgIGNoYW5uZWxzIDEgYW5kIGNoYW5uZWwgMiBhcmUgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBvdGhlcgorICAqICAgICAgICAgcHVycG9zZS4KICAgKiBAcGFyYW0gIGh0aW0gVElNIE9uZSBQdWxzZSBoYW5kbGUKICAgKiBAcGFyYW0gIE9uZVB1bHNlTW9kZSBTZWxlY3QgdGhlIE9uZSBwdWxzZSBtb2RlLgogICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKQEAgLTIzMzksNiArMjUwMSwxNSBAQAogICAvKiBDb25maWd1cmUgdGhlIE9QTSBNb2RlICovCiAgIGh0aW0tPkluc3RhbmNlLT5DUjEgfD0gT25lUHVsc2VNb2RlOwogCisgIC8qIEluaXRpYWxpemUgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBJbml0aWFsaXplIHRoZSBUSU0gc3RhdGUqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKQEAgLTIzNzIsNiArMjU0MywxNSBAQAogICBIQUxfVElNX09uZVB1bHNlX01zcERlSW5pdChodGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTI0MjIsOSArMjYwMiwyOSBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PbmVQdWxzZV9TdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworCiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKE91dHB1dENoYW5uZWwpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgYW5kIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWxzCiAgICAgKGluIHRoZSBPUE0gTW9kZSB0aGUgdHdvIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIpCiAgICAgaWYgVElNX0NIQU5ORUxfMSBpcyB1c2VkIGFzIG91dHB1dCwgdGhlIFRJTV9DSEFOTkVMXzIgd2lsbCBiZSB1c2VkIGFzIGlucHV0IGFuZApAQCAtMjQ3OSw2ICsyNjc5LDEyIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTI0OTQsOSArMjcwMCwyOSBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9PbmVQdWxzZV9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworCiAgIC8qIFByZXZlbnQgdW51c2VkIGFyZ3VtZW50KHMpIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8KICAgVU5VU0VEKE91dHB1dENoYW5uZWwpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBDYXB0dXJlIGNvbXBhcmUgYW5kIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWxzCiAgICAgKGluIHRoZSBPUE0gTW9kZSB0aGUgdHdvIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEgYW5kIFRJTV9DSEFOTkVMXzIpCiAgICAgaWYgVElNX0NIQU5ORUxfMSBpcyB1c2VkIGFzIG91dHB1dCwgdGhlIFRJTV9DSEFOTkVMXzIgd2lsbCBiZSB1c2VkIGFzIGlucHV0IGFuZApAQCAtMjU2Miw2ICsyNzg4LDEyIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTI2MDAsNiArMjgzMiw5IEBACiAgICogQG5vdGUgICBFbmNvZGVyIG1vZGUgYW5kIEV4dGVybmFsIGNsb2NrIG1vZGUgMiBhcmUgbm90IGNvbXBhdGlibGUgYW5kIG11c3Qgbm90IGJlIHNlbGVjdGVkIHRvZ2V0aGVyCiAgICogICAgICAgICBFeDogQSBjYWxsIGZvciBAcmVmIEhBTF9USU1fRW5jb2Rlcl9Jbml0IHdpbGwgZXJhc2UgdGhlIHNldHRpbmdzIG9mIEByZWYgSEFMX1RJTV9Db25maWdDbG9ja1NvdXJjZQogICAqICAgICAgICAgdXNpbmcgVElNX0NMT0NLU09VUkNFX0VUUk1PREUyIGFuZCB2aWNlIHZlcnNhCisgICogQG5vdGUgICBXaGVuIHRoZSB0aW1lciBpbnN0YW5jZSBpcyBpbml0aWFsaXplZCBpbiBFbmNvZGVyIG1vZGUsIHRpbWVyCisgICogICAgICAgICBjaGFubmVscyAxIGFuZCBjaGFubmVsIDIgYXJlIHJlc2VydmVkIGFuZCBjYW5ub3QgYmUgdXNlZCBmb3Igb3RoZXIKKyAgKiAgICAgICAgIHB1cnBvc2UuCiAgICogQHBhcmFtICBodGltIFRJTSBFbmNvZGVyIEludGVyZmFjZSBoYW5kbGUKICAgKiBAcGFyYW0gIHNDb25maWcgVElNIEVuY29kZXIgSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0yNjk3LDYgKzI5MzIsMTUgQEAKICAgLyogV3JpdGUgdG8gVElNeCBDQ0VSICovCiAgIGh0aW0tPkluc3RhbmNlLT5DQ0VSID0gdG1wY2NlcjsKIAorICAvKiBJbml0aWFsaXplIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBJbml0aWFsaXplIHRoZSBUSU0gc3RhdGUqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CiAKQEAgLTI3MzEsNiArMjk3NSwxNSBAQAogICBIQUxfVElNX0VuY29kZXJfTXNwRGVJbml0KGh0aW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLwogCisgIC8qIENoYW5nZSB0aGUgRE1BIGJ1cnN0IG9wZXJhdGlvbiBzdGF0ZSAqLworICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRVNFVDsKKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFU0VUKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisKICAgLyogQ2hhbmdlIFRJTSBzdGF0ZSAqLwogICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVTRVQ7CiAKQEAgLTI3ODIsOSArMzAzNSw1OSBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTV9FbmNvZGVyX1N0YXJ0KFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsKQogeworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9FTkNPREVSX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWwocykgc3RhdGUgKi8KKyAgaWYgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkKKyAgeworICAgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMikKKyAgeworICAgIGlmICgoY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIGlmICgoY2hhbm5lbF8xX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICB9CisgIH0KKwogICAvKiBFbmFibGUgdGhlIGVuY29kZXIgaW50ZXJmYWNlIGNoYW5uZWxzICovCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewpAQCAtMjg1Niw2ICszMTU5LDIwIEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkgfHwgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMikpCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yODcyLDkgKzMxODksNTkgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1fRW5jb2Rlcl9TdGFydF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgQ2hhbm5lbCkKIHsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8xKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8xX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIpOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fRU5DT0RFUl9JTlRFUkZBQ0VfSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UpKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVsKHMpIHN0YXRlICovCisgIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQorICBlbHNlIGlmIChDaGFubmVsID09IFRJTV9DSEFOTkVMXzIpCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgfQorICB9CisKICAgLyogRW5hYmxlIHRoZSBlbmNvZGVyIGludGVyZmFjZSBjaGFubmVscyAqLwogICAvKiBFbmFibGUgdGhlIGNhcHR1cmUgY29tcGFyZSBJbnRlcnJ1cHRzIDEgYW5kL29yIDIgKi8KICAgc3dpdGNoIChDaGFubmVsKQpAQCAtMjk1NCw4ICszMzIxLDE5IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkgfHwgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMikpCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0yOTc3LDI3ICszMzU1LDk1IEBACiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNX0VuY29kZXJfU3RhcnRfRE1BKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCAqcERhdGExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqcERhdGEyLCB1aW50MTZfdCBMZW5ndGgpCiB7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0VOQ09ERVJfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8xKQogICB7Ci0gICAgcmV0dXJuIEhBTF9CVVNZOwotICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCi0gIHsKLSAgICBpZiAoKCgocERhdGExID09IE5VTEwpIHx8IChwRGF0YTIgPT0gTlVMTCkpKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgIGlmICgoY2hhbm5lbF8xX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKQorICAgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpKQogICAgIHsKLSAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICByZXR1cm4gSEFMX0JVU1k7CisgICAgfQorICAgIGVsc2UgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICAgIHsKKyAgICAgIGlmICgocERhdGExID09IE5VTEwpICYmIChMZW5ndGggPiAwVSkpCisgICAgICB7CisgICAgICAgIHJldHVybiBIQUxfRVJST1I7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOworICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoQ2hhbm5lbCA9PSBUSU1fQ0hBTk5FTF8yKQorICB7CisgICAgaWYgKChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMl9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCisgICAgeworICAgICAgcmV0dXJuIEhBTF9CVVNZOworICAgIH0KKyAgICBlbHNlIGlmICgoY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAmJiAoY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgICB7CisgICAgICBpZiAoKHBEYXRhMiA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQorICAgICAgeworICAgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOwogICAgIH0KICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgIHx8IChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCisgICAgIHx8IChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKKyAgICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKSkKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0JVU1k7CisgICAgfQorICAgIGVsc2UgaWYgKChjaGFubmVsXzFfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICYmIChjaGFubmVsXzJfc3RhdGUgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICAgJiYgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlID09IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgICAgeworICAgICAgaWYgKCgoKHBEYXRhMSA9PSBOVUxMKSB8fCAocERhdGEyID09IE5VTEwpKSkgJiYgKExlbmd0aCA+IDBVKSkKKyAgICAgIHsKKyAgICAgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICAgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gSEFMX0VSUk9SOworICAgIH0KICAgfQogCiAgIHN3aXRjaCAoQ2hhbm5lbCkKQEAgLTMwOTUsNiArMzU0MSw3IEBACiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwogICB9CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMzE0Nyw4ICszNTk0LDE5IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbChzKSBzdGF0ZSAqLworICBpZiAoKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkgfHwgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMikpCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgCisgIHsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KIAogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CkBAIC0zNDE3LDggKzM4NzUsNiBAQAogICAvKiBQcm9jZXNzIExvY2tlZCAqLwogICBfX0hBTF9MT0NLKGh0aW0pOwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9CVVNZOwotCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTM0ODUsOCArMzk0MSw2IEBACiAgICAgICBicmVhazsKICAgfQogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBfX0hBTF9VTkxPQ0soaHRpbSk7CiAKICAgcmV0dXJuIEhBTF9PSzsKQEAgLTM1MTcsOCArMzk3MSw2IEBACiAgIC8qIFByb2Nlc3MgTG9ja2VkICovCiAgIF9fSEFMX0xPQ0soaHRpbSk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7Ci0KICAgaWYgKENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkKICAgewogICAgIC8qIFRJMSBDb25maWd1cmF0aW9uICovCkBAIC0zNTgyLDggKzQwMzQsNiBAQAogICAgIGh0aW0tPkluc3RhbmNlLT5DQ01SMiB8PSAoc0NvbmZpZy0+SUNQcmVzY2FsZXIgPDwgOFUpOwogICB9CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIF9fSEFMX1VOTE9DSyhodGltKTsKIAogICByZXR1cm4gSEFMX09LOwpAQCAtMzYxNyw4ICs0MDY3LDYgQEAKICAgLyogUHJvY2VzcyBMb2NrZWQgKi8KICAgX19IQUxfTE9DSyhodGltKTsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKLQogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CkBAIC0zNzI3LDggKzQxNzUsNiBAQAogICAgICAgYnJlYWs7CiAgIH0KIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgX19IQUxfVU5MT0NLKGh0aW0pOwogCiAgIHJldHVybiBIQUxfT0s7CkBAIC0zOTYzLDExICs0NDA5LDExIEBACiAgIGFzc2VydF9wYXJhbShJU19USU1fRE1BX0xFTkdUSChCdXJzdExlbmd0aCkpOwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9EQVRBX0xFTkdUSChEYXRhTGVuZ3RoKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgaWYgKGh0aW0tPkRNQUJ1cnN0U3RhdGUgPT0gSEFMX0RNQV9CVVJTVF9TVEFURV9CVVNZKQogICB7CiAgICAgcmV0dXJuIEhBTF9CVVNZOwogICB9Ci0gIGVsc2UgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfUkVBRFkpCisgIGVsc2UgaWYgKGh0aW0tPkRNQUJ1cnN0U3RhdGUgPT0gSEFMX0RNQV9CVVJTVF9TVEFURV9SRUFEWSkKICAgewogICAgIGlmICgoQnVyc3RCdWZmZXIgPT0gTlVMTCkgJiYgKEJ1cnN0TGVuZ3RoID4gMFUpKQogICAgIHsKQEAgLTM5NzUsNyArNDQyMSw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX0JVU1k7CiAgICAgfQogICB9CiAgIGVsc2UKQEAgLTQxMTIsOCArNDU1OCw2IEBACiAgIC8qIEVuYWJsZSB0aGUgVElNIERNQSBSZXF1ZXN0ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTQxNzgsNiArNDYyMiw5IEBACiAgICAgX19IQUxfVElNX0RJU0FCTEVfRE1BKGh0aW0sIEJ1cnN0UmVxdWVzdFNyYyk7CiAgIH0KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gc3RhdHVzOwogfQpAQCAtNDI5MSwxMSArNDczOCwxMSBAQAogICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQV9MRU5HVEgoQnVyc3RMZW5ndGgpKTsKICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9ETUFfREFUQV9MRU5HVEgoRGF0YUxlbmd0aCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIGlmIChodGltLT5ETUFCdXJzdFN0YXRlID09IEhBTF9ETUFfQlVSU1RfU1RBVEVfQlVTWSkKICAgewogICAgIHJldHVybiBIQUxfQlVTWTsKICAgfQotICBlbHNlIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX1JFQURZKQorICBlbHNlIGlmIChodGltLT5ETUFCdXJzdFN0YXRlID09IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVBRFkpCiAgIHsKICAgICBpZiAoKEJ1cnN0QnVmZmVyID09IE5VTEwpICYmIChCdXJzdExlbmd0aCA+IDBVKSkKICAgICB7CkBAIC00MzAzLDcgKzQ3NTAsNyBAQAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX0JVU1k7CisgICAgICBodGltLT5ETUFCdXJzdFN0YXRlID0gSEFMX0RNQV9CVVJTVF9TVEFURV9CVVNZOwogICAgIH0KICAgfQogICBlbHNlCkBAIC00NDQxLDggKzQ4ODgsNiBAQAogICAvKiBFbmFibGUgdGhlIFRJTSBETUEgUmVxdWVzdCAqLwogICBfX0hBTF9USU1fRU5BQkxFX0RNQShodGltLCBCdXJzdFJlcXVlc3RTcmMpOwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC00NTA3LDYgKzQ5NTIsOSBAQAogICAgIF9fSEFMX1RJTV9ESVNBQkxFX0RNQShodGltLCBCdXJzdFJlcXVlc3RTcmMpOwogICB9CiAKKyAgLyogQ2hhbmdlIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIHN0YXR1czsKIH0KQEAgLTU3OTcsNiArNjI0NSw1NCBAQAogfQogCiAvKioKKyAgKiBAYnJpZWYgIFJldHVybiB0aGUgVElNIEVuY29kZXIgTW9kZSBoYW5kbGUgc3RhdGUuCisgICogQHBhcmFtICBodGltIFRJTSBoYW5kbGUKKyAgKiBAcmV0dmFsIEFjdGl2ZSBjaGFubmVsCisgICovCitIQUxfVElNX0FjdGl2ZUNoYW5uZWwgSEFMX1RJTV9HZXRBY3RpdmVDaGFubmVsKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQoreworICByZXR1cm4gaHRpbS0+Q2hhbm5lbDsKK30KKworLyoqCisgICogQGJyaWVmICBSZXR1cm4gYWN0dWFsIHN0YXRlIG9mIHRoZSBUSU0gY2hhbm5lbC4KKyAgKiBAcGFyYW0gIGh0aW0gVElNIGhhbmRsZQorICAqIEBwYXJhbSAgQ2hhbm5lbCBUSU0gQ2hhbm5lbAorICAqICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzE6IFRJTSBDaGFubmVsIDEKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMjogVElNIENoYW5uZWwgMgorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8zOiBUSU0gQ2hhbm5lbCAzCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzQ6IFRJTSBDaGFubmVsIDQKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfNTogVElNIENoYW5uZWwgNQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF82OiBUSU0gQ2hhbm5lbCA2CisgICogQHJldHZhbCBUSU0gQ2hhbm5lbCBzdGF0ZQorICAqLworSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIEhBTF9USU1fR2V0Q2hhbm5lbFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCAgdWludDMyX3QgQ2hhbm5lbCkKK3sKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGNoYW5uZWxfc3RhdGU7CisgIAorICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWF9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOworCisgIGNoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCk7CisgICAgCisgIHJldHVybiBjaGFubmVsX3N0YXRlOworfQorCisvKioKKyAgKiBAYnJpZWYgIFJldHVybiBhY3R1YWwgc3RhdGUgb2YgYSBETUEgYnVyc3Qgb3BlcmF0aW9uLgorICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCisgICogQHJldHZhbCBETUEgYnVyc3Qgc3RhdGUKKyAgKi8KK0hBTF9USU1fRE1BQnVyc3RTdGF0ZVR5cGVEZWYgSEFMX1RJTV9ETUFCdXJzdFN0YXRlKFRJTV9IYW5kbGVUeXBlRGVmICpodGltKQoreworICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfVElNX0RNQUJVUlNUX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CisgIAorICByZXR1cm4gaHRpbS0+RE1BQnVyc3RTdGF0ZTsKK30KKworLyoqCiAgICogQH0KICAgKi8KIApAQCAtNTgxNywxMyArNjMxMywzOCBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8yOworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8zOworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8zLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF80OworICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF80LCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UKKyAgeworICAgIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgfQogCiAjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICBodGltLT5FcnJvckNhbGxiYWNrKGh0aW0pOwogI2Vsc2UKICAgSEFMX1RJTV9FcnJvckNhbGxiYWNrKGh0aW0pOwogI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLworCisgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMX0NMRUFSRUQ7CiB9CiAKIC8qKgpAQCAtNTgzNSwyMyArNjM1Niw0MSBAQAogewogICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OwogCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKLQogICBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzE7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KICAgfQogICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMjsKKyAgICAKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8zOworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CiAgIH0KICAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0M0XSkKICAgewogICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzQ7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF80LCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KICAgfQogICBlbHNlCiAgIHsKQEAgLTU4NzYsOCArNjQxNSw2IEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAgIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKQogICB7CiAgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMTsKQEAgLTU5MTcsMjMgKzY0NTQsNDUgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8yOworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8zOworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzMsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF80OworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfNCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzQsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQogICB9CiAgIGVsc2UKICAgewpAQCAtNTk1OCw4ICs2NTE3LDYgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7Ci0KICAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCiAgIHsKICAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOwpAQCAtNTk5OSw3ICs2NTU2LDEwIEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICBpZiAoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX1VQREFURV0tPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICB7CisgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICB9CiAKICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPlBlcmlvZEVsYXBzZWRDYWxsYmFjayhodGltKTsKQEAgLTYwMTcsOCArNjU3Nyw2IEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICBodGltLT5QZXJpb2RFbGFwc2VkSGFsZkNwbHRDYWxsYmFjayhodGltKTsKICNlbHNlCkBAIC02MDM1LDcgKzY1OTMsMTAgQEAKIHsKICAgVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0gPSAoVElNX0hhbmRsZVR5cGVEZWYgKikoKERNQV9IYW5kbGVUeXBlRGVmICopaGRtYSktPlBhcmVudDsKIAotICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfUkVBRFk7CisgIGlmIChodGltLT5oZG1hW1RJTV9ETUFfSURfVFJJR0dFUl0tPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICB7CisgICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOworICB9CiAKICNpZiAoVVNFX0hBTF9USU1fUkVHSVNURVJfQ0FMTEJBQ0tTID09IDEpCiAgIGh0aW0tPlRyaWdnZXJDYWxsYmFjayhodGltKTsKQEAgLTYwNTMsOCArNjYxNCw2IEBACiB7CiAgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CiAKLSAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwotCiAjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQogICBodGltLT5UcmlnZ2VySGFsZkNwbHRDYWxsYmFjayhodGltKTsKICNlbHNlCmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF90aW1fZXguYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3RpbV9leC5jCmluZGV4IDY4NTFmODguLmQxY2IxOGMgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfaGFsX3RpbV9leC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX3RpbV9leC5jCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICAgICB0aGUgY29tbXV0YXRpb24gZXZlbnQpLgogCiAgICAgICgjKSBBY3RpdmF0ZSB0aGUgVElNIHBlcmlwaGVyYWwgdXNpbmcgb25lIG9mIHRoZSBzdGFydCBmdW5jdGlvbnM6Ci0gICAgICAgICAgICgrKykgQ29tcGxlbWVudGFyeSBPdXRwdXQgQ29tcGFyZSA6IEhBTF9USU1FeF9PQ05fU3RhcnQoKSwgSEFMX1RJTUV4X09DTl9TdGFydF9ETUEoKSwgSEFMX1RJTUV4X09DX1N0YXJ0X0lUKCkKKyAgICAgICAgICAgKCsrKSBDb21wbGVtZW50YXJ5IE91dHB1dCBDb21wYXJlIDogSEFMX1RJTUV4X09DTl9TdGFydCgpLCBIQUxfVElNRXhfT0NOX1N0YXJ0X0RNQSgpLCBIQUxfVElNRXhfT0NOX1N0YXJ0X0lUKCkKICAgICAgICAgICAgKCsrKSBDb21wbGVtZW50YXJ5IFBXTSBnZW5lcmF0aW9uIDogSEFMX1RJTUV4X1BXTU5fU3RhcnQoKSwgSEFMX1RJTUV4X1BXTU5fU3RhcnRfRE1BKCksIEhBTF9USU1FeF9QV01OX1N0YXJ0X0lUKCkKICAgICAgICAgICAgKCsrKSBDb21wbGVtZW50YXJ5IE9uZS1wdWxzZSBtb2RlIG91dHB1dCA6IEhBTF9USU1FeF9PbmVQdWxzZU5fU3RhcnQoKSwgSEFMX1RJTUV4X09uZVB1bHNlTl9TdGFydF9JVCgpCiAgICAgICAgICAgICgrKykgSGFsbCBTZW5zb3Igb3V0cHV0IDogSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnQoKSwgSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnRfRE1BKCksIEhBTF9USU1FeF9IYWxsU2Vuc29yX1N0YXJ0X0lUKCkuCkBAIC05MSw5ICs5MSwxMSBAQAogCiAvKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJpdmF0ZSB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgdm9pZCBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0KERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKTsKK3N0YXRpYyB2b2lkIFRJTV9ETUFFcnJvckNDeE4oRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpOwogc3RhdGljIHZvaWQgVElNX0NDeE5DaGFubmVsQ21kKFRJTV9UeXBlRGVmICpUSU14LCB1aW50MzJfdCBDaGFubmVsLCB1aW50MzJfdCBDaGFubmVsTlN0YXRlKTsKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTEyNCw2ICsxMjYsOSBAQAogICAqLwogLyoqCiAgICogQGJyaWVmICBJbml0aWFsaXplcyB0aGUgVElNIEhhbGwgU2Vuc29yIEludGVyZmFjZSBhbmQgaW5pdGlhbGl6ZSB0aGUgYXNzb2NpYXRlZCBoYW5kbGUuCisgICogQG5vdGUgICBXaGVuIHRoZSB0aW1lciBpbnN0YW5jZSBpcyBpbml0aWFsaXplZCBpbiBIYWxsIFNlbnNvciBJbnRlcmZhY2UgbW9kZSwKKyAgKiAgICAgICAgIHRpbWVyIGNoYW5uZWxzIDEgYW5kIGNoYW5uZWwgMiBhcmUgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGZvcgorICAqICAgICAgICAgb3RoZXIgcHVycG9zZS4KICAgKiBAcGFyYW0gIGh0aW0gVElNIEhhbGwgU2Vuc29yIEludGVyZmFjZSBoYW5kbGUKICAgKiBAcGFyYW0gIHNDb25maWcgVElNIEhhbGwgU2Vuc29yIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgICogQHJldHZhbCBIQUwgc3RhdHVzCkBAIC0yMDksNiArMjE0LDE1IEBACiAgIGh0aW0tPkluc3RhbmNlLT5DUjIgJj0gflRJTV9DUjJfTU1TOwogICBodGltLT5JbnN0YW5jZS0+Q1IyIHw9IFRJTV9UUkdPX09DMlJFRjsKIAorICAvKiBJbml0aWFsaXplIHRoZSBETUEgYnVyc3Qgb3BlcmF0aW9uIHN0YXRlICovCisgIGh0aW0tPkRNQUJ1cnN0U3RhdGUgPSBIQUxfRE1BX0JVUlNUX1NUQVRFX1JFQURZOworCisgIC8qIEluaXRpYWxpemUgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogSW5pdGlhbGl6ZSB0aGUgVElNIHN0YXRlKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFQURZOwogCkBAIC0yNDIsNiArMjU2LDE1IEBACiAgIEhBTF9USU1FeF9IYWxsU2Vuc29yX01zcERlSW5pdChodGltKTsKICNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KIAorICAvKiBDaGFuZ2UgdGhlIERNQSBidXJzdCBvcGVyYXRpb24gc3RhdGUgKi8KKyAgaHRpbS0+RE1BQnVyc3RTdGF0ZSA9IEhBTF9ETUFfQlVSU1RfU1RBVEVfUkVTRVQ7CisKKyAgLyogQ2hhbmdlIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRVNFVCk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVTRVQpOworCiAgIC8qIENoYW5nZSBUSU0gc3RhdGUgKi8KICAgaHRpbS0+U3RhdGUgPSBIQUxfVElNX1NUQVRFX1JFU0VUOwogCkBAIC0yODksMTIgKzMxMiwzMSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCiB7CiAgIHVpbnQzMl90IHRtcHNtY3I7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0hBTExfU0VOU09SX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIAogICAvKiBFbmFibGUgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAxCi0gICAgKGluIHRoZSBIYWxsIFNlbnNvciBJbnRlcmZhY2UgdGhlIHRocmVlIHBvc3NpYmxlIGNoYW5uZWxzIHRoYXQgY2FuIGJlIHVzZWQgYXJlIFRJTV9DSEFOTkVMXzEsIFRJTV9DSEFOTkVMXzIgYW5kIFRJTV9DSEFOTkVMXzMpICovCisgIChpbiB0aGUgSGFsbCBTZW5zb3IgSW50ZXJmYWNlIHRoZSB0aHJlZSBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0hBTk5FTF8yIGFuZCBUSU1fQ0hBTk5FTF8zKSAqLwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMSwgVElNX0NDeF9FTkFCTEUpOwogCiAgIC8qIEVuYWJsZSB0aGUgUGVyaXBoZXJhbCwgZXhjZXB0IGluIHRyaWdnZXIgbW9kZSB3aGVyZSBlbmFibGUgaXMgYXV0b21hdGljYWxseSBkb25lIHdpdGggdHJpZ2dlciAqLwpAQCAtMzI1LDYgKzM2NywxMiBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0zMzcsMTAgKzM4NSwyOSBAQAogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X0hhbGxTZW5zb3JfU3RhcnRfSVQoVElNX0hhbmRsZVR5cGVEZWYgKmh0aW0pCiB7CiAgIHVpbnQzMl90IHRtcHNtY3I7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMik7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY29tcGxlbWVudGFyeV9jaGFubmVsXzJfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBUSU1fQ0hBTk5FTF8yKTsKIAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0hBTExfU0VOU09SX0lOVEVSRkFDRV9JTlNUQU5DRShodGltLT5JbnN0YW5jZSkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgaWYgKChjaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNoYW5uZWxfMl9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoY29tcGxlbWVudGFyeV9jaGFubmVsXzFfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGNvbXBsZW1lbnRhcnlfY2hhbm5lbF8yX3N0YXRlICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8yLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgLyogRW5hYmxlIHRoZSBjYXB0dXJlIGNvbXBhcmUgSW50ZXJydXB0cyAxIGV2ZW50ICovCiAgIF9fSEFMX1RJTV9FTkFCTEVfSVQoaHRpbSwgVElNX0lUX0NDMSk7CiAKQEAgLTM3OSw2ICs0NDYsMTIgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwogfQpAQCAtMzkzLDI5ICs0NjYsMzYgQEAKIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9IYWxsU2Vuc29yX1N0YXJ0X0RNQShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgKnBEYXRhLCB1aW50MTZfdCBMZW5ndGgpCiB7CiAgIHVpbnQzMl90IHRtcHNtY3I7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjaGFubmVsXzFfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgVElNX0NIQU5ORUxfMSk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIFRJTV9DSEFOTkVMXzEpOwogCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fSEFMTF9TRU5TT1JfSU5URVJGQUNFX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlKSk7CiAKLSAgaWYgKGh0aW0tPlN0YXRlID09IEhBTF9USU1fU1RBVEVfQlVTWSkKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkKKyAgICB8fChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSkpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoKGNoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICAgICAgICYmIChjb21wbGVtZW50YXJ5X2NoYW5uZWxfMV9zdGF0ZSA9PSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQogICB7Ci0gICAgaWYgKCgodWludDMyX3QpcERhdGEgPT0gMFUpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CiAgICAgfQogICB9CiAgIGVsc2UKICAgewotICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CisKICAgLyogRW5hYmxlIHRoZSBJbnB1dCBDYXB0dXJlIGNoYW5uZWwgMQogICAgIChpbiB0aGUgSGFsbCBTZW5zb3IgSW50ZXJmYWNlIHRoZSB0aHJlZSBwb3NzaWJsZSBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkIGFyZSBUSU1fQ0hBTk5FTF8xLCBUSU1fQ0hBTk5FTF8yIGFuZCBUSU1fQ0hBTk5FTF8zKSAqLwogICBUSU1fQ0N4Q2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgVElNX0NIQU5ORUxfMSwgVElNX0NDeF9FTkFCTEUpOwpAQCAtNDY0LDkgKzU0NCwxNCBAQAogICBfX0hBTF9USU1fRElTQUJMRV9ETUEoaHRpbSwgVElNX0RNQV9DQzEpOwogCiAgICh2b2lkKUhBTF9ETUFfQWJvcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pOworCiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKKyAgLyogU2V0IHRoZSBUSU0gY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMSwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC01MTMsNiArNTk4LDE1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIGlmIChUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBDaGFubmVsKSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgIHsKKyAgICByZXR1cm4gSEFMX0VSUk9SOworICB9CisgIAorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgQ2FwdHVyZSBjb21wYXJlIGNoYW5uZWwgTiAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CiAKQEAgLTU1NSw2ICs2NDksOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTU3Nyw2ICs2NzQsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIHN3aXRjaCAoQ2hhbm5lbCkKICAgewogICAgIGNhc2UgVElNX0NIQU5ORUxfMToKQEAgLTY4NSw2ICs3OTEsOSBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworCiAgIC8qIFJldHVybiBmdW5jdGlvbiBzdGF0dXMgKi8KICAgcmV0dXJuIEhBTF9PSzsKIH0KQEAgLTcwOSwyNCArODE4LDI1IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKCgodWludDMyX3QpcERhdGEgPT0gMFUpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAgKi8KKyAgICByZXR1cm4gSEFMX0VSUk9SOwogICB9CiAKICAgc3dpdGNoIChDaGFubmVsKQpAQCAtNzM0LDExICs4NDQsMTEgQEAKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCBMZW5ndGgpICE9IEhBTF9PSykKQEAgLTc1MywxMSArODYzLDExIEBACiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8yOgogICAgIHsKICAgICAgIC8qIFNldCB0aGUgRE1BIGNvbXBhcmUgY2FsbGJhY2tzICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlQ3BsdDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VOQ3BsdDsKICAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVySGFsZkNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlSGFsZkNwbHQ7CiAKICAgICAgIC8qIFNldCB0aGUgRE1BIGVycm9yIGNhbGxiYWNrICovCi0gICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3IgOworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yQ0N4TiA7CiAKICAgICAgIC8qIEVuYWJsZSB0aGUgRE1BIHN0cmVhbSAqLwogICAgICAgaWYgKEhBTF9ETUFfU3RhcnRfSVQoaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0sICh1aW50MzJfdClwRGF0YSwgKHVpbnQzMl90KSZodGltLT5JbnN0YW5jZS0+Q0NSMiwgTGVuZ3RoKSAhPSBIQUxfT0spCkBAIC03NzIsMTEgKzg4MiwxMSBAQAogICAgIGNhc2UgVElNX0NIQU5ORUxfMzoKICAgICB7CiAgICAgICAvKiBTZXQgdGhlIERNQSBjb21wYXJlIGNhbGxiYWNrcyAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUNwbHQ7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckNwbHRDYWxsYmFjayA9IFRJTV9ETUFEZWxheVB1bHNlTkNwbHQ7CiAgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckhhbGZDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZUhhbGZDcGx0OwogCiAgICAgICAvKiBTZXQgdGhlIERNQSBlcnJvciBjYWxsYmFjayAqLwotICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJFcnJvckNhbGxiYWNrID0gVElNX0RNQUVycm9yIDsKKyAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvckNDeE4gOwogCiAgICAgICAvKiBFbmFibGUgdGhlIERNQSBzdHJlYW0gKi8KICAgICAgIGlmIChIQUxfRE1BX1N0YXJ0X0lUKGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLCAodWludDMyX3QpcERhdGEsICh1aW50MzJfdCkmaHRpbS0+SW5zdGFuY2UtPkNDUjMsIExlbmd0aCkgIT0gSEFMX09LKQpAQCAtODY0LDggKzk3NCw4IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtOTIyLDYgKzEwMzIsMTUgQEAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBDaGFubmVsKSk7CiAKKyAgLyogQ2hlY2sgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgaWYgKFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIENoYW5uZWwpICE9IEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpOworCiAgIC8qIEVuYWJsZSB0aGUgY29tcGxlbWVudGFyeSBQV00gb3V0cHV0ICAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CiAKQEAgLTk2Myw2ICsxMDgyLDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC05ODUsNiArMTEwNywxNSBAQAogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIENoYW5uZWwpKTsKIAorICAvKiBDaGVjayB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKICAgc3dpdGNoIChDaGFubmVsKQogICB7CiAgICAgY2FzZSBUSU1fQ0hBTk5FTF8xOgpAQCAtMTA5Myw2ICsxMjI0LDkgQEAKICAgLyogRGlzYWJsZSB0aGUgUGVyaXBoZXJhbCAqLwogICBfX0hBTF9USU1fRElTQUJMRShodGltKTsKIAorICAvKiBTZXQgdGhlIFRJTSBjb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUgKi8KKyAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgQ2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xMTE3LDM1ICsxMjUxLDM3IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbCkpOwogCi0gIGlmIChodGltLT5TdGF0ZSA9PSBIQUxfVElNX1NUQVRFX0JVU1kpCisgIC8qIFNldCB0aGUgVElNIGNvbXBsZW1lbnRhcnkgY2hhbm5lbCBzdGF0ZSAqLworICBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX0JVU1kpCiAgIHsKICAgICByZXR1cm4gSEFMX0JVU1k7CiAgIH0KLSAgZWxzZSBpZiAoaHRpbS0+U3RhdGUgPT0gSEFMX1RJTV9TVEFURV9SRUFEWSkKKyAgZWxzZSBpZiAoVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbCkgPT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQogICB7Ci0gICAgaWYgKCgodWludDMyX3QpcERhdGEgPT0gMFUpICYmIChMZW5ndGggPiAwVSkpCisgICAgaWYgKChwRGF0YSA9PSBOVUxMKSAmJiAoTGVuZ3RoID4gMFUpKQogICAgIHsKICAgICAgIHJldHVybiBIQUxfRVJST1I7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICBodGltLT5TdGF0ZSA9IEhBTF9USU1fU1RBVEVfQlVTWTsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKICAgICB9CiAgIH0KICAgZWxzZQogICB7Ci0gICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJldHVybiBIQUxfRVJST1I7CiAgIH0KKwogICBzd2l0Y2ggKENoYW5uZWwpCiAgIHsKICAgICBjYXNlIFRJTV9DSEFOTkVMXzE6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MxXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IxLCBMZW5ndGgpICE9IEhBTF9PSykKQEAgLTExNjAsMTEgKzEyOTYsMTEgQEAKICAgICBjYXNlIFRJTV9DSEFOTkVMXzI6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MyXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IyLCBMZW5ndGgpICE9IEhBTF9PSykKQEAgLTExNzksMTEgKzEzMTUsMTEgQEAKICAgICBjYXNlIFRJTV9DSEFOTkVMXzM6CiAgICAgewogICAgICAgLyogU2V0IHRoZSBETUEgY29tcGFyZSBjYWxsYmFja3MgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VDcGx0OworICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJDcGx0Q2FsbGJhY2sgPSBUSU1fRE1BRGVsYXlQdWxzZU5DcGx0OwogICAgICAgaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDM10tPlhmZXJIYWxmQ3BsdENhbGxiYWNrID0gVElNX0RNQURlbGF5UHVsc2VIYWxmQ3BsdDsKIAogICAgICAgLyogU2V0IHRoZSBETUEgZXJyb3IgY2FsbGJhY2sgKi8KLSAgICAgIGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzNdLT5YZmVyRXJyb3JDYWxsYmFjayA9IFRJTV9ETUFFcnJvciA7CisgICAgICBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXS0+WGZlckVycm9yQ2FsbGJhY2sgPSBUSU1fRE1BRXJyb3JDQ3hOIDsKIAogICAgICAgLyogRW5hYmxlIHRoZSBETUEgc3RyZWFtICovCiAgICAgICBpZiAoSEFMX0RNQV9TdGFydF9JVChodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSwgKHVpbnQzMl90KXBEYXRhLCAodWludDMyX3QpJmh0aW0tPkluc3RhbmNlLT5DQ1IzLCBMZW5ndGgpICE9IEhBTF9PSykKQEAgLTEyNzEsOCArMTQwNyw4IEBACiAgIC8qIERpc2FibGUgdGhlIFBlcmlwaGVyYWwgKi8KICAgX19IQUxfVElNX0RJU0FCTEUoaHRpbSk7CiAKLSAgLyogQ2hhbmdlIHRoZSBodGltIHN0YXRlICovCi0gIGh0aW0tPlN0YXRlID0gSEFMX1RJTV9TVEFURV9SRUFEWTsKKyAgLyogU2V0IHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CiAKICAgLyogUmV0dXJuIGZ1bmN0aW9uIHN0YXR1cyAqLwogICByZXR1cm4gSEFMX09LOwpAQCAtMTMxMiwxMSArMTQ0OCwyNyBAQAogICAqLwogSEFMX1N0YXR1c1R5cGVEZWYgSEFMX1RJTUV4X09uZVB1bHNlTl9TdGFydChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgdWludDMyX3QgaW5wdXRfY2hhbm5lbCA9IChPdXRwdXRDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpID8gVElNX0NIQU5ORUxfMiA6IFRJTV9DSEFOTkVMXzE7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBpbnB1dF9jaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfU1RBVEVfR0VUKGh0aW0sIGlucHV0X2NoYW5uZWwpOworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgb3V0cHV0X2NoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9OX1NUQVRFX0dFVChodGltLCBPdXRwdXRDaGFubmVsKTsKKwogICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLwogICBhc3NlcnRfcGFyYW0oSVNfVElNX0NDWE5fSU5TVEFOQ0UoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwpKTsKIAotICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCAqLworICAvKiBDaGVjayB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIGlmICgob3V0cHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKQorICAgfHwgKGlucHV0X2NoYW5uZWxfc3RhdGUgIT0gSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKSkKKyAgeworICAgIHJldHVybiBIQUxfRVJST1I7CisgIH0KKworICAvKiBTZXQgdGhlIFRJTSBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBPdXRwdXRDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisgIFRJTV9DSEFOTkVMX1NUQVRFX1NFVChodGltLCBpbnB1dF9jaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfQlVTWSk7CisKKyAgLyogRW5hYmxlIHRoZSBjb21wbGVtZW50YXJ5IE9uZSBQdWxzZSBvdXRwdXQgY2hhbm5lbCBhbmQgdGhlIElucHV0IENhcHR1cmUgY2hhbm5lbCAqLwogICBUSU1fQ0N4TkNoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIE91dHB1dENoYW5uZWwsIFRJTV9DQ3hOX0VOQUJMRSk7CisgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBpbnB1dF9jaGFubmVsLCBUSU1fQ0N4X0VOQUJMRSk7CiAKICAgLyogRW5hYmxlIHRoZSBNYWluIE91dHB1dCAqLwogICBfX0hBTF9USU1fTU9FX0VOQUJMRShodGltKTsKQEAgLTEzMzcsMTIgKzE0ODksMTQgQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PbmVQdWxzZU5fU3RvcChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgdWludDMyX3QgaW5wdXRfY2hhbm5lbCA9IChPdXRwdXRDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpID8gVElNX0NIQU5ORUxfMiA6IFRJTV9DSEFOTkVMXzE7CiAKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBPdXRwdXRDaGFubmVsKSk7CiAKLSAgLyogRGlzYWJsZSB0aGUgY29tcGxlbWVudGFyeSBPbmUgUHVsc2Ugb3V0cHV0ICovCisgIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCBjaGFubmVsIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCwgVElNX0NDeE5fRElTQUJMRSk7CisgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBpbnB1dF9jaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOwogCiAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCiAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKQEAgLTEzNTAsNiArMTUwNCwxMCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNICBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBPdXRwdXRDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgaW5wdXRfY2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0xMzY2LDE3ICsxNTI0LDMzIEBACiAgICovCiBIQUxfU3RhdHVzVHlwZURlZiBIQUxfVElNRXhfT25lUHVsc2VOX1N0YXJ0X0lUKFRJTV9IYW5kbGVUeXBlRGVmICpodGltLCB1aW50MzJfdCBPdXRwdXRDaGFubmVsKQogeworICB1aW50MzJfdCBpbnB1dF9jaGFubmVsID0gKE91dHB1dENoYW5uZWwgPT0gVElNX0NIQU5ORUxfMSkgPyBUSU1fQ0hBTk5FTF8yIDogVElNX0NIQU5ORUxfMTsKKyAgSEFMX1RJTV9DaGFubmVsU3RhdGVUeXBlRGVmIGlucHV0X2NoYW5uZWxfc3RhdGUgPSBUSU1fQ0hBTk5FTF9TVEFURV9HRVQoaHRpbSwgaW5wdXRfY2hhbm5lbCk7CisgIEhBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBvdXRwdXRfY2hhbm5lbF9zdGF0ZSA9IFRJTV9DSEFOTkVMX05fU1RBVEVfR0VUKGh0aW0sIE91dHB1dENoYW5uZWwpOworCiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCkpOwogCisgIC8qIENoZWNrIHRoZSBUSU0gY2hhbm5lbHMgc3RhdGUgKi8KKyAgaWYgKChvdXRwdXRfY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpCisgICB8fCAoaW5wdXRfY2hhbm5lbF9zdGF0ZSAhPSBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpKQorICB7CisgICAgcmV0dXJuIEhBTF9FUlJPUjsKKyAgfQorCisgIC8qIFNldCB0aGUgVElNIGNoYW5uZWxzIHN0YXRlICovCisgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIE91dHB1dENoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKyAgVElNX0NIQU5ORUxfU1RBVEVfU0VUKGh0aW0sIGlucHV0X2NoYW5uZWwsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9CVVNZKTsKKwogICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMSBpbnRlcnJ1cHQgKi8KICAgX19IQUxfVElNX0VOQUJMRV9JVChodGltLCBUSU1fSVRfQ0MxKTsKIAogICAvKiBFbmFibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMiBpbnRlcnJ1cHQgKi8KICAgX19IQUxfVElNX0VOQUJMRV9JVChodGltLCBUSU1fSVRfQ0MyKTsKIAotICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCAqLworICAvKiBFbmFibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCBjaGFubmVsIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCwgVElNX0NDeE5fRU5BQkxFKTsKKyAgVElNX0NDeENoYW5uZWxDbWQoaHRpbS0+SW5zdGFuY2UsIGlucHV0X2NoYW5uZWwsIFRJTV9DQ3hfRU5BQkxFKTsKIAogICAvKiBFbmFibGUgdGhlIE1haW4gT3V0cHV0ICovCiAgIF9fSEFMX1RJTV9NT0VfRU5BQkxFKGh0aW0pOwpAQCAtMTM5Nyw2ICsxNTcxLDggQEAKICAgKi8KIEhBTF9TdGF0dXNUeXBlRGVmIEhBTF9USU1FeF9PbmVQdWxzZU5fU3RvcF9JVChUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgdWludDMyX3QgT3V0cHV0Q2hhbm5lbCkKIHsKKyAgdWludDMyX3QgaW5wdXRfY2hhbm5lbCA9IChPdXRwdXRDaGFubmVsID09IFRJTV9DSEFOTkVMXzEpID8gVElNX0NIQU5ORUxfMiA6IFRJTV9DSEFOTkVMXzE7CisKICAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KICAgYXNzZXJ0X3BhcmFtKElTX1RJTV9DQ1hOX0lOU1RBTkNFKGh0aW0tPkluc3RhbmNlLCBPdXRwdXRDaGFubmVsKSk7CiAKQEAgLTE0MDYsOCArMTU4Miw5IEBACiAgIC8qIERpc2FibGUgdGhlIFRJTSBDYXB0dXJlL0NvbXBhcmUgMiBpbnRlcnJ1cHQgKi8KICAgX19IQUxfVElNX0RJU0FCTEVfSVQoaHRpbSwgVElNX0lUX0NDMik7CiAKLSAgLyogRGlzYWJsZSB0aGUgY29tcGxlbWVudGFyeSBPbmUgUHVsc2Ugb3V0cHV0ICovCisgIC8qIERpc2FibGUgdGhlIGNvbXBsZW1lbnRhcnkgT25lIFB1bHNlIG91dHB1dCBjaGFubmVsIGFuZCB0aGUgSW5wdXQgQ2FwdHVyZSBjaGFubmVsICovCiAgIFRJTV9DQ3hOQ2hhbm5lbENtZChodGltLT5JbnN0YW5jZSwgT3V0cHV0Q2hhbm5lbCwgVElNX0NDeE5fRElTQUJMRSk7CisgIFRJTV9DQ3hDaGFubmVsQ21kKGh0aW0tPkluc3RhbmNlLCBpbnB1dF9jaGFubmVsLCBUSU1fQ0N4X0RJU0FCTEUpOwogCiAgIC8qIERpc2FibGUgdGhlIE1haW4gT3V0cHV0ICovCiAgIF9fSEFMX1RJTV9NT0VfRElTQUJMRShodGltKTsKQEAgLTE0MTUsNiArMTU5MiwxMCBAQAogICAvKiBEaXNhYmxlIHRoZSBQZXJpcGhlcmFsICovCiAgIF9fSEFMX1RJTV9ESVNBQkxFKGh0aW0pOwogCisgIC8qIFNldCB0aGUgVElNICBjaGFubmVscyBzdGF0ZSAqLworICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBPdXRwdXRDaGFubmVsLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICBUSU1fQ0hBTk5FTF9TVEFURV9TRVQoaHRpbSwgaW5wdXRfY2hhbm5lbCwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKwogICAvKiBSZXR1cm4gZnVuY3Rpb24gc3RhdHVzICovCiAgIHJldHVybiBIQUxfT0s7CiB9CkBAIC0yMjMzLDYgKzI0MTQsMjcgQEAKIH0KIAogLyoqCisgICogQGJyaWVmICBSZXR1cm4gYWN0dWFsIHN0YXRlIG9mIHRoZSBUSU0gY29tcGxlbWVudGFyeSBjaGFubmVsLgorICAqIEBwYXJhbSAgaHRpbSBUSU0gaGFuZGxlCisgICogQHBhcmFtICBDaGFubmVsTiBUSU0gQ29tcGxlbWVudGFyeSBjaGFubmVsCisgICogICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiAgICAgICAgICAgIEBhcmcgVElNX0NIQU5ORUxfMTogVElNIENoYW5uZWwgMQorICAqICAgICAgICAgICAgQGFyZyBUSU1fQ0hBTk5FTF8yOiBUSU0gQ2hhbm5lbCAyCisgICogICAgICAgICAgICBAYXJnIFRJTV9DSEFOTkVMXzM6IFRJTSBDaGFubmVsIDMKKyAgKiBAcmV0dmFsIFRJTSBDb21wbGVtZW50YXJ5IGNoYW5uZWwgc3RhdGUKKyAgKi8KK0hBTF9USU1fQ2hhbm5lbFN0YXRlVHlwZURlZiBIQUxfVElNRXhfR2V0Q2hhbm5lbE5TdGF0ZShUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSwgIHVpbnQzMl90IENoYW5uZWxOKQoreworICBIQUxfVElNX0NoYW5uZWxTdGF0ZVR5cGVEZWYgY2hhbm5lbF9zdGF0ZTsKKyAgCisgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCisgIGFzc2VydF9wYXJhbShJU19USU1fQ0NYTl9JTlNUQU5DRShodGltLT5JbnN0YW5jZSwgQ2hhbm5lbE4pKTsKKworICBjaGFubmVsX3N0YXRlID0gVElNX0NIQU5ORUxfTl9TVEFURV9HRVQoaHRpbSwgQ2hhbm5lbE4pOworICAgIAorICByZXR1cm4gY2hhbm5lbF9zdGF0ZTsKK30KKy8qKgogICAqIEB9CiAgICovCiAKQEAgLTIyODUsNiArMjQ4NywxMDMgQEAKIAogCiAvKioKKyAgKiBAYnJpZWYgIFRJTSBETUEgRGVsYXkgUHVsc2UgY29tcGxldGUgY2FsbGJhY2sgKGNvbXBsZW1lbnRhcnkgY2hhbm5lbCkuCisgICogQHBhcmFtICBoZG1hIHBvaW50ZXIgdG8gRE1BIGhhbmRsZS4KKyAgKiBAcmV0dmFsIE5vbmUKKyAgKi8KK3N0YXRpYyB2b2lkIFRJTV9ETUFEZWxheVB1bHNlTkNwbHQoRE1BX0hhbmRsZVR5cGVEZWYgKmhkbWEpCit7CisgIFRJTV9IYW5kbGVUeXBlRGVmICpodGltID0gKFRJTV9IYW5kbGVUeXBlRGVmICopKChETUFfSGFuZGxlVHlwZURlZiAqKWhkbWEpLT5QYXJlbnQ7CisKKyAgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMV0pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8xOworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KKyAgfQorICBlbHNlIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzJdKQorICB7CisgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMjsKKyAgICAKKyAgICBpZiAoaGRtYS0+SW5pdC5Nb2RlID09IERNQV9OT1JNQUwpCisgICAgeworICAgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMiwgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisgICAgCisgICAgaWYgKGhkbWEtPkluaXQuTW9kZSA9PSBETUFfTk9STUFMKQorICAgIHsKKyAgICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzMsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgICAgfQorICB9CisgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDNF0pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF80OworICAgIAorICAgIGlmIChoZG1hLT5Jbml0Lk1vZGUgPT0gRE1BX05PUk1BTCkKKyAgICB7CisgICAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF80LCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICAgIH0KKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBub3RoaW5nIHRvIGRvICovCisgIH0KKworI2lmIChVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMSkKKyAgaHRpbS0+UFdNX1B1bHNlRmluaXNoZWRDYWxsYmFjayhodGltKTsKKyNlbHNlCisgIEhBTF9USU1fUFdNX1B1bHNlRmluaXNoZWRDYWxsYmFjayhodGltKTsKKyNlbmRpZiAvKiBVU0VfSEFMX1RJTV9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KKworICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF9DTEVBUkVEOworfQorCisvKioKKyAgKiBAYnJpZWYgIFRJTSBETUEgZXJyb3IgY2FsbGJhY2sgKGNvbXBsZW1lbnRhcnkgY2hhbm5lbCkKKyAgKiBAcGFyYW0gIGhkbWEgcG9pbnRlciB0byBETUEgaGFuZGxlLgorICAqIEByZXR2YWwgTm9uZQorICAqLwordm9pZCBUSU1fRE1BRXJyb3JDQ3hOKERNQV9IYW5kbGVUeXBlRGVmICpoZG1hKQoreworICBUSU1fSGFuZGxlVHlwZURlZiAqaHRpbSA9IChUSU1fSGFuZGxlVHlwZURlZiAqKSgoRE1BX0hhbmRsZVR5cGVEZWYgKiloZG1hKS0+UGFyZW50OworCisgIGlmIChoZG1hID09IGh0aW0tPmhkbWFbVElNX0RNQV9JRF9DQzFdKQorICB7CisgICAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfMTsKKyAgICBUSU1fQ0hBTk5FTF9OX1NUQVRFX1NFVChodGltLCBUSU1fQ0hBTk5FTF8xLCBIQUxfVElNX0NIQU5ORUxfU1RBVEVfUkVBRFkpOworICB9CisgIGVsc2UgaWYgKGhkbWEgPT0gaHRpbS0+aGRtYVtUSU1fRE1BX0lEX0NDMl0pCisgIHsKKyAgICBodGltLT5DaGFubmVsID0gSEFMX1RJTV9BQ1RJVkVfQ0hBTk5FTF8yOworICAgIFRJTV9DSEFOTkVMX05fU1RBVEVfU0VUKGh0aW0sIFRJTV9DSEFOTkVMXzIsIEhBTF9USU1fQ0hBTk5FTF9TVEFURV9SRUFEWSk7CisgIH0KKyAgZWxzZSBpZiAoaGRtYSA9PSBodGltLT5oZG1hW1RJTV9ETUFfSURfQ0MzXSkKKyAgeworICAgIGh0aW0tPkNoYW5uZWwgPSBIQUxfVElNX0FDVElWRV9DSEFOTkVMXzM7CisgICAgVElNX0NIQU5ORUxfTl9TVEFURV9TRVQoaHRpbSwgVElNX0NIQU5ORUxfMywgSEFMX1RJTV9DSEFOTkVMX1NUQVRFX1JFQURZKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBub3RoaW5nIHRvIGRvICovCisgIH0KKyAgCisjaWYgKFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxKQorICBodGltLT5FcnJvckNhbGxiYWNrKGh0aW0pOworI2Vsc2UKKyAgSEFMX1RJTV9FcnJvckNhbGxiYWNrKGh0aW0pOworI2VuZGlmIC8qIFVTRV9IQUxfVElNX1JFR0lTVEVSX0NBTExCQUNLUyAqLworICAKKyAgaHRpbS0+Q2hhbm5lbCA9IEhBTF9USU1fQUNUSVZFX0NIQU5ORUxfQ0xFQVJFRDsKK30KKworLyoqCiAgICogQGJyaWVmICBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBUSU0gQ2FwdHVyZSBDb21wYXJlIENoYW5uZWwgeE4uCiAgICogQHBhcmFtICBUSU14IHRvIHNlbGVjdCB0aGUgVElNIHBlcmlwaGVyYWwKICAgKiBAcGFyYW0gIENoYW5uZWwgc3BlY2lmaWVzIHRoZSBUSU0gQ2hhbm5lbApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfdGltZWJhc2VfcnRjX2FsYXJtX3RlbXBsYXRlLmMgYi9TcmMvc3RtMzJoN3h4X2hhbF90aW1lYmFzZV9ydGNfYWxhcm1fdGVtcGxhdGUuYwppbmRleCAzZTVhYWE5Li42MTIxM2E3IDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF90aW1lYmFzZV9ydGNfYWxhcm1fdGVtcGxhdGUuYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF90aW1lYmFzZV9ydGNfYWxhcm1fdGVtcGxhdGUuYwpAQCAtMjI4LDExICsyMjgsMTEgQEAKIAogICAgICAgaWYgKFRpY2tQcmlvcml0eSA8ICgxVUwgPDwgX19OVklDX1BSSU9fQklUUykpCiAgICAgICB7Ci0gICAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KFJUQ19BbGFybV9JUlFuLCBUaWNrUHJpb3JpdHksIDBVKTsKLSAgICAgICAgSEFMX05WSUNfRW5hYmxlSVJRKFJUQ19BbGFybV9JUlFuKTsKKyAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KFJUQ19BbGFybV9JUlFuLCBUaWNrUHJpb3JpdHksIDBVKTsKKyAgICAgIEhBTF9OVklDX0VuYWJsZUlSUShSVENfQWxhcm1fSVJRbik7CiAKICAgICAgICAgdXdUaWNrUHJpbyA9IFRpY2tQcmlvcml0eTsKLSAgICAgICAgcmV0dXJuIEhBTF9PSzsKKyAgICAgIHJldHVybiBIQUxfT0s7CiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF90aW1lYmFzZV9ydGNfd2FrZXVwX3RlbXBsYXRlLmMgYi9TcmMvc3RtMzJoN3h4X2hhbF90aW1lYmFzZV9ydGNfd2FrZXVwX3RlbXBsYXRlLmMKaW5kZXggZGEzNWY3OC4uZmNhODRlMSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfdGltZWJhc2VfcnRjX3dha2V1cF90ZW1wbGF0ZS5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX3RpbWViYXNlX3J0Y193YWtldXBfdGVtcGxhdGUuYwpAQCAtMjE1LDExICsyMTUsMTEgQEAKICAgICAgIC8qIENvbmZpZ3VyZSB0aGUgSEFMIFRpY2sgSVJRIHByaW9yaXR5ICovCiAgICAgICBpZiAoVGlja1ByaW9yaXR5IDwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSkKICAgICAgIHsKLSAgICAgICAgSEFMX05WSUNfU2V0UHJpb3JpdHkoUlRDX1dLVVBfSVJRbiwgVGlja1ByaW9yaXR5LCAwVSk7Ci0gICAgICAgIEhBTF9OVklDX0VuYWJsZUlSUShSVENfV0tVUF9JUlFuKTsKKyAgICAgIEhBTF9OVklDX1NldFByaW9yaXR5KFJUQ19XS1VQX0lSUW4sIFRpY2tQcmlvcml0eSwgMFUpOworICAgICAgSEFMX05WSUNfRW5hYmxlSVJRKFJUQ19XS1VQX0lSUW4pOwogCiAgICAgICAgIHV3VGlja1ByaW8gPSBUaWNrUHJpb3JpdHk7Ci0gICAgICAgIHJldHVybiBIQUxfT0s7CisgICAgICByZXR1cm4gSEFMX09LOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgewpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfdGltZWJhc2VfdGltX3RlbXBsYXRlLmMgYi9TcmMvc3RtMzJoN3h4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYwppbmRleCA5ZTQyNGQ1Li41YWM4MGEyIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF90aW1lYmFzZV90aW1fdGVtcGxhdGUuYwpAQCAtNjUsMTAgKzY1LDEwIEBACiAgICAgLypDb25maWd1cmUgdGhlIFRJTTYgSVJRIHByaW9yaXR5ICovCiAgIGlmIChUaWNrUHJpb3JpdHkgPCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpKQogICB7Ci0gICAgSEFMX05WSUNfU2V0UHJpb3JpdHkoVElNNl9EQUNfSVJRbiwgVGlja1ByaW9yaXR5ICwwVSk7CisgIEhBTF9OVklDX1NldFByaW9yaXR5KFRJTTZfREFDX0lSUW4sIFRpY2tQcmlvcml0eSAsMFUpOwogCi0gICAgLyogRW5hYmxlIHRoZSBUSU02IGdsb2JhbCBJbnRlcnJ1cHQgKi8KLSAgICBIQUxfTlZJQ19FbmFibGVJUlEoVElNNl9EQUNfSVJRbik7CisgIC8qIEVuYWJsZSB0aGUgVElNNiBnbG9iYWwgSW50ZXJydXB0ICovCisgIEhBTF9OVklDX0VuYWJsZUlSUShUSU02X0RBQ19JUlFuKTsKICAgICB1d1RpY2tQcmlvID0gVGlja1ByaW9yaXR5OwogICB9CiAgIGVsc2UKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3VhcnQuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3VhcnQuYwppbmRleCAyZTBhNGM2Li4wODEwMTIwIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF91YXJ0LmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfdWFydC5jCkBAIC0xOTEsNiArMTkxLDggQEAKIAogLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitjb25zdCB1aW50MTZfdCBVQVJUUHJlc2NUYWJsZVsxMl0gPSB7MVUsIDJVLCA0VSwgNlUsIDhVLCAxMFUsIDEyVSwgMTZVLCAzMlUsIDY0VSwgMTI4VSwgMjU2VX07CisKIC8qIFByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiogQGFkZHRvZ3JvdXAgVUFSVF9Qcml2YXRlX0Z1bmN0aW9ucwogICAqIEB7CkBAIC0xMDY1LDYgKzEwNjcsOCBAQAogICAgICAgcGRhdGExNmJpdHMgPSBOVUxMOwogICAgIH0KIAorICAgIF9fSEFMX1VOTE9DSyhodWFydCk7CisKICAgICB3aGlsZSAoaHVhcnQtPlR4WGZlckNvdW50ID4gMFUpCiAgICAgewogICAgICAgaWYgKFVBUlRfV2FpdE9uRmxhZ1VudGlsVGltZW91dChodWFydCwgVUFSVF9GTEFHX1RYRSwgUkVTRVQsIHRpY2tzdGFydCwgVGltZW91dCkgIT0gSEFMX09LKQpAQCAtMTA5Miw4ICsxMDk2LDYgQEAKICAgICAvKiBBdCBlbmQgb2YgVHggcHJvY2VzcywgcmVzdG9yZSBodWFydC0+Z1N0YXRlIHRvIFJlYWR5ICovCiAgICAgaHVhcnQtPmdTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOwogCi0gICAgX19IQUxfVU5MT0NLKGh1YXJ0KTsKLQogICAgIHJldHVybiBIQUxfT0s7CiAgIH0KICAgZWxzZQpAQCAtMTE1OSw2ICsxMTYxLDggQEAKICAgICAgIHBkYXRhMTZiaXRzID0gTlVMTDsKICAgICB9CiAKKyAgICBfX0hBTF9VTkxPQ0soaHVhcnQpOworCiAgICAgLyogYXMgbG9uZyBhcyBkYXRhIGhhdmUgdG8gYmUgcmVjZWl2ZWQgKi8KICAgICB3aGlsZSAoaHVhcnQtPlJ4WGZlckNvdW50ID4gMFUpCiAgICAgewpAQCAtMTE4Miw4ICsxMTg2LDYgQEAKICAgICAvKiBBdCBlbmQgb2YgUnggcHJvY2VzcywgcmVzdG9yZSBodWFydC0+UnhTdGF0ZSB0byBSZWFkeSAqLwogICAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CiAKLSAgICBfX0hBTF9VTkxPQ0soaHVhcnQpOwotCiAgICAgcmV0dXJuIEhBTF9PSzsKICAgfQogICBlbHNlCkBAIC0yODU3LDkgKzI4NTksOSBAQAogICB1aW50MzJfdCB0bXByZWc7CiAgIHVpbnQxNl90IGJycnRlbXA7CiAgIFVBUlRfQ2xvY2tTb3VyY2VUeXBlRGVmIGNsb2Nrc291cmNlOwotICB1aW50MzJfdCB1c2FydGRpdiAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDBVOworICB1aW50MzJfdCB1c2FydGRpdjsKICAgSEFMX1N0YXR1c1R5cGVEZWYgcmV0ICAgICAgICAgICAgICAgPSBIQUxfT0s7Ci0gIHVpbnQzMl90IGxwdWFydF9rZXJfY2tfcHJlcyAgICAgICAgID0gMHgwMDAwMDAwMFU7CisgIHVpbnQzMl90IGxwdWFydF9rZXJfY2tfcHJlczsKICAgUExMMl9DbG9ja3NUeXBlRGVmIHBsbDJfY2xvY2tzOwogICBQTEwzX0Nsb2Nrc1R5cGVEZWYgcGxsM19jbG9ja3M7CiAgIHVpbnQzMl90IHBjbGs7CkBAIC0yOTI4LDQxICsyOTMwLDQ1IEBACiAgICAgc3dpdGNoIChjbG9ja3NvdXJjZSkKICAgICB7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfRDNQQ0xLMToKLSAgICAgICAgbHB1YXJ0X2tlcl9ja19wcmVzID0gKEhBTF9SQ0NFeF9HZXREM1BDTEsxRnJlcSgpIC8gVUFSVF9HRVRfRElWX0ZBQ1RPUihodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOworICAgICAgICBwY2xrID0gSEFMX1JDQ0V4X0dldEQzUENMSzFGcmVxKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX1BMTDI6CiAgICAgICAgIEhBTF9SQ0NFeF9HZXRQTEwyQ2xvY2tGcmVxKCZwbGwyX2Nsb2Nrcyk7Ci0gICAgICAgIGxwdWFydF9rZXJfY2tfcHJlcyA9IChwbGwyX2Nsb2Nrcy5QTEwyX1FfRnJlcXVlbmN5IC8gVUFSVF9HRVRfRElWX0ZBQ1RPUihodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOworICAgICAgICBwY2xrID0gcGxsMl9jbG9ja3MuUExMMl9RX0ZyZXF1ZW5jeTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfUExMMzoKICAgICAgICAgSEFMX1JDQ0V4X0dldFBMTDNDbG9ja0ZyZXEoJnBsbDNfY2xvY2tzKTsKLSAgICAgICAgbHB1YXJ0X2tlcl9ja19wcmVzID0gKHBsbDNfY2xvY2tzLlBMTDNfUV9GcmVxdWVuY3kgLyBVQVJUX0dFVF9ESVZfRkFDVE9SKGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgIHBjbGsgPSBwbGwzX2Nsb2Nrcy5QTEwzX1FfRnJlcXVlbmN5OwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9IU0k6CiAgICAgICAgIGlmIChfX0hBTF9SQ0NfR0VUX0ZMQUcoUkNDX0ZMQUdfSFNJRElWKSAhPSAwVSkKICAgICAgICAgewotICAgICAgICAgIGxwdWFydF9rZXJfY2tfcHJlcyA9ICgodWludDMyX3QpKEhTSV9WQUxVRSA+PiAoX19IQUxfUkNDX0dFVF9IU0lfRElWSURFUigpID4+IDNVKSkgLyBVQVJUX0dFVF9ESVZfRkFDVE9SKGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgICAgcGNsayA9ICh1aW50MzJfdCkoSFNJX1ZBTFVFID4+IChfX0hBTF9SQ0NfR0VUX0hTSV9ESVZJREVSKCkgPj4gM1UpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICBscHVhcnRfa2VyX2NrX3ByZXMgPSAoKHVpbnQzMl90KSBIU0lfVkFMVUUgLyBVQVJUX0dFVF9ESVZfRkFDVE9SKGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgICAgcGNsayA9ICh1aW50MzJfdCkgSFNJX1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0NTSToKLSAgICAgICAgbHB1YXJ0X2tlcl9ja19wcmVzID0gKCh1aW50MzJfdClDU0lfVkFMVUUgLyBVQVJUX0dFVF9ESVZfRkFDVE9SKGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgIHBjbGsgPSAodWludDMyX3QpIENTSV9WQUxVRTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfTFNFOgotICAgICAgICBscHVhcnRfa2VyX2NrX3ByZXMgPSAoKHVpbnQzMl90KUxTRV9WQUxVRSAvIFVBUlRfR0VUX0RJVl9GQUNUT1IoaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKKyAgICAgICAgcGNsayA9ICh1aW50MzJfdCkgTFNFX1ZBTFVFOwogICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHBjbGsgPSAwVTsKICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICAvKiBpZiBwcm9wZXIgY2xvY2sgc291cmNlIHJlcG9ydGVkICovCi0gICAgaWYgKGxwdWFydF9rZXJfY2tfcHJlcyAhPSAwVSkKKyAgICAvKiBJZiBwcm9wZXIgY2xvY2sgc291cmNlIHJlcG9ydGVkICovCisgICAgaWYgKHBjbGsgIT0gMFUpCiAgICAgewotICAgICAgLyogZW5zdXJlIHRoYXQgRnJlcXVlbmN5IGNsb2NrIGlzIGluIHRoZSByYW5nZSBbMyAqIGJhdWRyYXRlLCA0MDk2ICogYmF1ZHJhdGVdICovCisgICAgICAvKiBDb21wdXRlIGNsb2NrIGFmdGVyIFByZXNjYWxlciAqLworICAgICAgbHB1YXJ0X2tlcl9ja19wcmVzID0gKHBjbGsgLyBVQVJUUHJlc2NUYWJsZVtodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcl0pOworCisgICAgICAvKiBFbnN1cmUgdGhhdCBGcmVxdWVuY3kgY2xvY2sgaXMgaW4gdGhlIHJhbmdlIFszICogYmF1ZHJhdGUsIDQwOTYgKiBiYXVkcmF0ZV0gKi8KICAgICAgIGlmICgobHB1YXJ0X2tlcl9ja19wcmVzIDwgKDNVICogaHVhcnQtPkluaXQuQmF1ZFJhdGUpKSB8fAogICAgICAgICAgIChscHVhcnRfa2VyX2NrX3ByZXMgPiAoNDA5NlUgKiBodWFydC0+SW5pdC5CYXVkUmF0ZSkpKQogICAgICAgewpAQCAtMjk3MCw0MiArMjk3Niw5IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIHN3aXRjaCAoY2xvY2tzb3VyY2UpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfRDNQQ0xLMToKLSAgICAgICAgICAgIHBjbGsgPSBIQUxfUkNDRXhfR2V0RDNQQ0xLMUZyZXEoKTsKLSAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfUExMMjoKLSAgICAgICAgICAgIEhBTF9SQ0NFeF9HZXRQTEwyQ2xvY2tGcmVxKCZwbGwyX2Nsb2Nrcyk7Ci0gICAgICAgICAgICB1c2FydGRpdiA9ICh1aW50MzJfdCkoVUFSVF9ESVZfTFBVQVJUKHBsbDJfY2xvY2tzLlBMTDJfUV9GcmVxdWVuY3ksIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX1BMTDM6Ci0gICAgICAgICAgICBIQUxfUkNDRXhfR2V0UExMM0Nsb2NrRnJlcSgmcGxsM19jbG9ja3MpOwotICAgICAgICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVBUlRfRElWX0xQVUFSVChwbGwzX2Nsb2Nrcy5QTEwzX1FfRnJlcXVlbmN5LCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9IU0k6Ci0gICAgICAgICAgICBpZiAoX19IQUxfUkNDX0dFVF9GTEFHKFJDQ19GTEFHX0hTSURJVikgIT0gMFUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQoKHVpbnQzMl90KShIU0lfVkFMVUUgPj4gKF9fSEFMX1JDQ19HRVRfSFNJX0RJVklERVIoKSA+PiAzVSkpLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgdXNhcnRkaXYgPSAodWludDMyX3QpKFVBUlRfRElWX0xQVUFSVChIU0lfVkFMVUUsIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0NTSToKLSAgICAgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQoQ1NJX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9MU0U6Ci0gICAgICAgICAgICB1c2FydGRpdiA9ICh1aW50MzJfdCkoVUFSVF9ESVZfTFBVQVJUKExTRV9WQUxVRSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBJdCBpcyBmb3JiaWRkZW4gdG8gd3JpdGUgdmFsdWVzIGxvd2VyIHRoYW4gMHgzMDAgaW4gdGhlIExQVUFSVF9CUlIgcmVnaXN0ZXIgKi8KKyAgICAgICAgLyogQ2hlY2sgY29tcHV0ZWQgVXNhcnREaXYgdmFsdWUgaXMgaW4gYWxsb2NhdGVkIHJhbmdlCisgICAgICAgICAgIChpdCBpcyBmb3JiaWRkZW4gdG8gd3JpdGUgdmFsdWVzIGxvd2VyIHRoYW4gMHgzMDAgaW4gdGhlIExQVUFSVF9CUlIgcmVnaXN0ZXIpICovCisgICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQzMl90KShVQVJUX0RJVl9MUFVBUlQocGNsaywgKHVpbnQ2NF90KWh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwogICAgICAgICBpZiAoKHVzYXJ0ZGl2ID49IExQVUFSVF9CUlJfTUlOKSAmJiAodXNhcnRkaXYgPD0gTFBVQVJUX0JSUl9NQVgpKQogICAgICAgICB7CiAgICAgICAgICAgaHVhcnQtPkluc3RhbmNlLT5CUlIgPSB1c2FydGRpdjsKQEAgLTMwMTQsOCArMjk4Nyw4IEBACiAgICAgICAgIHsKICAgICAgICAgICByZXQgPSBIQUxfRVJST1I7CiAgICAgICAgIH0KLSAgICAgIH0gLyogICBpZiAoIChscHVhcnRfa2VyX2NrX3ByZXMgPCAoMyAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSApIHx8IChscHVhcnRfa2VyX2NrX3ByZXMgPiAoNDA5NiAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSApKSAqLwotICAgIH0gLyogaWYgKGxwdWFydF9rZXJfY2tfcHJlcyAhPSAwKSAqLworICAgICAgfSAvKiBpZiAoIChscHVhcnRfa2VyX2NrX3ByZXMgPCAoMyAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSApIHx8IChscHVhcnRfa2VyX2NrX3ByZXMgPiAoNDA5NiAqIGh1YXJ0LT5Jbml0LkJhdWRSYXRlKSApKSAqLworICAgIH0gLyogaWYgKHBjbGsgIT0gMCkgKi8KICAgfQogICAvKiBDaGVjayBVQVJUIE92ZXIgU2FtcGxpbmcgdG8gc2V0IEJhdWQgUmF0ZSBSZWdpc3RlciAqLwogICBlbHNlIGlmIChodWFydC0+SW5pdC5PdmVyU2FtcGxpbmcgPT0gVUFSVF9PVkVSU0FNUExJTkdfOCkKQEAgLTMwMjQsNTEgKzI5OTcsNTQgQEAKICAgICB7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfRDJQQ0xLMToKICAgICAgICAgcGNsayA9IEhBTF9SQ0NfR2V0UENMSzFGcmVxKCk7Ci0gICAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0QyUENMSzI6CiAgICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOwotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkc4KHBjbGssIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9QTEwyOgogICAgICAgICBIQUxfUkNDRXhfR2V0UExMMkNsb2NrRnJlcSgmcGxsMl9jbG9ja3MpOwotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkc4KHBsbDJfY2xvY2tzLlBMTDJfUV9GcmVxdWVuY3ksIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOworICAgICAgICBwY2xrID0gcGxsMl9jbG9ja3MuUExMMl9RX0ZyZXF1ZW5jeTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfUExMMzoKICAgICAgICAgSEFMX1JDQ0V4X0dldFBMTDNDbG9ja0ZyZXEoJnBsbDNfY2xvY2tzKTsKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOChwbGwzX2Nsb2Nrcy5QTEwzX1FfRnJlcXVlbmN5LCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKKyAgICAgICAgcGNsayA9IHBsbDNfY2xvY2tzLlBMTDNfUV9GcmVxdWVuY3k7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0hTSToKICAgICAgICAgaWYgKF9fSEFMX1JDQ19HRVRfRkxBRyhSQ0NfRkxBR19IU0lESVYpICE9IDBVKQogICAgICAgICB7Ci0gICAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOCgoSFNJX1ZBTFVFID4+IChfX0hBTF9SQ0NfR0VUX0hTSV9ESVZJREVSKCkgPj4gM1UpKSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgICAgcGNsayA9ICh1aW50MzJfdCkoSFNJX1ZBTFVFID4+IChfX0hBTF9SQ0NfR0VUX0hTSV9ESVZJREVSKCkgPj4gM1UpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkc4KEhTSV9WQUxVRSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgICAgcGNsayA9ICh1aW50MzJfdCkgSFNJX1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0NTSToKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOChDU0lfVkFMVUUsIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOworICAgICAgICBwY2xrID0gKHVpbnQzMl90KSBDU0lfVkFMVUU7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0xTRToKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HOCgodWludDMyX3QpTFNFX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKKyAgICAgICAgcGNsayA9ICh1aW50MzJfdCkgTFNFX1ZBTFVFOwogICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CisgICAgICAgIHBjbGsgPSAwVTsKICAgICAgICAgcmV0ID0gSEFMX0VSUk9SOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICAvKiBVU0FSVERJViBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwZDE2ICovCi0gICAgaWYgKCh1c2FydGRpdiA+PSBVQVJUX0JSUl9NSU4pICYmICh1c2FydGRpdiA8PSBVQVJUX0JSUl9NQVgpKQorICAgIGlmIChwY2xrICE9IDBVKQogICAgIHsKLSAgICAgIGJycnRlbXAgPSAodWludDE2X3QpKHVzYXJ0ZGl2ICYgMHhGRkYwVSk7Ci0gICAgICBicnJ0ZW1wIHw9ICh1aW50MTZfdCkoKHVzYXJ0ZGl2ICYgKHVpbnQxNl90KTB4MDAwRlUpID4+IDFVKTsKLSAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gYnJydGVtcDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIHJldCA9IEhBTF9FUlJPUjsKKyAgICAgIHVzYXJ0ZGl2ID0gKHVpbnQxNl90KShVQVJUX0RJVl9TQU1QTElORzgocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICBpZiAoKHVzYXJ0ZGl2ID49IFVBUlRfQlJSX01JTikgJiYgKHVzYXJ0ZGl2IDw9IFVBUlRfQlJSX01BWCkpCisgICAgICB7CisgICAgICAgIGJycnRlbXAgPSAodWludDE2X3QpKHVzYXJ0ZGl2ICYgMHhGRkYwVSk7CisgICAgICAgIGJycnRlbXAgfD0gKHVpbnQxNl90KSgodXNhcnRkaXYgJiAodWludDE2X3QpMHgwMDBGVSkgPj4gMVUpOworICAgICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IGJycnRlbXA7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJldCA9IEhBTF9FUlJPUjsKKyAgICAgIH0KICAgICB9CiAgIH0KICAgZWxzZQpAQCAtMzA3Nyw0OSArMzA1Myw1MiBAQAogICAgIHsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9EMlBDTEsxOgogICAgICAgICBwY2xrID0gSEFMX1JDQ19HZXRQQ0xLMUZyZXEoKTsKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0QyUENMSzI6CiAgICAgICAgIHBjbGsgPSBIQUxfUkNDX0dldFBDTEsyRnJlcSgpOwotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkcxNihwY2xrLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfUExMMjoKICAgICAgICAgSEFMX1JDQ0V4X0dldFBMTDJDbG9ja0ZyZXEoJnBsbDJfY2xvY2tzKTsKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYocGxsMl9jbG9ja3MuUExMMl9RX0ZyZXF1ZW5jeSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgIHBjbGsgPSBwbGwyX2Nsb2Nrcy5QTEwyX1FfRnJlcXVlbmN5OwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgVUFSVF9DTE9DS1NPVVJDRV9QTEwzOgogICAgICAgICBIQUxfUkNDRXhfR2V0UExMM0Nsb2NrRnJlcSgmcGxsM19jbG9ja3MpOwotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkcxNihwbGwzX2Nsb2Nrcy5QTEwzX1FfRnJlcXVlbmN5LCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKKyAgICAgICAgcGNsayA9IHBsbDNfY2xvY2tzLlBMTDNfUV9GcmVxdWVuY3k7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0hTSToKICAgICAgICAgaWYgKF9fSEFMX1JDQ19HRVRfRkxBRyhSQ0NfRkxBR19IU0lESVYpICE9IDBVKQogICAgICAgICB7Ci0gICAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYoKEhTSV9WQUxVRSA+PiAoX19IQUxfUkNDX0dFVF9IU0lfRElWSURFUigpID4+IDNVKSksIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOworICAgICAgICAgIHBjbGsgPSAodWludDMyX3QpKEhTSV9WQUxVRSA+PiAoX19IQUxfUkNDX0dFVF9IU0lfRElWSURFUigpID4+IDNVKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYoSFNJX1ZBTFVFLCBodWFydC0+SW5pdC5CYXVkUmF0ZSwgaHVhcnQtPkluaXQuQ2xvY2tQcmVzY2FsZXIpKTsKKyAgICAgICAgICBwY2xrID0gKHVpbnQzMl90KSBIU0lfVkFMVUU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIFVBUlRfQ0xPQ0tTT1VSQ0VfQ1NJOgotICAgICAgICB1c2FydGRpdiA9ICh1aW50MTZfdCkoVUFSVF9ESVZfU0FNUExJTkcxNihDU0lfVkFMVUUsIGh1YXJ0LT5Jbml0LkJhdWRSYXRlLCBodWFydC0+SW5pdC5DbG9ja1ByZXNjYWxlcikpOworICAgICAgICBwY2xrID0gKHVpbnQzMl90KSBDU0lfVkFMVUU7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBVQVJUX0NMT0NLU09VUkNFX0xTRToKLSAgICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYoKHVpbnQzMl90KUxTRV9WQUxVRSwgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICAgIHBjbGsgPSAodWludDMyX3QpIExTRV9WQUxVRTsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgorICAgICAgICBwY2xrID0gMFU7CiAgICAgICAgIHJldCA9IEhBTF9FUlJPUjsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgLyogVVNBUlRESVYgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMGQxNiAqLwotICAgIGlmICgodXNhcnRkaXYgPj0gVUFSVF9CUlJfTUlOKSAmJiAodXNhcnRkaXYgPD0gVUFSVF9CUlJfTUFYKSkKKyAgICBpZiAocGNsayAhPSAwVSkKICAgICB7Ci0gICAgICBodWFydC0+SW5zdGFuY2UtPkJSUiA9IHVzYXJ0ZGl2OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0ID0gSEFMX0VSUk9SOworICAgICAgLyogVVNBUlRESVYgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMGQxNiAqLworICAgICAgdXNhcnRkaXYgPSAodWludDE2X3QpKFVBUlRfRElWX1NBTVBMSU5HMTYocGNsaywgaHVhcnQtPkluaXQuQmF1ZFJhdGUsIGh1YXJ0LT5Jbml0LkNsb2NrUHJlc2NhbGVyKSk7CisgICAgICBpZiAoKHVzYXJ0ZGl2ID49IFVBUlRfQlJSX01JTikgJiYgKHVzYXJ0ZGl2IDw9IFVBUlRfQlJSX01BWCkpCisgICAgICB7CisgICAgICAgIGh1YXJ0LT5JbnN0YW5jZS0+QlJSID0gdXNhcnRkaXY7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIHJldCA9IEhBTF9FUlJPUjsKKyAgICAgIH0KICAgICB9CiAgIH0KIApAQCAtMzI5Miw3ICszMjcxLDcgQEAKICAgICAgICAgewogICAgICAgICAgIC8qIENsZWFyIFJlY2VpdmVyIFRpbWVvdXQgZmxhZyovCiAgICAgICAgICAgX19IQUxfVUFSVF9DTEVBUl9GTEFHKGh1YXJ0LCBVQVJUX0NMRUFSX1JUT0YpOwotICAgICAgICAgIAorCiAgICAgICAgICAgLyogRGlzYWJsZSBUWEUsIFJYTkUsIFBFIGFuZCBFUlIgKEZyYW1lIGVycm9yLCBub2lzZSBlcnJvciwgb3ZlcnJ1biBlcnJvcikgaW50ZXJydXB0cyBmb3IgdGhlIGludGVycnVwdCBwcm9jZXNzICovCiAgICAgICAgICAgQ0xFQVJfQklUKGh1YXJ0LT5JbnN0YW5jZS0+Q1IxLCAoVVNBUlRfQ1IxX1JYTkVJRV9SWEZORUlFIHwgVVNBUlRfQ1IxX1BFSUUgfCBVU0FSVF9DUjFfVFhFSUVfVFhGTkZJRSkpOwogICAgICAgICAgIENMRUFSX0JJVChodWFydC0+SW5zdGFuY2UtPkNSMywgVVNBUlRfQ1IzX0VJRSk7CkBAIC0zMzAwLDEwICszMjc5LDEwIEBACiAgICAgICAgICAgaHVhcnQtPmdTdGF0ZSA9IEhBTF9VQVJUX1NUQVRFX1JFQURZOwogICAgICAgICAgIGh1YXJ0LT5SeFN0YXRlID0gSEFMX1VBUlRfU1RBVEVfUkVBRFk7CiAgICAgICAgICAgaHVhcnQtPkVycm9yQ29kZSA9IEhBTF9VQVJUX0VSUk9SX1JUTzsKLSAgICAgICAgICAKKwogICAgICAgICAgIC8qIFByb2Nlc3MgVW5sb2NrZWQgKi8KICAgICAgICAgICBfX0hBTF9VTkxPQ0soaHVhcnQpOwotICAgICAgICAgIAorCiAgICAgICAgICAgcmV0dXJuIEhBTF9USU1FT1VUOwogICAgICAgICB9CiAgICAgICB9CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2hhbF91YXJ0X2V4LmMgYi9TcmMvc3RtMzJoN3h4X2hhbF91YXJ0X2V4LmMKaW5kZXggZDY2NzMxMC4uM2E4OTlhMSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfdWFydF9leC5jCisrKyBiL1NyYy9zdG0zMmg3eHhfaGFsX3VhcnRfZXguYwpAQCAtNjAsMTAgKzYwLDEwIEBACiAgICogQHsKICAgKi8KIC8qIFVBUlQgUlggRklGTyBkZXB0aCAqLwotI2RlZmluZSBSWF9GSUZPX0RFUFRIIDhVCisjZGVmaW5lIFJYX0ZJRk9fREVQVEggMTZVCiAKIC8qIFVBUlQgVFggRklGTyBkZXB0aCAqLwotI2RlZmluZSBUWF9GSUZPX0RFUFRIIDhVCisjZGVmaW5lIFRYX0ZJRk9fREVQVEggMTZVCiAvKioKICAgKiBAfQogICAqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfdXNhcnQuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3VzYXJ0LmMKaW5kZXggOGY5ZDJiNi4uY2FmNzBhYSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfdXNhcnQuYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF91c2FydC5jCkBAIC0yMTUwLDcgKzIxNTAsNyBAQAogICAgIC8qIFVTQVJUIFJlY2VpdmVyIFRpbWVvdXQgaW50ZXJydXB0IG9jY3VycmVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgaWYgKCgoaXNyZmxhZ3MgJiBVU0FSVF9JU1JfUlRPRikgIT0gMFUpICYmICgoY3IxaXRzICYgVVNBUlRfQ1IxX1JUT0lFKSAhPSAwVSkpCiAgICAgewotICAgICAgX19IQUxfVUFSVF9DTEVBUl9GTEFHKGh1c2FydCwgVUFSVF9DTEVBUl9SVE9GKTsKKyAgICAgIF9fSEFMX1VTQVJUX0NMRUFSX0lUKGh1c2FydCwgVVNBUlRfQ0xFQVJfUlRPRik7CiAKICAgICAgIGh1c2FydC0+RXJyb3JDb2RlIHw9IEhBTF9VU0FSVF9FUlJPUl9SVE87CiAgICAgfQpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9oYWxfdXNhcnRfZXguYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3VzYXJ0X2V4LmMKaW5kZXggZjM4YjAzZC4uYWM1YmFkZSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9oYWxfdXNhcnRfZXguYworKysgYi9TcmMvc3RtMzJoN3h4X2hhbF91c2FydF9leC5jCkBAIC01OCwxMCArNTgsMTAgQEAKICAgKiBAewogICAqLwogLyogVVNBUlQgUlggRklGTyBkZXB0aCAqLwotI2RlZmluZSBSWF9GSUZPX0RFUFRIIDhVCisjZGVmaW5lIFJYX0ZJRk9fREVQVEggMTZVCiAKIC8qIFVTQVJUIFRYIEZJRk8gZGVwdGggKi8KLSNkZWZpbmUgVFhfRklGT19ERVBUSCA4VQorI2RlZmluZSBUWF9GSUZPX0RFUFRIIDE2VQogLyoqCiAgICogQH0KICAgKi8KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfaGFsX3d3ZGcuYyBiL1NyYy9zdG0zMmg3eHhfaGFsX3d3ZGcuYwppbmRleCBkMzdhZjQwLi45NGRiNzQzIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2hhbF93d2RnLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9oYWxfd3dkZy5jCkBAIC0zMSwxMSArMzEsMjEgQEAKICAgICAoKykgV1dERyBDb3VudGVyIHJlZnJlc2ggaXMgYWxsb3dlZCBiZXR3ZWVuIHRoZSBmb2xsb3dpbmcgbGltaXRzIDoKICAgICAgICAgKCsrKSBtaW4gdGltZSAobVMpID0gMTAwMCAqIChDb3VudGVyIC0gV2luZG93KSAvIFdXREcgY2xvY2sKICAgICAgICAgKCsrKSBtYXggdGltZSAobVMpID0gMTAwMCAqIChDb3VudGVyIC0gMHg0MCkgLyBXV0RHIGNsb2NrCi0gICAgKCspIFR5cGljYWwgdmFsdWVzOgotICAgICAgICAoKyspIENvdW50ZXIgbWluIChUWzU7MF0gPSAweDAwKSBANTZNSHogKFBDTEsxKSB3aXRoIHplcm8gcHJlc2NhbGVyOgotICAgICAgICAgICAgIG1heCB0aW1lb3V0IGJlZm9yZSByZXNldDogYXBwcm94aW1hdGVseSA3My4xNLVzCi0gICAgICAgICgrKykgQ291bnRlciBtYXggKFRbNTswXSA9IDB4M0YpIEA1Nk1IeiAoUENMSzEpIHdpdGggcHJlc2NhbGVyIGRpdmlkaW5nIGJ5IDEyODoKLSAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgNTk5LjE4bXMKKyAgICAoKykgVHlwaWNhbCB2YWx1ZXMgKGNhc2Ugb2YgU1RNMzJINzR4LzV4IGRldmljZXMpOgorICAgICAgICAoKyspIENvdW50ZXIgbWluIChUWzU7MF0gPSAweDAwKSBAMTAwTUh6IChQQ0xLMSkgd2l0aCB6ZXJvIHByZXNjYWxlcjoKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgNDAuOTbCtXMKKyAgICAgICAgKCsrKSBDb3VudGVyIG1heCAoVFs1OzBdID0gMHgzRikgQDEwME1IeiAoUENMSzEpIHdpdGggcHJlc2NhbGVyIGRpdmlkaW5nIGJ5IDEyODoKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgMzM1LjU0bXMKKyAgICAoKykgVHlwaWNhbCB2YWx1ZXMgKGNhc2Ugb2YgU1RNMzJIN0F4L0J4IGRldmljZXMpOgorICAgICAgICAoKyspIENvdW50ZXIgbWluIChUWzU7MF0gPSAweDAwKSBAMTQwTUh6IChQQ0xLMSkgd2l0aCB6ZXJvIHByZXNjYWxlcjoKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgMjkuMjXCtXMKKyAgICAgICAgKCsrKSBDb3VudGVyIG1heCAoVFs1OzBdID0gMHgzRikgQDE0ME1IeiAoUENMSzEpIHdpdGggcHJlc2NhbGVyIGRpdmlkaW5nIGJ5IDEyODoKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgMjM5LjY3bXMKKyAgICAoKykgVHlwaWNhbCB2YWx1ZXMgKGNhc2Ugb2YgU1RNMzJINzJ4LzN4IGRldmljZXMpOgorICAgICAgICAoKyspIENvdW50ZXIgbWluIChUWzU7MF0gPSAweDAwKSBAMTI1TUh6IChQQ0xLMSkgd2l0aCB6ZXJvIHByZXNjYWxlcjoKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgMzIuNzbCtXMKKyAgICAgICAgKCsrKSBDb3VudGVyIG1heCAoVFs1OzBdID0gMHgzRikgQDEyNU1IeiAoUENMSzEpIHdpdGggcHJlc2NhbGVyIGRpdmlkaW5nIGJ5IDEyODoKKyAgICAgICAgICAgICBtYXggdGltZW91dCBiZWZvcmUgcmVzZXQ6IGFwcHJveGltYXRlbHkgMjY4LjQzbXMKIAogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICMjIyMjIEhvdyB0byB1c2UgdGhpcyBkcml2ZXIgIyMjIyMKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfbGxfYWRjLmMgYi9TcmMvc3RtMzJoN3h4X2xsX2FkYy5jCmluZGV4IDE1MWM5ZjYuLmRmMDE4ODcgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfbGxfYWRjLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9sbF9hZGMuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAgIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovCiAgIGFzc2VydF9wYXJhbShJU19BRENfQ09NTU9OX0lOU1RBTkNFKEFEQ3h5X0NPTU1PTikpOwogCi0gIGlmKEFEQ3h5X0NPTU1PTiA9PSBBREMxMl9DT01NT04pCisgIGlmIChBREN4eV9DT01NT04gPT0gQURDMTJfQ09NTU9OKQogICB7CiAgICAgLyogRm9yY2UgcmVzZXQgb2YgQURDIGNsb2NrIChjb3JlIGNsb2NrKSAqLwogICAgIExMX0FIQjFfR1JQMV9Gb3JjZVJlc2V0KExMX0FIQjFfR1JQMV9QRVJJUEhfQURDMTIpOwpAQCAtNjA4LDE5ICs2MDgsMTkgQEAKIAogICAgIC8qIFJlc2V0IHJlZ2lzdGVyIENGR1IgKi8KICAgICBDTEVBUl9CSVQoQURDeC0+Q0ZHUiwKLSAgICAgICAgICAgICAgKCAgQURDX0NGR1JfQVdEMUNIICB8IEFEQ19DRkdSX0pBVVRPICAgfCBBRENfQ0ZHUl9KQVdEMUVOCisgICAgICAgICAgICAgIChBRENfQ0ZHUl9BV0QxQ0ggIHwgQURDX0NGR1JfSkFVVE8gICB8IEFEQ19DRkdSX0pBV0QxRU4KICAgICAgICAgICAgICAgIHwgQURDX0NGR1JfQVdEMUVOICB8IEFEQ19DRkdSX0FXRDFTR0wgfCBBRENfQ0ZHUl9KUU0KICAgICAgICAgICAgICAgIHwgQURDX0NGR1JfSkRJU0NFTiB8IEFEQ19DRkdSX0RJU0NOVU0gfCBBRENfQ0ZHUl9ESVNDRU4KICAgICAgICAgICAgICAgIHwgQURDX0NGR1JfQVVURExZICB8IEFEQ19DRkdSX0NPTlQgICAgfCBBRENfQ0ZHUl9PVlJNT0QKICAgICAgICAgICAgICAgIHwgQURDX0NGR1JfRVhURU4gICB8IEFEQ19DRkdSX0VYVFNFTCAgfCBBRENfQ0ZHUl9SRVMKLSAgICAgICAgICAgICAgIHwgQURDX0NGR1JfRE1OR1QgICkKKyAgICAgICAgICAgICAgIHwgQURDX0NGR1JfRE1OR1QpCiAgICAgICAgICAgICAgKTsKIAogICAgIFNFVF9CSVQoQURDeC0+Q0ZHUiwgQURDX0NGR1JfSlFESVMpOwogCiAgICAgLyogUmVzZXQgcmVnaXN0ZXIgQ0ZHUjIgKi8KICAgICBDTEVBUl9CSVQoQURDeC0+Q0ZHUjIsCi0gICAgICAgICAgICAgICggIEFEQ19DRkdSMl9MU0hJRlQgIHwgQURDX0NGR1IyX09WU1IgICAgfCBBRENfQ0ZHUjJfUlNISUZUMQorICAgICAgICAgICAgICAoQURDX0NGR1IyX0xTSElGVCAgfCBBRENfQ0ZHUjJfT1ZTUiAgICB8IEFEQ19DRkdSMl9SU0hJRlQxCiAgICAgICAgICAgICAgICB8IEFEQ19DRkdSMl9SU0hJRlQ0IHwgQURDX0NGR1IyX1JTSElGVDMgfCBBRENfQ0ZHUjJfUlNISUZUMgogICAgICAgICAgICAgICAgfCBBRENfQ0ZHUjJfUlNISUZUMSB8IEFEQ19DRkdSMl9ST1ZTTSAgIHwgQURDX0NGR1IyX1RST1ZTCiAgICAgICAgICAgICAgICB8IEFEQ19DRkdSMl9PVlNTICAgIHwgQURDX0NGR1IyX0pPVlNFIHwgQURDX0NGR1IyX1JPVlNFKQpAQCAtNjQyLDYgKzY0MiwyOSBAQAogICAgICAgICAgICAgICk7CiAKICAgICAvKiBSZXNldCByZWdpc3RlciBUUjEgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICAgIGlmIChBREN4ID09IEFEQzMpCisgICAgeworICAgICAgLyogUmVzZXQgcmVnaXN0ZXIgVFIxICovCisgICAgICBNT0RJRllfUkVHKEFEQ3gtPkxUUjFfVFIxLCBBREMzX1RSMV9BV0RGSUxUIHwgQURDM19UUjFfSFQxIHwgQURDM19UUjFfTFQxLCBBREMzX1RSMV9IVDEpOworCisgICAgICAvKiBSZXNldCByZWdpc3RlciBUUjIgKi8KKyAgICAgIE1PRElGWV9SRUcoQURDeC0+SFRSMV9UUjIsIEFEQzNfVFIyX0hUMiB8IEFEQzNfVFIyX0xUMiwgQURDM19UUjJfSFQyKTsKKworICAgICAgLyogUmVzZXQgcmVnaXN0ZXIgVFIzICovCisgICAgICBNT0RJRllfUkVHKEFEQ3gtPlJFUzFfVFIzLCBBREMzX1RSM19IVDMgfCBBREMzX1RSM19MVDMsIEFEQzNfVFIzX0hUMyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBDTEVBUl9CSVQoQURDeC0+TFRSMV9UUjEsIEFEQ19MVFJfTFQpOworICAgICAgU0VUX0JJVChBREN4LT5IVFIxX1RSMiwgQURDX0hUUl9IVCk7CisKKyAgICAgIENMRUFSX0JJVChBREN4LT5MVFIyX0RJRlNFTCwgQURDX0xUUl9MVCk7CisgICAgICBTRVRfQklUKEFEQ3gtPkhUUjJfQ0FMRkFDVCwgQURDX0hUUl9IVCk7CisgICAgICBDTEVBUl9CSVQoQURDeC0+TFRSM19SRVMxMCwgQURDX0xUUl9MVCk7CisgICAgICBTRVRfQklUKEFEQ3gtPkhUUjNfUkVTMTEsIEFEQ19IVFJfSFQpOworICAgIH0KKyNlbHNlCiAgICAgQ0xFQVJfQklUKEFEQ3gtPkxUUjEsIEFEQ19MVFJfTFQpOwogICAgIFNFVF9CSVQoQURDeC0+SFRSMSwgQURDX0hUUl9IVCk7CiAKQEAgLTY0OSw2ICs2NzIsNyBAQAogICAgIFNFVF9CSVQoQURDeC0+SFRSMiwgQURDX0hUUl9IVCk7CiAgICAgQ0xFQVJfQklUKEFEQ3gtPkxUUjMsIEFEQ19MVFJfTFQpOwogICAgIFNFVF9CSVQoQURDeC0+SFRSMywgQURDX0hUUl9IVCk7CisjZW5kaWYKIAogICAgIC8qIFJlc2V0IHJlZ2lzdGVyIFNRUjEgKi8KICAgICBDTEVBUl9CSVQoQURDeC0+U1FSMSwKQEAgLTcwMSw2ICs3MjUsMjUgQEAKICAgICBDTEVBUl9CSVQoQURDeC0+QVdEM0NSLCBBRENfQVdEM0NSX0FXRDNDSCk7CiAKICAgICAvKiBSZXNldCByZWdpc3RlciBESUZTRUwgKi8KKyNpZiBkZWZpbmVkKEFEQ19WRVJfVjVfVjkwKQorICAgIGlmIChBREN4ID09IEFEQzMpCisgICAgeworICAgICAgQ0xFQVJfQklUKEFEQ3gtPkxUUjJfRElGU0VMLCBBRENfRElGU0VMX0RJRlNFTCk7CisKKyAgICAgIC8qIFJlc2V0IHJlZ2lzdGVyIENBTEZBQ1QgKi8KKyAgICAgIENMRUFSX0JJVChBREN4LT5IVFIyX0NBTEZBQ1QsIEFEQ19DQUxGQUNUX0NBTEZBQ1RfRCB8IEFEQ19DQUxGQUNUX0NBTEZBQ1RfUyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBDTEVBUl9CSVQoQURDeC0+RElGU0VMX1JFUzEyLCBBRENfRElGU0VMX0RJRlNFTCk7CisKKyAgICAgIC8qIFJlc2V0IHJlZ2lzdGVyIENBTEZBQ1QgKi8KKyAgICAgIENMRUFSX0JJVChBREN4LT5DQUxGQUNUX1JFUzEzLCBBRENfQ0FMRkFDVF9DQUxGQUNUX0QgfCBBRENfQ0FMRkFDVF9DQUxGQUNUX1MpOworCisgICAgICAvKiBSZXNldCByZWdpc3RlciBDQUxGQUNUMiAqLworICAgICAgQ0xFQVJfQklUKEFEQ3gtPkNBTEZBQ1QyX1JFUzE0LCBBRENfQ0FMRkFDVDJfTElOQ0FMRkFDVCk7CisgICAgfQorI2Vsc2UKICAgICBDTEVBUl9CSVQoQURDeC0+RElGU0VMLCBBRENfRElGU0VMX0RJRlNFTCk7CiAKICAgICAvKiBSZXNldCByZWdpc3RlciBDQUxGQUNUICovCkBAIC03MDgsNiArNzUxLDcgQEAKIAogICAgIC8qIFJlc2V0IHJlZ2lzdGVyIENBTEZBQ1QyICovCiAgICAgQ0xFQVJfQklUKEFEQ3gtPkNBTEZBQ1QyLCBBRENfQ0FMRkFDVDJfTElOQ0FMRkFDVCk7CisjZW5kaWYKICAgfQogICBlbHNlCiAgIHsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfbGxfY29yZGljLmMgYi9TcmMvc3RtMzJoN3h4X2xsX2NvcmRpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNWIyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9TcmMvc3RtMzJoN3h4X2xsX2NvcmRpYy5jCkBAIC0wLDAgKzEsMTA1IEBACisvKioKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGZpbGUgICAgc3RtMzJoN3h4X2xsX2NvcmRpYy5jCisgICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0KKyAgKiBAYnJpZWYgICBDT1JESUMgTEwgbW9kdWxlIGRyaXZlci4KKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGF0dGVudGlvbgorICAqCisgICogPGgyPjxjZW50ZXI+JmNvcHk7IENvcHlyaWdodCAoYykgMjAxNyBTVE1pY3JvZWxlY3Ryb25pY3MuCisgICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgorICAqCisgICogVGhpcyBzb2Z0d2FyZSBjb21wb25lbnQgaXMgbGljZW5zZWQgYnkgU1QgdW5kZXIgQlNEIDMtQ2xhdXNlIGxpY2Vuc2UsCisgICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQorICAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdDoKKyAgKiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZQorICAqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqLworI2lmIGRlZmluZWQoVVNFX0ZVTExfTExfRFJJVkVSKQorCisvKiBJbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgInN0bTMyaDd4eF9sbF9jb3JkaWMuaCIKKyNpbmNsdWRlICJzdG0zMmg3eHhfbGxfYnVzLmgiCisjaWZkZWYgIFVTRV9GVUxMX0FTU0VSVAorI2luY2x1ZGUgInN0bTMyX2Fzc2VydC5oIgorI2Vsc2UKKyNkZWZpbmUgYXNzZXJ0X3BhcmFtKGV4cHIpICgodm9pZCkwVSkKKyNlbmRpZgorCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJIN3h4X0xMX0RyaXZlcgorICAqIEB7CisgICovCisKKyNpZiBkZWZpbmVkKENPUkRJQykKKworLyoqIEBhZGR0b2dyb3VwIENPUkRJQ19MTAorICAqIEB7CisgICovCisKKy8qIFByaXZhdGUgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBjb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGZ1bmN0aW9uIHByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBFeHBvcnRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqIEBhZGR0b2dyb3VwIENPUkRJQ19MTF9FeHBvcnRlZF9GdW5jdGlvbnMKKyAgKiBAeworICAqLworCisvKiogQGFkZHRvZ3JvdXAgQ09SRElDX0xMX0VGX0luaXQKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIERlLUluaXRpYWxpemUgQ09SRElDIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgcmVzZXQgdmFsdWVzLgorICAqIEBwYXJhbSAgQ09SRElDeCBDT1JESUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOgorICAqICAgICAgICAgIC0gU1VDQ0VTUzogQ09SRElDIHJlZ2lzdGVycyBhcmUgZGUtaW5pdGlhbGl6ZWQKKyAgKiAgICAgICAgICAtIEVSUk9SOiBDT1JESUMgcmVnaXN0ZXJzIGFyZSBub3QgZGUtaW5pdGlhbGl6ZWQKKyAgKi8KK0Vycm9yU3RhdHVzIExMX0NPUkRJQ19EZUluaXQoQ09SRElDX1R5cGVEZWYgKkNPUkRJQ3gpCit7CisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IFNVQ0NFU1M7CisKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0NPUkRJQ19BTExfSU5TVEFOQ0UoQ09SRElDeCkpOworCisgIGlmIChDT1JESUN4ID09IENPUkRJQykKKyAgeworICAgIC8qIEZvcmNlIENPUkRJQyByZXNldCAqLworICAgIExMX0FIQjJfR1JQMV9Gb3JjZVJlc2V0KExMX0FIQjJfR1JQMV9QRVJJUEhfQ09SRElDKTsKKworICAgIC8qIFJlbGVhc2UgQ09SRElDIHJlc2V0ICovCisgICAgTExfQUhCMl9HUlAxX1JlbGVhc2VSZXNldChMTF9BSEIyX0dSUDFfUEVSSVBIX0NPUkRJQyk7CisgIH0KKyAgZWxzZQorICB7CisgICAgc3RhdHVzID0gRVJST1I7CisgIH0KKworICByZXR1cm4gKHN0YXR1cyk7Cit9CisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKy8qKgorICAqIEB9CisgICovCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPUkRJQykgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9sbF9kbWEuYyBiL1NyYy9zdG0zMmg3eHhfbGxfZG1hLmMKaW5kZXggNWQzMDllZS4uOWRiOTFlOSAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9sbF9kbWEuYworKysgYi9TcmMvc3RtMzJoN3h4X2xsX2RtYS5jCkBAIC02OCwxMSArNjgsMTMgQEAKIAogI2RlZmluZSBJU19MTF9ETUFfTkJEQVRBKF9fVkFMVUVfXykgICAgICAgICAgICAgKChfX1ZBTFVFX18pICA8PSAweDAwMDBGRkZGVSkKIAotI2lmIGRlZmluZWQoQURDMykKKyNpZiBkZWZpbmVkKFRJTTI0KQorI2RlZmluZSBJU19MTF9ETUFfUkVRVUVTVChSRVFVRVNUKSAgICAgICAgICAgICAgKCgoUkVRVUVTVCkgICA8PSBMTF9ETUFNVVgxX1JFUV9USU0yNF9UUklHKSkKKyNlbGlmIGRlZmluZWQoQURDMykKICNkZWZpbmUgSVNfTExfRE1BX1JFUVVFU1QoUkVRVUVTVCkgICAgICAgICAgICAgICgoKFJFUVVFU1QpICAgPD0gTExfRE1BTVVYMV9SRVFfQURDMykpCiAjZWxzZQogI2RlZmluZSBJU19MTF9ETUFfUkVRVUVTVChSRVFVRVNUKSAgICAgICAgICAgICAgKCgoUkVRVUVTVCkgICA8PSBMTF9ETUFNVVgxX1JFUV9VU0FSVDEwX1RYKSkKLSNlbmRpZiAvKiBBREMzICovCisjZW5kaWYgLyogVElNMjQgKi8KIAogI2RlZmluZSBJU19MTF9ETUFfUFJJT1JJVFkoX19WQUxVRV9fKSAgICAgICAgICAgKCgoX19WQUxVRV9fKSA9PSBMTF9ETUFfUFJJT1JJVFlfTE9XKSAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX0RNQV9QUklPUklUWV9NRURJVU0pIHx8IFwKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfbGxfZm1hYy5jIGIvU3JjL3N0bTMyaDd4eF9sbF9mbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM3ZDRmNwotLS0gL2Rldi9udWxsCisrKyBiL1NyYy9zdG0zMmg3eHhfbGxfZm1hYy5jCkBAIC0wLDAgKzEsMTY3IEBACisvKioKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogQGZpbGUgICAgc3RtMzJoN3h4X2xsX2ZtYWMuYworICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCisgICogQGJyaWVmICAgRk1BQyBMTCBtb2R1bGUgZHJpdmVyLgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiBAYXR0ZW50aW9uCisgICoKKyAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ29weXJpZ2h0IChjKSAyMDE3IFNUTWljcm9lbGVjdHJvbmljcy4KKyAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLjwvY2VudGVyPjwvaDI+CisgICoKKyAgKiBUaGlzIHNvZnR3YXJlIGNvbXBvbmVudCBpcyBsaWNlbnNlZCBieSBTVCB1bmRlciBCU0QgMy1DbGF1c2UgbGljZW5zZSwKKyAgKiB0aGUgIkxpY2Vuc2UiOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgorICAqICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlCisgICoKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICovCisjaWYgZGVmaW5lZChVU0VfRlVMTF9MTF9EUklWRVIpCisKKy8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaW5jbHVkZSAic3RtMzJoN3h4X2xsX2ZtYWMuaCIKKyNpbmNsdWRlICJzdG0zMmg3eHhfbGxfYnVzLmgiCisjaWZkZWYgVVNFX0ZVTExfQVNTRVJUCisjaW5jbHVkZSAic3RtMzJfYXNzZXJ0LmgiCisjZWxzZQorI2RlZmluZSBhc3NlcnRfcGFyYW0oZXhwcikgKCh2b2lkKTBVKQorI2VuZGlmIC8qIFVTRV9GVUxMX0FTU0VSVCAqLworCisvKiogQGFkZHRvZ3JvdXAgU1RNMzJIN3h4X0xMX0RyaXZlcgorICAqIEB7CisgICovCisKKyNpZiBkZWZpbmVkKEZNQUMpCisKKy8qKiBAYWRkdG9ncm91cCBGTUFDX0xMCisgICogQHsKKyAgKi8KKworLyogUHJpdmF0ZSB0eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcml2YXRlIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAYWRkdG9ncm91cCBGTUFDX0xMX1ByaXZhdGVfTWFjcm9zCisgICogQHsKKyAgKi8KKworLyoqIEBicmllZiAgQ2hlY2sgaWYgdGhlIHdhdGVybWFyayB2YWx1ZSBpcyBhIHZhbGlkIG9uZS4KKyAgKiBAcGFyYW0gIF9fVkFMVUVfXyBXYXRlcm1hayB2YWx1ZS4KKyAgKiBAcmV0dmFsIFNFVCAoX19WQUxVRV9fIGlzIGEgdmFsaWQgdmFsdWUpIG9yIFJFU0VUIChfX1ZBTFVFX18gaXMgaW52YWxpZCkKKyAgKi8KKyNkZWZpbmUgSVNfTExfRk1BQ19XTShfX1ZBTFVFX18pICgoKF9fVkFMVUVfXykgPT0gTExfRk1BQ19XTV8wX1RIUkVTSE9MRF8xKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0ZNQUNfV01fMV9USFJFU0hPTERfMikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9GTUFDX1dNXzJfVEhSRVNIT0xEXzQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfRk1BQ19XTV8zX1RIUkVTSE9MRF84KSkKKworLyoqIEBicmllZiAgQ2hlY2sgaWYgdGhlIGZ1bmN0aW9uIElEIGlzIGEgdmFsaWQgb25lLgorICAqIEBwYXJhbSAgX19WQUxVRV9fIEZ1bmN0aW9uIElELgorICAqIEByZXR2YWwgU0VUIChfX1ZBTFVFX18gaXMgYSB2YWxpZCB2YWx1ZSkgb3IgUkVTRVQgKF9fVkFMVUVfXyBpcyBpbnZhbGlkKQorICAqLworI2RlZmluZSBJU19MTF9GTUFDX0ZVTkMoX19WQUxVRV9fKSAoKChfX1ZBTFVFX18pID09IExMX0ZNQUNfRlVOQ19MT0FEX1gxKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfRk1BQ19GVU5DX0xPQURfWDIpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9GTUFDX0ZVTkNfTE9BRF9ZKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfRk1BQ19GVU5DX0NPTlZPX0ZJUikgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX0ZNQUNfRlVOQ19JSVJfRElSRUNUX0ZPUk1fMSkpCisKKworLyoqCisgICogQH0KKyAgKi8KKworLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKiBAYWRkdG9ncm91cCBGTUFDX0xMX0V4cG9ydGVkX0Z1bmN0aW9ucworICAqIEB7CisgICovCisKKy8qKiBAYWRkdG9ncm91cCBGTUFDX0xMX0VGX0luaXQKKyAgKiBAeworICAqLworCisvKioKKyAgKiBAYnJpZWYgIEluaXRpYWxpemUgRk1BQyBwZXJpcGhlcmFsIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4KKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOgorICAqICAgICAgICAgIC0gU1VDQ0VTUzogRk1BQyByZWdpc3RlcnMgYXJlIGluaXRpYWxpemVkCisgICogICAgICAgICAgLSBFUlJPUjogRk1BQyByZWdpc3RlcnMgYXJlIG5vdCBpbml0aWFsaXplZAorICAqLworRXJyb3JTdGF0dXMgTExfRk1BQ19Jbml0KEZNQUNfVHlwZURlZiAqRk1BQ3gpCit7CisgIEVycm9yU3RhdHVzIHN0YXR1cyA9IFNVQ0NFU1M7CisKKyAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8KKyAgYXNzZXJ0X3BhcmFtKElTX0ZNQUNfQUxMX0lOU1RBTkNFKEZNQUN4KSk7CisKKyAgaWYgKEZNQUN4ID09IEZNQUMpCisgIHsKKyAgICAvKiBQZXJmb3JtIHRoZSByZXNldCAqLworICAgIExMX0ZNQUNfRW5hYmxlUmVzZXQoRk1BQ3gpOworCisgICAgLyogV2FpdCB1bnRpbCBmbGFnIGlzIHJlc2V0ICovCisgICAgd2hpbGUgKExMX0ZNQUNfSXNFbmFibGVkUmVzZXQoRk1BQ3gpICE9IDBVTCkKKyAgICB7CisgICAgfQorICB9CisgIGVsc2UKKyAgeworICAgIHN0YXR1cyA9IEVSUk9SOworICB9CisKKyAgcmV0dXJuIChzdGF0dXMpOworfQorCisvKioKKyAgKiBAYnJpZWYgIERlLUluaXRpYWxpemUgRk1BQyBwZXJpcGhlcmFsIHJlZ2lzdGVycyB0byB0aGVpciBkZWZhdWx0IHJlc2V0IHZhbHVlcy4KKyAgKiBAcGFyYW0gIEZNQUN4IEZNQUMgSW5zdGFuY2UKKyAgKiBAcmV0dmFsIEFuIEVycm9yU3RhdHVzIGVudW1lcmF0aW9uIHZhbHVlOgorICAqICAgICAgICAgIC0gU1VDQ0VTUzogRk1BQyByZWdpc3RlcnMgYXJlIGRlLWluaXRpYWxpemVkCisgICogICAgICAgICAgLSBFUlJPUjogRk1BQyByZWdpc3RlcnMgYXJlIG5vdCBkZS1pbml0aWFsaXplZAorICAqLworRXJyb3JTdGF0dXMgTExfRk1BQ19EZUluaXQoRk1BQ19UeXBlRGVmICpGTUFDeCkKK3sKKyAgRXJyb3JTdGF0dXMgc3RhdHVzID0gU1VDQ0VTUzsKKworICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLworICBhc3NlcnRfcGFyYW0oSVNfRk1BQ19BTExfSU5TVEFOQ0UoRk1BQ3gpKTsKKworICBpZiAoRk1BQ3ggPT0gRk1BQykKKyAgeworICAgIC8qIEZvcmNlIEZNQUMgcmVzZXQgKi8KKyAgICBMTF9BSEIyX0dSUDFfRm9yY2VSZXNldChMTF9BSEIyX0dSUDFfUEVSSVBIX0ZNQUMpOworCisgICAgLyogUmVsZWFzZSBGTUFDIHJlc2V0ICovCisgICAgTExfQUhCMl9HUlAxX1JlbGVhc2VSZXNldChMTF9BSEIyX0dSUDFfUEVSSVBIX0ZNQUMpOworICB9CisgIGVsc2UKKyAgeworICAgIHN0YXR1cyA9IEVSUk9SOworICB9CisKKyAgcmV0dXJuIChzdGF0dXMpOworfQorCisKKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIGRlZmluZWQoRk1BQykgKi8KKworLyoqCisgICogQH0KKyAgKi8KKworI2VuZGlmIC8qIFVTRV9GVUxMX0xMX0RSSVZFUiAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLwpkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9sbF9pMmMuYyBiL1NyYy9zdG0zMmg3eHhfbGxfaTJjLmMKaW5kZXggYTFlYWM4My4uMDllMjBjYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9sbF9pMmMuYworKysgYi9TcmMvc3RtMzJoN3h4X2xsX2kyYy5jCkBAIC0zMSw3ICszMSw3IEBACiAgICogQHsKICAgKi8KIAotI2lmIGRlZmluZWQgKEkyQzEpIHx8IGRlZmluZWQgKEkyQzIpIHx8IGRlZmluZWQgKEkyQzMpIHx8IGRlZmluZWQgKEkyQzQpCisjaWYgZGVmaW5lZCAoSTJDMSkgfHwgZGVmaW5lZCAoSTJDMikgfHwgZGVmaW5lZCAoSTJDMykgfHwgZGVmaW5lZCAoSTJDNCkgfHwgZGVmaW5lZCAoSTJDNSkKIAogLyoqIEBkZWZncm91cCBJMkNfTEwgSTJDCiAgICogQHsKQEAgLTEyNCw2ICsxMjQsMTYgQEAKICAgICAvKiBSZWxlYXNlIHJlc2V0IG9mIEkyQyBjbG9jayAqLwogICAgIExMX0FQQjRfR1JQMV9SZWxlYXNlUmVzZXQoTExfQVBCNF9HUlAxX1BFUklQSF9JMkM0KTsKICAgfQorI2lmIGRlZmluZWQoSTJDNSkKKyAgZWxzZSBpZiAoSTJDeCA9PSBJMkM1KQorICB7CisgICAgLyogRm9yY2UgcmVzZXQgb2YgSTJDIGNsb2NrICovCisgICAgTExfQVBCMV9HUlAxX0ZvcmNlUmVzZXQoTExfQVBCMV9HUlAxX1BFUklQSF9JMkM1KTsKKworICAgIC8qIFJlbGVhc2UgcmVzZXQgb2YgSTJDIGNsb2NrICovCisgICAgTExfQVBCMV9HUlAxX1JlbGVhc2VSZXNldChMTF9BUEIxX0dSUDFfUEVSSVBIX0kyQzUpOworICB9CisjZW5kaWYKICAgZWxzZQogICB7CiAgICAgc3RhdHVzID0gRVJST1I7CkBAIC0yMzIsNyArMjQyLDcgQEAKICAgKiBAfQogICAqLwogCi0jZW5kaWYgLyogSTJDMSB8fCBJMkMyIHx8IEkyQzMgfHwgSTJDNCAqLworI2VuZGlmIC8qIEkyQzEgfHwgSTJDMiB8fCBJMkMzIHx8IEkyQzQgIHx8IEkyQzUgKi8KIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfbGxfbWRtYS5jIGIvU3JjL3N0bTMyaDd4eF9sbF9tZG1hLmMKaW5kZXggNWUzYWIyYi4uMWMzM2Y4MiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9sbF9tZG1hLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9sbF9tZG1hLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfU0RNTUMxX0RNQV9FTkRCVUZGRVIpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX1NETU1DMV9DT01NQU5EX0VORCkpCiAKLSNlbHNlIC8qIFNUTTMySDdBMy9CMyBkZXZpY2VzICovCisjZWxpZiBkZWZpbmVkIChPQ1RPU1BJMSkgJiYgZGVmaW5lZCAoSlBFRykgLyogU1RNMzJIN0EzL0IzIGRldmljZXMgKi8KICNkZWZpbmUgSVNfTExfTURNQV9IV1RSSUdHRVIoX19WQUxVRV9fKSAgICAgICAgICAgICAgICAgICAoKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX0RNQTFfU1RSRUFNMF9UQykgICAgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9ETUExX1NUUkVBTTFfVEMpICAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfRE1BMV9TVFJFQU0yX1RDKSAgICAgIHx8IFwKQEAgLTI4Nyw3ICsyODcsMzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX1NETU1DMV9DT01NQU5EX0VORCkgICB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9PQ1RPU1BJMl9GSUZPX1RIKSAgICAgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfT0NUT1NQSTJfVEMpKQotCisjZWxzZSAvKiBTVE0zMkg3MjMvMjUvMzMvMzUgZGV2aWNlcyAqLworI2RlZmluZSBJU19MTF9NRE1BX0hXVFJJR0dFUihfX1ZBTFVFX18pICAgICAgICAgICAgICAgICAgICgoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfRE1BMV9TVFJFQU0wX1RDKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX0RNQTFfU1RSRUFNMV9UQykgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9ETUExX1NUUkVBTTJfVEMpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfRE1BMV9TVFJFQU0zX1RDKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX0RNQTFfU1RSRUFNNF9UQykgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9ETUExX1NUUkVBTTVfVEMpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfRE1BMV9TVFJFQU02X1RDKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX0RNQTFfU1RSRUFNN19UQykgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9ETUEyX1NUUkVBTTBfVEMpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfRE1BMl9TVFJFQU0xX1RDKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX0RNQTJfU1RSRUFNMl9UQykgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9ETUEyX1NUUkVBTTNfVEMpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfRE1BMl9TVFJFQU00X1RDKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX0RNQTJfU1RSRUFNNV9UQykgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9ETUEyX1NUUkVBTTZfVEMpICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfRE1BMl9TVFJFQU03X1RDKSAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX0xURENfTElORV9JVCkgICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9PQ1RPU1BJMV9GSUZPX1RIKSAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfT0NUT1NQSTFfVEMpICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX0RNQTJEX0NMVVRfVEMpICAgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9ETUEyRF9UQykgICAgICAgICAgICAgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfRE1BMkRfVFcpICAgICAgICAgICAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX1NETU1DMV9FTkRfREFUQSkgICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9TRE1NQzFfRE1BX0VOREJVRkZFUikgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9fVkFMVUVfXykgPT0gTExfTURNQV9SRVFfU0RNTUMxX0NPTU1BTkRfRU5EKSAgIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pID09IExMX01ETUFfUkVRX09DVE9TUEkyX0ZJRk9fVEgpICAgICB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA9PSBMTF9NRE1BX1JFUV9PQ1RPU1BJMl9UQykpCiAjZW5kaWYgLyogUVVBRFNQSSAmJiBKUEVHICYmIERTSSAqLwogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfbGxfcHdyLmMgYi9TcmMvc3RtMzJoN3h4X2xsX3B3ci5jCmluZGV4IDMxMDQ1YTkuLjI4Y2UxNjEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfbGxfcHdyLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9sbF9wd3IuYwpAQCAtNTUsOSArNTUsMTMgQEAKICAgKi8KIEVycm9yU3RhdHVzIExMX1BXUl9EZUluaXQodm9pZCkKIHsKKyNpZiBkZWZpbmVkIChQV1JfV0tVUENSX1dLVVBDMykKICAgV1JJVEVfUkVHKFBXUi0+V0tVUENSLCAoUFdSX1dLVVBDUl9XS1VQQzEgfCBQV1JfV0tVUENSX1dLVVBDMiB8IFBXUl9XS1VQQ1JfV0tVUEMzIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICBQV1JfV0tVUENSX1dLVVBDNCB8IFBXUl9XS1VQQ1JfV0tVUEM1IHwgUFdSX1dLVVBDUl9XS1VQQzYpKTsKLQorI2Vsc2UKKyAgV1JJVEVfUkVHKFBXUi0+V0tVUENSLCAoUFdSX1dLVVBDUl9XS1VQQzEgfCBQV1JfV0tVUENSX1dLVVBDMiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUFdSX1dLVVBDUl9XS1VQQzQgfCBQV1JfV0tVUENSX1dLVVBDNikpOworI2VuZGlmIC8qIGRlZmluZWQgKFBXUl9XS1VQQ1JfV0tVUEMzKSAqLwogICByZXR1cm4gU1VDQ0VTUzsKIH0KIApkaWZmIC0tZ2l0IGEvU3JjL3N0bTMyaDd4eF9sbF9yY2MuYyBiL1NyYy9zdG0zMmg3eHhfbGxfcmNjLmMKaW5kZXggOWRkNTZjNS4uMjgyYjlhYiAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9sbF9yY2MuYworKysgYi9TcmMvc3RtMzJoN3h4X2xsX3JjYy5jCkBAIC01NiwxNiArNTYsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1ZBTFVFX18pID09IExMX1JDQ19MUFRJTTJfQ0xLU09VUkNFKSAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX0xQVElNMzQ1X0NMS1NPVVJDRSkpCiAKLSNpZiBkZWZpbmVkKExMX1JDQ19TQUk0QV9DTEtTT1VSQ0UpCisjaWYgZGVmaW5lZChTQUkzKQogI2RlZmluZSBJU19MTF9SQ0NfU0FJX0NMS1NPVVJDRShfX1ZBTFVFX18pICAgICgoKF9fVkFMVUVfXykgPT0gTExfUkNDX1NBSTFfQ0xLU09VUkNFKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfU0FJNEJfQ0xLU09VUkNFKSkKKyNlbGlmIGRlZmluZWQoU0FJNCkKKyNkZWZpbmUgSVNfTExfUkNDX1NBSV9DTEtTT1VSQ0UoX19WQUxVRV9fKSAgICAoKChfX1ZBTFVFX18pID09IExMX1JDQ19TQUkxX0NMS1NPVVJDRSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX1NBSTRBX0NMS1NPVVJDRSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX1NBSTRCX0NMS1NPVVJDRSkpCiAjZWxzZQogI2RlZmluZSBJU19MTF9SQ0NfU0FJX0NMS1NPVVJDRShfX1ZBTFVFX18pICAgICgoKF9fVkFMVUVfXykgPT0gTExfUkNDX1NBSTFfQ0xLU09VUkNFKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfU0FJMkFfQ0xLU09VUkNFKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfU0FJMkJfQ0xLU09VUkNFKSkKLSNlbmRpZiAvKiBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFICovCisjZW5kaWYgLyogU0FJMyAqLwogCiAjZGVmaW5lIElTX0xMX1JDQ19TUElfQ0xLU09VUkNFKF9fVkFMVUVfXykgICAgKCgoX19WQUxVRV9fKSA9PSBMTF9SQ0NfU1BJMTIzX0NMS1NPVVJDRSkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKF9fVkFMVUVfXykgPT0gTExfUkNDX1NQSTQ1X0NMS1NPVVJDRSkgXApAQCAtMTE1LDYgKzExOSwxMyBAQAogICAqLwogdm9pZCBMTF9SQ0NfRGVJbml0KHZvaWQpCiB7CisgICAvKiBJbmNyZWFzaW5nIHRoZSBDUFUgZnJlcXVlbmN5ICovCisgIGlmKEZMQVNIX0xBVEVOQ1lfREVGQVVMVCAgPiAoUkVBRF9CSVQoKEZMQVNILT5BQ1IpLCBGTEFTSF9BQ1JfTEFURU5DWSkpKQorICB7CisgICAgLyogUHJvZ3JhbSB0aGUgbmV3IG51bWJlciBvZiB3YWl0IHN0YXRlcyB0byB0aGUgTEFURU5DWSBiaXRzIGluIHRoZSBGTEFTSF9BQ1IgcmVnaXN0ZXIgKi8KKyAgICBNT0RJRllfUkVHKEZMQVNILT5BQ1IsIEZMQVNIX0FDUl9MQVRFTkNZLCAodWludDMyX3QpKEZMQVNIX0xBVEVOQ1lfREVGQVVMVCkpOworICB9CisKICAgLyogU2V0IEhTSU9OIGJpdCAqLwogICBTRVRfQklUKFJDQy0+Q1IsIFJDQ19DUl9IU0lPTik7CiAKQEAgLTE5OSw2ICsyMTAsMTQgQEAKIAogICAvKiBDbGVhciByZXNldCBzb3VyY2UgZmxhZ3MgKi8KICAgU0VUX0JJVChSQ0MtPlJTUiwgUkNDX1JTUl9STVZGKTsKKyAgCisgICAvKiBEZWNyZWFzaW5nIHRoZSBudW1iZXIgb2Ygd2FpdCBzdGF0ZXMgYmVjYXVzZSBvZiBsb3dlciBDUFUgZnJlcXVlbmN5ICovCisgIGlmKEZMQVNIX0xBVEVOQ1lfREVGQVVMVCAgPCAoUkVBRF9CSVQoKEZMQVNILT5BQ1IpLCBGTEFTSF9BQ1JfTEFURU5DWSkpKQorICB7CisgICAgLyogUHJvZ3JhbSB0aGUgbmV3IG51bWJlciBvZiB3YWl0IHN0YXRlcyB0byB0aGUgTEFURU5DWSBiaXRzIGluIHRoZSBGTEFTSF9BQ1IgcmVnaXN0ZXIgKi8KKyAgICBNT0RJRllfUkVHKEZMQVNILT5BQ1IsIEZMQVNIX0FDUl9MQVRFTkNZLCAodWludDMyX3QpKEZMQVNIX0xBVEVOQ1lfREVGQVVMVCkpOworICB9CisKIH0KIAogLyoqCkBAIC04MTAsMTQgKzgyOSwxNCBAQAogI2lmIGRlZmluZWQoU0FJMykKICAgICBjYXNlIExMX1JDQ19TQUkyM19DTEtTT1VSQ0VfUExMMVE6CiAjZW5kaWYgLyogU0FJMyAqLworI2lmIGRlZmluZWQoU0FJNCkKKyAgICBjYXNlIExMX1JDQ19TQUk0QV9DTEtTT1VSQ0VfUExMMVE6CisgICAgY2FzZSBMTF9SQ0NfU0FJNEJfQ0xLU09VUkNFX1BMTDFROgorI2VuZGlmIC8qIFNBSTQgKi8KICNpZiBkZWZpbmVkIChSQ0NfQ0RDQ0lQMVJfU0FJMkFTRUwpIHx8IGRlZmluZWQoUkNDX0NEQ0NJUDFSX1NBSTJCU0VMKQogICAgIGNhc2UgTExfUkNDX1NBSTJBX0NMS1NPVVJDRV9QTEwxUToKICAgICBjYXNlIExMX1JDQ19TQUkyQl9DTEtTT1VSQ0VfUExMMVE6Ci0jZW5kaWYgLyogKFJDQ19DRENDSVAxUl9TQUkyQVNFTCkgfHwgKFJDQ19DRENDSVAxUl9TQUkyQlNFTCkgKi8KLSNpZiBkZWZpbmVkKFNBSTRfQmxvY2tfQSkgfHwgZGVmaW5lZChTQUk0X0Jsb2NrX0IpCi0gICAgY2FzZSBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFX1BMTDFROgotICAgIGNhc2UgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9QTEwxUToKLSNlbmRpZiAvKiAoU0FJNF9CbG9ja19BKSB8fCAoU0FJNF9CbG9ja19CKSAqLworI2VuZGlmIC8qIFJDQ19DRENDSVAxUl9TQUkyQVNFTCB8fCBSQ0NfQ0RDQ0lQMVJfU0FJMkJTRUwgKi8gCiAgICAgICBpZiAoTExfUkNDX1BMTDFfSXNSZWFkeSgpICE9IDBVKQogICAgICAgewogICAgICAgICBMTF9SQ0NfR2V0UExMMUNsb2NrRnJlcSgmUExMX0Nsb2Nrcyk7CkBAIC04MjksMTQgKzg0OCwxNCBAQAogI2lmIGRlZmluZWQoU0FJMykKICAgICBjYXNlIExMX1JDQ19TQUkyM19DTEtTT1VSQ0VfUExMMlA6CiAjZW5kaWYgLyogU0FJMyAqLworI2lmIGRlZmluZWQoU0FJNCkKKyAgICBjYXNlIExMX1JDQ19TQUk0QV9DTEtTT1VSQ0VfUExMMlA6CisgICAgY2FzZSBMTF9SQ0NfU0FJNEJfQ0xLU09VUkNFX1BMTDJQOgorI2VuZGlmIC8qIFNBSTQgKi8KICNpZiBkZWZpbmVkIChSQ0NfQ0RDQ0lQMVJfU0FJMkFTRUwpIHx8IGRlZmluZWQoUkNDX0NEQ0NJUDFSX1NBSTJCU0VMKQogICAgIGNhc2UgTExfUkNDX1NBSTJBX0NMS1NPVVJDRV9QTEwyUDoKICAgICBjYXNlIExMX1JDQ19TQUkyQl9DTEtTT1VSQ0VfUExMMlA6Ci0jZW5kaWYgLyogKFJDQ19DRENDSVAxUl9TQUkyQVNFTCkgfHwgKFJDQ19DRENDSVAxUl9TQUkyQlNFTCkgKi8KLSNpZiBkZWZpbmVkKFNBSTRfQmxvY2tfQSkgfHwgZGVmaW5lZChTQUk0X0Jsb2NrX0IpCi0gICAgY2FzZSBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFX1BMTDJQOgotICAgIGNhc2UgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9QTEwyUDoKLSNlbmRpZiAvKiAoU0FJMl9CbG9ja19BX0JBU0UpIHx8IChTQUkyX0Jsb2NrX0JfQkFTRSkgKi8KKyNlbmRpZiAvKiBSQ0NfQ0RDQ0lQMVJfU0FJMkFTRUwgfHwgUkNDX0NEQ0NJUDFSX1NBSTJCU0VMICovCiAgICAgICBpZiAoTExfUkNDX1BMTDJfSXNSZWFkeSgpICE9IDBVKQogICAgICAgewogICAgICAgICBMTF9SQ0NfR2V0UExMMkNsb2NrRnJlcSgmUExMX0Nsb2Nrcyk7CkBAIC04NDgsMTQgKzg2NywxNCBAQAogI2lmIGRlZmluZWQoU0FJMykKICAgICBjYXNlIExMX1JDQ19TQUkyM19DTEtTT1VSQ0VfUExMM1A6CiAjZW5kaWYgLyogU0FJMyAqLworI2lmIGRlZmluZWQoU0FJNCkKKyAgICBjYXNlIExMX1JDQ19TQUk0QV9DTEtTT1VSQ0VfUExMM1A6CisgICAgY2FzZSBMTF9SQ0NfU0FJNEJfQ0xLU09VUkNFX1BMTDNQOgorI2VuZGlmIC8qIFNBSTQgKi8KICNpZiBkZWZpbmVkIChSQ0NfQ0RDQ0lQMVJfU0FJMkFTRUwpIHx8IGRlZmluZWQoUkNDX0NEQ0NJUDFSX1NBSTJCU0VMKQogICAgIGNhc2UgTExfUkNDX1NBSTJBX0NMS1NPVVJDRV9QTEwzUDoKICAgICBjYXNlIExMX1JDQ19TQUkyQl9DTEtTT1VSQ0VfUExMM1A6Ci0jZW5kaWYgLyogKFJDQ19DRENDSVAxUl9TQUkyQVNFTCkgfHwgKFJDQ19DRENDSVAxUl9TQUkyQlNFTCkgKi8KLSNpZiBkZWZpbmVkKFNBSTRfQmxvY2tfQSkgfHwgZGVmaW5lZChTQUk0X0Jsb2NrX0IpCi0gICAgY2FzZSBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFX1BMTDNQOgotICAgIGNhc2UgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9QTEwzUDoKLSNlbmRpZiAvKiAoU0FJMl9CbG9ja19BX0JBU0UpIHx8IChTQUkyX0Jsb2NrX0JfQkFTRSkgKi8KKyNlbmRpZiAvKiBSQ0NfQ0RDQ0lQMVJfU0FJMkFTRUwgfHwgUkNDX0NEQ0NJUDFSX1NBSTJCU0VMICovCiAgICAgICBpZiAoTExfUkNDX1BMTDNfSXNSZWFkeSgpICE9IDBVKQogICAgICAgewogICAgICAgICBMTF9SQ0NfR2V0UExMM0Nsb2NrRnJlcSgmUExMX0Nsb2Nrcyk7CkBAIC04NjcsMTQgKzg4NiwxNCBAQAogI2lmIGRlZmluZWQoU0FJMykKICAgICBjYXNlIExMX1JDQ19TQUkyM19DTEtTT1VSQ0VfSTJTX0NLSU46CiAjZW5kaWYgLyogU0FJMyAqLworI2lmIGRlZmluZWQoU0FJNCkKKyAgICBjYXNlIExMX1JDQ19TQUk0QV9DTEtTT1VSQ0VfSTJTX0NLSU46CisgICAgY2FzZSBMTF9SQ0NfU0FJNEJfQ0xLU09VUkNFX0kyU19DS0lOOgorI2VuZGlmIC8qIFNBSTQgKi8KICNpZiBkZWZpbmVkIChSQ0NfQ0RDQ0lQMVJfU0FJMkFTRUwpIHx8IGRlZmluZWQoUkNDX0NEQ0NJUDFSX1NBSTJCU0VMKQogICAgIGNhc2UgTExfUkNDX1NBSTJBX0NMS1NPVVJDRV9JMlNfQ0tJTjoKICAgICBjYXNlIExMX1JDQ19TQUkyQl9DTEtTT1VSQ0VfSTJTX0NLSU46Ci0jZW5kaWYgLyogKFJDQ19DRENDSVAxUl9TQUkyQVNFTCkgfHwgKFJDQ19DRENDSVAxUl9TQUkyQlNFTCkgKi8KLSNpZiBkZWZpbmVkKFNBSTRfQmxvY2tfQSkgfHwgZGVmaW5lZChTQUk0X0Jsb2NrX0IpCi0gICAgY2FzZSBMTF9SQ0NfU0FJNEFfQ0xLU09VUkNFX0kyU19DS0lOOgotICAgIGNhc2UgTExfUkNDX1NBSTRCX0NMS1NPVVJDRV9JMlNfQ0tJTjoKLSNlbmRpZiAvKiAoU0FJMl9CbG9ja19BX0JBU0UpIHx8IChTQUkyX0Jsb2NrX0JfQkFTRSkgKi8KKyNlbmRpZiAvKiBSQ0NfQ0RDQ0lQMVJfU0FJMkFTRUwgfHwgUkNDX0NEQ0NJUDFSX1NBSTJCU0VMICovCiAgICAgICBzYWlfZnJlcXVlbmN5ID0gRVhURVJOQUxfQ0xPQ0tfVkFMVUU7CiAgICAgICBicmVhazsKIApAQCAtODgyLDE0ICs5MDEsMTQgQEAKICNpZiBkZWZpbmVkKFNBSTMpCiAgICAgY2FzZSBMTF9SQ0NfU0FJMjNfQ0xLU09VUkNFX0NMS1A6CiAjZW5kaWYgLyogU0FJMyAqLworI2lmIGRlZmluZWQoU0FJNCkKKyAgICBjYXNlIExMX1JDQ19TQUk0QV9DTEtTT1VSQ0VfQ0xLUDoKKyAgICBjYXNlIExMX1JDQ19TQUk0Ql9DTEtTT1VSQ0VfQ0xLUDoKKyNlbmRpZiAvKiBTQUk0ICovCiAjaWYgZGVmaW5lZCAoUkNDX0NEQ0NJUDFSX1NBSTJBU0VMKSB8fCBkZWZpbmVkKFJDQ19DRENDSVAxUl9TQUkyQlNFTCkKICAgICBjYXNlIExMX1JDQ19TQUkyQV9DTEtTT1VSQ0VfQ0xLUDoKICAgICBjYXNlIExMX1JDQ19TQUkyQl9DTEtTT1VSQ0VfQ0xLUDoKLSNlbmRpZiAvKiAoUkNDX0NEQ0NJUDFSX1NBSTJBU0VMKSB8fCAoUkNDX0NEQ0NJUDFSX1NBSTJCU0VMKSAqLwotI2lmIGRlZmluZWQoU0FJNF9CbG9ja19BKSB8fCBkZWZpbmVkKFNBSTRfQmxvY2tfQikKLSAgICBjYXNlIExMX1JDQ19TQUk0QV9DTEtTT1VSQ0VfQ0xLUDoKLSAgICBjYXNlIExMX1JDQ19TQUk0Ql9DTEtTT1VSQ0VfQ0xLUDoKLSNlbmRpZiAvKiAoU0FJMl9CbG9ja19BX0JBU0UpIHx8IChTQUkyX0Jsb2NrX0JfQkFTRSkgKi8KKyNlbmRpZiAvKiBSQ0NfQ0RDQ0lQMVJfU0FJMkFTRUwgfHwgUkNDX0NEQ0NJUDFSX1NBSTJCU0VMICovCiAgICAgICBzYWlfZnJlcXVlbmN5ID0gTExfUkNDX0dldENMS1BDbG9ja0ZyZXEoTExfUkNDX0NMS1BfQ0xLU09VUkNFKTsKICAgICAgIGJyZWFrOwogCkBAIC0xNTU4LDcgKzE1NzcsNyBAQAogI2lmIGRlZmluZWQoT0NUT1NQSTEpIHx8IGRlZmluZWQoT0NUT1NQSTIpCiAvKioKICAgKiBAYnJpZWYgIFJldHVybiBPU1BJIGNsb2NrIGZyZXF1ZW5jeQotICAqIEBwYXJhbSAgUVNQSXhTb3VyY2UgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKyAgKiBAcGFyYW0gIE9TUEl4U291cmNlIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgICogICAgICAgICBAYXJnIEByZWYgTExfUkNDX09TUElfQ0xLU09VUkNFCiAgICogQHJldHZhbCBPU1BJIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopCiAgICogICAgICAgICAtIEByZWYgIExMX1JDQ19QRVJJUEhfRlJFUVVFTkNZX05PIGluZGljYXRlcyB0aGF0IG9zY2lsbGF0b3IgaXMgbm90IHJlYWR5CmRpZmYgLS1naXQgYS9TcmMvc3RtMzJoN3h4X2xsX3NkbW1jLmMgYi9TcmMvc3RtMzJoN3h4X2xsX3NkbW1jLmMKaW5kZXggNWQzOWI5Zi4uNGMyZTcyZCAxMDA2NDQKLS0tIGEvU3JjL3N0bTMyaDd4eF9sbF9zZG1tYy5jCisrKyBiL1NyYy9zdG0zMmg3eHhfbGxfc2RtbWMuYwpAQCAtNzI4LDE2ICs3MjgsMTcgQEAKIAogLyoqCiAgICogQGJyaWVmICBTZW5kIHRoZSBFcmFzZSBjb21tYW5kIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UKLSAgKiBAcGFyYW0gIFNETU1DeDogUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCisgICogQHBhcmFtICBTRE1NQ3ggUG9pbnRlciB0byBTRE1NQyByZWdpc3RlciBiYXNlCisgICogQHBhcmFtICBFcmFzZVR5cGUgVHlwZSBvZiBlcmFzZSB0byBiZSBwZXJmb3JtZWQKICAgKiBAcmV0dmFsIEhBTCBzdGF0dXMKICAgKi8KLXVpbnQzMl90IFNETU1DX0NtZEVyYXNlKFNETU1DX1R5cGVEZWYgKlNETU1DeCkKK3VpbnQzMl90IFNETU1DX0NtZEVyYXNlKFNETU1DX1R5cGVEZWYgKlNETU1DeCwgdWludDMyX3QgRXJhc2VUeXBlKQogewogICBTRE1NQ19DbWRJbml0VHlwZURlZiAgc2RtbWNfY21kaW5pdDsKICAgdWludDMyX3QgZXJyb3JzdGF0ZTsKIAogICAvKiBTZXQgQmxvY2sgU2l6ZSBmb3IgQ2FyZCAqLwotICBzZG1tY19jbWRpbml0LkFyZ3VtZW50ICAgICAgICAgPSAwVTsKKyAgc2RtbWNfY21kaW5pdC5Bcmd1bWVudCAgICAgICAgID0gRXJhc2VUeXBlOwogICBzZG1tY19jbWRpbml0LkNtZEluZGV4ICAgICAgICAgPSBTRE1NQ19DTURfRVJBU0U7CiAgIHNkbW1jX2NtZGluaXQuUmVzcG9uc2UgICAgICAgICA9IFNETU1DX1JFU1BPTlNFX1NIT1JUOwogICBzZG1tY19jbWRpbml0LldhaXRGb3JJbnRlcnJ1cHQgPSBTRE1NQ19XQUlUX05POwpAQCAtMTIwNCw3ICsxMjA1LDcgQEAKIHsKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFNETU1DX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKIAogICBkbwogICB7CkBAIC0xMjM0LDcgKzEyMzUsNyBAQAogCiAgIC8qIDggaXMgdGhlIG51bWJlciBvZiByZXF1aXJlZCBpbnN0cnVjdGlvbnMgY3ljbGVzIGZvciB0aGUgYmVsb3cgbG9vcCBzdGF0ZW1lbnQuCiAgIFRoZSBUaW1lb3V0IGlzIGV4cHJlc3NlZCBpbiBtcyAqLwotICByZWdpc3RlciB1aW50MzJfdCBjb3VudCA9IFRpbWVvdXQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKKyAgdWludDMyX3QgY291bnQgPSBUaW1lb3V0ICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CiAKICAgZG8KICAgewpAQCAtMTM2Nyw3ICsxMzY4LDcgQEAKICAgdWludDMyX3Qgc3RhX3JlZzsKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFNETU1DX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKIAogICBkbwogICB7CkBAIC0xNDExLDcgKzE0MTIsNyBAQAogICB1aW50MzJfdCBzdGFfcmVnOwogICAvKiA4IGlzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgaW5zdHJ1Y3Rpb25zIGN5Y2xlcyBmb3IgdGhlIGJlbG93IGxvb3Agc3RhdGVtZW50LgogICBUaGUgU0RNTUNfQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KLSAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTRE1NQ19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CisgIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOwogCiAgIGRvCiAgIHsKQEAgLTE0NTMsNyArMTQ1NCw3IEBACiAKICAgLyogOCBpcyB0aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGluc3RydWN0aW9ucyBjeWNsZXMgZm9yIHRoZSBiZWxvdyBsb29wIHN0YXRlbWVudC4KICAgVGhlIFNETU1DX0NNRFRJTUVPVVQgaXMgZXhwcmVzc2VkIGluIG1zICovCi0gIHJlZ2lzdGVyIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOworICB1aW50MzJfdCBjb3VudCA9IFNETU1DX0NNRFRJTUVPVVQgKiAoU3lzdGVtQ29yZUNsb2NrIC8gOFUgLzEwMDBVKTsKIAogICBkbwogICB7CkBAIC0xNTI0LDcgKzE1MjUsNyBAQAogICB1aW50MzJfdCBzdGFfcmVnOwogICAvKiA4IGlzIHRoZSBudW1iZXIgb2YgcmVxdWlyZWQgaW5zdHJ1Y3Rpb25zIGN5Y2xlcyBmb3IgdGhlIGJlbG93IGxvb3Agc3RhdGVtZW50LgogICBUaGUgU0RNTUNfQ01EVElNRU9VVCBpcyBleHByZXNzZWQgaW4gbXMgKi8KLSAgcmVnaXN0ZXIgdWludDMyX3QgY291bnQgPSBTRE1NQ19DTURUSU1FT1VUICogKFN5c3RlbUNvcmVDbG9jayAvIDhVIC8xMDAwVSk7CisgIHVpbnQzMl90IGNvdW50ID0gU0RNTUNfQ01EVElNRU9VVCAqIChTeXN0ZW1Db3JlQ2xvY2sgLyA4VSAvMTAwMFUpOwogCiAgIGRvCiAgIHsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfbGxfdGltLmMgYi9TcmMvc3RtMzJoN3h4X2xsX3RpbS5jCmluZGV4IGExMWNhODMuLjY4OGYwYzEgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfbGxfdGltLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9sbF90aW0uYwpAQCAtMzIsNyArMzIsNyBAQAogICAqIEB7CiAgICovCiAKLSNpZiBkZWZpbmVkIChUSU0xKSB8fCBkZWZpbmVkIChUSU0yKSB8fCBkZWZpbmVkIChUSU0zKSB8fCBkZWZpbmVkIChUSU00KSB8fCBkZWZpbmVkIChUSU01KSB8fCBkZWZpbmVkIChUSU02KSB8fCBkZWZpbmVkIChUSU03KSB8fCBkZWZpbmVkIChUSU04KSB8fCBkZWZpbmVkIChUSU0xMikgfHwgZGVmaW5lZCAoVElNMTMpIHx8IGRlZmluZWQgKFRJTTE0KSB8fCBkZWZpbmVkIChUSU0xNSkgfHwgZGVmaW5lZCAoVElNMTYpIHx8IGRlZmluZWQgKFRJTTE3KQorI2lmIGRlZmluZWQgKFRJTTEpIHx8IGRlZmluZWQgKFRJTTIpIHx8IGRlZmluZWQgKFRJTTMpIHx8IGRlZmluZWQgKFRJTTQpIHx8IGRlZmluZWQgKFRJTTUpIHx8IGRlZmluZWQgKFRJTTYpIHx8IGRlZmluZWQgKFRJTTcpIHx8IGRlZmluZWQgKFRJTTgpIHx8IGRlZmluZWQgKFRJTTEyKSB8fCBkZWZpbmVkIChUSU0xMykgfHwgZGVmaW5lZCAoVElNMTQpIHx8IGRlZmluZWQgKFRJTTE1KSB8fCBkZWZpbmVkIChUSU0xNikgfHwgZGVmaW5lZCAoVElNMTcpIHx8IGRlZmluZWQgKFRJTTIzKSB8fCBkZWZpbmVkIChUSU0yNCkKIAogLyoqIEBhZGR0b2dyb3VwIFRJTV9MTAogICAqIEB7CkBAIC0xMzY5LDcgKzEzNjksNyBAQAogICAqIEB9CiAgICovCiAKLSNlbmRpZiAvKiBUSU0xIHx8IFRJTTIgfHwgVElNMyB8fCBUSU00IHx8IFRJTTUgfHwgVElNNiB8fCBUSU03IHx8IFRJTTggfHwgVElNMTIgfHwgVElNMTMgfHxUSU0xNCB8fCBUSU0xNSB8fCBUSU0xNiB8fCBUSU0xNyAqLworI2VuZGlmIC8qIFRJTTEgfHwgVElNMiB8fCBUSU0zIHx8IFRJTTQgfHwgVElNNSB8fCBUSU02IHx8IFRJTTcgfHwgVElNOCB8fCBUSU0xMiB8fCBUSU0xMyB8fFRJTTE0IHx8IFRJTTE1IHx8IFRJTTE2IHx8IFRJTTE3ICB8fCBUSU0yMyAgfHwgVElNMjQgKi8KIAogLyoqCiAgICogQH0KZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfbGxfdXNiLmMgYi9TcmMvc3RtMzJoN3h4X2xsX3VzYi5jCmluZGV4IDE4ZWQ3NDEuLjk4NmJhNGYgMTAwNjQ0Ci0tLSBhL1NyYy9zdG0zMmg3eHhfbGxfdXNiLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9sbF91c2IuYwpAQCAtNjEyLDYgKzYxMiwxMiBAQAogICAvKiBSZWFkIERFUENUTG4gcmVnaXN0ZXIgKi8KICAgaWYgKGVwLT5pc19pbiA9PSAxVSkKICAgeworICAgIGlmICgoVVNCeF9JTkVQKGVwbnVtKS0+RElFUENUTCAmIFVTQl9PVEdfRElFUENUTF9FUEVOQSkgPT0gVVNCX09UR19ESUVQQ1RMX0VQRU5BKQorICAgIHsKKyAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBDVEwgfD0gVVNCX09UR19ESUVQQ1RMX1NOQUs7CisgICAgICBVU0J4X0lORVAoZXBudW0pLT5ESUVQQ1RMIHw9IFVTQl9PVEdfRElFUENUTF9FUERJUzsKKyAgICB9CisKICAgICBVU0J4X0RFVklDRS0+REVBQ0hNU0sgJj0gfihVU0JfT1RHX0RBSU5UTVNLX0lFUE0gJiAodWludDMyX3QpKDFVTCA8PCAoZXAtPm51bSAmIEVQX0FERFJfTVNLKSkpOwogICAgIFVTQnhfREVWSUNFLT5EQUlOVE1TSyAmPSB+KFVTQl9PVEdfREFJTlRNU0tfSUVQTSAmICh1aW50MzJfdCkoMVVMIDw8IChlcC0+bnVtICYgRVBfQUREUl9NU0spKSk7CiAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUENUTCAmPSB+KFVTQl9PVEdfRElFUENUTF9VU0JBRVAgfApAQCAtNjIyLDYgKzYyOCwxMiBAQAogICB9CiAgIGVsc2UKICAgeworICAgIGlmICgoVVNCeF9PVVRFUChlcG51bSktPkRPRVBDVEwgJiBVU0JfT1RHX0RPRVBDVExfRVBFTkEpID09IFVTQl9PVEdfRE9FUENUTF9FUEVOQSkKKyAgICB7CisgICAgICBVU0J4X09VVEVQKGVwbnVtKS0+RE9FUENUTCB8PSBVU0JfT1RHX0RPRVBDVExfU05BSzsKKyAgICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQQ1RMIHw9IFVTQl9PVEdfRE9FUENUTF9FUERJUzsKKyAgICB9CisKICAgICBVU0J4X0RFVklDRS0+REVBQ0hNU0sgJj0gfihVU0JfT1RHX0RBSU5UTVNLX09FUE0gJiAoKHVpbnQzMl90KSgxVUwgPDwgKGVwLT5udW0gJiBFUF9BRERSX01TSykpIDw8IDE2KSk7CiAgICAgVVNCeF9ERVZJQ0UtPkRBSU5UTVNLICY9IH4oVVNCX09UR19EQUlOVE1TS19PRVBNICYgKCh1aW50MzJfdCkoMVVMIDw8IChlcC0+bnVtICYgRVBfQUREUl9NU0spKSA8PCAxNikpOwogICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQQ1RMICY9IH4oVVNCX09UR19ET0VQQ1RMX1VTQkFFUCB8CkBAIC02NDcsMTEgKzY1OSwyMyBAQAogICAvKiBSZWFkIERFUENUTG4gcmVnaXN0ZXIgKi8KICAgaWYgKGVwLT5pc19pbiA9PSAxVSkKICAgeworICAgIGlmICgoVVNCeF9JTkVQKGVwbnVtKS0+RElFUENUTCAmIFVTQl9PVEdfRElFUENUTF9FUEVOQSkgPT0gVVNCX09UR19ESUVQQ1RMX0VQRU5BKQorICAgIHsKKyAgICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBDVEwgIHw9IFVTQl9PVEdfRElFUENUTF9TTkFLOworICAgICAgVVNCeF9JTkVQKGVwbnVtKS0+RElFUENUTCAgfD0gVVNCX09UR19ESUVQQ1RMX0VQRElTOworICAgIH0KKwogICAgIFVTQnhfSU5FUChlcG51bSktPkRJRVBDVEwgJj0gfiBVU0JfT1RHX0RJRVBDVExfVVNCQUVQOwogICAgIFVTQnhfREVWSUNFLT5EQUlOVE1TSyAmPSB+KFVTQl9PVEdfREFJTlRNU0tfSUVQTSAmICh1aW50MzJfdCkoMVVMIDw8IChlcC0+bnVtICYgRVBfQUREUl9NU0spKSk7CiAgIH0KICAgZWxzZQogICB7CisgICAgaWYgKChVU0J4X09VVEVQKGVwbnVtKS0+RE9FUENUTCAmIFVTQl9PVEdfRE9FUENUTF9FUEVOQSkgPT0gVVNCX09UR19ET0VQQ1RMX0VQRU5BKQorICAgIHsKKyAgICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQQ1RMICB8PSBVU0JfT1RHX0RPRVBDVExfU05BSzsKKyAgICAgIFVTQnhfT1VURVAoZXBudW0pLT5ET0VQQ1RMICB8PSBVU0JfT1RHX0RPRVBDVExfRVBESVM7CisgICAgfQorCiAgICAgVVNCeF9PVVRFUChlcG51bSktPkRPRVBDVEwgJj0gflVTQl9PVEdfRE9FUENUTF9VU0JBRVA7CiAgICAgVVNCeF9ERVZJQ0UtPkRBSU5UTVNLICY9IH4oVVNCX09UR19EQUlOVE1TS19PRVBNICYgKCh1aW50MzJfdCkoMVVMIDw8IChlcC0+bnVtICYgRVBfQUREUl9NU0spKSA8PCAxNikpOwogICB9CkBAIC0xMzI0LDcgKzEzNDgsNyBAQAogCiAgIGlmICgoVVNCeC0+Q0lEICYgKDB4MVUgPDwgOCkpICE9IDBVKQogICB7Ci0gICAgaWYgKGNmZy5zcGVlZCA9PSBVU0JfT1RHX1NQRUVEX0ZVTEwpCisgICAgaWYgKGNmZy5zcGVlZCA9PSBVU0JIX0ZTTFNfU1BFRUQpCiAgICAgewogICAgICAgLyogRm9yY2UgRGV2aWNlIEVudW1lcmF0aW9uIHRvIEZTL0xTIG1vZGUgb25seSAqLwogICAgICAgVVNCeF9IT1NULT5IQ0ZHIHw9IFVTQl9PVEdfSENGR19GU0xTUzsKZGlmZiAtLWdpdCBhL1NyYy9zdG0zMmg3eHhfbGxfdXRpbHMuYyBiL1NyYy9zdG0zMmg3eHhfbGxfdXRpbHMuYwppbmRleCBhMDM5ZTc5Li5hMjRjNmJlIDEwMDY0NAotLS0gYS9TcmMvc3RtMzJoN3h4X2xsX3V0aWxzLmMKKysrIGIvU3JjL3N0bTMyaDd4eF9sbF91dGlscy5jCkBAIC00MSwxNiArNDEsMjEgQEAKIC8qKiBAYWRkdG9ncm91cCBVVElMU19MTF9Qcml2YXRlX0NvbnN0YW50cwogICAqIEB7CiAgICovCi0jaWYgKFBPV0VSX0RPTUFJTlNfTlVNQkVSID09IDNVKQotI2RlZmluZSBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFMSAgNDAwMDAwMDAwVSAgICAgIC8qITwgTWF4aW11bSBmcmVxdWVuY3kgZm9yIHN5c3RlbSBjbG9jayBhdCBwb3dlciBzY2FsZTEsIGluIEh6ICovCisjaWYgKFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwpCisjZGVmaW5lIFVUSUxTX01BWF9GUkVRVUVOQ1lfU0NBTEUxICA0ODAwMDAwMDBVICAgICAgLyohPCBNYXhpbXVtIGZyZXF1ZW5jeSBmb3Igc3lzdGVtIGNsb2NrIGF0IHBvd2VyIHNjYWxlMSwgaW4gSHogKi8KICNkZWZpbmUgVVRJTFNfTUFYX0ZSRVFVRU5DWV9TQ0FMRTIgIDMwMDAwMDAwMFUgICAgICAvKiE8IE1heGltdW0gZnJlcXVlbmN5IGZvciBzeXN0ZW0gY2xvY2sgYXQgcG93ZXIgc2NhbGUyLCBpbiBIeiAqLwogI2RlZmluZSBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFMyAgMjAwMDAwMDAwVSAgICAgIC8qITwgTWF4aW11bSBmcmVxdWVuY3kgZm9yIHN5c3RlbSBjbG9jayBhdCBwb3dlciBzY2FsZTMsIGluIEh6ICovCi0jZWxzZQorI2VsaWYgKFNUTTMySDdfREVWX0lEID09IDB4NDgwVUwpCiAjZGVmaW5lIFVUSUxTX01BWF9GUkVRVUVOQ1lfU0NBTEUwICAyODAwMDAwMDBVICAgICAgLyohPCBNYXhpbXVtIGZyZXF1ZW5jeSBmb3Igc3lzdGVtIGNsb2NrIGF0IHBvd2VyIHNjYWxlMCwgaW4gSHogKi8KICNkZWZpbmUgVVRJTFNfTUFYX0ZSRVFVRU5DWV9TQ0FMRTEgIDIyNTAwMDAwMFUgICAgICAvKiE8IE1heGltdW0gZnJlcXVlbmN5IGZvciBzeXN0ZW0gY2xvY2sgYXQgcG93ZXIgc2NhbGUxLCBpbiBIeiAqLwogI2RlZmluZSBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFMiAgMTYwMDAwMDAwVSAgICAgIC8qITwgTWF4aW11bSBmcmVxdWVuY3kgZm9yIHN5c3RlbSBjbG9jayBhdCBwb3dlciBzY2FsZTIsIGluIEh6ICovCiAjZGVmaW5lIFVUSUxTX01BWF9GUkVRVUVOQ1lfU0NBTEUzICAgODgwMDAwMDBVICAgICAgLyohPCBNYXhpbXVtIGZyZXF1ZW5jeSBmb3Igc3lzdGVtIGNsb2NrIGF0IHBvd2VyIHNjYWxlMywgaW4gSHogKi8KLSNlbmRpZiAvKlBPV0VSX0RPTUFJTlNfTlVNQkVSID09IDNVKi8KKyNlbGlmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4M1VMKQorI2RlZmluZSBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFMCAgNTUwMDAwMDAwVSAgICAgIC8qITwgTWF4aW11bSBmcmVxdWVuY3kgZm9yIHN5c3RlbSBjbG9jayBhdCBwb3dlciBzY2FsZTAsIGluIEh6ICovCisjZGVmaW5lIFVUSUxTX01BWF9GUkVRVUVOQ1lfU0NBTEUxICAyMDAwMDAwMDBVICAgICAgLyohPCBNYXhpbXVtIGZyZXF1ZW5jeSBmb3Igc3lzdGVtIGNsb2NrIGF0IHBvd2VyIHNjYWxlMSwgaW4gSHogKi8KKyNkZWZpbmUgVVRJTFNfTUFYX0ZSRVFVRU5DWV9TQ0FMRTIgIDE1MDAwMDAwMFUgICAgICAvKiE8IE1heGltdW0gZnJlcXVlbmN5IGZvciBzeXN0ZW0gY2xvY2sgYXQgcG93ZXIgc2NhbGUyLCBpbiBIeiAqLworI2RlZmluZSBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFMyAgIDg1MDAwMDAwVSAgICAgIC8qITwgTWF4aW11bSBmcmVxdWVuY3kgZm9yIHN5c3RlbSBjbG9jayBhdCBwb3dlciBzY2FsZTMsIGluIEh6ICovCisjZW5kaWYgLypTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKi8KIAogLyogRGVmaW5lcyB1c2VkIGZvciBQTEwgcmFuZ2UgKi8KICNkZWZpbmUgVVRJTFNfUExMVkNPX0lOUFVUX01JTjEgICAgICAgMTAwMDAwMFUgICAgICAvKiE8IEZyZXF1ZW5jeSBtaW4gZm9yIHRoZSBsb3cgcmFuZ2UgUExMVkNPIGlucHV0LCBpbiBIeiAgICAqLwpAQCAtNzksNyArODQsNyBAQAogI2RlZmluZSBVVElMU19IU0VfRlJFUVVFTkNZX01BWCAgICAgNDgwMDAwMDBVICAgICAgICAvKiE8IEZyZXF1ZW5jeSBtYXggZm9yIEhTRSBmcmVxdWVuY3ksIGluIEh6ICAgKi8KIAogLyogRGVmaW5lcyB1c2VkIGZvciBGTEFTSCBsYXRlbmN5IGFjY29yZGluZyB0byBIQ0xLIEZyZXF1ZW5jeSAqLwotI2lmIChQT1dFUl9ET01BSU5TX05VTUJFUiA9PSAyVSkKKyNpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCkKICNkZWZpbmUgVVRJTFNfU0NBTEUwX0xBVEVOQ1kwX0ZSRVEgICA0NDAwMDAwMFUgICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAwIGluIHBvd2VyIHNjYWxlIDAgICovCiAjZGVmaW5lIFVUSUxTX1NDQUxFMF9MQVRFTkNZMV9GUkVRICAgODgwMDAwMDBVICAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMSBpbiBwb3dlciBzY2FsZSAwICAqLwogI2RlZmluZSBVVElMU19TQ0FMRTBfTEFURU5DWTJfRlJFUSAgMTMyMDAwMDAwVSAgICAgICAvKiE8IEhDTEsgZnJlcXVlbmN5IHRvIHNldCBGTEFTSCBsYXRlbmN5IDIgaW4gcG93ZXIgc2NhbGUgMCAgKi8KQEAgLTEwNiwxMSArMTExLDExIEBACiAjZGVmaW5lIFVUSUxTX1NDQUxFM19MQVRFTkNZMl9GUkVRICAgNjYwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAyIGluIHBvd2VyIHNjYWxlIDMgICovCiAjZGVmaW5lIFVUSUxTX1NDQUxFM19MQVRFTkNZM19GUkVRICAgODgwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAzIGluIHBvd2VyIHNjYWxlIDMgICovCiAKLSNlbHNlCisjZWxpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0NTBVTCkKIAogI2RlZmluZSBVVElMU19TQ0FMRTFfTEFURU5DWTBfRlJFUSAgIDcwMDAwMDAwVSAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMCBpbiBwb3dlciBzY2FsZSAxICAqLwogI2RlZmluZSBVVElMU19TQ0FMRTFfTEFURU5DWTFfRlJFUSAgMTQwMDAwMDAwVSAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMSBpbiBwb3dlciBzY2FsZSAxICAqLwotI2RlZmluZSBVVElMU19TQ0FMRTFfTEFURU5DWTJfRlJFUSAgMjEwMDAwMDAwVSAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMiBpbiBwb3dlciBzY2FsZSAxICAqLworI2RlZmluZSBVVElMU19TQ0FMRTFfTEFURU5DWTJfRlJFUSAgMjQwMDAwMDAwVSAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMiBpbiBwb3dlciBzY2FsZSAxICAqLwogCiAjZGVmaW5lIFVUSUxTX1NDQUxFMl9MQVRFTkNZMF9GUkVRICAgNTUwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAwIGluIHBvd2VyIHNjYWxlIDIgICovCiAjZGVmaW5lIFVUSUxTX1NDQUxFMl9MQVRFTkNZMV9GUkVRICAxMTAwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAxIGluIHBvd2VyIHNjYWxlIDIgICovCkBAIC0xMjIsNyArMTI3LDI3IEBACiAjZGVmaW5lIFVUSUxTX1NDQUxFM19MQVRFTkNZMl9GUkVRICAxMzUwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAyIGluIHBvd2VyIHNjYWxlIDMgICovCiAjZGVmaW5lIFVUSUxTX1NDQUxFM19MQVRFTkNZM19GUkVRICAxODAwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAzIGluIHBvd2VyIHNjYWxlIDMgICovCiAjZGVmaW5lIFVUSUxTX1NDQUxFM19MQVRFTkNZNF9GUkVRICAyMjUwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSA0IGluIHBvd2VyIHNjYWxlIDMgICovCi0jZW5kaWYgLypQT1dFUl9ET01BSU5TX05VTUJFUiA9PSAyVSovCisKKyNlbGlmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4M1VMKQorCisjZGVmaW5lIFVUSUxTX1NDQUxFMF9MQVRFTkNZMF9GUkVRICAgNzAwMDAwMDBVICAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMCBpbiBwb3dlciBzY2FsZSAwICAqLworI2RlZmluZSBVVElMU19TQ0FMRTBfTEFURU5DWTFfRlJFUSAgMTQwMDAwMDAwVSAgICAgICAvKiE8IEhDTEsgZnJlcXVlbmN5IHRvIHNldCBGTEFTSCBsYXRlbmN5IDEgaW4gcG93ZXIgc2NhbGUgMCAgKi8KKyNkZWZpbmUgVVRJTFNfU0NBTEUwX0xBVEVOQ1kyX0ZSRVEgIDIxMDAwMDAwMFUgICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAyIGluIHBvd2VyIHNjYWxlIDAgICovCisjZGVmaW5lIFVUSUxTX1NDQUxFMF9MQVRFTkNZM19GUkVRICAyNzUwMDAwMDBVICAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMyBpbiBwb3dlciBzY2FsZSAwICAqLworCisjZGVmaW5lIFVUSUxTX1NDQUxFMV9MQVRFTkNZMF9GUkVRICAgNjcwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAwIGluIHBvd2VyIHNjYWxlIDEgICovCisjZGVmaW5lIFVUSUxTX1NDQUxFMV9MQVRFTkNZMV9GUkVRICAxMzMwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAxIGluIHBvd2VyIHNjYWxlIDEgICovCisjZGVmaW5lIFVUSUxTX1NDQUxFMV9MQVRFTkNZMl9GUkVRICAyMDAwMDAwMDBVICAgICAgLyohPCBIQ0xLIGZyZXF1ZW5jeSB0byBzZXQgRkxBU0ggbGF0ZW5jeSAyIGluIHBvd2VyIHNjYWxlIDEgICovCisKKyNkZWZpbmUgVVRJTFNfU0NBTEUyX0xBVEVOQ1kwX0ZSRVEgICA1MDAwMDAwMFUgICAgICAvKiE8IEhDTEsgZnJlcXVlbmN5IHRvIHNldCBGTEFTSCBsYXRlbmN5IDAgaW4gcG93ZXIgc2NhbGUgMiAgKi8KKyNkZWZpbmUgVVRJTFNfU0NBTEUyX0xBVEVOQ1kxX0ZSRVEgIDEwMDAwMDAwMFUgICAgICAvKiE8IEhDTEsgZnJlcXVlbmN5IHRvIHNldCBGTEFTSCBsYXRlbmN5IDEgaW4gcG93ZXIgc2NhbGUgMiAgKi8KKyNkZWZpbmUgVVRJTFNfU0NBTEUyX0xBVEVOQ1kyX0ZSRVEgIDE1MDAwMDAwMFUgICAgICAvKiE8IEhDTEsgZnJlcXVlbmN5IHRvIHNldCBGTEFTSCBsYXRlbmN5IDIgaW4gcG93ZXIgc2NhbGUgMiAgKi8KKworI2RlZmluZSBVVElMU19TQ0FMRTNfTEFURU5DWTBfRlJFUSAgIDM1MDAwMDAwVSAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMCBpbiBwb3dlciBzY2FsZSAzICAqLworI2RlZmluZSBVVElMU19TQ0FMRTNfTEFURU5DWTFfRlJFUSAgIDcwMDAwMDAwVSAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMSBpbiBwb3dlciBzY2FsZSAzICAqLworI2RlZmluZSBVVElMU19TQ0FMRTNfTEFURU5DWTJfRlJFUSAgIDg1MDAwMDAwVSAgICAgIC8qITwgSENMSyBmcmVxdWVuY3kgdG8gc2V0IEZMQVNIIGxhdGVuY3kgMiBpbiBwb3dlciBzY2FsZSAzICAqLworCisjZW5kaWYgLypTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMKi8KIC8qKgogICAqIEB9CiAgICovCkBAIC0yMDEsNyArMjI2LDcgQEAKICgoKF9fUkFOR0VJTl9fKSA9PSBMTF9SQ0NfUExMSU5QVVRSQU5HRV8xXzIpICYmICgoX19SQU5HRU9VVF9fKSA9PSBMTF9SQ0NfUExMVkNPUkFOR0VfTUVESVVNKSkgfHwgXAogKCgoX19SQU5HRUlOX18pICE9IExMX1JDQ19QTExJTlBVVFJBTkdFXzFfMikgJiYgKChfX1JBTkdFT1VUX18pID09IExMX1JDQ19QTExWQ09SQU5HRV9XSURFKSkpCiAKLSNpZiAoUE9XRVJfRE9NQUlOU19OVU1CRVIgPT0gM1UpCisjaWYgKFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwpCiAjZGVmaW5lIElTX0xMX1VUSUxTX1BMTF9GUkVRVUVOQ1koX19WQUxVRV9fKSAoKExMX1BXUl9HZXRSZWd1bFZvbHRhZ2VTY2FsaW5nKCkgPT0gTExfUFdSX1JFR1VfVk9MVEFHRV9TQ0FMRTEpID8gKChfX1ZBTFVFX18pIDw9IFVUSUxTX01BWF9GUkVRVUVOQ1lfU0NBTEUxKSA6IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTExfUFdSX0dldFJlZ3VsVm9sdGFnZVNjYWxpbmcoKSA9PSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMikgPyAoKF9fVkFMVUVfXykgPD0gVVRJTFNfTUFYX0ZSRVFVRU5DWV9TQ0FMRTIpIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX19WQUxVRV9fKSA8PSBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFMykpCkBAIC0yMTAsNyArMjM1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTExfUFdSX0dldFJlZ3VsVm9sdGFnZVNjYWxpbmcoKSA9PSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMSkgPyAoKF9fVkFMVUVfXykgPD0gVVRJTFNfTUFYX0ZSRVFVRU5DWV9TQ0FMRTEpIDogXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMTF9QV1JfR2V0UmVndWxWb2x0YWdlU2NhbGluZygpID09IExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUyKSA/ICgoX19WQUxVRV9fKSA8PSBVVElMU19NQVhfRlJFUVVFTkNZX1NDQUxFMikgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChfX1ZBTFVFX18pIDw9IFVUSUxTX01BWF9GUkVRVUVOQ1lfU0NBTEUzKSkKLSNlbmRpZiAvKlBPV0VSX0RPTUFJTlNfTlVNQkVSID09IDNVKi8KKyNlbmRpZiAvKiBTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMICovCiAKICNkZWZpbmUgSVNfTExfVVRJTFNfSFNFX0JZUEFTUyhfX1NUQVRFX18pICgoKF9fU1RBVEVfXykgPT0gTExfVVRJTFNfSFNFQllQQVNTX09OKSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChfX1NUQVRFX18pID09IExMX1VUSUxTX0hTRUJZUEFTU19PRkYpKQpAQCAtMzA0LDYgKzMyOSw3IEBACiAgICogQH0KICAgKi8KIAorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKQogLyoqIEBhZGR0b2dyb3VwIFVUSUxTX0VGX1NZU1RFTQogICAqICBAYnJpZWYgICAgU3lzdGVtIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCiAgICoKQEAgLTMxNCw5ICszNDAsOCBAQAogICAgIFsuLl0KICAgICAgICAgIFN5c3RlbSwgQUhCIGFuZCBBUEIgYnVzZXMgY2xvY2tzIGNvbmZpZ3VyYXRpb24KIAotI2lmIChQT1dFUl9ET01BSU5TX05VTUJFUiA9PSAzVSkKLSAgICAgICAgICgrKSBUaGUgbWF4aW11bSBmcmVxdWVuY3kgb2YgdGhlIFNZU0NMSyBpcyA0MDAgTUh6IGFuZCBIQ0xLIGlzIDIwMCBNSHouCi0gICAgICAgICAoKykgVGhlIG1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBQQ0xLMSwgUENMSzIsIFBDTEszIGFuZCBQQ0xLNCBpcyAxMDAgTUh6LgorICAgICAgICAgKCspIFRoZSBtYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgU1lTQ0xLIGlzIDQ4MCBNSHooKikgYW5kIEhDTEsgaXMgMjQwIE1Iei4KKyAgICAgICAgICgrKSBUaGUgbWF4aW11bSBmcmVxdWVuY3kgb2YgdGhlIFBDTEsxLCBQQ0xLMiwgUENMSzMgYW5kIFBDTEs0IGlzIDEyMCBNSHouCiAgIEBlbmR2ZXJiYXRpbQogICBAaW50ZXJuYWwKICAgICAgICAgICAgICBEZXBlbmRpbmcgb24gdGhlIGRldmljZSB2b2x0YWdlIHJhbmdlLCB0aGUgbWF4aW11bSBmcmVxdWVuY3kgc2hvdWxkIGJlCkBAIC0zMzEsMTQgKzM1NiwyOSBAQAogICAgICAgICAgICAgICgrKykgfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18CiAgICAgICAgICAgICAgKCsrKSB8MVdTKDJDUFUgY3ljbGUpIHwgIDcwIDwgSENMSyA8PSAxNDAgfCAgNTUgPCBIQ0xLIDw9IDExMCB8ICA0NSA8IEhDTEsgPD0gOTAgIHwKICAgICAgICAgICAgICAoKyspIHwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAotICAgICAgICAgICAgICgrKykgfDJXUygzQ1BVIGN5Y2xlKSB8IDE0MCA8IEhDTEsgPD0gMjEwIHwgMTEwIDwgSENMSyA8PSAxNjUgfCAgOTAgPCBIQ0xLIDw9IDEzNSB8CisgICAgICAgICAgICAgKCsrKSB8MldTKDNDUFUgY3ljbGUpIHwgMTQwIDwgSENMSyA8PSAyNDAgfCAxMTAgPCBIQ0xLIDw9IDE2NSB8ICA5MCA8IEhDTEsgPD0gMTM1IHwKICAgICAgICAgICAgICAoKyspIHwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAogICAgICAgICAgICAgICgrKykgfDNXUyg0Q1BVIGN5Y2xlKSB8ICAgICAgICAtLSAgICAgICAgIHwgMTY1IDwgSENMSyA8PSAyMjAgfCAxMzUgPCBIQ0xLIDw9IDE4MCB8CiAgICAgICAgICAgICAgKCsrKSB8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwKICAgICAgICAgICAgICAoKyspIHw0V1MoNUNQVSBjeWNsZSkgfCAgICAgICAgLS0gICAgICAgICB8ICAgICAgICAtLSAgICAgICAgIHwgMTgwIDwgSENMSyA8PSAyMjUgfAogICAgICAgICAgICAgICgrKykgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLSNlbHNlCisgICgqKSA6IEZvciBzdG0zMmg3NHh4eCBhbmQgc3RtMzJoNzV4eHggZmFtaWx5IGxpbmVzIGFuZCByZXF1aXJlcyB0aGUgYm9hcmQgdG8gYmUgY29ubmVjdGVkIG9uIExETyByZWd1bGF0b3Igbm90IFNNUFMsIDQwME1IWiBvdGhlcndpc2UuCisgIEBlbmRpbnRlcm5hbAorICAqIEB7CisgICovCisKKyNlbGlmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMKQorLyoqIEBhZGR0b2dyb3VwIFVUSUxTX0VGX1NZU1RFTQorICAqICBAYnJpZWYgICAgU3lzdGVtIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCisgICoKKyAgQHZlcmJhdGltCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAgICAjIyMjIyBTeXN0ZW0gQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMgIyMjIyMKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgWy4uXQorICAgICAgICAgU3lzdGVtLCBBSEIgYW5kIEFQQiBidXNlcyBjbG9ja3MgY29uZmlndXJhdGlvbgorCiAgICAgICAgICAoKykgVGhlIG1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTWVNDTEsgaXMgMjgwIE1IeiBhbmQgSENMSyBpcyAyODAgTUh6LgogICAgICAgICAgKCspIFRoZSBtYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgUENMSzEsIFBDTEsyLCBQQ0xLMyBhbmQgUENMSzQgaXMgMTQwIE1Iei4KICAgQGVuZHZlcmJhdGltCkBAIC0zNjgsMTAgKzQwOCw0OCBAQAogICAgICAgICAgICAgICgrKykgfDdXUyg4Q1BVIGN5Y2xlKSB8ICAgICAgICAtLSAgICAgICAgIHwgICAgICAgIC0tICAgICAgICAgfCAgICAgICAgLS0gICAgICAgICB8ICAgICAgICAtLSAgICAgICAgIHwKICAgICAgICAgICAgICAoKyspICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLSNlbmRpZgogICBAZW5kaW50ZXJuYWwKICAgKiBAewogICAqLworCisjZWxpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODNVTCkKKy8qKiBAYWRkdG9ncm91cCBVVElMU19FRl9TWVNURU0KKyAgKiAgQGJyaWVmICAgIFN5c3RlbSBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucworICAqCisgIEB2ZXJiYXRpbQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgIyMjIyMgU3lzdGVtIENvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICMjIyMjCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFsuLl0KKyAgICAgICAgIFN5c3RlbSwgQUhCIGFuZCBBUEIgYnVzZXMgY2xvY2tzIGNvbmZpZ3VyYXRpb24KKworICAgICAgICAgKCspIFRoZSBtYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgU1lTQ0xLIGlzIDU1MCBNSHooKikgYW5kIEhDTEsgaXMgMjc1IE1Iei4KKyAgICAgICAgICgrKSBUaGUgbWF4aW11bSBmcmVxdWVuY3kgb2YgdGhlIFBDTEsxLCBQQ0xLMiwgUENMSzMgYW5kIFBDTEs0IGlzIDEzNy41IE1Iei4KKyAgQGVuZHZlcmJhdGltCisgIEBpbnRlcm5hbAorICAgICAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgZGV2aWNlIHZvbHRhZ2UgcmFuZ2UsIHRoZSBtYXhpbXVtIGZyZXF1ZW5jeSBzaG91bGQgYmUKKyAgICAgICAgICAgICBhZGFwdGVkIGFjY29yZGluZ2x5OgorICAgICAgICAgICAgICgrKykgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAoKyspIHwgIFdhaXQgc3RhdGVzICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgSENMSyBjbG9jayBmcmVxdWVuY3kgKE1IeikgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgKCsrKSB8ICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgICAgICgrKykgfCAgKExhdGVuY3kpICAgICB8ICAgdm9sdGFnZSByYW5nZSAwIHwgICB2b2x0YWdlIHJhbmdlIDEgfCAgIHZvbHRhZ2UgcmFuZ2UgMiB8ICAgdm9sdGFnZSByYW5nZSAzIHwKKyAgICAgICAgICAgICAoKyspIHwgICAgICAgICAgICAgICAgfCAgICAxLjI2ViAtIDEuNDBWICB8ICAgIDEuMTVWIC0gMS4yNlYgIHwgICAgMS4wNVYgLSAxLjE1ViAgfCAgICAwLjk1ViAtIDEuMDVWICB8CisgICAgICAgICAgICAgKCsrKSB8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgICAgICgrKykgfDBXUygxQ1BVIGN5Y2xlKSB8ICAgMCA8IEhDTEsgPD0gNzAgIHwgICAwIDwgSENMSyA8PSA2NyAgfCAgIDAgPCBIQ0xLIDw9IDUwICB8ICAgMCA8IEhDTEsgPD0gMzUgIHwKKyAgICAgICAgICAgICAoKyspIHwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgICAgICAgKCsrKSB8MVdTKDJDUFUgY3ljbGUpIHwgIDcwIDwgSENMSyA8PSAxNDAgfCAgNjcgPCBIQ0xLIDw9IDEzMyB8ICA1MCA8IEhDTEsgPD0gMTAwIHwgIDM1IDwgSENMSyA8PSA3MCAgfAorICAgICAgICAgICAgICgrKykgfC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgICAgICAgICAgICAoKyspIHwyV1MoM0NQVSBjeWNsZSkgfCAxNDAgPCBIQ0xLIDw9IDIxMCB8IDEzMyA8IEhDTEsgPD0gMjAwIHwgMTAwIDwgSENMSyA8PSAxNTAgfCAgNzAgPCBIQ0xLIDw9IDg1ICB8CisgICAgICAgICAgICAgKCsrKSB8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfAorICAgICAgICAgICAgICgrKykgfDNXUyg0Q1BVIGN5Y2xlKSB8IDIxMCA8IEhDTEsgPD0gMjc1IHwgICAgICAgIC0tICAgICAgICAgfCAgICAgICAgLS0gICAgICAgICB8ICAgICAgICAtLSAgICAgICAgIHwKKyAgICAgICAgICAgICAoKyspICstLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18CisKKyAgKCopICA6IEZvciBzdG0zMmg3Mnh4eCBhbmQgc3RtMzJoNzN4eHggZmFtaWx5IGxpbmVzIGFuZCByZXF1aXJlcyB0byBlbmFibGUgdGhlIENQVV9GUkVRX0JPT1NUIGZsYXNoIG9wdGlvbiBieXRlLCA1MjBNSFogb3RoZXJ3aXNlLgorICBAZW5kaW50ZXJuYWwKKyAgKiBAeworICAqLworI2VuZGlmIC8qIFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwgKi8KKwogI2lmIGRlZmluZWQgKERVQUxfQ09SRSkKIC8qKgogICAqIEBicmllZiAgVGhpcyBmdW5jdGlvbiBzZXRzIGRpcmVjdGx5IFN5c3RlbUNvcmVDbG9jayBDTVNJUyB2YXJpYWJsZS4KQEAgLTQwNSw4ICs0ODMsOCBAQAogICAqIEBub3RlICAgRnVuY3Rpb24gaXMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBmb3JtdWxhOgogICAqICAgICAgICAgLSBQTEwgb3V0cHV0IGZyZXF1ZW5jeSA9ICgoKEhTSSBmcmVxdWVuY3kgLyBQTExNKSAqIFBMTE4pIC8gUExMUCkKICAgKiAgICAgICAgIC0gUExMTTogZW5zdXJlIHRoYXQgdGhlIFZDTyBpbnB1dCBmcmVxdWVuY3kgcmFuZ2VzIGZyb20gMSB0byAxNiBNSHogKFBMTFZDT19pbnB1dCA9IEhTSSBmcmVxdWVuY3kgLyBQTExNKQotICAqICAgICAgICAgLSBQTExOOiBlbnN1cmUgdGhhdCB0aGUgVkNPIG91dHB1dCBmcmVxdWVuY3kgaXMgYmV0d2VlbiAxNTAgYW5kIDgzNiBNSHogb3IgMTI4IHRvIDU2MCBNSHooKikgKFBMTFZDT19vdXRwdXQgPSBQTExWQ09faW5wdXQgKiBQTExOKQotICAqICAgICAgICAgLSBQTExQOiBlbnN1cmUgdGhhdCBtYXggZnJlcXVlbmN5IGF0IDQwMDAwMDAwMCBIeiBvciAyODAwMDAwMDAgSHogaXMgcmVhY2ggKFBMTFZDT19vdXRwdXQgLyBQTExQKQorICAqICAgICAgICAgLSBQTExOOiBlbnN1cmUgdGhhdCB0aGUgVkNPIG91dHB1dCBmcmVxdWVuY3kgaXMgYmV0d2VlbiAxNTAgYW5kIDgzNiBNSHogb3IgMTI4IHRvIDU2MCBNSHooKioqKSAoUExMVkNPX291dHB1dCA9IFBMTFZDT19pbnB1dCAqIFBMTE4pCisgICogICAgICAgICAtIFBMTFA6IGVuc3VyZSB0aGF0IG1heCBmcmVxdWVuY3kgYXQgNTUwMDAwMDAwIEh6KCopLCA0ODAwMDAwMDAgSHooKiopIG9yIDI4MDAwMDAwMCBIeigqKiopIGlzIHJlYWNoIChQTExWQ09fb3V0cHV0IC8gUExMUCkKICAgKiBAcGFyYW0gIFVUSUxTX1BMTEluaXRTdHJ1Y3QgcG9pbnRlciB0byBhIEByZWYgTExfVVRJTFNfUExMSW5pdFR5cGVEZWYgc3RydWN0dXJlIHRoYXQgY29udGFpbnMKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBQTEwuCiAgICogQHBhcmFtICBVVElMU19DbGtJbml0U3RydWN0IHBvaW50ZXIgdG8gYSBAcmVmIExMX1VUSUxTX0Nsa0luaXRUeXBlRGVmIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zCkBAIC00MTUsNyArNDkzLDkgQEAKICAgKiAgICAgICAgICAtIFNVQ0NFU1M6IE1heCBmcmVxdWVuY3kgY29uZmlndXJhdGlvbiBkb25lCiAgICogICAgICAgICAgLSBFUlJPUjogTWF4IGZyZXF1ZW5jeSBjb25maWd1cmF0aW9uIG5vdCBkb25lCiAgICoKLSAgKiAoKikgOiBGb3Igc3RtMzJoN2EzeHgsIHN0bTMyaDdiM3h4IGFuZCBzdG0zMmg3YjB4eCBmYW1pbHkgbGluZXMuCisgICogKCopICA6IEZvciBzdG0zMmg3Mnh4eCBhbmQgc3RtMzJoNzN4eHggZmFtaWx5IGxpbmVzIGFuZCByZXF1aXJlcyB0byBlbmFibGUgdGhlIENQVV9GUkVRX0JPT1NUIGZsYXNoIG9wdGlvbiBieXRlLCA1MjBNSFogb3RoZXJ3aXNlLgorICAqICgqKikgOiBGb3Igc3RtMzJoNzR4eHggYW5kIHN0bTMyaDc1eHh4IGZhbWlseSBsaW5lcyBhbmQgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGJlIGNvbm5lY3RlZCBvbiBMRE8gcmVndWxhdG9yIG5vdCBTTVBTLCA0MDBNSFogb3RoZXJ3aXNlLgorICAqICgqKiopOiBGb3Igc3RtMzJoN2EzeHgsIHN0bTMyaDdiM3h4IGFuZCBzdG0zMmg3YjB4eCBmYW1pbHkgbGluZXMuCiAgICoKICAgKi8KIEVycm9yU3RhdHVzIExMX1BMTF9Db25maWdTeXN0ZW1DbG9ja19IU0koTExfVVRJTFNfUExMSW5pdFR5cGVEZWYgKlVUSUxTX1BMTEluaXRTdHJ1Y3QsCkBAIC00OTUsOCArNTc1LDggQEAKICAgKiBAbm90ZSAgIEZ1bmN0aW9uIGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgZm9ybXVsYToKICAgKiAgICAgICAgIC0gUExMIG91dHB1dCBmcmVxdWVuY3kgPSAoKChIU0UgZnJlcXVlbmN5IC8gUExMTSkgKiBQTExOKSAvIFBMTFApCiAgICogICAgICAgICAtIFBMTE06IGVuc3VyZSB0aGF0IHRoZSBWQ08gaW5wdXQgZnJlcXVlbmN5IHJhbmdlcyBmcm9tIDAuOTUgdG8gMi4xMCBNSHogKFBMTFZDT19pbnB1dCA9IEhTRSBmcmVxdWVuY3kgLyBQTExNKQotICAqICAgICAgICAgLSBQTExOOiBlbnN1cmUgdGhhdCB0aGUgVkNPIG91dHB1dCBmcmVxdWVuY3kgaXMgYmV0d2VlbiAxNTAgYW5kIDgzNiBNSHogb3IgMTI4IHRvIDU2MCBNSHooKikgKFBMTFZDT19vdXRwdXQgPSBQTExWQ09faW5wdXQgKiBQTExOKQotICAqICAgICAgICAgLSBQTExQOiBlbnN1cmUgdGhhdCBtYXggZnJlcXVlbmN5IGF0IDQwMDAwMDAwMCBIeiBvciAyODAwMDAwMDAgSHooKikgaXMgcmVhY2hlZCAoUExMVkNPX291dHB1dCAvIFBMTFApCisgICogICAgICAgICAtIFBMTE46IGVuc3VyZSB0aGF0IHRoZSBWQ08gb3V0cHV0IGZyZXF1ZW5jeSBpcyBiZXR3ZWVuIDE1MCBhbmQgODM2IE1IeiBvciAxMjggdG8gNTYwIE1IeigqKiopIChQTExWQ09fb3V0cHV0ID0gUExMVkNPX2lucHV0ICogUExMTikKKyAgKiAgICAgICAgIC0gUExMUDogZW5zdXJlIHRoYXQgbWF4IGZyZXF1ZW5jeSBhdCA1NTAwMDAwMDAgSHooKiksIDQ4MDAwMDAwMCBIeigqKikgb3IgMjgwMDAwMDAwIEh6KCoqKikgaXMgcmVhY2hlZCAoUExMVkNPX291dHB1dCAvIFBMTFApCiAgICogQHBhcmFtICBIU0VGcmVxdWVuY3kgVmFsdWUgYmV0d2VlbiBNaW5fRGF0YSA9IDQwMDAwMDAgYW5kIE1heF9EYXRhID0gNDgwMDAwMDAKICAgKiBAcGFyYW0gIEhTRUJ5cGFzcyBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogICAqICAgICAgICAgQGFyZyBAcmVmIExMX1VUSUxTX0hTRUJZUEFTU19PTgpAQCAtNTA5LDcgKzU4OSw5IEBACiAgICogICAgICAgICAgLSBTVUNDRVNTOiBNYXggZnJlcXVlbmN5IGNvbmZpZ3VyYXRpb24gZG9uZQogICAqICAgICAgICAgIC0gRVJST1I6IE1heCBmcmVxdWVuY3kgY29uZmlndXJhdGlvbiBub3QgZG9uZQogICAqCi0gICogKCopIDogRm9yIHN0bTMyaDdhM3h4LCBzdG0zMmg3YjN4eCBhbmQgc3RtMzJoN2IweHggZmFtaWx5IGxpbmVzLgorICAqICgqKSAgOiBGb3Igc3RtMzJoNzJ4eHggYW5kIHN0bTMyaDczeHh4IGZhbWlseSBsaW5lcyBhbmQgcmVxdWlyZXMgdG8gZW5hYmxlIHRoZSBDUFVfRlJFUV9CT09TVCBmbGFzaCBvcHRpb24gYnl0ZSwgNTIwTUhaIG90aGVyd2lzZS4KKyAgKiAoKiopIDogRm9yIHN0bTMyaDc0eHh4IGFuZCBzdG0zMmg3NXh4eCBmYW1pbHkgbGluZXMgYW5kIHJlcXVpcmVzIHRoZSBib2FyZCB0byBiZSBjb25uZWN0ZWQgb24gTERPIHJlZ3VsYXRvciBub3QgU01QUywgNDAwTUhaIG90aGVyd2lzZS4KKyAgKiAoKioqKTogRm9yIHN0bTMyaDdhM3h4LCBzdG0zMmg3YjN4eCBhbmQgc3RtMzJoN2IweHggZmFtaWx5IGxpbmVzLgogICAqCiAgICovCiBFcnJvclN0YXR1cyBMTF9QTExfQ29uZmlnU3lzdGVtQ2xvY2tfSFNFKHVpbnQzMl90IEhTRUZyZXF1ZW5jeSwgdWludDMyX3QgSFNFQnlwYXNzLApAQCAtNjIyLDkgKzcwNCwxMCBAQAogICB9CiAgIGVsc2UKICAgewotI2lmIChQT1dFUl9ET01BSU5TX05VTUJFUiA9PSAyVSkKKyNpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCkgfHwgKFNUTTMySDdfREVWX0lEID09IDB4NDgzVUwpCiAgICAgaWYoTExfUFdSX0dldFJlZ3VsVm9sdGFnZVNjYWxpbmcoKSA9PSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMCkKICAgICB7CisjaWYgKFNUTTMySDdfREVWX0lEID09IDB4NDgwVUwpCiAgICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTBfTEFURU5DWTVfRlJFUSkgJiYgKEhDTEtfRnJlcXVlbmN5IDw9IFVUSUxTX1NDQUxFMF9MQVRFTkNZNl9GUkVRKSkKICAgICAgIHsKICAgICAgICAgLyogMjY0IDwgSENMSyA8PSAyODAgPT4gNldTICg3IENQVSBjeWNsZXMpICovCkBAIC02NDEsNiArNzI0LDkgQEAKICAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfNDsKICAgICAgIH0KICAgICAgIGVsc2UgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUwX0xBVEVOQ1kyX0ZSRVEpICYmIChIQ0xLX0ZyZXF1ZW5jeSA8PSBVVElMU19TQ0FMRTBfTEFURU5DWTNfRlJFUSkpCisjZWxpZiAoU1RNMzJIN19ERVZfSUQgPT0gMHg0ODNVTCkKKyAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMF9MQVRFTkNZMl9GUkVRKSAmJiAoSENMS19GcmVxdWVuY3kgPD0gVVRJTFNfU0NBTEUwX0xBVEVOQ1kzX0ZSRVEpKQorI2VuZGlmIC8qIFNUTTMySDdfREVWX0lEID09IDB4NDgwVUwgKi8KICAgICAgIHsKICAgICAgICAgLyogMTMyIDwgSENMSyA8PSAxNzYgPT4gM1dTICg0IENQVSBjeWNsZXMpICovCiAgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzM7CkBAIC02NjQsNiArNzUwLDcgQEAKICAgICAgICAgc3RhdHVzID0gRVJST1I7CiAgICAgICB9CiAgICAgfQorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMKQogICAgIGVsc2UgaWYoTExfUFdSX0dldFJlZ3VsVm9sdGFnZVNjYWxpbmcoKSA9PSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMSkKICAgICB7CiAgICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTRfRlJFUSkgJiYgKEhDTEtfRnJlcXVlbmN5IDw9IFVUSUxTX1NDQUxFMV9MQVRFTkNZNV9GUkVRKSkKQEAgLTY4Niw3ICs3NzMsMTIgQEAKICAgICBpZihMTF9QV1JfR2V0UmVndWxWb2x0YWdlU2NhbGluZygpID09IExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUxKQogICAgIHsKICAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFMV9MQVRFTkNZMV9GUkVRKSAmJiAoSENMS19GcmVxdWVuY3kgPD0gVVRJTFNfU0NBTEUxX0xBVEVOQ1kyX0ZSRVEpKQotI2VuZGlmIC8qUE9XRVJfRE9NQUlOU19OVU1CRVIgPT0gMlUqLworI2VuZGlmIC8qIFNUTTMySDdfREVWX0lEID09IDB4NDgwVUwgKi8KKyNlbHNlCisgICAgaWYoTExfUFdSX0dldFJlZ3VsVm9sdGFnZVNjYWxpbmcoKSA9PSBMTF9QV1JfUkVHVV9WT0xUQUdFX1NDQUxFMSkKKyAgICB7CisgICAgICBpZigoSENMS19GcmVxdWVuY3kgPiBVVElMU19TQ0FMRTFfTEFURU5DWTFfRlJFUSkgJiYgKEhDTEtfRnJlcXVlbmN5IDw9IFVUSUxTX1NDQUxFMV9MQVRFTkNZMl9GUkVRKSkKKyNlbmRpZiAvKiBTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMIHx8IFNUTTMySDdfREVWX0lEID09IDB4NDgzVUwgKi8KICAgICAgIHsKICAgICAgICAgLyogMTQwIDwgSENMSyA8PSAyMTAgPT4gMldTICgzIENQVSBjeWNsZXMpICovCiAgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzI7CkBAIC03MDcsNyArNzk5LDggQEAKICAgICB9CiAgICAgZWxzZSBpZihMTF9QV1JfR2V0UmVndWxWb2x0YWdlU2NhbGluZygpID09IExMX1BXUl9SRUdVX1ZPTFRBR0VfU0NBTEUyKQogICAgIHsKLSNpZiAoUE9XRVJfRE9NQUlOU19OVU1CRVIgPT0gMlUpCisjaWYgKFNUTTMySDdfREVWX0lEID09IDB4NDgwVUwpIHx8IChTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKQorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMKQogICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUyX0xBVEVOQ1kzX0ZSRVEpICYmIChIQ0xLX0ZyZXF1ZW5jeSA8PSBVVElMU19TQ0FMRTJfTEFURU5DWTRfRlJFUSkpCiAgICAgICB7CiAgICAgICAgIC8qIDEzNiA8IEhDTEsgPD0gMTYwID0+IDRXUyAoNSBDUFUgY3ljbGVzKSAqLwpAQCAtNzE2LDEyICs4MDksMTUgQEAKICAgICAgIGVsc2UgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUyX0xBVEVOQ1kyX0ZSRVEpICYmIChIQ0xLX0ZyZXF1ZW5jeSA8PSBVVElMU19TQ0FMRTJfTEFURU5DWTNfRlJFUSkpCiAjZWxzZQogICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUyX0xBVEVOQ1kyX0ZSRVEpICYmIChIQ0xLX0ZyZXF1ZW5jeSA8PSBVVElMU19TQ0FMRTJfTEFURU5DWTNfRlJFUSkpCi0jZW5kaWYgLypQT1dFUl9ET01BSU5TX05VTUJFUiA9PSAyVSovCisjZW5kaWYgLyogU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCAqLwogICAgICAgewogICAgICAgICAvKiAxNjUgPCBIQ0xLIDw9IDIyMCA9PiAzV1MgKDQgQ1BVIGN5Y2xlcykgKi8KICAgICAgICAgbGF0ZW5jeSA9IExMX0ZMQVNIX0xBVEVOQ1lfMzsKICAgICAgIH0KICAgICAgIGVsc2UgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUyX0xBVEVOQ1kxX0ZSRVEpICYmIChIQ0xLX0ZyZXF1ZW5jeSA8PSBVVElMU19TQ0FMRTJfTEFURU5DWTJfRlJFUSkpCisjZWxzZQorICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUyX0xBVEVOQ1kxX0ZSRVEpICYmIChIQ0xLX0ZyZXF1ZW5jeSA8PSBVVElMU19TQ0FMRTJfTEFURU5DWTJfRlJFUSkpCisjZW5kaWYgLyogU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCB8fCBTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMICovCiAgICAgICB7CiAgICAgICAgIC8qIDExMCA8IEhDTEsgPD0gMTY1ID0+IDJXUyAoMyBDUFUgY3ljbGVzKSAqLwogICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8yOwpAQCAtNzQyLDcgKzgzOCw4IEBACiAgICAgfQogICAgIGVsc2UgLyogU2NhbGUgMyAqLwogICAgIHsKLSNpZiAoUE9XRVJfRE9NQUlOU19OVU1CRVIgPT0gM1UpCisjaWYgKFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwpIHx8IChTVE0zMkg3X0RFVl9JRCA9PSAweDQ4MFVMKQorI2lmIChTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKQogICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUzX0xBVEVOQ1kzX0ZSRVEpICYmIChIQ0xLX0ZyZXF1ZW5jeSA8PSBVVElMU19TQ0FMRTNfTEFURU5DWTRfRlJFUSkpCiAgICAgICB7CiAgICAgICAgIC8qIDE4MCA8IEhDTEsgPD0gMjI1ID0+IDRXUyAoNSBDUFUgY3ljbGVzKSAqLwpAQCAtNzUxLDEyICs4NDgsMTUgQEAKICAgICAgIGVsc2UgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUzX0xBVEVOQ1kyX0ZSRVEpICYmIChIQ0xLX0ZyZXF1ZW5jeSA8PSBVVElMU19TQ0FMRTNfTEFURU5DWTNfRlJFUSkpCiAjZWxzZQogICAgICAgaWYoKEhDTEtfRnJlcXVlbmN5ID4gVVRJTFNfU0NBTEUzX0xBVEVOQ1kyX0ZSRVEpICYmIChIQ0xLX0ZyZXF1ZW5jeSA8PSBVVElMU19TQ0FMRTNfTEFURU5DWTNfRlJFUSkpCi0jZW5kaWYgLypQT1dFUl9ET01BSU5TX05VTUJFUiA9PSAzVSovCisjZW5kaWYgLypTVE0zMkg3X0RFVl9JRCA9PSAweDQ1MFVMKi8KICAgICAgIHsKICAgICAgICAgLyogMTM1IDwgSENMSyA8PSAxODAgPT4gM1dTICg0IENQVSBjeWNsZXMpICovCiAgICAgICAgIGxhdGVuY3kgPSBMTF9GTEFTSF9MQVRFTkNZXzM7CiAgICAgICB9CiAgICAgICBlbHNlIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFM19MQVRFTkNZMV9GUkVRKSAmJiAoSENMS19GcmVxdWVuY3kgPD0gVVRJTFNfU0NBTEUzX0xBVEVOQ1kyX0ZSRVEpKQorI2Vsc2UKKyAgICAgIGlmKChIQ0xLX0ZyZXF1ZW5jeSA+IFVUSUxTX1NDQUxFM19MQVRFTkNZMV9GUkVRKSAmJiAoSENMS19GcmVxdWVuY3kgPD0gVVRJTFNfU0NBTEUzX0xBVEVOQ1kyX0ZSRVEpKQorI2VuZGlmIC8qIFNUTTMySDdfREVWX0lEID09IDB4NDUwVUwgfHwgU1RNMzJIN19ERVZfSUQgPT0gMHg0ODBVTCAqLwogICAgICAgewogICAgICAgICAvKiA5MCA8IEhDTEsgPD0gMTM1ID0+IDJXUyAoMyBDUFUgY3ljbGVzKSAqLwogICAgICAgICBsYXRlbmN5ID0gTExfRkxBU0hfTEFURU5DWV8yOwpAQCAtNzk1LDcgKzg5NSw2IEBACiAgICAgICAgIHN0YXR1cyA9IEVSUk9SOwogICAgICAgfQogICAgIH0KLQogICB9CiAKICAgcmV0dXJuIHN0YXR1czsKQEAgLTg5MSwxMiArOTkwLDEyIEBACiAgIC8qIENhbGN1bGF0ZSB0aGUgbmV3IEhDTEsgZnJlcXVlbmN5ICovCiAgIG5ld19oY2xrX2ZyZXF1ZW5jeSA9IExMX1JDQ19DQUxDX0hDTEtfRlJFUShTWVNDTEtfRnJlcXVlbmN5LCBVVElMU19DbGtJbml0U3RydWN0LT5BSEJDTEtEaXZpZGVyKTsKIAotICAvKiBJbmNyZWFzaW5nIHRoZSBudW1iZXIgb2Ygd2FpdCBzdGF0ZXMgYmVjYXVzZSBvZiBoaWdoZXIgQ1BVIGZyZXF1ZW5jeSAqLworICAgIC8qIEluY3JlYXNpbmcgdGhlIG51bWJlciBvZiB3YWl0IHN0YXRlcyBiZWNhdXNlIG9mIGhpZ2hlciBDUFUgZnJlcXVlbmN5ICovCiAgIGlmIChTeXN0ZW1EMkNsb2NrIDwgbmV3X2hjbGtfZnJlcXVlbmN5KQotICB7CisgICAgewogICAgIC8qIFNldCBGTEFTSCBsYXRlbmN5IHRvIGhpZ2hlc3QgbGF0ZW5jeSAqLwogICAgIHN0YXR1cyA9IExMX1NldEZsYXNoTGF0ZW5jeShuZXdfaGNsa19mcmVxdWVuY3kpOwotICB9CisgICAgfQogCiAgIC8qIFVwZGF0ZSBzeXN0ZW0gY2xvY2sgY29uZmlndXJhdGlvbiAqLwogICBpZihzdGF0dXMgPT0gU1VDQ0VTUykKQEAgLTkzNCwyNyArMTAzMywyNyBAQAogICAgIExMX1JDQ19TZXRBUEI0UHJlc2NhbGVyKFVUSUxTX0Nsa0luaXRTdHJ1Y3QtPkFQQjRDTEtEaXZpZGVyKTsKIAogICAgIC8qIERlY3JlYXNpbmcgdGhlIG51bWJlciBvZiB3YWl0IHN0YXRlcyBiZWNhdXNlIG9mIGxvd2VyIENQVSBmcmVxdWVuY3kgKi8KLSAgICBpZiAoU3lzdGVtRDJDbG9jayA+IG5ld19oY2xrX2ZyZXF1ZW5jeSkKLSAgICB7Ci0gICAgICAvKiBTZXQgRkxBU0ggbGF0ZW5jeSB0byBsb3dlc3QgbGF0ZW5jeSAqLwotICAgICAgc3RhdHVzID0gTExfU2V0Rmxhc2hMYXRlbmN5KG5ld19oY2xrX2ZyZXF1ZW5jeSk7Ci0gICAgfQorICBpZiAoU3lzdGVtRDJDbG9jayA+IG5ld19oY2xrX2ZyZXF1ZW5jeSkKKyAgeworICAgIC8qIFNldCBGTEFTSCBsYXRlbmN5IHRvIGxvd2VzdCBsYXRlbmN5ICovCisgICAgc3RhdHVzID0gTExfU2V0Rmxhc2hMYXRlbmN5KG5ld19oY2xrX2ZyZXF1ZW5jeSk7CisgIH0KIAotICAgIC8qIFVwZGF0ZSB0aGUgU3lzdGVtRDJDbG9jayBnbG9iYWwgdmFyaWFibGUgKi8KKyAgICAgIC8qIFVwZGF0ZSB0aGUgU3lzdGVtRDJDbG9jayBnbG9iYWwgdmFyaWFibGUgKi8KICNpZiBkZWZpbmVkKFJDQ19EMUNGR1JfSFBSRSkKLSAgICBTeXN0ZW1EMkNsb2NrID0gKFNZU0NMS19GcmVxdWVuY3kgPj4gKChEMUNvcmVQcmVzY1RhYmxlWyhSQ0MtPkQxQ0ZHUiAmIFJDQ19EMUNGR1JfSFBSRSk+PiBSQ0NfRDFDRkdSX0hQUkVfUG9zXSkgJiAweDFGVSkpOworICAgICAgU3lzdGVtRDJDbG9jayA9IChTWVNDTEtfRnJlcXVlbmN5ID4+ICgoRDFDb3JlUHJlc2NUYWJsZVsoUkNDLT5EMUNGR1IgJiBSQ0NfRDFDRkdSX0hQUkUpPj4gUkNDX0QxQ0ZHUl9IUFJFX1Bvc10pICYgMHgxRlUpKTsKICNlbHNlCi0gICAgU3lzdGVtRDJDbG9jayA9IChTWVNDTEtfRnJlcXVlbmN5ID4+ICgoRDFDb3JlUHJlc2NUYWJsZVsoUkNDLT5DRENGR1IxICYgUkNDX0NEQ0ZHUjFfSFBSRSk+PiBSQ0NfQ0RDRkdSMV9IUFJFX1Bvc10pICYgMHgxRlUpKTsKKyAgICAgIFN5c3RlbUQyQ2xvY2sgPSAoU1lTQ0xLX0ZyZXF1ZW5jeSA+PiAoKEQxQ29yZVByZXNjVGFibGVbKFJDQy0+Q0RDRkdSMSAmIFJDQ19DRENGR1IxX0hQUkUpPj4gUkNDX0NEQ0ZHUjFfSFBSRV9Qb3NdKSAmIDB4MUZVKSk7CiAjZW5kaWYKIAotICAgIC8qIFVwZGF0ZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUgKi8KKyAgICAgIC8qIFVwZGF0ZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUgKi8KICNpZiBkZWZpbmVkKERVQUxfQ09SRSkgJiYgZGVmaW5lZChDT1JFX0NNNCkKLSAgICBMTF9TZXRTeXN0ZW1Db3JlQ2xvY2soU3lzdGVtRDJDbG9jayk7CisgICAgICBMTF9TZXRTeXN0ZW1Db3JlQ2xvY2soU3lzdGVtRDJDbG9jayk7CiAjZWxzZQotICAgIExMX1NldFN5c3RlbUNvcmVDbG9jayhTWVNDTEtfRnJlcXVlbmN5KTsKKyAgICAgIExMX1NldFN5c3RlbUNvcmVDbG9jayhTWVNDTEtfRnJlcXVlbmN5KTsKICNlbmRpZiAvKiBEVUFMX0NPUkUgJiYgQ09SRV9DTTQgKi8KIAotICB9CisgICAgfQogCiAKICAgcmV0dXJuIHN0YXR1czsK