ZGlmZiAtLWdpdCBhL2F1dG8vY2MvaWNjIGIvYXV0by9jYy9pY2MKaW5kZXggMWE0MTExYi4uODFiMDQyNyAxMDA2NDQKLS0tIGEvYXV0by9jYy9pY2MKKysrIGIvYXV0by9jYy9pY2MKQEAgLTExNCwxMSArMTE0LDE3IEBACiAgICAgICAgICMgY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gc2FtZS1zaXplZCBpbnRlZ3JhbCB0eXBlLAogICAgICAgICAjIHdhcm5pbmcgb24gb2Zmc2V0b2YoKQogICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXdkMTY4NCIKKyAgICAgICAgIyBmbG9hdGluZy1wb2ludCBlcXVhbGl0eSBhbmQgaW5lcXVhbGl0eSBjb21wYXJpc29ucyBhcmUgdW5yZWxpYWJsZSwKKyAgICAgICAgIyB3YXJuaW5nIG9uIFN2VFJVRSgpCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtd2QxNTcyIgogICAgIDs7CiAKICAgICA4LiopCiAgICAgICAgICMgImNjIiBjbG9iYmVyIGlnbm9yZWQsIHdhcm5pbmdzIGZvciBMaXVueCdzIGh0b25sKCkvaHRvbnMoKQogICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXdkMTQ2OSIKKyAgICAgICAgIyBmbG9hdGluZy1wb2ludCBlcXVhbGl0eSBhbmQgaW5lcXVhbGl0eSBjb21wYXJpc29ucyBhcmUgdW5yZWxpYWJsZSwKKyAgICAgICAgIyB3YXJuaW5nIG9uIFN2VFJVRSgpCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtd2QxNTcyIgogICAgIDs7CiAKICAgICAqKQpkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCBiMjViZGE5Li5iNzEzNDFkIDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDM4IEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjMuMTkiIGRhdGU9IjI4LjEyLjIwMDUiPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfZIHBhdGggySBhbGlhcyDQz8TExdLWydfBwNQg0MXSxc3Fzs7ZxS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAicGF0aCIgYW5kICJhbGlhcyIgZGlyZWN0aXZlcyBzdXBwb3J0IHRoZSB2YXJpYWJsZXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgor1MXQxdLYIMTJ0sXL1MnXwSB2YWxpZF9yZWZlcmVycyDP0NHU2CDV3snU2dfBxdQgVVJJLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbm93IHRoZSAidmFsaWRfcmVmZXJlcnMiIGRpcmVjdGl2ZSBhZ2FpbiBjaGVja3MgdGhlIFVSSSBwYXJ0LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8/bycLLySDXIM/C0sHCz9TLxSBTU0kuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpbiBTU0kgaGFuZGxpbmcuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4zLjE4IiBkYXRlPSIyNi4xMi4yMDA1Ij4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDUxMWE3YzkuLmExNWY1OGUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4xOCIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuMTkiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX09MRFBJRF9FWFQgICAgICIub2xkYmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2J1Zi5oIGIvc3JjL2NvcmUvbmd4X2J1Zi5oCmluZGV4IDYyNWRiMmEuLmVjNTVlZjMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9idWYuaAorKysgYi9zcmMvY29yZS9uZ3hfYnVmLmgKQEAgLTEwNSwxMCArMTA1LDE1IEBACiAKICNkZWZpbmUgbmd4X2J1Zl9pbl9tZW1vcnkoYikgICAgICAgIChiLT50ZW1wb3JhcnkgfHwgYi0+bWVtb3J5IHx8IGItPm1tYXApCiAjZGVmaW5lIG5neF9idWZfaW5fbWVtb3J5X29ubHkoYikgICAobmd4X2J1Zl9pbl9tZW1vcnkoYikgJiYgIWItPmluX2ZpbGUpCisKICNkZWZpbmUgbmd4X2J1Zl9zcGVjaWFsKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICgoYi0+Zmx1c2ggfHwgYi0+bGFzdF9idWYgfHwgYi0+c3luYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICYmICFuZ3hfYnVmX2luX21lbW9yeShiKSAmJiAhYi0+aW5fZmlsZSkKIAorI2RlZmluZSBuZ3hfYnVmX3N5bmNfb25seShiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKGItPnN5bmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgJiYgIW5neF9idWZfaW5fbWVtb3J5KGIpICYmICFiLT5pbl9maWxlICYmICFiLT5mbHVzaCAmJiAhYi0+bGFzdF9idWYpCisKICNkZWZpbmUgbmd4X2J1Zl9zaXplKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIChuZ3hfYnVmX2luX21lbW9yeShiKSA/IChvZmZfdCkgKGItPmxhc3QgLSBiLT5wb3MpOiAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGItPmZpbGVfbGFzdCAtIGItPmZpbGVfcG9zKSkKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9oYXNoLmMgYi9zcmMvY29yZS9uZ3hfaGFzaC5jCmluZGV4IGY0M2Q2NzUuLjBhMWQ2OWQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9oYXNoLmMKKysrIGIvc3JjL2NvcmUvbmd4X2hhc2guYwpAQCAtMTI5LDEzICsxMjksMTQgQEAKIAogCiAjZGVmaW5lIE5HWF9IQVNIX0VMVF9TSVpFKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBzaXplb2Yodm9pZCAqKSArIG5neF9hbGlnbigobmFtZSktPmtleS5sZW4gKyAxLCBzaXplb2Yodm9pZCAqKSkKKyAgICAoc2l6ZW9mKHZvaWQgKikgKyBuZ3hfYWxpZ24oKG5hbWUpLT5rZXkubGVuICsgMSwgc2l6ZW9mKHZvaWQgKikpKQogCiBuZ3hfaW50X3QKIG5neF9oYXNoX2luaXQobmd4X2hhc2hfaW5pdF90ICpoaW5pdCwgbmd4X2hhc2hfa2V5X3QgKm5hbWVzLCBuZ3hfdWludF90IG5lbHRzKQogewogICAgIHVfY2hhciAgICAgICAgICAqZWx0czsKLSAgICBzaXplX3QgICAgICAgICAgKnRlc3QsIGxlbjsKKyAgICBzaXplX3QgICAgICAgICAgIGxlbjsKKyAgICB1X3Nob3J0ICAgICAgICAgKnRlc3Q7CiAgICAgbmd4X3VpbnRfdCAgICAgICBpLCBuLCBrZXksIHNpemUsIHN0YXJ0LCBidWNrZXRfc2l6ZTsKICAgICBuZ3hfaGFzaF9lbHRfdCAgKmVsdCwgKipidWNrZXRzOwogCkBAIC0xNTEsMTQgKzE1MiwxNCBAQAogICAgICAgICBpZiAoaGluaXQtPmJ1Y2tldF9zaXplIDwgTkdYX0hBU0hfRUxUX1NJWkUoJm5hbWVzW25dKSArIHNpemVvZih2b2lkICopKQogICAgICAgICB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGhpbml0LT5wb29sLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYnVpbGQgdGhlICVzIGhhc2gsIHlvdSBzaG91bGQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGJ1aWxkIHRoZSAlcywgeW91IHNob3VsZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNyZWFzZSAlc19idWNrZXRfc2l6ZTogJWkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBoaW5pdC0+bmFtZSwgaGluaXQtPm5hbWUsIGhpbml0LT5idWNrZXRfc2l6ZSk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAgICAgfQogCi0gICAgdGVzdCA9IG5neF9hbGxvYyhoaW5pdC0+bWF4X3NpemUgKiBzaXplb2Yoc2l6ZV90KSwgaGluaXQtPnBvb2wtPmxvZyk7CisgICAgdGVzdCA9IG5neF9hbGxvYyhoaW5pdC0+bWF4X3NpemUgKiBzaXplb2YodV9zaG9ydCksIGhpbml0LT5wb29sLT5sb2cpOwogICAgIGlmICh0ZXN0ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CkBAIC0xNzAsNyArMTcxLDcgQEAKIAogICAgIGZvciAoc2l6ZSA9IHN0YXJ0OyBzaXplIDwgaGluaXQtPm1heF9zaXplOyBzaXplKyspIHsKIAotICAgICAgICBuZ3hfbWVtemVybyh0ZXN0LCBzaXplICogc2l6ZW9mKHNpemVfdCkpOworICAgICAgICBuZ3hfbWVtemVybyh0ZXN0LCBzaXplICogc2l6ZW9mKHVfc2hvcnQpKTsKIAogICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbmVsdHM7IG4rKykgewogICAgICAgICAgICAgaWYgKG5hbWVzW25dLmtleS5kYXRhID09IE5VTEwpIHsKQEAgLTE3OCw3ICsxNzksNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBrZXkgPSBuYW1lc1tuXS5rZXlfaGFzaCAlIHNpemU7Ci0gICAgICAgICAgICB0ZXN0W2tleV0gKz0gTkdYX0hBU0hfRUxUX1NJWkUoJm5hbWVzW25dKTsKKyAgICAgICAgICAgIHRlc3Rba2V5XSA9ICh1X3Nob3J0KSAodGVzdFtrZXldICsgTkdYX0hBU0hfRUxUX1NJWkUoJm5hbWVzW25dKSk7CiAKICNpZiAwCiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGhpbml0LT5wb29sLT5sb2csIDAsCkBAIC0xODYsNyArMTg3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwga2V5LCB0ZXN0W2tleV0sICZuYW1lc1tuXS5rZXkpOwogI2VuZGlmCiAKLSAgICAgICAgICAgIGlmICh0ZXN0W2tleV0gPiBidWNrZXRfc2l6ZSkgeworICAgICAgICAgICAgaWYgKHRlc3Rba2V5XSA+ICh1X3Nob3J0KSBidWNrZXRfc2l6ZSkgewogICAgICAgICAgICAgICAgIGdvdG8gbmV4dDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTk5LDcgKzIwMCw3IEBACiAgICAgfQogCiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBoaW5pdC0+cG9vbC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBidWlsZCB0aGUgJXMgaGFzaCwgeW91IHNob3VsZCBpbmNyZWFzZSAiCisgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGJ1aWxkIHRoZSAlcywgeW91IHNob3VsZCBpbmNyZWFzZSAiCiAgICAgICAgICAgICAgICAgICAiZWl0aGVyICVzX21heF9zaXplOiAlaSBvciAlc19idWNrZXRfc2l6ZTogJWkiLAogICAgICAgICAgICAgICAgICAgaGluaXQtPm5hbWUsIGhpbml0LT5uYW1lLCBoaW5pdC0+bWF4X3NpemUsCiAgICAgICAgICAgICAgICAgICBoaW5pdC0+bmFtZSwgaGluaXQtPmJ1Y2tldF9zaXplKTsKQEAgLTIyMCw3ICsyMjEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAga2V5ID0gbmFtZXNbbl0ua2V5X2hhc2ggJSBzaXplOwotICAgICAgICB0ZXN0W2tleV0gKz0gTkdYX0hBU0hfRUxUX1NJWkUoJm5hbWVzW25dKTsKKyAgICAgICAgdGVzdFtrZXldID0gKHVfc2hvcnQpICh0ZXN0W2tleV0gKyBOR1hfSEFTSF9FTFRfU0laRSgmbmFtZXNbbl0pKTsKICAgICB9CiAKICAgICBsZW4gPSAwOwpAQCAtMjMwLDcgKzIzMSw3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHRlc3RbaV0gPSBuZ3hfYWxpZ24odGVzdFtpXSwgbmd4X2NhY2hlbGluZV9zaXplKTsKKyAgICAgICAgdGVzdFtpXSA9ICh1X3Nob3J0KSAobmd4X2FsaWduKHRlc3RbaV0sIG5neF9jYWNoZWxpbmVfc2l6ZSkpOwogCiAgICAgICAgIGxlbiArPSB0ZXN0W2ldOwogICAgIH0KQEAgLTI5MSw3ICsyOTIsNyBAQAogICAgICAgICAgICAgZWx0LT5uYW1lW2ldID0gbmd4X3RvbG93ZXIobmFtZXNbbl0ua2V5LmRhdGFbaV0pOwogICAgICAgICB9CiAKLSAgICAgICAgdGVzdFtrZXldICs9IE5HWF9IQVNIX0VMVF9TSVpFKCZuYW1lc1tuXSk7CisgICAgICAgIHRlc3Rba2V5XSA9ICh1X3Nob3J0KSAodGVzdFtrZXldICsgTkdYX0hBU0hfRUxUX1NJWkUoJm5hbWVzW25dKSk7CiAgICAgfQogCiAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfbW9kdWxlLmMKaW5kZXggZTZlNDVhMS4uNGVmMjkxMCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X21vZHVsZS5jCkBAIC0yOTEsNyArMjkxLDcgQEAKICAgICAgICAgdXJpLmxlbiA9IHItPnVyaS5sZW4gKyBjdHgtPmluZGV4LmxlbiAtIDE7CiAKICAgICAgICAgaWYgKCFjbGNmLT5hbGlhcykgewotICAgICAgICAgICAgdXJpLmRhdGEgPSBjdHgtPnBhdGguZGF0YSArIGNsY2YtPnJvb3QubGVuOworICAgICAgICAgICAgdXJpLmRhdGEgPSBjdHgtPnBhdGguZGF0YSArIHItPnJvb3RfbGVuZ3RoOwogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB1cmkuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgdXJpLmxlbik7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlZmVyZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlZmVyZXJfbW9kdWxlLmMKaW5kZXggNjIyZjI1Ny4uZDViYjhhYSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWZlcmVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmVmZXJlcl9tb2R1bGUuYwpAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxuZ3hfaHR0cC5oPgogCiAKKyNkZWZpbmUgTkdYX0hUVFBfUkVGRVJFUl9OT19VUklfUEFSVCAgKCh2b2lkICopIDQpCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBuZ3hfaGFzaF90ICAgICAgICAgICAgICAgaGFzaDsKICAgICBuZ3hfaGFzaF93aWxkY2FyZF90ICAgICAqZG5zX3dpbGRjYXJkczsKQEAgLTI2LDcgKzI4LDcgQEAKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF92YWxpZF9yZWZlcmVycyhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLAogICAgIHZvaWQgKmNvbmYpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX2FkZF9yZWZlcmVyKG5neF9jb25mX3QgKmNmLCBuZ3hfaGFzaF9rZXlzX2FycmF5c190ICprZXlzLAotICAgIG5neF9zdHJfdCAqdmFsdWUpOworICAgIG5neF9zdHJfdCAqdmFsdWUsIG5neF9zdHJfdCAqdXJpKTsKIHN0YXRpYyBpbnQgbmd4X2xpYmNfY2RlY2wgbmd4X2h0dHBfY21wX3JlZmVyZXJfd2lsZGNhcmRzKGNvbnN0IHZvaWQgKm9uZSwKICAgICBjb25zdCB2b2lkICp0d28pOwogCkBAIC03OSw5ICs4MSwxMiBAQAogbmd4X2h0dHBfcmVmZXJlcl92YXJpYWJsZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsCiAgICAgIHVpbnRwdHJfdCBkYXRhKQogewotICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAqcCwgKnJlZjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgKnAsICpyZWYsICpsYXN0OwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgbGVuOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAqdXJpOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgaSwga2V5OwogICAgIG5neF9odHRwX3JlZmVyZXJfY29uZl90ICAqcmxjZjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgIGJ1ZlsyNTZdOwogCiAgICAgcmxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfcmVmZXJlcl9tb2R1bGUpOwogCkBAIC04OSwxOSArOTQsMTUgQEAKICAgICAgICAgJiYgcmxjZi0+ZG5zX3dpbGRjYXJkcyA9PSBOVUxMCiAgICAgICAgICYmIHJsY2YtPmRuc193aWxkY2FyZHMtPmhhc2guYnVja2V0cyA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgKnYgPSBuZ3hfaHR0cF92YXJpYWJsZV9udWxsX3ZhbHVlOwotICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICBnb3RvIHZhbGlkOwogICAgIH0KIAogICAgIGlmIChyLT5oZWFkZXJzX2luLnJlZmVyZXIgPT0gTlVMTCkgewogICAgICAgICBpZiAocmxjZi0+bm9fcmVmZXJlcikgewotICAgICAgICAgICAgKnYgPSBuZ3hfaHR0cF92YXJpYWJsZV9udWxsX3ZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKnYgPSBuZ3hfaHR0cF92YXJpYWJsZV90cnVlX3ZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgICAgIGdvdG8gdmFsaWQ7CiAgICAgICAgIH0KKworICAgICAgICBnb3RvIGludmFsaWQ7CiAgICAgfQogCiAgICAgbGVuID0gci0+aGVhZGVyc19pbi5yZWZlcmVyLT52YWx1ZS5sZW47CkBAIC0xMTEsNDMgKzExMiw3OSBAQAogICAgICAgICB8fCAobmd4X3N0cm5jYXNlY21wKHJlZiwgImh0dHA6Ly8iLCA3KSAhPSAwKSkKICAgICB7CiAgICAgICAgIGlmIChybGNmLT5ibG9ja2VkX3JlZmVyZXIpIHsKLSAgICAgICAgICAgICp2ID0gbmd4X2h0dHBfdmFyaWFibGVfbnVsbF92YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfT0s7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICp2ID0gbmd4X2h0dHBfdmFyaWFibGVfdHJ1ZV92YWx1ZTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgICAgICBnb3RvIHZhbGlkOwogICAgICAgICB9CisKKyAgICAgICAgZ290byBpbnZhbGlkOwogICAgIH0KIAotICAgIGxlbiAtPSA3OworICAgIGxhc3QgPSByZWYgKyBsZW47CiAgICAgcmVmICs9IDc7CisgICAgaSA9IDA7CisgICAga2V5ID0gMDsKIAotICAgIGZvciAocCA9IHJlZjsgcCA8IHJlZiArIGxlbjsgcCsrKSB7CisgICAgZm9yIChwID0gcmVmOyBwIDwgbGFzdDsgcCsrKSB7CiAgICAgICAgIGlmICgqcCA9PSAnLycgfHwgKnAgPT0gJzonKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGJ1ZltpXSA9IG5neF90b2xvd2VyKCpwKTsKKyAgICAgICAga2V5ID0gbmd4X2hhc2goa2V5LCBidWZbaSsrXSk7CisKKyAgICAgICAgaWYgKGkgPT0gMjU2KSB7CisgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgIH0KICAgICB9CiAKICAgICBsZW4gPSBwIC0gcmVmOwogCiAgICAgaWYgKHJsY2YtPmhhc2guYnVja2V0cykgewotICAgICAgICBpZiAobmd4X2hhc2hfZmluZCgmcmxjZi0+aGFzaCwgbmd4X2hhc2hfa2V5X2xjKHJlZiwgbGVuKSwgcmVmLCBsZW4pKSB7Ci0gICAgICAgICAgICAqdiA9IG5neF9odHRwX3ZhcmlhYmxlX251bGxfdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICB1cmkgPSBuZ3hfaGFzaF9maW5kKCZybGNmLT5oYXNoLCBrZXksIGJ1ZiwgbGVuKTsKKyAgICAgICAgaWYgKHVyaSkgeworICAgICAgICAgICAgZ290byB1cmk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAocmxjZi0+ZG5zX3dpbGRjYXJkcyAmJiBybGNmLT5kbnNfd2lsZGNhcmRzLT5oYXNoLmJ1Y2tldHMpIHsKLSAgICAgICAgaWYgKG5neF9oYXNoX2ZpbmRfd2lsZGNhcmQocmxjZi0+ZG5zX3dpbGRjYXJkcywgcmVmLCBsZW4pKSB7Ci0gICAgICAgICAgICAqdiA9IG5neF9odHRwX3ZhcmlhYmxlX251bGxfdmFsdWU7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICB1cmkgPSBuZ3hfaGFzaF9maW5kX3dpbGRjYXJkKHJsY2YtPmRuc193aWxkY2FyZHMsIGJ1ZiwgbGVuKTsKKyAgICAgICAgaWYgKHVyaSkgeworICAgICAgICAgICAgZ290byB1cmk7CiAgICAgICAgIH0KICAgICB9CiAKK2ludmFsaWQ6CisKICAgICAqdiA9IG5neF9odHRwX3ZhcmlhYmxlX3RydWVfdmFsdWU7CiAKICAgICByZXR1cm4gTkdYX09LOworCit1cmk6CisKKyAgICBmb3IgKCAvKiB2b2lkICovIDsgcCA8IGxhc3Q7IHArKykgeworICAgICAgICBpZiAoKnAgPT0gJy8nKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxlbiA9IGxhc3QgLSBwOworCisgICAgaWYgKGxlbiA9PSAwKSB7CisgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICB9CisKKyAgICBpZiAodXJpID09IE5HWF9IVFRQX1JFRkVSRVJfTk9fVVJJX1BBUlQpIHsKKyAgICAgICAgZ290byB2YWxpZDsKKyAgICB9CisKKyAgICBpZiAobGVuIDwgdXJpLT5sZW4gfHwgbmd4X3N0cm5jbXAodXJpLT5kYXRhLCBwLCB1cmktPmxlbikgIT0gMCkgeworICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgfQorCit2YWxpZDoKKworICAgICp2ID0gbmd4X2h0dHBfdmFyaWFibGVfbnVsbF92YWx1ZTsKKworICAgIHJldHVybiBOR1hfT0s7CiB9CiAKIApAQCAtMjQxLDcgKzI3OCw3IEBACiAgICAgbmd4X2h0dHBfcmVmZXJlcl9jb25mX3QgICpybGNmID0gY29uZjsKIAogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgKnA7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAqdmFsdWUsIG5hbWU7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAqdmFsdWUsIHVyaSwgbmFtZTsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBpLCBuOwogICAgIG5neF9odHRwX3ZhcmlhYmxlX3QgICAgICAgKnZhcjsKICAgICBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICAgICpzbjsKQEAgLTI5MSwxMyArMzI4LDE3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisgICAgICAgIHVyaS5sZW4gPSAwOworCiAgICAgICAgIGlmIChuZ3hfc3RyY21wKHZhbHVlW2ldLmRhdGEsICJzZXJ2ZXJfbmFtZXMiKSA9PSAwKSB7CiAKICAgICAgICAgICAgIGNzY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfc3J2X2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAogICAgICAgICAgICAgc24gPSBjc2NmLT5zZXJ2ZXJfbmFtZXMuZWx0czsKICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBjc2NmLT5zZXJ2ZXJfbmFtZXMubmVsdHM7IG4rKykgewotICAgICAgICAgICAgICAgIGlmIChuZ3hfaHR0cF9hZGRfcmVmZXJlcihjZiwgcmxjZi0+a2V5cywgJnNuW25dLm5hbWUpICE9IE5HWF9PSykgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChuZ3hfaHR0cF9hZGRfcmVmZXJlcihjZiwgcmxjZi0+a2V5cywgJnNuW25dLm5hbWUsICZ1cmkpCisgICAgICAgICAgICAgICAgICAgICE9IE5HWF9PSykKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMDgsMTMgKzM0OSwxMiBAQAogICAgICAgICBwID0gKHVfY2hhciAqKSBuZ3hfc3Ryc3RyKHZhbHVlW2ldLmRhdGEsICIvIik7CiAKICAgICAgICAgaWYgKHApIHsKLSAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVJJIHBhcnQgXCIlc1wiIGlzIGRlcHJlY2F0ZWQsIGlnbm9yZWQiLCBwKTsKLQorICAgICAgICAgICAgdXJpLmxlbiA9ICh2YWx1ZVtpXS5kYXRhICsgdmFsdWVbaV0ubGVuKSAtIHA7CisgICAgICAgICAgICB1cmkuZGF0YSA9IHA7CiAgICAgICAgICAgICB2YWx1ZVtpXS5sZW4gPSBwIC0gdmFsdWVbaV0uZGF0YTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChuZ3hfaHR0cF9hZGRfcmVmZXJlcihjZiwgcmxjZi0+a2V5cywgJnZhbHVlW2ldKSAhPSBOR1hfT0spIHsKKyAgICAgICAgaWYgKG5neF9odHRwX2FkZF9yZWZlcmVyKGNmLCBybGNmLT5rZXlzLCAmdmFsdWVbaV0sICZ1cmkpICE9IE5HWF9PSykgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAgICAgfQpAQCAtMzI1LDExICszNjUsMTIgQEAKIAogc3RhdGljIGNoYXIgKgogbmd4X2h0dHBfYWRkX3JlZmVyZXIobmd4X2NvbmZfdCAqY2YsIG5neF9oYXNoX2tleXNfYXJyYXlzX3QgKmtleXMsCi0gICAgbmd4X3N0cl90ICp2YWx1ZSkKKyAgICBuZ3hfc3RyX3QgKnZhbHVlLCBuZ3hfc3RyX3QgKnVyaSkKIHsKLSAgICB1X2NoYXIgICAgICBjaDsKLSAgICBuZ3hfaW50X3QgICByYzsKLSAgICBuZ3hfdWludF90ICBmbGFnczsKKyAgICB1X2NoYXIgICAgICAgY2g7CisgICAgbmd4X2ludF90ICAgIHJjOworICAgIG5neF9zdHJfdCAgICp1OworICAgIG5neF91aW50X3QgICBmbGFnczsKIAogICAgIGNoID0gdmFsdWUtPmRhdGFbMF07CiAKQEAgLTM0NCw3ICszODUsMTkgQEAKIAogICAgIGZsYWdzID0gKGNoID09ICcqJyB8fCBjaCA9PSAnLicpID8gTkdYX0hBU0hfV0lMRENBUkRfS0VZIDogMDsKIAotICAgIHJjID0gbmd4X2hhc2hfYWRkX2tleShrZXlzLCB2YWx1ZSwgKHZvaWQgKikgNCwgZmxhZ3MpOworICAgIGlmICh1cmktPmxlbiA9PSAwKSB7CisgICAgICAgIHUgPSBOR1hfSFRUUF9SRUZFUkVSX05PX1VSSV9QQVJUOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgdSA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfc3RyX3QpKTsKKyAgICAgICAgaWYgKHUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgKnUgPSAqdXJpOworICAgIH0KKworICAgIHJjID0gbmd4X2hhc2hfYWRkX2tleShrZXlzLCB2YWx1ZSwgdSwgZmxhZ3MpOwogCiAgICAgaWYgKHJjID09IE5HWF9PSykgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cC5jIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwppbmRleCBkMWQ2NGI4Li43MmVhY2M4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwLmMKQEAgLTExLDggKzExLDYgQEAKIAogCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfYmxvY2sobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7Ci1zdGF0aWMgaW50IG5neF9saWJjX2NkZWNsIG5neF9jbXBfc2VydmVyX25hbWVzKGNvbnN0IHZvaWQgKm9uZSwKLSAgICBjb25zdCB2b2lkICp0d28pOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hZGRfYWRkcmVzcyhuZ3hfY29uZl90ICpjZiwKICAgICBuZ3hfaHR0cF9jb25mX2luX3BvcnRfdCAqaW5fcG9ydCwgbmd4X2h0dHBfbGlzdGVuX3QgKmxzY2YsCiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICpjc2NmKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDRmYTkxMDMuLjI2ZDQxYjEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtOTg0LDIzICs5ODQsNjYgQEAKIG5neF9odHRwX21hcF91cmlfdG9fcGF0aChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9zdHJfdCAqcGF0aCwKICAgICBzaXplX3QgcmVzZXJ2ZWQpCiB7Ci0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAqbGFzdDsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICBhbGlhczsKLSAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmxhc3Q7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXMsIGxlbjsKKyAgICBuZ3hfaHR0cF9zY3JpcHRfY29kZV9wdCAgICAgICBjb2RlOworICAgIG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAgICAgIGU7CisgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAgICAqY2xjZjsKKyAgICBuZ3hfaHR0cF9zY3JpcHRfbGVuX2NvZGVfcHQgICBsY29kZTsKIAogICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAogICAgIGFsaWFzID0gY2xjZi0+YWxpYXMgPyBjbGNmLT5uYW1lLmxlbiA6IDA7CiAKLSAgICBwYXRoLT5sZW4gPSBjbGNmLT5yb290LmxlbiArIHItPnVyaS5sZW4gLSBhbGlhcyArIDEgKyByZXNlcnZlZDsKKyAgICBpZiAoY2xjZi0+cm9vdF9sZW5ndGhzID09IE5VTEwpIHsKIAotICAgIHBhdGgtPmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHBhdGgtPmxlbik7CisgICAgICAgIHItPnJvb3RfbGVuZ3RoID0gY2xjZi0+cm9vdC5sZW47CisKKyAgICAgICAgcGF0aC0+bGVuID0gY2xjZi0+cm9vdC5sZW4gKyByLT51cmkubGVuIC0gYWxpYXMgKyAxICsgcmVzZXJ2ZWQ7CisKKyAgICAgICAgcGF0aC0+ZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgcGF0aC0+bGVuKTsKKyAgICAgICAgaWYgKHBhdGgtPmRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBsYXN0ID0gbmd4X2NvcHkocGF0aC0+ZGF0YSwgY2xjZi0+cm9vdC5kYXRhLCBjbGNmLT5yb290Lmxlbik7CisgICAgICAgIGxhc3QgPSBuZ3hfY3B5c3RybihsYXN0LCByLT51cmkuZGF0YSArIGFsaWFzLCByLT51cmkubGVuIC0gYWxpYXMgKyAxKTsKKworICAgICAgICByZXR1cm4gbGFzdDsKKyAgICB9CisKKyAgICBuZ3hfbWVtemVybygmZSwgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCkpOworCisgICAgZS5pcCA9IGNsY2YtPnJvb3RfbGVuZ3Rocy0+ZWx0czsKKyAgICBlLnJlcXVlc3QgPSByOworICAgIGUuZmx1c2hlZCA9IDE7CisKKyAgICBsZW4gPSAwOworCisgICAgd2hpbGUgKCoodWludHB0cl90ICopIGUuaXApIHsKKyAgICAgICAgbGNvZGUgPSAqKG5neF9odHRwX3NjcmlwdF9sZW5fY29kZV9wdCAqKSBlLmlwOworICAgICAgICBsZW4gKz0gbGNvZGUoJmUpOworICAgIH0KKworICAgIHItPnJvb3RfbGVuZ3RoID0gbGVuOworCisgICAgbGVuICs9IHItPnVyaS5sZW4gLSBhbGlhcyArIDEgKyByZXNlcnZlZDsKKworICAgIHBhdGgtPmxlbiA9IGxlbjsKKyAgICBwYXRoLT5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCBsZW4pOwogICAgIGlmIChwYXRoLT5kYXRhID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbGFzdCA9IG5neF9jb3B5KHBhdGgtPmRhdGEsIGNsY2YtPnJvb3QuZGF0YSwgY2xjZi0+cm9vdC5sZW4pOwotICAgIGxhc3QgPSBuZ3hfY3B5c3RybihsYXN0LCByLT51cmkuZGF0YSArIGFsaWFzLCByLT51cmkubGVuIC0gYWxpYXMgKyAxKTsKKyAgICBlLmlwID0gY2xjZi0+cm9vdF92YWx1ZXMtPmVsdHM7CisgICAgZS5wb3MgPSBwYXRoLT5kYXRhOworCisgICAgd2hpbGUgKCoodWludHB0cl90ICopIGUuaXApIHsKKyAgICAgICAgY29kZSA9ICoobmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQgKikgZS5pcDsKKyAgICAgICAgY29kZSgobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICopICZlKTsKKyAgICB9CisKKyAgICBsYXN0ID0gbmd4X2NweXN0cm4oZS5wb3MsIHItPnVyaS5kYXRhICsgYWxpYXMsIHItPnVyaS5sZW4gLSBhbGlhcyArIDEpOwogCiAgICAgcmV0dXJuIGxhc3Q7CiB9CkBAIC0xOTU3LDcgKzIwMDAsNyBAQAogICAgIH0KIAogICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnR5cGVzX2hhc2hfbWF4X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dHlwZXNfaGFzaF9tYXhfc2l6ZSwgNTEyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT50eXBlc19oYXNoX21heF9zaXplLCAxMDI0KTsKIAogICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnR5cGVzX2hhc2hfYnVja2V0X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dHlwZXNfaGFzaF9idWNrZXRfc2l6ZSwKQEAgLTE5NzcsNyArMjAyMCw3IEBACiAgICAgICAgIHR5cGVzX2hhc2gua2V5ID0gbmd4X2hhc2hfa2V5X2xjOwogICAgICAgICB0eXBlc19oYXNoLm1heF9zaXplID0gY29uZi0+dHlwZXNfaGFzaF9tYXhfc2l6ZTsKICAgICAgICAgdHlwZXNfaGFzaC5idWNrZXRfc2l6ZSA9IGNvbmYtPnR5cGVzX2hhc2hfYnVja2V0X3NpemU7Ci0gICAgICAgIHR5cGVzX2hhc2gubmFtZSA9ICJtaW1lX3R5cGVzIjsKKyAgICAgICAgdHlwZXNfaGFzaC5uYW1lID0gInR5cGVzX2hhc2giOwogICAgICAgICB0eXBlc19oYXNoLnBvb2wgPSBjZi0+cG9vbDsKICAgICAgICAgdHlwZXNfaGFzaC50ZW1wX3Bvb2wgPSBOVUxMOwogCkBAIC0yMDE5LDcgKzIwNjIsNyBAQAogICAgICAgICB0eXBlc19oYXNoLmtleSA9IG5neF9oYXNoX2tleV9sYzsKICAgICAgICAgdHlwZXNfaGFzaC5tYXhfc2l6ZSA9IGNvbmYtPnR5cGVzX2hhc2hfbWF4X3NpemU7CiAgICAgICAgIHR5cGVzX2hhc2guYnVja2V0X3NpemUgPSBjb25mLT50eXBlc19oYXNoX2J1Y2tldF9zaXplOwotICAgICAgICB0eXBlc19oYXNoLm5hbWUgPSAibWltZV90eXBlcyI7CisgICAgICAgIHR5cGVzX2hhc2gubmFtZSA9ICJtaW1lX3R5cGVzX2hhc2giOwogICAgICAgICB0eXBlc19oYXNoLnBvb2wgPSBjZi0+cG9vbDsKICAgICAgICAgdHlwZXNfaGFzaC50ZW1wX3Bvb2wgPSBOVUxMOwogCkBAIC0yMzQwLDggKzIzODMsOSBAQAogewogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAqbGNmID0gY29uZjsKIAotICAgIG5neF91aW50X3QgICBhbGlhczsKLSAgICBuZ3hfc3RyX3QgICAqdmFsdWU7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgKnZhbHVlOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBhbGlhcywgbjsKKyAgICBuZ3hfaHR0cF9zY3JpcHRfY29tcGlsZV90ICAgc2M7CiAKICAgICBhbGlhcyA9IChjbWQtPm5hbWUubGVuID09IHNpemVvZigiYWxpYXMiKSAtIDEpID8gMSA6IDA7CiAKQEAgLTIzNzIsNiArMjQxNiwyNiBAQAogICAgICAgICBsY2YtPnJvb3QubGVuLS07CiAgICAgfQogCisgICAgbiA9IG5neF9odHRwX3NjcmlwdF92YXJpYWJsZXNfY291bnQoJnZhbHVlWzFdKTsKKworICAgIGlmIChuID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOworICAgIH0KKworICAgIG5neF9tZW16ZXJvKCZzYywgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9jb21waWxlX3QpKTsKKworICAgIHNjLmNmID0gY2Y7CisgICAgc2Muc291cmNlID0gJnZhbHVlWzFdOworICAgIHNjLmxlbmd0aHMgPSAmbGNmLT5yb290X2xlbmd0aHM7CisgICAgc2MudmFsdWVzID0gJmxjZi0+cm9vdF92YWx1ZXM7CisgICAgc2MudmFyaWFibGVzID0gbjsKKyAgICBzYy5jb21wbGV0ZV9sZW5ndGhzID0gMTsKKyAgICBzYy5jb21wbGV0ZV92YWx1ZXMgPSAxOworCisgICAgaWYgKG5neF9odHRwX3NjcmlwdF9jb21waWxlKCZzYykgIT0gTkdYX09LKSB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCmluZGV4IDE2NTJmMzUuLjIwYmYzYTYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaApAQCAtMTk3LDYgKzE5Nyw5IEBACiAgICAgbmd4X3N0cl90ICAgICByb290OyAgICAgICAgICAgICAgICAgICAgLyogcm9vdCwgYWxpYXMgKi8KICAgICBuZ3hfc3RyX3QgICAgIHBvc3RfYWN0aW9uOwogCisgICAgbmd4X2FycmF5X3QgICpyb290X2xlbmd0aHM7CisgICAgbmd4X2FycmF5X3QgICpyb290X3ZhbHVlczsKKwogICAgIG5neF9hcnJheV90ICAqdHlwZXM7CiAgICAgbmd4X2hhc2hfdCAgICB0eXBlc19oYXNoOwogICAgIG5neF9zdHJfdCAgICAgZGVmYXVsdF90eXBlOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jCmluZGV4IDQ3ODM5M2MuLmI5MGQzM2UgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMKQEAgLTEwMiwxOCArMTAyLDIyIEBACiAgICAgICAgIG91dCA9IGluOwogICAgIH0KIAotICAgIGlmIChvdXQgPT0gTlVMTCAmJiByLT5tYWluLT5vdXQgPT0gTlVMTCAmJiAhci0+bWFpbi0+Y29ubmVjdGlvbi0+YnVmZmVyZWQpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9PSzsKLSAgICB9CisgICAgcmMgPSBOR1hfT0s7CiAKLSAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiaHR0cCBwb3N0cG9uZSBmaWx0ZXIgb3V0IFwiJVY/JVZcIiIsICZyLT51cmksICZyLT5hcmdzKTsKKyAgICBpZiAob3V0IHx8IHItPm1haW4tPm91dCB8fCByLT5tYWluLT5jb25uZWN0aW9uLT5idWZmZXJlZCkgewogCi0gICAgcmMgPSBuZ3hfaHR0cF9uZXh0X2ZpbHRlcihyLT5tYWluLCBvdXQpOworICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcG9zdHBvbmUgZmlsdGVyIG91dCBcIiVWPyVWXCIiLCAmci0+dXJpLCAmci0+YXJncyk7CiAKLSAgICBpZiAocmMgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIC8qIE5HWF9FUlJPUiBtYXkgYmUgcmV0dXJuZWQgYnkgYW55IGZpbHRlciAqLwotICAgICAgICByLT5jb25uZWN0aW9uLT5lcnJvciA9IDE7CisgICAgICAgIGlmICghKG91dCAmJiBvdXQtPm5leHQgPT0gTlVMTCAmJiBuZ3hfYnVmX3N5bmNfb25seShvdXQtPmJ1ZikpKSB7CisKKyAgICAgICAgICAgIHJjID0gbmd4X2h0dHBfbmV4dF9maWx0ZXIoci0+bWFpbiwgb3V0KTsKKworICAgICAgICAgICAgaWYgKHJjID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgICAgIC8qIE5HWF9FUlJPUiBtYXkgYmUgcmV0dXJuZWQgYnkgYW55IGZpbHRlciAqLworICAgICAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPmVycm9yID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChyLT5wb3N0cG9uZWQgPT0gTlVMTCkgewpAQCAtMTM1LDYgKzEzOSw3IEBACiBuZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfb3V0cHV0X3Bvc3Rwb25lZF9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgcmM7CisgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgICAgICAgKm91dDsKICAgICBuZ3hfaHR0cF9wb3N0cG9uZWRfcmVxdWVzdF90ICAqcHI7CiAKICAgICBmb3IgKCA7OyApIHsKQEAgLTE2NSwxMyArMTcwLDE3IEBACiAgICAgICAgICAgICBwciA9IHItPnBvc3Rwb25lZDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChwci0+b3V0KSB7CisgICAgICAgIG91dCA9IHByLT5vdXQ7CisKKyAgICAgICAgaWYgKG91dCkgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBwb3N0cG9uZSBmaWx0ZXIgb3V0IHBvc3Rwb25lZCBcIiVWPyVWXCIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJnItPnVyaSwgJnItPmFyZ3MpOwogCi0gICAgICAgICAgICBpZiAobmd4X2h0dHBfbmV4dF9maWx0ZXIoci0+bWFpbiwgcHItPm91dCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIGlmICghKG91dCAmJiBvdXQtPm5leHQgPT0gTlVMTCAmJiBuZ3hfYnVmX3N5bmNfb25seShvdXQtPmJ1ZikpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5neF9odHRwX25leHRfZmlsdGVyKHItPm1haW4sIG91dCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaCBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAppbmRleCBkY2U5MTlmLi5lZDUwODQzIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCkBAIC0zNDAsNiArMzQwLDggQEAKIAogICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgICAgICAgICp2YXJpYWJsZXM7CiAKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdF9sZW5ndGg7CisKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRfcmF0ZTsKIAogICAgIC8qIHVzZWQgdG8gbGVhcm4gdGhlIEFwYWNoZSBjb21wYXRpYmxlIHJlc3BvbnNlIGxlbmd0aCB3aXRob3V0IGEgaGVhZGVyICovCg==