ZGlmZiAtLWdpdCBhL2F1dG8vdGhyZWFkcyBiL2F1dG8vdGhyZWFkcwppbmRleCAyYmY4NWI2Li4yOWJjNzI0IDEwMDY0NAotLS0gYS9hdXRvL3RocmVhZHMKKysrIGIvYXV0by90aHJlYWRzCkBAIC01MCw3ICs1MCw3IEBACiAgICAgICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIC1wdGhyZWFkIgogICAgICAgICAgICAgOzsKIAotICAgICAgICAgICAgRnJlZUJTRDpbNTY3XSopCisgICAgICAgICAgICBGcmVlQlNEOls1Nl0qKQogICAgICAgICAgICAgICAgIGhhdmU9TkdYX1RIUkVBRFMgLiBhdXRvL2hhdmUKICAgICAgICAgICAgICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJFBUSFJFQURfU1JDUyIKICAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgLWxjX3IiCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IDk5MTM0ZWYuLjNiMWFhMTAgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC05LDYgKzksMzEgQEAKIDx0aXRsZSBsYW5nPSJlbiI+bmdpbnggY2hhbmdlbG9nPC90aXRsZT4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMy43IiBkYXRlPSIyNy4xMC4yMDA1Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBhY2Nlc3NfbG9nINDPxMTF0tbJ18HF1CDQwdLBzcXU0iBidWZmZXI9LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJhY2Nlc3NfbG9nIiBzdXBwb3J0cyB0aGUgImJ1ZmZlcj0iIHBhcmFtZXRlci4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CituZ2lueCDOxSDTz8LJ0sHM09EgzsEg0MzB1MbP0s3ByCwgz9TMyd7O2cggz9QgaTM4NiwgYW1kNjQsIHNwYXJjIMkgcHBjOworz9vJwsvBINDP0dfJzMHT2CDXIDAuMy4yLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbmdpbnggY291bGQgbm90IGJlIGJ1aWx0IG9uIHBsYXRmb3JtcyBkaWZmZXJlbnQgZnJvbSBpMzg2LCBhbWQ2NCwgc3BhcmMgySBwcGM7CitidWcgYXBwZWFyZWQgaW4gMC4zLjIuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4zLjYiIGRhdGU9IjI0LjEwLjIwMDUiPgogCiA8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCA1YTM1OTNkLi43OGFlMmE3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNiIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNyIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKaW5kZXggNzhlNjFmOC4uYWNlYzEzMCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwpAQCAtMTEsNiArMTEsNyBAQAogc3RhdGljIG5neF9pbnRfdCBuZ3hfY29uZl9oYW5kbGVyKG5neF9jb25mX3QgKmNmLCBuZ3hfaW50X3QgbGFzdCk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9jb25mX3JlYWRfdG9rZW4obmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9jb25mX2luY2x1ZGUobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CitzdGF0aWMgdm9pZCBuZ3hfY29uZl9mbHVzaF9maWxlcyhuZ3hfY3ljbGVfdCAqY3ljbGUpOwogCiAKIHN0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfY29uZl9jb21tYW5kc1tdID0gewpAQCAtMzYsNyArMzcsNyBAQAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHByb2Nlc3MgKi8KKyAgICBuZ3hfY29uZl9mbHVzaF9maWxlcywgICAgICAgICAgICAgICAgICAvKiBleGl0IHByb2Nlc3MgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IG1hc3RlciAqLwogICAgIE5HWF9NT0RVTEVfVjFfUEFERElORwogfTsKQEAgLTc0MiwxMCArNzQzLDQ0IEBACiAgICAgICAgIGZpbGUtPm5hbWUuZGF0YSA9IE5VTEw7CiAgICAgfQogCisgICAgZmlsZS0+YnVmZmVyID0gTlVMTDsKKwogICAgIHJldHVybiBmaWxlOwogfQogCiAKK3N0YXRpYyB2b2lkCituZ3hfY29uZl9mbHVzaF9maWxlcyhuZ3hfY3ljbGVfdCAqY3ljbGUpCit7CisgICAgbmd4X3VpbnRfdCAgICAgICAgaTsKKyAgICBuZ3hfbGlzdF9wYXJ0X3QgICpwYXJ0OworICAgIG5neF9vcGVuX2ZpbGVfdCAgKmZpbGU7CisKKyAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0NPUkUsIGN5Y2xlLT5sb2csIDAsICJmbHVzaCBmaWxlcyIpOworCisgICAgcGFydCA9ICZjeWNsZS0+b3Blbl9maWxlcy5wYXJ0OworICAgIGZpbGUgPSBwYXJ0LT5lbHRzOworCisgICAgZm9yIChpID0gMDsgLyogdm9pZCAqLyA7IGkrKykgeworCisgICAgICAgIGlmIChpID49IHBhcnQtPm5lbHRzKSB7CisgICAgICAgICAgICBpZiAocGFydC0+bmV4dCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJ0ID0gcGFydC0+bmV4dDsKKyAgICAgICAgICAgIGZpbGUgPSBwYXJ0LT5lbHRzOworICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmlsZVtpXS5idWZmZXIgPT0gTlVMTCB8fCBmaWxlW2ldLnBvcyAtIGZpbGVbaV0uYnVmZmVyID09IDApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbmd4X3dyaXRlX2ZkKGZpbGVbaV0uZmQsIGZpbGVbaV0uYnVmZmVyLCBmaWxlW2ldLnBvcyAtIGZpbGVbaV0uYnVmZmVyKTsKKyAgICB9Cit9CisKKwogdm9pZCBuZ3hfY2RlY2wKIG5neF9jb25mX2xvZ19lcnJvcihuZ3hfdWludF90IGxldmVsLCBuZ3hfY29uZl90ICpjZiwgbmd4X2Vycl90IGVyciwKICAgICBjaGFyICpmbXQsIC4uLikKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaCBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaAppbmRleCA5ZjM0NGU2Li5iMDlkOGNjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmgKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oCkBAIC0zNCw2ICszNCw3IEBACiAKICNkZWZpbmUgTkdYX0NPTkZfVEFLRTIzICAgICAgKE5HWF9DT05GX1RBS0UyfE5HWF9DT05GX1RBS0UzKQogCisjZGVmaW5lIE5HWF9DT05GX1RBS0UxMjMgICAgIChOR1hfQ09ORl9UQUtFMXxOR1hfQ09ORl9UQUtFMnxOR1hfQ09ORl9UQUtFMykKICNkZWZpbmUgTkdYX0NPTkZfVEFLRTEyMzQgICAgKE5HWF9DT05GX1RBS0UxfE5HWF9DT05GX1RBS0UyfE5HWF9DT05GX1RBS0UzICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9DT05GX1RBS0U0KQogCkBAIC04Nyw2ICs4OCwxMSBAQAogc3RydWN0IG5neF9vcGVuX2ZpbGVfcyB7CiAgICAgbmd4X2ZkX3QgICAgICAgICAgICAgIGZkOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICBuYW1lOworCisgICAgdV9jaGFyICAgICAgICAgICAgICAgKmJ1ZmZlcjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAqcG9zOworICAgIHVfY2hhciAgICAgICAgICAgICAgICpsYXN0OworCiAjaWYgMAogICAgIC8qIGUuZy4gYXBwZW5kIG1vZGUsIGVycm9yX2xvZyAqLwogICAgIG5neF91aW50X3QgICAgICAgICAgICBmbGFnczsKQEAgLTEyMSwxMCArMTI3LDEwIEBACiAKICAgICBuZ3hfaW50X3QgICAgICAgICAgICgqaW5pdF9wcm9jZXNzKShuZ3hfY3ljbGVfdCAqY3ljbGUpOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgKCppbml0X3RocmVhZCkobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKLSAgICBuZ3hfaW50X3QgICAgICAgICAgICgqZXhpdF90aHJlYWQpKG5neF9jeWNsZV90ICpjeWNsZSk7Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAoKmV4aXRfcHJvY2Vzcykobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICgqZXhpdF90aHJlYWQpKG5neF9jeWNsZV90ICpjeWNsZSk7CisgICAgdm9pZCAgICAgICAgICAgICAgICAoKmV4aXRfcHJvY2Vzcykobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIAotICAgIG5neF9pbnRfdCAgICAgICAgICAgKCpleGl0X21hc3Rlcikobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKKyAgICB2b2lkICAgICAgICAgICAgICAgICgqZXhpdF9tYXN0ZXIpKG5neF9jeWNsZV90ICpjeWNsZSk7CiAKICAgICB1aW50cHRyX3QgICAgICAgICAgICAgc3BhcmVfaG9vazA7CiAgICAgdWludHB0cl90ICAgICAgICAgICAgIHNwYXJlX2hvb2sxOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMgYi9zcmMvY29yZS9uZ3hfY3ljbGUuYwppbmRleCA1ODY3OWVkLi5hYjE5NjExIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY3ljbGUuYworKysgYi9zcmMvY29yZS9uZ3hfY3ljbGUuYwpAQCAtNzI0LDYgKzcyNCwxMiBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZmlsZVtpXS5idWZmZXIgJiYgZmlsZVtpXS5wb3MgLSBmaWxlW2ldLmJ1ZmZlciAhPSAwKSB7CisgICAgICAgICAgICBuZ3hfd3JpdGVfZmQoZmlsZVtpXS5mZCwgZmlsZVtpXS5idWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtpXS5wb3MgLSBmaWxlW2ldLmJ1ZmZlcik7CisgICAgICAgICAgICBmaWxlW2ldLnBvcyA9IGZpbGVbaV0uYnVmZmVyOworICAgICAgICB9CisKICAgICAgICAgZmQgPSBuZ3hfb3Blbl9maWxlKGZpbGVbaV0ubmFtZS5kYXRhLCBOR1hfRklMRV9SRFdSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0ZJTEVfQ1JFQVRFX09SX09QRU58TkdYX0ZJTEVfQVBQRU5EKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2xvZy5jIGIvc3JjL2NvcmUvbmd4X2xvZy5jCmluZGV4IDkwNWM4YTEuLjQ0NGU5NDMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9sb2cuYworKysgYi9zcmMvY29yZS9uZ3hfbG9nLmMKQEAgLTgsNyArOCw2IEBACiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KIAogCi1zdGF0aWMgdm9pZCBuZ3hfbG9nX3dyaXRlKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmVycnN0ciwgc2l6ZV90IGxlbik7CiBzdGF0aWMgY2hhciAqbmd4X3NldF9lcnJvcl9sb2cobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CiAKIApAQCAtMTUyLDQyICsxNTEsMTMgQEAKICAgICAgICAgcCA9IGxvZy0+aGFuZGxlcihsb2csIHAsIGxhc3QgLSBwKTsKICAgICB9CiAKLSAgICBuZ3hfbG9nX3dyaXRlKGxvZywgZXJyc3RyLCBwIC0gZXJyc3RyKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotbmd4X2xvZ193cml0ZShuZ3hfbG9nX3QgKmxvZywgdV9jaGFyICplcnJzdHIsIHNpemVfdCBsZW4pCi17Ci0jaWYgKE5HWF9XSU4zMikKLSAgICB1X2xvbmcgIHdyaXR0ZW47Ci0KLSAgICBpZiAobGVuID49IE5HWF9NQVhfRVJST1JfU1RSIC0gMSkgewotICAgICAgICBsZW4gPSBOR1hfTUFYX0VSUk9SX1NUUiAtIDI7CisgICAgaWYgKHAgPiBsYXN0IC0gTkdYX0xJTkVGRUVEX1NJWkUpIHsKKyAgICAgICAgcCA9IGxhc3QgLSBOR1hfTElORUZFRURfU0laRTsKICAgICB9CiAKLSAgICBlcnJzdHJbbGVuKytdID0gQ1I7Ci0gICAgZXJyc3RyW2xlbisrXSA9IExGOworICAgIG5neF9saW5lZmVlZChwKTsKIAotICAgIFdyaXRlRmlsZShsb2ctPmZpbGUtPmZkLCBlcnJzdHIsIGxlbiwgJndyaXR0ZW4sIE5VTEwpOwotCi0jaWYgMAotICAgIGlmIChXcml0ZUZpbGUobG9nLT5maWxlLT5mZCwgZXJyc3RyLCBsZW4sICZ3cml0dGVuLCBOVUxMKSA9PSAwKSB7Ci0gICAgICAgIG5neF9tZXNzYWdlX2JveCgibmdpbngiLCBNQl9PSywgbmd4X2Vycm5vLCAiV3JpdGVGaWxlKCkgZmFpbGVkIik7Ci0gICAgfQotI2VuZGlmCi0KLSNlbHNlCi0KLSAgICBpZiAobGVuID09IE5HWF9NQVhfRVJST1JfU1RSKSB7Ci0gICAgICAgIGxlbi0tOwotICAgIH0KLQotICAgIGVycnN0cltsZW4rK10gPSBMRjsKLQotICAgICh2b2lkKSB3cml0ZShsb2ctPmZpbGUtPmZkLCBlcnJzdHIsIGxlbik7Ci0KLSNlbmRpZgorICAgIG5neF93cml0ZV9mZChsb2ctPmZpbGUtPmZkLCBlcnJzdHIsIHAgLSBlcnJzdHIpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKaW5kZXggNWU4ZTc0Ny4uNDllMjYwYSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAgICBuZ3hfZXJyX3QgZXJyLCBjaGFyICp0ZXh0KTsKIHN0YXRpYyB2b2lkICpuZ3hfb3BlbnNzbF9jcmVhdGVfY29uZihuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIGNoYXIgKm5neF9vcGVuc3NsX2luaXRfY29uZihuZ3hfY3ljbGVfdCAqY3ljbGUsIHZvaWQgKmNvbmYpOworc3RhdGljIHZvaWQgbmd4X29wZW5zc2xfZXhpdChuZ3hfY3ljbGVfdCAqY3ljbGUpOwogCiAjaWYgIShOR1hfU1NMX0VOR0lORSkKIHN0YXRpYyBjaGFyICpuZ3hfb3BlbnNzbF9ub2VuZ2luZShuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLApAQCAtNjQsNyArNjUsNyBAQAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHByb2Nlc3MgKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IG1hc3RlciAqLworICAgIG5neF9vcGVuc3NsX2V4aXQsICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQgbWFzdGVyICovCiAgICAgTkdYX01PRFVMRV9WMV9QQURESU5HCiB9OwogCkBAIC05MDgsNyArOTA5LDcgQEAKIHsKICNpZiAoTkdYX1NTTF9FTkdJTkUpCiAgICAgbmd4X29wZW5zc2xfY29uZl90ICpvc2NmID0gY29uZjsKLSAgICAKKwogICAgIEVOR0lORSAgKmVuZ2luZTsKIAogICAgIGlmIChvc2NmLT5lbmdpbmUubGVuID09IDApIHsKQEAgLTk1MSwzICs5NTIsMTIgQEAKIH0KIAogI2VuZGlmCisKKworc3RhdGljIHZvaWQKK25neF9vcGVuc3NsX2V4aXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQoreworI2lmIChOR1hfU1NMX0VOR0lORSkKKyAgICBFTkdJTkVfY2xlYW51cCgpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2xvZ19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbG9nX21vZHVsZS5jCmluZGV4IDZlNzc3MmUuLmY0OTkzYjUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbG9nX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbG9nX21vZHVsZS5jCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICBOVUxMIH0sCiAKICAgICB7IG5neF9zdHJpbmcoImFjY2Vzc19sb2ciKSwKLSAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMTIsCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEyMywKICAgICAgIG5neF9odHRwX2xvZ19zZXRfbG9nLAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAogICAgICAgMCwKQEAgLTE5MCwxMSArMTkwLDkgQEAKICAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgKmxpbmUsICpwOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgbGVuOwogICAgIG5neF9odHRwX2xvZ190ICAgICAgICAgICAqbG9nOworICAgIG5neF9vcGVuX2ZpbGVfdCAgICAgICAgICAqZmlsZTsKICAgICBuZ3hfaHR0cF9sb2dfb3BfdCAgICAgICAgKm9wOwogICAgIG5neF9odHRwX2xvZ19sb2NfY29uZl90ICAqbGNmOwotI2lmIChOR1hfV0lOMzIpCi0gICAgdV9sb25nICAgICAgICAgICAgICAgICAgICB3cml0dGVuOwotI2VuZGlmCiAKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiaHR0cCBsb2cgaGFuZGxlciIpOwpAQCAtMjE5LDExICsyMTcsMzQgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0jaWYgKE5HWF9XSU4zMikKLSAgICAgICAgbGVuICs9IDI7Ci0jZWxzZQotICAgICAgICBsZW4rKzsKLSNlbmRpZgorICAgICAgICBsZW4gKz0gTkdYX0xJTkVGRUVEX1NJWkU7CisKKyAgICAgICAgZmlsZSA9IGxvZ1tsXS5maWxlOworCisgICAgICAgIGlmIChmaWxlLT5idWZmZXIpIHsKKworICAgICAgICAgICAgaWYgKGxlbiA+IChzaXplX3QpIChmaWxlLT5sYXN0IC0gZmlsZS0+cG9zKSkgeworCisgICAgICAgICAgICAgICAgbmd4X3dyaXRlX2ZkKGZpbGUtPmZkLCBmaWxlLT5idWZmZXIsIGZpbGUtPnBvcyAtIGZpbGUtPmJ1ZmZlcik7CisKKyAgICAgICAgICAgICAgICBmaWxlLT5wb3MgPSBmaWxlLT5idWZmZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsZW4gPD0gKHNpemVfdCkgKGZpbGUtPmxhc3QgLSBmaWxlLT5wb3MpKSB7CisKKyAgICAgICAgICAgICAgICBwID0gZmlsZS0+cG9zOworCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxvZ1tsXS5vcHMtPm5lbHRzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcCA9IG9wW2ldLnJ1bihyLCBwLCAmb3BbaV0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5neF9saW5lZmVlZChwKTsKKworICAgICAgICAgICAgICAgIGZpbGUtPnBvcyA9IHA7CisKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIGxpbmUgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGxlbik7CiAgICAgICAgIGlmIChsaW5lID09IE5VTEwpIHsKQEAgLTIzNiwxMyArMjU3LDkgQEAKICAgICAgICAgICAgIHAgPSBvcFtpXS5ydW4ociwgcCwgJm9wW2ldKTsKICAgICAgICAgfQogCi0jaWYgKE5HWF9XSU4zMikKLSAgICAgICAgKnArKyA9IENSOyAqcCsrID0gTEY7Ci0gICAgICAgIFdyaXRlRmlsZShsb2dbbF0uZmlsZS0+ZmQsIGxpbmUsIHAgLSBsaW5lLCAmd3JpdHRlbiwgTlVMTCk7Ci0jZWxzZQotICAgICAgICAqcCsrID0gTEY7Ci0gICAgICAgIHdyaXRlKGxvZ1tsXS5maWxlLT5mZCwgbGluZSwgcCAtIGxpbmUpOwotI2VuZGlmCisgICAgICAgIG5neF9saW5lZmVlZChwKTsKKworICAgICAgICBuZ3hfd3JpdGVfZmQoZmlsZS0+ZmQsIGxpbmUsIHAgLSBsaW5lKTsKICAgICB9CiAKICAgICByZXR1cm4gTkdYX09LOwpAQCAtOTQyLDYgKzk1OSw3IEBACiB7CiAgICAgbmd4X2h0dHBfbG9nX2xvY19jb25mX3QgKmxsY2YgPSBjb25mOwogCisgICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICAgYnVmOwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGk7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAqdmFsdWUsIG5hbWU7CiAgICAgbmd4X2h0dHBfbG9nX3QgICAgICAgICAgICAqbG9nOwpAQCAtOTc0LDcgKzk5Miw3IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBpZiAoY2YtPmFyZ3MtPm5lbHRzID09IDMpIHsKKyAgICBpZiAoY2YtPmFyZ3MtPm5lbHRzID49IDMpIHsKICAgICAgICAgbmFtZSA9IHZhbHVlWzJdOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG5hbWUubGVuID0gc2l6ZW9mKCJjb21iaW5lZCIpIC0gMTsKQEAgLTk4NywxNCArMTAwNSw1MSBAQAogICAgICAgICAgICAgJiYgbmd4X3N0cmNhc2VjbXAoZm10W2ldLm5hbWUuZGF0YSwgbmFtZS5kYXRhKSA9PSAwKQogICAgICAgICB7CiAgICAgICAgICAgICBsb2ctPm9wcyA9IGZtdFtpXS5vcHM7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CisgICAgICAgICAgICBnb3RvIGJ1ZmZlcjsKICAgICAgICAgfQogICAgIH0KIAogICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gbG9nIGZvcm1hdCBcIiVWXCIiLCAmbmFtZSk7Ci0KICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisKK2J1ZmZlcjoKKworICAgIGlmIChjZi0+YXJncy0+bmVsdHMgPT0gNCkgeworICAgICAgICBpZiAobmd4X3N0cm5jbXAodmFsdWVbM10uZGF0YSwgImJ1ZmZlcj0iLCA3KSAhPSAwKSB7CisgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcGFyYW1ldGVyIFwiJVZcIiIsICZ2YWx1ZVszXSk7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBuYW1lLmxlbiA9IHZhbHVlWzNdLmxlbiAtIDc7CisgICAgICAgIG5hbWUuZGF0YSA9IHZhbHVlWzNdLmRhdGEgKyA3OworCisgICAgICAgIGJ1ZiA9IG5neF9wYXJzZV9zaXplKCZuYW1lKTsKKworICAgICAgICBpZiAoYnVmID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHBhcmFtZXRlciBcIiVWXCIiLCAmdmFsdWVbM10pOworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvZy0+ZmlsZS0+YnVmZmVyICYmIGxvZy0+ZmlsZS0+bGFzdCAtIGxvZy0+ZmlsZS0+cG9zICE9IGJ1ZikgeworICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2Nlc3NfbG9nIFwiJVZcIiBhbHJlYWR5IGRlZmluZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGRpZmZlcmVudCBidWZmZXIgc2l6ZSIsICZ2YWx1ZVsxXSk7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBsb2ctPmZpbGUtPmJ1ZmZlciA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIGJ1Zik7CisgICAgICAgIGlmIChsb2ctPmZpbGUtPmJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBsb2ctPmZpbGUtPnBvcyA9IGxvZy0+ZmlsZS0+YnVmZmVyOworICAgICAgICBsb2ctPmZpbGUtPmxhc3QgPSBsb2ctPmZpbGUtPmJ1ZmZlciArIGJ1ZjsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYwppbmRleCAzY2IzYmRmLi5lMzk1NDAwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYwpAQCAtMzYsNiArMzYsOCBAQAogICAgIG5neF9odHRwX3ZhcmlhYmxlX3JlcXVlc3RfbWV0aG9kKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpOwogc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKgogICAgIG5neF9odHRwX3ZhcmlhYmxlX3JlbW90ZV91c2VyKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpOworc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKgorICAgIG5neF9odHRwX3ZhcmlhYmxlX3NlbnQobmd4X2h0dHBfcmVxdWVzdF90ICpyLCB1aW50cHRyX3QgZGF0YSk7CiAKIAogLyoKQEAgLTQ0LDggKzQ2LDcgQEAKICAqICAgICAgICAgICAgICAgICBSRU1PVEVfSE9TVCAobnVsbCksIFJFTU9URV9JREVOVCAobnVsbCksCiAgKiAgICAgICAgICAgICAgICAgU0VSVkVSX1NPRlRXQVJFCiAgKgotICogICAgIEFwYWNoZSBTU0k6IERBVEVfR01ULCBET0NVTUVOVF9OQU1FLCBMQVNUX01PRElGSUVELAotICogICAgICAgICAgICAgICAgIFVTRVJfTkFNRSAoZmlsZSBvd25lcikKKyAqICAgICBBcGFjaGUgU1NJOiBET0NVTUVOVF9OQU1FLCBMQVNUX01PRElGSUVELCBVU0VSX05BTUUgKGZpbGUgb3duZXIpCiAgKi8KIAogc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3QgIG5neF9odHRwX2NvcmVfdmFyaWFibGVzW10gPSB7CkBAIC0xMTYsNiArMTE3LDEwIEBACiAKICAgICB7IG5neF9zdHJpbmcoInJlbW90ZV91c2VyIiksIG5neF9odHRwX3ZhcmlhYmxlX3JlbW90ZV91c2VyLCAwLCAwLCAwIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInNlbnQiKSwgbmd4X2h0dHBfdmFyaWFibGVfc2VudCwgMCwgMCwgMCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJhcGFjaGVfc2VudCIpLCBuZ3hfaHR0cF92YXJpYWJsZV9zZW50LCAxLCAwLCAwIH0sCisKICAgICB7IG5neF9udWxsX3N0cmluZywgTlVMTCwgMCwgMCwgMCB9CiB9OwogCkBAIC02OTksNiArNzA0LDQxIEBACiB9CiAKIAorc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKgorbmd4X2h0dHBfdmFyaWFibGVfc2VudChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIHVpbnRwdHJfdCBkYXRhKQoreworICAgIG9mZl90ICAgICAgICAgICAgICAgICAgICAgICBzZW50OworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICpwOworICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgICp2djsKKworICAgIHZ2ID0gbmd4X3BhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCkpOworICAgIGlmICh2diA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbnQgPSByLT5jb25uZWN0aW9uLT5zZW50OworCisgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgc2VudCAtPSByLT5oZWFkZXJfc2l6ZTsKKworICAgICAgICBpZiAoc2VudCA8IDApIHsKKyAgICAgICAgICAgIHNlbnQgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgcCA9IG5neF9wYWxsb2Moci0+cG9vbCwgTkdYX09GRl9UX0xFTik7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB2di0+dmFsdWUgPSAwOworICAgIHZ2LT50ZXh0LmxlbiA9IG5neF9zcHJpbnRmKHAsICIlTyIsIHNlbnQpIC0gcDsKKyAgICB2di0+dGV4dC5kYXRhID0gcDsKKworICAgIHJldHVybiB2djsKK30KKworCiBuZ3hfaW50X3QKIG5neF9odHRwX3ZhcmlhYmxlc19hZGRfY29yZV92YXJzKG5neF9jb25mX3QgKmNmKQogewpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXAuaCBiL3NyYy9pbWFwL25neF9pbWFwLmgKaW5kZXggYzQyMzI0Yy4uZmVkNjg1MiAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXAuaAorKysgYi9zcmMvaW1hcC9uZ3hfaW1hcC5oCkBAIC0xNTcsMTAgKzE1Nyw2IEBACiAjZGVmaW5lIE5HWF9JTUFQX1BBUlNFX0lOVkFMSURfQ09NTUFORCAgMjAKIAogCi0jZGVmaW5lIE5HWF9JTUFQX1BST1hZX0lOVkFMSUQgIDEwCi0jZGVmaW5lIE5HWF9JTUFQX1BST1hZX0VSUk9SICAgIDExCi0KLQogI2RlZmluZSBOR1hfSU1BUF9NT0RVTEUgICAgICAweDUwNDE0RDQ5ICAgICAvKiAiSU1BUCIgKi8KIAogI2RlZmluZSBOR1hfSU1BUF9NQUlOX0NPTkYgICAweDAyMDAwMDAwCmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9wcm94eV9tb2R1bGUuYyBiL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5X21vZHVsZS5jCmluZGV4IGJmYmNjMWMuLmUxY2NjZjEgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5X21vZHVsZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5X21vZHVsZS5jCkBAIC0zMiw4ICszMiw4IEBACiAgICAgdm9pZCAqY2hpbGQpOwogCiAKLSNkZWZpbmUgTkdYX0lNQVBfV0FJVF9PSyAgICAwCi0jZGVmaW5lIE5HWF9JTUFQX1dBSVRfTkVYVCAgMQorI2RlZmluZSBOR1hfSU1BUF9XQUlUX09LICAgICAgMAorI2RlZmluZSBOR1hfSU1BUF9XQUlUX05FWFQgICAgMQogCiAKIHN0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfaW1hcF9wcm94eV9jb21tYW5kc1tdID0gewpAQCAtMTU2LDcgKzE1Niw2IEBACiBzdGF0aWMgdm9pZAogbmd4X2ltYXBfcHJveHlfaW1hcF9oYW5kbGVyKG5neF9ldmVudF90ICpyZXYpCiB7Ci0gICAgY2hhciAgICAgICAgICAgICAgICAgICAqYWN0aW9uOwogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgKnA7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgcmM7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgbGluZTsKQEAgLTE5NCwyMSArMTkzLDExIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocmMgPT0gTkdYX0VSUk9SIHx8IHJjID09IE5HWF9JTUFQX1BST1hZX0lOVkFMSUQpIHsKKyAgICBpZiAocmMgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgIG5neF9pbWFwX3Byb3h5X2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyYyA9PSBOR1hfSU1BUF9QUk9YWV9FUlJPUikgewotICAgICAgICBzLT5jb25uZWN0aW9uLT5yZWFkLT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKLSAgICAgICAgcy0+Y29ubmVjdGlvbi0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOwotICAgICAgICByZXYtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOwotICAgICAgICBjLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7Ci0KLSAgICAgICAgbmd4X2ltYXBfcHJveHlfaGFuZGxlcihjLT5yZWFkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHN3aXRjaCAocy0+aW1hcF9zdGF0ZSkgewogCiAgICAgY2FzZSBuZ3hfaW1hcF9zdGFydDoKQEAgLTI5NCwxMCArMjgzLDggQEAKICAgICAgICAgbmd4X2FkZF90aW1lcihzLT5jb25uZWN0aW9uLT5yZWFkLCBwY2YtPnRpbWVvdXQpOwogICAgICAgICBuZ3hfZGVsX3RpbWVyKGMtPnJlYWQpOwogCi0gICAgICAgIGFjdGlvbiA9IGMtPmxvZy0+YWN0aW9uOwogICAgICAgICBjLT5sb2ctPmFjdGlvbiA9IE5VTEw7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsICJjbGllbnQgbG9nZ2VkIGluIik7Ci0gICAgICAgIGMtPmxvZy0+YWN0aW9uID0gYWN0aW9uOwogCiAgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gInByb3h5aW5nIjsKICAgICB9CkBAIC0zMDcsNyArMjk0LDYgQEAKIHN0YXRpYyB2b2lkCiBuZ3hfaW1hcF9wcm94eV9wb3AzX2hhbmRsZXIobmd4X2V2ZW50X3QgKnJldikKIHsKLSAgICBjaGFyICAgICAgICAgICAgICAgICAgICphY3Rpb247CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAqcDsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICByYzsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICBsaW5lOwpAQCAtMzQ0LDIxICszMzAsMTEgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyYyA9PSBOR1hfRVJST1IgfHwgcmMgPT0gTkdYX0lNQVBfUFJPWFlfSU5WQUxJRCkgeworICAgIGlmIChyYyA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgbmd4X2ltYXBfcHJveHlfaW50ZXJuYWxfc2VydmVyX2Vycm9yKHMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHJjID09IE5HWF9JTUFQX1BST1hZX0VSUk9SKSB7Ci0gICAgICAgIHMtPmNvbm5lY3Rpb24tPnJlYWQtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOwotICAgICAgICBzLT5jb25uZWN0aW9uLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7Ci0gICAgICAgIHJldi0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7Ci0gICAgICAgIGMtPndyaXRlLT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKLQotICAgICAgICBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyKGMtPnJlYWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChzLT5pbWFwX3N0YXRlKSB7CiAKICAgICBjYXNlIG5neF9wb3AzX3N0YXJ0OgpAQCAtNDI1LDEwICs0MDEsOCBAQAogICAgICAgICBuZ3hfYWRkX3RpbWVyKHMtPmNvbm5lY3Rpb24tPnJlYWQsIHBjZi0+dGltZW91dCk7CiAgICAgICAgIG5neF9kZWxfdGltZXIoYy0+cmVhZCk7CiAKLSAgICAgICAgYWN0aW9uID0gYy0+bG9nLT5hY3Rpb247CiAgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gTlVMTDsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgMCwgImNsaWVudCBsb2dnZWQgaW4iKTsKLSAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSBhY3Rpb247CiAKICAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSAicHJveHlpbmciOwogICAgIH0KQEAgLTQ3NCw3ICs0NDgsNyBAQAogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgcy0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAidXBzdHJlYW0gc2VudCB0b28gbG9uZyByZXNwb25zZSBsaW5lOiBcIiVzXCIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiLT5wb3MpOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9JTUFQX1BST1hZX0lOVkFMSUQ7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKQEAgLTQ4NywxNSArNDYxLDcgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocFswXSA9PSAnLScgJiYgcFsxXSA9PSAnRScgJiYgcFsyXSA9PSAnUicgJiYgcFszXSA9PSAnUicpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfSU1BUF9QUk9YWV9FUlJPUjsKLSAgICAgICAgfQotCiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBbMF0gPT0gJ04nICYmIHBbMV0gPT0gJ08nKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0lNQVBfUFJPWFlfRVJST1I7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAod2hhdCA9PSBOR1hfSU1BUF9XQUlUX09LKSB7CiAgICAgICAgICAgICBpZiAocFswXSA9PSAnKicgJiYgcFsxXSA9PSAnICcgJiYgcFsyXSA9PSAnTycgJiYgcFszXSA9PSAnSycpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX09LOwpAQCAtNTEyLDcgKzQ3OCw3IEBACiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgcy0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHNlbnQgaW52YWxpZCByZXNwb25zZTogXCIlc1wiIiwgcCk7CiAKLSAgICByZXR1cm4gTkdYX0lNQVBfUFJPWFlfSU5WQUxJRDsKKyAgICByZXR1cm4gTkdYX0VSUk9SOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9hdG9taWMuaCBiL3NyYy9vcy91bml4L25neF9hdG9taWMuaAppbmRleCAzZGZjZTc0Li41MGQ2MzU0IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfYXRvbWljLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2F0b21pYy5oCkBAIC0xNTQsNyArMTU0LDcgQEAKIG5neF9hdG9taWNfY21wX3NldChuZ3hfYXRvbWljX3QgKmxvY2ssIG5neF9hdG9taWNfdWludF90IG9sZCwKICAgICAgbmd4X2F0b21pY191aW50X3Qgc2V0KQogewotICAgICBpZiAoKmxvY2sgPT0gb2xkIHsKKyAgICAgaWYgKCpsb2NrID09IG9sZCkgewogICAgICAgICAgKmxvY2sgPSBzZXQ7CiAgICAgICAgICByZXR1cm4gMTsKICAgICAgfQpAQCAtMTc0LDggKzE3NCw5IEBACiAgICAgIHJldHVybiBvbGQ7CiB9CiAKLSNlbmRpZgorI2RlZmluZSBuZ3hfbWVtb3J5X2JhcnJpZXIoKQogCisjZW5kaWYKIAogdm9pZCBuZ3hfc3BpbmxvY2sobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfdWludF90IHNwaW4pOwogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZmlsZXMuaCBiL3NyYy9vcy91bml4L25neF9maWxlcy5oCmluZGV4IDU3ZjUzZWIuLmEzNjFmZTQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9maWxlcy5oCisrKyBiL3NyYy9vcy91bml4L25neF9maWxlcy5oCkBAIC00NCw3ICs0NCw2IEBACiBzc2l6ZV90IG5neF9yZWFkX2ZpbGUobmd4X2ZpbGVfdCAqZmlsZSwgdV9jaGFyICpidWYsIHNpemVfdCBzaXplLCBvZmZfdCBvZmZzZXQpOwogI2RlZmluZSBuZ3hfcmVhZF9maWxlX24gICAgICAgICAgInJlYWQoKSIKIAotCiBzc2l6ZV90IG5neF93cml0ZV9maWxlKG5neF9maWxlX3QgKmZpbGUsIHVfY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwKICAgICBvZmZfdCBvZmZzZXQpOwogCkBAIC01Miw2ICs1MSwxMSBAQAogICAgIG9mZl90IG9mZnNldCwgbmd4X3Bvb2xfdCAqcG9vbCk7CiAKIAorI2RlZmluZSBuZ3hfd3JpdGVfZmQgICAgICAgICAgICAgd3JpdGUKKyNkZWZpbmUgbmd4X2xpbmVmZWVkKHApICAgICAgICAgICpwKysgPSBMRjsKKyNkZWZpbmUgTkdYX0xJTkVGRUVEX1NJWkUgICAgICAgIDEKKworCiAjZGVmaW5lIG5neF9yZW5hbWVfZmlsZSAgICAgICAgICByZW5hbWUKICNkZWZpbmUgbmd4X3JlbmFtZV9maWxlX24gICAgICAgICJyZW5hbWUiCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCmluZGV4IGY0ZWMwNmYuLmUwZjk2N2YgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwpAQCAtMjc2LDYgKzI3NiwxMyBAQAogICAgICAgICBuZ3hfcHJvY2Vzc19ldmVudHNfYW5kX3RpbWVycyhjeWNsZSk7CiAKICAgICAgICAgaWYgKG5neF90ZXJtaW5hdGUgfHwgbmd4X3F1aXQpIHsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgbmd4X21vZHVsZXNbaV07IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChuZ3hfbW9kdWxlc1tpXS0+ZXhpdF9wcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIG5neF9tb2R1bGVzW2ldLT5leGl0X3Byb2Nlc3MoY3ljbGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgbmd4X21hc3Rlcl9leGl0KGN5Y2xlKTsKICAgICAgICAgfQogCkBAIC02MjMsMTAgKzYzMCwxOCBAQAogc3RhdGljIHZvaWQKIG5neF9tYXN0ZXJfZXhpdChuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CisgICAgbmd4X3VpbnRfdCAgaTsKKwogICAgIG5neF9kZWxldGVfcGlkZmlsZShjeWNsZSk7CiAKICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBjeWNsZS0+bG9nLCAwLCAiZXhpdCIpOwogCisgICAgZm9yIChpID0gMDsgbmd4X21vZHVsZXNbaV07IGkrKykgeworICAgICAgICBpZiAobmd4X21vZHVsZXNbaV0tPmV4aXRfbWFzdGVyKSB7CisgICAgICAgICAgICBuZ3hfbW9kdWxlc1tpXS0+ZXhpdF9tYXN0ZXIoY3ljbGUpOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoKICAgICAgKiB3ZSBkbyBub3QgZGVzdHJveSBjeWNsZS0+cG9vbCBoZXJlIGJlY2F1c2UgYSBzaWduYWwgaGFuZGxlcgogICAgICAqIHRoYXQgdXNlcyBjeWNsZS0+bG9nIGNhbiBiZSBjYWxsZWQgYXQgdGhpcyBwb2ludApAQCAtNzM1LDYgKzc1MCwxMiBAQAogICAgICAgICAgICAgbmd4X3dha2V1cF93b3JrZXJfdGhyZWFkcyhjeWNsZSk7CiAjZW5kaWYKIAorICAgICAgICAgICAgZm9yIChpID0gMDsgbmd4X21vZHVsZXNbaV07IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChuZ3hfbW9kdWxlc1tpXS0+ZXhpdF9wcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIG5neF9tb2R1bGVzW2ldLT5leGl0X3Byb2Nlc3MoY3ljbGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYyA9IGN5Y2xlLT5jb25uZWN0aW9uczsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+Y29ubmVjdGlvbl9uOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoY1tpXS5mZCAhPSAtMQpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF9maWxlcy5oIGIvc3JjL29zL3dpbjMyL25neF9maWxlcy5oCmluZGV4IGE5MTc0MzEuLjA5OGE5MDUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuaAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmgKQEAgLTY1LDYgKzY1LDExIEBACiAjZGVmaW5lIG5neF9jbG9zZV9maWxlX24gICAgICAgICAgICAiQ2xvc2VIYW5kbGUoKSIKIAogCisjZGVmaW5lIG5neF93cml0ZV9mZChmZCwgYnVmLCBzaXplKSBXcml0ZUZpbGUoZmQsIGJ1Ziwgc2l6ZSwgTlVMTCwgTlVMTCkKKyNkZWZpbmUgbmd4X2xpbmVmZWVkKHApICAgICAgICAgICAgICpwKysgPSBDUjsgKnArKyA9IExGOworI2RlZmluZSBOR1hfTElORUZFRURfU0laRSAgICAgICAgICAgMgorCisKICNkZWZpbmUgbmd4X2RlbGV0ZV9maWxlKG5hbWUpICAgICAgIERlbGV0ZUZpbGUoKGNvbnN0IGNoYXIgKikgbmFtZSkKICNkZWZpbmUgbmd4X2RlbGV0ZV9maWxlX24gICAgICAgICAgICJEZWxldGVGaWxlKCkiCiAK