ZGlmZiAtLWdpdCBhL2F1dG8vc291cmNlcyBiL2F1dG8vc291cmNlcwppbmRleCA5YzZlYzE5Li5jNjFkODNhIDEwMDY0NAotLS0gYS9hdXRvL3NvdXJjZXMKKysrIGIvYXV0by9zb3VyY2VzCkBAIC0xODEsNiArMTgxLDcgQEAKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfc29ja2V0LmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9vcy5oIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfZ3VpLmggXAorICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9ndWlfcmVzb3VyY2VzLmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmgiCiAKIFdJTjMyX0NPTkZJRz1zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCkBAIC0yMDEsNyArMjAyLDcgQEAKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jIFwKICAgICAgICAgICAgIHNyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYyIKIAotTkdYX1dJTjMyX0lDT05TPSJzcmMvb3Mvd2luMzIvbmdpbnguaWNvIHNyYy9vcy93aW4zMi90cmF5LmljbyIKK05HWF9XSU4zMl9JQ09OUz0ic3JjL29zL3dpbjMyL25naW54LmljbyBzcmMvb3Mvd2luMzIvbmdpbnhfdHJheS5pY28iCiBOR1hfV0lOMzJfUkM9InNyYy9vcy93aW4zMi9uZ2lueC5yYyIKIAogCmRpZmYgLS1naXQgYS9kb2NzL3htbC9jaGFuZ2VfbG9nX2NvbmYueG1sIGIvZG9jcy94bWwvY2hhbmdlX2xvZ19jb25mLnhtbAppbmRleCA5YjEyMTg0Li40YWJiNzc5IDEwMDY0NAotLS0gYS9kb2NzL3htbC9jaGFuZ2VfbG9nX2NvbmYueG1sCisrKyBiL2RvY3MveG1sL2NoYW5nZV9sb2dfY29uZi54bWwKQEAgLTMsNyArMyw3IEBACiAKIDxjb25maWd1cmF0aW9uPgogCi08bGVuZ3RoPjc4PC9sZW5ndGg+Cis8bGVuZ3RoPjc2PC9sZW5ndGg+CiAKIDxzdGFydD4gICAgKikgPC9zdGFydD4KIDxpbmRlbnQ+ICAgICAgIDwvaW5kZW50PgpkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCAxYTljNDgwLi5lYjQ2NmQ4IDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtNSw2ICs1LDg2IEBACiA8Y2hhbmdlX2xvZyBsaW5rPSIvbmdpbngvY2hhbmdlcy5odG1sIiBwYXRoPSIvbmdpbngvIiByb290PSIuLiIKICAgICAgICAgICAgIHRpdGxlPSJuZ2lueCI+CiAKKzx0aXRsZSBsYW5nPSJydSI+6drNxc7FzsnRINcgbmdpbng8L3RpdGxlPgorPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgorCisKKzxjaGFuZ2VzIHZlcj0iMC4xLjE2IiBkYXRlPSIyNS4wMS4yMDA1Ij4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxdPMySDP1NfF1CDQxdLFxMHXwczT0SBjaHVuayfBzcksINTPINDSySDawdDSz9PFIEhFQUQg19nEwdfBzNPRCivawdfF0tvBwN3JyiBjaHVuay4gCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgcmVzcG9uc2Ugd2VyZSB0cmFuc2ZlcnJlZCBieSBjaHVua3MsIHRoZW4gb24gdGhlIEhFQUQgcmVxdWVzdAordGhlIGZpbmFsIGNodW5rIHdhcyBpc3N1ZWQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor2sHHz8zP18/LICJDb25uZWN0aW9uOiBrZWVwLWFsaXZlIiDX2cTB18HM09EsIMTB1sUgxdPMySDEydLFy9TJ18EKK2tlZXBhbGl2ZV90aW1lb3V0INrB0NLF3cHMwSDJ09DPzNjaz9fBzsnFIGtlZXAtYWxpdmUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIkNvbm5lY3Rpb246IGtlZXAtYWxpdmUiIGhlYWRlciB3ZXJlIGlzc3VlZCwgZXZlbiBpZiB0aGUKK2tlZXBhbGl2ZV90aW1lb3V0IGRlcmVjdGl2ZSBmb3JiYWRlIHRoZSBrZWVwLWFsaXZlIHVzZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivP28nCy8kg1yDNz8TVzMUgbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUg19na2dfBzMkgc2VnbWVudGF0aW9uIGZhdWx0LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIGVycm9ycyBpbiB0aGUgbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUgY2F1c2VkIHRoZSBzZWdtZW50YXRpb24gZmF1bHRzLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DSySDJ09DPzNjaz9fBzsnJIFNTTCDT1sHU2cogz9TXxdQgzc/HINDF0sXEwdfB1NjT0SDOxSDEzyDLz87DwS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBjb21wcmVzc2VkIHJlc3BvbnNlIGVuY3J5cHRlZCBieSBTU0wgbWF5IG5vdCB0cmFuc2ZlcnJlZCBjb21wbGV0ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivP0MPJySBUQ1BfTk9ERUxBWSwgVENQX05PUFNVSCDJIFRDUF9DT1JLLCDT0MXDycbJ3s7ZxSDEzNEgVENQINPPy8XUz9csCivOxSDJ09DPzNja1cDU09EgxMzRIHVuaXggZG9tYWluINPPy8XUz9cuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgVENQLXNwZWNpZmljIFRDUF9OT0RFTEFZLCBUQ1BfTk9QU1VILCBhbmQgVENQX0NPUksgb3B0aW9ucywKK2FyZSBub3QgdXNlZCBmb3IgdGhlIHVuaXggZG9tYWluIHNvY2tldHMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSByZXdyaXRlINDPxMTF0tbJ18HF1CDQxdLF2sHQydPZ18HOycUgwdLH1c3FztTP1y4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSByZXdyaXRlIGRpcmVjdGl2ZSBzdXBwb3J0cyB0aGUgYWdydW1lbnRzIHJld3JpdGluZy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivOwSDawdDSz9MgUE9TVCDTINrBx8/Mz9fLz80gIkNvbnRlbnQtTGVuZ3RoOiAwIiDXz9rX0sHdwczT0SDP1NfF1CA0MDA7CivP28nCy8Eg0M/R18nMwdPYINcgMC4xLjE0LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIHJlc3BvbnNlIGNvZGUgNDAwIHdhcyByZXR1cmVuZCBmb3IgdGhlIFBPU1QgcmVxdWVzdCB3aXRoIHRoZQorIkNvbnRlbnQtTGVuZ3RoOiAwIiBoZWFkZXI7CitidWcgYXBwZWFyZWQgaW4gMC4xLjE0LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKwogCiA8Y2hhbmdlcyB2ZXI9IjAuMS4xNSIgZGF0ZT0iMTkuMDEuMjAwNSI+CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDJkMThiYzkuLjBiOWQ5OTAgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS4xNSIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuMTYiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX05FV1BJRF9FWFQgICAgICIubmV3YmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCmluZGV4IDNjNzg5OGEuLjE5YTU2N2YgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYworKysgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKQEAgLTExMSwxMCArMTExLDYgQEAKICAgICAgICAgICogICAgTkdYX0NPTkZfRklMRV9ET05FICAgIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgZG9uZQogICAgICAgICAgKi8KIAotI2lmIDAKLW5neF9sb2dfZGVidWcoY2YtPmxvZywgInRva2VuICVkIiBfIHJjKTsKLSNlbmRpZgotCiAgICAgICAgIGlmIChyYyA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNzMsOSArMTY5LDcgQEAKICAgICAgICAgICAgICAgICB7CiAKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAxOwotI2lmIDAKLW5neF9sb2dfZGVidWcoY2YtPmxvZywgImNvbW1hbmQgJyVzJyIgXyBjbWQtPm5hbWUuZGF0YSk7Ci0jZW5kaWYKKwogICAgICAgICAgICAgICAgICAgICAvKiBpcyB0aGUgZGlyZWN0aXZlJ3MgbG9jYXRpb24gcmlnaHQgPyAqLwogCiAgICAgICAgICAgICAgICAgICAgIGlmICgoY21kLT50eXBlICYgY2YtPmNtZF90eXBlKSA9PSAwKSB7CkBAIC0yODQsMTAgKzI3OCw2IEBACiAKICAgICAgICAgICAgICAgICAgICAgcnYgPSBjbWQtPnNldChjZiwgY21kLCBjb25mKTsKIAotI2lmIDAKLW5neF9sb2dfZGVidWcoY2YtPmxvZywgInJ2OiAlZCIgXyBydik7Ci0jZW5kaWYKLQogICAgICAgICAgICAgICAgICAgICBpZiAocnYgPT0gTkdYX0NPTkZfT0spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zNjYsMTAgKzM1Niw2IEBACiAgICAgYiA9IGNmLT5jb25mX2ZpbGUtPmJ1ZmZlcjsKICAgICBzdGFydCA9IGItPnBvczsKIAotI2lmIDAKLW5neF9sb2dfZGVidWcoY2YtPmxvZywgIlRPS0VOIFNUQVJUIik7Ci0jZW5kaWYKLQogICAgIGZvciAoIDs7ICkgewogCiAgICAgICAgIGlmIChiLT5wb3MgPj0gYi0+bGFzdCkgewpAQCAtMzk4LDEyICszODQsNiBAQAogCiAgICAgICAgIGNoID0gKmItPnBvcysrOwogCi0jaWYgMAotbmd4X2xvZ19kZWJ1ZyhjZi0+bG9nLCAiJWQ6JWQ6JWQ6JWQ6JWQgJyVjJyIgXwotICAgICAgICAgICAgICBsYXN0X3NwYWNlIF8gbmVlZF9zcGFjZSBfCi0gICAgICAgICAgICAgIHF1b3RlZCBfIHNfcXVvdGVkIF8gZF9xdW90ZWQgXyBjaCk7Ci0jZW5kaWYKLQogICAgICAgICBpZiAoY2ggPT0gTEYpIHsKICAgICAgICAgICAgIGNmLT5jb25mX2ZpbGUtPmxpbmUrKzsKIApAQCAtNTc0LDEwICs1NTQsNiBAQAogICAgICAgICAgICAgICAgICpkc3QgPSAnXDAnOwogICAgICAgICAgICAgICAgIHdvcmQtPmxlbiA9IGxlbjsKIAotI2lmIDAKLW5neF9sb2dfZGVidWcoY2YtPmxvZywgIkZPVU5EICVkOiclcyciIF8gd29yZC0+bGVuIF8gd29yZC0+ZGF0YSk7Ci0jZW5kaWYKLQogICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnOycpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwppbmRleCA2NGJlMWVjLi5iM2ZhNWRlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCisrKyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKQEAgLTEzLDggKzEzLDggQEAKIAogCiBuZ3hfbGlzdGVuaW5nX3QgKm5neF9saXN0ZW5pbmdfaW5ldF9zdHJlYW1fc29ja2V0KG5neF9jb25mX3QgKmNmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2FkZHJfdCBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3BvcnRfdCBwb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fcG9ydF90IHBvcnQpCiB7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgbGVuOwogICAgIG5neF9saXN0ZW5pbmdfdCAgICAgKmxzOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaCBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKaW5kZXggMjA1ODlhNS4uNTQ3OWZhYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAorKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCkBAIC02NCw5ICs2NCwxNiBAQAogCiAKIHR5cGVkZWYgZW51bSB7Ci0gICAgIE5HWF9UQ1BfTk9QVVNIX0RJU0FCTEVEID0gLTEsCisgICAgIE5HWF9UQ1BfTk9ERUxBWV9VTlNFVCA9IDAsCisgICAgIE5HWF9UQ1BfTk9ERUxBWV9TRVQsCisgICAgIE5HWF9UQ1BfTk9ERUxBWV9ESVNBQkxFRAorfSBuZ3hfY29ubmVjdGlvbl90Y3Bfbm9kZWxheV9lOworCisKK3R5cGVkZWYgZW51bSB7CiAgICAgIE5HWF9UQ1BfTk9QVVNIX1VOU0VUID0gMCwKLSAgICAgTkdYX1RDUF9OT1BVU0hfU0VUCisgICAgIE5HWF9UQ1BfTk9QVVNIX1NFVCwKKyAgICAgTkdYX1RDUF9OT1BVU0hfRElTQUJMRUQKIH0gbmd4X2Nvbm5lY3Rpb25fdGNwX25vcHVzaF9lOwogCiAKQEAgLTEwOSw3ICsxMTYsNyBAQAogCiAgICAgbmd4X3VpbnRfdCAgICAgICAgICBudW1iZXI7CiAKLSAgICB1bnNpZ25lZCAgICAgICAgICAgIGxvZ19lcnJvcjoyOyAgLyogbmd4X2Nvbm5lY3Rpb25fbG9nX2Vycm9yX2UgKi8KKyAgICB1bnNpZ25lZCAgICAgICAgICAgIGxvZ19lcnJvcjoyOyAgICAgLyogbmd4X2Nvbm5lY3Rpb25fbG9nX2Vycm9yX2UgKi8KIAogICAgIHVuc2lnbmVkICAgICAgICAgICAgYnVmZmVyZWQ6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgIHNpbmdsZV9jb25uZWN0aW9uOjE7CkBAIC0xMTgsOCArMTI1LDggQEAKIAogICAgIHVuc2lnbmVkICAgICAgICAgICAgc2VuZGZpbGU6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgIHNuZGxvd2F0OjE7Ci0gICAgdW5zaWduZWQgICAgICAgICAgICB0Y3Bfbm9kZWxheToxOwotICAgIHNpZ25lZCAgICAgICAgICAgICAgdGNwX25vcHVzaDoyOworICAgIHVuc2lnbmVkICAgICAgICAgICAgdGNwX25vZGVsYXk6MjsgICAvKiBuZ3hfY29ubmVjdGlvbl90Y3Bfbm9kZWxheV9lICovCisgICAgdW5zaWduZWQgICAgICAgICAgICB0Y3Bfbm9wdXNoOjI7ICAgIC8qIG5neF9jb25uZWN0aW9uX3RjcF9ub3B1c2hfZSAqLwogCiAjaWYgKE5HWF9IQVZFX0lPQ1ApCiAgICAgdW5zaWduZWQgICAgICAgICAgICBhY2NlcHRfY29udGV4dF91cGRhdGVkOjE7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfbG9nLmMgYi9zcmMvY29yZS9uZ3hfbG9nLmMKaW5kZXggYjcxOThjZC4uZDljNWM1OSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2xvZy5jCisrKyBiL3NyYy9jb3JlL25neF9sb2cuYwpAQCAtODYsOSArODYsMTUgQEAKICAgICAvKiBwaWQjdGlkICovCiAgICAgcCA9IG5neF9zcHJpbnRmKHAsICIlUCMiIE5HWF9USURfVF9GTVQgIjogIiwgbmd4X2xvZ19waWQsIG5neF9sb2dfdGlkKTsKIAorICAgIGlmIChsb2ctPmNvbm5lY3Rpb24pIHsKKyAgICAgICAgcCA9IG5neF9zcHJpbnRmKHAsICIqJXVpICIsIGxvZy0+Y29ubmVjdGlvbik7CisgICAgfQorCisjaWYgMAogICAgIGlmIChsb2ctPmRhdGEgJiYgKihpbnQgKikgbG9nLT5kYXRhICE9IC0xKSB7CiAgICAgICAgIHAgPSBuZ3hfc3ByaW50ZihwLCAiKiV1ZCAiLCAqKHVfaW50ICopIGxvZy0+ZGF0YSk7CiAgICAgfQorI2VuZGlmCiAKICNpZiAoTkdYX0hBVkVfVkFSSUFESUNfTUFDUk9TKQogCkBAIC0xMzcsNyArMTQzLDcgQEAKICAgICB9CiAKICAgICBpZiAobGV2ZWwgIT0gTkdYX0xPR19ERUJVRyAmJiBsb2ctPmhhbmRsZXIpIHsKLSAgICAgICAgcCA9IGxvZy0+aGFuZGxlcihsb2ctPmRhdGEsIHAsIGxhc3QgLSBwKTsKKyAgICAgICAgcCA9IGxvZy0+aGFuZGxlcihsb2csIHAsIGxhc3QgLSBwKTsKICAgICB9CiAKICAgICBuZ3hfbG9nX3dyaXRlKGxvZywgZXJyc3RyLCBwIC0gZXJyc3RyKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9sb2cuaCBiL3NyYy9jb3JlL25neF9sb2cuaAppbmRleCBjNTRjMTg3Li41ODg4MzdmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfbG9nLmgKKysrIGIvc3JjL2NvcmUvbmd4X2xvZy5oCkBAIC00MCwxNCArNDAsMjUgQEAKICNkZWZpbmUgTkdYX0xPR19ERUJVR19BTEwgICAgICAgICAweDdmZmZmZmYwCiAKIAotdHlwZWRlZiB1X2NoYXIgKigqbmd4X2xvZ19oYW5kbGVyX3B0KSAodm9pZCAqY3R4LCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7Cit0eXBlZGVmIHVfY2hhciAqKCpuZ3hfbG9nX2hhbmRsZXJfcHQpIChuZ3hfbG9nX3QgKmxvZywgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pOwogCiAKIHN0cnVjdCBuZ3hfbG9nX3MgewogICAgIG5neF91aW50X3QgICAgICAgICAgIGxvZ19sZXZlbDsKICAgICBuZ3hfb3Blbl9maWxlX3QgICAgICpmaWxlOwotICAgIHZvaWQgICAgICAgICAgICAgICAgKmRhdGE7CisKKyAgICBuZ3hfdWludF90ICAgICAgICAgICBjb25uZWN0aW9uOworCiAgICAgbmd4X2xvZ19oYW5kbGVyX3B0ICAgaGFuZGxlcjsKKyAgICB2b2lkICAgICAgICAgICAgICAgICpkYXRhOworCisgICAgLyoKKyAgICAgKiB3ZSBkZWNsYXJlICJhY3Rpb24iIGFzICJjaGFyICoiIGJlY2F1c2UgdGhlIGFjdGlvbnMgYXJlIHVzdWFsbHkKKyAgICAgKiB0aGUgc3RhdGljIHN0cmluZ3MgYW5kIGluIHRoZSAidV9jaGFyICoiIGNhc2Ugd2UgaGF2ZSB0byBvdmVycmlkZQorICAgICAqIHRoZWlyIHR5cGVzIGFsbCB0aGUgdGltZQorICAgICAqLworCisgICAgY2hhciAgICAgICAgICAgICAgICAqYWN0aW9uOwogfTsKIAogCkBAIC02MCwyNCArNzEsMzIgQEAKIAogI2RlZmluZSBOR1hfSEFWRV9WQVJJQURJQ19NQUNST1MgIDEKIAotI2RlZmluZSBuZ3hfbG9nX2Vycm9yKGxldmVsLCBsb2csIGFyZ3MuLi4pIFwKKyNkZWZpbmUgbmd4X2xvZ19lcnJvcihsZXZlbCwgbG9nLCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKGxvZy0+bG9nX2xldmVsID49IGxldmVsKSBuZ3hfbG9nX2Vycm9yX2NvcmUobGV2ZWwsIGxvZywgYXJncykKIAogdm9pZCBuZ3hfbG9nX2Vycm9yX2NvcmUobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKKyNkZWZpbmUgbmd4X2xvZ19kZWJ1ZyhsZXZlbCwgbG9nLCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbmd4X2xvZ19lcnJvcl9jb3JlKE5HWF9MT0dfREVCVUcsIGxvZywgYXJncykKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2VsaWYgKE5HWF9IQVZFX0M5OV9WQVJJQURJQ19NQUNST1MpCiAKICNkZWZpbmUgTkdYX0hBVkVfVkFSSUFESUNfTUFDUk9TICAxCiAKLSNkZWZpbmUgbmd4X2xvZ19lcnJvcihsZXZlbCwgbG9nLCAuLi4pIFwKKyNkZWZpbmUgbmd4X2xvZ19lcnJvcihsZXZlbCwgbG9nLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKGxvZy0+bG9nX2xldmVsID49IGxldmVsKSBuZ3hfbG9nX2Vycm9yX2NvcmUobGV2ZWwsIGxvZywgX19WQV9BUkdTX18pCiAKIHZvaWQgbmd4X2xvZ19lcnJvcl9jb3JlKG5neF91aW50X3QgbGV2ZWwsIG5neF9sb2dfdCAqbG9nLCBuZ3hfZXJyX3QgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pOwogCisjZGVmaW5lIG5neF9sb2dfZGVidWcobGV2ZWwsIGxvZywgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5neF9sb2dfZXJyb3JfY29yZShOR1hfTE9HX0RFQlVHLCBsb2csIF9fVkFfQVJHU19fKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZWxzZSAvKiBOTyBWQVJJQURJQyBNQUNST1MgKi8KQEAgLTEwMCw4MCArMTE5LDU5IEBACiAKICNpZiAoTkdYX0hBVkVfVkFSSUFESUNfTUFDUk9TKQogCi0jZGVmaW5lIG5neF9sb2dfZGVidWcwKGxldmVsLCBsb2csIGVyciwgZm10KSBcCi0gICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpIFwKLSAgICAgICAgbmd4X2xvZ19lcnJvcl9jb3JlKE5HWF9MT0dfREVCVUcsIGxvZywgZXJyLCBmbXQpCi0KLSNkZWZpbmUgbmd4X2xvZ19kZWJ1ZzEobGV2ZWwsIGxvZywgZXJyLCBmbXQsIGFyZzEpIFwKLSAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgXAotICAgICAgICBuZ3hfbG9nX2Vycm9yX2NvcmUoTkdYX0xPR19ERUJVRywgbG9nLCBlcnIsIGZtdCwgYXJnMSkKLQotI2RlZmluZSBuZ3hfbG9nX2RlYnVnMihsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMikgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSBcCi0gICAgICAgIG5neF9sb2dfZXJyb3JfY29yZShOR1hfTE9HX0RFQlVHLCBsb2csIGVyciwgZm10LCBhcmcxLCBhcmcyKQotCi0jZGVmaW5lIG5neF9sb2dfZGVidWczKGxldmVsLCBsb2csIGVyciwgZm10LCBhcmcxLCBhcmcyLCBhcmczKSBcCi0gICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpIFwKLSAgICAgICAgbmd4X2xvZ19lcnJvcl9jb3JlKE5HWF9MT0dfREVCVUcsIGxvZywgZXJyLCBmbXQsIGFyZzEsIGFyZzIsIGFyZzMpCi0KLSNkZWZpbmUgbmd4X2xvZ19kZWJ1ZzQobGV2ZWwsIGxvZywgZXJyLCBmbXQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpIFwKLSAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgXAotICAgICAgICBuZ3hfbG9nX2Vycm9yX2NvcmUoTkdYX0xPR19ERUJVRywgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkKLQotI2RlZmluZSBuZ3hfbG9nX2RlYnVnNShsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSBcCi0gICAgICAgIG5neF9sb2dfZXJyb3JfY29yZShOR1hfTE9HX0RFQlVHLCBsb2csIGVyciwgZm10LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KQotCi0jZGVmaW5lIG5neF9sb2dfZGVidWc2KGxldmVsLCBsb2csIGVyciwgZm10LCBcCi0gICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpIFwKLSAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgXAotICAgICAgICBuZ3hfbG9nX2Vycm9yX2NvcmUoTkdYX0xPR19ERUJVRywgbG9nLCBlcnIsIGZtdCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNikKLQotI2RlZmluZSBuZ3hfbG9nX2RlYnVnNyhsZXZlbCwgbG9nLCBlcnIsIGZtdCwgXAotICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3KSBcCi0gICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpIFwKLSAgICAgICAgbmd4X2xvZ19lcnJvcl9jb3JlKE5HWF9MT0dfREVCVUcsIGxvZywgZXJyLCBmbXQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcpCisjZGVmaW5lIG5neF9sb2dfZGVidWcwICBuZ3hfbG9nX2RlYnVnCisjZGVmaW5lIG5neF9sb2dfZGVidWcxICBuZ3hfbG9nX2RlYnVnCisjZGVmaW5lIG5neF9sb2dfZGVidWcyICBuZ3hfbG9nX2RlYnVnCisjZGVmaW5lIG5neF9sb2dfZGVidWczICBuZ3hfbG9nX2RlYnVnCisjZGVmaW5lIG5neF9sb2dfZGVidWc0ICBuZ3hfbG9nX2RlYnVnCisjZGVmaW5lIG5neF9sb2dfZGVidWc1ICBuZ3hfbG9nX2RlYnVnCisjZGVmaW5lIG5neF9sb2dfZGVidWc2ICBuZ3hfbG9nX2RlYnVnCisjZGVmaW5lIG5neF9sb2dfZGVidWc3ICBuZ3hfbG9nX2RlYnVnCisjZGVmaW5lIG5neF9sb2dfZGVidWc4ICBuZ3hfbG9nX2RlYnVnCiAKICNlbHNlIC8qIE5PIFZBUklBRElDIE1BQ1JPUyAqLwogCi0jZGVmaW5lIG5neF9sb2dfZGVidWcwKGxldmVsLCBsb2csIGVyciwgZm10KSBcCi0gICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpIFwKKyNkZWZpbmUgbmd4X2xvZ19kZWJ1ZzAobGV2ZWwsIGxvZywgZXJyLCBmbXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgbmd4X2xvZ19kZWJ1Z19jb3JlKGxvZywgZXJyLCBmbXQpCiAKLSNkZWZpbmUgbmd4X2xvZ19kZWJ1ZzEobGV2ZWwsIGxvZywgZXJyLCBmbXQsIGFyZzEpIFwKLSAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgXAorI2RlZmluZSBuZ3hfbG9nX2RlYnVnMShsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgYXJnMSkKIAotI2RlZmluZSBuZ3hfbG9nX2RlYnVnMihsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMikgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSBcCisjZGVmaW5lIG5neF9sb2dfZGVidWcyKGxldmVsLCBsb2csIGVyciwgZm10LCBhcmcxLCBhcmcyKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIG5neF9sb2dfZGVidWdfY29yZShsb2csIGVyciwgZm10LCBhcmcxLCBhcmcyKQogCi0jZGVmaW5lIG5neF9sb2dfZGVidWczKGxldmVsLCBsb2csIGVyciwgZm10LCBhcmcxLCBhcmcyLCBhcmczKSBcCi0gICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpIFwKKyNkZWZpbmUgbmd4X2xvZ19kZWJ1ZzMobGV2ZWwsIGxvZywgZXJyLCBmbXQsIGFyZzEsIGFyZzIsIGFyZzMpICAgICAgICAgICAgICAgIFwKKyAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgbmd4X2xvZ19kZWJ1Z19jb3JlKGxvZywgZXJyLCBmbXQsIGFyZzEsIGFyZzIsIGFyZzMpCiAKLSNkZWZpbmUgbmd4X2xvZ19kZWJ1ZzQobGV2ZWwsIGxvZywgZXJyLCBmbXQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpIFwKLSAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgXAorI2RlZmluZSBuZ3hfbG9nX2RlYnVnNChsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkgICAgICAgICAgXAorICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkKIAotI2RlZmluZSBuZ3hfbG9nX2RlYnVnNShsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSBcCisjZGVmaW5lIG5neF9sb2dfZGVidWc1KGxldmVsLCBsb2csIGVyciwgZm10LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KSAgICBcCisgICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIG5neF9sb2dfZGVidWdfY29yZShsb2csIGVyciwgZm10LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KQogCi0jZGVmaW5lIG5neF9sb2dfZGVidWc2KGxldmVsLCBsb2csIGVyciwgZm10LCBcCi0gICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpIFwKLSAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgXAorI2RlZmluZSBuZ3hfbG9nX2RlYnVnNihsZXZlbCwgbG9nLCBlcnIsIGZtdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KSAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNikKIAotI2RlZmluZSBuZ3hfbG9nX2RlYnVnNyhsZXZlbCwgbG9nLCBlcnIsIGZtdCwgXAotICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3KSBcCi0gICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpIFwKLSAgICAgICAgbmd4X2xvZ19kZWJ1Z19jb3JlKGxvZywgZXJyLCBmbXQsIFwKKyNkZWZpbmUgbmd4X2xvZ19kZWJ1ZzcobGV2ZWwsIGxvZywgZXJyLCBmbXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNykgICAgICAgICAgICAgIFwKKyAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbmd4X2xvZ19kZWJ1Z19jb3JlKGxvZywgZXJyLCBmbXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNykKIAorI2RlZmluZSBuZ3hfbG9nX2RlYnVnOChsZXZlbCwgbG9nLCBlcnIsIGZtdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4KSAgICAgICAgXAorICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4KQorCiAjZW5kaWYKIAogI2Vsc2UgLyogTk8gTkdYX0RFQlVHICovCkBAIC0xODcsNiArMTg1LDggQEAKICNkZWZpbmUgbmd4X2xvZ19kZWJ1ZzYobGV2ZWwsIGxvZywgZXJyLCBmbXQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpCiAjZGVmaW5lIG5neF9sb2dfZGVidWc3KGxldmVsLCBsb2csIGVyciwgZm10LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZzYsIGFyZzcpCisjZGVmaW5lIG5neF9sb2dfZGVidWc4KGxldmVsLCBsb2csIGVyciwgZm10LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgIGFyZzYsIGFyZzcsIGFyZzgpCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMgYi9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMKaW5kZXggMmI4ZGEyMi4uNTU3ZGQyMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jCisrKyBiL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYwpAQCAtODAsNyArODAsMTcgQEAKICAgICAgICAgICAgIGlmIChic2l6ZSA9PSAwICYmICFuZ3hfYnVmX3NwZWNpYWwoY3R4LT5pbi0+YnVmKSkgewogCiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjdHgtPnBvb2wtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ6ZXJvIHNpemUgYnVmIGluIG91dHB1dCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInplcm8gc2l6ZSBidWYgaW4gb3V0cHV0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0OiVkIHI6JWQgZjolZCAlcCAlcC0lcCAlcCAlTy0lTyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmluLT5idWYtPnRlbXBvcmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+aW4tPmJ1Zi0+cmVjeWNsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmluLT5idWYtPmluX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmluLT5idWYtPnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5pbi0+YnVmLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmluLT5idWYtPmxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmluLT5idWYtPmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmluLT5idWYtPmZpbGVfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5pbi0+YnVmLT5maWxlX2xhc3QpOwogCiAgICAgICAgICAgICAgICAgbmd4X2RlYnVnX3BvaW50KCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKaW5kZXggMzQ3NzVmMi4uYWE2MWRmNyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCiBpbnQgbmd4X2RldnBvbGxfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewotICAgIGludCAgICAgICAgICAgICAgICAgZXZlbnRzOworICAgIGludCAgICAgICAgICAgICAgICAgZXZlbnRzLCByZXZlbnRzOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgaTsKICAgICBuZ3hfdWludF90ICAgICAgICAgIGosIGxvY2ssIGFjY2VwdF9sb2NrLCBleHBpcmU7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICBuOwpAQCAtNDYzLDMwICs0NjMsNDAgQEAKICAgICAgICAgfQogI2VuZGlmCiAKKyAgICAgICAgcmV2ZW50cyA9IGV2ZW50X2xpc3RbaV0ucmV2ZW50czsKKwogICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiZGV2cG9sbDogZmQ6JWQsIGV2OiUwNFhkLCByZXY6JTA0WGQiLAotICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmZkLAotICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmV2ZW50cywgZXZlbnRfbGlzdFtpXS5yZXZlbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5mZCwgZXZlbnRfbGlzdFtpXS5ldmVudHMsIHJldmVudHMpOwogCi0gICAgICAgIGlmIChldmVudF9saXN0W2ldLnJldmVudHMgJiAoUE9MTEVSUnxQT0xMSFVQfFBPTExOVkFMKSkgeworICAgICAgICBpZiAocmV2ZW50cyAmIChQT0xMRVJSfFBPTExIVVB8UE9MTE5WQUwpKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJpb2N0bChEUF9QT0xMKSBlcnJvciBmZDolZCBldjolMDRYZCByZXY6JTA0WGQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmV2ZW50cywgZXZlbnRfbGlzdFtpXS5yZXZlbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5mZCwgZXZlbnRfbGlzdFtpXS5ldmVudHMsIHJldmVudHMpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGV2ZW50X2xpc3RbaV0ucmV2ZW50cyAmIH4oUE9MTElOfFBPTExPVVR8UE9MTEVSUnxQT0xMSFVQfFBPTExOVkFMKSkKLSAgICAgICAgeworICAgICAgICBpZiAocmV2ZW50cyAmIH4oUE9MTElOfFBPTExPVVR8UE9MTEVSUnxQT0xMSFVQfFBPTExOVkFMKSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyYW5nZSBpb2N0bChEUF9QT0xMKSBldmVudHMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQ6JWQgZXY6JTA0WGQgcmV2OiUwNFhkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5ldmVudHMsIGV2ZW50X2xpc3RbaV0ucmV2ZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2xpc3RbaV0uZmQsIGV2ZW50X2xpc3RbaV0uZXZlbnRzLCByZXZlbnRzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgocmV2ZW50cyAmIChQT0xMRVJSfFBPTExIVVB8UE9MTE5WQUwpKQorICAgICAgICAgICAgICYmIChyZXZlbnRzICYgKFBPTExJTnxQT0xMT1VUKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGlmIHRoZSBlcnJvciBldmVudHMgd2VyZSByZXR1cm5lZCB3aXRob3V0IFBPTExJTiBvciBQT0xMT1VULAorICAgICAgICAgICAgICogdGhlbiBhZGQgdGhlc2UgZmxhZ3MgdG8gaGFuZGxlIHRoZSBldmVudHMgYXQgbGVhc3QgaW4gb25lCisgICAgICAgICAgICAgKiBhY3RpdmUgaGFuZGxlciAKKyAgICAgICAgICAgICAqLworCisgICAgICAgICAgICByZXZlbnRzIHw9IFBPTExJTnxQT0xMT1VUOwogICAgICAgICB9CiAKICAgICAgICAgd2V2ID0gYy0+d3JpdGU7CiAKLSAgICAgICAgaWYgKChldmVudF9saXN0W2ldLmV2ZW50cyAmIChQT0xMT1VUfFBPTExFUlJ8UE9MTEhVUCkpICYmIHdldi0+YWN0aXZlKSB7CisgICAgICAgIGlmICgocmV2ZW50cyAmIFBPTExPVVQpICYmIHdldi0+YWN0aXZlKSB7CiAgICAgICAgICAgICB3ZXYtPnJlYWR5ID0gMTsKIAogICAgICAgICAgICAgaWYgKCFuZ3hfdGhyZWFkZWQgJiYgIW5neF9hY2NlcHRfbXV0ZXhfaGVsZCkgewpAQCAtNTA1LDcgKzUxNSw3IEBACiAKICAgICAgICAgcmV2ID0gYy0+cmVhZDsKIAotICAgICAgICBpZiAoKGV2ZW50X2xpc3RbaV0uZXZlbnRzICYgKFBPTExJTnxQT0xMRVJSfFBPTExIVVApKSAmJiByZXYtPmFjdGl2ZSkgeworICAgICAgICBpZiAoKHJldmVudHMgJiBQT0xMSU4pICYmIHJldi0+YWN0aXZlKSB7CiAgICAgICAgICAgICByZXYtPnJlYWR5ID0gMTsKIAogICAgICAgICAgICAgaWYgKCFuZ3hfdGhyZWFkZWQgJiYgIW5neF9hY2NlcHRfbXV0ZXhfaGVsZCkgewpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jCmluZGV4IDkwN2Q2YWUuLmFmMjc4MTggMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMKQEAgLTE5OCwzNyArMTk4LDQwIEBACiAKIHN0YXRpYyBpbnQgbmd4X2Vwb2xsX2FkZF9ldmVudChuZ3hfZXZlbnRfdCAqZXYsIGludCBldmVudCwgdV9pbnQgZmxhZ3MpCiB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgb3AsIHByZXY7CisgICAgaW50ICAgICAgICAgICAgICAgICAgb3A7CisgICAgdWludDMyX3QgICAgICAgICAgICAgZXZlbnRzLCBwcmV2OwogICAgIG5neF9ldmVudF90ICAgICAgICAgKmU7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAqYzsKICAgICBzdHJ1Y3QgZXBvbGxfZXZlbnQgICBlZTsKIAogICAgIGMgPSBldi0+ZGF0YTsKIAorICAgIGV2ZW50cyA9ICh1aW50MzJfdCkgZXZlbnQ7CisKICAgICBpZiAoZXZlbnQgPT0gTkdYX1JFQURfRVZFTlQpIHsKICAgICAgICAgZSA9IGMtPndyaXRlOwogICAgICAgICBwcmV2ID0gRVBPTExPVVQ7CiAjaWYgKE5HWF9SRUFEX0VWRU5UICE9IEVQT0xMSU4pCi0gICAgICAgIGV2ZW50ID0gRVBPTExJTjsKKyAgICAgICAgZXZlbnRzID0gRVBPTExJTjsKICNlbmRpZgogCiAgICAgfSBlbHNlIHsKICAgICAgICAgZSA9IGMtPnJlYWQ7CiAgICAgICAgIHByZXYgPSBFUE9MTElOOwogI2lmIChOR1hfV1JJVEVfRVZFTlQgIT0gRVBPTExPVVQpCi0gICAgICAgIGV2ZW50ID0gRVBPTExPVVQ7CisgICAgICAgIGV2ZW50cyA9IEVQT0xMT1VUOwogI2VuZGlmCiAgICAgfQogCiAgICAgaWYgKGUtPmFjdGl2ZSkgewogICAgICAgICBvcCA9IEVQT0xMX0NUTF9NT0Q7Ci0gICAgICAgIGV2ZW50IHw9IHByZXY7CisgICAgICAgIGV2ZW50cyB8PSBwcmV2OwogCiAgICAgfSBlbHNlIHsKICAgICAgICAgb3AgPSBFUE9MTF9DVExfQUREOwogICAgIH0KIAotICAgIGVlLmV2ZW50cyA9IGV2ZW50IHwgZmxhZ3M7CisgICAgZWUuZXZlbnRzID0gZXZlbnRzIHwgZmxhZ3M7CiAgICAgZWUuZGF0YS51NjQgPSAodWludHB0cl90KSBjIHwgZXYtPmluc3RhbmNlOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKQEAgLTI1MiwxNCArMjU1LDE1IEBACiAKIHN0YXRpYyBpbnQgbmd4X2Vwb2xsX2RlbF9ldmVudChuZ3hfZXZlbnRfdCAqZXYsIGludCBldmVudCwgdV9pbnQgZmxhZ3MpCiB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgb3AsIHByZXY7CisgICAgaW50ICAgICAgICAgICAgICAgICAgb3A7CisgICAgdWludDMyX3QgICAgICAgICAgICAgcHJldjsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAgICplOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAgKmM7CiAgICAgc3RydWN0IGVwb2xsX2V2ZW50ICAgZWU7CiAKICAgICAvKgotICAgICAqIHdoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjbG9zZWQgdGhlIGVwb2xsIGF1dG9tYXRpY2FsbHkgZGVsZXRlcwotICAgICAqIGl0IGZyb20gaXRzIHF1ZXVlIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGRlbGV0ZSBleHBsaWNpdHkgdGhlIGV2ZW50CisgICAgICogd2hlbiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNsb3NlZCwgdGhlIGVwb2xsIGF1dG9tYXRpY2FsbHkgZGVsZXRlcworICAgICAqIGl0IGZyb20gaXRzIHF1ZXVlLCBzbyB3ZSBkbyBub3QgbmVlZCB0byBkZWxldGUgZXhwbGljaXR5IHRoZSBldmVudAogICAgICAqIGJlZm9yZSB0aGUgY2xvc2luZyB0aGUgZmlsZSBkZXNjcmlwdG9yCiAgICAgICovCiAKQEAgLTM3MCw2ICszNzQsNyBAQAogewogICAgIGludCAgICAgICAgICAgICAgICBldmVudHM7CiAgICAgc2l6ZV90ICAgICAgICAgICAgIG47CisgICAgdWludDMyX3QgICAgICAgICAgIHJldmVudHM7CiAgICAgbmd4X2ludF90ICAgICAgICAgIGluc3RhbmNlLCBpOwogICAgIG5neF91aW50X3QgICAgICAgICBsb2NrLCBhY2NlcHRfbG9jaywgZXhwaXJlOwogICAgIG5neF9lcnJfdCAgICAgICAgICBlcnI7CkBAIC01MjEsMjcgKzUyNiw0MCBAQAogICAgICAgICBsb2cgPSBjLT5sb2cgPyBjLT5sb2cgOiBjeWNsZS0+bG9nOwogI2VuZGlmCiAKKyAgICAgICAgcmV2ZW50cyA9IGV2ZW50X2xpc3RbaV0uZXZlbnRzOworCiAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgImVwb2xsOiBmZDolZCBldjolMDRYRCBkOiVwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgYy0+ZmQsIGV2ZW50X2xpc3RbaV0uZXZlbnRzLCBldmVudF9saXN0W2ldLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICBjLT5mZCwgcmV2ZW50cywgZXZlbnRfbGlzdFtpXS5kYXRhKTsKIAotICAgICAgICBpZiAoZXZlbnRfbGlzdFtpXS5ldmVudHMgJiAoRVBPTExFUlJ8RVBPTExIVVApKSB7CisgICAgICAgIGlmIChyZXZlbnRzICYgKEVQT0xMRVJSfEVQT0xMSFVQKSkgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgbG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImVwb2xsX3dhaXQoKSBlcnJvciBvbiBmZDolZCBldjolMDRYRCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5mZCwgZXZlbnRfbGlzdFtpXS5ldmVudHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZmQsIHJldmVudHMpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGV2ZW50X2xpc3RbaV0uZXZlbnRzICYgfihFUE9MTElOfEVQT0xMT1VUfEVQT0xMRVJSfEVQT0xMSFVQKSkgeworICAgICAgICBpZiAocmV2ZW50cyAmIH4oRVBPTExJTnxFUE9MTE9VVHxFUE9MTEVSUnxFUE9MTEhVUCkpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyYW5nZSBlcG9sbF93YWl0KCkgZXZlbnRzIGZkOiVkIGV2OiUwNFhEIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZmQsIGV2ZW50X2xpc3RbaV0uZXZlbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZmQsIHJldmVudHMpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChyZXZlbnRzICYgKEVQT0xMRVJSfEVQT0xMSFVQKSkKKyAgICAgICAgICAgICAmJiAocmV2ZW50cyAmIChFUE9MTElOfEVQT0xMT1VUKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGlmIHRoZSBlcnJvciBldmVudHMgd2VyZSByZXR1cm5lZCB3aXRob3V0IEVQT0xMSU4gb3IgRVBPTExPVVQsCisgICAgICAgICAgICAgKiB0aGVuIGFkZCB0aGVzZSBmbGFncyB0byBoYW5kbGUgdGhlIGV2ZW50cyBhdCBsZWFzdCBpbiBvbmUKKyAgICAgICAgICAgICAqIGFjdGl2ZSBoYW5kbGVyCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgcmV2ZW50cyB8PSBFUE9MTElOfEVQT0xMT1VUOwogICAgICAgICB9CiAKICAgICAgICAgd2V2ID0gYy0+d3JpdGU7CiAKLSAgICAgICAgaWYgKChldmVudF9saXN0W2ldLmV2ZW50cyAmIChFUE9MTE9VVHxFUE9MTEVSUnxFUE9MTEhVUCkpCi0gICAgICAgICAgICAmJiB3ZXYtPmFjdGl2ZSkKLSAgICAgICAgeworICAgICAgICBpZiAoKHJldmVudHMgJiBFUE9MTE9VVCkgJiYgd2V2LT5hY3RpdmUpIHsKKwogICAgICAgICAgICAgaWYgKG5neF90aHJlYWRlZCkgewogICAgICAgICAgICAgICAgIHdldi0+cG9zdGVkX3JlYWR5ID0gMTsKICAgICAgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudCh3ZXYpOwpAQCAtNTY0LDkgKzU4Miw4IEBACiAgICAgICAgICAqIGlmIHRoZSBhY2NlcHQgZXZlbnQgaXMgdGhlIGxhc3Qgb25lLgogICAgICAgICAgKi8KIAotICAgICAgICBpZiAoKGV2ZW50X2xpc3RbaV0uZXZlbnRzICYgKEVQT0xMSU58RVBPTExFUlJ8RVBPTExIVVApKQotICAgICAgICAgICAgJiYgcmV2LT5hY3RpdmUpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKChyZXZlbnRzICYgRVBPTExJTikgJiYgcmV2LT5hY3RpdmUpIHsKKwogICAgICAgICAgICAgaWYgKG5neF90aHJlYWRlZCAmJiAhcmV2LT5hY2NlcHQpIHsKICAgICAgICAgICAgICAgICByZXYtPnBvc3RlZF9yZWFkeSA9IDE7CiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9wb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMKaW5kZXggMThmNzJjMy4uMTI3MjZiNSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiBzdGF0aWMgbmd4X2ludF90IG5neF9wb2xsX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgIHJlYWR5OworICAgIGludCAgICAgICAgICAgICAgICAgcmVhZHksIHJldmVudHM7CiAgICAgbmd4X2ludF90ICAgICAgICAgICBpLCBucmVhZHk7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICBuLCBmb3VuZCwgbG9jaywgZXhwaXJlOwogICAgIG5neF9tc2VjX3QgICAgICAgICAgdGltZXI7CkBAIC0zNzgsMzMgKzM3OCwzMCBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IG5ldmVudHMgJiYgcmVhZHk7IGkrKykgewogCisgICAgICAgIHJldmVudHMgPSBldmVudF9saXN0W2ldLnJldmVudHM7CisKICNpZiAwCiAgICAgICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJwb2xsOiAlZDogZmQ6JWQgZXY6JTA0WGQgcmV2OiUwNFhkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgaSwgZXZlbnRfbGlzdFtpXS5mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5ldmVudHMsIGV2ZW50X2xpc3RbaV0ucmV2ZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgIGksIGV2ZW50X2xpc3RbaV0uZmQsIGV2ZW50X2xpc3RbaV0uZXZlbnRzLCByZXZlbnRzKTsKICNlbHNlCi0gICAgICAgIGlmIChldmVudF9saXN0W2ldLnJldmVudHMpIHsKKyAgICAgICAgaWYgKHJldmVudHMpIHsKICAgICAgICAgICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9sbDogJWQ6IGZkOiVkIGV2OiUwNFhkIHJldjolMDRYZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBldmVudF9saXN0W2ldLmZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5ldmVudHMsIGV2ZW50X2xpc3RbaV0ucmV2ZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBldmVudF9saXN0W2ldLmZkLCBldmVudF9saXN0W2ldLmV2ZW50cywgcmV2ZW50cyk7CiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIGlmIChldmVudF9saXN0W2ldLnJldmVudHMgJiBQT0xMTlZBTCkgeworICAgICAgICBpZiAocmV2ZW50cyAmIFBPTExOVkFMKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb2xsKCkgZXJyb3IgZmQ6JWQgZXY6JTA0WGQgcmV2OiUwNFhkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5ldmVudHMsIGV2ZW50X2xpc3RbaV0ucmV2ZW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2xpc3RbaV0uZmQsIGV2ZW50X2xpc3RbaV0uZXZlbnRzLCByZXZlbnRzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChldmVudF9saXN0W2ldLnJldmVudHMgJiB+KFBPTExJTnxQT0xMT1VUfFBPTExFUlJ8UE9MTEhVUHxQT0xMTlZBTCkpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKHJldmVudHMgJiB+KFBPTExJTnxQT0xMT1VUfFBPTExFUlJ8UE9MTEhVUHxQT0xMTlZBTCkpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmFuZ2UgcG9sbCgpIGV2ZW50cyBmZDolZCBldjolMDRYZCByZXY6JTA0WGQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmV2ZW50cywgZXZlbnRfbGlzdFtpXS5yZXZlbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5mZCwgZXZlbnRfbGlzdFtpXS5ldmVudHMsIHJldmVudHMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGV2ZW50X2xpc3RbaV0uZmQgPT0gLTEpIHsKQEAgLTQ0Nyw5ICs0NDQsMjEgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKChyZXZlbnRzICYgKFBPTExFUlJ8UE9MTEhVUHxQT0xMTlZBTCkpCisgICAgICAgICAgICAgJiYgKHJldmVudHMgJiAoUE9MTElOfFBPTExPVVQpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogaWYgdGhlIGVycm9yIGV2ZW50cyB3ZXJlIHJldHVybmVkIHdpdGhvdXQgUE9MTElOIG9yIFBPTExPVVQsCisgICAgICAgICAgICAgKiB0aGVuIGFkZCB0aGVzZSBmbGFncyB0byBoYW5kbGUgdGhlIGV2ZW50cyBhdCBsZWFzdCBpbiBvbmUKKyAgICAgICAgICAgICAqIGFjdGl2ZSBoYW5kbGVyCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgcmV2ZW50cyB8PSBQT0xMSU58UE9MTE9VVDsKKyAgICAgICAgfQorCiAgICAgICAgIGZvdW5kID0gMDsKIAotICAgICAgICBpZiAoZXZlbnRfbGlzdFtpXS5yZXZlbnRzICYgKFBPTExJTnxQT0xMRVJSfFBPTExIVVB8UE9MTE5WQUwpKSB7CisgICAgICAgIGlmIChyZXZlbnRzICYgUE9MTElOKSB7CiAgICAgICAgICAgICBmb3VuZCA9IDE7CiAKICAgICAgICAgICAgIGV2ID0gYy0+cmVhZDsKQEAgLTQ3NCw3ICs0ODMsNyBAQAogI2VuZGlmCiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZXZlbnRfbGlzdFtpXS5yZXZlbnRzICYgKFBPTExPVVR8UE9MTEVSUnxQT0xMSFVQfFBPTExOVkFMKSkgeworICAgICAgICBpZiAocmV2ZW50cyAmIFBPTExPVVQpIHsKICAgICAgICAgICAgIGZvdW5kID0gMTsKICAgICAgICAgICAgIGV2ID0gYy0+d3JpdGU7CiAgICAgICAgICAgICBldi0+cmVhZHkgPSAxOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudC5jIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCmluZGV4IDk5NjAyMjUuLmQ3OWU1ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgIH0KIAogCi0gICAgLyogVE9ETzogMTI4IGlzIGNhY2hlIGxpbmUgc2l6ZSAqLworICAgIC8qIFRPRE86IGFkanVzdCBjYWNoZSBsaW5lIHNpemUsIDEyOCBpcyBQNCBjYWNoZSBsaW5lIHNpemUgKi8KIAogICAgIHNpemUgPSAxMjggICAgICAgICAgICAvKiBuZ3hfYWNjZXB0X211dGV4ICovCiAgICAgICAgICAgICsgMTI4OyAgICAgICAgIC8qIG5neF9jb25uZWN0aW9uX2NvdW50ZXIgKi8KZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCmluZGV4IDcwYTdjODkuLmQ4MDlhNzcgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYwpAQCAtMTAsMjkgKzEwLDIyIEBACiAjaW5jbHVkZSA8bmdpbnguaD4KIAogCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50ICAgICAgICAgZmxhZzsKLSAgICBuZ3hfc3RyX3QgICpuYW1lOwotfSBuZ3hfYWNjZXB0X2xvZ19jdHhfdDsKLQotCiBzdGF0aWMgdm9pZCBuZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KG5neF9zb2NrZXRfdCBzLCBuZ3hfbG9nX3QgKmxvZyk7Ci1zdGF0aWMgdV9jaGFyICpuZ3hfYWNjZXB0X2xvZ19lcnJvcih2b2lkICpkYXRhLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CitzdGF0aWMgdV9jaGFyICpuZ3hfYWNjZXB0X2xvZ19lcnJvcihuZ3hfbG9nX3QgKmxvZywgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pOwogCiAKIHZvaWQgbmd4X2V2ZW50X2FjY2VwdChuZ3hfZXZlbnRfdCAqZXYpCiB7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICBpbnN0YW5jZSwgYWNjZXB0ZWQ7Ci0gICAgc29ja2xlbl90ICAgICAgICAgICAgICBsZW47Ci0gICAgc3RydWN0IHNvY2thZGRyICAgICAgICpzYTsKLSAgICBuZ3hfZXJyX3QgICAgICAgICAgICAgIGVycjsKLSAgICBuZ3hfbG9nX3QgICAgICAgICAgICAgKmxvZzsKLSAgICBuZ3hfcG9vbF90ICAgICAgICAgICAgKnBvb2w7Ci0gICAgbmd4X3NvY2tldF90ICAgICAgICAgICBzOwotICAgIG5neF9ldmVudF90ICAgICAgICAgICAqcmV2LCAqd2V2OwotICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAqYywgKmxzOwotICAgIG5neF9ldmVudF9jb25mX3QgICAgICAqZWNmOwotICAgIG5neF9hY2NlcHRfbG9nX2N0eF90ICAqY3R4OworICAgIG5neF91aW50X3QgICAgICAgICBpbnN0YW5jZSwgYWNjZXB0ZWQ7CisgICAgc29ja2xlbl90ICAgICAgICAgIGxlbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgICAqc2E7CisgICAgbmd4X2Vycl90ICAgICAgICAgIGVycjsKKyAgICBuZ3hfbG9nX3QgICAgICAgICAqbG9nOworICAgIG5neF9wb29sX3QgICAgICAgICpwb29sOworICAgIG5neF9zb2NrZXRfdCAgICAgICBzOworICAgIG5neF9ldmVudF90ICAgICAgICpyZXYsICp3ZXY7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmMsICpsczsKKyAgICBuZ3hfZXZlbnRfY29uZl90ICAqZWNmOwogCiAgICAgZWNmID0gbmd4X2V2ZW50X2dldF9jb25mKG5neF9jeWNsZS0+Y29uZl9jdHgsIG5neF9ldmVudF9jb3JlX21vZHVsZSk7CiAKQEAgLTgxLDE2ICs3NCw3IEBACiAgICAgICAgIG5neF9tZW1jcHkobG9nLCBscy0+bG9nLCBzaXplb2Yobmd4X2xvZ190KSk7CiAgICAgICAgIHBvb2wtPmxvZyA9IGxvZzsKIAotICAgICAgICBpZiAoIShjdHggPSBuZ3hfcGFsbG9jKHBvb2wsIHNpemVvZihuZ3hfYWNjZXB0X2xvZ19jdHhfdCkpKSkgewotICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChwb29sKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIC0xIGRpc2FibGVzIHRoZSBjb25uZWN0aW9uIG51bWJlciBsb2dnaW5nICovCi0gICAgICAgIGN0eC0+ZmxhZyA9IC0xOwotICAgICAgICBjdHgtPm5hbWUgPSAmbHMtPmxpc3RlbmluZy0+YWRkcl90ZXh0OwotCi0gICAgICAgIGxvZy0+ZGF0YSA9IGN0eDsKKyAgICAgICAgbG9nLT5kYXRhID0gJmxzLT5saXN0ZW5pbmctPmFkZHJfdGV4dDsKICAgICAgICAgbG9nLT5oYW5kbGVyID0gbmd4X2FjY2VwdF9sb2dfZXJyb3I7CiAKICAgICAgICAgbGVuID0gbHMtPmxpc3RlbmluZy0+c29ja2xlbjsKQEAgLTQ2Nyw5ICs0NTEsNyBAQAogfQogCiAKLXN0YXRpYyB1X2NoYXIgKm5neF9hY2NlcHRfbG9nX2Vycm9yKHZvaWQgKmRhdGEsIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQorc3RhdGljIHVfY2hhciAqbmd4X2FjY2VwdF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotICAgIG5neF9hY2NlcHRfbG9nX2N0eF90ICAqY3R4ID0gZGF0YTsKLQotICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIgd2hpbGUgYWNjZXB0KCkgb24gJVYiLCBjdHgtPm5hbWUpOworICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIgd2hpbGUgYWNjZXB0KCkgb24gJVYiLCBsb2ctPmRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwppbmRleCA3NTI3N2E3Li4xYTNlOGY4IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwpAQCAtOCwxMSArOCw4IEBACiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KICNpbmNsdWRlIDxuZ3hfZXZlbnQuaD4KICNpbmNsdWRlIDxuZ3hfZXZlbnRfY29ubmVjdC5oPgotI2luY2x1ZGUgPG5naW54Lmg+CiAKIAotLyogQUZfSU5FVCBvbmx5ICovCi0KIG5neF9pbnRfdCBuZ3hfZXZlbnRfY29ubmVjdF9wZWVyKG5neF9wZWVyX2Nvbm5lY3Rpb25fdCAqcGMpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgcmM7CkBAIC0xNzAsNiArMTY3LDcgQEAKICAgICB9CiAKICNpZiAoTkdYX1dJTjMyKQorCiAgICAgLyoKICAgICAgKiBXaW5zb2NrIGFzc2lnbmVzIGEgc29ja2V0IG51bWJlciBkaXZpc2libGUgYnkgNAogICAgICAqIHNvIHRvIGZpbmQgYSBjb25uZWN0aW9uIHdlIGRpdmlkZSBhIHNvY2tldCBudW1iZXIgYnkgNC4KQEAgLTIzMiw2ICsyMzAsMTEgQEAKIAogICAgIGMtPmxvZ19lcnJvciA9IHBjLT5sb2dfZXJyb3I7CiAKKyAgICBpZiAocGVlci0+c29ja2FkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisgICAgICAgIGMtPnRjcF9ub3B1c2ggPSBOR1hfVENQX05PUFVTSF9ESVNBQkxFRDsKKyAgICAgICAgYy0+dGNwX25vZGVsYXkgPSBOR1hfVENQX05PREVMQVlfRElTQUJMRUQ7CisgICAgfQorCiAgICAgcGMtPmNvbm5lY3Rpb24gPSBjOwogCiAgICAgLyoKQEAgLTI4OSw2ICsyOTIsOSBAQAogICAgICAgICB9CiAgCiAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfRVZFTlQsIHBjLT5sb2csIDAsICJjb25uZWN0ZWQiKTsKKworICAgICAgICB3ZXYtPnJlYWR5ID0gMTsKKwogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYwppbmRleCBhZDY3OTMxLi4wMjA2YmY4IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYwpAQCAtMTcsOCArMTcsNiBAQAogc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfZXZlbnRfcGlwZV9yZW1vdmVfc2hhZG93X2xpbmtzKG5neF9idWZfdCAqYnVmKTsKIHN0YXRpYyBuZ3hfaW5saW5lIHZvaWQgbmd4X2V2ZW50X3BpcGVfZnJlZV9zaGFkb3dfcmF3X2J1ZihuZ3hfY2hhaW5fdCAqKmZyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2J1Zl90ICpidWYpOwotc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfZXZlbnRfcGlwZV9hZGRfZnJlZV9idWYobmd4X2NoYWluX3QgKipjaGFpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jaGFpbl90ICpjbCk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9ldmVudF9waXBlX2RyYWluX2NoYWlucyhuZ3hfZXZlbnRfcGlwZV90ICpwKTsKIAogCkBAIC0yOSw2ICsyNyw4IEBACiAKICAgICBmb3IgKCA7OyApIHsKICAgICAgICAgaWYgKGRvX3dyaXRlKSB7CisgICAgICAgICAgICBwLT5sb2ctPmFjdGlvbiA9ICJzZW5kaW5nIHRvIGNsaWVudCI7CisKICAgICAgICAgICAgIGlmIChuZ3hfZXZlbnRfcGlwZV93cml0ZV90b19kb3duc3RyZWFtKHApID09IE5HWF9BQk9SVCkgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQUJPUlQ7CiAgICAgICAgICAgICB9CkBAIC0zNyw2ICszNyw4IEBACiAgICAgICAgIHAtPnJlYWQgPSAwOwogICAgICAgICBwLT51cHN0cmVhbV9ibG9ja2VkID0gMDsKIAorICAgICAgICBwLT5sb2ctPmFjdGlvbiA9ICJyZWFkaW5nIHVwc3RyZWFtIjsKKwogICAgICAgICBpZiAobmd4X2V2ZW50X3BpcGVfcmVhZF91cHN0cmVhbShwKSA9PSBOR1hfQUJPUlQpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfQUJPUlQ7CiAgICAgICAgIH0KQEAgLTc3LDEyICs3OSwxMiBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfZXZlbnRfcGlwZV9yZWFkX3Vwc3RyZWFtKG5neF9ldmVudF9waXBlX3QgKnApCitzdGF0aWMgbmd4X2ludF90IG5neF9ldmVudF9waXBlX3JlYWRfdXBzdHJlYW0obmd4X2V2ZW50X3BpcGVfdCAqcCkKIHsKICAgICBzc2l6ZV90ICAgICAgIG4sIHNpemU7CiAgICAgbmd4X2ludF90ICAgICByYzsKICAgICBuZ3hfYnVmX3QgICAgKmI7Ci0gICAgbmd4X2NoYWluX3QgICpjaGFpbiwgKmNsLCAqdGw7CisgICAgbmd4X2NoYWluX3QgICpjaGFpbiwgKmNsOwogCiAgICAgaWYgKHAtPnVwc3RyZWFtX2VvZiB8fCBwLT51cHN0cmVhbV9lcnJvciB8fCBwLT51cHN0cmVhbV9kb25lKSB7CiAgICAgICAgIHJldHVybiBOR1hfT0s7CkBAIC0xNjksOCArMTcxLDEyIEBACiAKICAgICAgICAgICAgICAgICBwLT5hbGxvY2F0ZWQrKzsKIAotICAgICAgICAgICAgICAgIG5neF9hbGxvY19saW5rX2FuZF9zZXRfYnVmKHRsLCBiLCBwLT5wb29sLCBOR1hfQUJPUlQpOwotICAgICAgICAgICAgICAgIGNoYWluID0gdGw7CisgICAgICAgICAgICAgICAgaWYgKCEoY2hhaW4gPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhwLT5wb29sKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BQk9SVDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjaGFpbi0+YnVmID0gYjsKKyAgICAgICAgICAgICAgICBjaGFpbi0+bmV4dCA9IE5VTEw7CiAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXAtPmNhY2hhYmxlICYmIHAtPmRvd25zdHJlYW0tPndyaXRlLT5yZWFkeSkgewogCkBAIC0xOTEsNyArMTk3LDcgQEAKICAgICAgICAgICAgIHsKIAogICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogaWYgaXQncyBhbGxvd2VkIHRoZW4gc2F2ZSBzb21lIGJ1ZnMgZnJvbSByLT5pbgorICAgICAgICAgICAgICAgICAqIGlmIGl0IGlzIGFsbG93ZWQsIHRoZW4gc2F2ZSBzb21lIGJ1ZnMgZnJvbSByLT5pbgogICAgICAgICAgICAgICAgICAqIHRvIGEgdGVtcG9yYXJ5IGZpbGUsIGFuZCBhZGQgdGhlbSB0byBhIHItPm91dCBjaGFpbgogICAgICAgICAgICAgICAgICAqLwogCkBAIC0yMjcsNyArMjMzLDcgQEAKIAogICAgICAgICAgICAgfSBlbHNlIHsKIAotICAgICAgICAgICAgICAgIC8qIGlmIHRoZXJlJ3JlIG5vIGJ1ZnMgdG8gcmVhZCBpbiB0aGVuIGRpc2FibGUgYSBsZXZlbCBldmVudCAqLworICAgICAgICAgICAgICAgIC8qIHRoZXJlIGFyZSBubyBidWZzIHRvIHJlYWQgaW4gKi8KIAogICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gcGlwZSBidWZzIHRvIHJlYWQgaW4iKTsKQEAgLTI5OCw1MiArMzA0LDU2IEBACiAKICNpZiAoTkdYX0RFQlVHKQogCi0gICAgaWYgKHAtPmluIHx8IHAtPmJ1c3kgfHwgcC0+ZnJlZV9yYXdfYnVmcykgewotICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsICJwaXBlIGJ1ZiIpOwotICAgIH0KLQogICAgIGZvciAoY2wgPSBwLT5idXN5OyBjbDsgY2wgPSBjbC0+bmV4dCkgewotICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBidXN5ICVwLCBwb3MgJXAsIHNpemU6ICV6IiwKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzgoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAicGlwZSBidWYgYnVzeSBzOiVkIHQ6JWQgZjolZCAiCisgICAgICAgICAgICAgICAgICAgICAgICIlcCwgcG9zICVwLCBzaXplOiAleiAiCisgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOiAlTywgc2l6ZTogJXoiLAorICAgICAgICAgICAgICAgICAgICAgICAoY2wtPmJ1Zi0+c2hhZG93ID8gMSA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT50ZW1wb3JhcnksIGNsLT5idWYtPmluX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnN0YXJ0LCBjbC0+YnVmLT5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3MpOworICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5sYXN0IC0gY2wtPmJ1Zi0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+ZmlsZV9sYXN0IC0gY2wtPmJ1Zi0+ZmlsZV9wb3MpOwogICAgIH0KIAogICAgIGZvciAoY2wgPSBwLT5vdXQ7IGNsOyBjbCA9IGNsLT5uZXh0KSB7Ci0gICAgICAgIGlmIChjbC0+YnVmLT5pbl9maWxlICYmIGNsLT5idWYtPnRlbXBvcmFyeSkgewotICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzUoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgYnVmIG91dCBzaGFkb3cgJXAsIHBvcyAlcCwgc2l6ZTogJXogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6ICVPLCBzaXplOiAleiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5zdGFydCwgY2wtPmJ1Zi0+cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmZpbGVfcG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+ZmlsZV9sYXN0IC0gY2wtPmJ1Zi0+ZmlsZV9wb3MpOwotCi0gICAgICAgIH0gZWxzZSBpZiAoY2wtPmJ1Zi0+aW5fZmlsZSkgewotICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgYnVmIG91dCBmaWxlICVPLCBzaXplOiAleiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlX3BvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmZpbGVfbGFzdCAtIGNsLT5idWYtPmZpbGVfcG9zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBvdXQgJXAsIHBvcyAlcCwgc2l6ZTogJXoiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsIGNsLT5idWYtPnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3MpOwotICAgICAgICB9CisgICAgICAgIG5neF9sb2dfZGVidWc4KE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgYnVmIG91dCAgczolZCB0OiVkIGY6JWQgIgorICAgICAgICAgICAgICAgICAgICAgICAiJXAsIHBvcyAlcCwgc2l6ZTogJXogIgorICAgICAgICAgICAgICAgICAgICAgICAiZmlsZTogJU8sIHNpemU6ICV6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNsLT5idWYtPnNoYWRvdyA/IDEgOiAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+dGVtcG9yYXJ5LCBjbC0+YnVmLT5pbl9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5zdGFydCwgY2wtPmJ1Zi0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5sYXN0IC0gY2wtPmJ1Zi0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+ZmlsZV9sYXN0IC0gY2wtPmJ1Zi0+ZmlsZV9wb3MpOwogICAgIH0KIAogICAgIGZvciAoY2wgPSBwLT5pbjsgY2w7IGNsID0gY2wtPm5leHQpIHsKLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAicGlwZSBidWYgaW4gJXAsIHBvcyAlcCwgc2l6ZTogJXoiLAorICAgICAgICBuZ3hfbG9nX2RlYnVnOChOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBpbiAgIHM6JWQgdDolZCBmOiVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgIiVwLCBwb3MgJXAsIHNpemU6ICV6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6ICVPLCBzaXplOiAleiIsCisgICAgICAgICAgICAgICAgICAgICAgIChjbC0+YnVmLT5zaGFkb3cgPyAxIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnRlbXBvcmFyeSwgY2wtPmJ1Zi0+aW5fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsIGNsLT5idWYtPnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmZpbGVfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlX2xhc3QgLSBjbC0+YnVmLT5maWxlX3Bvcyk7CiAgICAgfQogCiAgICAgZm9yIChjbCA9IHAtPmZyZWVfcmF3X2J1ZnM7IGNsOyBjbCA9IGNsLT5uZXh0KSB7Ci0gICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgYnVmIGZyZWUgJXAsIGxhc3QgJXAsIHNpemU6ICV6IiwKLSAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsIGNsLT5idWYtPmxhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmVuZCAtIGNsLT5idWYtPmxhc3QpOworICAgICAgICBuZ3hfbG9nX2RlYnVnOChOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBmcmVlIHM6JWQgdDolZCBmOiVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgIiVwLCBwb3MgJXAsIHNpemU6ICV6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6ICVPLCBzaXplOiAleiIsCisgICAgICAgICAgICAgICAgICAgICAgIChjbC0+YnVmLT5zaGFkb3cgPyAxIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnRlbXBvcmFyeSwgY2wtPmJ1Zi0+aW5fZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsIGNsLT5idWYtPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+ZmlsZV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmZpbGVfbGFzdCAtIGNsLT5idWYtPmZpbGVfcG9zKTsKICAgICB9CiAKICNlbmRpZgpAQCAtMzc3LDEyICszODcsMTEgQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2V2ZW50X3BpcGVfd3JpdGVfdG9fZG93bnN0cmVhbShuZ3hfZXZlbnRfcGlwZV90ICpwKQorc3RhdGljIG5neF9pbnRfdCBuZ3hfZXZlbnRfcGlwZV93cml0ZV90b19kb3duc3RyZWFtKG5neF9ldmVudF9waXBlX3QgKnApCiB7CiAgICAgc2l6ZV90ICAgICAgICBic2l6ZTsKICAgICBuZ3hfdWludF90ICAgIGZsdXNoOwotICAgIG5neF9idWZfdCAgICAqYjsKLSAgICBuZ3hfY2hhaW5fdCAgKm91dCwgKipsbCwgKmNsLCAqdGw7CisgICAgbmd4X2NoYWluX3QgICpvdXQsICoqbGwsICpjbDsKIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAicGlwZSB3cml0ZSBkb3duc3RyZWFtOiAlZCIsIHAtPmRvd25zdHJlYW0tPndyaXRlLT5yZWFkeSk7CkBAIC01MjIsMTEgKzUzMSw5IEBACiAgICAgICAgICAgICAvKiBhZGQgdGhlIGZyZWUgc2hhZG93IHJhdyBidWYgdG8gcC0+ZnJlZV9yYXdfYnVmcyAqLwogCiAgICAgICAgICAgICBpZiAoY2wtPmJ1Zi0+bGFzdF9zaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBiID0gY2wtPmJ1Zi0+c2hhZG93OwotICAgICAgICAgICAgICAgIGItPnBvcyA9IGItPmxhc3QgPSBiLT5zdGFydDsKLSAgICAgICAgICAgICAgICBiLT5zaGFkb3cgPSBOVUxMOwotICAgICAgICAgICAgICAgIG5neF9hbGxvY19saW5rX2FuZF9zZXRfYnVmKHRsLCBiLCBwLT5wb29sLCBOR1hfQUJPUlQpOwotICAgICAgICAgICAgICAgIG5neF9ldmVudF9waXBlX2FkZF9mcmVlX2J1ZigmcC0+ZnJlZV9yYXdfYnVmcywgdGwpOworICAgICAgICAgICAgICAgIGlmIChuZ3hfZXZlbnRfcGlwZV9hZGRfZnJlZV9idWYocCwgY2wtPmJ1Zi0+c2hhZG93KSAhPSBOR1hfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BQk9SVDsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBjbC0+YnVmLT5sYXN0X3NoYWRvdyA9IDA7CiAgICAgICAgICAgICB9CkBAIC02MzEsMTMgKzYzOCwyMSBAQAogICAgICAgICBuZ3hfY2hhaW5fYWRkX2xpbmsocC0+b3V0LCBwLT5sYXN0X291dCwgY2wpOwogCiAgICAgICAgIGlmIChiLT5sYXN0X3NoYWRvdykgewotICAgICAgICAgICAgYi0+c2hhZG93LT5wb3MgPSBiLT5zaGFkb3ctPnN0YXJ0OwotICAgICAgICAgICAgYi0+c2hhZG93LT5sYXN0ID0gYi0+c2hhZG93LT5zdGFydDsKIAotICAgICAgICAgICAgbmd4X2FsbG9jX2xpbmtfYW5kX3NldF9idWYodGwsIGItPnNoYWRvdywgcC0+cG9vbCwgTkdYX0FCT1JUKTsKKyAgICAgICAgICAgIGlmICghKHRsID0gbmd4X2FsbG9jX2NoYWluX2xpbmsocC0+cG9vbCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BQk9SVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGwtPmJ1ZiA9IGItPnNoYWRvdzsKKyAgICAgICAgICAgIHRsLT5uZXh0ID0gTlVMTDsKIAogICAgICAgICAgICAgKmxhc3RfZnJlZSA9IHRsOwogICAgICAgICAgICAgbGFzdF9mcmVlID0gJnRsLT5uZXh0OworCisgICAgICAgICAgICBiLT5zaGFkb3ctPnBvcyA9IGItPnNoYWRvdy0+c3RhcnQ7CisgICAgICAgICAgICBiLT5zaGFkb3ctPmxhc3QgPSBiLT5zaGFkb3ctPnN0YXJ0OworCisgICAgICAgICAgICBuZ3hfZXZlbnRfcGlwZV9yZW1vdmVfc2hhZG93X2xpbmtzKGItPnNoYWRvdyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY3Myw3ICs2ODgsMTIgQEAKICAgICBiLT5yZWN5Y2xlZCA9IDE7CiAgICAgYnVmLT5zaGFkb3cgPSBiOwogCi0gICAgbmd4X2FsbG9jX2xpbmtfYW5kX3NldF9idWYoY2wsIGIsIHAtPnBvb2wsIE5HWF9FUlJPUik7CisgICAgaWYgKCEoY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhwLT5wb29sKSkpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBjbC0+YnVmID0gYjsKKyAgICBjbC0+bmV4dCA9IE5VTEw7CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsICJpbnB1dCBidWYgIyVkIiwgYi0+bnVtKTsKIApAQCAtNzQyLDI4ICs3NjIsNDggQEAKIH0KIAogCi1zdGF0aWMgbmd4X2lubGluZSB2b2lkIG5neF9ldmVudF9waXBlX2FkZF9mcmVlX2J1ZihuZ3hfY2hhaW5fdCAqKmNoYWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NoYWluX3QgKmNsKQorbmd4X2ludF90IG5neF9ldmVudF9waXBlX2FkZF9mcmVlX2J1ZihuZ3hfZXZlbnRfcGlwZV90ICpwLCBuZ3hfYnVmX3QgKmIpCiB7Ci0gICAgaWYgKCpjaGFpbiA9PSBOVUxMKSB7Ci0gICAgICAgICpjaGFpbiA9IGNsOwotICAgICAgICByZXR1cm47CisgICAgbmd4X2NoYWluX3QgICpjbDsKKworICAgIGlmICghKGNsID0gbmd4X2FsbG9jX2NoYWluX2xpbmsocC0+cG9vbCkpKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgaWYgKCgqY2hhaW4pLT5idWYtPnBvcyAhPSAoKmNoYWluKS0+YnVmLT5sYXN0KSB7Ci0gICAgICAgIGNsLT5uZXh0ID0gKCpjaGFpbiktPm5leHQ7Ci0gICAgICAgICgqY2hhaW4pLT5uZXh0ID0gY2w7CisgICAgYi0+cG9zID0gYi0+c3RhcnQ7CisgICAgYi0+bGFzdCA9IGItPnN0YXJ0OworICAgIGItPnNoYWRvdyA9IE5VTEw7CiAKLSAgICB9IGVsc2UgewotICAgICAgICBjbC0+bmV4dCA9ICgqY2hhaW4pOwotICAgICAgICAoKmNoYWluKSA9IGNsOworICAgIGNsLT5idWYgPSBiOworCisgICAgaWYgKHAtPmZyZWVfcmF3X2J1ZnMgPT0gTlVMTCkgeworICAgICAgICBwLT5mcmVlX3Jhd19idWZzID0gY2w7CisgICAgICAgIGNsLT5uZXh0ID0gTlVMTDsKKworICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KKworICAgIGlmIChwLT5mcmVlX3Jhd19idWZzLT5idWYtPnBvcyA9PSBwLT5mcmVlX3Jhd19idWZzLT5idWYtPmxhc3QpIHsKKworICAgICAgICAvKiBhZGQgdGhlIGZyZWUgYnVmIHRvIHRoZSBsaXN0IHN0YXJ0ICovCisKKyAgICAgICAgY2wtPm5leHQgPSBwLT5mcmVlX3Jhd19idWZzOworICAgICAgICBwLT5mcmVlX3Jhd19idWZzID0gY2w7CisKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICAvKiB0aGUgZmlyc3QgZnJlZSBidWYgaXMgcGFydGlhbHkgZmlsbGVkLCB0aHVzIGFkZCB0aGUgZnJlZSBidWYgYWZ0ZXIgaXQgKi8KKworICAgIGNsLT5uZXh0ID0gcC0+ZnJlZV9yYXdfYnVmcy0+bmV4dDsKKyAgICBwLT5mcmVlX3Jhd19idWZzLT5uZXh0ID0gY2w7CisKKyAgICByZXR1cm4gTkdYX09LOwogfQogCiAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2V2ZW50X3BpcGVfZHJhaW5fY2hhaW5zKG5neF9ldmVudF9waXBlX3QgKnApCiB7Ci0gICAgbmd4X2J1Zl90ICAgICpiOwogICAgIG5neF9jaGFpbl90ICAqY2wsICp0bDsKIAogICAgIGZvciAoIDs7ICkgewpAQCAtNzg1LDE5ICs4MjUsMTAgQEAKIAogICAgICAgICB3aGlsZSAoY2wpIHsKICAgICAgICAgICAgIGlmIChjbC0+YnVmLT5sYXN0X3NoYWRvdykgewotICAgICAgICAgICAgICAgIGIgPSBjbC0+YnVmLT5zaGFkb3c7Ci0gICAgICAgICAgICAgICAgYi0+cG9zID0gYi0+bGFzdCA9IGItPnN0YXJ0OwotICAgICAgICAgICAgICAgIGItPnNoYWRvdyA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICBpZiAoISh0bCA9IG5neF9hbGxvY19jaGFpbl9saW5rKHAtPnBvb2wpKSkgeworICAgICAgICAgICAgICAgIGlmIChuZ3hfZXZlbnRfcGlwZV9hZGRfZnJlZV9idWYocCwgY2wtPmJ1Zi0+c2hhZG93KSAhPSBOR1hfT0spIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BQk9SVDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0bC0+YnVmID0gYjsKLSAgICAgICAgICAgICAgICB0bC0+bmV4dCA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfcGlwZV9hZGRfZnJlZV9idWYoJnAtPmZyZWVfcmF3X2J1ZnMsIHRsKTsKLQogICAgICAgICAgICAgICAgIGNsLT5idWYtPmxhc3Rfc2hhZG93ID0gMDsKICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuaAppbmRleCA5NzgxODIwLi44ODdmOGI3IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuaApAQCAtODgsNiArODgsNyBAQAogCiBuZ3hfaW50X3Qgbmd4X2V2ZW50X3BpcGUobmd4X2V2ZW50X3BpcGVfdCAqcCwgaW50IGRvX3dyaXRlKTsKIG5neF9pbnRfdCBuZ3hfZXZlbnRfcGlwZV9jb3B5X2lucHV0X2ZpbHRlcihuZ3hfZXZlbnRfcGlwZV90ICpwLCBuZ3hfYnVmX3QgKmJ1Zik7CituZ3hfaW50X3Qgbmd4X2V2ZW50X3BpcGVfYWRkX2ZyZWVfYnVmKG5neF9ldmVudF9waXBlX3QgKnAsIG5neF9idWZfdCAqYik7CiAKIAogI2VuZGlmIC8qIF9OR1hfRVZFTlRfUElQRV9IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlci5jCmluZGV4IDUxMzQxNTEuLjUxNDVmZjYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyLmMKQEAgLTY3LDcgKzY3LDcgQEAKICAgICBuZ3hfYnVmX3QgICAgKmI7CiAgICAgbmd4X2NoYWluX3QgICBvdXQsIHRhaWwsICpjbCwgKnRsLCAqKmxsOwogCi0gICAgaWYgKGluID09IE5VTEwgfHwgIXItPmNodW5rZWQpIHsKKyAgICBpZiAoaW4gPT0gTlVMTCB8fCAhci0+Y2h1bmtlZCB8fCByLT5oZWFkZXJfb25seSkgewogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9ib2R5X2ZpbHRlcihyLCBpbik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX2hhbmRsZXIuYwppbmRleCA0MWVmYTBiLi45ZjUwMTZhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfaGFuZGxlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9oYW5kbGVyLmMKQEAgLTEzODUsNyArMTM4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9idWZfdCAqYnVmKQogewogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICByYzsKLSAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAqYjsKKyAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAqYiwgKipwcmV2OwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICBsaW5lOwogICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICpjbDsKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAqcjsKQEAgLTEzOTksNiArMTM5OSw3IEBACiAgICAgZiA9IG5neF9odHRwX2dldF9tb2R1bGVfY3R4KHIsIG5neF9odHRwX2Zhc3RjZ2lfbW9kdWxlKTsKIAogICAgIGIgPSBOVUxMOworICAgIHByZXYgPSAmYnVmLT5zaGFkb3c7CiAKICAgICBmLT5wb3MgPSBidWYtPnBvczsKICAgICBmLT5sYXN0ID0gYnVmLT5sYXN0OwpAQCAtMTUxMCwxMSArMTUxMSwxNCBAQAogICAgICAgICBuZ3hfbWVtemVybyhiLCBzaXplb2Yobmd4X2J1Zl90KSk7CiAKICAgICAgICAgYi0+cG9zID0gZi0+cG9zOwotICAgICAgICBiLT5zaGFkb3cgPSBidWY7CisgICAgICAgIGItPnN0YXJ0ID0gYnVmLT5zdGFydDsKKyAgICAgICAgYi0+ZW5kID0gYnVmLT5lbmQ7CiAgICAgICAgIGItPnRhZyA9IHAtPnRhZzsKICAgICAgICAgYi0+dGVtcG9yYXJ5ID0gMTsKICAgICAgICAgYi0+cmVjeWNsZWQgPSAxOwotICAgICAgICBidWYtPnNoYWRvdyA9IGI7CisKKyAgICAgICAgKnByZXYgPSBiOworICAgICAgICBwcmV2ID0gJmItPnNoYWRvdzsKIAogICAgICAgICBpZiAoIShjbCA9IG5neF9hbGxvY19jaGFpbl9saW5rKHAtPnBvb2wpKSkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKQEAgLTE1MjMsNiArMTUyNyw4IEBACiAgICAgICAgIGNsLT5idWYgPSBiOwogICAgICAgICBjbC0+bmV4dCA9IE5VTEw7CiAKKyAgICAgICAgLyogU1RVQiAqLyBiLT5udW0gPSBidWYtPm51bTsKKwogICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsICJpbnB1dCBidWYgIyVkIiwgYi0+bnVtKTsKIAogICAgICAgICBuZ3hfY2hhaW5fYWRkX2xpbmsocC0+aW4sIHAtPmxhc3RfaW4sIGNsKTsKQEAgLTE1NjMsNyArMTU2OSwxNiBAQAogICAgIH0KIAogICAgIGlmIChiKSB7CisgICAgICAgIGItPnNoYWRvdyA9IGJ1ZjsKICAgICAgICAgYi0+bGFzdF9zaGFkb3cgPSAxOworCisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgLyogdGhlcmUgaXMgbm8gZGF0YSByZWNvcmQgaW4gdGhlIGJ1ZiwgYWRkIGl0IHRvIGZyZWUgY2hhaW4gKi8KKworICAgIGlmIChuZ3hfZXZlbnRfcGlwZV9hZGRfZnJlZV9idWYocCwgYnVmKSAhPSBOR1hfT0spIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKICAgICByZXR1cm4gTkdYX09LOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlci5jCmluZGV4IDBjZDFkOTEuLmNkYTljYTMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyLmMKQEAgLTQ3MSw4ICs0NzEsOCBAQAogCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdlIHByZWFsbG9jYXRlIGEgbWVtb3J5IGZvciB6bGliIGluIG9uZSBidWZmZXIgKDIwMEstNDAwSyksIHRoaXMKLSAgICAgICAgICogZGljcmVhc2VzIGEgbnVtYmVyIG9mIG1hbGxvYygpIGFuZCBmcmVlKCkgY2FsbHMgYW5kIGFsc28gcHJvYmFibHkKLSAgICAgICAgICogZGljcmVhc2VzIGEgbnVtYmVyIG9mIHN5c2NhbGxzIChzYnJrKCkgYW5kIHNvIG9uKS4KKyAgICAgICAgICogZGVjcmVhc2VzIGEgbnVtYmVyIG9mIG1hbGxvYygpIGFuZCBmcmVlKCkgY2FsbHMgYW5kIGFsc28gcHJvYmFibHkKKyAgICAgICAgICogZGVjcmVhc2VzIGEgbnVtYmVyIG9mIHN5c2NhbGxzIChzYnJrKCkgYW5kIHNvIG9uKS4KICAgICAgICAgICogQmVzaWRlcyB3ZSBmcmVlIHRoaXMgbWVtb3J5IGFzIHNvb24gYXMgdGhlIGd6aXBwaW5nIHdpbGwgY29tcGxldGUKICAgICAgICAgICogYW5kIGRvIG5vdCB3YWl0IHdoaWxlIGEgd2hvbGUgcmVzcG9uc2Ugd2lsbCBiZSBzZW50IHRvIGEgY2xpZW50LgogICAgICAgICAgKgpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX2hhbmRsZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9oYW5kbGVyLmMKaW5kZXggMDAyZWRiOC4uNjM2MzMxYiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX2hhbmRsZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfaGFuZGxlci5jCkBAIC05LDkgKzksMTAgQEAKICNpbmNsdWRlIDxuZ3hfaHR0cC5oPgogCiAKLSNkZWZpbmUgTkdYX0hUVFBfUkVXUklURV9DT1BZX01BVENIICAwCi0jZGVmaW5lIE5HWF9IVFRQX1JFV1JJVEVfQ09QWV9TSE9SVCAgMQotI2RlZmluZSBOR1hfSFRUUF9SRVdSSVRFX0NPUFlfTE9ORyAgIDIKKyNkZWZpbmUgTkdYX0hUVFBfUkVXUklURV9DT1BZX0NBUFRVUkUgIDAKKyNkZWZpbmUgTkdYX0hUVFBfUkVXUklURV9DT1BZX1NIT1JUICAgIDEKKyNkZWZpbmUgTkdYX0hUVFBfUkVXUklURV9DT1BZX0xPTkcgICAgIDIKKyNkZWZpbmUgTkdYX0hUVFBfUkVXUklURV9TVEFSVF9BUkdTICAgIDMKIAogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0xMTksNyArMTIwLDcgQEAKICAgICB1aW50cHRyX3QgICAgICAgICAgICAgICAgICAgICBkYXRhOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgIHJjOwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgIGksIG0sIG47Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgdXJpOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgIHVyaSwgYXJnczsKICAgICBuZ3hfaHR0cF9yZXdyaXRlX29wX3QgICAgICAgICpvcDsKICAgICBuZ3hfaHR0cF9yZXdyaXRlX3J1bGVfdCAgICAgICpydWxlOwogICAgIG5neF9odHRwX3Jld3JpdGVfc3J2X2NvbmZfdCAgKnNjZjsKQEAgLTE3NiwxMyArMTc3LDE0IEBACiAgICAgICAgIHVyaS5sZW4gPSBydWxlW2ldLnNpemU7CiAKICAgICAgICAgZm9yIChuID0gMTsgbiA8IChuZ3hfdWludF90KSByYzsgbisrKSB7Ci0gICAgICAgICAgIHVyaS5sZW4gKz0gY2FwdHVyZXNbMiAqIG4gKyAxXSAtIGNhcHR1cmVzWzIgKiBuXTsKKyAgICAgICAgICAgIHVyaS5sZW4gKz0gY2FwdHVyZXNbMiAqIG4gKyAxXSAtIGNhcHR1cmVzWzIgKiBuXTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghKHVyaS5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCB1cmkubGVuKSkpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgICAgIH0KIAorICAgICAgICBhcmdzLmRhdGEgPSBOVUxMOwogICAgICAgICBwID0gdXJpLmRhdGE7CiAKICAgICAgICAgb3AgPSBydWxlW2ldLm9wcy5lbHRzOwpAQCAtMTk4LDIyICsyMDAsMzQgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3Bbbl0ub3AgPT0gTkdYX0hUVFBfUkVXUklURV9DT1BZX0xPTkcpIHsKICAgICAgICAgICAgICAgICBwID0gbmd4X2NweW1lbShwLCAodm9pZCAqKSBvcFtuXS5kYXRhLCBvcFtuXS5sZW4pOwogCi0gICAgICAgICAgICB9IGVsc2UgeyAvKiBOR1hfSFRUUF9SRVdSSVRFX0NPUFlfTUFUQ0ggKi8KKyAgICAgICAgICAgIH0gZWxzZSBpZiAob3Bbbl0ub3AgPT0gTkdYX0hUVFBfUkVXUklURV9TVEFSVF9BUkdTKSB7CisgICAgICAgICAgICAgICAgYXJncy5kYXRhID0gcDsKKworICAgICAgICAgICAgfSBlbHNlIHsgLyogTkdYX0hUVFBfUkVXUklURV9DT1BZX0NBUFRVUkUgKi8KICAgICAgICAgICAgICAgICBtID0gMiAqIG9wW25dLmRhdGE7CiAgICAgICAgICAgICAgICAgcCA9IG5neF9jcHltZW0ocCwgJnItPnVyaS5kYXRhW2NhcHR1cmVzW21dXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlc1ttICsgMV0gLSBjYXB0dXJlc1ttXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB1cmkubGVuID0gcCAtIHVyaS5kYXRhOworICAgICAgICBpZiAoYXJncy5kYXRhKSB7CisgICAgICAgICAgICB1cmkubGVuID0gYXJncy5kYXRhIC0gdXJpLmRhdGE7CisgICAgICAgICAgICBhcmdzLmxlbiA9IHAgLSBhcmdzLmRhdGE7CiAKLSAgICAgICAgaWYgKHNjZi0+bG9nKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJyZXdyaXR0ZW4gdXJpOiBcIiVWXCIiLCAmdXJpKTsKKyAgICAgICAgICAgIHItPmFyZ3MgPSBhcmdzOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1cmkubGVuID0gcCAtIHVyaS5kYXRhOworICAgICAgICAgICAgYXJncy5sZW4gPSAwOwogICAgICAgICB9CiAKICAgICAgICAgci0+dXJpID0gdXJpOwogCisgICAgICAgIGlmIChzY2YtPmxvZykgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAicmV3cml0dGVuIHVyaTogXCIlVlwiLCBhcmdzOiBcIiVWXCIiLCAmdXJpLCAmYXJncyk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAobmd4X2h0dHBfc2V0X2V4dGVuKHIpICE9IE5HWF9PSykgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICAgICAgfQpAQCAtMzU5LDcgKzM3Myw5IEBACiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdmFsdWVbMl0ubGVuOyAvKiB2b2lkICovKSB7CisgICAgICAgIGkgPSAwOworCisgICAgICAgIHdoaWxlIChpIDwgdmFsdWVbMl0ubGVuKSB7CiAKICAgICAgICAgICAgIGlmICghKG9wID0gbmd4X3B1c2hfYXJyYXkoJnJ1bGUtPm9wcykpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwpAQCAtMzcyLDcgKzM4OCw4IEBACiAgICAgICAgICAgICAgICAgJiYgdmFsdWVbMl0uZGF0YVtpICsgMV0gPj0gJzEnCiAgICAgICAgICAgICAgICAgJiYgdmFsdWVbMl0uZGF0YVtpICsgMV0gPD0gJzknKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9wLT5vcCA9IE5HWF9IVFRQX1JFV1JJVEVfQ09QWV9NQVRDSDsgCisgICAgICAgICAgICAgICAgb3AtPm9wID0gTkdYX0hUVFBfUkVXUklURV9DT1BZX0NBUFRVUkU7IAorICAgICAgICAgICAgICAgIG9wLT5sZW4gPSAwOwogICAgICAgICAgICAgICAgIG9wLT5kYXRhID0gdmFsdWVbMl0uZGF0YVsrK2ldIC0gJzAnOwogCiAgICAgICAgICAgICAgICAgaWYgKHJ1bGUtPm5jYXB0dXJlcyA8IG9wLT5kYXRhKSB7CkBAIC0zODEsMzkgKzM5OCw1MyBAQAogCiAgICAgICAgICAgICAgICAgaSsrOwogCi0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodmFsdWVbMl0uZGF0YVtpXSA9PSAnPycpIHsKKyAgICAgICAgICAgICAgICBvcC0+b3AgPSBOR1hfSFRUUF9SRVdSSVRFX1NUQVJUX0FSR1M7IAorICAgICAgICAgICAgICAgIG9wLT5sZW4gPSAwOworICAgICAgICAgICAgICAgIG9wLT5kYXRhID0gMDsKKwogICAgICAgICAgICAgICAgIGkrKzsKIAotICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgdmFsdWVbMl0ubGVuICYmIHZhbHVlWzJdLmRhdGFbaV0gIT0gJyQnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBsZW4gPSAmdmFsdWVbMl0uZGF0YVtpXSAtIGRhdGE7Ci0gICAgICAgICAgICAgICAgcnVsZS0+c2l6ZSArPSBsZW47CisgICAgICAgICAgICBpKys7CiAKLSAgICAgICAgICAgICAgICBpZiAobGVuKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IHZhbHVlWzJdLmxlbgorICAgICAgICAgICAgICAgICAgICYmIHZhbHVlWzJdLmRhdGFbaV0gIT0gJyQnCisgICAgICAgICAgICAgICAgICAgJiYgdmFsdWVbMl0uZGF0YVtpXSAhPSAnPycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIG9wLT5sZW4gPSBsZW47CisgICAgICAgICAgICBsZW4gPSAmdmFsdWVbMl0uZGF0YVtpXSAtIGRhdGE7CisgICAgICAgICAgICBydWxlLT5zaXplICs9IGxlbjsKIAotICAgICAgICAgICAgICAgICAgICBpZiAobGVuIDw9IHNpemVvZih1aW50cHRyX3QpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcC0+b3AgPSBOR1hfSFRUUF9SRVdSSVRFX0NPUFlfU0hPUlQ7IAotICAgICAgICAgICAgICAgICAgICAgICAgb3AtPmRhdGEgPSAwOworICAgICAgICAgICAgaWYgKGxlbikgewogCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC0+ZGF0YSA8PD0gODsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC0+ZGF0YSB8PSBkYXRhW2xlbl07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3AtPmxlbiA9IGxlbjsKIAotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgb3AtPm9wID0gTkdYX0hUVFBfUkVXUklURV9DT1BZX0xPTkc7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8PSBzaXplb2YodWludHB0cl90KSkgeworICAgICAgICAgICAgICAgICAgICBvcC0+b3AgPSBOR1hfSFRUUF9SRVdSSVRFX0NPUFlfU0hPUlQ7IAorICAgICAgICAgICAgICAgICAgICBvcC0+ZGF0YSA9IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHAgPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCBsZW4pKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgbmd4X21lbWNweShwLCBkYXRhLCBsZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgb3AtPmRhdGEgPSAodWludHB0cl90KSBwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wLT5kYXRhIDw8PSA4OworICAgICAgICAgICAgICAgICAgICAgICAgb3AtPmRhdGEgfD0gZGF0YVtsZW5dOwogICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvcC0+b3AgPSBOR1hfSFRUUF9SRVdSSVRFX0NPUFlfTE9ORzsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIShwID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgbGVuKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG5neF9tZW1jcHkocCwgZGF0YSwgbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgb3AtPmRhdGEgPSAodWludHB0cl90KSBwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfaGFuZGxlci5jCmluZGV4IDRjYzBkZTEuLmZhMmJjZDUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX2hhbmRsZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19oYW5kbGVyLmMKQEAgLTc2LDcgKzc2LDYgQEAKICAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgIG91dDsKICAgICBuZ3hfZmlsZV9pbmZvX3QgICAgICAgICAgICAgIGZpOwogICAgIG5neF9odHRwX2NsZWFudXBfdCAgICAgICAgICAqZmlsZV9jbGVhbnVwLCAqcmVkaXJlY3RfY2xlYW51cDsKLSAgICBuZ3hfaHR0cF9sb2dfY3R4X3QgICAgICAgICAgKmN0eDsKICAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICAgKmNsY2Y7CiAgICAgbmd4X2h0dHBfc3RhdGljX2xvY19jb25mX3QgICpzbGNmOwogI2lmIChOR1hfSFRUUF9DQUNIRSkKQEAgLTQ3Niw4ICs0NzUsNyBAQAogCiAjZW5kaWYKIAotICAgIGN0eCA9IGxvZy0+ZGF0YTsKLSAgICBjdHgtPmFjdGlvbiA9ICJzZW5kaW5nIHJlc3BvbnNlIHRvIGNsaWVudCI7CisgICAgbG9nLT5hY3Rpb24gPSAic2VuZGluZyByZXNwb25zZSB0byBjbGllbnQiOwogCiAgICAgZmlsZV9jbGVhbnVwLT5kYXRhLmZpbGUuZmQgPSBmZDsKICAgICBmaWxlX2NsZWFudXAtPmRhdGEuZmlsZS5uYW1lID0gbmFtZS5kYXRhOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYwppbmRleCAzZTkzODNlLi5lYTNhMGNhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYwpAQCAtNzc4LDE3ICs3NzgsMTcgQEAKIH0KIAogCi11X2NoYXIgKm5neF9odHRwX3Byb3h5X2xvZ19lcnJvcih2b2lkICpkYXRhLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3VfY2hhciAqbmd4X2h0dHBfcHJveHlfbG9nX2Vycm9yKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLSAgICBuZ3hfaHR0cF9wcm94eV9sb2dfY3R4X3QgKmN0eCA9IGRhdGE7Ci0KICAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICpwOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZTsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICB1cmk7CiAgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAgICAgICAgICAgICAqcjsKICAgICBuZ3hfcGVlcl9jb25uZWN0aW9uX3QgICAgICAgICAgICpwZWVyOworICAgIG5neF9odHRwX3Byb3h5X2xvZ19jdHhfdCAgICAgICAgKmN0eDsKICAgICBuZ3hfaHR0cF9wcm94eV91cHN0cmVhbV9jb25mX3QgICp1YzsKIAorICAgIGN0eCA9IGxvZy0+ZGF0YTsKICAgICByID0gY3R4LT5wcm94eS0+cmVxdWVzdDsKICAgICB1YyA9IGN0eC0+cHJveHktPmxjZi0+dXBzdHJlYW07CiAgICAgcGVlciA9ICZjdHgtPnByb3h5LT51cHN0cmVhbS0+cGVlcjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5oIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmgKaW5kZXggOTE1Y2E2Mi4uNGRkOTdjMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmgKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmgKQEAgLTI1MSw3ICsyNTEsNyBAQAogdm9pZCBuZ3hfaHR0cF9wcm94eV9idXN5X2xvY2tfaGFuZGxlcihuZ3hfZXZlbnRfdCAqcmV2KTsKIHZvaWQgbmd4X2h0dHBfcHJveHlfdXBzdHJlYW1fYnVzeV9sb2NrKG5neF9odHRwX3Byb3h5X2N0eF90ICpwKTsKIAotdV9jaGFyICpuZ3hfaHR0cF9wcm94eV9sb2dfZXJyb3Iodm9pZCAqZGF0YSwgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pOwordV9jaGFyICpuZ3hfaHR0cF9wcm94eV9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIHZvaWQgbmd4X2h0dHBfcHJveHlfZmluYWxpemVfcmVxdWVzdChuZ3hfaHR0cF9wcm94eV9jdHhfdCAqcCwgaW50IHJjKTsKIHZvaWQgbmd4X2h0dHBfcHJveHlfY2xvc2VfY29ubmVjdGlvbihuZ3hfaHR0cF9wcm94eV9jdHhfdCAqcCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwLmggYi9zcmMvaHR0cC9uZ3hfaHR0cC5oCmluZGV4IDk0MjVlM2IuLmEyMWM2NzAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHAuaApAQCAtMzYsMTUgKzM2LDYgQEAKIAogCiBzdHJ1Y3Qgbmd4X2h0dHBfbG9nX2N0eF9zIHsKLSAgICBuZ3hfdWludF90ICAgICAgICAgY29ubmVjdGlvbjsKLQotICAgIC8qCi0gICAgICogd2UgZGVjbGFyZSAiYWN0aW9uIiBhcyAiY2hhciAqIiBiZWNhdXNlIHRoZSBhY3Rpb25zIGFyZSB1c3VhbGx5Ci0gICAgICogdGhlIHN0YXRpYyBzdHJpbmdzIGFuZCBpbiB0aGUgInVfY2hhciAqIiBjYXNlIHdlIGhhdmUgdG8gb3ZlcnJpZGUKLSAgICAgKiBhbGwgdGhlIHRpbWUgdGhlaXIgdHlwZXMKLSAgICAgKi8KLQotICAgIGNoYXIgICAgICAgICAgICAgICAgKmFjdGlvbjsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICpjbGllbnQ7CiAgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAqcmVxdWVzdDsKIH07CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCBmMmY2OWY0Li5iZjQ1NWQ4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTM1MSwxMyArMzUxLDEwIEBACiAKIHZvaWQgbmd4X2h0dHBfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgbmd4X2h0dHBfbG9nX2N0eF90ICAqY3R4OworICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+YWN0aW9uID0gTlVMTDsKIAogICAgIHItPmNvbm5lY3Rpb24tPnVuZXhwZWN0ZWRfZW9mID0gMDsKIAotICAgIGN0eCA9IHItPmNvbm5lY3Rpb24tPmxvZy0+ZGF0YTsKLSAgICBjdHgtPmFjdGlvbiA9IE5VTEw7Ci0KICAgICBzd2l0Y2ggKHItPmhlYWRlcnNfaW4uY29ubmVjdGlvbl90eXBlKSB7CiAgICAgY2FzZSAwOgogICAgICAgICBpZiAoci0+aHR0cF92ZXJzaW9uID4gTkdYX0hUVFBfVkVSU0lPTl8xMCkgewpAQCAtNTQxLDYgKzUzOCwxMCBAQAogICAgICAgICByLT5jb25uZWN0aW9uLT5zZW5kZmlsZSA9IDA7CiAgICAgfQogCisgICAgaWYgKHItPmtlZXBhbGl2ZSAmJiBjbGNmLT5rZWVwYWxpdmVfdGltZW91dCA9PSAwKSB7CisgICAgICAgIHItPmtlZXBhbGl2ZSA9IDA7CisgICAgfQorCiAgICAgaWYgKCFjbGNmLT50Y3Bfbm9wdXNoKSB7CiAgICAgICAgIC8qIGRpc2FibGUgVENQX05PUFVTSC9UQ1BfQ09SSyB1c2UgKi8KICAgICAgICAgci0+Y29ubmVjdGlvbi0+dGNwX25vcHVzaCA9IE5HWF9UQ1BfTk9QVVNIX0RJU0FCTEVEOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IDgxMTAzMTIuLjIwOWM1NDcgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogc3RhdGljIHZvaWQgbmd4X2h0dHBfY2xpZW50X2Vycm9yKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpZW50X2Vycm9yLCBpbnQgZXJyb3IpOwotc3RhdGljIHVfY2hhciAqbmd4X2h0dHBfbG9nX2Vycm9yKHZvaWQgKmRhdGEsIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKK3N0YXRpYyB1X2NoYXIgKm5neF9odHRwX2xvZ19lcnJvcihuZ3hfbG9nX3QgKmxvZywgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pOwogCiAKIC8qIE5HWF9IVFRQX1BBUlNFXy4uLiBlcnJvcnMgKi8KQEAgLTExMSwxMiArMTExLDE0IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjdHgtPmNvbm5lY3Rpb24gPSBjLT5udW1iZXI7CiAgICAgY3R4LT5jbGllbnQgPSAmYy0+YWRkcl90ZXh0OwotICAgIGN0eC0+YWN0aW9uID0gInJlYWRpbmcgY2xpZW50IHJlcXVlc3QgbGluZSI7CiAgICAgY3R4LT5yZXF1ZXN0ID0gTlVMTDsKLSAgICBjLT5sb2ctPmRhdGEgPSBjdHg7CisKKyAgICBjLT5sb2ctPmNvbm5lY3Rpb24gPSBjLT5udW1iZXI7CiAgICAgYy0+bG9nLT5oYW5kbGVyID0gbmd4X2h0dHBfbG9nX2Vycm9yOworICAgIGMtPmxvZy0+ZGF0YSA9IGN0eDsKKyAgICBjLT5sb2ctPmFjdGlvbiA9ICJyZWFkaW5nIGNsaWVudCByZXF1ZXN0IGxpbmUiOworCiAgICAgYy0+bG9nX2Vycm9yID0gTkdYX0VSUk9SX0lORk87CiAKICAgICByZXYgPSBjLT5yZWFkOwpAQCAtNjM0LDcgKzYzNiw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjdHgtPmFjdGlvbiA9ICJyZWFkaW5nIGNsaWVudCByZXF1ZXN0IGhlYWRlcnMiOworICAgICAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSAicmVhZGluZyBjbGllbnQgcmVxdWVzdCBoZWFkZXJzIjsKIAogICAgICAgICAgICAgcmV2LT5ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfcHJvY2Vzc19yZXF1ZXN0X2hlYWRlcnM7CiAgICAgICAgICAgICBuZ3hfaHR0cF9wcm9jZXNzX3JlcXVlc3RfaGVhZGVycyhyZXYpOwpAQCAtMTA5OSw3ICsxMTAxLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChyLT5tZXRob2QgPT0gTkdYX0hUVFBfUE9TVCAmJiByLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24gPD0gMCkgeworICAgIGlmIChyLT5tZXRob2QgPT0gTkdYX0hUVFBfUE9TVCAmJiByLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24gPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1BBUlNFX1BPU1RfV09fQ0xfSEVBREVSOwogICAgIH0KIApAQCAtMTYwOCw3ICsxNjEwLDYgQEAKICAgICBuZ3hfZXZlbnRfdCAgICAgICAgICAgICAgICpyZXYsICp3ZXY7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAqYzsKICAgICBuZ3hfaHR0cF9jb25uZWN0aW9uX3QgICAgICpoYzsKLSAgICBuZ3hfaHR0cF9sb2dfY3R4X3QgICAgICAgICpjdHg7CiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKICAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOwogCkBAIC0xNjE3LDggKzE2MTgsNyBAQAogCiAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsICJzZXQgaHR0cCBrZWVwYWxpdmUgaGFuZGxlciIpOwogCi0gICAgY3R4ID0gYy0+bG9nLT5kYXRhOwotICAgIGN0eC0+YWN0aW9uID0gImNsb3NpbmcgcmVxdWVzdCI7CisgICAgYy0+bG9nLT5hY3Rpb24gPSAiY2xvc2luZyByZXF1ZXN0IjsKIAogICAgIGhjID0gci0+aHR0cF9jb25uZWN0aW9uOwogICAgIGIgPSByLT5oZWFkZXJfaW47CkBAIC0xNjgyLDcgKzE2ODIsNyBAQAogICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwgInBpcGVsaW5lZCByZXF1ZXN0Iik7CiAKICAgICAgICAgaGMtPnBpcGVsaW5lID0gMTsKLSAgICAgICAgY3R4LT5hY3Rpb24gPSAicmVhZGluZyBjbGllbnQgcGlwZWxpbmVkIHJlcXVlc3QgbGluZSI7CisgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gInJlYWRpbmcgY2xpZW50IHBpcGVsaW5lZCByZXF1ZXN0IGxpbmUiOwogICAgICAgICBuZ3hfaHR0cF9pbml0X3JlcXVlc3QocmV2KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3NjAsNyArMTc2MCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjdHgtPmFjdGlvbiA9ICJrZWVwYWxpdmUiOworICAgIGMtPmxvZy0+YWN0aW9uID0gImtlZXBhbGl2ZSI7CiAKICAgICBpZiAoYy0+dGNwX25vcHVzaCA9PSBOR1hfVENQX05PUFVTSF9TRVQpIHsKICAgICAgICAgaWYgKG5neF90Y3BfcHVzaChjLT5mZCkgPT0gTkdYX0VSUk9SKSB7CkBAIC0xNzc2LDggKzE3NzYsMTAgQEAKICAgICAgICAgdGNwX25vZGVsYXkgPSAxOwogICAgIH0KIAotICAgIGlmICh0Y3Bfbm9kZWxheSAmJiBjbGNmLT50Y3Bfbm9kZWxheSAmJiAhYy0+dGNwX25vZGVsYXkpIHsKLQorICAgIGlmICh0Y3Bfbm9kZWxheQorICAgICAgICAmJiBjbGNmLT50Y3Bfbm9kZWxheQorICAgICAgICAmJiBjLT50Y3Bfbm9kZWxheSA9PSBOR1hfVENQX05PREVMQVlfVU5TRVQpCisgICAgewogICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwgInRjcF9ub2RlbGF5Iik7CiAKICAgICAgICAgaWYgKHNldHNvY2tvcHQoYy0+ZmQsIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwKQEAgLTE3ODksNyArMTc5MSw3IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjLT50Y3Bfbm9kZWxheSA9IDE7CisgICAgICAgIGMtPnRjcF9ub2RlbGF5ID0gTkdYX1RDUF9OT0RFTEFZX1NFVDsKICAgICB9CiAKICNpZiAwCkBAIC0xODA5LDcgKzE4MTEsNiBAQAogICAgIHNzaXplX3QgICAgICAgICAgICAgICAgIG47CiAgICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAqYjsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICpjOwotICAgIG5neF9odHRwX2xvZ19jdHhfdCAgICAgKmN0eDsKICAgICBuZ3hfaHR0cF9jb25uZWN0aW9uX3QgICpoYzsKIAogICAgIGMgPSByZXYtPmRhdGE7CkBAIC0xODIxLDE2ICsxODIyLDE0IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjdHggPSAobmd4X2h0dHBfbG9nX2N0eF90ICopIHJldi0+bG9nLT5kYXRhOwotCiAjaWYgKE5HWF9IQVZFX0tRVUVVRSkKIAogICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgewogICAgICAgICBpZiAocmV2LT5wZW5kaW5nX2VvZikgewotICAgICAgICAgICAgcmV2LT5sb2ctPmhhbmRsZXIgPSBOVUxMOworICAgICAgICAgICAgYy0+bG9nLT5oYW5kbGVyID0gTlVMTDsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIHJldi0+a3FfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXBvcnRlZCB0aGF0IGNsaWVudCAlViBjbG9zZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAia2VlcGFsaXZlIGNvbm5lY3Rpb24iLCBjdHgtPmNsaWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJrZWVwYWxpdmUgY29ubmVjdGlvbiIsICZjLT5hZGRyX3RleHQpOwogI2lmIChOR1hfSFRUUF9TU0wpCiAgICAgICAgICAgICBpZiAoYy0+c3NsKSB7CiAgICAgICAgICAgICAgICAgYy0+c3NsLT5ub19zZW5kX3NodXQgPSAxOwpAQCAtMTg4OSwxOCArMTg4OCwxOSBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmV2LT5sb2ctPmhhbmRsZXIgPSBOVUxMOworICAgIGMtPmxvZy0+aGFuZGxlciA9IE5VTEw7CiAKICAgICBpZiAobiA9PSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgImNsaWVudCAlViBjbG9zZWQga2VlcGFsaXZlIGNvbm5lY3Rpb24iLCBjdHgtPmNsaWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCAlViBjbG9zZWQga2VlcGFsaXZlIGNvbm5lY3Rpb24iLCAmYy0+YWRkcl90ZXh0KTsKICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGItPmxhc3QgKz0gbjsKLSAgICByZXYtPmxvZy0+aGFuZGxlciA9IG5neF9odHRwX2xvZ19lcnJvcjsKLSAgICBjdHgtPmFjdGlvbiA9ICJyZWFkaW5nIGNsaWVudCByZXF1ZXN0IGxpbmUiOworCisgICAgYy0+bG9nLT5oYW5kbGVyID0gbmd4X2h0dHBfbG9nX2Vycm9yOworICAgIGMtPmxvZy0+YWN0aW9uID0gInJlYWRpbmcgY2xpZW50IHJlcXVlc3QgbGluZSI7CiAKICAgICBuZ3hfaHR0cF9pbml0X3JlcXVlc3QocmV2KTsKIH0KQEAgLTIzMDIsMTYgKzIzMDIsMTcgQEAKIH0KIAogCi1zdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9sb2dfZXJyb3Iodm9pZCAqZGF0YSwgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pCitzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotICAgIG5neF9odHRwX2xvZ19jdHhfdCAqY3R4ID0gZGF0YTsKLQotICAgIHVfY2hhciAqcDsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICpwOworICAgIG5neF9odHRwX2xvZ19jdHhfdCAgKmN0eDsKIAogICAgIHAgPSBidWY7CiAKLSAgICBpZiAoY3R4LT5hY3Rpb24pIHsKLSAgICAgICAgcCA9IG5neF9zbnByaW50ZihwLCBsZW4sICIgd2hpbGUgJXMiLCBjdHgtPmFjdGlvbik7CisgICAgY3R4ID0gbG9nLT5kYXRhOworCisgICAgaWYgKGxvZy0+YWN0aW9uKSB7CisgICAgICAgIHAgPSBuZ3hfc25wcmludGYocCwgbGVuLCAiIHdoaWxlICVzIiwgbG9nLT5hY3Rpb24pOwogICAgICAgICBsZW4gLT0gcCAtIGJ1ZjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDJlNTQ1OWQuLmRhZTgyNjkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtMTE3LDggKzExNyw4IEBACiAgICAgfQogCiAgICAgdS0+cGVlci5sb2cgPSByLT5jb25uZWN0aW9uLT5sb2c7Ci0gICAgdS0+c2F2ZWRfY3R4ID0gci0+Y29ubmVjdGlvbi0+bG9nLT5kYXRhOwotICAgIHUtPnNhdmVkX2hhbmRsZXIgPSByLT5jb25uZWN0aW9uLT5sb2ctPmhhbmRsZXI7CisgICAgdS0+c2F2ZWRfbG9nX2N0eCA9IHItPmNvbm5lY3Rpb24tPmxvZy0+ZGF0YTsKKyAgICB1LT5zYXZlZF9sb2dfaGFuZGxlciA9IHItPmNvbm5lY3Rpb24tPmxvZy0+aGFuZGxlcjsKICAgICByLT5jb25uZWN0aW9uLT5sb2ctPmRhdGEgPSB1LT5sb2dfY3R4OwogICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+aGFuZGxlciA9IHUtPmxvZ19oYW5kbGVyOwogCkBAIC0xNjAsNiArMTYwLDE0IEBACiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBldi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJodHRwIHVwc3RyZWFtIGNoZWNrIGNsaWVudCwgd3JpdGUgZXZlbnQ6JWQiLCBldi0+d3JpdGUpOwogCisgICAgYyA9IGV2LT5kYXRhOworICAgIHIgPSBjLT5kYXRhOworICAgIHUgPSByLT51cHN0cmVhbTsKKworICAgIGlmICh1LT5wZWVyLmNvbm5lY3Rpb24gPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgKE5HWF9IQVZFX0tRVUVVRSkKIAogICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgewpAQCAtMTc0LDEwICsxODIsNiBAQAogICAgICAgICAgICAgZXYtPmVycm9yID0gMTsKICAgICAgICAgfQogCi0gICAgICAgIGMgPSBldi0+ZGF0YTsKLSAgICAgICAgciA9IGMtPmRhdGE7Ci0gICAgICAgIHUgPSByLT51cHN0cmVhbTsKLQogICAgICAgICBpZiAoIXUtPmNhY2hhYmxlICYmIHUtPnBlZXIuY29ubmVjdGlvbikgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGV2LT5sb2csIGV2LT5rcV9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIHJlcG9ydGVkIHRoYXQgY2xpZW50IGNsb3NlZCAiCkBAIC0yMDMsOCArMjA3LDYgQEAKIAogI2VuZGlmCiAKLSAgICBjID0gZXYtPmRhdGE7Ci0KICAgICBuID0gcmVjdihjLT5mZCwgYnVmLCAxLCBNU0dfUEVFSyk7CiAKICAgICBlcnIgPSBuZ3hfc29ja2V0X2Vycm5vOwpAQCAtMjE4LDkgKzIyMCw2IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByID0gYy0+ZGF0YTsKLSAgICB1ID0gci0+dXBzdHJlYW07Ci0KICAgICBpZiAoKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfTEVWRUxfRVZFTlQpICYmIGV2LT5hY3RpdmUpIHsKICAgICAgICAgaWYgKG5neF9kZWxfZXZlbnQoZXYsIE5HWF9SRUFEX0VWRU5ULCAwKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwKQEAgLTI0Miw4ICsyNDEsNyBAQAogCiAgICAgICAgIGV2LT5lcnJvciA9IDE7CiAKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBuID09IDAgKi8KKyAgICB9IGVsc2UgeyAvKiBuID09IDAgKi8KICAgICAgICAgZXJyID0gMDsKICAgICB9CiAKQEAgLTI3MiwxMCArMjcwLDggQEAKIHsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICByYzsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgICpjOwotICAgIG5neF9odHRwX2xvZ19jdHhfdCAgKmN0eDsKIAotICAgIGN0eCA9IHItPmNvbm5lY3Rpb24tPmxvZy0+ZGF0YTsKLSAgICBjdHgtPmFjdGlvbiA9ICJjb25uZWN0aW5nIHRvIHVwc3RyZWFtIjsKKyAgICByLT5jb25uZWN0aW9uLT5sb2ctPmFjdGlvbiA9ICJjb25uZWN0aW5nIHRvIHVwc3RyZWFtIjsKIAogICAgIHItPmNvbm5lY3Rpb24tPnNpbmdsZV9jb25uZWN0aW9uID0gMDsKIApAQCAtNDEzLDkgKzQwOSw4IEBACiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF91cHN0cmVhbV9zZW5kX3JlcXVlc3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX3QgKnUpCiB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAqYzsKLSAgICBuZ3hfaHR0cF9sb2dfY3R4X3QgICpjdHg7CisgICAgaW50ICAgICAgICAgICAgICAgIHJjOworICAgIG5neF9jb25uZWN0aW9uX3QgICpjOwogICAgIAogICAgIGMgPSB1LT5wZWVyLmNvbm5lY3Rpb247CiAKQEAgLTQzNyw4ICs0MzIsNyBAQAogCiAjZW5kaWYKIAotICAgIGN0eCA9IGMtPmxvZy0+ZGF0YTsKLSAgICBjdHgtPmFjdGlvbiA9ICJzZW5kaW5nIHJlcXVlc3QgdG8gdXBzdHJlYW0iOworICAgIGMtPmxvZy0+YWN0aW9uID0gInNlbmRpbmcgcmVxdWVzdCB0byB1cHN0cmVhbSI7CiAKICAgICByYyA9IG5neF9vdXRwdXRfY2hhaW4oJnUtPm91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdS0+cmVxdWVzdF9zZW50ID8gTlVMTCA6IHItPnJlcXVlc3RfYm9keS0+YnVmcyk7CkBAIC01MTUsNyArNTA5LDYgQEAKIHsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAqYzsKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAqcjsKLSAgICBuZ3hfaHR0cF9sb2dfY3R4X3QgICAqY3R4OwogICAgIG5neF9odHRwX3Vwc3RyZWFtX3QgICp1OwogCiAgICAgYyA9IHdldi0+ZGF0YTsKQEAgLTUyNiw4ICs1MTksNyBAQAogICAgICAgICAgICAgICAgICAgICJodHRwIHVwc3RyZWFtIHNlbmQgcmVxdWVzdCBoYW5kbGVyIik7CiAKICAgICBpZiAod2V2LT50aW1lZG91dCkgewotICAgICAgICBjdHggPSBjLT5sb2ctPmRhdGE7Ci0gICAgICAgIGN0eC0+YWN0aW9uID0gInNlbmRpbmcgcmVxdWVzdCB0byB1cHN0cmVhbSI7CisgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gInNlbmRpbmcgcmVxdWVzdCB0byB1cHN0cmVhbSI7CiAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX25leHQociwgdSwgTkdYX0hUVFBfVVBTVFJFQU1fRlRfVElNRU9VVCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01NDgsNyArNTQwLDYgQEAKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgcmM7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgKmM7CiAgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAgKnI7Ci0gICAgbmd4X2h0dHBfbG9nX2N0eF90ICAgKmN0eDsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAqdTsKIAogICAgIGMgPSByZXYtPmRhdGE7CkBAIC01NTYsMTAgKzU0Nyw5IEBACiAgICAgdSA9IHItPnVwc3RyZWFtOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCByZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiaHR0cCB1cHN0cmVhbSBwcm9jZXNzIGhhbmRsZXIiKTsKKyAgICAgICAgICAgICAgICAgICAiaHR0cCB1cHN0cmVhbSBwcm9jZXNzIGhlYWRlciIpOwogCi0gICAgY3R4ID0gYy0+bG9nLT5kYXRhOwotICAgIGN0eC0+YWN0aW9uID0gInJlYWRpbmcgcmVzcG9uc2UgaGVhZGVyIGZyb20gdXBzdHJlYW0iOworICAgIGMtPmxvZy0+YWN0aW9uID0gInJlYWRpbmcgcmVzcG9uc2UgaGVhZGVyIGZyb20gdXBzdHJlYW0iOwogCiAgICAgaWYgKHJldi0+dGltZWRvdXQpIHsKICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fbmV4dChyLCB1LCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9USU1FT1VUKTsKQEAgLTU3Niw3ICs1NjYsNyBAQAogCiAgICAgICAgIHUtPmhlYWRlcl9pbi5wb3MgPSB1LT5oZWFkZXJfaW4uc3RhcnQ7CiAgICAgICAgIHUtPmhlYWRlcl9pbi5sYXN0ID0gdS0+aGVhZGVyX2luLnN0YXJ0OwotICAgICAgICB1LT5oZWFkZXJfaW4uZW5kID0gdS0+aGVhZGVyX2luLmxhc3QgKyB1LT5jb25mLT5oZWFkZXJfYnVmZmVyX3NpemU7CisgICAgICAgIHUtPmhlYWRlcl9pbi5lbmQgPSB1LT5oZWFkZXJfaW4uc3RhcnQgKyB1LT5jb25mLT5oZWFkZXJfYnVmZmVyX3NpemU7CiAgICAgICAgIHUtPmhlYWRlcl9pbi50ZW1wb3JhcnkgPSAxOwogCiAgICAgICAgIHUtPmhlYWRlcl9pbi50YWcgPSB1LT5vdXRwdXQudGFnOwpAQCAtODE1LDcgKzgwNSw2IEBACiB7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgKmM7CiAgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAgKnI7Ci0gICAgbmd4X2h0dHBfbG9nX2N0eF90ICAgKmN0eDsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAqdTsKICAgICBuZ3hfZXZlbnRfcGlwZV90ICAgICAqcDsKIApAQCAtODIzLDE3ICs4MTIsMTUgQEAKICAgICByID0gYy0+ZGF0YTsKICAgICB1ID0gci0+dXBzdHJlYW07CiAKLSAgICBjdHggPSBldi0+bG9nLT5kYXRhOwotCiAgICAgaWYgKGV2LT53cml0ZSkgewotICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJodHRwIHByb3h5IHByb2Nlc3MgZG93bnN0cmVhbSIpOwotICAgICAgICBjdHgtPmFjdGlvbiA9ICJzZW5kaW5nIHRvIGNsaWVudCI7CisgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCB1cHN0cmVhbSBwcm9jZXNzIGRvd25zdHJlYW0iKTsKKyAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSAic2VuZGluZyB0byBjbGllbnQiOwogICAgIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcHJveHkgcHJvY2VzcyB1cHN0cmVhbSIpOwotICAgICAgICBjdHgtPmFjdGlvbiA9ICJyZWFkaW5nIHVwc3RyZWFtIGJvZHkiOworICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgdXBzdHJlYW0gcHJvY2VzcyB1cHN0cmVhbSIpOworICAgICAgICBjLT5sb2ctPmFjdGlvbiA9ICJyZWFkaW5nIHVwc3RyZWFtIjsKICAgICB9CiAgICAgCiAgICAgcCA9ICZ1LT5waXBlOwpAQCAtODgyLDggKzg2OSw4IEBACiAjZW5kaWYKIAogICAgICAgICBpZiAocC0+dXBzdHJlYW1fZG9uZSB8fCBwLT51cHN0cmVhbV9lb2YgfHwgcC0+dXBzdHJlYW1fZXJyb3IpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHByb3h5IHVwc3RyZWFtIGV4aXQ6ICVwIiwgcC0+b3V0KTsKKyAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgdXBzdHJlYW0gZXhpdDogJXAiLCBwLT5vdXQpOwogI2lmIDAKICAgICAgICAgICAgIG5neF9odHRwX2J1c3lfdW5sb2NrKHUtPmNvbmYtPmJ1c3lfbG9jaywgJnUtPmJ1c3lfbG9jayk7CiAjZW5kaWYKQEAgLTg5Myw4ICs4ODAsOCBAQAogICAgIH0KIAogICAgIGlmIChwLT5kb3duc3RyZWFtX2Vycm9yKSB7Ci0gICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcHJveHkgZG93bnN0cmVhbSBlcnJvciIpOworICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgdXBzdHJlYW0gZG93bnN0cmVhbSBlcnJvciIpOwogCiAgICAgICAgIGlmICghdS0+Y2FjaGFibGUgJiYgdS0+cGVlci5jb25uZWN0aW9uKSB7CiAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsIDApOwpAQCAtOTc2LDcgKzk2Myw3IEBACiAKICAgICAgICAgICAgIGlmICh1LT5zdGFsZSAmJiAodS0+Y29uZi0+dXNlX3N0YWxlICYgZnRfdHlwZSkpIHsKICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9wcm94eV9zZW5kX2NhY2hlZF9yZXNwb25zZShyKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9zZW5kX2NhY2hlZF9yZXNwb25zZShyKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC0xMDEwLDggKzk5Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX3QgKnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9pbnRfdCByYykKIHsKLSAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiZmluYWxpemUgaHR0cCB1cHN0cmVhbSByZXF1ZXN0Iik7CisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImZpbmFsaXplIGh0dHAgdXBzdHJlYW0gcmVxdWVzdDogJWkiLCByYyk7CiAKICAgICB1LT5maW5hbGl6ZV9yZXF1ZXN0KHIsIHJjKTsKIApAQCAtMTAyMywxNSArMTAxMCwxNyBAQAogICAgICAgICBuZ3hfY2xvc2VfY29ubmVjdGlvbih1LT5wZWVyLmNvbm5lY3Rpb24pOwogICAgIH0KIAorICAgIHUtPnBlZXIuY29ubmVjdGlvbiA9IE5VTEw7CisKICAgICBpZiAodS0+aGVhZGVyX3NlbnQKICAgICAgICAgJiYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA+PSBOR1hfSFRUUF9TUEVDSUFMX1JFU1BPTlNFKSkKICAgICB7CiAgICAgICAgIHJjID0gMDsKICAgICB9CiAKLSAgICBpZiAodS0+c2F2ZWRfY3R4KSB7Ci0gICAgICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+ZGF0YSA9IHUtPnNhdmVkX2N0eDsKLSAgICAgICAgci0+Y29ubmVjdGlvbi0+bG9nLT5oYW5kbGVyID0gdS0+c2F2ZWRfaGFuZGxlcjsKKyAgICBpZiAodS0+c2F2ZWRfbG9nX2N0eCkgeworICAgICAgICByLT5jb25uZWN0aW9uLT5sb2ctPmRhdGEgPSB1LT5zYXZlZF9sb2dfY3R4OworICAgICAgICByLT5jb25uZWN0aW9uLT5sb2ctPmhhbmRsZXIgPSB1LT5zYXZlZF9sb2dfaGFuZGxlcjsKICAgICB9CiAKICAgICBpZiAodS0+cGlwZS50ZW1wX2ZpbGUpIHsKQEAgLTEwNDMsNyArMTAzMiw3IEBACiAjaWYgMAogICAgIGlmICh1LT5jYWNoZSkgewogICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcHJveHkgY2FjaGUgZmQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgdXBzdHJlYW0gY2FjaGUgZmQ6ICVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgdS0+Y2FjaGUtPmN0eC5maWxlLmZkKTsKICAgICB9CiAjZW5kaWYKQEAgLTEwNTcsNiArMTA0Niw4IEBACiAjZW5kaWYKICAgICB9CiAKKyAgICByLT5jb25uZWN0aW9uLT5sb2ctPmFjdGlvbiA9ICJzZW5kaW5nIHRvIGNsaWVudCI7CisKICAgICBpZiAocmMgPT0gMCAmJiByLT5tYWluID09IE5VTEwpIHsKICAgICAgICAgcmMgPSBuZ3hfaHR0cF9zZW5kX2xhc3Qocik7CiAgICAgfQpAQCAtMTExMSwyNCArMTEwMiwyNCBAQAogfQogCiAKLXVfY2hhciAqbmd4X2h0dHBfdXBzdHJlYW1fbG9nX2Vycm9yKHZvaWQgKmRhdGEsIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQordV9jaGFyICpuZ3hfaHR0cF91cHN0cmVhbV9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotICAgIG5neF9odHRwX2xvZ19jdHhfdCAqY3R4ID0gZGF0YTsKLSAgICAKICAgICB1X2NoYXIgICAgICAgICAgICAgICAgICpwOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgIGVzY2FwZTsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICB1cmk7CisgICAgbmd4X2h0dHBfbG9nX2N0eF90ICAgICAqY3R4OwogICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICAgKnI7CiAgICAgbmd4X2h0dHBfdXBzdHJlYW1fdCAgICAqdTsKICAgICBuZ3hfcGVlcl9jb25uZWN0aW9uX3QgICpwZWVyOwogCisgICAgY3R4ID0gbG9nLT5kYXRhOwogICAgIHIgPSBjdHgtPnJlcXVlc3Q7CiAgICAgdSA9IHItPnVwc3RyZWFtOwogICAgIHBlZXIgPSAmdS0+cGVlcjsKIAogICAgIHAgPSBuZ3hfc25wcmludGYoYnVmLCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAiIHdoaWxlICVzLCBjbGllbnQ6ICVWLCBVUkw6ICVWLCB1cHN0cmVhbTogJVYlViVzJVYiLAotICAgICAgICAgICAgICAgICAgICAgY3R4LT5hY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICBsb2ctPmFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICZyLT5jb25uZWN0aW9uLT5hZGRyX3RleHQsCiAgICAgICAgICAgICAgICAgICAgICAmci0+dW5wYXJzZWRfdXJpLAogICAgICAgICAgICAgICAgICAgICAgJnUtPnNjaGVtYSwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCmluZGV4IDY2MTQyMTEuLjc5YmEyYTEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaApAQCAtOTIsOCArOTIsOCBAQAogCiAgICAgbmd4X2h0dHBfbG9nX2N0eF90ICAgICAgICAgKmxvZ19jdHg7CiAgICAgbmd4X2xvZ19oYW5kbGVyX3B0ICAgICAgICAgIGxvZ19oYW5kbGVyOwotICAgIG5neF9odHRwX2xvZ19jdHhfdCAgICAgICAgICpzYXZlZF9jdHg7Ci0gICAgbmd4X2xvZ19oYW5kbGVyX3B0ICAgICAgICAgIHNhdmVkX2hhbmRsZXI7CisgICAgbmd4X2h0dHBfbG9nX2N0eF90ICAgICAgICAgKnNhdmVkX2xvZ19jdHg7CisgICAgbmd4X2xvZ19oYW5kbGVyX3B0ICAgICAgICAgIHNhdmVkX2xvZ19oYW5kbGVyOwogCiAgICAgLyogdXNlZCB0byBwYXJzZSBhbiB1cHN0cmVhbSBIVFRQIGhlYWRlciAqLwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBzdGF0dXM7CkBAIC0xMTMsNyArMTEzLDcgQEAKIAogCiB2b2lkIG5neF9odHRwX3Vwc3RyZWFtX2luaXQobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKLXVfY2hhciAqbmd4X2h0dHBfdXBzdHJlYW1fbG9nX2Vycm9yKHZvaWQgKmRhdGEsIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKK3VfY2hhciAqbmd4X2h0dHBfdXBzdHJlYW1fbG9nX2Vycm9yKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiAKIAogZXh0ZXJuIGNoYXIgKm5neF9odHRwX3Vwc3RyZWFtX2hlYWRlcl9lcnJvcnNbXTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlci5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyLmMKaW5kZXggNjMyYzZiZi4uZDRkZTRhMSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyLmMKQEAgLTgxLDcgKzgxLDE4IEBACiAjaWYgMQogICAgICAgICBpZiAobmd4X2J1Zl9zaXplKGNsLT5idWYpID09IDAgJiYgIW5neF9idWZfc3BlY2lhbChjbC0+YnVmKSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiemVybyBzaXplIGJ1ZiBpbiB3cml0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInplcm8gc2l6ZSBidWYgaW4gd3JpdGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInQ6JWQgcjolZCBmOiVkICVwICVwLSVwICVwICVPLSVPIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+dGVtcG9yYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5yZWN5Y2xlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+aW5fZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+bGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+ZmlsZV9wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmZpbGVfbGFzdCk7CisKICAgICAgICAgICAgIG5neF9kZWJ1Z19wb2ludCgpOwogICAgICAgICB9CiAjZW5kaWYKQEAgLTEyMCw3ICsxMzEsMTggQEAKICNpZiAxCiAgICAgICAgIGlmIChuZ3hfYnVmX3NpemUoY2wtPmJ1ZikgPT0gMCAmJiAhbmd4X2J1Zl9zcGVjaWFsKGNsLT5idWYpKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ6ZXJvIHNpemUgYnVmIGluIHdyaXRlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAiemVybyBzaXplIGJ1ZiBpbiB3cml0ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAidDolZCByOiVkIGY6JWQgJXAgJXAtJXAgJXAgJU8tJU8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT50ZW1wb3JhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnJlY3ljbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5pbl9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlX3BvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+ZmlsZV9sYXN0KTsKKwogICAgICAgICAgICAgbmd4X2RlYnVnX3BvaW50KCk7CiAgICAgICAgIH0KICNlbmRpZgpAQCAtMTYxLDE1ICsxODMsMTYgQEAKICAgICB9CiAKICAgICBpZiAoc2l6ZSA9PSAwICYmICFjLT5idWZmZXJlZCkgewotICAgICAgICBpZiAoIWxhc3QpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGh0dHAgb3V0cHV0IGNoYWluIGlzIGVtcHR5Iik7Ci0KLSAgICAgICAgICAgIG5neF9kZWJ1Z19wb2ludCgpOwotCi0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICBpZiAobGFzdCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gTkdYX09LOworCisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJ0aGUgaHR0cCBvdXRwdXQgY2hhaW4gaXMgZW1wdHkiKTsKKworICAgICAgICBuZ3hfZGVidWdfcG9pbnQoKTsKKworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAogICAgIHNlbnQgPSBjLT5zZW50OwpAQCAtMTkyLDcgKzIxNSw3IEBACiAKICAgICBjdHgtPm91dCA9IGNoYWluOwogCi0gICAgaWYgKGNoYWluIHx8IGMtPmJ1ZmZlcmVkKSB7CisgICAgaWYgKGNoYWluIHx8IChsYXN0ICYmIGMtPmJ1ZmZlcmVkKSkgewogICAgICAgICByZXR1cm4gTkdYX0FHQUlOOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYyBiL3NyYy9vcy91bml4L25neF9jaGFubmVsLmMKaW5kZXggMWZkNWNiNC4uODUzYzVkNiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfY2hhbm5lbC5jCkBAIC0zOCw2ICszOCw4IEBACiAgICAgICAgICooaW50ICopIENNU0dfREFUQSgmY21zZy5jbSkgPSBjaC0+ZmQ7CiAgICAgfQogCisgICAgbXNnLm1zZ19mbGFncyA9IDA7CisKICNlbHNlCiAKICAgICBpZiAoY2gtPmZkID09IC0xKSB7CkBAIC01OCw3ICs2MCw2IEBACiAgICAgbXNnLm1zZ19uYW1lbGVuID0gMDsKICAgICBtc2cubXNnX2lvdiA9IGlvdjsKICAgICBtc2cubXNnX2lvdmxlbiA9IDE7Ci0gICAgbXNnLm1zZ19mbGFncyA9IDA7CiAKICAgICBuID0gc2VuZG1zZyhzLCAmbXNnLCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMKaW5kZXggMGI0ZGZjMC4uNTBjYWQzMCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jCkBAIC0yNzksMTEgKzI3OSwxNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHJjID09IDAgJiYgc2VudCA9PSAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2VuZGZpbGUoKSBpbiBGcmVlQlNEIDMueC00LnggbWF5IHJldHVybiB2YWx1ZSA+PSAwCisgICAgICAgICAgICAgKiBvbiBzdWNjZXNzLCBhbHRob3VnaCBvbmx5IDAgaXMgZG9jdW1lbnRlZAorICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIGlmIChyYyA+PSAwICYmIHNlbnQgPT0gMCkgewogCiAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiByYyBhbmQgc2VudCBlcXVhbCB0byB6ZXJvIHdoZW4gc29tZW9uZSBoYXMgdHJ1bmNhdGVkCi0gICAgICAgICAgICAgICAgICogdGhlIGZpbGUsIHNvIHRoZSBvZmZzZXQgYmVjYW1lIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICogaWYgcmMgaXMgT0sgYW5kIHNlbnQgZXF1YWwgdG8gemVybywgdGhlbiBzb21lb25lCisgICAgICAgICAgICAgICAgICogaGFzIHRydW5jYXRlZCB0aGUgZmlsZSwgc28gdGhlIG9mZnNldCBiZWNhbWUgYmV5b25kCisgICAgICAgICAgICAgICAgICogdGhlIGVuZCBvZiB0aGUgZmlsZQogICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjLT5sb2csIDAsCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jCmluZGV4IDU5YmM1OWMuLmQ0NWQ3YzAgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jCkBAIC04OSw3ICs4OSwxOCBAQAogI2lmIDEKICAgICAgICAgICAgIGlmICghbmd4X2J1Zl9pbl9tZW1vcnkoY2wtPmJ1ZikgJiYgIWNsLT5idWYtPmluX2ZpbGUpIHsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ6ZXJvIHNpemUgYnVmIGluIHNlbmRmaWxlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiemVybyBzaXplIGJ1ZiBpbiBzZW5kZmlsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidDolZCByOiVkIGY6JWQgJXAgJXAtJXAgJXAgJU8tJU8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+dGVtcG9yYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+cmVjeWNsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5pbl9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmZpbGVfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+ZmlsZV9sYXN0KTsKKwogICAgICAgICAgICAgICAgIG5neF9kZWJ1Z19wb2ludCgpOwogICAgICAgICAgICAgfQogI2VuZGlmCkBAIC0xMjksNyArMTQwLDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgLyogdGhlIFRDUF9DT1JLIGFuZCBUQ1BfTk9ERUxBWSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlICovCiAKLSAgICAgICAgICAgIGlmIChjLT50Y3Bfbm9kZWxheSkgeworICAgICAgICAgICAgaWYgKGMtPnRjcF9ub2RlbGF5ID09IE5HWF9UQ1BfTk9ERUxBWV9TRVQpIHsKIAogICAgICAgICAgICAgICAgIHRjcF9ub2RlbGF5ID0gMDsKIApAQCAtMTQ2LDIwICsxNTcsMjAgQEAKIAogICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5HWF9FSU5UUikgeyAKICAgICAgICAgICAgICAgICAgICAgICAgIHdldi0+ZXJyb3IgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgbmd4X3NvY2tldF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFRDUF9OT0RFTEFZKSBmYWlsZWQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ0hBSU5fRVJST1I7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGMtPnRjcF9ub2RlbGF5ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYy0+dGNwX25vZGVsYXkgPSBOR1hfVENQX05PREVMQVlfVU5TRVQ7CiAKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyB0Y3Bfbm9kZWxheSIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFjLT50Y3Bfbm9kZWxheSkgeworICAgICAgICAgICAgaWYgKGMtPnRjcF9ub2RlbGF5ID09IE5HWF9UQ1BfTk9ERUxBWV9VTlNFVCkgewogCiAgICAgICAgICAgICAgICAgaWYgKG5neF90Y3Bfbm9wdXNoKGMtPmZkKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvcmZvcmtfdGhyZWFkLlMgYi9zcmMvb3MvdW5peC9yZm9ya190aHJlYWQuUwppbmRleCA0MjYzMGE3Li4xNjEwMDdkIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9yZm9ya190aHJlYWQuUworKysgYi9zcmMvb3MvdW5peC9yZm9ya190aHJlYWQuUwpAQCAtNCw3ICs0LDYgQEAKICAqLwogCiAKLQogI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KIApAQCAtMTksMTQgKzE4LDE0IEBACiAJbW92CSVlc3AsICVlYnAKIAlwdXNoCSVlc2kKIAotCW1vdgkxMiglZWJwKSwgJWVzaQkjIHRoZSBzdGFjayBhZGRyZXNzCisJbW92CTEyKCVlYnApLCAlZXNpCSMgdGhlIHRocmVhZCBzdGFjayBhZGRyZXNzCiAKIAlzdWIJJDQsICVlc2kKIAltb3YJMjAoJWVicCksICVlYXgJIyB0aGUgdGhyZWFkIGFyZ3VtZW50CiAJbW92CSVlYXgsICglZXNpKQogCiAJc3ViCSQ0LCAlZXNpCi0JbW92CTE2KCVlYnApLCAlZWF4CSMgdGhlIHN0YXJ0IHRocmVhZCBhZGRyZXNzCisJbW92CTE2KCVlYnApLCAlZWF4CSMgdGhlIHRocmVhZCBzdGFydCBhZGRyZXNzCiAJbW92CSVlYXgsICglZXNpKQogCiAJcHVzaAk4KCVlYnApCQkjIHJmb3JrKDIpIGZsYWdzCkBAIC00MSw4ICs0MCw3IEBACiBwYXJlbnQ6CiAJYWRkCSQ4LCAlZXNwCiAJcG9wCSVlc2kKLQltb3YJJWVicCwgJWVzcAotCXBvcAklZWJwCisJbGVhdmUKIAlyZXQKIAogY2hpbGQ6CkBAIC01OSw4ICs1Nyw3IEBACiBlcnJvcjoKIAlhZGQJJDgsICVlc3AKIAlwb3AJJWVzaQotCW1vdgklZWJwLCAlZXNwCi0JcG9wCSVlYnAKKwlsZWF2ZQogCVBJQ19QUk9MT0dVRQogCiAJLyogbGliYydzIGNlcnJvcjogam1wICBQSUNfUExUKEhJREVOQU1FKGNlcnJvcikpICovCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmdpbngucmMgYi9zcmMvb3Mvd2luMzIvbmdpbngucmMKaW5kZXggN2EyZTI0MS4uZmVlODY5YSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25naW54LnJjCisrKyBiL3NyYy9vcy93aW4zMi9uZ2lueC5yYwpAQCAtMSwxMCArMSwxMCBAQAogCiAvLyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKLSNpbmNsdWRlIDxuZ3hfZ3VpLmg+CisjaW5jbHVkZSA8bmd4X2d1aV9yZXNvdXJjZXMuaD4KIAogbmdpbnggICBpY29uICBkaXNjYXJkYWJsZSAgInNyY1xcb3NcXHdpbjMyXFxuZ2lueC5pY28iCi10cmF5ICAgIGljb24gIGRpc2NhcmRhYmxlICAic3JjXFxvc1xcd2luMzJcXHRyYXkuaWNvIgordHJheSAgICBpY29uICBkaXNjYXJkYWJsZSAgInNyY1xcb3NcXHdpbjMyXFxuZ2lueF90cmF5LmljbyIKIAogbmdpbnggICBtZW51ICBkaXNjYXJkYWJsZSAKIGJlZ2luCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvdHJheS5pY28gYi9zcmMvb3Mvd2luMzIvbmdpbnhfdHJheS5pY28Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNyYy9vcy93aW4zMi90cmF5LmljbwpyZW5hbWUgdG8gc3JjL29zL3dpbjMyL25naW54X3RyYXkuaWNvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfZ3VpLmggYi9zcmMvb3Mvd2luMzIvbmd4X2d1aS5oCmluZGV4IDFjMmZkOWIuLmU0NGU2YWEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfZ3VpLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF9ndWkuaApAQCAtMTAsMTEgKzEwLDcgQEAKIAogI2luY2x1ZGUgPG5neF9jb25maWcuaD4KICNpbmNsdWRlIDxuZ3hfY29yZS5oPgotCi0KLSNkZWZpbmUgTkdYX1dNX1RSQVkgICAgV01fVVNFUgotI2RlZmluZSBOR1hfV01fRVhJVCAgICBXTV9VU0VSICsgMQotI2RlZmluZSBOR1hfV01fQUJPVVQgICBXTV9VU0VSICsgMgorI2luY2x1ZGUgPG5neF9ndWlfcmVzb3VyY2VzLmg+CiAKIAogdm9pZCBuZ3hfbWVzc2FnZV9ib3goY2hhciAqdGl0bGUsIG5neF91aW50X3QgdHlwZSwgbmd4X2Vycl90IGVyciwKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfZ3VpX3Jlc291cmNlcy5oIGIvc3JjL29zL3dpbjMyL25neF9ndWlfcmVzb3VyY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiYjAwZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZ3VpX3Jlc291cmNlcy5oCkBAIC0wLDAgKzEsMTkgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKyAqLworCisKKyNpZm5kZWYgX05HWF9HVUlfUkVTT1VSQ0VTX0hfSU5DTFVERURfCisjZGVmaW5lIF9OR1hfR1VJX1JFU09VUkNFU19IX0lOQ0xVREVEXworCisKKyNpbmNsdWRlIDx3aW51c2VyLmg+CisKKworI2RlZmluZSBOR1hfV01fVFJBWSAgICBXTV9VU0VSCisjZGVmaW5lIE5HWF9XTV9FWElUICAgIFdNX1VTRVIgKyAxCisjZGVmaW5lIE5HWF9XTV9BQk9VVCAgIFdNX1VTRVIgKyAyCisKKworI2VuZGlmIC8qIF9OR1hfR1VJX1JFU09VUkNFU19IX0lOQ0xVREVEXyAqLwo=