ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggNjZhYzFhNy4uM2U0NjI2YiAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw2NSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4xLjI3IiBkYXRlPSIyOC4wMy4yMDA1Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DB0sHNxdTSIGJsb2NrZWQg1yDEydLFy9TJ18UgaW52YWxpZF9yZWZlcmVycy4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAiYmxvY2tlZCIgcGFyYW1ldGVyIG9mIHRoZSAiaW52YWxpZF9yZWZlcmVycyIgZGlyZWN0aXZlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8/bycLLySDPwtLBws/Uy8kg2sHHz8zP18vBINrB0NLP08Eg1MXQxdLYINrB0MnT2dfBwNTT0SDOwSDV0s/XzsUKK2luZm8sINcgzM/HINTBy9bFINrB0MnT2dfBxdTT0SDJzdEg08XS18XSwSDJINPU0s/LySDawcfPzM/Xy8EKK9rB0NLP08EgIkhvc3QiIMkgIlJlZmVyZXIiLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIGVycm9ycyB3aGlsZSBoYW5kbGluZyB0aGUgcmVxdWVzdCBoZWFkZXIgbm93IGxvZ2dlZCBhdCAiaW5mbyIgbGV2ZWwuCitUaGUgc2VydmVyIG5hbWUgYW5kIHRoZSAiSG9zdCIgYW5kICJSZWZlcmVyIiBoZWFkZXIgbGluZXMgYWxzbyBsb2dnZWQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJINrB0MnTySDP28nCz8sg1yDMz8cg2sHQydPZ18HF1NPRINTBy9bFINPU0s/LwSDawcfPzM/Xy8Eg2sHQ0s/TwSAiSG9zdCIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIkhvc3QiIGhlYWRlciBsaW5lIGlzIGFsc28gbG9nZ2VkIGluIGVycm9yIGxvZy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHByb3h5X3Bhc3NfdW5wYXJzZWRfdXJpLgor89DFw8nBzNjOwdEgz8LSwcLP1MvBINPJzdfPzM/XICI6Ly8iINcgVVJJLCDX18XEo87OwdEg1yDXxdLTyckgMC4xLjExLAor1MXQxdLYINXQ0sHaxM7FzsEuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgcHJveHlfcGFzc191bnBhcnNlZF91cmkgZGlyZWN0aXZlLgorVGhlIHNwZWNpYWwgaGFuZGxpbmcgb2YgdGhlICI6Ly8iIHN5bWJvbHMgaW4gVVJJLCBhcHBlYXJlZCBpbiAwLjEuMTEgdmVyc2lvbiwKK25vdyBpcyBjYW5jZWxlZC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CituZ2lueCDOxSDTz8LJ0sHM09EgzsEgRnJlZUJTRCDJIExpbnV4LCDF08zJIMLZzCDVy8Hawc4g0MHSwc3F1NIgy8/OxsnH1dLBw8nJCistLXdpdGhvdXQtbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CituZ2lueCBjb3VsZCBub3QgYmUgYnVpbHQgb24gRnJlZUJTRCBhbmQgTGludXgsIGlmIHRoZQorLS13aXRob3V0LW5neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHdhcyB1c2VkLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMS4yNiIgZGF0ZT0iMjIuMDMuMjAwNSI+CiAKIDxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KQEAgLTIzLDExICs4MiwxMSBAQAogCiA8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+CiA8cGFyYSBsYW5nPSJydSI+Ci3Q0skg2sHQydPJIM/bycLPyyDXIMzPxyDawdDJ09nXwcXU09Eg1MHLINbFIMnN0SDIz9PUwSwg0NLJIM/C0sHdxc7JyQotyyDLz9TP0s/N1Swg0NLPydrP28zBIM/bycLLwS4KK9DSySDawdDJ08kgz9vJws/LINcgzM/HINrB0MnT2dfBxdTT0SDUwcvWxSDJzdEg08XS18XSwSwg0NLJIM/C0sHdxc7JyQoryyDLz9TP0s/N1SDQ0s/J2s/bzMEgz9vJwsvBLgogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgotdGhlIGhvc3QgbmFtZSBpcyBhbHNvIGxvZ2dlZCBpbiBlcnJvciBsb2cuCit0aGUgc2VydmVyIG5hbWUgaXMgYWxzbyBsb2dnZWQgaW4gZXJyb3IgbG9nLgogPC9wYXJhPgogPC9jaGFuZ2U+CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmMgYi9zcmMvY29yZS9uZ2lueC5jCmluZGV4IDA2ZWVkZDMuLjlmMjIxMTIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmMKKysrIGIvc3JjL2NvcmUvbmdpbnguYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAgICAgICAgICAgICBpZiAocyA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBzb2NrZXQgbnVtYmVyIFwiJXNcIiBpbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0lOWF9WQVIgIiBlbnZpcm9tZW50IHZhcmlhYmxlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR0lOWF9WQVIgIiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIHRoZSByZXN0IG9mIHRoZSB2YXJpYWJsZSIsIHYpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCmluZGV4IGQwMzEzYTAuLmVkMTA2N2IgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICBsb2c7CiAKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICBub19yZWZlcmVyOworICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgIGJsb2NrZWRfcmVmZXJlcjsKIH0gbmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90OwogCiAKQEAgLTM3OCw2ICszNzksNyBAQAogICAgIGlmIChjb2RlLT51cmkpIHsKICAgICAgICAgaWYgKCFjb2RlLT5icmVha19jeWNsZSkgewogICAgICAgICAgICAgci0+dXJpX2NoYW5nZWQgPSAxOworICAgICAgICAgICAgci0+dmFsaWRfdW5wYXJzZWRfdXJpID0gMTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyYyAmJiAoci0+cXVvdGVkX3VyaSB8fCByLT5wbHVzX2luX3VyaSkpIHsKQEAgLTcxNSw2ICs3MTcsNyBAQAogICAgICAgICAgICAgZS0+c3ArKzsKIAogICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlLT5zcC0+dmFsdWUgPSAxOwogICAgICAgICAgICAgZS0+c3AtPnRleHQubGVuID0gMTsKQEAgLTczMSwxMiArNzM0LDIyIEBACiAgICAgaWYgKGxlbiA8IHNpemVvZigiaHR0cDovL2kucnUiKSAtIDEKICAgICAgICAgfHwgKG5neF9zdHJuY2FzZWNtcChyZWYsICJodHRwOi8vIiwgNykgIT0gMCkpCiAgICAgewotICAgICAgICBlLT5zcC0+dmFsdWUgPSAxOwotICAgICAgICBlLT5zcC0+dGV4dC5sZW4gPSAxOwotICAgICAgICBlLT5zcC0+dGV4dC5kYXRhID0gKHVfY2hhciAqKSAiMSI7Ci0gICAgICAgIGUtPnNwKys7CisgICAgICAgIGlmIChjZi0+YmxvY2tlZF9yZWZlcmVyKSB7CisgICAgICAgICAgICBlLT5zcC0+dmFsdWUgPSAwOworICAgICAgICAgICAgZS0+c3AtPnRleHQubGVuID0gMDsKKyAgICAgICAgICAgIGUtPnNwLT50ZXh0LmRhdGEgPSAodV9jaGFyICopICIwIjsKKyAgICAgICAgICAgIGUtPnNwKys7CiAKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlLT5zcC0+dmFsdWUgPSAxOworICAgICAgICAgICAgZS0+c3AtPnRleHQubGVuID0gMTsKKyAgICAgICAgICAgIGUtPnNwLT50ZXh0LmRhdGEgPSAodV9jaGFyICopICIxIjsKKyAgICAgICAgICAgIGUtPnNwKys7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGxlbiAtPSA3OwpAQCAtODUzLDYgKzg2Niw3IEBACiAgICAgY29uZi0+c3RhY2tfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1VJTlQ7CiAgICAgY29uZi0+bG9nID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY29uZi0+bm9fcmVmZXJlciA9IE5HWF9DT05GX1VOU0VUOworICAgIGNvbmYtPmJsb2NrZWRfcmVmZXJlciA9IE5HWF9DT05GX1VOU0VUOwogCiAgICAgcmV0dXJuIGNvbmY7CiB9CkBAIC04NzMsMTIgKzg4NywxNyBAQAogICAgIGlmIChjb25mLT5yZWZlcmVycyA9PSBOVUxMKSB7CiAgICAgICAgIGNvbmYtPnJlZmVyZXJzID0gcHJldi0+cmVmZXJlcnM7CiAgICAgICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPm5vX3JlZmVyZXIsIHByZXYtPm5vX3JlZmVyZXIsIDApOworICAgICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5ibG9ja2VkX3JlZmVyZXIsIHByZXYtPmJsb2NrZWRfcmVmZXJlciwgMCk7CiAgICAgfQogCiAgICAgaWYgKGNvbmYtPm5vX3JlZmVyZXIgPT0gTkdYX0NPTkZfVU5TRVQpIHsKICAgICAgICAgY29uZi0+bm9fcmVmZXJlciA9IDA7CiAgICAgfQogCisgICAgaWYgKGNvbmYtPmJsb2NrZWRfcmVmZXJlciA9PSBOR1hfQ09ORl9VTlNFVCkgeworICAgICAgICBjb25mLT5ibG9ja2VkX3JlZmVyZXIgPSAwOworICAgIH0KKwogICAgIGlmIChjb25mLT5jb2RlcyA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9PSzsKICAgICB9CkBAIC0xNTQwLDYgKzE1NTksMTEgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKG5neF9zdHJjbXAodmFsdWVbaV0uZGF0YSwgImJsb2NrZWQiKSA9PSAwKSB7CisgICAgICAgICAgICBsY2YtPmJsb2NrZWRfcmVmZXJlciA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChuZ3hfc3RyY21wKHZhbHVlW2ldLmRhdGEsICJzZXJ2ZXJfbmFtZXMiKSA9PSAwKSB7CiAgICAgICAgICAgICBzZXJ2ZXJfbmFtZXMgPSAxOwogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jCmluZGV4IDJiNzZjMWYuLjlhZGRmYzIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jCkBAIC0xMDcsNiArMTA3LDEzIEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCBwcmVzZXJ2ZV9ob3N0KSwKICAgICAgIE5VTEwgfSwKIAorICAgIHsgbmd4X3N0cmluZygicHJveHlfcGFzc191bnBhcnNlZF91cmkiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAorICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHBhc3NfdW5wYXJzZWRfdXJpKSwKKyAgICAgIE5VTEwgfSwKKwogICAgIHsgbmd4X3N0cmluZygicHJveHlfc2V0X3hfdXJsIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCkBAIC04MDIsNyArODA5LDYgQEAKIHsKICAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICpwOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZTsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICB1cmk7CiAgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAgICAgICAgICAgICAqcjsKICAgICBuZ3hfcGVlcl9jb25uZWN0aW9uX3QgICAgICAgICAgICpwZWVyOwogICAgIG5neF9odHRwX3Byb3h5X2xvZ19jdHhfdCAgICAgICAgKmN0eDsKQEAgLTgxNCw3ICs4MjAsNyBAQAogICAgIHBlZXIgPSAmY3R4LT5wcm94eS0+dXBzdHJlYW0tPnBlZXI7CiAKICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgIiB3aGlsZSAlcywgY2xpZW50OiAlViwgaG9zdDogJVYsIFVSTDogXCIlVlwiLCIKKyAgICAgICAgICAgICAgICAgICAgICIgd2hpbGUgJXMsIGNsaWVudDogJVYsIHNlcnZlcjogJVYsIFVSTDogXCIlVlwiLCIKICAgICAgICAgICAgICAgICAgICAgICIgdXBzdHJlYW06IGh0dHA6Ly8lViVzJVYiLAogICAgICAgICAgICAgICAgICAgICAgY3R4LT5wcm94eS0+YWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgJnItPmNvbm5lY3Rpb24tPmFkZHJfdGV4dCwKQEAgLTgyNiw2ICs4MzIsMTMgQEAKICAgICBsZW4gLT0gcCAtIGJ1ZjsKICAgICBidWYgPSBwOwogCisgICAgaWYgKGN0eC0+cHJveHktPmxjZi0+cGFzc191bnBhcnNlZF91cmkgJiYgci0+dmFsaWRfdW5wYXJzZWRfdXJpKSB7CisgICAgICAgIHAgPSBuZ3hfY3B5bWVtKGJ1Ziwgci0+dW5wYXJzZWRfdXJpLmRhdGEgKyAxLCByLT51bnBhcnNlZF91cmkubGVuIC0gMSk7CisgICAgICAgIGxlbiAtPSBwIC0gYnVmOworCisgICAgICAgIHJldHVybiBuZ3hfaHR0cF9sb2dfZXJyb3JfaW5mbyhyLCBwLCBsZW4pOworICAgIH0KKwogICAgIGlmIChyLT5xdW90ZWRfdXJpKSB7CiAgICAgICAgIGVzY2FwZSA9IDIgKiBuZ3hfZXNjYXBlX3VyaShOVUxMLCByLT51cmkuZGF0YSArIHVjLT5sb2NhdGlvbi0+bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuLApAQCAtODQxLDE0ICs4NTQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbiwgTkdYX0VTQ0FQRV9VUkkpOwogCiAgICAgICAgICAgICBidWYgKz0gci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuICsgZXNjYXBlOwotCi0gICAgICAgICAgICBpZiAoci0+YXJncy5sZW4gPT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiBidWY7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGxlbiAtPSByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGU7CiAKLSAgICAgICAgICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICI/JVYiLCAmci0+YXJncyk7CisgICAgICAgICAgICBpZiAoci0+YXJncy5sZW4pIHsKKyAgICAgICAgICAgICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiPyVWIiwgJnItPmFyZ3MpOworICAgICAgICAgICAgICAgIGxlbiAtPSBwIC0gYnVmOworICAgICAgICAgICAgICAgIGJ1ZiA9IHA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9sb2dfZXJyb3JfaW5mbyhyLCBidWYsIGxlbik7CiAgICAgICAgIH0KIAogICAgICAgICBwID0gbmd4X3BhbGxvYyhyLT5wb29sLCByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGUpOwpAQCAtODU5LDE3ICs4NzMsMjMgQEAKICAgICAgICAgbmd4X2VzY2FwZV91cmkocCwgci0+dXJpLmRhdGEgKyB1Yy0+bG9jYXRpb24tPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuLCBOR1hfRVNDQVBFX1VSSSk7CiAKLSAgICAgICAgdXJpLmxlbiA9IHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbiArIGVzY2FwZTsKLSAgICAgICAgdXJpLmRhdGEgPSBwOworICAgICAgICBwID0gbmd4X2NweW1lbShidWYsIHAsIHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbiArIGVzY2FwZSk7CiAKICAgICB9IGVsc2UgewotICAgICAgICB1cmkubGVuID0gci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuOwotICAgICAgICB1cmkuZGF0YSA9IHItPnVyaS5kYXRhICsgdWMtPmxvY2F0aW9uLT5sZW47Ci0KKyAgICAgICAgcCA9IG5neF9jcHltZW0oYnVmLCByLT51cmkuZGF0YSArIHVjLT5sb2NhdGlvbi0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4pOwogICAgIH0KIAotICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIlViVzJVYiLAotICAgICAgICAgICAgICAgICAgICAgICAgJnVyaSwgci0+YXJncy5sZW4gPyAiPyIgOiAiIiwgJnItPmFyZ3MpOworICAgIGxlbiAtPSBwIC0gYnVmOworICAgIGJ1ZiA9IHA7CisKKyAgICBpZiAoci0+YXJncy5sZW4pIHsKKyAgICAgICAgcCA9IG5neF9zbnByaW50ZihidWYsIGxlbiwgIj8lViIsICZyLT5hcmdzKTsKKyAgICAgICAgbGVuIC09IHAgLSBidWY7CisgICAgICAgIGJ1ZiA9IHA7CisgICAgfQorCisgICAgcmV0dXJuIG5neF9odHRwX2xvZ19lcnJvcl9pbmZvKHIsIGJ1ZiwgbGVuKTsKIH0KIAogCkBAIC0xMTA5LDYgKzExMjksNyBAQAogICAgIGNvbmYtPnNlbmRfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgY29uZi0+c2VuZF9sb3dhdCA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAKKyAgICBjb25mLT5wYXNzX3VucGFyc2VkX3VyaSA9IE5HWF9DT05GX1VOU0VUOwogICAgIGNvbmYtPnByZXNlcnZlX2hvc3QgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjb25mLT5zZXRfeF91cmwgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjb25mLT5zZXRfeF9yZWFsX2lwID0gTkdYX0NPTkZfVU5TRVQ7CkBAIC0xMTQ5LDYgKzExNzAsMTUgQEAKICAgICBuZ3hfY29uZl9tZXJnZV9tc2VjX3ZhbHVlKGNvbmYtPnNlbmRfdGltZW91dCwgcHJldi0+c2VuZF90aW1lb3V0LCA2MDAwMCk7CiAgICAgbmd4X2NvbmZfbWVyZ2Vfc2l6ZV92YWx1ZShjb25mLT5zZW5kX2xvd2F0LCBwcmV2LT5zZW5kX2xvd2F0LCAwKTsKIAorICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnBhc3NfdW5wYXJzZWRfdXJpLCBwcmV2LT5wYXNzX3VucGFyc2VkX3VyaSwgMCk7CisKKyAgICBpZiAoY29uZi0+cGFzc191bnBhcnNlZF91cmkgJiYgY29uZi0+dXBzdHJlYW0tPmxvY2F0aW9uLT5sZW4gPiAxKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAiXCJwcm94eV9wYXNzX3VucGFyc2VkX3VyaVwiIGNhbiBiZSBzZXQgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24gXCIvXCIgb3IgZ2l2ZW4gYnkgcmVndWxhciBleHByZXNzaW9uLiIpOworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+cHJlc2VydmVfaG9zdCwgcHJldi0+cHJlc2VydmVfaG9zdCwgMCk7CiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+c2V0X3hfdXJsLCBwcmV2LT5zZXRfeF91cmwsIDApOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnNldF94X3JlYWxfaXAsIHByZXYtPnNldF94X3JlYWxfaXAsIDApOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmggYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuaAppbmRleCBmOTUwMjU4Li4yYzkyMTBmIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuaAorKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuaApAQCAtODAsNiArODAsNyBAQAogICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgICAgIHNldF94X3VybDsKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICAgICBzZXRfeF9yZWFsX2lwOwogICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgICAgIGFkZF94X2ZvcndhcmRlZF9mb3I7CisgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICAgcGFzc191bnBhcnNlZF91cmk7CiAgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICAgcGFzc19zZXJ2ZXI7CiAgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICAgcGFzc194X2FjY2VsX2V4cGlyZXM7CiAgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlX2V4cGlyZXM7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X3Vwc3RyZWFtLmMKaW5kZXggNDVkYzA0ZC4uMTA3YWJhMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV91cHN0cmVhbS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYwpAQCAtODYsNyArODYsNyBAQAogCiBzdGF0aWMgbmd4X2NoYWluX3QgKm5neF9odHRwX3Byb3h5X2NyZWF0ZV9yZXF1ZXN0KG5neF9odHRwX3Byb3h5X2N0eF90ICpwKQogewotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwgbG9jX2xlbjsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW47CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICAgaSwgZXNjYXBlLCAqaW5kZXg7CiAgICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAgICAgICAgICAqYjsKICAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAgICpjaGFpbjsKQEAgLTk1LDcgKzk1LDYgQEAKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICAgICAgICpyOwogICAgIG5neF9odHRwX3ZhcmlhYmxlX3QgICAgICAgICAgICAgKnZhcjsKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICAgICAgICp2YWx1ZTsKLSAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICAgICAgICpjbGNmOwogICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgICAgICAgKmNtY2Y7CiAgICAgbmd4X2h0dHBfcHJveHlfdXBzdHJlYW1fY29uZl90ICAqdWM7CiAKQEAgLTEwNywzMiArMTA2LDMwIEBACiAgICAgaW5kZXggPSBOVUxMOwogI2VuZGlmCiAKKyAgICBlc2NhcGUgPSAwOworCiAgICAgaWYgKHAtPnVwc3RyZWFtLT5tZXRob2QpIHsKLSAgICAgICAgbGVuID0gaHR0cF9tZXRob2RzW3AtPnVwc3RyZWFtLT5tZXRob2QgLSAxXS5sZW47CisgICAgICAgIGxlbiA9IGh0dHBfbWV0aG9kc1twLT51cHN0cmVhbS0+bWV0aG9kIC0gMV0ubGVuICsgdWMtPnVyaS5sZW47CiAKICAgICB9IGVsc2UgewotICAgICAgICBsZW4gPSByLT5tZXRob2RfbmFtZS5sZW47CisgICAgICAgIGxlbiA9IHItPm1ldGhvZF9uYW1lLmxlbiArIHVjLT51cmkubGVuOwogICAgIH0KIAotICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKyAgICBpZiAocC0+bGNmLT5wYXNzX3VucGFyc2VkX3VyaSAmJiByLT52YWxpZF91bnBhcnNlZF91cmkpIHsKKyAgICAgICAgbGVuICs9IHItPnVucGFyc2VkX3VyaS5sZW4gLSAxOwogCi0jaWYgKE5HWF9QQ1JFKQotICAgIGxvY19sZW4gPSAoY2xjZi0+cmVnZXgpID8gMSA6IGNsY2YtPm5hbWUubGVuOwotI2Vsc2UKLSAgICBsb2NfbGVuID0gY2xjZi0+bmFtZS5sZW47Ci0jZW5kaWYKLQotICAgIGlmIChyLT5xdW90ZWRfdXJpKSB7Ci0gICAgICAgIGVzY2FwZSA9IDIgKiBuZ3hfZXNjYXBlX3VyaShOVUxMLCByLT51cmkuZGF0YSArIGxvY19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gbG9jX2xlbiwgTkdYX0VTQ0FQRV9VUkkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVzY2FwZSA9IDA7CisgICAgICAgIGlmIChyLT5xdW90ZWRfdXJpKSB7CisgICAgICAgICAgICBlc2NhcGUgPSAyICogbmd4X2VzY2FwZV91cmkoTlVMTCwgci0+dXJpLmRhdGEgKyB1Yy0+bG9jYXRpb24tPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VTQ0FQRV9VUkkpOworICAgICAgICB9CisKKyAgICAgICAgbGVuICs9IHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbiArIGVzY2FwZQorICAgICAgICAgICAgKyBzaXplb2YoIj8iKSAtIDEgKyByLT5hcmdzLmxlbjsKICAgICB9CiAKLSAgICBsZW4gKz0gdWMtPnVyaS5sZW4KLSAgICAgICAgKyByLT51cmkubGVuIC0gbG9jX2xlbiArIGVzY2FwZQotICAgICAgICArIHNpemVvZigiPyIpIC0gMSArIHItPmFyZ3MubGVuCi0gICAgICAgICsgc2l6ZW9mKGh0dHBfdmVyc2lvbikgLSAxCisgICAgbGVuICs9IHNpemVvZihodHRwX3ZlcnNpb24pIC0gMQogICAgICAgICArIHNpemVvZihjb25uZWN0aW9uX2Nsb3NlX2hlYWRlcikgLSAxCiAgICAgICAgICsgc2l6ZW9mKENSTEYpIC0gMTsKIApAQCAtMjY5LDE5ICsyNjYsMjQgQEAKIAogICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHVjLT51cmkuZGF0YSwgdWMtPnVyaS5sZW4pOwogCi0gICAgaWYgKGVzY2FwZSkgewotICAgICAgICBuZ3hfZXNjYXBlX3VyaShiLT5sYXN0LCByLT51cmkuZGF0YSArIGxvY19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSBsb2NfbGVuLCBOR1hfRVNDQVBFX1VSSSk7Ci0gICAgICAgIGItPmxhc3QgKz0gci0+dXJpLmxlbiAtIGxvY19sZW4gKyBlc2NhcGU7Ci0KKyAgICBpZiAocC0+bGNmLT5wYXNzX3VucGFyc2VkX3VyaSAmJiByLT52YWxpZF91bnBhcnNlZF91cmkpIHsKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgci0+dW5wYXJzZWRfdXJpLmRhdGEgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51bnBhcnNlZF91cmkubGVuIC0gMSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgci0+dXJpLmRhdGEgKyBsb2NfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gbG9jX2xlbik7Ci0gICAgfQorICAgICAgICBpZiAoZXNjYXBlKSB7CisgICAgICAgICAgICBuZ3hfZXNjYXBlX3VyaShiLT5sYXN0LCByLT51cmkuZGF0YSArIHVjLT5sb2NhdGlvbi0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuLCBOR1hfRVNDQVBFX1VSSSk7CisgICAgICAgICAgICBiLT5sYXN0ICs9IHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbiArIGVzY2FwZTsKIAotICAgIGlmIChyLT5hcmdzLmxlbiA+IDApIHsKLSAgICAgICAgKmItPmxhc3QrKyA9ICc/JzsKLSAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgci0+YXJncy5kYXRhLCByLT5hcmdzLmxlbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCByLT51cmkuZGF0YSArIHVjLT5sb2NhdGlvbi0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyLT5hcmdzLmxlbiA+IDApIHsKKyAgICAgICAgICAgICpiLT5sYXN0KysgPSAnPyc7CisgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCByLT5hcmdzLmRhdGEsIHItPmFyZ3MubGVuKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIGh0dHBfdmVyc2lvbiwgc2l6ZW9mKGh0dHBfdmVyc2lvbikgLSAxKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwLmggYi9zcmMvaHR0cC9uZ3hfaHR0cC5oCmluZGV4IDJkNDE1OGYuLjQ3NThlODQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHAuaApAQCAtNjgsNiArNjgsOCBAQAogbmd4X2ludF90IG5neF9odHRwX3NlbmRfbGFzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogdm9pZCBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqciwgaW50IGVycm9yKTsKIHZvaWQgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihuZ3hfY29ubmVjdGlvbl90ICpjKTsKK3VfY2hhciAqIG5neF9odHRwX2xvZ19lcnJvcl9pbmZvKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsCisgICAgc2l6ZV90IGxlbik7CiAKIAogbmd4X2ludF90IG5neF9odHRwX3JlYWRfY2xpZW50X3JlcXVlc3RfYm9keShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCBkMWJmMTA0Li4wYWQwOGQ1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTQxNSw4ICs0MTUsMTAgQEAKIAogICAgIHItPmNvbm5lY3Rpb24tPndyaXRlLT5ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfY29yZV9waGFzZV9ldmVudF9oYW5kbGVyOwogCisgICAgci0+dmFsaWRfdW5wYXJzZWRfdXJpID0gMTsKICAgICByLT51cmlfY2hhbmdlZCA9IDE7CiAgICAgci0+dXJpX2NoYW5nZXMgPSAxMTsKKwogICAgIHItPnBoYXNlID0gTkdYX0hUVFBfUkVXUklURV9QSEFTRTsKICAgICByLT5waGFzZV9oYW5kbGVyID0gMDsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfbG9nX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfbG9nX21vZHVsZS5jCmluZGV4IGQxOWNhZTcuLjM2YTk4ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2xvZ19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfbW9kdWxlLmMKQEAgLTU0NCw5ICs1NDQsOSBAQAogICAgIC8qCiAgICAgICogTm8gaGVhZGVyIHBvaW50ZXIgd2FzIGZvdW5kLgogICAgICAqIEhvd2V2ZXIsIHNvbWUgaGVhZGVyczogIkRhdGUiLCAiU2VydmVyIiwgIkNvbnRlbnQtTGVuZ3RoIiwKLSAgICAgKiBhbmQgIkxhc3QtTW9kaWZpZWQiIGhhdmUgYSBzcGVjaWFsIGhhbmRsaW5nIGluIHRoZSBoZWFkZXIgZmlsdGVyCi0gICAgICogYnV0IHdlIGRvIG5vdCBzZXQgdXAgdGhlaXIgcG9pbnRlcnMgaW4gdGhlIGZpbHRlciBiZWNhdXNlCi0gICAgICogdGhleSBhcmUgdG9vIHNlbGRvbSBuZWVkZWQgdG8gYmUgbG9nZ2VkLgorICAgICAqIGFuZCAiTGFzdC1Nb2RpZmllZCIgaGF2ZSBhIHNwZWNpYWwgaGFuZGxpbmcgaW4gdGhlIGhlYWRlciBmaWx0ZXIsCisgICAgICogYnV0IHdlIGRvIG5vdCBzZXQgdXAgdGhlaXIgcG9pbnRlcnMgaW4gdGhlIGZpbHRlciwKKyAgICAgKiBiZWNhdXNlIHRoZXkgYXJlIHRvbyBzZWxkb20gbmVlZGVkIHRvIGJlIGxvZ2dlZC4KICAgICAgKi8KIAogICAgIGlmIChkYXRhID09IG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfb3V0X3QsIGRhdGUpKSB7CkBAIC01OTIsOSArNTkyLDkgQEAKICAgICAvKgogICAgICAqIE5vIGhlYWRlciBwb2ludGVyIHdhcyBmb3VuZC4KICAgICAgKiBIb3dldmVyLCBzb21lIGhlYWRlcnM6ICJEYXRlIiwgIlNlcnZlciIsICJDb250ZW50LUxlbmd0aCIsCi0gICAgICogYW5kICJMYXN0LU1vZGlmaWVkIiBoYXZlIGEgc3BlY2lhbCBoYW5kbGluZyBpbiB0aGUgaGVhZGVyIGZpbHRlcgotICAgICAqIGJ1dCB3ZSBkbyBub3Qgc2V0IHVwIHRoZWlyIHBvaW50ZXJzIGluIHRoZSBmaWx0ZXIgYmVjYXVzZQotICAgICAqIHRoZXkgYXJlIHRvbyBzZWxkb20gbmVlZGVkIHRvIGJlIGxvZ2dlZC4KKyAgICAgKiBhbmQgIkxhc3QtTW9kaWZpZWQiIGhhdmUgYSBzcGVjaWFsIGhhbmRsaW5nIGluIHRoZSBoZWFkZXIgZmlsdGVyLAorICAgICAqIGJ1dCB3ZSBkbyBub3Qgc2V0IHVwIHRoZWlyIHBvaW50ZXJzIGluIHRoZSBmaWx0ZXIsCisgICAgICogYmVjYXVzZSB0aGV5IGFyZSB0b28gc2VsZG9tIG5lZWRlZCB0byBiZSBsb2dnZWQuCiAgICAgICovCiAKICAgICBpZiAob3AtPmRhdGEgPT0gb2Zmc2V0b2Yobmd4X2h0dHBfaGVhZGVyc19vdXRfdCwgZGF0ZSkpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCmluZGV4IDdmMDMxY2YuLjM0MzM2YWQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYwpAQCAtNzA1LDggKzcwNSw2IEBACiAgICAgdV9jaGFyICBjLCBjaCwgZGVjb2RlZCwgKnAsICp1OwogICAgIGVudW0gewogICAgICAgICBzd191c3VhbCA9IDAsCi0gICAgICAgIHN3X2NvbG9uLAotICAgICAgICBzd19jb2xvbl9zbGFzaCwKICAgICAgICAgc3dfc2xhc2gsCiAgICAgICAgIHN3X2RvdCwKICAgICAgICAgc3dfZG90X2RvdCwKQEAgLTc3NCwxMCArNzcyLDYgQEAKICAgICAgICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgICAgIHItPmFyZ3Nfc3RhcnQgPSBwOwogICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfY29sb247Ci0gICAgICAgICAgICAgICAgKnUrKyA9IGNoOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnLic6CiAgICAgICAgICAgICAgICAgci0+dXJpX2V4dCA9IHUgKyAxOwogICAgICAgICAgICAgICAgICp1KysgPSBjaDsKQEAgLTc4OSw2NyArNzgzLDYgQEAKICAgICAgICAgICAgIGNoID0gKnArKzsKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2Ugc3dfY29sb246Ci0gICAgICAgICAgICBzd2l0Y2goY2gpIHsKLSNpZiAoTkdYX1dJTjMyKQotICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfY29sb25fc2xhc2g7Ci0gICAgICAgICAgICAgICAgKnUrKyA9ICcvJzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgICAgICAgY2FzZSAnLyc6Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBzd19jb2xvbl9zbGFzaDsKLSAgICAgICAgICAgICAgICAqdSsrID0gY2g7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICc6JzoKLSAgICAgICAgICAgICAgICAqdSsrID0gY2g7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICclJzoKLSAgICAgICAgICAgICAgICBxdW90ZWRfc3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3F1b3RlZDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJz8nOgotICAgICAgICAgICAgICAgIHItPmFyZ3Nfc3RhcnQgPSBwOwotICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBzd191c3VhbDsKLSAgICAgICAgICAgICAgICAqdSsrID0gY2g7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaCA9ICpwKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIHN3X2NvbG9uX3NsYXNoOgotICAgICAgICAgICAgc3dpdGNoKGNoKSB7Ci0jaWYgKE5HWF9XSU4zMikKLSAgICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3NsYXNoOwotICAgICAgICAgICAgICAgICp1KysgPSAnLyc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICAgICAgICAgIGNhc2UgJy8nOgotICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfc2xhc2g7Ci0gICAgICAgICAgICAgICAgKnUrKyA9IGNoOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnLic6Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBzd19kb3Q7Ci0gICAgICAgICAgICAgICAgKnUrKyA9IGNoOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgICAgcXVvdGVkX3N0YXRlID0gc3RhdGU7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBzd19xdW90ZWQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICc/JzoKLSAgICAgICAgICAgICAgICByLT5hcmdzX3N0YXJ0ID0gcDsKLSAgICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfdXN1YWw7Ci0gICAgICAgICAgICAgICAgKnUrKyA9IGNoOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2ggPSAqcCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgY2FzZSBzd19zbGFzaDoKICAgICAgICAgICAgIHN3aXRjaChjaCkgewogI2lmIChOR1hfV0lOMzIpCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggNDYxYzAyOC4uMTUyN2FmMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMzMsMjQgKzMzLDE5IEBACiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF9zZXRfbGluZ2VyaW5nX2Nsb3NlKG5neF9odHRwX3JlcXVlc3RfdCAqcik7CiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF9saW5nZXJpbmdfY2xvc2VfaGFuZGxlcihuZ3hfZXZlbnRfdCAqZXYpOwogCi1zdGF0aWMgdm9pZCBuZ3hfaHR0cF9jbGllbnRfZXJyb3Iobmd4X2h0dHBfcmVxdWVzdF90ICpyLAotICAgIGludCBjbGllbnRfZXJyb3IsIGludCBlcnJvcik7CiBzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIAogCi0vKiBOR1hfSFRUUF9QQVJTRV8uLi4gZXJyb3JzICovCitzdGF0aWMgY2hhciAqbmd4X2h0dHBfY2xpZW50X2Vycm9yc1tdID0gewogCi1zdGF0aWMgY2hhciAqY2xpZW50X2hlYWRlcl9lcnJvcnNbXSA9IHsKLSAgICAiY2xpZW50ICVWIHNlbnQgaW52YWxpZCBtZXRob2QgXCIlVlwiIiwKLSAgICAiY2xpZW50ICVWIHNlbnQgaW52YWxpZCByZXF1ZXN0IFwiJVZcIiIsCi0gICAgImNsaWVudCAlViBzZW50IHRvbyBsb25nIFVSSSBpbiByZXF1ZXN0IFwiJVZcIiIsCi0gICAgImNsaWVudCAlViBzZW50IGludmFsaWQgbWV0aG9kIGluIEhUVFAvMC45IHJlcXVlc3QgXCIlVlwiIiwKKyAgICAvKiBOR1hfSFRUUF9QQVJTRV9JTlZBTElEX01FVEhPRCAqLworICAgICJjbGllbnQgc2VudCBpbnZhbGlkIG1ldGhvZCIsCiAKLSAgICAiY2xpZW50ICVWIHNlbnQgaW52YWxpZCBoZWFkZXIsIFVSTDogXCIlVlwiIiwKLSAgICAiY2xpZW50ICVWIHNlbnQgdG9vIGxvbmcgaGVhZGVyIGxpbmUsIFVSTDogXCIlVlwiIiwKLSAgICAiY2xpZW50ICVWIHNlbnQgSFRUUC8xLjEgcmVxdWVzdCB3aXRob3V0IFwiSG9zdFwiIGhlYWRlciwgVVJMOiBcIiVWXCIiLAotICAgICJjbGllbnQgJVYgc2VudCBpbnZhbGlkIFwiQ29udGVudC1MZW5ndGhcIiBoZWFkZXIsIFVSTDogXCIlVlwiIiwKLSAgICAiY2xpZW50ICVWIHNlbnQgUE9TVCBtZXRob2Qgd2l0aG91dCBcIkNvbnRlbnQtTGVuZ3RoXCIgaGVhZGVyLCBVUkw6IFwiJVZcIiIsCisgICAgLyogTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9SRVFVRVNUICovCisgICAgImNsaWVudCBzZW50IGludmFsaWQgcmVxdWVzdCIsCisKKyAgICAvKiBOR1hfSFRUUF9QQVJTRV9JTlZBTElEXzA5X01FVEhPRCAqLworICAgICJjbGllbnQgc2VudCBpbnZhbGlkIG1ldGhvZCBpbiBIVFRQLzAuOSByZXF1ZXN0IgogfTsKIAogCkBAIC0xOTksNiArMTk0LDcgQEAKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICpyOwogICAgIG5neF9odHRwX2luX3BvcnRfdCAgICAgICAgKmluX3BvcnQ7CiAgICAgbmd4X2h0dHBfaW5fYWRkcl90ICAgICAgICAqaW5fYWRkcjsKKyAgICBuZ3hfaHR0cF9sb2dfY3R4X3QgICAgICAgICpjdHg7CiAgICAgbmd4X2h0dHBfY29ubmVjdGlvbl90ICAgICAqaGM7CiAgICAgbmd4X2h0dHBfc2VydmVyX25hbWVfdCAgICAqc2VydmVyX25hbWU7CiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKQEAgLTM1OSw3ICszNTUsNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFRoZSBtYWpvcml0eSBvZiBicm93c2VycyBkbyBub3Qgc2VuZCB0aGUgImNsb3NlIG5vdGlmeSIgYWxlcnQuCiAgICAgICAgICAgICAgKiBBbW9uZyB0aGVtIGFyZSBNU0lFLCBNb3ppbGxhLCBOZXRzY2FwZSA0LCBLb25xdWVyb3IsIGFuZCBMaW5rcy4KLSAgICAgICAgICAgICAqIEFuZCB3aGF0IGlzIG1vcmUgTVNJRSBpZ25vcmVzIHRoZSBzZXJ2ZXIncyBhbGVydC4KKyAgICAgICAgICAgICAqIEFuZCB3aGF0IGlzIG1vcmUsIE1TSUUgaWdub3JlcyB0aGUgc2VydmVyJ3MgYWxlcnQuCiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICogT3BlcmEgYWx3YXlzIHNlbmRzIHRoZSBhbGVydC4KICAgICAgICAgICAgICAqLwpAQCAtNDM5LDYgKzQzNSw5IEBACiAKICAgICByLT5odHRwX3N0YXRlID0gTkdYX0hUVFBfUkVBRElOR19SRVFVRVNUX1NUQVRFOwogCisgICAgY3R4ID0gYy0+bG9nLT5kYXRhOworICAgIGN0eC0+cmVxdWVzdCA9IHI7CisKICNpZiAoTkdYX1NUQVRfU1RVQikKICAgICBuZ3hfYXRvbWljX2luYyhuZ3hfc3RhdF9yZWFkaW5nKTsKICAgICByLT5zdGF0X3JlYWRpbmcgPSAxOwpAQCAtNDY3LDcgKzQ2NiwxMCBAQAogICAgICAgICAgICAgICAgICAgICJodHRwIGNoZWNrIHNzbCBoYW5kc2hha2UiKTsKIAogICAgIGlmIChyZXYtPnRpbWVkb3V0KSB7Ci0gICAgICAgIG5neF9odHRwX2NsaWVudF9lcnJvcihyLCAwLCBOR1hfSFRUUF9SRVFVRVNUX1RJTUVfT1VUKTsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgTkdYX0VUSU1FRE9VVCwgImNsaWVudCB0aW1lZCBvdXQiKTsKKyAgICAgICAgYy0+dGltZWRvdXQgPSAxOworICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX1JFUVVFU1RfVElNRV9PVVQpOworICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MjgsNyArNTMwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgImh0dHAgcHJvY2VzcyByZXF1ZXN0IGxpbmUiKTsKIAogICAgIGlmIChyZXYtPnRpbWVkb3V0KSB7Ci0gICAgICAgIG5neF9odHRwX2NsaWVudF9lcnJvcihyLCAwLCBOR1hfSFRUUF9SRVFVRVNUX1RJTUVfT1VUKTsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgTkdYX0VUSU1FRE9VVCwgImNsaWVudCB0aW1lZCBvdXQiKTsKKyAgICAgICAgYy0+dGltZWRvdXQgPSAxOworICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX1JFUVVFU1RfVElNRV9PVVQpOworICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NzIsMTQgKzU3NywxMCBAQAogCiAgICAgICAgICAgICAgICAgcmMgPSBuZ3hfaHR0cF9wYXJzZV9jb21wbGV4X3VyaShyKTsKIAotICAgICAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpIHsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCByYyk7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocmMgIT0gTkdYX09LKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2NsaWVudF9lcnJvcihyLCByYywgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOworICAgICAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfSFRUUF9QQVJTRV9JTlZBTElEX1JFUVVFU1QpIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgaW52YWxpZCByZXF1ZXN0Iik7CisgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCkBAIC02MzIsOSArNjMzLDYgQEAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgZXh0ZW46IFwiJVZcIiIsICZyLT5leHRlbik7CiAKLSAgICAgICAgICAgIGN0eCA9IGMtPmxvZy0+ZGF0YTsKLSAgICAgICAgICAgIGN0eC0+cmVxdWVzdCA9IHI7Ci0KICAgICAgICAgICAgIGlmIChyLT5odHRwX3ZlcnNpb24gPCBOR1hfSFRUUF9WRVJTSU9OXzEwKSB7CiAgICAgICAgICAgICAgICAgcmV2LT5ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfYmxvY2tfcmVhZDsKICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9oYW5kbGVyKHIpOwpAQCAtNjY1LDMzICs2NjMsMTUgQEAKICAgICAgICAgICAgIG5neF9odHRwX3Byb2Nlc3NfcmVxdWVzdF9oZWFkZXJzKHJldik7CiAKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIH0gZWxzZSBpZiAocmMgIT0gTkdYX0FHQUlOKSB7CisgICAgICAgIGlmIChyYyAhPSBOR1hfQUdBSU4pIHsKIAogICAgICAgICAgICAgLyogdGhlcmUgd2FzIGVycm9yIHdoaWxlIGEgcmVxdWVzdCBsaW5lIHBhcnNpbmcgKi8KIAotICAgICAgICAgICAgbmd4X2h0dHBfY2xpZW50X2Vycm9yKHIsIHJjLCBOR1hfSFRUUF9CQURfUkVRVUVTVCk7Ci0KLSNpZiAwCi0gICAgICAgICAgICBmb3IgKHAgPSByLT5yZXF1ZXN0X3N0YXJ0OyBwIDwgci0+aGVhZGVyX2luLT5sYXN0OyBwKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoKnAgPT0gQ1IgfHwgKnAgPT0gTEYpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByLT5yZXF1ZXN0X2xpbmUubGVuID0gcCAtIHItPnJlcXVlc3Rfc3RhcnQ7Ci0gICAgICAgICAgICByLT5yZXF1ZXN0X2xpbmUuZGF0YSA9IHItPnJlcXVlc3Rfc3RhcnQ7Ci0KLSAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfSFRUUF9QQVJTRV9JTlZBTElEX01FVEhPRCkgewotICAgICAgICAgICAgICAgIHItPmh0dHBfdmVyc2lvbiA9IE5HWF9IVFRQX1ZFUlNJT05fMTA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5neF9odHRwX2NsaWVudF9lcnJvcihyLCByYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmMgPT0gTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9NRVRIT0QpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hUVFBfTk9UX0lNUExFTUVOVEVEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfSFRUUF9CQURfUkVRVUVTVCk7Ci0jZW5kaWYKLQorICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xpZW50X2Vycm9yc1tyYyAtIE5HWF9IVFRQX0NMSUVOVF9FUlJPUl0pOworICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9CQURfUkVRVUVTVCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzA4LDggKzY4OCwxNSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocnYgPT0gTkdYX0RFQ0xJTkVEKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xpZW50X2Vycm9yKHIsIE5HWF9IVFRQX1BBUlNFX1RPT19MT05HX1VSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hUVFBfUkVRVUVTVF9VUklfVE9PX0xBUkdFKTsKKyAgICAgICAgICAgICAgICBjdHggPSBjLT5sb2ctPmRhdGE7CisgICAgICAgICAgICAgICAgY3R4LT5yZXF1ZXN0ID0gcjsKKworICAgICAgICAgICAgICAgIHItPnJlcXVlc3RfbGluZS5sZW4gPSByLT5oZWFkZXJfaW4tPmVuZCAtIHItPnJlcXVlc3Rfc3RhcnQ7CisgICAgICAgICAgICAgICAgci0+cmVxdWVzdF9saW5lLmRhdGEgPSByLT5yZXF1ZXN0X3N0YXJ0OworCisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgc2VudCB0b28gbG9uZyBVUkkiKTsKKyAgICAgICAgICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX1JFUVVFU1RfVVJJX1RPT19MQVJHRSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03MzQsNyArNzIxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgImh0dHAgcHJvY2VzcyByZXF1ZXN0IGhlYWRlciBsaW5lIik7CiAKICAgICBpZiAocmV2LT50aW1lZG91dCkgewotICAgICAgICBuZ3hfaHR0cF9jbGllbnRfZXJyb3IociwgMCwgTkdYX0hUVFBfUkVRVUVTVF9USU1FX09VVCk7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIE5HWF9FVElNRURPVVQsICJjbGllbnQgdGltZWQgb3V0Iik7CisgICAgICAgIGMtPnRpbWVkb3V0ID0gMTsKKyAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCBOR1hfSFRUUF9SRVFVRVNUX1RJTUVfT1VUKTsKKyAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzU1LDggKzc0NSwxMyBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChydiA9PSBOR1hfREVDTElORUQpIHsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xpZW50X2Vycm9yKHIsIE5HWF9IVFRQX1BBUlNFX1RPT19MT05HX0hFQURFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX0JBRF9SRVFVRVNUKTsKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmxlbiA9IHItPmhlYWRlcl9pbi0+ZW5kIC0gci0+aGVhZGVyX25hbWVfc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlci5kYXRhID0gci0+aGVhZGVyX25hbWVfc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzZW50IHRvbyBsb25nIGhlYWRlciBsaW5lOiBcIiVWXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoZWFkZXIpOworICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0JBRF9SRVFVRVNUKTsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTc3OSw4ICs3NzQsOCBAQAogICAgICAgICAgICAgICAgIGhlYWRlci5sZW4gPSByLT5oZWFkZXJfZW5kIC0gci0+aGVhZGVyX25hbWVfc3RhcnQ7CiAgICAgICAgICAgICAgICAgaGVhZGVyLmRhdGEgPSByLT5oZWFkZXJfbmFtZV9zdGFydDsKIAotICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgc2VudCBpbnZhbGlkIGhlYWRlcjogXCIlVlwiLCBpZ25vcmVkLCIsCisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgc2VudCBpbnZhbGlkIGhlYWRlciBsaW5lOiBcIiVWXCIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhlYWRlcik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC04MzgsOCArODMzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoLT5rZXksICZoLT52YWx1ZSk7CiAKICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgfSBlbHNlIGlmIChyYyA9PSBOR1hfSFRUUF9QQVJTRV9IRUFERVJfRE9ORSkgeworICAgICAgICBpZiAocmMgPT0gTkdYX0hUVFBfUEFSU0VfSEVBREVSX0RPTkUpIHsKIAogICAgICAgICAgICAgLyogYSB3aG9sZSBoZWFkZXIgaGFzIGJlZW4gcGFyc2VkIHN1Y2Nlc3NmdWxseSAqLwogCkBAIC04NTMsNyArODQ5LDYgQEAKICAgICAgICAgICAgIHJjID0gbmd4X2h0dHBfcHJvY2Vzc19yZXF1ZXN0X2hlYWRlcihyKTsKIAogICAgICAgICAgICAgaWYgKHJjICE9IE5HWF9PSykgewotICAgICAgICAgICAgICAgIG5neF9odHRwX2NsaWVudF9lcnJvcihyLCByYywgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtODcxLDM3ICs4NjYsMjUgQEAKICAgICAgICAgICAgIHJldi0+ZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX2Jsb2NrX3JlYWQ7CiAgICAgICAgICAgICBuZ3hfaHR0cF9oYW5kbGVyKHIpOwogICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIH0gZWxzZSBpZiAocmMgIT0gTkdYX0FHQUlOKSB7Ci0KLSAgICAgICAgICAgIC8qIHRoZXJlIHdhcyBlcnJvciB3aGlsZSBhIGhlYWRlciBsaW5lIHBhcnNpbmcgKi8KLQotI2lmIChOR1hfREVCVUcpCi0gICAgICAgICAgICBpZiAocmMgPT0gTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IRUFERVIKLSAgICAgICAgICAgICAgICAmJiAocmV2LT5sb2ctPmxvZ19sZXZlbCAmIE5HWF9MT0dfREVCVUdfSFRUUCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdV9jaGFyICpwOwotICAgICAgICAgICAgICAgIGZvciAocCA9IHItPmhlYWRlcl9uYW1lX3N0YXJ0OwotICAgICAgICAgICAgICAgICAgICAgcCA8IHItPmhlYWRlcl9pbi0+bGFzdCAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICBwKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKnAgPT0gTEYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICpwID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHJldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIGludmFsaWQgaGVhZGVyOiBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcl9uYW1lX3N0YXJ0KTsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgICAgICBuZ3hfaHR0cF9jbGllbnRfZXJyb3IociwgcmMsIE5HWF9IVFRQX0JBRF9SRVFVRVNUKTsKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIC8qIE5HWF9BR0FJTjogYSBoZWFkZXIgbGluZSBwYXJzaW5nIGlzIHN0aWxsIG5vdCBjb21wbGV0ZSAqLworICAgICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7CiAKKyAgICAgICAgICAgIC8qIGEgaGVhZGVyIGxpbmUgcGFyc2luZyBpcyBzdGlsbCBub3QgY29tcGxldGUgKi8KKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiByYyA9PSBOR1hfSFRUUF9QQVJTRV9JTlZBTElEX0hFQURFUjogIlxyIiBpcyBub3QgZm9sbG93ZWQgYnkgIlxuIiAqLworCisgICAgICAgIGhlYWRlci5sZW4gPSByLT5oZWFkZXJfZW5kIC0gci0+aGVhZGVyX25hbWVfc3RhcnQ7CisgICAgICAgIGhlYWRlci5kYXRhID0gci0+aGVhZGVyX25hbWVfc3RhcnQ7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzZW50IGludmFsaWQgaGVhZGVyIGxpbmU6IFwiJVZcXHIuLi5cIiIsCisgICAgICAgICAgICAgICAgICAgICAgJmhlYWRlcik7CisgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOworICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOworICAgICAgICByZXR1cm47CiAgICAgfQogfQogCkBAIC0xMTA4LDggKzEwOTEsOSBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfcHJvY2Vzc19yZXF1ZXN0X2hlYWRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgdV9jaGFyICAqdWEsICp1c2VyX2FnZW50LCBjaDsKLSAgICBzaXplX3QgICBsZW47CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAqdWEsICp1c2VyX2FnZW50LCBjaDsKKyAgICBuZ3hfaHR0cF9jb3JlX3Nydl9jb25mX3QgICAqY3NjZjsKIAogICAgIGlmIChyLT5oZWFkZXJzX2luLmhvc3QpIHsKICAgICAgICAgZm9yIChsZW4gPSAwOyBsZW4gPCByLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLmxlbjsgbGVuKyspIHsKQEAgLTExMjEsMTYgKzExMDUsMzMgQEAKIAogICAgICAgICAgICAgci0+aGVhZGVyc19pbi5ob3N0LT52YWx1ZS5kYXRhW2xlbl0gPSBuZ3hfdG9sb3dlcihjaCk7CiAgICAgICAgIH0KKwogICAgICAgICByLT5oZWFkZXJzX2luLmhvc3RfbmFtZV9sZW4gPSBsZW47CiAKICAgICAgICAgaWYgKG5neF9odHRwX2ZpbmRfdmlydHVhbF9zZXJ2ZXIocikgIT0gTkdYX09LKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IT1NUOworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzZW50IGludmFsaWQgXCJIb3N0XCIgaGVhZGVyIik7CisKKyAgICAgICAgICAgIGNzY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX3Nydl9jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKworICAgICAgICAgICAgaWYgKGNzY2YtPnJlc3RyaWN0X2hvc3RfbmFtZXMgPT0gTkdYX0hUVFBfUkVTVFJJQ1RfSE9TVF9DTE9TRSkgeworICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOworICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oci0+Y29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlZBTElEX0hPU1QpOworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHItPmh0dHBfdmVyc2lvbiA+IE5HWF9IVFRQX1ZFUlNJT05fMTApIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9QQVJTRV9OT19IT1NUX0hFQURFUjsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgc2VudCBIVFRQLzEuMSByZXF1ZXN0IHdpdGhvdXQgXCJIb3N0XCIgaGVhZGVyIik7CisgICAgICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0JBRF9SRVFVRVNUKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KKwogICAgICAgICByLT5oZWFkZXJzX2luLmhvc3RfbmFtZV9sZW4gPSAwOwogICAgIH0KIApAQCAtMTE0MCwxNiArMTE0MSwyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoLT52YWx1ZS5sZW4pOwogCiAgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24gPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9DTF9IRUFERVI7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgaW52YWxpZCBcIkNvbnRlbnQtTGVuZ3RoXCIgaGVhZGVyIik7CisgICAgICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0JBRF9SRVFVRVNUKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoci0+bWV0aG9kID09IE5HWF9IVFRQX1BPU1QgJiYgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uID09IC0xKSB7Ci0gICAgICAgIHJldHVybiBOR1hfSFRUUF9QQVJTRV9QT1NUX1dPX0NMX0hFQURFUjsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICJjbGllbnQgc2VudCBQT1NUIG1ldGhvZCB3aXRob3V0IFwiQ29udGVudC1MZW5ndGhcIiBoZWFkZXIiKTsKKyAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9CQURfUkVRVUVTVCk7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCiAgICAgaWYgKHItPnBsYWluX2h0dHApIHsKLSAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1BBUlNFX0hUVFBfVE9fSFRUUFM7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzZW50IHBsYWluIEhUVFAgcmVxdWVzdCB0byBIVFRQUyBwb3J0Iik7CisgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfVE9fSFRUUFMpOworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAogICAgIGlmIChyLT5oZWFkZXJzX2luLmNvbm5lY3Rpb24pIHsKQEAgLTE0NTcsNyArMTQ2NywxMSBAQAogCiAgICAgaWYgKHdldi0+dGltZWRvdXQpIHsKICAgICAgICAgaWYgKCF3ZXYtPmRlbGF5ZWQpIHsKLSAgICAgICAgICAgIG5neF9odHRwX2NsaWVudF9lcnJvcihyLCAwLCBOR1hfSFRUUF9SRVFVRVNUX1RJTUVfT1VUKTsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIE5HWF9FVElNRURPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgdGltZWQgb3V0Iik7CisgICAgICAgICAgICBjLT50aW1lZG91dCA9IDE7CisgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX1JFUVVFU1RfVElNRV9PVVQpOworICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0yMjY3LDEwNSArMjI4MSwxMSBAQAogfQogCiAKLXN0YXRpYyB2b2lkCi1uZ3hfaHR0cF9jbGllbnRfZXJyb3Iobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBpbnQgY2xpZW50X2Vycm9yLCBpbnQgZXJyb3IpCi17Ci0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAqcDsKLSAgICBuZ3hfaHR0cF9sb2dfY3R4X3QgICAgICAgICpjdHg7Ci0gICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKLQotICAgIGN0eCA9IHItPmNvbm5lY3Rpb24tPmxvZy0+ZGF0YTsKLQotICAgIGlmIChlcnJvciA9PSBOR1hfSFRUUF9SRVFVRVNUX1RJTUVfT1VUKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIE5HWF9FVElNRURPVVQsCi0gICAgICAgICAgICAgICAgICAgICAgImNsaWVudCB0aW1lZCBvdXQiKTsKLSAgICAgICAgci0+Y29ubmVjdGlvbi0+dGltZWRvdXQgPSAxOwotICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIGVycm9yKTsKLSAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihyLT5jb25uZWN0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+aGFuZGxlciA9IE5VTEw7Ci0KLSAgICBpZiAoY3R4LT5yZXF1ZXN0KSB7Ci0KLSAgICAgICAgc3dpdGNoIChjbGllbnRfZXJyb3IpIHsKLQotICAgICAgICBjYXNlIE5HWF9IVFRQX1BBUlNFX0lOVkFMSURfSE9TVDoKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiY2xpZW50ICVWIHNlbnQgaW52YWxpZCBcIkhvc3RcIiBoZWFkZXIgXCIlVlwiLCBVUkw6IFwiJVZcIiIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5jbGllbnQsICZyLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLAotICAgICAgICAgICAgICAgICAgICZjdHgtPnJlcXVlc3QtPnVucGFyc2VkX3VyaSk7Ci0KLSAgICAgICAgICAgIGVycm9yID0gTkdYX0hUVFBfSU5WQUxJRF9IT1NUOwotCi0gICAgICAgICAgICBjc2NmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9zcnZfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7Ci0KLSAgICAgICAgICAgIGlmIChjc2NmLT5yZXN0cmljdF9ob3N0X25hbWVzID09IE5HWF9IVFRQX1JFU1RSSUNUX0hPU1RfQ0xPU0UpIHsKLSAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIGVycm9yKTsKLSAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKHItPmNvbm5lY3Rpb24pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBOR1hfSFRUUF9QQVJTRV9IVFRQX1RPX0hUVFBTOgotICAgICAgICAgICAgZXJyb3IgPSBOR1hfSFRUUF9UT19IVFRQUzsKLSAgICAgICAgICAgIGlmIChjdHgtPnJlcXVlc3QtPmhlYWRlcnNfaW4ucmVmZXJlcikgewotICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgImNsaWVudCAlViBzZW50IHBsYWluIEhUVFAgcmVxdWVzdCB0byBIVFRQUyBwb3J0LCAiCi0gICAgICAgICAgICAgICAgICAgICJVUkw6IFwiJVZcIiwgcmVmZXJyZXIgXCIlVlwiIiwKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5jbGllbnQsICZjdHgtPnJlcXVlc3QtPnVucGFyc2VkX3VyaSwKLSAgICAgICAgICAgICAgICAgICAgJmN0eC0+cmVxdWVzdC0+aGVhZGVyc19pbi5yZWZlcmVyLT52YWx1ZSk7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAiY2xpZW50ICVWIHNlbnQgcGxhaW4gSFRUUCByZXF1ZXN0IHRvIEhUVFBTIHBvcnQsICIKLSAgICAgICAgICAgICAgICAgICAgIlVSTDogXCIlVlwiIiwgY3R4LT5jbGllbnQsICZjdHgtPnJlcXVlc3QtPnVucGFyc2VkX3VyaSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgIGNsaWVudF9oZWFkZXJfZXJyb3JzW2NsaWVudF9lcnJvciAtIE5HWF9IVFRQX0NMSUVOVF9FUlJPUl0sCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y2xpZW50LCAmY3R4LT5yZXF1ZXN0LT51bnBhcnNlZF91cmkpOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgewotCi0gICAgICAgIGlmIChlcnJvciA9PSBOR1hfSFRUUF9SRVFVRVNUX1VSSV9UT09fTEFSR0UpIHsKLSAgICAgICAgICAgIHItPnJlcXVlc3RfbGluZS5sZW4gPSByLT5oZWFkZXJfaW4tPmVuZCAtIHItPnJlcXVlc3Rfc3RhcnQ7Ci0gICAgICAgICAgICByLT5yZXF1ZXN0X2xpbmUuZGF0YSA9IHItPnJlcXVlc3Rfc3RhcnQ7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChyLT5yZXF1ZXN0X2xpbmUuZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChwID0gci0+cmVxdWVzdF9zdGFydDsgcCA8IHItPmhlYWRlcl9pbi0+bGFzdDsgcCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgqcCA9PSBDUiB8fCAqcCA9PSBMRikgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByLT5yZXF1ZXN0X2xpbmUubGVuID0gcCAtIHItPnJlcXVlc3Rfc3RhcnQ7Ci0gICAgICAgICAgICAgICAgci0+cmVxdWVzdF9saW5lLmRhdGEgPSByLT5yZXF1ZXN0X3N0YXJ0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICBjbGllbnRfaGVhZGVyX2Vycm9yc1tjbGllbnRfZXJyb3IgLSBOR1hfSFRUUF9DTElFTlRfRVJST1JdLAotICAgICAgICAgICAgICAgICAgICBjdHgtPmNsaWVudCwgJnItPnJlcXVlc3RfbGluZSk7Ci0gICAgfQotCi0gICAgci0+Y29ubmVjdGlvbi0+bG9nLT5oYW5kbGVyID0gbmd4X2h0dHBfbG9nX2Vycm9yOwotCi0gICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBlcnJvcik7Ci19Ci0KLQogc3RhdGljIHVfY2hhciAqCiBuZ3hfaHR0cF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogICAgIHVfY2hhciAgICAgICAgICAgICAgKnA7CisgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAqcjsKICAgICBuZ3hfaHR0cF9sb2dfY3R4X3QgICpjdHg7CiAKICAgICBwID0gYnVmOwpAQCAtMjM3NSwyOSArMjI5NSw3MSBAQAogICAgIGlmIChsb2ctPmFjdGlvbikgewogICAgICAgICBwID0gbmd4X3NucHJpbnRmKHAsIGxlbiwgIiB3aGlsZSAlcyIsIGxvZy0+YWN0aW9uKTsKICAgICAgICAgbGVuIC09IHAgLSBidWY7CisgICAgICAgIGJ1ZiA9IHA7CiAgICAgfQogCi0gICAgcCA9IG5neF9zbnByaW50ZihwLCBsZW4sICIsIGNsaWVudDogJVYiLCBjdHgtPmNsaWVudCk7CisgICAgcCA9IG5neF9zbnByaW50ZihidWYsIGxlbiwgIiwgY2xpZW50OiAlViIsIGN0eC0+Y2xpZW50KTsKIAotICAgIGlmIChjdHgtPnJlcXVlc3QgPT0gTlVMTCkgeworICAgIHIgPSBjdHgtPnJlcXVlc3Q7CisKKyAgICBpZiAociA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBwOwogICAgIH0KIAogICAgIGxlbiAtPSBwIC0gYnVmOworICAgIGJ1ZiA9IHA7CiAKLSAgICBpZiAoY3R4LT5yZXF1ZXN0LT5zZXJ2ZXJfbmFtZS5kYXRhKSB7Ci0gICAgICAgIHAgPSBuZ3hfc25wcmludGYocCwgbGVuLCAiLCBob3N0OiAlViIsICZjdHgtPnJlcXVlc3QtPnNlcnZlcl9uYW1lKTsKKyAgICBpZiAoci0+c2VydmVyX25hbWUuZGF0YSkgeworICAgICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiLCBzZXJ2ZXI6ICVWIiwgJnItPnNlcnZlcl9uYW1lKTsKICAgICAgICAgbGVuIC09IHAgLSBidWY7CisgICAgICAgIGJ1ZiA9IHA7CiAgICAgfQogCi0gICAgcCA9IG5neF9zbnByaW50ZihwLCBsZW4sICIsIFVSTDogXCIlVlwiIiwgJmN0eC0+cmVxdWVzdC0+dW5wYXJzZWRfdXJpKTsKKyAgICBpZiAoci0+dW5wYXJzZWRfdXJpLmRhdGEpIHsKKyAgICAgICAgcCA9IG5neF9zbnByaW50ZihidWYsIGxlbiwgIiwgVVJMOiBcIiVWXCIiLCAmci0+dW5wYXJzZWRfdXJpKTsKKyAgICAgICAgbGVuIC09IHAgLSBidWY7CisgICAgICAgIGJ1ZiA9IHA7CiAKLSAgICBpZiAoY3R4LT5yZXF1ZXN0LT5oZWFkZXJzX2luLnJlZmVyZXIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gcDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoci0+cmVxdWVzdF9saW5lLmRhdGEgPT0gTlVMTCAmJiByLT5yZXF1ZXN0X3N0YXJ0KSB7CisgICAgICAgICAgICBmb3IgKHAgPSByLT5yZXF1ZXN0X3N0YXJ0OyBwIDwgci0+aGVhZGVyX2luLT5sYXN0OyBwKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoKnAgPT0gQ1IgfHwgKnAgPT0gTEYpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByLT5yZXF1ZXN0X2xpbmUubGVuID0gcCAtIHItPnJlcXVlc3Rfc3RhcnQ7CisgICAgICAgICAgICByLT5yZXF1ZXN0X2xpbmUuZGF0YSA9IHItPnJlcXVlc3Rfc3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoci0+cmVxdWVzdF9saW5lLmxlbikgeworICAgICAgICAgICAgcCA9IG5neF9zbnByaW50ZihidWYsIGxlbiwgIiwgcmVxdWVzdDogXCIlVlwiIiwgJnItPnJlcXVlc3RfbGluZSk7CisgICAgICAgICAgICBsZW4gLT0gcCAtIGJ1ZjsKKyAgICAgICAgICAgIGJ1ZiA9IHA7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBsZW4gLT0gcCAtIGJ1ZjsKKyAgICByZXR1cm4gbmd4X2h0dHBfbG9nX2Vycm9yX2luZm8ociwgYnVmLCBsZW4pOworfQogCi0gICAgcmV0dXJuIG5neF9zbnByaW50ZihwLCBsZW4sICIsIHJlZmVycmVyOiBcIiVWXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+cmVxdWVzdC0+aGVhZGVyc19pbi5yZWZlcmVyLT52YWx1ZSk7CisKK3VfY2hhciAqCituZ3hfaHR0cF9sb2dfZXJyb3JfaW5mbyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworICAgIHVfY2hhciAgKnA7CisKKyAgICBpZiAoci0+aGVhZGVyc19pbi5ob3N0KSB7CisgICAgICAgIHAgPSBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIsIGhvc3Q6IFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJnItPmhlYWRlcnNfaW4uaG9zdC0+dmFsdWUpOworICAgICAgICBsZW4gLT0gcCAtIGJ1ZjsKKyAgICAgICAgYnVmID0gcDsKKyAgICB9CisKKyAgICBpZiAoci0+aGVhZGVyc19pbi5yZWZlcmVyKSB7CisgICAgICAgIHAgPSBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIsIHJlZmVycmVyOiBcIiVWXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICZyLT5oZWFkZXJzX2luLnJlZmVyZXItPnZhbHVlKTsKKyAgICAgICAgYnVmID0gcDsKKyAgICB9CisKKyAgICByZXR1cm4gYnVmOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCmluZGV4IGExZTlhZTUuLjFiMDY4MGMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKQEAgLTMyLDE4ICszMiwxMCBAQAogI2RlZmluZSBOR1hfSFRUUF9DTElFTlRfRVJST1IgICAgICAgICAgICAgIDEwCiAjZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0lOVkFMSURfTUVUSE9EICAgICAgMTAKICNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9SRVFVRVNUICAgICAxMQotI2RlZmluZSBOR1hfSFRUUF9QQVJTRV9UT09fTE9OR19VUkkgICAgICAgIDEyCi0jZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0lOVkFMSURfMDlfTUVUSE9EICAgMTMKKyNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF8wOV9NRVRIT0QgICAxMgogCi0jZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0hFQURFUl9FUlJPUiAgICAgICAgMTQKLSNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IRUFERVIgICAgICAxNAotI2RlZmluZSBOR1hfSFRUUF9QQVJTRV9UT09fTE9OR19IRUFERVIgICAgIDE1Ci0jZGVmaW5lIE5HWF9IVFRQX1BBUlNFX05PX0hPU1RfSEVBREVSICAgICAgMTYKLSNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9DTF9IRUFERVIgICAxNwotI2RlZmluZSBOR1hfSFRUUF9QQVJTRV9QT1NUX1dPX0NMX0hFQURFUiAgIDE4Ci0KLSNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IT1NUICAgICAgICAxOQotI2RlZmluZSBOR1hfSFRUUF9QQVJTRV9IVFRQX1RPX0hUVFBTICAgICAgIDIwCisjZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0hFQURFUl9FUlJPUiAgICAgICAgMTMKKyNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IRUFERVIgICAgICAxMwogCiAKICNkZWZpbmUgTkdYX0hUVFBfT0sgICAgICAgICAgICAgICAgICAgICAgICAyMDAKQEAgLTMzOCw2ICszMzAsNyBAQAogICAgIC8qIFVSSSB3aXRoICJcMCIgb3IgIiUwMCIgKi8KICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgemVyb19pbl91cmk6MTsKIAorICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZF91bnBhcnNlZF91cmk6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpX2NoYW5nZWQ6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpX2NoYW5nZXM6NDsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKaW5kZXggMDYyNGMwZi4uODlkZWUwZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCkBAIC0xMTM2LDcgKzExMzYsNiBAQAogewogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgKnA7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgZXNjYXBlOwotICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIHVyaTsKICAgICBuZ3hfaHR0cF9sb2dfY3R4X3QgICAgICpjdHg7CiAgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAgICAqcjsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAgICp1OwpAQCAtMTE0OCw3ICsxMTQ3LDcgQEAKICAgICBwZWVyID0gJnUtPnBlZXI7CiAKICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgIiB3aGlsZSAlcywgY2xpZW50OiAlViwgaG9zdDogJVYsIFVSTDogXCIlVlwiLCIKKyAgICAgICAgICAgICAgICAgICAgICIgd2hpbGUgJXMsIGNsaWVudDogJVYsIHNlcnZlcjogJVYsIFVSTDogXCIlVlwiLCIKICAgICAgICAgICAgICAgICAgICAgICIgdXBzdHJlYW06ICVWJVYlcyVWIiwKICAgICAgICAgICAgICAgICAgICAgIGxvZy0+YWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgJnItPmNvbm5lY3Rpb24tPmFkZHJfdGV4dCwKQEAgLTExNzYsMTQgKzExNzUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1LT5sb2NhdGlvbi0+bGVuLCBOR1hfRVNDQVBFX1VSSSk7CiAKICAgICAgICAgICAgIGJ1ZiArPSByLT51cmkubGVuIC0gdS0+bG9jYXRpb24tPmxlbiArIGVzY2FwZTsKLQotICAgICAgICAgICAgaWYgKHItPmFyZ3MubGVuID09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBsZW4gLT0gci0+dXJpLmxlbiAtIHUtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGU7CiAKLSAgICAgICAgICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICI/JVYiLCAmci0+YXJncyk7CisgICAgICAgICAgICBpZiAoci0+YXJncy5sZW4pIHsKKyAgICAgICAgICAgICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiPyVWIiwgJnItPmFyZ3MpOworICAgICAgICAgICAgICAgIGxlbiAtPSBwIC0gYnVmOworICAgICAgICAgICAgICAgIGJ1ZiA9IHA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9sb2dfZXJyb3JfaW5mbyhyLCBidWYsIGxlbik7CiAgICAgICAgIH0KIAogICAgICAgICBwID0gbmd4X3BhbGxvYyhyLT5wb29sLCByLT51cmkubGVuIC0gdS0+bG9jYXRpb24tPmxlbiArIGVzY2FwZSk7CkBAIC0xMTk0LDE3ICsxMTk0LDIzIEBACiAgICAgICAgIG5neF9lc2NhcGVfdXJpKHAsIHItPnVyaS5kYXRhICsgdS0+bG9jYXRpb24tPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpLmxlbiAtIHUtPmxvY2F0aW9uLT5sZW4sIE5HWF9FU0NBUEVfVVJJKTsKIAotICAgICAgICB1cmkubGVuID0gci0+dXJpLmxlbiAtIHUtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGU7Ci0gICAgICAgIHVyaS5kYXRhID0gcDsKKyAgICAgICAgcCA9IG5neF9jcHltZW0oYnVmLCBwLCByLT51cmkubGVuIC0gdS0+bG9jYXRpb24tPmxlbiArIGVzY2FwZSk7CiAKICAgICB9IGVsc2UgewotICAgICAgICB1cmkubGVuID0gci0+dXJpLmxlbiAtIHUtPmxvY2F0aW9uLT5sZW47Ci0gICAgICAgIHVyaS5kYXRhID0gci0+dXJpLmRhdGEgKyB1LT5sb2NhdGlvbi0+bGVuOwotCisgICAgICAgIHAgPSBuZ3hfY3B5bWVtKGJ1Ziwgci0+dXJpLmRhdGEgKyB1LT5sb2NhdGlvbi0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdS0+bG9jYXRpb24tPmxlbik7CiAgICAgfQogCi0gICAgcmV0dXJuIG5neF9zbnByaW50ZihidWYsIGxlbiwgIiVWJXMlViIsIAotICAgICAgICAgICAgICAgICAgICAgICAgJnVyaSwgci0+YXJncy5sZW4gPyAiPyIgOiAiIiwgJnItPmFyZ3MpOworICAgIGxlbiAtPSBwIC0gYnVmOworICAgIGJ1ZiA9IHA7CisKKyAgICBpZiAoci0+YXJncy5sZW4pIHsKKyAgICAgICAgcCA9IG5neF9zbnByaW50ZihidWYsIGxlbiwgIj8lViIsICZyLT5hcmdzKTsKKyAgICAgICAgbGVuIC09IHAgLSBidWY7CisgICAgICAgIGJ1ZiA9IHA7CisgICAgfQorCisgICAgcmV0dXJuIG5neF9odHRwX2xvZ19lcnJvcl9pbmZvKHIsIGJ1ZiwgbGVuKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwppbmRleCA5YzVhN2VlLi4yMzU4OWM5IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCisrKyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKQEAgLTYzMiw3ICs2MzIsMTQgQEAKIAogICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsICJleGl0Iik7CiAKKyAgICAvKgorICAgICAqIHdlIGRvIG5vdCBkZXN0cm95IGN5Y2xlLT5wb29sIGhlcmUgYmVjYXVzZSBhIHNpZ25hbCBoYW5kbGVyCisgICAgICogdGhhdCB1c2VzIGN5Y2xlLT5sb2cgY2FuIGJlIGNhbGxlZCBhdCB0aGlzIHBvaW50CisgICAgICovCisKKyNpZiAwCiAgICAgbmd4X2Rlc3Ryb3lfcG9vbChjeWNsZS0+cG9vbCk7CisjZW5kaWYKIAogICAgIGV4aXQoMCk7CiB9CkBAIC03MTgsNiArNzI1LDEwIEBACiAgICAgICAgICAgICAgKiB3ZSBkbyBub3QgZGVzdHJveSBjeWNsZS0+cG9vbCBoZXJlIGJlY2F1c2UgYSBzaWduYWwgaGFuZGxlcgogICAgICAgICAgICAgICogdGhhdCB1c2VzIGN5Y2xlLT5sb2cgY2FuIGJlIGNhbGxlZCBhdCB0aGlzIHBvaW50CiAgICAgICAgICAgICAgKi8KKworI2lmIDAKKyAgICAgICAgICAgIG5neF9kZXN0cm95X3Bvb2woY3ljbGUtPnBvb2wpOworI2VuZGlmCiAgICAgICAgICAgICBleGl0KDApOwogICAgICAgICB9CiAKQEAgLTczNiw2ICs3NDcsMTEgQEAKICAgICAgICAgICAgICAqIHdlIGRvIG5vdCBkZXN0cm95IGN5Y2xlLT5wb29sIGhlcmUgYmVjYXVzZSBhIHNpZ25hbCBoYW5kbGVyCiAgICAgICAgICAgICAgKiB0aGF0IHVzZXMgY3ljbGUtPmxvZyBjYW4gYmUgY2FsbGVkIGF0IHRoaXMgcG9pbnQKICAgICAgICAgICAgICAqLworCisjaWYgMAorICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChjeWNsZS0+cG9vbCk7CisjZW5kaWYKKwogICAgICAgICAgICAgZXhpdCgwKTsKICAgICAgICAgfQogCg==