ZGlmZiAtLWdpdCBhL2F1dG8vY2MvZ2NjIGIvYXV0by9jYy9nY2MKaW5kZXggYzVkYjg1OC4uZDc2ZDRhMiAxMDA2NDQKLS0tIGEvYXV0by9jYy9nY2MKKysrIGIvYXV0by9jYy9nY2MKQEAgLTEyLDYgKzEyLDggQEAKIAogZWNobyAiICsgZ2NjIHZlcnNpb246ICROR1hfR0NDX1ZFUiIKIAoraGF2ZT1OR1hfQ09NUElMRVIgdmFsdWU9IlwiZ2NjICROR1hfR0NDX1ZFUlwiIiAuIGF1dG8vZGVmaW5lCisKIAogIyBTb2xhcmlzIDcncyAvdXNyL2Njcy9iaW4vYXMgZG9lcyBub3Qgc3VwcG9ydCAiLXBpcGUiCiAKZGlmZiAtLWdpdCBhL2F1dG8vY2MvaWNjIGIvYXV0by9jYy9pY2MKaW5kZXggZjU4ZjU4MC4uY2NhMjRjZCAxMDA2NDQKLS0tIGEvYXV0by9jYy9pY2MKKysrIGIvYXV0by9jYy9pY2MKQEAgLTksNiArOSw4IEBACiAKIGVjaG8gIiArIGljYyB2ZXJzaW9uOiAkTkdYX0lDQ19WRVIiCiAKK2hhdmU9TkdYX0NPTVBJTEVSIHZhbHVlPSJcIkludGVsIEMgQ29tcGlsZXIgJE5HWF9JQ0NfVkVSXCIiIC4gYXV0by9kZWZpbmUKKwogCiAjIG9wdGltaXphdGlvbnMKIApkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCAyNmE1ODY5Li40ZDY3ZWEzIDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDIyIEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjMuMCIgZGF0ZT0iMDcuMTAuMjAwNSI+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9XC0sHOzyDExdPR1MnEzsXXzs/FIM/H0sHOyd7FzsnFINfSxc3Fzskg0sHCz9TZINLBws/excfPINDSz8PF09PBLgor78fSwc7J3sXOycUgwtnMzyDX18XExc7PIMnaLdrBINDF0sXQz8zOxc7J0SDUwcrNxdLP1yDNyczMydPFy9XOxC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAxMC1kYXlzIGxpdmUgdGltZSBsaW1pdCBvZiB3b3JrZXIgcHJvY2VzcyB3YXMgZWxpbWluYXRlZC4KK1RoZSBsaW1pdCB3YXMgaW50cm9kdWNlZCBiZWNhdXNlIG9mIG1pbGxpc2Vjb25kIHRpbWVycyBvdmVyZmxvdy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKKwogPGNoYW5nZXMgdmVyPSIwLjIuNiIgZGF0ZT0iMDUuMTAuMjAwNSI+CiAKIDxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmMgYi9zcmMvY29yZS9uZ2lueC5jCmluZGV4IDA5ZWRhZTUuLmNjMTNmNzUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmMKKysrIGIvc3JjL2NvcmUvbmdpbnguYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgaWYgKGN5Y2xlID09IE5VTEwpIHsKICAgICAgICAgaWYgKG5neF90ZXN0X2NvbmZpZykgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIiB0ZXN0IGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgY29uZmlndXJhdGlvbiBmaWxlICVzIHRlc3QgZmFpbGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9jeWNsZS5jb25mX2ZpbGUuZGF0YSk7CiAgICAgICAgIH0KIApAQCAtMjI3LDcgKzIyNyw3IEBACiAKICAgICBpZiAobmd4X3Rlc3RfY29uZmlnKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgInRoZSBjb25maWd1cmF0aW9uIGZpbGUgXCIlc1wiIHdhcyB0ZXN0ZWQgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICAgICAgICAgICAgICAgICAidGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyB3YXMgdGVzdGVkIHN1Y2Nlc3NmdWxseSIsCiAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmNvbmZfZmlsZS5kYXRhKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggNzhlNzMxOS4uNzM0YzQwMSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4yLjYiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjAiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX09MRFBJRF9FWFQgICAgICIub2xkYmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaCBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKaW5kZXggZTVkZjQzNy4uY2E1YjA1MyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAorKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCkBAIC0zOSw3ICszOSw3IEBACiAgICAgLyogc2hvdWxkIGJlIGhlcmUgYmVjYXVzZSBvZiB0aGUgQWNjZXB0RXgoKSBwcmVyZWFkICovCiAgICAgc2l6ZV90ICAgICAgICAgICAgICBwb3N0X2FjY2VwdF9idWZmZXJfc2l6ZTsKICAgICAvKiBzaG91bGQgYmUgaGVyZSBiZWNhdXNlIG9mIHRoZSBkZWZlcnJlZCBhY2NlcHQgKi8KLSAgICB0aW1lX3QgICAgICAgICAgICAgIHBvc3RfYWNjZXB0X3RpbWVvdXQ7CisgICAgbmd4X21zZWNfdCAgICAgICAgICBwb3N0X2FjY2VwdF90aW1lb3V0OwogCiAgICAgbmd4X2xpc3RlbmluZ190ICAgICpwcmV2aW91czsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgKmNvbm5lY3Rpb247CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29yZS5oIGIvc3JjL2NvcmUvbmd4X2NvcmUuaAppbmRleCBhMzI3MzM5Li4yNzA1OGJmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29yZS5oCisrKyBiL3NyYy9jb3JlL25neF9jb3JlLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAogCiAjaW5jbHVkZSA8bmd4X2F0b21pYy5oPgorI2luY2x1ZGUgPG5neF9yYnRyZWUuaD4KICNpbmNsdWRlIDxuZ3hfdGltZS5oPgogI2luY2x1ZGUgPG5neF9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZ3hfZXJybm8uaD4KQEAgLTU5LDcgKzYwLDYgQEAKICNpZiAoTkdYX1BDUkUpCiAjaW5jbHVkZSA8bmd4X3JlZ2V4Lmg+CiAjZW5kaWYKLSNpbmNsdWRlIDxuZ3hfcmJ0cmVlLmg+CiAjaW5jbHVkZSA8bmd4X3JhZGl4X3RyZWUuaD4KICNpbmNsdWRlIDxuZ3hfdGltZXMuaD4KICNpbmNsdWRlIDxuZ3hfaW5ldC5oPgpAQCAtODEsNCArODEsNyBAQAogI2RlZmluZSBDUkxGICAgIlx4MGRceDBhIgogCiAKKyNkZWZpbmUgbmd4X2Ficyh2YWx1ZSkgICAoKCh2YWx1ZSkgPj0gMCkgPyAodmFsdWUpIDogLSAodmFsdWUpKQorCisKICNlbmRpZiAvKiBfTkdYX0NPUkVfSF9JTkNMVURFRF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9yYnRyZWUuYyBiL3NyYy9jb3JlL25neF9yYnRyZWUuYwppbmRleCBkM2JiM2E1Li4xZWJjNTZhIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcmJ0cmVlLmMKKysrIGIvc3JjL2NvcmUvbmd4X3JidHJlZS5jCkBAIC00Nyw3ICs0NywxMiBAQAogICAgIHRlbXAgPSAqcm9vdDsKIAogICAgIGZvciAoIDs7ICkgewotICAgICAgICBpZiAobm9kZS0+a2V5IDwgdGVtcC0+a2V5KSB7CisKKyAgICAgICAgLyogIG5vZGUtPmtleSA8IHRlbXAtPmtleSAqLworCisgICAgICAgIGlmICgobmd4X3JidHJlZV9rZXlfaW50X3QpIG5vZGUtPmtleSAtIChuZ3hfcmJ0cmVlX2tleV9pbnRfdCkgdGVtcC0+a2V5CisgICAgICAgICAgICA8IDApCisgICAgICAgIHsKICAgICAgICAgICAgIGlmICh0ZW1wLT5sZWZ0ID09IHNlbnRpbmVsKSB7CiAgICAgICAgICAgICAgICAgdGVtcC0+bGVmdCA9IG5vZGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfcmJ0cmVlLmggYi9zcmMvY29yZS9uZ3hfcmJ0cmVlLmgKaW5kZXggYzhiNzA5Mi4uZDY4MDNmOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3JidHJlZS5oCisrKyBiL3NyYy9jb3JlL25neF9yYnRyZWUuaApAQCAtMTIsMTQgKzEyLDE4IEBACiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KIAogCit0eXBlZGVmIG5neF91aW50X3QgIG5neF9yYnRyZWVfa2V5X3Q7Cit0eXBlZGVmIG5neF9pbnRfdCAgIG5neF9yYnRyZWVfa2V5X2ludF90OworCisKIHR5cGVkZWYgc3RydWN0IG5neF9yYnRyZWVfcyAgbmd4X3JidHJlZV90OwogCiBzdHJ1Y3Qgbmd4X3JidHJlZV9zIHsKLSAgIG5neF9pbnRfdCAgICAgICBrZXk7Ci0gICBuZ3hfcmJ0cmVlX3QgICAqbGVmdDsKLSAgIG5neF9yYnRyZWVfdCAgICpyaWdodDsKLSAgIG5neF9yYnRyZWVfdCAgICpwYXJlbnQ7Ci0gICBjaGFyICAgICAgICAgICAgY29sb3I7CisgICAgbmd4X3JidHJlZV9rZXlfdCAgIGtleTsKKyAgICBuZ3hfcmJ0cmVlX3QgICAgICAqbGVmdDsKKyAgICBuZ3hfcmJ0cmVlX3QgICAgICAqcmlnaHQ7CisgICAgbmd4X3JidHJlZV90ICAgICAgKnBhcmVudDsKKyAgICBjaGFyICAgICAgICAgICAgICAgY29sb3I7CiB9OwogCiAKQEAgLTMyLDExICszNiwxMSBAQAogc3RhdGljIG5neF9pbmxpbmUgbmd4X3JidHJlZV90ICoKIG5neF9yYnRyZWVfbWluKG5neF9yYnRyZWVfdCAqbm9kZSwgbmd4X3JidHJlZV90ICpzZW50aW5lbCkKIHsKLSAgIHdoaWxlIChub2RlLT5sZWZ0ICE9IHNlbnRpbmVsKSB7Ci0gICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7Ci0gICB9CisgICAgd2hpbGUgKG5vZGUtPmxlZnQgIT0gc2VudGluZWwpIHsKKyAgICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7CisgICAgfQogCi0gICByZXR1cm4gbm9kZTsKKyAgICByZXR1cm4gbm9kZTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKaW5kZXggNTc1ZTYwZS4uOTM0NDlhYiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jCisrKyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwpAQCAtNTcsNiArNTcsNyBAQAogICogICAgJVswXVt3aWR0aF1bdV1beHxYXUwgICAgICBpbnQ2NF90L3VpbnQ2NF90CiAgKiAgICAlWzBdW3dpZHRofG1dW3VdW3h8WF1BICAgIG5neF9hdG9taWNfaW50X3Qvbmd4X2F0b21pY191aW50X3QKICAqICAgICVQICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3BpZF90CisgKiAgICAlTSAgICAgICAgICAgICAgICAgICAgICAgIG5neF9tc2VjX3QKICAqICAgICVyICAgICAgICAgICAgICAgICAgICAgICAgcmxpbV90CiAgKiAgICAlcCAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIKICAqICAgICVWICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlciB0byBuZ3hfc3RyX3QKQEAgLTY2LDkgKzY3LDYgQEAKICAqICAgICVjICAgICAgICAgICAgICAgICAgICAgICAgY2hhcgogICogICAgJSUgICAgICAgICAgICAgICAgICAgICAgICAlCiAgKgotICogIFRPRE86Ci0gKiAgICAlTSAgICAgICAgICAgICAgICAgICAgICAgIG5neF9tc2VjX3QKLSAqCiAgKiAgcmVzZXJ2ZWQ6CiAgKiAgICAldCAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdAogICogICAgJVMgICAgICAgICAgICAgICAgICAgICAgICBudWxsLXRlbWluYXRlZCB3Y2hhciBzdHJpbmcKQEAgLTIyMiw2ICsyMjAsMTEgQEAKICAgICAgICAgICAgICAgICBzaWduID0gMTsKICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgY2FzZSAnTSc6CisgICAgICAgICAgICAgICAgdWk2NCA9ICh1aW50NjRfdCkgdmFfYXJnKGFyZ3MsIG5neF9tc2VjX3QpOworICAgICAgICAgICAgICAgIHNpZ24gPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBjYXNlICd6JzoKICAgICAgICAgICAgICAgICBpZiAoc2lnbikgewogICAgICAgICAgICAgICAgICAgICBpNjQgPSAoaW50NjRfdCkgdmFfYXJnKGFyZ3MsIHNzaXplX3QpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3RpbWVzLmMgYi9zcmMvY29yZS9uZ3hfdGltZXMuYwppbmRleCAzYjBkYzM3Li5jODA2ZDU1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfdGltZXMuYworKysgYi9zcmMvY29yZS9uZ3hfdGltZXMuYwpAQCAtOCwxMSArOCw5IEBACiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KIAogCi1uZ3hfZXBvY2hfbXNlY190ICBuZ3hfZWxhcHNlZF9tc2VjOwotbmd4X2Vwb2NoX21zZWNfdCAgbmd4X29sZF9lbGFwc2VkX21zZWM7Ci1uZ3hfZXBvY2hfbXNlY190ICBuZ3hfc3RhcnRfbXNlYzsKK25neF9tc2VjX3QgICAgICAgIG5neF9jdXJyZW50X3RpbWU7CiAKLW5neF9pbnRfdCAgbmd4X2dtdG9mZjsKK25neF9pbnRfdCAgICAgICAgIG5neF9nbXRvZmY7CiAKIHN0YXRpYyBuZ3hfdG1fdCAgIG5neF9jYWNoZWRfZ210aW1lOwogCkBAIC05MSw5ICs4OSw3IEBACiAKICAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7CiAKLSAgICBuZ3hfc3RhcnRfbXNlYyA9IChuZ3hfZXBvY2hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDA7Ci0gICAgbmd4X29sZF9lbGFwc2VkX21zZWMgPSAwOwotICAgIG5neF9lbGFwc2VkX21zZWMgPSAwOworICAgIG5neF9jdXJyZW50X3RpbWUgPSAobmd4X21zZWNfdCkgdHYudHZfc2VjICogMTAwMCArIHR2LnR2X3VzZWMgLyAxMDAwOwogCiAjaWYgIShOR1hfV0lOMzIpCiAgICAgdHpzZXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF90aW1lcy5oIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmgKaW5kZXggMjk1OWNjNC4uYmJjYjQxMyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3RpbWVzLmgKKysrIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmgKQEAgLTM5LDIxICszOSwxMyBAQAogZXh0ZXJuIG5neF90aHJlYWRfdm9sYXRpbGUgbmd4X3N0cl90ICBuZ3hfY2FjaGVkX2h0dHBfdGltZTsKIGV4dGVybiBuZ3hfdGhyZWFkX3ZvbGF0aWxlIG5neF9zdHJfdCAgbmd4X2NhY2hlZF9odHRwX2xvZ190aW1lOwogCi1leHRlcm4gbmd4X2Vwb2NoX21zZWNfdCAgICBuZ3hfc3RhcnRfbXNlYzsKK2V4dGVybiBuZ3hfaW50X3QgICBuZ3hfZ210b2ZmOwogCiAvKgotICogbXNlY3MgZWxhcHNlZCBzaW5jZSBuZ3hfc3RhcnRfbXNlYyBpbiB0aGUgY3VycmVudCBldmVudCBjeWNsZSwKLSAqIHVzZWQgaW4gbmd4X2V2ZW50X2FkZF90aW1lcigpIGFuZCBuZ3hfZXZlbnRfZmluZF90aW1lcigpCisgKiBtaWxsaXNlY29uZHMgZWxhcHNlZCBzaW5jZSBlcG9jaCBhbmQgdHJ1bmNhdGVkIHRvIG5neF9tc2VjX3QsCisgKiB1c2VkIGluIGV2ZW50IHRpbWVycwogICovCi1leHRlcm4gbmd4X2Vwb2NoX21zZWNfdCAgbmd4X2VsYXBzZWRfbXNlYzsKLQotLyoKLSAqIG1zZWNzIGVsYXBzZWQgc2luY2Ugbmd4X3N0YXJ0X21zZWMgaW4gdGhlIHByZXZpb3VzIGV2ZW50IGN5Y2xlLAotICogdXNlZCBpbiBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpCi0gKi8KLWV4dGVybiBuZ3hfZXBvY2hfbXNlY190ICBuZ3hfb2xkX2VsYXBzZWRfbXNlYzsKLQotZXh0ZXJuIG5neF9pbnRfdCAgICAgICAgIG5neF9nbXRvZmY7CitleHRlcm4gbmd4X21zZWNfdCAgbmd4X2N1cnJlbnRfdGltZTsKIAogCiAjZW5kaWYgLyogX05HWF9USU1FU19IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYwppbmRleCA1ZmFhMWZiLi43ZWU4NjAyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYwpAQCAtMzI2LDQ0ICszMjYsMjMgQEAKIG5neF9kZXZwb2xsX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgIGV2ZW50cywgcmV2ZW50czsKLSAgICBuZ3hfaW50X3QgICAgICAgICAgIGk7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICBsb2NrLCBhY2NlcHRfbG9jaywgZXhwaXJlOwogICAgIHNpemVfdCAgICAgICAgICAgICAgbjsKLSAgICBuZ3hfbXNlY190ICAgICAgICAgIHRpbWVyOwogICAgIG5neF9lcnJfdCAgICAgICAgICAgZXJyOworICAgIG5neF9pbnRfdCAgICAgICAgICAgaTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgIGxvY2ssIGFjY2VwdF9sb2NrOworICAgIG5neF9tc2VjX3QgICAgICAgICAgdGltZXIsIGRlbHRhOwogI2lmIDAKICAgICBuZ3hfY3ljbGVfdCAgICAgICAqKm9sZF9jeWNsZTsKICNlbmRpZgogICAgIG5neF9ldmVudF90ICAgICAgICAqcmV2LCAqd2V2OwogICAgIG5neF9jb25uZWN0aW9uX3QgICAqYzsKLSAgICBuZ3hfZXBvY2hfbXNlY190ICAgIGRlbHRhOwogICAgIHN0cnVjdCBkdnBvbGwgICAgICAgZHZwOwogICAgIHN0cnVjdCB0aW1ldmFsICAgICAgdHY7CiAKLSAgICBmb3IgKCA7OyApIHsKLSAgICAgICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOwotCi0gICAgICAgIGlmICh0aW1lciAhPSAwKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIGV4cGlyZWQgdGltZXIiKTsKLQotICAgICAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygobmd4X21zZWNfdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ3hfZWxhcHNlZF9tc2VjIC0gbmd4X29sZF9lbGFwc2VkX21zZWMpKTsKLSAgICB9CisgICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOwogCiAgICAgLyogTkdYX1RJTUVSX0lORklOSVRFID09IElORlRJTSAqLwogCi0gICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURSkgewotICAgICAgICBleHBpcmUgPSAwOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZXhwaXJlID0gMTsKLSAgICB9Ci0KLSAgICBuZ3hfb2xkX2VsYXBzZWRfbXNlYyA9IG5neF9lbGFwc2VkX21zZWM7CiAgICAgYWNjZXB0X2xvY2sgPSAwOwogCiAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXgpIHsKQEAgLTM4MiwxMyArMzYxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRpbWVyID4gbmd4X2FjY2VwdF9tdXRleF9kZWxheSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0aW1lciA9IG5neF9hY2NlcHRfbXV0ZXhfZGVsYXk7Ci0gICAgICAgICAgICAgICAgZXhwaXJlID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImRldnBvbGwgdGltZXI6ICVkIiwgdGltZXIpOworICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIHRpbWVyOiAlTSIsIHRpbWVyKTsKIAogICAgIGlmIChuY2hhbmdlcykgewogICAgICAgICBuID0gbmNoYW5nZXMgKiBzaXplb2Yoc3RydWN0IHBvbGxmZCk7CkBAIC00MTYsOSArMzk0LDggQEAKICAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7CiAgICAgbmd4X3RpbWVfdXBkYXRlKHR2LnR2X3NlYyk7CiAKLSAgICBkZWx0YSA9IG5neF9lbGFwc2VkX21zZWM7Ci0gICAgbmd4X2VsYXBzZWRfbXNlYyA9IChuZ3hfZXBvY2hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHR2LnR2X3VzZWMgLyAxMDAwIC0gbmd4X3N0YXJ0X21zZWM7CisgICAgZGVsdGEgPSBuZ3hfY3VycmVudF90aW1lOworICAgIG5neF9jdXJyZW50X3RpbWUgPSAobmd4X21zZWNfdCkgdHYudHZfc2VjICogMTAwMCArIHR2LnR2X3VzZWMgLyAxMDAwOwogCiAgICAgaWYgKGVycikgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKChlcnIgPT0gTkdYX0VJTlRSKSA/IE5HWF9MT0dfSU5GTyA6IE5HWF9MT0dfQUxFUlQsCkBAIC00MjgsMTAgKzQwNSwxMCBAQAogICAgIH0KIAogICAgIGlmICh0aW1lciAhPSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKLSAgICAgICAgZGVsdGEgPSBuZ3hfZWxhcHNlZF9tc2VjIC0gZGVsdGE7CisgICAgICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZSAtIGRlbHRhOwogCiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIHRpbWVyOiAlZCwgZGVsdGE6ICVkIiwgdGltZXIsIChpbnQpIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgImRldnBvbGwgdGltZXI6ICVNLCBkZWx0YTogJU0iLCB0aW1lciwgZGVsdGEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChldmVudHMgPT0gMCkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLApAQCAtNTU0LDkgKzUzMSw3IEBACiAgICAgICAgIG5neF9tdXRleF91bmxvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwogICAgIH0KIAotICAgIGlmIChleHBpcmUgJiYgZGVsdGEpIHsKLSAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKG5neF9tc2VjX3QpIGRlbHRhKTsKLSAgICB9CisgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKTsKIAogICAgIGlmICghbmd4X3RocmVhZGVkKSB7CiAgICAgICAgIG5neF9ldmVudF9wcm9jZXNzX3Bvc3RlZChjeWNsZSk7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMKaW5kZXggNzVhMGIwZi4uMTc3YzA1ZCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYwpAQCAtMzg3LDU2ICszODcsMzEgQEAKICAgICBpbnQgICAgICAgICAgICAgICAgZXZlbnRzOwogICAgIHVpbnQzMl90ICAgICAgICAgICByZXZlbnRzOwogICAgIG5neF9pbnRfdCAgICAgICAgICBpbnN0YW5jZSwgaTsKLSAgICBuZ3hfdWludF90ICAgICAgICAgbG9jaywgYWNjZXB0X2xvY2ssIGV4cGlyZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgbG9jaywgYWNjZXB0X2xvY2s7CiAgICAgbmd4X2Vycl90ICAgICAgICAgIGVycjsKICAgICBuZ3hfbG9nX3QgICAgICAgICAqbG9nOwotICAgIG5neF9tc2VjX3QgICAgICAgICB0aW1lcjsKKyAgICBuZ3hfbXNlY190ICAgICAgICAgdGltZXIsIGRlbHRhOwogICAgIG5neF9ldmVudF90ICAgICAgICpyZXYsICp3ZXY7CiAgICAgc3RydWN0IHRpbWV2YWwgICAgIHR2OwogICAgIG5neF9jb25uZWN0aW9uX3QgICpjOwotICAgIG5neF9lcG9jaF9tc2VjX3QgICBkZWx0YTsKIAotICAgIGZvciAoIDs7ICkgeyAKLSAgICAgICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOworICAgIHRpbWVyID0gbmd4X2V2ZW50X2ZpbmRfdGltZXIoKTsKIAogI2lmIChOR1hfVEhSRUFEUykKIAotICAgICAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9CisgICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9FUlJPUikgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KIAotICAgICAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0lORklOSVRFIHx8IHRpbWVyID4gNTAwKSB7Ci0gICAgICAgICAgICB0aW1lciA9IDUwMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURSB8fCB0aW1lciA+IDUwMCkgeworICAgICAgICB0aW1lciA9IDUwMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAjZW5kaWYKIAotICAgICAgICBpZiAodGltZXIgIT0gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiZXBvbGwgZXhwaXJlZCB0aW1lciIpOwotCi0gICAgICAgIG5neF9ldmVudF9leHBpcmVfdGltZXJzKChuZ3hfbXNlY190KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5neF9lbGFwc2VkX21zZWMgLSBuZ3hfb2xkX2VsYXBzZWRfbXNlYykpOwotCi0gICAgICAgIGlmIChuZ3hfcG9zdGVkX2V2ZW50cyAmJiBuZ3hfdGhyZWFkZWQpIHsKLSAgICAgICAgICAgIG5neF93YWtldXBfd29ya2VyX3RocmVhZChjeWNsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvKiBOR1hfVElNRVJfSU5GSU5JVEUgPT0gSU5GVElNICovCiAKLSAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0lORklOSVRFKSB7Ci0gICAgICAgIGV4cGlyZSA9IDA7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBleHBpcmUgPSAxOwotICAgIH0KLQotICAgIG5neF9vbGRfZWxhcHNlZF9tc2VjID0gbmd4X2VsYXBzZWRfbXNlYzsKICAgICBhY2NlcHRfbG9jayA9IDA7CiAKICAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewpAQCAtNDU1LDEzICs0MzAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGltZXIgPiBuZ3hfYWNjZXB0X211dGV4X2RlbGF5KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRpbWVyID0gbmd4X2FjY2VwdF9tdXRleF9kZWxheTsKLSAgICAgICAgICAgICAgICBleHBpcmUgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiZXBvbGwgdGltZXI6ICVkIiwgdGltZXIpOworICAgICAgICAgICAgICAgICAgICJlcG9sbCB0aW1lcjogJU0iLCB0aW1lcik7CiAKICAgICBldmVudHMgPSBlcG9sbF93YWl0KGVwLCBldmVudF9saXN0LCBuZXZlbnRzLCB0aW1lcik7CiAKQEAgLTQ3NCwxNSArNDQ4LDE0IEBACiAgICAgbmd4X2dldHRpbWVvZmRheSgmdHYpOwogICAgIG5neF90aW1lX3VwZGF0ZSh0di50dl9zZWMpOwogCi0gICAgZGVsdGEgPSBuZ3hfZWxhcHNlZF9tc2VjOwotICAgIG5neF9lbGFwc2VkX21zZWMgPSAobmd4X2Vwb2NoX21zZWNfdCkgdHYudHZfc2VjICogMTAwMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0di50dl91c2VjIC8gMTAwMCAtIG5neF9zdGFydF9tc2VjOworICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZTsKKyAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKIAogICAgIGlmICh0aW1lciAhPSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKLSAgICAgICAgZGVsdGEgPSBuZ3hfZWxhcHNlZF9tc2VjIC0gZGVsdGE7CisgICAgICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZSAtIGRlbHRhOwogCiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJlcG9sbCB0aW1lcjogJWQsIGRlbHRhOiAlZCIsIHRpbWVyLCAoaW50KSBkZWx0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICJlcG9sbCB0aW1lcjogJU0sIGRlbHRhOiAlTSIsIHRpbWVyLCBkZWx0YSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGV2ZW50cyA9PSAwKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCkBAIC02NDUsOSArNjE4LDcgQEAKICAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CiAgICAgfQogCi0gICAgaWYgKGV4cGlyZSAmJiBkZWx0YSkgewotICAgICAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygobmd4X21zZWNfdCkgZGVsdGEpOwotICAgIH0KKyAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOwogCiAgICAgaWYgKG5neF9wb3N0ZWRfZXZlbnRzKSB7CiAgICAgICAgIGlmIChuZ3hfdGhyZWFkZWQpIHsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9pb2NwX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2lvY3BfbW9kdWxlLmMKaW5kZXggNWM5ZTdlNi4uMjY5ZDk1NSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2lvY3BfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2lvY3BfbW9kdWxlLmMKQEAgLTE4NCwyMyArMTg0LDIxIEBACiAgICAgdV9pbnQgICAgICAgICAgICAgIGtleTsKICAgICB1X2xvbmcgICAgICAgICAgICAgYnl0ZXM7CiAgICAgbmd4X2Vycl90ICAgICAgICAgIGVycjsKLSAgICBuZ3hfbXNlY190ICAgICAgICAgdGltZXI7CisgICAgbmd4X21zZWNfdCAgICAgICAgIHRpbWVyLCBkZWx0YTsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAqZXY7CiAgICAgc3RydWN0IHRpbWV2YWwgICAgIHR2OwotICAgIG5neF9lcG9jaF9tc2VjX3QgICBkZWx0YTsKICAgICBuZ3hfZXZlbnRfb3ZscF90ICAqb3ZscDsKIAogICAgIHRpbWVyID0gbmd4X2V2ZW50X2ZpbmRfdGltZXIoKTsKLSAgICBuZ3hfb2xkX2VsYXBzZWRfbXNlYyA9IG5neF9lbGFwc2VkX21zZWM7CiAKLSAgICBpZiAodGltZXIgPT0gMCkgeworICAgIGlmICh0aW1lciA9PSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKICAgICAgICAgdGltZXIgPSBJTkZJTklURTsKICAgICB9CiAKLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLCAiaW9jcCB0aW1lcjogJWQiLCB0aW1lcik7CisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwgImlvY3AgdGltZXI6ICVNIiwgdGltZXIpOwogCiAgICAgcmMgPSBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKGlvY3AsICZieXRlcywgKExQRFdPUkQpICZrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUE9WRVJMQVBQRUQgKikgJm92bHAsIHRpbWVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExQT1ZFUkxBUFBFRCAqKSAmb3ZscCwgKHVfbG9uZykgdGltZXIpOwogCiAgICAgaWYgKHJjID09IDApIHsKICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwpAQCAtMjE0LDE1ICsyMTIsMTQgQEAKICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJpb2NwOiAlZCBiOiVkIGs6JWQgb3Y6JXAiLCByYywgYnl0ZXMsIGtleSwgb3ZscCk7CiAKLSAgICBkZWx0YSA9IG5neF9lbGFwc2VkX21zZWM7Ci0gICAgbmd4X2VsYXBzZWRfbXNlYyA9IChuZ3hfZXBvY2hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHR2LnR2X3VzZWMgLyAxMDAwIC0gbmd4X3N0YXJ0X21zZWM7CisgICAgZGVsdGEgPSBuZ3hfY3VycmVudF90aW1lOworICAgIG5neF9jdXJyZW50X3RpbWUgPSAobmd4X21zZWNfdCkgdHYudHZfc2VjICogMTAwMCArIHR2LnR2X3VzZWMgLyAxMDAwOwogCiAgICAgaWYgKHRpbWVyICE9IElORklOSVRFKSB7Ci0gICAgICAgIGRlbHRhID0gbmd4X2VsYXBzZWRfbXNlYyAtIGRlbHRhOworICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWUgLSBkZWx0YTsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiaW9jcCB0aW1lcjogJWQsIGRlbHRhOiAlZCIsIHRpbWVyLCAoaW50KSBkZWx0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICJpb2NwIHRpbWVyOiAlTSwgZGVsdGE6ICVNIiwgdGltZXIsIGRlbHRhKTsKICAgICB9CiAKICAgICBpZiAoZXJyKSB7CkBAIC0yMzQsOSArMjMxLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGltZXIgIT0gSU5GSU5JVEUgJiYgZGVsdGEpIHsKLSAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygobmd4X21zZWNfdCkgZGVsdGEpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKTsKIAogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQpAQCAtMjY4LDkgKzI2Myw3IEBACiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgImlvY3A6IGFib3J0ZWQgZXZlbnQgJXAiLCBldik7IAogCi0gICAgICAgIGlmICh0aW1lciAhPSBJTkZJTklURSAmJiBkZWx0YSkgewotICAgICAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKG5neF9tc2VjX3QpIGRlbHRhKTsKLSAgICAgICAgfQorICAgICAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOwogCiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQpAQCAtMzA0LDkgKzI5Nyw3IEBACiAKICAgICBldi0+aGFuZGxlcihldik7CiAKLSAgICBpZiAodGltZXIgIT0gSU5GSU5JVEUgJiYgZGVsdGEpIHsKLSAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKG5neF9tc2VjX3QpIGRlbHRhKTsKLSAgICB9CisgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKTsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYwppbmRleCA3OGViYmFkLi5lZTU1OTE1IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMKQEAgLTQ0NSw0NyArNDQ1LDI4IEBACiB7CiAgICAgaW50ICAgICAgICAgICAgICAgIGV2ZW50cywgbjsKICAgICBuZ3hfaW50X3QgICAgICAgICAgaSwgaW5zdGFuY2U7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgIGxvY2ssIGFjY2VwdF9sb2NrLCBleHBpcmU7CisgICAgbmd4X3VpbnRfdCAgICAgICAgIGxvY2ssIGFjY2VwdF9sb2NrOwogICAgIG5neF9lcnJfdCAgICAgICAgICBlcnI7Ci0gICAgbmd4X21zZWNfdCAgICAgICAgIHRpbWVyOworICAgIG5neF9tc2VjX3QgICAgICAgICB0aW1lciwgZGVsdGE7CiAgICAgbmd4X2V2ZW50X3QgICAgICAgKmV2OwotICAgIG5neF9lcG9jaF9tc2VjX3QgICBkZWx0YTsKICAgICBzdHJ1Y3QgdGltZXZhbCAgICAgdHY7CiAgICAgc3RydWN0IHRpbWVzcGVjICAgIHRzLCAqdHA7CiAKLSAgICBmb3IgKCA7OyApIHsKLSAgICAgICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOworICAgIHRpbWVyID0gbmd4X2V2ZW50X2ZpbmRfdGltZXIoKTsKIAogI2lmIChOR1hfVEhSRUFEUykKIAotICAgICAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9CisgICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9FUlJPUikgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KIAotICAgICAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0lORklOSVRFIHx8IHRpbWVyID4gNTAwKSB7Ci0gICAgICAgICAgICB0aW1lciA9IDUwMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURSB8fCB0aW1lciA+IDUwMCkgeworICAgICAgICB0aW1lciA9IDUwMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAjZW5kaWYKIAotICAgICAgICBpZiAodGltZXIgIT0gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50IGV4cGlyZWQgdGltZXIiKTsKLQotICAgICAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygobmd4X21zZWNfdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ3hfZWxhcHNlZF9tc2VjIC0gbmd4X29sZF9lbGFwc2VkX21zZWMpKTsKLQotICAgICAgICBpZiAobmd4X3Bvc3RlZF9ldmVudHMgJiYgbmd4X3RocmVhZGVkKSB7Ci0gICAgICAgICAgICBuZ3hfd2FrZXVwX3dvcmtlcl90aHJlYWQoY3ljbGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbmd4X29sZF9lbGFwc2VkX21zZWMgPSBuZ3hfZWxhcHNlZF9tc2VjOwotICAgIGV4cGlyZSA9IDE7CiAgICAgYWNjZXB0X2xvY2sgPSAwOwogCiAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXgpIHsKQEAgLTUwNCw3ICs0ODUsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICB8fCB0aW1lciA+IG5neF9hY2NlcHRfbXV0ZXhfZGVsYXkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGltZXIgPSBuZ3hfYWNjZXB0X211dGV4X2RlbGF5OwotICAgICAgICAgICAgICAgIGV4cGlyZSA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01MjQsNyArNTA0LDYgQEAKIAogICAgIGlmICh0aW1lciA9PSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKICAgICAgICAgdHAgPSBOVUxMOwotICAgICAgICBleHBpcmUgPSAwOwogCiAgICAgfSBlbHNlIHsKICAgICAgICAgdHMudHZfc2VjID0gdGltZXIgLyAxMDAwOwpAQCAtNTQ5LDkgKzUyOCw4IEBACiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAia2V2ZW50IGV2ZW50czogJWQiLCBldmVudHMpOwogCi0gICAgZGVsdGEgPSBuZ3hfZWxhcHNlZF9tc2VjOwotICAgIG5neF9lbGFwc2VkX21zZWMgPSAobmd4X2Vwb2NoX21zZWNfdCkgdHYudHZfc2VjICogMTAwMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0di50dl91c2VjIC8gMTAwMCAtIG5neF9zdGFydF9tc2VjOworICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZTsKKyAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKIAogICAgIGlmIChlcnIpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcigoZXJyID09IE5HWF9FSU5UUikgPyBOR1hfTE9HX0lORk8gOiBOR1hfTE9HX0FMRVJULApAQCAtNTYxLDEwICs1MzksMTAgQEAKICAgICB9CiAKICAgICBpZiAodGltZXIgIT0gTkdYX1RJTUVSX0lORklOSVRFKSB7Ci0gICAgICAgIGRlbHRhID0gbmd4X2VsYXBzZWRfbXNlYyAtIGRlbHRhOworICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWUgLSBkZWx0YTsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50IHRpbWVyOiAlZCwgZGVsdGE6ICVkIiwgdGltZXIsIChpbnQpIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCB0aW1lcjogJU0sIGRlbHRhOiAlTSIsIHRpbWVyLCBkZWx0YSk7CiAKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZXZlbnRzID09IDApIHsKQEAgLTcxOCw5ICs2OTYsNyBAQAogICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKICAgICB9CiAKLSAgICBpZiAoZXhwaXJlICYmIGRlbHRhKSB7Ci0gICAgICAgIG5neF9ldmVudF9leHBpcmVfdGltZXJzKChuZ3hfbXNlY190KSBkZWx0YSk7Ci0gICAgfQorICAgIG5neF9ldmVudF9leHBpcmVfdGltZXJzKCk7CiAKICAgICBpZiAobmd4X3Bvc3RlZF9ldmVudHMpIHsKICAgICAgICAgaWYgKG5neF90aHJlYWRlZCkgewpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcG9sbF9tb2R1bGUuYwppbmRleCA3ZGUwZTRiLi4yOWIzNzVhIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcG9sbF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcG9sbF9tb2R1bGUuYwpAQCAtMjc4LDQxICsyNzgsMTkgQEAKIG5neF9wb2xsX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgIHJlYWR5LCByZXZlbnRzOwotICAgIG5neF9pbnRfdCAgICAgICAgICAgaSwgbnJlYWR5OwotICAgIG5neF91aW50X3QgICAgICAgICAgbiwgZm91bmQsIGxvY2ssIGV4cGlyZTsKLSAgICBuZ3hfbXNlY190ICAgICAgICAgIHRpbWVyOwogICAgIG5neF9lcnJfdCAgICAgICAgICAgZXJyOworICAgIG5neF9pbnRfdCAgICAgICAgICAgaSwgbnJlYWR5OworICAgIG5neF91aW50X3QgICAgICAgICAgbiwgZm91bmQsIGxvY2s7CisgICAgbmd4X21zZWNfdCAgICAgICAgICB0aW1lciwgZGVsdGE7CiAgICAgbmd4X2N5Y2xlX3QgICAgICAgKipvbGRfY3ljbGU7CiAgICAgbmd4X2V2ZW50X3QgICAgICAgICpldjsKLSAgICBuZ3hfZXBvY2hfbXNlY190ICAgIGRlbHRhOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAqYzsKICAgICBzdHJ1Y3QgdGltZXZhbCAgICAgIHR2OwogCi0gICAgZm9yICggOzsgKSB7Ci0gICAgICAgIHRpbWVyID0gbmd4X2V2ZW50X2ZpbmRfdGltZXIoKTsKLQotICAgICAgICBpZiAodGltZXIgIT0gMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAicG9sbCBleHBpcmVkIHRpbWVyIik7Ci0KLSAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKG5neF9tc2VjX3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ3hfZWxhcHNlZF9tc2VjIC0gbmd4X29sZF9lbGFwc2VkX21zZWMpKTsKLSAgICB9CisgICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOwogCiAgICAgLyogTkdYX1RJTUVSX0lORklOSVRFID09IElORlRJTSAqLwogCi0gICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURSkgewotICAgICAgICBleHBpcmUgPSAwOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZXhwaXJlID0gMTsKLSAgICB9Ci0KLSAgICBuZ3hfb2xkX2VsYXBzZWRfbXNlYyA9IG5neF9lbGFwc2VkX21zZWM7IAotCiAjaWYgKE5HWF9ERUJVRzApCiAgICAgaWYgKGN5Y2xlLT5sb2ctPmxvZ19sZXZlbCAmIE5HWF9MT0dfREVCVUdfQUxMKSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXZlbnRzOyBpKyspIHsKQEAgLTMzNywxMiArMzE1LDExIEBACiAgICAgICAgICAgICAgICAgICAgIHx8IHRpbWVyID4gbmd4X2FjY2VwdF9tdXRleF9kZWxheSkpCiAgICAgICAgICAgICB7IAogICAgICAgICAgICAgICAgIHRpbWVyID0gbmd4X2FjY2VwdF9tdXRleF9kZWxheTsKLSAgICAgICAgICAgICAgICBleHBpcmUgPSAwOwogICAgICAgICAgICAgfSAKICAgICAgICAgfQogICAgIH0KIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsICJwb2xsIHRpbWVyOiAlZCIsIHRpbWVyKTsKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLCAicG9sbCB0aW1lcjogJU0iLCB0aW1lcik7CiAKICAgICByZWFkeSA9IHBvbGwoZXZlbnRfbGlzdCwgKHVfaW50KSBuZXZlbnRzLCAoaW50KSB0aW1lcik7CiAKQEAgLTM1NSw5ICszMzIsOCBAQAogICAgIG5neF9nZXR0aW1lb2ZkYXkoJnR2KTsKICAgICBuZ3hfdGltZV91cGRhdGUodHYudHZfc2VjKTsKIAotICAgIGRlbHRhID0gbmd4X2VsYXBzZWRfbXNlYzsKLSAgICBuZ3hfZWxhcHNlZF9tc2VjID0gKG5neF9lcG9jaF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdHYudHZfdXNlYyAvIDEwMDAgLSBuZ3hfc3RhcnRfbXNlYzsKKyAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWU7CisgICAgbmd4X2N1cnJlbnRfdGltZSA9IChuZ3hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDA7CiAKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJwb2xsIHJlYWR5ICVkIG9mICVkIiwgcmVhZHksIG5ldmVudHMpOwpAQCAtMzcwLDEwICszNDYsMTAgQEAKICAgICB9CiAKICAgICBpZiAodGltZXIgIT0gTkdYX1RJTUVSX0lORklOSVRFKSB7Ci0gICAgICAgIGRlbHRhID0gbmd4X2VsYXBzZWRfbXNlYyAtIGRlbHRhOworICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWUgLSBkZWx0YTsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAicG9sbCB0aW1lcjogJWQsIGRlbHRhOiAlZCIsIHRpbWVyLCAoaW50KSBkZWx0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICJwb2xsIHRpbWVyOiAlTSwgZGVsdGE6ICVNIiwgdGltZXIsIGRlbHRhKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAocmVhZHkgPT0gMCkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLApAQCAtNTkzLDkgKzU2OSw3IEBACiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwgInBvbGwgcmVhZHkgIT0gZXZlbnRzIik7CiAgICAgfQogCi0gICAgaWYgKGV4cGlyZSAmJiBkZWx0YSkgewotICAgICAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygobmd4X21zZWNfdCkgZGVsdGEpOwotICAgIH0KKyAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOwogCiAgICAgaWYgKCFuZ3hfdGhyZWFkZWQpIHsKICAgICAgICAgbmd4X2V2ZW50X3Byb2Nlc3NfcG9zdGVkKGN5Y2xlKTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYwppbmRleCA5YzVkZjVkLi5mZGJiYjJmIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jCkBAIC0yODMsNTUgKzI4MywzNCBAQAogewogICAgIGludCAgICAgICAgICAgICAgICAgc2lnbm87CiAgICAgbmd4X2ludF90ICAgICAgICAgICBpbnN0YW5jZTsKLSAgICBuZ3hfdWludF90ICAgICAgICAgIGV4cGlyZTsKLSAgICBuZ3hfbXNlY190ICAgICAgICAgIHRpbWVyOworICAgIG5neF9tc2VjX3QgICAgICAgICAgdGltZXIsIGRlbHRhOwogICAgIG5neF9lcnJfdCAgICAgICAgICAgZXJyOwogICAgIHNpZ2luZm9fdCAgICAgICAgICAgc2k7CiAgICAgbmd4X2V2ZW50X3QgICAgICAgICpyZXYsICp3ZXY7CiAgICAgc3RydWN0IHRpbWV2YWwgICAgICB0djsKICAgICBzdHJ1Y3QgdGltZXNwZWMgICAgIHRzLCAqdHA7CiAgICAgc3RydWN0IHNpZ2FjdGlvbiAgICBzYTsKLSAgICBuZ3hfZXBvY2hfbXNlY190ICAgIGRlbHRhOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAqYzsKICAgICBuZ3hfcnRzaWdfY29uZl90ICAgKnJ0c2NmOwogCiAgICAgaWYgKG92ZXJmbG93KSB7CiAgICAgICAgIHRpbWVyID0gMDsKLSAgICAgICAgZXhwaXJlID0gMDsKIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoIDs7ICkgewotICAgICAgICAgICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOworICAgICAgICB0aW1lciA9IG5neF9ldmVudF9maW5kX3RpbWVyKCk7CiAKICNpZiAoTkdYX1RIUkVBRFMpCiAKLSAgICAgICAgICAgIGlmICh0aW1lciA9PSBOR1hfVElNRVJfRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0lORklOSVRFIHx8IHRpbWVyID4gNTAwKSB7Ci0gICAgICAgICAgICAgICAgdGltZXIgPSA1MDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSNlbmRpZgotCi0gICAgICAgICAgICBpZiAodGltZXIgIT0gMCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ0c2lnIGV4cGlyZWQgdGltZXIiKTsKLQotICAgICAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKG5neF9tc2VjX3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmd4X2VsYXBzZWRfbXNlYyAtIG5neF9vbGRfZWxhcHNlZF9tc2VjKSk7Ci0KLSAgICAgICAgICAgIGlmIChuZ3hfcG9zdGVkX2V2ZW50cyAmJiBuZ3hfdGhyZWFkZWQpIHsKLSAgICAgICAgICAgICAgICBuZ3hfd2FrZXVwX3dvcmtlcl90aHJlYWQoY3ljbGUpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0VSUk9SKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgZXhwaXJlID0gMTsKKyAgICAgICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURSB8fCB0aW1lciA+IDUwMCkgeworICAgICAgICAgICAgdGltZXIgPSA1MDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisjZW5kaWYKIAogICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewogICAgICAgICAgICAgaWYgKG5neF9hY2NlcHRfZGlzYWJsZWQgPiAwKSB7CkBAIC0zNDksNyArMzI4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRpbWVyID4gbmd4X2FjY2VwdF9tdXRleF9kZWxheSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0aW1lciA9IG5neF9hY2NlcHRfbXV0ZXhfZGVsYXk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGlyZSA9IDA7CiAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzU3LDcgKzMzNSw2IEBACiAKICAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0lORklOSVRFKSB7CiAgICAgICAgIHRwID0gTlVMTDsKLSAgICAgICAgZXhwaXJlID0gMDsKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIHRzLnR2X3NlYyA9IHRpbWVyIC8gMTAwMDsKQEAgLTM2NSwxMCArMzQyLDggQEAKICAgICAgICAgdHAgPSAmdHM7CiAgICAgfQogCi0gICAgbmd4X29sZF9lbGFwc2VkX21zZWMgPSBuZ3hfZWxhcHNlZF9tc2VjOwotCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAicnRzaWcgdGltZXI6ICVkIiwgdGltZXIpOworICAgICAgICAgICAgICAgICAgICJydHNpZyB0aW1lcjogJU0iLCB0aW1lcik7CiAKICAgICAvKiBMaW51eCdzIHNpZ3dhaXRpbmZvKCkgaXMgc2lndGltZWR3YWl0KCkgd2l0aCB0aGUgTlVMTCB0aW1lb3V0IHBvaW50ZXIgKi8KIApAQCAtNDAyLDkgKzM3Nyw4IEBACiAgICAgbmd4X2dldHRpbWVvZmRheSgmdHYpOwogICAgIG5neF90aW1lX3VwZGF0ZSh0di50dl9zZWMpOwogCi0gICAgZGVsdGEgPSBuZ3hfZWxhcHNlZF9tc2VjOwotICAgIG5neF9lbGFwc2VkX21zZWMgPSAobmd4X2Vwb2NoX21zZWNfdCkgdHYudHZfc2VjICogMTAwMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0di50dl91c2VjIC8gMTAwMCAtIG5neF9zdGFydF9tc2VjOworICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZTsKKyAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKIAogICAgIGlmIChlcnIpIHsKICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKQEAgLTQxNCwxMCArMzg4LDEwIEBACiAgICAgfQogCiAgICAgaWYgKHRpbWVyICE9IE5HWF9USU1FUl9JTkZJTklURSkgewotICAgICAgICBkZWx0YSA9IG5neF9lbGFwc2VkX21zZWMgLSBkZWx0YTsKKyAgICAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF90aW1lIC0gZGVsdGE7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInJ0c2lnIHRpbWVyOiAlZCwgZGVsdGE6ICVkIiwgdGltZXIsIChpbnQpIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgInJ0c2lnIHRpbWVyOiAlTSwgZGVsdGE6ICVNIiwgdGltZXIsIGRlbHRhKTsKICAgICB9CiAKICAgICBydHNjZiA9IG5neF9ldmVudF9nZXRfY29uZihuZ3hfY3ljbGUtPmNvbmZfY3R4LCBuZ3hfcnRzaWdfbW9kdWxlKTsKQEAgLTU1Nyw5ICs1MzEsNyBAQAogCiAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKIAotICAgIGlmIChleHBpcmUgJiYgZGVsdGEpIHsKLSAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKG5neF9tc2VjX3QpIGRlbHRhKTsKLSAgICB9CisgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKTsKIAogICAgIGlmIChuZ3hfcG9zdGVkX2V2ZW50cykgewogICAgICAgICBpZiAobmd4X3RocmVhZGVkKSB7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfc2VsZWN0X21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3NlbGVjdF9tb2R1bGUuYwppbmRleCA3Y2IzMzgxLi41YmUzYWZhIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfc2VsZWN0X21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9zZWxlY3RfbW9kdWxlLmMKQEAgLTI2NSwzNCArMjY1LDE3IEBACiBuZ3hfc2VsZWN0X3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5LCBucmVhZHk7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBpLCBmb3VuZCwgbG9jaywgZXhwaXJlOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgaSwgZm91bmQsIGxvY2s7CiAgICAgbmd4X2Vycl90ICAgICAgICAgICAgICAgICBlcnI7Ci0gICAgbmd4X21zZWNfdCAgICAgICAgICAgICAgICB0aW1lcjsKKyAgICBuZ3hfbXNlY190ICAgICAgICAgICAgICAgIHRpbWVyLCBkZWx0YTsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAgICAgICAgKmV2OwogICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAqYzsKLSAgICBuZ3hfZXBvY2hfbXNlY190ICAgICAgICAgIGRlbHRhOwogICAgIHN0cnVjdCB0aW1ldmFsICAgICAgICAgICAgdHYsICp0cDsKICNpZiAoTkdYX0hBVkVfU0VMRUNUX0NIQU5HRV9USU1FT1VUKQotICAgIHN0YXRpYyBuZ3hfZXBvY2hfbXNlY190ICAgZGVsdGFzID0gMDsKKyAgICBzdGF0aWMgbmd4X21zZWNfdCAgICAgICAgIGRlbHRhcyA9IDA7CiAjZW5kaWYKIAotICAgIGZvciAoIDs7ICkgewotICAgICAgICB0aW1lciA9IG5neF9ldmVudF9maW5kX3RpbWVyKCk7Ci0KLSAgICAgICAgaWYgKHRpbWVyICE9IDApIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCBleHBpcmVkIHRpbWVyIik7Ci0KLSAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKG5neF9tc2VjX3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmd4X2VsYXBzZWRfbXNlYyAtIG5neF9vbGRfZWxhcHNlZF9tc2VjKSk7Ci0gICAgfQotCi0gICAgbmd4X29sZF9lbGFwc2VkX21zZWMgPSBuZ3hfZWxhcHNlZF9tc2VjOwotCi0gICAgZXhwaXJlID0gMTsKKyAgICB0aW1lciA9IG5neF9ldmVudF9maW5kX3RpbWVyKCk7CiAKICNpZiAhKE5HWF9XSU4zMikKIApAQCAtMzEwLDcgKzI5Myw2IEBACiAgICAgICAgICAgICAgICAgICAgIHx8IHRpbWVyID4gbmd4X2FjY2VwdF9tdXRleF9kZWxheSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGltZXIgPSBuZ3hfYWNjZXB0X211dGV4X2RlbGF5OwotICAgICAgICAgICAgICAgIGV4cGlyZSA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDcsMTYgKzMyOSwxNSBAQAogCiAgICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURSkgewogICAgICAgICB0cCA9IE5VTEw7Ci0gICAgICAgIGV4cGlyZSA9IDA7CiAKICAgICB9IGVsc2UgewotICAgICAgICB0di50dl9zZWMgPSB0aW1lciAvIDEwMDA7Ci0gICAgICAgIHR2LnR2X3VzZWMgPSAodGltZXIgJSAxMDAwKSAqIDEwMDA7CisgICAgICAgIHR2LnR2X3NlYyA9IChsb25nKSAodGltZXIgLyAxMDAwKTsKKyAgICAgICAgdHYudHZfdXNlYyA9IChsb25nKSAoKHRpbWVyICUgMTAwMCkgKiAxMDAwKTsKICAgICAgICAgdHAgPSAmdHY7CiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAic2VsZWN0IHRpbWVyOiAlZCIsIHRpbWVyKTsKKyAgICAgICAgICAgICAgICAgICAic2VsZWN0IHRpbWVyOiAlTSIsIHRpbWVyKTsKIAogICAgIHdvcmtfcmVhZF9mZF9zZXQgPSBtYXN0ZXJfcmVhZF9mZF9zZXQ7CiAgICAgd29ya193cml0ZV9mZF9zZXQgPSBtYXN0ZXJfd3JpdGVfZmRfc2V0OwpAQCAtMzg2LDcgKzM2Nyw3IEBACiAjaWYgKE5HWF9IQVZFX1NFTEVDVF9DSEFOR0VfVElNRU9VVCkKIAogICAgIGlmICh0aW1lciAhPSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKLSAgICAgICAgZGVsdGEgPSB0aW1lciAtICh0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDApOworICAgICAgICBkZWx0YSA9IHRpbWVyIC0gKChuZ3hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDApOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGxlYXJuIHRoZSByZWFsIHRpbWUgYW5kIHVwZGF0ZSB0aGUgY2FjaGVkIHRpbWUKQEAgLTM5OSwyMiArMzgwLDIzIEBACiAgICAgICAgICAgICBuZ3hfdGltZV91cGRhdGUodHYudHZfc2VjKTsKICAgICAgICAgICAgIGRlbHRhcyA9IHR2LnR2X3VzZWMgLyAxMDAwOwogCi0gICAgICAgICAgICBuZ3hfZWxhcHNlZF9tc2VjID0gKG5neF9lcG9jaF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdHYudHZfdXNlYyAvIDEwMDAgLSBuZ3hfc3RhcnRfbXNlYzsKKyAgICAgICAgICAgIG5neF9jdXJyZW50X3RpbWUgPSAobmd4X21zZWNfdCkgdHYudHZfc2VjICogMTAwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHR2LnR2X3VzZWMgLyAxMDAwOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmd4X2VsYXBzZWRfbXNlYyArPSBkZWx0YTsKKyAgICAgICAgICAgIG5neF9jdXJyZW50X3RpbWUgKz0gZGVsdGE7CiAgICAgICAgIH0KIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAic2VsZWN0IHRpbWVyOiAlZCwgZGVsdGE6ICVkIiwgdGltZXIsIChpbnQpIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCB0aW1lcjogJU0sIGRlbHRhOiAlTSIsIHRpbWVyLCBkZWx0YSk7CiAKICAgICB9IGVsc2UgewotICAgICAgICBkZWx0YSA9IDA7CisgICAgICAgIGRlbHRhcyA9IDA7CisKICAgICAgICAgbmd4X2dldHRpbWVvZmRheSgmdHYpOwogICAgICAgICBuZ3hfdGltZV91cGRhdGUodHYudHZfc2VjKTsKIAotICAgICAgICBuZ3hfZWxhcHNlZF9tc2VjID0gKG5neF9lcG9jaF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdHYudHZfdXNlYyAvIDEwMDAgLSBuZ3hfc3RhcnRfbXNlYzsKKyAgICAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF90aW1lOworICAgICAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKIAogICAgICAgICBpZiAocmVhZHkgPT0gMCkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLApAQCAtNDI5LDE1ICs0MTEsMTQgQEAKICAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7CiAgICAgbmd4X3RpbWVfdXBkYXRlKHR2LnR2X3NlYyk7CiAKLSAgICBkZWx0YSA9IG5neF9lbGFwc2VkX21zZWM7Ci0gICAgbmd4X2VsYXBzZWRfbXNlYyA9IChuZ3hfZXBvY2hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHR2LnR2X3VzZWMgLyAxMDAwIC0gbmd4X3N0YXJ0X21zZWM7CisgICAgZGVsdGEgPSBuZ3hfY3VycmVudF90aW1lOworICAgIG5neF9jdXJyZW50X3RpbWUgPSAobmd4X21zZWNfdCkgdHYudHZfc2VjICogMTAwMCArIHR2LnR2X3VzZWMgLyAxMDAwOwogCiAgICAgaWYgKHRpbWVyICE9IE5HWF9USU1FUl9JTkZJTklURSkgewotICAgICAgICBkZWx0YSA9IG5neF9lbGFwc2VkX21zZWMgLSBkZWx0YTsKKyAgICAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF90aW1lIC0gZGVsdGE7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCB0aW1lcjogJWQsIGRlbHRhOiAlZCIsIHRpbWVyLCAoaW50KSBkZWx0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QgdGltZXI6ICVNLCBkZWx0YTogJU0iLCB0aW1lciwgZGVsdGEpOwogCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHJlYWR5ID09IDApIHsKQEAgLTU5NCw5ICs1NzUsNyBAQAogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsICJzZWxlY3QgcmVhZHkgIT0gZXZlbnRzIik7CiAgICAgfQogCi0gICAgaWYgKGV4cGlyZSAmJiBkZWx0YSkgewotICAgICAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygobmd4X21zZWNfdCkgZGVsdGEpOwotICAgIH0KKyAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOwogCiAgICAgaWYgKCFuZ3hfdGhyZWFkZWQpIHsKICAgICAgICAgbmd4X2V2ZW50X3Byb2Nlc3NfcG9zdGVkKGN5Y2xlKTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuaAppbmRleCBlZWUxNjVlLi4zMDhkNDYwIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmgKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudC5oCkBAIC0xMzYsMTEgKzEzNiwxMSBAQAogICAgICAqIFNUVUI6IFRoZSBpbmxpbmUgb2YgIm5neF9yYnRyZWVfdCAgcmJ0cmVlOyIKICAgICAgKi8KIAotICAgIG5neF9pbnRfdCAgICAgICAgcmJ0cmVlX2tleTsKLSAgICB2b2lkICAgICAgICAgICAgKnJidHJlZV9sZWZ0OwotICAgIHZvaWQgICAgICAgICAgICAqcmJ0cmVlX3JpZ2h0OwotICAgIHZvaWQgICAgICAgICAgICAqcmJ0cmVlX3BhcmVudDsKLSAgICBjaGFyICAgICAgICAgICAgIHJidHJlZV9jb2xvcjsKKyAgICBuZ3hfcmJ0cmVlX2tleV90ICAgcmJ0cmVlX2tleTsKKyAgICB2b2lkICAgICAgICAgICAgICAqcmJ0cmVlX2xlZnQ7CisgICAgdm9pZCAgICAgICAgICAgICAgKnJidHJlZV9yaWdodDsKKyAgICB2b2lkICAgICAgICAgICAgICAqcmJ0cmVlX3BhcmVudDsKKyAgICBjaGFyICAgICAgICAgICAgICAgcmJ0cmVlX2NvbG9yOwogCiAKICAgICB1bnNpZ25lZCAgICAgICAgIGNsb3NlZDoxOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5jIGIvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5jCmluZGV4IDRkNmM2NDcuLmMzZDNjN2UgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMKQEAgLTYwLDI4ICs2MCwxOCBAQAogCiAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfZXZlbnRfdGltZXJfbXV0ZXgpOwogCi0gICAgdGltZXIgPSAobmd4X21zZWNfdCkKLSAgICAgICAgIChub2RlLT5rZXkgKiBOR1hfVElNRVJfUkVTT0xVVElPTiAtCi0gICAgICAgICAgICAgICBuZ3hfZWxhcHNlZF9tc2VjIC8gTkdYX1RJTUVSX1JFU09MVVRJT04gKiBOR1hfVElNRVJfUkVTT0xVVElPTik7Ci0jaWYgMAotICAgICAgICAgICAgICAgICAgICAgICAgIChub2RlLT5rZXkgKiBOR1hfVElNRVJfUkVTT0xVVElPTiAtIG5neF9lbGFwc2VkX21zZWMpOwotI2VuZGlmCisgICAgdGltZXIgPSAobmd4X21zZWNfdCkgbm9kZS0+a2V5IC0gbmd4X2N1cnJlbnRfdGltZTsKIAogICAgIHJldHVybiB0aW1lciA+IDAgPyB0aW1lciA6IDAgOwogfQogCiAKIHZvaWQKLW5neF9ldmVudF9leHBpcmVfdGltZXJzKG5neF9tc2VjX3QgdGltZXIpCituZ3hfZXZlbnRfZXhwaXJlX3RpbWVycyh2b2lkKQogewogICAgIG5neF9ldmVudF90ICAgKmV2OwogICAgIG5neF9yYnRyZWVfdCAgKm5vZGU7CiAKLSAgICBpZiAodGltZXIgPCAwKSB7Ci0gICAgICAgIC8qIGF2b2lkIHRoZSBlbmRsZXNzIGxvb3AgaWYgdGhlIHRpbWUgZ29lcyBiYWNrd2FyZCBmb3Igc29tZSByZWFzb24gKi8KLSAgICAgICAgdGltZXIgPSAwOwotICAgIH0KLQogICAgIGZvciAoIDs7ICkgewogCiAgICAgICAgIGlmIChuZ3hfZXZlbnRfdGltZXJfcmJ0cmVlID09ICZuZ3hfZXZlbnRfdGltZXJfc2VudGluZWwpIHsKQEAgLTk1LDggKzg1LDExIEBACiAgICAgICAgIG5vZGUgPSBuZ3hfcmJ0cmVlX21pbigobmd4X3JidHJlZV90ICopIG5neF9ldmVudF90aW1lcl9yYnRyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmd4X2V2ZW50X3RpbWVyX3NlbnRpbmVsKTsKIAotICAgICAgICBpZiAobm9kZS0+a2V5IDw9IChuZ3hfbXNlY190KQotICAgICAgICAgICAgICAgICAgICAgICAgIChuZ3hfb2xkX2VsYXBzZWRfbXNlYyArIHRpbWVyKSAvIE5HWF9USU1FUl9SRVNPTFVUSU9OKQorICAgICAgICAvKiBub2RlLT5rZXkgPD0gbmd4X2N1cnJlbnRfdGltZSAqLworCisgICAgICAgIGlmICgobmd4X3JidHJlZV9rZXlfaW50X3QpIG5vZGUtPmtleQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIChuZ3hfcmJ0cmVlX2tleV9pbnRfdCkgbmd4X2N1cnJlbnRfdGltZQorICAgICAgICAgICAgPD0gMCkKICAgICAgICAgewogICAgICAgICAgICAgZXYgPSAobmd4X2V2ZW50X3QgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY2hhciAqKSBub2RlIC0gb2Zmc2V0b2Yobmd4X2V2ZW50X3QsIHJidHJlZV9rZXkpKTsKQEAgLTEyMCw3ICsxMTMsNyBAQAogI2VuZGlmCiAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlbnQgdGltZXIgZGVsOiAlZDogJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImV2ZW50IHRpbWVyIGRlbDogJWQ6ICVNIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9pZGVudChldi0+ZGF0YSksIGV2LT5yYnRyZWVfa2V5KTsKIAogICAgICAgICAgICAgbmd4X3JidHJlZV9kZWxldGUoKG5neF9yYnRyZWVfdCAqKikgJm5neF9ldmVudF90aW1lcl9yYnRyZWUsCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmgKaW5kZXggNDk1NDgwOS4uYTlkMzE3NiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuaApAQCAtMTYsMjQgKzE2LDEyIEBACiAjZGVmaW5lIE5HWF9USU1FUl9JTkZJTklURSAgKG5neF9tc2VjX3QpIC0xCiAjZGVmaW5lIE5HWF9USU1FUl9FUlJPUiAgICAgKG5neF9tc2VjX3QpIC0yCiAKLQotLyoKLSAqIHRoZSAzMi1iaXQgdGltZXIga2V5IHZhbHVlIHJlc29sdXRpb24KLSAqCi0gKiAxIG1zZWMgLSAyNCBkYXlzCi0gKiAxMCBtc2VjIC0gOCBtb250aHMKLSAqIDUwIG1zZWMgLSAzIHllYXJzIDUgbW9udGhzCi0gKiAxMDAgbXNlYyAtIDYgeWVhcnMgMTAgbW9udGhzCi0gKi8KLQotI2RlZmluZSBOR1hfVElNRVJfUkVTT0xVVElPTiAgMQotCiAjZGVmaW5lIE5HWF9USU1FUl9MQVpZX0RFTEFZICAzMDAKIAogCiBuZ3hfaW50X3Qgbmd4X2V2ZW50X3RpbWVyX2luaXQobmd4X2xvZ190ICpsb2cpOwogbmd4X21zZWNfdCBuZ3hfZXZlbnRfZmluZF90aW1lcih2b2lkKTsKLXZvaWQgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMobmd4X21zZWNfdCB0aW1lcik7Cit2b2lkIG5neF9ldmVudF9leHBpcmVfdGltZXJzKHZvaWQpOwogCiAKICNpZiAoTkdYX1RIUkVBRFMpCkBAIC00OSw3ICszNyw3IEBACiBuZ3hfZXZlbnRfZGVsX3RpbWVyKG5neF9ldmVudF90ICpldikKIHsKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJldmVudCB0aW1lciBkZWw6ICVkOiAlZCIsCisgICAgICAgICAgICAgICAgICAgImV2ZW50IHRpbWVyIGRlbDogJWQ6ICVNIiwKICAgICAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X2lkZW50KGV2LT5kYXRhKSwgZXYtPnJidHJlZV9rZXkpOwogCiAgICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9ldmVudF90aW1lcl9tdXRleCkgPT0gTkdYX0VSUk9SKSB7CkBAIC03NSwxNCArNjMsMTAgQEAKIHN0YXRpYyBuZ3hfaW5saW5lIHZvaWQKIG5neF9ldmVudF9hZGRfdGltZXIobmd4X2V2ZW50X3QgKmV2LCBuZ3hfbXNlY190IHRpbWVyKQogewotICAgIG5neF9pbnRfdCAga2V5OworICAgIG5neF9yYnRyZWVfa2V5X3QgICAgICBrZXk7CisgICAgbmd4X3JidHJlZV9rZXlfaW50X3QgIGRpZmY7CiAKLSAgICBrZXkgPSAobmd4X2ludF90KQotICAgICAgICAgICAgICAobmd4X2VsYXBzZWRfbXNlYyAvIE5HWF9USU1FUl9SRVNPTFVUSU9OICogTkdYX1RJTUVSX1JFU09MVVRJT04KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRpbWVyKSAvIE5HWF9USU1FUl9SRVNPTFVUSU9OOwotI2lmIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5neF9lbGFwc2VkX21zZWMgKyB0aW1lcikgLyBOR1hfVElNRVJfUkVTT0xVVElPTjsKLSNlbmRpZgorICAgIGtleSA9IG5neF9jdXJyZW50X3RpbWUgKyB0aW1lcjsKIAogICAgIGlmIChldi0+dGltZXJfc2V0KSB7CiAKQEAgLTkyLDExICs3NiwxMSBAQAogICAgICAgICAgKiB0aGUgcmJ0cmVlIG9wZXJhdGlvbnMgZm9yIHRoZSBmYXN0IGNvbm5lY3Rpb25zLgogICAgICAgICAgKi8KIAotICAgICAgICBpZiAoYWJzKGtleSAtIGV2LT5yYnRyZWVfa2V5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCBOR1hfVElNRVJfTEFaWV9ERUxBWSAvIE5HWF9USU1FUl9SRVNPTFVUSU9OKQotICAgICAgICB7CisgICAgICAgIGRpZmYgPSAobmd4X3JidHJlZV9rZXlfaW50X3QpIChrZXkgLSBldi0+cmJ0cmVlX2tleSk7CisKKyAgICAgICAgaWYgKG5neF9hYnMoZGlmZikgPCBOR1hfVElNRVJfTEFaWV9ERUxBWSkgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudCB0aW1lcjogJWQsIG9sZDogJWksIG5ldzogJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImV2ZW50IHRpbWVyOiAlZCwgb2xkOiAlTSwgbmV3OiAlTSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X2lkZW50KGV2LT5kYXRhKSwgZXYtPnJidHJlZV9rZXksIGtleSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEwNiw5ICs5MCw5IEBACiAKICAgICBldi0+cmJ0cmVlX2tleSA9IGtleTsKIAotICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImV2ZW50IHRpbWVyIGFkZDogJWQ6ICVpIiwKLSAgICAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X2lkZW50KGV2LT5kYXRhKSwgZXYtPnJidHJlZV9rZXkpOworICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImV2ZW50IHRpbWVyIGFkZDogJWQ6ICVNOiVNIiwKKyAgICAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X2lkZW50KGV2LT5kYXRhKSwgdGltZXIsIGV2LT5yYnRyZWVfa2V5KTsKIAogICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhuZ3hfZXZlbnRfdGltZXJfbXV0ZXgpID09IE5HWF9FUlJPUikgewogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jCmluZGV4IGY1Njg5NjQuLjcwZjc5NzQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jCkBAIC0zOSwxMyArMzksMTUgQEAKIH0gbmd4X2h0dHBfYXV0b2luZGV4X2xvY19jb25mX3Q7CiAKIAotI2RlZmluZSBOR1hfSFRUUF9BVVRPSU5ERVhfTkFNRV9MRU4gIDUwCisjZGVmaW5lIE5HWF9IVFRQX0FVVE9JTkRFWF9QUkVBTExPQ0FURSAgNTAKKworI2RlZmluZSBOR1hfSFRUUF9BVVRPSU5ERVhfTkFNRV9MRU4gICAgIDUwCiAKIAogc3RhdGljIGludCBuZ3hfbGliY19jZGVjbCBuZ3hfaHR0cF9hdXRvaW5kZXhfY21wX2VudHJpZXMoY29uc3Qgdm9pZCAqb25lLAogICAgIGNvbnN0IHZvaWQgKnR3byk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dG9pbmRleF9lcnJvcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCi0gICAgbmd4X2Rpcl90ICpkaXIsIHVfY2hhciAqbmFtZSk7CisgICAgbmd4X2Rpcl90ICpkaXIsIG5neF9zdHJfdCAqbmFtZSk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dG9pbmRleF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfYXV0b2luZGV4X2NyZWF0ZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfYXV0b2luZGV4X21lcmdlX2xvY19jb25mKG5neF9jb25mX3QgKmNmLApAQCAtMTMxLDIwICsxMzMsMTkgQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX2F1dG9pbmRleF9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgKmxhc3QsIHNjYWxlOworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAqbGFzdCwgKmZpbGVuYW1lLCBzY2FsZTsKICAgICBvZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgY29weTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgY29weSwgYWxsb2NhdGVkOwogICAgIG5neF90bV90ICAgICAgICAgICAgICAgICAgICAgICAgdG07Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgICByYywgc2l6ZTsKLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIGksIGxldmVsOwogICAgIG5neF9lcnJfdCAgICAgICAgICAgICAgICAgICAgICAgZXJyOwogICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgICAgICAqYjsKLSAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAgIG91dDsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgIGRuYW1lLCBmbmFtZTsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgIHJjLCBzaXplOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgcGF0aDsKICAgICBuZ3hfZGlyX3QgICAgICAgICAgICAgICAgICAgICAgIGRpcjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIGksIGxldmVsOwogICAgIG5neF9wb29sX3QgICAgICAgICAgICAgICAgICAgICAqcG9vbDsKKyAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAgIG91dDsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM7Ci0gICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAgICAgICpjbGNmOwogICAgIG5neF9odHRwX2F1dG9pbmRleF9lbnRyeV90ICAgICAqZW50cnk7CiAgICAgbmd4X2h0dHBfYXV0b2luZGV4X2xvY19jb25mX3QgICphbGNmOwogCkBAIC0xNjYsNDEgKzE2NywyMSBAQAogICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOwogICAgIH0KIAotICAgIC8qIFRPRE86IHBvb2wgc2hvdWxkIGJlIHRlbXBvcmFyeSBwb29sICovCi0gICAgcG9vbCA9IHItPnBvb2w7CisgICAgLyogTkdYX0RJUl9NQVNLX0xFTiBpcyBsZXNzZXIgdGhhbiBOR1hfSFRUUF9BVVRPSU5ERVhfUFJFQUxMT0NBVEUgKi8KIAotICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKLQotICAgIGlmIChjbGNmLT5hbGlhcykgewotICAgICAgICBkbmFtZS5kYXRhID0gbmd4X3BhbGxvYyhwb29sLCBjbGNmLT5yb290LmxlbiArIHItPnVyaS5sZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBOR1hfRElSX01BU0tfTEVOICsgMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGNsY2YtPm5hbWUubGVuKTsKLSAgICAgICAgaWYgKGRuYW1lLmRhdGEgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKLSAgICAgICAgfQotICAgIAotICAgICAgICBsYXN0ID0gbmd4X2NweW1lbShkbmFtZS5kYXRhLCBjbGNmLT5yb290LmRhdGEsIGNsY2YtPnJvb3QubGVuKTsKLSAgICAgICAgbGFzdCA9IG5neF9jcHlzdHJuKGxhc3QsIHItPnVyaS5kYXRhICsgY2xjZi0+bmFtZS5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gY2xjZi0+bmFtZS5sZW4gKyAxKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRuYW1lLmRhdGEgPSBuZ3hfcGFsbG9jKHBvb2wsIGNsY2YtPnJvb3QubGVuICsgci0+dXJpLmxlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIE5HWF9ESVJfTUFTS19MRU4pOwotICAgICAgICBpZiAoZG5hbWUuZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgbGFzdCA9IG5neF9jcHltZW0oZG5hbWUuZGF0YSwgY2xjZi0+cm9vdC5kYXRhLCBjbGNmLT5yb290Lmxlbik7Ci0gICAgICAgIGxhc3QgPSBuZ3hfY3B5c3RybihsYXN0LCByLT51cmkuZGF0YSwgci0+dXJpLmxlbik7CisgICAgbGFzdCA9IG5neF9odHRwX21hcF91cmlfdG9fcGF0aChyLCAmcGF0aCwgTkdYX0hUVFBfQVVUT0lOREVYX1BSRUFMTE9DQVRFKTsKKyAgICBpZiAobGFzdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgfQogCi0gICAgZG5hbWUubGVuID0gbGFzdCAtIGRuYW1lLmRhdGE7CisgICAgYWxsb2NhdGVkID0gcGF0aC5sZW47CisgICAgcGF0aC5sZW4gPSBsYXN0IC0gcGF0aC5kYXRhIC0gMTsKKyAgICBwYXRoLmRhdGFbcGF0aC5sZW5dID0gJ1wwJzsKIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIGF1dG9pbmRleDogXCIlc1wiIiwgZG5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgImh0dHAgYXV0b2luZGV4OiBcIiVzXCIiLCBwYXRoLmRhdGEpOwogCi0KLSAgICBpZiAobmd4X29wZW5fZGlyKCZkbmFtZSwgJmRpcikgPT0gTkdYX0VSUk9SKSB7CisgICAgaWYgKG5neF9vcGVuX2RpcigmcGF0aCwgJmRpcikgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgIGVyciA9IG5neF9lcnJubzsKIAogICAgICAgICBpZiAoZXJyID09IE5HWF9FTk9FTlQKQEAgLTIyMCwyMCArMjAxLDI1IEBACiAgICAgICAgIH0KIAogICAgICAgICBuZ3hfbG9nX2Vycm9yKGxldmVsLCByLT5jb25uZWN0aW9uLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9kaXJfbiAiIFwiJXNcIiBmYWlsZWQiLCBkbmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9kaXJfbiAiIFwiJXNcIiBmYWlsZWQiLCBwYXRoLmRhdGEpOwogCiAgICAgICAgIHJldHVybiByYzsKICAgICB9CiAKICNpZiAoTkdYX1NVUFBSRVNTX1dBUk4pCisKICAgICAvKiBNU1ZDIHRoaW5rcyAnZW50cmllcycgbWF5IGJlIHVzZWQgd2l0aG91dCBoYXZpbmcgYmVlbiBpbml0aWFsaXplZCAqLwogICAgIG5neF9tZW16ZXJvKCZlbnRyaWVzLCBzaXplb2Yobmd4X2FycmF5X3QpKTsKKwogI2VuZGlmCiAKLSAgICBpZiAobmd4X2FycmF5X2luaXQoJmVudHJpZXMsIHBvb2wsIDUwLCBzaXplb2Yobmd4X2h0dHBfYXV0b2luZGV4X2VudHJ5X3QpKQotICAgICAgICA9PSBOR1hfRVJST1IpCisgICAgLyogVE9ETzogcG9vbCBzaG91bGQgYmUgdGVtcG9yYXJ5IHBvb2wgKi8KKyAgICBwb29sID0gci0+cG9vbDsKKworICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmZW50cmllcywgcG9vbCwgNDAsIHNpemVvZihuZ3hfaHR0cF9hdXRvaW5kZXhfZW50cnlfdCkpCisgICAgICAgICE9IE5HWF9PSykKICAgICB7Ci0gICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgZG5hbWUuZGF0YSk7CisgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgJnBhdGgpOwogICAgIH0KIAogICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9IE5HWF9IVFRQX09LOwpAQCAtMjQ2LDEwICsyMzIsOCBAQAogICAgICAgICByZXR1cm4gcmM7CiAgICAgfQogCi0gICAgZm5hbWUubGVuID0gMDsKLSNpZiAoTkdYX1NVUFBSRVNTX1dBUk4pCi0gICAgZm5hbWUuZGF0YSA9IE5VTEw7Ci0jZW5kaWYKKyAgICBmaWxlbmFtZSA9IHBhdGguZGF0YTsKKyAgICBmaWxlbmFtZVtwYXRoLmxlbl0gPSAnLyc7CiAKICAgICBmb3IgKCA7OyApIHsKICAgICAgICAgbmd4X3NldF9lcnJubygwKTsKQEAgLTI1OSw4ICsyNDMsOCBAQAogCiAgICAgICAgICAgICBpZiAoZXJyICE9IE5HWF9FTk9NT1JFRklMRVMpIHsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgci0+Y29ubmVjdGlvbi0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcmVhZF9kaXJfbiAiIFwiJXNcIiBmYWlsZWQiLCBkbmFtZS5kYXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0b2luZGV4X2Vycm9yKHIsICZkaXIsIGRuYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JlYWRfZGlyX24gIiBcIiVWXCIgZmFpbGVkIiwgJnBhdGgpOworICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgJnBhdGgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsgCkBAIC0yNzcsNDkgKzI2MSw1MSBAQAogCiAgICAgICAgIGlmICghZGlyLnZhbGlkX2luZm8pIHsKIAotICAgICAgICAgICAgaWYgKGRuYW1lLmxlbiArIDEgKyBsZW4gKyAxID4gZm5hbWUubGVuKSB7Ci0gICAgICAgICAgICAgICAgZm5hbWUubGVuID0gZG5hbWUubGVuICsgMSArIGxlbiArIDEgKyAzMjsKKyAgICAgICAgICAgIC8qIDEgYnl0ZSBmb3IgJy8nIGFuZCAxIGJ5dGUgZm9yIHRlcm1pbmF0aW5nICdcMCcgKi8KIAotICAgICAgICAgICAgICAgIGZuYW1lLmRhdGEgPSBuZ3hfcGFsbG9jKHBvb2wsIGZuYW1lLmxlbik7Ci0gICAgICAgICAgICAgICAgaWYgKGZuYW1lLmRhdGEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0b2luZGV4X2Vycm9yKHIsICZkaXIsIGRuYW1lLmRhdGEpOworICAgICAgICAgICAgaWYgKHBhdGgubGVuICsgMSArIGxlbiArIDEgPiBhbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgPSBwYXRoLmxlbiArIDEgKyBsZW4gKyAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBOR1hfSFRUUF9BVVRPSU5ERVhfUFJFQUxMT0NBVEU7CisKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG5neF9wYWxsb2MocG9vbCwgYWxsb2NhdGVkKTsKKyAgICAgICAgICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0b2luZGV4X2Vycm9yKHIsICZkaXIsICZwYXRoKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBsYXN0ID0gbmd4X2NweXN0cm4oZm5hbWUuZGF0YSwgZG5hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5hbWUubGVuICsgMSk7CisgICAgICAgICAgICAgICAgbGFzdCA9IG5neF9jcHlzdHJuKGZpbGVuYW1lLCBwYXRoLmRhdGEsIHBhdGgubGVuICsgMSk7CiAgICAgICAgICAgICAgICAgKmxhc3QrKyA9ICcvJzsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbmd4X2NweXN0cm4obGFzdCwgbmd4X2RlX25hbWUoJmRpciksIGxlbiArIDEpOwogCi0gICAgICAgICAgICBpZiAobmd4X2RlX2luZm8oZm5hbWUuZGF0YSwgJmRpcikgPT0gTkdYX0ZJTEVfRVJST1IpIHsKKyAgICAgICAgICAgIGlmIChuZ3hfZGVfaW5mbyhmaWxlbmFtZSwgJmRpcikgPT0gTkdYX0ZJTEVfRVJST1IpIHsKICAgICAgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CiAKICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5HWF9FTk9FTlQpIHsKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIHItPmNvbm5lY3Rpb24tPmxvZywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9kZV9pbmZvX24gIiBcIiVzXCIgZmFpbGVkIiwgZm5hbWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgZG5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2RlX2luZm9fbiAiIFwiJXNcIiBmYWlsZWQiLCBmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgJnBhdGgpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChuZ3hfZGVfbGlua19pbmZvKGZuYW1lLmRhdGEsICZkaXIpID09IE5HWF9GSUxFX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgaWYgKG5neF9kZV9saW5rX2luZm8oZmlsZW5hbWUsICZkaXIpID09IE5HWF9GSUxFX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCByLT5jb25uZWN0aW9uLT5sb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZGVfbGlua19pbmZvX24gIiBcIiVzXCIgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZS5kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dG9pbmRleF9lcnJvcihyLCAmZGlyLCBkbmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgJnBhdGgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGVudHJ5ID0gbmd4X2FycmF5X3B1c2goJmVudHJpZXMpOwogICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dG9pbmRleF9lcnJvcihyLCAmZGlyLCBkbmFtZS5kYXRhKTsKKyAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgJnBhdGgpOwogICAgICAgICB9CiAKICAgICAgICAgZW50cnktPm5hbWUubGVuID0gbGVuOyAgICAgICAgCiAKICAgICAgICAgZW50cnktPm5hbWUuZGF0YSA9IG5neF9wYWxsb2MocG9vbCwgbGVuICsgMSk7CiAgICAgICAgIGlmIChlbnRyeS0+bmFtZS5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgZG5hbWUuZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0b2luZGV4X2Vycm9yKHIsICZkaXIsICZwYXRoKTsKICAgICAgICAgfQogCiAgICAgICAgIG5neF9jcHlzdHJuKGVudHJ5LT5uYW1lLmRhdGEsIG5neF9kZV9uYW1lKCZkaXIpLCBsZW4gKyAxKTsKQEAgLTM0MCw3ICszMjYsNyBAQAogCiAgICAgaWYgKG5neF9jbG9zZV9kaXIoJmRpcikgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgci0+Y29ubmVjdGlvbi0+bG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2Rpcl9uICIgXCIlc1wiIGZhaWxlZCIsIGRuYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9kaXJfbiAiIFwiJXNcIiBmYWlsZWQiLCAmcGF0aCk7CiAgICAgfQogCiAgICAgbGVuID0gc2l6ZW9mKHRpdGxlKSAtIDEKQEAgLTU4NiwxMSArNTcyLDExIEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfYXV0b2luZGV4X2Vycm9yKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2Rpcl90ICpkaXIsIHVfY2hhciAqbmFtZSkKK25neF9odHRwX2F1dG9pbmRleF9lcnJvcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9kaXJfdCAqZGlyLCBuZ3hfc3RyX3QgKm5hbWUpCiB7CiAgICAgaWYgKG5neF9jbG9zZV9kaXIoZGlyKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfZGlyX24gIiBcIiVzXCIgZmFpbGVkIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2Rpcl9uICIgXCIlVlwiIGZhaWxlZCIsIG5hbWUpOwogICAgIH0KIAogICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYwppbmRleCBhYmFiMjY4Li4wMWI2ZDBjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfbW9kdWxlLmMKQEAgLTI0LDEwICsyNCw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgY3VycmVudDsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkOwogCi0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgKnBhdGg7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgIHVyaTsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgcGF0aDsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgaW5kZXg7CiAKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgdGVzdGVkOyAgICAgLyogdW5zaWduZWQgIHRlc3RlZDoxICovCkBAIC0zNyw4ICszNSw2IEBACiAjZGVmaW5lIE5HWF9IVFRQX0RFRkFVTFRfSU5ERVggICAiaW5kZXguaHRtbCIKIAogCi1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2luZGV4X2FsbG9jKG5neF9odHRwX3JlcXVlc3RfdCAqciwgc2l6ZV90IHNpemUsCi0gICAgbmd4X2h0dHBfaW5kZXhfY3R4X3QgKmN0eCwgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICpjbGNmKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfaW5kZXhfdGVzdF9kaXIobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9odHRwX2luZGV4X2N0eF90ICpjdHgpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9pbmRleF9lcnJvcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCkBAIC0xMjAsMTEgKzExNiwxMiBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfaW5kZXhfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAqbmFtZTsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICpsYXN0OwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKICAgICBuZ3hfZmRfdCAgICAgICAgICAgICAgICAgICAgICBmZDsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICByYzsKICAgICBuZ3hfZXJyX3QgICAgICAgICAgICAgICAgICAgICBlcnI7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgdXJpOwogICAgIG5neF9sb2dfdCAgICAgICAgICAgICAgICAgICAgKmxvZzsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBpOwogICAgIG5neF9odHRwX2luZGV4X3QgICAgICAgICAgICAgKmluZGV4OwpAQCAtMTUyLDcgKzE0OSw2IEBACiAgICAgICogYW5kIG1heSBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcwogICAgICAqLwogCi0gICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogICAgIGlsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2luZGV4X21vZHVsZSk7CiAKICAgICBjdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLCBuZ3hfaHR0cF9pbmRleF9tb2R1bGUpOwpAQCAtMTg0LDcgKzE4MCw5IEBACiAgICAgICAgICAgICBlLmlwID0gaW5kZXhbaV0ubGVuZ3Rocy0+ZWx0czsKICAgICAgICAgICAgIGUucmVxdWVzdCA9IHI7CiAKLSAgICAgICAgICAgIGxlbiA9IDE7CisgICAgICAgICAgICAvKiAxIGJ5dGUgZm9yIHRlcm1pbmF0aW5nICdcMCcgYW5kIDQgYnl0ZXMgaXMgcHJlYWxsb2NhdGlvbiAqLworCisgICAgICAgICAgICBsZW4gPSAxICsgNDsKIAogICAgICAgICAgICAgd2hpbGUgKCoodWludHB0cl90ICopIGUuaXApIHsKICAgICAgICAgICAgICAgICBsY29kZSA9ICoobmd4X2h0dHBfc2NyaXB0X2xlbl9jb2RlX3B0ICopIGUuaXA7CkBAIC0xOTQsMTQgKzE5MiwyMSBAQAogICAgICAgICAgICAgY3R4LT5pbmRleC5sZW4gPSBsZW47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGVuID4gY3R4LT5hbGxvY2F0ZWQpIHsKLSAgICAgICAgICAgIGlmIChuZ3hfaHR0cF9pbmRleF9hbGxvYyhyLCBsZW4sIGN0eCwgY2xjZikgIT0gTkdYX09LKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICAgICAgaWYgKGxlbiA+IGN0eC0+cGF0aC5sZW4pIHsKKworICAgICAgICAgICAgbGFzdCA9IG5neF9odHRwX21hcF91cmlfdG9fcGF0aChyLCAmY3R4LT5wYXRoLCBsZW4pOworICAgICAgICAgICAgaWYgKGxhc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN0eC0+aW5kZXguZGF0YSA9IGxhc3Q7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaW5kZXhbaV0udmFsdWVzID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5neF9tZW1jcHkoY3R4LT5pbmRleC5kYXRhLCBpbmRleFtpXS5uYW1lLmRhdGEsIGN0eC0+aW5kZXgubGVuKTsKKworICAgICAgICAgICAgLyogaW5kZXhbaV0ubmFtZS5sZW4gaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nICdcMCcgKi8KKworICAgICAgICAgICAgbmd4X21lbWNweShjdHgtPmluZGV4LmRhdGEsIGluZGV4W2ldLm5hbWUuZGF0YSwgaW5kZXhbaV0ubmFtZS5sZW4pOwogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlLmlwID0gaW5kZXhbaV0udmFsdWVzLT5lbHRzOwpAQCAtMjIwLDEyICsyMjUsMTAgQEAKICAgICAgICAgICAgICplLnBvcysrID0gJ1wwJzsKICAgICAgICAgfQogCi0gICAgICAgIG5hbWUgPSBjdHgtPnBhdGg7Ci0KICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJvcGVuIGluZGV4IFwiJXNcIiIsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAib3BlbiBpbmRleCBcIiVzXCIiLCBjdHgtPnBhdGguZGF0YSk7CiAKLSAgICAgICAgZmQgPSBuZ3hfb3Blbl9maWxlKG5hbWUsIE5HWF9GSUxFX1JET05MWSwgTkdYX0ZJTEVfT1BFTik7CisgICAgICAgIGZkID0gbmd4X29wZW5fZmlsZShjdHgtPnBhdGguZGF0YSwgTkdYX0ZJTEVfUkRPTkxZLCBOR1hfRklMRV9PUEVOKTsKIAogICAgICAgICBpZiAoZmQgPT0gKG5neF9mZF90KSBOR1hfQUdBSU4pIHsKICAgICAgICAgICAgIGN0eC0+Y3VycmVudCA9IGk7CkBAIC0yMzYsNyArMjM5LDcgQEAKICAgICAgICAgICAgIGVyciA9IG5neF9lcnJubzsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBsb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBjdHgtPnBhdGguZGF0YSk7CiAKICAgICAgICAgICAgIGlmIChlcnIgPT0gTkdYX0VOT1RESVIpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfaW5kZXhfZXJyb3IociwgY3R4LCBlcnIpOwpAQCAtMjYwLDcgKzI2Myw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIGxvZywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBjdHgtPnBhdGguZGF0YSk7CiAKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgICAgIH0KQEAgLTI3MiwyMiArMjc1LDMxIEBACiAgICAgICAgIH0KIAogICAgICAgICBjbG4tPmZkID0gZmQ7Ci0gICAgICAgIGNsbi0+bmFtZSA9IG5hbWU7CisgICAgICAgIGNsbi0+bmFtZSA9IGN0eC0+cGF0aC5kYXRhOwogICAgICAgICBjbG4tPmxvZyA9IHItPnBvb2wtPmxvZzsKIAogICAgICAgICBpZiAobmd4X3Bvb2xfY2xlYW51cF9hZGQoci0+cG9vbCwgbmd4X3Bvb2xfY2xlYW51cF9maWxlLCBjbG4pID09IE5VTEwpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgICAgIH0KIAorICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKLSAgICAgICAgaWYgKGNsY2YtPmFsaWFzKSB7Ci0gICAgICAgICAgICBuYW1lID0gbmd4X2NweW1lbShjdHgtPnVyaS5kYXRhLCByLT51cmkuZGF0YSwgci0+dXJpLmxlbik7Ci0gICAgICAgICAgICBuZ3hfbWVtY3B5KG5hbWUsIGN0eC0+aW5kZXguZGF0YSwgY3R4LT5pbmRleC5sZW4gLSAxKTsKKyAgICAgICAgdXJpLmxlbiA9IHItPnVyaS5sZW4gKyBjdHgtPmluZGV4LmxlbiAtIDE7CisKKyAgICAgICAgaWYgKCFjbGNmLT5hbGlhcykgeworICAgICAgICAgICAgdXJpLmRhdGEgPSBjdHgtPnBhdGguZGF0YSArIGNsY2YtPnJvb3QubGVuOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1cmkuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgdXJpLmxlbik7CisgICAgICAgICAgICBpZiAodXJpLmRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxhc3QgPSBuZ3hfY3B5bWVtKHVyaS5kYXRhLCByLT51cmkuZGF0YSwgci0+dXJpLmxlbik7CisgICAgICAgICAgICBuZ3hfbWVtY3B5KGxhc3QsIGN0eC0+aW5kZXguZGF0YSwgY3R4LT5pbmRleC5sZW4gLSAxKTsKICAgICAgICAgfQogCi0gICAgICAgIGN0eC0+dXJpLmxlbiA9IHItPnVyaS5sZW4gKyBjdHgtPmluZGV4LmxlbiAtIDE7Ci0KLSAgICAgICAgcmV0dXJuIG5neF9odHRwX2ludGVybmFsX3JlZGlyZWN0KHIsICZjdHgtPnVyaSwgJnItPmFyZ3MpOworICAgICAgICByZXR1cm4gbmd4X2h0dHBfaW50ZXJuYWxfcmVkaXJlY3QociwgJnVyaSwgJnItPmFyZ3MpOwogICAgIH0KIAogICAgIHJldHVybiBOR1hfREVDTElORUQ7CkBAIC0yOTUsNDUgKzMwNyw2IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfaW5kZXhfYWxsb2Mobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBzaXplX3Qgc2l6ZSwKLSAgICBuZ3hfaHR0cF9pbmRleF9jdHhfdCAqY3R4LCBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgKmNsY2YpCi17Ci0gICAgY3R4LT5hbGxvY2F0ZWQgPSBzaXplOwotCi0gICAgaWYgKCFjbGNmLT5hbGlhcykgewotICAgICAgICBjdHgtPnBhdGggPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGNsY2YtPnJvb3QubGVuICsgci0+dXJpLmxlbiArIHNpemUpOwotICAgICAgICBpZiAoY3R4LT5wYXRoID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBjdHgtPnVyaS5kYXRhID0gbmd4X2NweW1lbShjdHgtPnBhdGgsIGNsY2YtPnJvb3QuZGF0YSwgY2xjZi0+cm9vdC5sZW4pOwotCi0gICAgICAgIGN0eC0+aW5kZXguZGF0YSA9IG5neF9jcHltZW0oY3R4LT51cmkuZGF0YSwgci0+dXJpLmRhdGEsIHItPnVyaS5sZW4pOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY3R4LT5wYXRoID0gbmd4X3BhbGxvYyhyLT5wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjbGNmLT5yb290LmxlbiArIHItPnVyaS5sZW4gLSBjbGNmLT5uYW1lLmxlbiArIHNpemUpOwotICAgICAgICBpZiAoY3R4LT5wYXRoID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBjdHgtPnVyaS5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCByLT51cmkubGVuICsgc2l6ZSk7Ci0gICAgICAgIGlmIChjdHgtPnVyaS5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbWVtY3B5KGN0eC0+cGF0aCwgY2xjZi0+cm9vdC5kYXRhLCBjbGNmLT5yb290Lmxlbik7Ci0KLSAgICAgICAgY3R4LT5pbmRleC5kYXRhID0gbmd4X2NweW1lbShjdHgtPnBhdGggKyBjbGNmLT5yb290LmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkuZGF0YSArIGNsY2YtPm5hbWUubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSBjbGNmLT5uYW1lLmxlbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5HWF9PSzsKLX0KLQotCi1zdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9pbmRleF90ZXN0X2RpcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX2luZGV4X2N0eF90ICpjdHgpCiB7CiAgICAgbmd4X2Vycl90ICAgICAgICBlcnI7CkBAIC0zNDIsOSArMzE1LDkgQEAKICAgICAqKGN0eC0+aW5kZXguZGF0YSAtIDEpID0gJ1wwJzsKIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIGluZGV4IGNoZWNrIGRpcjogXCIlc1wiIiwgY3R4LT5wYXRoKTsKKyAgICAgICAgICAgICAgICAgICAiaHR0cCBpbmRleCBjaGVjayBkaXI6IFwiJXNcIiIsIGN0eC0+cGF0aC5kYXRhKTsKIAotICAgIGlmIChuZ3hfZmlsZV9pbmZvKGN0eC0+cGF0aCwgJmZpKSA9PSAtMSkgeworICAgIGlmIChuZ3hfZmlsZV9pbmZvKGN0eC0+cGF0aC5kYXRhLCAmZmkpID09IC0xKSB7CiAKICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwogCkBAIC0zNTQsNyArMzI3LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCByLT5jb25uZWN0aW9uLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICBuZ3hfZmlsZV9pbmZvX24gIiBcIiVzXCIgZmFpbGVkIiwgY3R4LT5wYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfZmlsZV9pbmZvX24gIiBcIiVzXCIgZmFpbGVkIiwgY3R4LT5wYXRoLmRhdGEpOwogCiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgfQpAQCAtMzY2LDcgKzMzOSw3IEBACiAgICAgfQogCiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAiXCIlc1wiIGlzIG5vdCBhIGRpcmVjdG9yeSIsIGN0eC0+cGF0aCk7CisgICAgICAgICAgICAgICAgICAiXCIlc1wiIGlzIG5vdCBhIGRpcmVjdG9yeSIsIGN0eC0+cGF0aC5kYXRhKTsKIAogICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiB9CkBAIC0zNzgsMTMgKzM1MSwxMyBAQAogewogICAgIGlmIChlcnIgPT0gTkdYX0VBQ0NFUykgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAiXCIlc1wiIGlzIGZvcmJpZGRlbiIsIGN0eC0+cGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBpcyBmb3JiaWRkZW4iLCBjdHgtPnBhdGguZGF0YSk7CiAgICAgCiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9GT1JCSURERU47CiAgICAgfQogCiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAiXCIlc1wiIGlzIG5vdCBmb3VuZCIsIGN0eC0+cGF0aCk7CisgICAgICAgICAgICAgICAgICAiXCIlc1wiIGlzIG5vdCBmb3VuZCIsIGN0eC0+cGF0aC5kYXRhKTsKIAogICAgIHJldHVybiBOR1hfSFRUUF9OT1RfRk9VTkQ7CiB9CkBAIC00OTQsMTQgKzQ2NywxNSBAQAogICAgICAgICBuID0gbmd4X2h0dHBfc2NyaXB0X3ZhcmlhYmxlc19jb3VudCgmdmFsdWVbaV0pOwogCiAgICAgICAgIGlmIChuID09IDApIHsKLSAgICAgICAgICAgIGluZGV4LT5uYW1lLmxlbisrOwotCiAgICAgICAgICAgICBpZiAoaWxjZi0+bWF4X2luZGV4X2xlbiAhPSAwCiAgICAgICAgICAgICAgICAgJiYgaWxjZi0+bWF4X2luZGV4X2xlbiA8IGluZGV4LT5uYW1lLmxlbikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbGNmLT5tYXhfaW5kZXhfbGVuID0gaW5kZXgtPm5hbWUubGVuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvKiBpbmNsdWRlIHRoZSB0ZXJtaW5hdGluZyAnXDAnIHRvIHRoZSBsZW5ndGggdG8gdXNlIG5neF9tZW1jcHkoKSAqLworICAgICAgICAgICAgaW5kZXgtPm5hbWUubGVuKys7CisKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMKaW5kZXggYWZkYmY3OC4uYzVkNWFmOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMKQEAgLTcyLDE4ICs3MiwxOCBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfc3RhdGljX2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewotICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAqbGFzdDsKLSAgICBuZ3hfZmRfdCAgICAgICAgICAgICAgICAgICAgIGZkOwotICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBsZXZlbDsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgIG5hbWUsIGxvY2F0aW9uOwotICAgIG5neF9lcnJfdCAgICAgICAgICAgICAgICAgICAgZXJyOwotICAgIG5neF9sb2dfdCAgICAgICAgICAgICAgICAgICAqbG9nOwotICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgICAqYjsKLSAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgIG91dDsKLSAgICBuZ3hfZmlsZV9pbmZvX3QgICAgICAgICAgICAgIGZpOwotICAgIG5neF9wb29sX2NsZWFudXBfZmlsZV90ICAgICAqY2xuOwotICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICAqY2xjZjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICpsYXN0LCAqbG9jYXRpb247CisgICAgbmd4X2ZkX3QgICAgICAgICAgICAgICAgICAgZmQ7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgcmM7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgbGV2ZWw7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgcGF0aDsKKyAgICBuZ3hfZXJyX3QgICAgICAgICAgICAgICAgICBlcnI7CisgICAgbmd4X2xvZ190ICAgICAgICAgICAgICAgICAqbG9nOworICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgKmI7CisgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgICAgb3V0OworICAgIG5neF9maWxlX2luZm9fdCAgICAgICAgICAgIGZpOworICAgIG5neF9wb29sX2NsZWFudXBfZmlsZV90ICAgKmNsbjsKKyAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOwogCiAgICAgaWYgKHItPnVyaS5kYXRhW3ItPnVyaS5sZW4gLSAxXSA9PSAnLycpIHsKICAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKQEAgLTEwNiw5OSArMTA2LDIwIEBACiAKICAgICBsb2cgPSByLT5jb25uZWN0aW9uLT5sb2c7CiAKLSAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7Ci0KICAgICAvKgotICAgICAqIG1ha2UgYSBmaWxlIG5hbWUsIHJlc2VydmUgMiBieXRlcyBmb3IgYSB0cmFpbGluZyAnLycKLSAgICAgKiBpbiBhIHBvc3NpYmxlIHJlZGlyZWN0IGFuZCBmb3IgdGhlIGxhc3QgJ1wwJworICAgICAqIG5neF9odHRwX21hcF91cmlfdG9fcGF0aCgpIGFsbG9jYXRlcyBtZW1vcnkgZm9yIHRlcm1pbmF0aW5nICdcMCcKKyAgICAgKiBzbyB3ZSBkbyBub3QgbmVlZCB0byByZXNlcnZlIG1lbW9yeSBmb3IgJy8nIGZvciBwb3NzaWJsZSByZWRpcmVjdAogICAgICAqLwogCi0gICAgaWYgKCFjbGNmLT5hbGlhcykgewotICAgICAgICBuYW1lLmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGNsY2YtPnJvb3QubGVuICsgci0+dXJpLmxlbiArIDIpOwotICAgICAgICBpZiAobmFtZS5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBsb2NhdGlvbi5kYXRhID0gbmd4X2NweW1lbShuYW1lLmRhdGEsIGNsY2YtPnJvb3QuZGF0YSwgY2xjZi0+cm9vdC5sZW4pOwotICAgICAgICBsYXN0ID0gbmd4X2NweXN0cm4obG9jYXRpb24uZGF0YSwgci0+dXJpLmRhdGEsIHItPnVyaS5sZW4gKyAxKTsKLQotICAgICAgICBuYW1lLmxlbiA9IGxhc3QgLSBuYW1lLmRhdGE7Ci0gICAgICAgIGxvY2F0aW9uLmxlbiA9IGxhc3QgLSBsb2NhdGlvbi5kYXRhICsgMTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5hbWUuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgY2xjZi0+cm9vdC5sZW4gKyByLT51cmkubGVuICsgMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY2xjZi0+bmFtZS5sZW4pOwotICAgICAgICBpZiAobmFtZS5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBsYXN0ID0gbmd4X2NweW1lbShuYW1lLmRhdGEsIGNsY2YtPnJvb3QuZGF0YSwgY2xjZi0+cm9vdC5sZW4pOwotICAgICAgICBsYXN0ID0gbmd4X2NweXN0cm4obGFzdCwgci0+dXJpLmRhdGEgKyBjbGNmLT5uYW1lLmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gKyAxIC0gY2xjZi0+bmFtZS5sZW4pOwotCi0gICAgICAgIG5hbWUubGVuID0gbGFzdCAtIG5hbWUuZGF0YTsKLQotICAgICAgICBsb2NhdGlvbi5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCByLT51cmkubGVuICsgMik7Ci0gICAgICAgIGlmIChsb2NhdGlvbi5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBsYXN0ID0gbmd4X2NweXN0cm4obG9jYXRpb24uZGF0YSwgci0+dXJpLmRhdGEsIHItPnVyaS5sZW4gKyAxKTsKLQotICAgICAgICBsb2NhdGlvbi5sZW4gPSBsYXN0IC0gbG9jYXRpb24uZGF0YSArIDE7CisgICAgbGFzdCA9IG5neF9odHRwX21hcF91cmlfdG9fcGF0aChyLCAmcGF0aCwgMCk7CisgICAgaWYgKGxhc3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIGZpbGVuYW1lOiBcIiVzXCIiLCBuYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICJodHRwIGZpbGVuYW1lOiBcIiVzXCIiLCBwYXRoLmRhdGEpOwogCi0gICAgLyogb3BlbiBmaWxlICovCi0KLSNpZiAoTkdYX1dJTjlYKQotCi0gICAgaWYgKG5neF93aW4zMl92ZXJzaW9uIDwgTkdYX1dJTl9OVCkgewotCi0gICAgICAgIC8qCi0gICAgICAgICAqIHRoZXJlIGlzIG5vIHdheSB0byBvcGVuIGEgZmlsZSBvciBhIGRpcmVjdG9yeSBpbiBXaW45WCB3aXRoCi0gICAgICAgICAqIG9uZSBzeXNjYWxsIGJlY2F1c2UgV2luOVggaGFzIG5vIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTIGZsYWcKLSAgICAgICAgICogc28gd2UgbmVlZCB0byBjaGVjayBpdHMgdHlwZSBiZWZvcmUgdGhlIG9wZW5pbmcKLSAgICAgICAgICovCi0KLSAgICAgICAgaWYgKG5neF9maWxlX2luZm8obmFtZS5kYXRhLCAmZmkpID09IE5HWF9GSUxFX0VSUk9SKSB7Ci0gICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCBsb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ZpbGVfaW5mb19uICIgXCIlc1wiIGZhaWxlZCIsIG5hbWUuZGF0YSk7Ci0KLSAgICAgICAgICAgIGlmIChlcnIgPT0gTkdYX0VOT0VOVCB8fCBlcnIgPT0gTkdYX0VOT1RESVIpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfTk9UX0ZPVU5EOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGVyciA9PSBOR1hfRUFDQ0VTKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0ZPUkJJRERFTjsKLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5neF9pc19kaXIoJmZpKSkgewotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24gPSBuZ3hfaHR0cF9hZGRfaGVhZGVyKCZyLT5oZWFkZXJzX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9oZWFkZXJzX291dCk7Ci0gICAgICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQubG9jYXRpb24gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpsYXN0KysgPSAnLyc7Ci0gICAgICAgICAgICAqbGFzdCA9ICdcMCc7Ci0gICAgICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+dmFsdWUubGVuID0gbGFzdCAtIGxvY2F0aW9uOwotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPnZhbHVlLmRhdGEgPSBsb2NhdGlvbjsKLQotICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX01PVkVEX1BFUk1BTkVOVExZOwotICAgICAgICB9Ci0gICAgfQotCi0jZW5kaWYKLQotCi0gICAgZmQgPSBuZ3hfb3Blbl9maWxlKG5hbWUuZGF0YSwgTkdYX0ZJTEVfUkRPTkxZLCBOR1hfRklMRV9PUEVOKTsKKyAgICBmZCA9IG5neF9vcGVuX2ZpbGUocGF0aC5kYXRhLCBOR1hfRklMRV9SRE9OTFksIE5HWF9GSUxFX09QRU4pOwogCiAgICAgaWYgKGZkID09IE5HWF9JTlZBTElEX0ZJTEUpIHsKICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwpAQCAtMjE5LDkgKzE0MCwxMSBAQAogICAgICAgICAgICAgcmMgPSBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgICAgIH0KIAorICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisKICAgICAgICAgaWYgKHJjICE9IE5HWF9IVFRQX05PVF9GT1VORCB8fCBjbGNmLT5sb2dfbm90X2ZvdW5kKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKGxldmVsLCBsb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X29wZW5fZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsIG5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBwYXRoLmRhdGEpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHJjOwpAQCAtMjMxLDExICsxNTQsMTEgQEAKIAogICAgIGlmIChuZ3hfZmRfaW5mbyhmZCwgJmZpKSA9PSBOR1hfRklMRV9FUlJPUikgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgbmd4X2ZkX2luZm9fbiAiIFwiJXNcIiBmYWlsZWQiLCBuYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgIG5neF9mZF9pbmZvX24gIiBcIiVzXCIgZmFpbGVkIiwgcGF0aC5kYXRhKTsKIAogICAgICAgICBpZiAobmd4X2Nsb3NlX2ZpbGUoZmQpID09IE5HWF9GSUxFX0VSUk9SKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsIG5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgcGF0aC5kYXRhKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CkBAIC0yNDcsMjMgKzE3MCwzNyBAQAogCiAgICAgICAgIGlmIChuZ3hfY2xvc2VfZmlsZShmZCkgPT0gTkdYX0ZJTEVfRVJST1IpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgbmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBwYXRoLmRhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAgKmxhc3QrKyA9ICcvJzsKLSAgICAgICAgKmxhc3QgPSAnXDAnOwotCiAgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uID0gbmd4X3BhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X3RhYmxlX2VsdF90KSk7CiAgICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5sb2NhdGlvbiA9PSBOVUxMKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgICAgICB9CiAKKyAgICAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworCisgICAgICAgIGlmICghY2xjZi0+YWxpYXMpIHsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gcGF0aC5kYXRhICsgY2xjZi0+cm9vdC5sZW47CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvY2F0aW9uID0gbmd4X3BhbGxvYyhyLT5wb29sLCByLT51cmkubGVuICsgMSk7CisgICAgICAgICAgICBpZiAobG9jYXRpb24gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxhc3QgPSBuZ3hfY3B5bWVtKGxvY2F0aW9uLCByLT51cmkuZGF0YSwgci0+dXJpLmxlbik7CisgICAgICAgIH0KKworICAgICAgICAqbGFzdCA9ICcvJzsKKwogICAgICAgICAvKgogICAgICAgICAgKiB3ZSBkbyBub3QgbmVlZCB0byBzZXQgdGhlIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT5oYXNoIGFuZAogICAgICAgICAgKiByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+a2V5IGZpZWxkcwogICAgICAgICAgKi8KIAotICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+dmFsdWUgPSBsb2NhdGlvbjsKKyAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPnZhbHVlLmxlbiA9IHItPnVyaS5sZW4gKyAxOworICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+dmFsdWUuZGF0YSA9IGxvY2F0aW9uOwogCiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9NT1ZFRF9QRVJNQU5FTlRMWTsKICAgICB9CkBAIC0yNzIsMTEgKzIwOSwxMSBAQAogCiAgICAgaWYgKCFuZ3hfaXNfZmlsZSgmZmkpKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBsb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAiXCIlc1wiIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIsIG5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBpcyBub3QgYSByZWd1bGFyIGZpbGUiLCBwYXRoLmRhdGEpOwogCiAgICAgICAgIGlmIChuZ3hfY2xvc2VfZmlsZShmZCkgPT0gTkdYX0ZJTEVfRVJST1IpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgbmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBwYXRoLmRhdGEpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX05PVF9GT1VORDsKQEAgLTI5Miw3ICsyMjksNyBAQAogICAgIH0KIAogICAgIGNsbi0+ZmQgPSBmZDsKLSAgICBjbG4tPm5hbWUgPSBuYW1lLmRhdGE7CisgICAgY2xuLT5uYW1lID0gcGF0aC5kYXRhOwogICAgIGNsbi0+bG9nID0gci0+cG9vbC0+bG9nOwogCiAgICAgaWYgKG5neF9wb29sX2NsZWFudXBfYWRkKHItPnBvb2wsIG5neF9wb29sX2NsZWFudXBfZmlsZSwgY2xuKSA9PSBOVUxMKSB7CkBAIC0zNDksNyArMjg2LDcgQEAKICAgICBiLT5maWxlX2xhc3QgPSBuZ3hfZmlsZV9zaXplKCZmaSk7CiAKICAgICBiLT5maWxlLT5mZCA9IGZkOwotICAgIGItPmZpbGUtPm5hbWUgPSBuYW1lOworICAgIGItPmZpbGUtPm5hbWUgPSBwYXRoOwogICAgIGItPmZpbGUtPmxvZyA9IGxvZzsKIAogICAgIG91dC5idWYgPSBiOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKaW5kZXggMDY0M2E4Ny4uNGM2Y2ZjMCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCkBAIC05MTEsMzcgKzkxMSw2IEBACiAKIAogbmd4X2ludF90Ci1uZ3hfaHR0cF9zZW5kX2hlYWRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCi17Ci0gICAgaWYgKHItPmVycl9zdGF0dXMpIHsKLSAgICAgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzID0gci0+ZXJyX3N0YXR1czsKLSAgICAgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzX2xpbmUubGVuID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXIocik7Ci19Ci0KLQotbmd4X2ludF90Ci1uZ3hfaHR0cF9vdXRwdXRfZmlsdGVyKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2NoYWluX3QgKmluKQotewotICAgIG5neF9pbnRfdCAgcmM7Ci0KLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiaHR0cCBvdXRwdXQgZmlsdGVyIFwiJVZcIiIsICZyLT51cmkpOwotCi0gICAgcmMgPSBuZ3hfaHR0cF90b3BfYm9keV9maWx0ZXIociwgaW4pOwotCi0gICAgaWYgKHJjID09IE5HWF9FUlJPUikgewotICAgICAgICAvKiBOR1hfRVJST1IgbWF5IGJlIHJldHVybmVkIGJ5IGFueSBmaWx0ZXIgKi8KLSAgICAgICAgci0+Y29ubmVjdGlvbi0+Y2xvc2VkID0gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotbmd4X2ludF90CiBuZ3hfaHR0cF9zZXRfZXh0ZW4obmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewogICAgIG5neF9pbnRfdCAgaTsKQEAgLTk3Nyw2ICs5NDYsNjMgQEAKIAogCiBuZ3hfaW50X3QKK25neF9odHRwX3NlbmRfaGVhZGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKK3sKKyAgICBpZiAoci0+ZXJyX3N0YXR1cykgeworICAgICAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSByLT5lcnJfc3RhdHVzOworICAgICAgICByLT5oZWFkZXJzX291dC5zdGF0dXNfbGluZS5sZW4gPSAwOworICAgIH0KKworICAgIHJldHVybiBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlcihyKTsKK30KKworCituZ3hfaW50X3QKK25neF9odHRwX291dHB1dF9maWx0ZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfY2hhaW5fdCAqaW4pCit7CisgICAgbmd4X2ludF90ICByYzsKKworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIG91dHB1dCBmaWx0ZXIgXCIlVlwiIiwgJnItPnVyaSk7CisKKyAgICByYyA9IG5neF9odHRwX3RvcF9ib2R5X2ZpbHRlcihyLCBpbik7CisKKyAgICBpZiAocmMgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIC8qIE5HWF9FUlJPUiBtYXkgYmUgcmV0dXJuZWQgYnkgYW55IGZpbHRlciAqLworICAgICAgICByLT5jb25uZWN0aW9uLT5jbG9zZWQgPSAxOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworCit1X2NoYXIgKgorbmd4X2h0dHBfbWFwX3VyaV90b19wYXRoKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3N0cl90ICpwYXRoLAorICAgIHNpemVfdCByZXNlcnZlZCkKK3sKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICpsYXN0OworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgIGFsaWFzOworICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgKmNsY2Y7CisKKyAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisKKyAgICBhbGlhcyA9IGNsY2YtPmFsaWFzID8gY2xjZi0+bmFtZS5sZW4gOiAwOworCisgICAgcGF0aC0+bGVuID0gY2xjZi0+cm9vdC5sZW4gKyByLT51cmkubGVuIC0gYWxpYXMgKyAxICsgcmVzZXJ2ZWQ7CisKKyAgICBwYXRoLT5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCBwYXRoLT5sZW4pOworICAgIGlmIChwYXRoLT5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbGFzdCA9IG5neF9jcHltZW0ocGF0aC0+ZGF0YSwgY2xjZi0+cm9vdC5kYXRhLCBjbGNmLT5yb290Lmxlbik7CisgICAgbGFzdCA9IG5neF9jcHlzdHJuKGxhc3QsIHItPnVyaS5kYXRhICsgYWxpYXMsIHItPnVyaS5sZW4gLSBhbGlhcyArIDEpOworCisgICAgcmV0dXJuIGxhc3Q7Cit9CisKKworbmd4X2ludF90CiBuZ3hfaHR0cF9hdXRoX2Jhc2ljX3VzZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewogICAgIG5neF9zdHJfdCAgIGF1dGgsIGVuY29kZWQ7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAppbmRleCBkMTc1ZjJlLi40ZGU4MDA3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKQEAgLTI1Myw2ICsyNTMsOCBAQAogCiBuZ3hfaW50X3Qgbmd4X2h0dHBfc2V0X2NvbnRlbnRfdHlwZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogbmd4X2ludF90IG5neF9odHRwX3NldF9leHRlbihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwordV9jaGFyICpuZ3hfaHR0cF9tYXBfdXJpX3RvX3BhdGgobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfc3RyX3QgKm5hbWUsCisgICAgc2l6ZV90IHJlc2VydmVkKTsKIG5neF9pbnRfdCBuZ3hfaHR0cF9hdXRoX2Jhc2ljX3VzZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKIAogbmd4X2ludF90IG5neF9odHRwX3N1YnJlcXVlc3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyLApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IDcwNGQzNzMuLjE5YmMyMzkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTIyMzQsNyArMjIzNCw3IEBACiAgICAgcmV2ID0gYy0+cmVhZDsKICAgICByZXYtPmhhbmRsZXIgPSBuZ3hfaHR0cF9saW5nZXJpbmdfY2xvc2VfaGFuZGxlcjsKIAotICAgIHItPmxpbmdlcmluZ190aW1lID0gbmd4X3RpbWUoKSArIGNsY2YtPmxpbmdlcmluZ190aW1lIC8gMTAwMDsKKyAgICByLT5saW5nZXJpbmdfdGltZSA9IG5neF90aW1lKCkgKyAodGltZV90KSAoY2xjZi0+bGluZ2VyaW5nX3RpbWUgLyAxMDAwKTsKICAgICBuZ3hfYWRkX3RpbWVyKHJldiwgY2xjZi0+bGluZ2VyaW5nX3RpbWVvdXQpOwogCiAgICAgaWYgKG5neF9oYW5kbGVfcmVhZF9ldmVudChyZXYsIDApID09IE5HWF9FUlJPUikgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYwppbmRleCAyMTQwMTVmLi43YjBkMjMxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYwpAQCAtNjE5LDggKzYxOSw2IEBACiBzdGF0aWMgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqCiBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0X2ZpbGVuYW1lKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdWludHB0cl90IGRhdGEpCiB7Ci0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgKnA7Ci0gICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAgKmNsY2Y7CiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgKnZ2OwogCiAgICAgdnYgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90KSk7CkBAIC02MzAsMzAgKzYyOCwxNCBAQAogCiAgICAgdnYtPnZhbHVlID0gMDsKIAotICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKLQotICAgIGlmICghY2xjZi0+YWxpYXMpIHsKLSAgICAgICAgdnYtPnRleHQubGVuID0gY2xjZi0+cm9vdC5sZW4gKyByLT51cmkubGVuOwotICAgICAgICB2di0+dGV4dC5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCB2di0+dGV4dC5sZW4pOwotICAgICAgICBpZiAodnYtPnRleHQuZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIHAgPSBuZ3hfY3B5bWVtKHZ2LT50ZXh0LmRhdGEsIGNsY2YtPnJvb3QuZGF0YSwgY2xjZi0+cm9vdC5sZW4pOwotICAgICAgICBuZ3hfbWVtY3B5KHAsIHItPnVyaS5kYXRhLCByLT51cmkubGVuICsgMSk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICB2di0+dGV4dC5sZW4gPSBjbGNmLT5yb290LmxlbiArIHItPnVyaS5sZW4gKyAyIC0gY2xjZi0+bmFtZS5sZW47Ci0gICAgICAgIHZ2LT50ZXh0LmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHZ2LT50ZXh0Lmxlbik7Ci0gICAgICAgIGlmICh2di0+dGV4dC5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgcCA9IG5neF9jcHltZW0odnYtPnRleHQuZGF0YSwgY2xjZi0+cm9vdC5kYXRhLCBjbGNmLT5yb290Lmxlbik7Ci0gICAgICAgIG5neF9tZW1jcHkocCwgci0+dXJpLmRhdGEgKyBjbGNmLT5uYW1lLmxlbiwKLSAgICAgICAgICAgICAgICAgICByLT51cmkubGVuICsgMSAtIGNsY2YtPm5hbWUubGVuKTsKKyAgICBpZiAobmd4X2h0dHBfbWFwX3VyaV90b19wYXRoKHIsICZ2di0+dGV4dCwgMCkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICAvKiBuZ3hfaHR0cF9tYXBfdXJpX3RvX3BhdGgoKSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0ZXJtaW5hdGluZyAnXDAnICovCisKKyAgICB2di0+dGV4dC5sZW4tLTsKKwogICAgIHJldHVybiB2djsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYyBiL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMKaW5kZXggOTdhYTg3Ni4uZjIwZjQ0YyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jCkBAIC02Nyw2ICs2NywxMCBAQAogewogICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGxvZywgMCwgTkdJTlhfVkVSKTsKIAorI2lmZGVmIE5HWF9DT01QSUxFUgorICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGxvZywgMCwgImJ1aWx0IGJ5ICIgTkdYX0NPTVBJTEVSKTsKKyNlbmRpZgorCiAjaWYgKE5HWF9IQVZFX09TX1NQRUNJRklDX0lOSVQpCiAgICAgbmd4X29zX3NwZWNpZmljX3N0YXR1cyhsb2cpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYwppbmRleCA3ZjI1ZjkxLi4wN2E3YzY2IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jCisrKyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMKQEAgLTM1NCwxMSArMzU0LDYgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU0lHQUxSTToKLSAgICAgICAgICAgIGlmICghbmd4X3Rlcm1pbmF0ZSkgewotICAgICAgICAgICAgICAgIG5neF90aW1lciA9IDE7Ci0gICAgICAgICAgICAgICAgYWN0aW9uID0gIiwgc2h1dHRpbmcgZG93biBvbGQgd29ya2VyIHByb2Nlc3NlcyI7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgU0lHSU86CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwppbmRleCAwMzRiMDlmLi45NzQ3NWU2IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCisrKyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKQEAgLTMzLDcgKzMzLDYgQEAKIG5neF91aW50X3QgICAgbmd4X3RocmVhZGVkOwogCiBzaWdfYXRvbWljX3QgIG5neF9yZWFwOwotc2lnX2F0b21pY190ICBuZ3hfdGltZXI7CiBzaWdfYXRvbWljX3QgIG5neF9zaWdpbzsKIHNpZ19hdG9taWNfdCAgbmd4X3Rlcm1pbmF0ZTsKIHNpZ19hdG9taWNfdCAgbmd4X3F1aXQ7CkBAIC0xOTQsMTkgKzE5Myw2IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChuZ3hfdGltZXIpIHsKLSAgICAgICAgICAgIG5neF90aW1lciA9IDA7Ci0KLSAgICAgICAgICAgIGlmICghbmd4X25vYWNjZXB0aW5nKSB7Ci0gICAgICAgICAgICAgICAgbmd4X3N0YXJ0X3dvcmtlcl9wcm9jZXNzZXMoY3ljbGUsIGNjZi0+d29ya2VyX3Byb2Nlc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfUFJPQ0VTU19KVVNUX1JFU1BBV04pOwotICAgICAgICAgICAgICAgIG5neF9zdGFydF9nYXJiYWdlX2NvbGxlY3RvcihjeWNsZSwgTkdYX1BST0NFU1NfSlVTVF9SRVNQQVdOKTsKLSAgICAgICAgICAgICAgICBsaXZlID0gMTsKLSAgICAgICAgICAgICAgICBuZ3hfc2lnbmFsX3dvcmtlcl9wcm9jZXNzZXMoY3ljbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3NpZ25hbF92YWx1ZShOR1hfU0hVVERPV05fU0lHTkFMKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAobmd4X3JlY29uZmlndXJlKSB7CiAgICAgICAgICAgICBuZ3hfcmVjb25maWd1cmUgPSAwOwogCkBAIC0zMjAsOSArMzA2LDggQEAKIHN0YXRpYyB2b2lkCiBuZ3hfc3RhcnRfd29ya2VyX3Byb2Nlc3NlcyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9pbnRfdCBuLCBuZ3hfaW50X3QgdHlwZSkKIHsKLSAgICBuZ3hfaW50X3QgICAgICAgICBpOwotICAgIG5neF9jaGFubmVsX3QgICAgIGNoOwotICAgIHN0cnVjdCBpdGltZXJ2YWwgIGl0djsKKyAgICBuZ3hfaW50X3QgICAgICBpOworICAgIG5neF9jaGFubmVsX3QgIGNoOwogCiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgMCwgInN0YXJ0IHdvcmtlciBwcm9jZXNzZXMiKTsKIApAQCAtMzU3LDIyICszNDIsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoLCBzaXplb2Yobmd4X2NoYW5uZWxfdCksIGN5Y2xlLT5sb2cpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgLyoKLSAgICAgKiB3ZSBoYXZlIHRvIGxpbWl0IHRoZSBtYXhpbXVtIGxpZmUgdGltZSBvZiB0aGUgd29ya2VyIHByb2Nlc3NlcwotICAgICAqIGJ5IDEwIGRheXMgYmVjYXVzZSBvdXIgbWlsbGlzZWNvbmQgZXZlbnQgdGltZXIgaXMgbGltaXRlZAotICAgICAqIGJ5IDI0IGRheXMgb24gMzItYml0IHBsYXRmb3JtcwotICAgICAqLwotCi0gICAgaXR2Lml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0gICAgaXR2Lml0X2ludGVydmFsLnR2X3VzZWMgPSAwOwotICAgIGl0di5pdF92YWx1ZS50dl9zZWMgPSAxMCAqIDI0ICogNjAgKiA2MDsKLSAgICBpdHYuaXRfdmFsdWUudHZfdXNlYyA9IDA7Ci0KLSAgICBpZiAoc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmaXR2LCBOVUxMKSA9PSAtMSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAic2V0aXRpbWVyKCkgZmFpbGVkIik7Ci0gICAgfQogfQogCiAKQEAgLTgxMSwxNyArNzgwLDkgQEAKICAgICBuZ3hfaW50X3QgICAgICAgICAgbjsKICAgICBuZ3hfdWludF90ICAgICAgICAgaTsKICAgICBzdHJ1Y3QgcmxpbWl0ICAgICAgcmxtdDsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgICAgdHY7CiAgICAgbmd4X2NvcmVfY29uZl90ICAgKmNjZjsKICAgICBuZ3hfbGlzdGVuaW5nX3QgICAqbHM7CiAKLSAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7Ci0KLSAgICBuZ3hfc3RhcnRfbXNlYyA9IChuZ3hfZXBvY2hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDA7Ci0gICAgbmd4X29sZF9lbGFwc2VkX21zZWMgPSAwOwotICAgIG5neF9lbGFwc2VkX21zZWMgPSAwOwotCi0KICAgICBuZ3hfcHJvY2VzcyA9IE5HWF9QUk9DRVNTX1dPUktFUjsKIAogICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmggYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5oCmluZGV4IDdlMjJkYTIuLjM0OWE5MDIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuaApAQCAtMzcsNyArMzcsNiBAQAogZXh0ZXJuIG5neF91aW50X3QgICAgICBuZ3hfZXhpdGluZzsKIAogZXh0ZXJuIHNpZ19hdG9taWNfdCAgICBuZ3hfcmVhcDsKLWV4dGVybiBzaWdfYXRvbWljX3QgICAgbmd4X3RpbWVyOwogZXh0ZXJuIHNpZ19hdG9taWNfdCAgICBuZ3hfc2lnaW87CiBleHRlcm4gc2lnX2F0b21pY190ICAgIG5neF9xdWl0OwogZXh0ZXJuIHNpZ19hdG9taWNfdCAgICBuZ3hfZGVidWdfcXVpdDsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF90aW1lLmggYi9zcmMvb3MvdW5peC9uZ3hfdGltZS5oCmluZGV4IGQzZDE3NmYuLjYzYTBhZDkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF90aW1lLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3RpbWUuaApAQCAtMTIsMzMgKzEyLDMxIEBACiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KIAogCi10eXBlZGVmIHVpbnQ2NF90ICAgICAgIG5neF9lcG9jaF9tc2VjX3Q7Cit0eXBlZGVmIG5neF9yYnRyZWVfa2V5X3QgIG5neF9tc2VjX3Q7CiAKLXR5cGVkZWYgbmd4X2ludF90ICAgICAgbmd4X21zZWNfdDsKK3R5cGVkZWYgc3RydWN0IHRtICAgICAgICAgbmd4X3RtX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHRtICAgICAgbmd4X3RtX3Q7CisjZGVmaW5lIG5neF90bV9zZWMgICAgICAgIHRtX3NlYworI2RlZmluZSBuZ3hfdG1fbWluICAgICAgICB0bV9taW4KKyNkZWZpbmUgbmd4X3RtX2hvdXIgICAgICAgdG1faG91cgorI2RlZmluZSBuZ3hfdG1fbWRheSAgICAgICB0bV9tZGF5CisjZGVmaW5lIG5neF90bV9tb24gICAgICAgIHRtX21vbgorI2RlZmluZSBuZ3hfdG1feWVhciAgICAgICB0bV95ZWFyCisjZGVmaW5lIG5neF90bV93ZGF5ICAgICAgIHRtX3dkYXkKKyNkZWZpbmUgbmd4X3RtX2lzZHN0ICAgICAgdG1faXNkc3QKIAotI2RlZmluZSBuZ3hfdG1fc2VjICAgICB0bV9zZWMKLSNkZWZpbmUgbmd4X3RtX21pbiAgICAgdG1fbWluCi0jZGVmaW5lIG5neF90bV9ob3VyICAgIHRtX2hvdXIKLSNkZWZpbmUgbmd4X3RtX21kYXkgICAgdG1fbWRheQotI2RlZmluZSBuZ3hfdG1fbW9uICAgICB0bV9tb24KLSNkZWZpbmUgbmd4X3RtX3llYXIgICAgdG1feWVhcgotI2RlZmluZSBuZ3hfdG1fd2RheSAgICB0bV93ZGF5Ci0jZGVmaW5lIG5neF90bV9pc2RzdCAgIHRtX2lzZHN0Ci0KLSNkZWZpbmUgbmd4X3RtX3NlY190ICAgaW50Ci0jZGVmaW5lIG5neF90bV9taW5fdCAgIGludAotI2RlZmluZSBuZ3hfdG1faG91cl90ICBpbnQKLSNkZWZpbmUgbmd4X3RtX21kYXlfdCAgaW50Ci0jZGVmaW5lIG5neF90bV9tb25fdCAgIGludAotI2RlZmluZSBuZ3hfdG1feWVhcl90ICBpbnQKLSNkZWZpbmUgbmd4X3RtX3dkYXlfdCAgaW50CisjZGVmaW5lIG5neF90bV9zZWNfdCAgICAgIGludAorI2RlZmluZSBuZ3hfdG1fbWluX3QgICAgICBpbnQKKyNkZWZpbmUgbmd4X3RtX2hvdXJfdCAgICAgaW50CisjZGVmaW5lIG5neF90bV9tZGF5X3QgICAgIGludAorI2RlZmluZSBuZ3hfdG1fbW9uX3QgICAgICBpbnQKKyNkZWZpbmUgbmd4X3RtX3llYXJfdCAgICAgaW50CisjZGVmaW5lIG5neF90bV93ZGF5X3QgICAgIGludAogCiAKICNpZiAoTkdYX0hBVkVfR01UT0ZGKQotI2RlZmluZSBuZ3hfdG1fZ210b2ZmICB0bV9nbXRvZmYKLSNkZWZpbmUgbmd4X3RtX3pvbmUgICAgdG1fem9uZQorI2RlZmluZSBuZ3hfdG1fZ210b2ZmICAgICB0bV9nbXRvZmYKKyNkZWZpbmUgbmd4X3RtX3pvbmUgICAgICAgdG1fem9uZQogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF90aW1lLmggYi9zcmMvb3Mvd2luMzIvbmd4X3RpbWUuaAppbmRleCBjYzkwYzQ2Li4zYWM0MGI0IDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X3RpbWUuaAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X3RpbWUuaApAQCAtMTIsMzIgKzEyLDI5IEBACiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KIAogCi10eXBlZGVmIHVpbnQ2NF90ICAgICAgIG5neF9lcG9jaF9tc2VjX3Q7Cit0eXBlZGVmIG5neF9yYnRyZWVfa2V5X3QgIG5neF9tc2VjX3Q7CiAKLXR5cGVkZWYgbmd4X2ludF90ICAgICAgbmd4X21zZWNfdDsKK3R5cGVkZWYgU1lTVEVNVElNRSAgICAgICAgbmd4X3RtX3Q7Cit0eXBlZGVmIEZJTEVUSU1FICAgICAgICAgIG5neF9tdGltZV90OworCisjZGVmaW5lIG5neF90bV9zZWMgICAgICAgIHdTZWNvbmQKKyNkZWZpbmUgbmd4X3RtX21pbiAgICAgICAgd01pbnV0ZQorI2RlZmluZSBuZ3hfdG1faG91ciAgICAgICB3SG91cgorI2RlZmluZSBuZ3hfdG1fbWRheSAgICAgICB3RGF5CisjZGVmaW5lIG5neF90bV9tb24gICAgICAgIHdNb250aAorI2RlZmluZSBuZ3hfdG1feWVhciAgICAgICB3WWVhcgorI2RlZmluZSBuZ3hfdG1fd2RheSAgICAgICB3RGF5T2ZXZWVrCisKKyNkZWZpbmUgbmd4X3RtX3NlY190ICAgICAgdV9zaG9ydAorI2RlZmluZSBuZ3hfdG1fbWluX3QgICAgICB1X3Nob3J0CisjZGVmaW5lIG5neF90bV9ob3VyX3QgICAgIHVfc2hvcnQKKyNkZWZpbmUgbmd4X3RtX21kYXlfdCAgICAgdV9zaG9ydAorI2RlZmluZSBuZ3hfdG1fbW9uX3QgICAgICB1X3Nob3J0CisjZGVmaW5lIG5neF90bV95ZWFyX3QgICAgIHVfc2hvcnQKKyNkZWZpbmUgbmd4X3RtX3dkYXlfdCAgICAgdV9zaG9ydAogCiAKLXR5cGVkZWYgU1lTVEVNVElNRSAgICAgbmd4X3RtX3Q7Ci10eXBlZGVmIEZJTEVUSU1FICAgICAgIG5neF9tdGltZV90OwotCi0jZGVmaW5lIG5neF90bV9zZWMgICAgIHdTZWNvbmQKLSNkZWZpbmUgbmd4X3RtX21pbiAgICAgd01pbnV0ZQotI2RlZmluZSBuZ3hfdG1faG91ciAgICB3SG91cgotI2RlZmluZSBuZ3hfdG1fbWRheSAgICB3RGF5Ci0jZGVmaW5lIG5neF90bV9tb24gICAgIHdNb250aAotI2RlZmluZSBuZ3hfdG1feWVhciAgICB3WWVhcgotI2RlZmluZSBuZ3hfdG1fd2RheSAgICB3RGF5T2ZXZWVrCi0KLSNkZWZpbmUgbmd4X3RtX3NlY190ICAgdV9zaG9ydAotI2RlZmluZSBuZ3hfdG1fbWluX3QgICB1X3Nob3J0Ci0jZGVmaW5lIG5neF90bV9ob3VyX3QgIHVfc2hvcnQKLSNkZWZpbmUgbmd4X3RtX21kYXlfdCAgdV9zaG9ydAotI2RlZmluZSBuZ3hfdG1fbW9uX3QgICB1X3Nob3J0Ci0jZGVmaW5lIG5neF90bV95ZWFyX3QgIHVfc2hvcnQKLSNkZWZpbmUgbmd4X3RtX3dkYXlfdCAgdV9zaG9ydAotCi0KLSNkZWZpbmUgbmd4X21zbGVlcCAgICAgICBTbGVlcAorI2RlZmluZSBuZ3hfbXNsZWVwICAgICAgICBTbGVlcAogCiAjZGVmaW5lIE5HWF9IQVZFX0dFVFRJTUVaT05FICAxCiAK