ZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC81MHguaHRtbCBiL2RvY3MvaHRtbC81MHguaHRtbAppbmRleCBiMTgwZWQyLi44MzZmYjJkIDEwMDY0NAotLS0gYS9kb2NzL2h0bWwvNTB4Lmh0bWwKKysrIGIvZG9jcy9odG1sLzUweC5odG1sCkBAIC02LDkgKzYsMTMgQEAKIDwvc3R5bGU+CiA8L2hlYWQ+CiA8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgdGV4dD0iYmxhY2siPgotPHA+Cis8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+Cis8dHI+Cis8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiPgogVGhlIHBhZ2UgeW91IGFyZSBsb29raW5nIGZvciBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS48YnIvPgogUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4KLTwvcD4KKzwvdGQ+Cis8L3RyPgorPC90YWJsZT4KIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggY2I1Y2JiNi4uZDg5NDAzMyAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw3OSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjUzIiBkYXRlPSIwNy4wNy4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIGFkZF9oZWFkZXIgxM/CwdfM0cXUINPU0s/LySDXIM/U18XU2SDTIMvPxM/NIDIwNCwgMzAxIMkgMzAyLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJhZGRfaGVhZGVyIiBkaXJlY3RpdmUgYWRkcyB0aGUgc3RyaW5nIHRvIDIwNCwgMzAxLCBhbmQgMzAyIHJlc3BvbnNlcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHNlcnZlciDXIMLMz8vFIHVwc3RyZWFtINDPxMTF0tbJ18HF1CDQwdLBzcXU0iB3ZWlnaHQuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInNlcnZlciIgZGlyZWN0aXZlIGlmIHRoZSAidXBzdHJlYW0iIGNvbnRleHQgc3VwcG9ydHMKK3RoZSAid2VpZ2h0IiBwYXJhbWV0ZXIuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBzZXJ2ZXJfbmFtZSDQz8TExdLWydfBxdQgzcHTy9UgIioiLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJzZXJ2ZXJfbmFtZSIgZGlyZWN0aXZlIHN1cHBvcnRzIHRoZSAiKiIgd2lsZGNhcmQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK25naW54INDPxMTF0tbJ18HF1CDUxczPINrB0NLP08Egws/M2NvFIDJHLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbmdpbnggc3VwcG9ydHMgdGhlIHJlcXVlc3QgYm9keSBzaXplIG1vcmUgdGhhbiAyRy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivF08zJINDSySDJ09DPzNjaz9fBzsnJICJzYXRpc2Z5X2FueSBvbiIgy8zJxc7UINXT0MXbzs8g0NLPyM/EycwgwdXUxc7UycbJy8HDycAsCivXIMzPxyDX06Mg0sHXzs8g2sHQydPBzM9j2CDTz8/C3cXOycUgImFjY2VzcyBmb3JiaWRkZW4gYnkgcnVsZSIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiBhIGNsaWVudCB3YXMgc3VjY2Vzc2Z1bGx5IGF1dGhvcml6ZWQgdXNpbmcgInNhdGlzZnlfYW55IG9uIiwgdGhlbiBhbnl3YXkKK3RoZSAiYWNjZXNzIGZvcmJpZGRlbiBieSBydWxlIiBtZXNzYWdlIHdhcyB3cml0dGVuIGluIHRoZSBsb2cuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorzcXUz8QgUFVUIM3PxyDP28nCz97OzyDOxSDTz9rEwdTYIMbByswgySDXxdLO1dTYIMvPxCA0MDkuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIlBVVCIgbWV0aG9kIG1heSBlcnJvbmVvdXNseSBub3QgY3JlYXRlIGEgZmlsZSBhbmQgcmV0dXJuIHRoZSA0MDkgY29kZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivF08zJINfPINfSxc3RIMHV1MXO1MnGycvBw8nJIElNQVAvUE9QMyDC3MvFzsQg18/a19LB3cHMIM/bycLL1SwgbmdpbngKK9DSz8TPzNbBzCDQ0s/L08nSz9fBzsnFLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgoraWYgdGhlIElNQVAvUE9QMyBiYWNrZW5kIHJldHVybmVkIGFuIGVycm9yLCB0aGVuIG5naW54IGNvbnRpbnVlZCBwcm94eWluZworYW55d2F5LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy41MiIgZGF0ZT0iMDMuMDcuMjAwNiI+CiAKIDxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KQEAgLTQ1MTAsOCArNDU4Myw4IEBACiDTxdLXxdLBIMnaIMTJ0sXL1MnX2SBzZXJ2ZXJfbmFtZS4KIDwvcGFyYT4KIDxwYXJhIGxhbmc9ImVuIj4KLWlmIHRoZSByZXF1ZXN0IGhhcyBubyB0aGUgIkhvc3QiIGhlYWRlciBsaW5lLCB0aGVuIHRoZSBwcm94eV9wcmVzZXJ2ZV9ob3N0Ci1kaXJlY3RpdmUgc2V0IHRoaXMgaGVhZGVyIGxpbmUgdG8gdGhlIGZpcnN0IHNlcnZlciBuYW1lIG9mIHRoZSBzZXJ2ZXJfbmFtZQoraWYgdGhlIHJlcXVlc3QgaGFzIG5vIHRoZSAiSG9zdCIgaGVhZGVyIGxpbmUsIHRoZW4gdGhlICJwcm94eV9wcmVzZXJ2ZV9ob3N0IgorZGlyZWN0aXZlIHNldCB0aGlzIGhlYWRlciBsaW5lIHRvIHRoZSBmaXJzdCBzZXJ2ZXIgbmFtZSBvZiB0aGUgInNlcnZlcl9uYW1lIgogZGlyZWN0aXZlLgogPC9wYXJhPgogPC9jaGFuZ2U+CkBAIC01MTczLDcgKzUyNDYsNyBAQAogyc3FzsEgKi5kb21haW4udGxkINcgxMnSxcvUydfFIHNlcnZlcl9uYW1lIM7FINLBws/UwczJLgogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgotdGhlICouZG9tYWluLnRsZCBuYW1lcyBpbiB0aGUgc2VydmVyX25hbWUgZGlyZWN0aXZlIGRpZCBub3Qgd29yay4KK3RoZSAqLmRvbWFpbi50bGQgbmFtZXMgaW4gdGhlICJzZXJ2ZXJfbmFtZSIgZGlyZWN0aXZlIGRpZCBub3Qgd29yay4KIDwvcGFyYT4KIDwvY2hhbmdlPgogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCBhZDhjNzY4Li41MDc0NmFlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNTIiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjUzIgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwppbmRleCA5NGRmZTYyLi5iNWQ4YjE2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCkBAIC0xMDM2LDYgKzEwMzYsMzcgQEAKIAogCiBjaGFyICoKK25neF9jb25mX3NldF9vZmZfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQoreworICAgIGNoYXIgICpwID0gY29uZjsKKworICAgIG9mZl90ICAgICAgICAgICAgKm9wOworICAgIG5neF9zdHJfdCAgICAgICAgKnZhbHVlOworICAgIG5neF9jb25mX3Bvc3RfdCAgKnBvc3Q7CisKKworICAgIG9wID0gKG9mZl90ICopIChwICsgY21kLT5vZmZzZXQpOworICAgIGlmICgqb3AgIT0gTkdYX0NPTkZfVU5TRVQpIHsKKyAgICAgICAgcmV0dXJuICJpcyBkdXBsaWNhdGUiOworICAgIH0KKworICAgIHZhbHVlID0gY2YtPmFyZ3MtPmVsdHM7CisKKyAgICAqb3AgPSBuZ3hfcGFyc2Vfb2Zmc2V0KCZ2YWx1ZVsxXSk7CisgICAgaWYgKCpvcCA9PSAob2ZmX3QpIE5HWF9FUlJPUikgeworICAgICAgICByZXR1cm4gImludmFsaWQgdmFsdWUiOworICAgIH0KKworICAgIGlmIChjbWQtPnBvc3QpIHsKKyAgICAgICAgcG9zdCA9IGNtZC0+cG9zdDsKKyAgICAgICAgcmV0dXJuIHBvc3QtPnBvc3RfaGFuZGxlcihjZiwgcG9zdCwgb3ApOworICAgIH0KKworICAgIHJldHVybiBOR1hfQ09ORl9PSzsKK30KKworCitjaGFyICoKIG5neF9jb25mX3NldF9tc2VjX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKIHsKICAgICBjaGFyICAqcCA9IGNvbmY7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmggYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmgKaW5kZXggMTdjMjRjNy4uN2Q1MTEyOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oCisrKyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaApAQCAtMjM2LDggKzIzNiw4IEBACiAgICAgICAgIGNvbmYgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKLSNkZWZpbmUgbmd4X2NvbmZfaW5pdF91bnNpZ25lZF92YWx1ZShjb25mLCBkZWZhdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChjb25mID09ICh1bnNpZ25lZCkgTkdYX0NPTkZfVU5TRVQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIG5neF9jb25mX2luaXRfdWludF92YWx1ZShjb25mLCBkZWZhdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoY29uZiA9PSBOR1hfQ09ORl9VTlNFVF9VSU5UKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjb25mID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCkBAIC0yNjEsNyArMjYxLDcgQEAKICAgICAgICAgY29uZiA9IChwcmV2ID09IE5VTEwpID8gZGVmYXVsdCA6IHByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIAotI2RlZmluZSBuZ3hfY29uZl9tZXJnZV91bnNpZ25lZF92YWx1ZShjb25mLCBwcmV2LCBkZWZhdWx0KSAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIG5neF9jb25mX21lcmdlX3VpbnRfdmFsdWUoY29uZiwgcHJldiwgZGVmYXVsdCkgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoY29uZiA9PSBOR1hfQ09ORl9VTlNFVF9VSU5UKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjb25mID0gKHByZXYgPT0gTkdYX0NPTkZfVU5TRVRfVUlOVCkgPyBkZWZhdWx0IDogcHJldjsgICAgICAgICAgICAgICBcCiAgICAgfQpAQCAtMjgxLDYgKzI4MSwxMSBAQAogICAgICAgICBjb25mID0gKHByZXYgPT0gTkdYX0NPTkZfVU5TRVRfU0laRSkgPyBkZWZhdWx0IDogcHJldjsgICAgICAgICAgICAgICBcCiAgICAgfQogCisjZGVmaW5lIG5neF9jb25mX21lcmdlX29mZl92YWx1ZShjb25mLCBwcmV2LCBkZWZhdWx0KSAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoY29uZiA9PSBOR1hfQ09ORl9VTlNFVCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjb25mID0gKHByZXYgPT0gTkdYX0NPTkZfVU5TRVQpID8gZGVmYXVsdCA6IHByZXY7ICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZGVmaW5lIG5neF9jb25mX21lcmdlX3N0cl92YWx1ZShjb25mLCBwcmV2LCBkZWZhdWx0KSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoY29uZi5kYXRhID09IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAocHJldi5kYXRhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zMjgsNiArMzMzLDcgQEAKIGNoYXIgKm5neF9jb25mX3NldF9rZXl2YWxfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKTsKIGNoYXIgKm5neF9jb25mX3NldF9udW1fc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKTsKIGNoYXIgKm5neF9jb25mX3NldF9zaXplX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CitjaGFyICpuZ3hfY29uZl9zZXRfb2ZmX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CiBjaGFyICpuZ3hfY29uZl9zZXRfbXNlY19zbG90KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOwogY2hhciAqbmd4X2NvbmZfc2V0X3NlY19zbG90KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOwogY2hhciAqbmd4X2NvbmZfc2V0X2J1ZnNfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9pbmV0LmMgYi9zcmMvY29yZS9uZ3hfaW5ldC5jCmluZGV4IGYyYjBjZjcuLjdiM2ZlZjMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9pbmV0LmMKKysrIGIvc3JjL2NvcmUvbmd4X2luZXQuYwpAQCAtNDc5LDcgKzQ3OSw2IEBACiAgICAgICAgIH0KIAogICAgICAgICBwZWVycy0+bnVtYmVyID0gaTsKLSAgICAgICAgcGVlcnMtPndlaWdodCA9IDE7CiAKICAgICAgICAgZm9yIChpID0gMDsgaC0+aF9hZGRyX2xpc3RbaV0gIT0gTlVMTDsgaSsrKSB7CiAKQEAgLTUxMSw2ICs1MTAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwZWVycy0+cGVlcltpXS5uYW1lLmRhdGE7CiAKICAgICAgICAgICAgIHBlZXJzLT5wZWVyW2ldLnVyaV9zZXBhcmF0b3IgPSAiIjsKKworICAgICAgICAgICAgcGVlcnMtPnBlZXJbaV0ud2VpZ2h0ID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKKyAgICAgICAgICAgIHBlZXJzLT5wZWVyW2ldLm1heF9mYWlscyA9IE5HWF9DT05GX1VOU0VUX1VJTlQ7CisgICAgICAgICAgICBwZWVycy0+cGVlcltpXS5mYWlsX3RpbWVvdXQgPSBOR1hfQ09ORl9VTlNFVDsKICAgICAgICAgfQogCiAgICAgfSBlbHNlIHsKQEAgLTY0Myw3ICs2NDYsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgcGVlcnMtPm51bWJlciA9IGk7Ci0gICAgICAgIHBlZXJzLT53ZWlnaHQgPSAxOwogCiAgICAgICAgIGZvciAoaSA9IDA7IGgtPmhfYWRkcl9saXN0W2ldICE9IE5VTEw7IGkrKykgewogCkBAIC02NzcsNiArNjc5LDEwIEBACiAgICAgICAgICAgICBwZWVycy0+cGVlcltpXS5uYW1lLmxlbiA9IGxlbiArIHUtPnBvcnRfdGV4dC5sZW47CiAKICAgICAgICAgICAgIHBlZXJzLT5wZWVyW2ldLnVyaV9zZXBhcmF0b3IgPSAiIjsKKworICAgICAgICAgICAgcGVlcnMtPnBlZXJbaV0ud2VpZ2h0ID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKKyAgICAgICAgICAgIHBlZXJzLT5wZWVyW2ldLm1heF9mYWlscyA9IE5HWF9DT05GX1VOU0VUX1VJTlQ7CisgICAgICAgICAgICBwZWVycy0+cGVlcltpXS5mYWlsX3RpbWVvdXQgPSBOR1hfQ09ORl9VTlNFVDsKICAgICAgICAgfQogCiAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9pbmV0LmggYi9zcmMvY29yZS9uZ3hfaW5ldC5oCmluZGV4IDc2MDBlZDguLjMwMTQwMjMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9pbmV0LmgKKysrIGIvc3JjL2NvcmUvbmd4X2luZXQuaApAQCAtMjksNiArMjksNyBAQAogICAgIG5neF9zdHJfdCAgICAgICAgICAgbmFtZTsKICAgICBjaGFyICAgICAgICAgICAgICAgKnVyaV9zZXBhcmF0b3I7CiAKKyAgICBuZ3hfdWludF90ICAgICAgICAgIGN1cnJlbnRfd2VpZ2h0OwogICAgIG5neF91aW50X3QgICAgICAgICAgd2VpZ2h0OwogCiAgICAgbmd4X3VpbnRfdCAgICAgICAgICBmYWlsczsKQEAgLTQ1LDcgKzQ2LDYgQEAKIAogc3RydWN0IG5neF9wZWVyc19zIHsKICAgICBuZ3hfdWludF90ICAgICAgICAgIGN1cnJlbnQ7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICB3ZWlnaHQ7CiAKICAgICBuZ3hfdWludF90ICAgICAgICAgIG51bWJlcjsKICAgICBuZ3hfdWludF90ICAgICAgICAgIGxhc3RfY2FjaGVkOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3BhcnNlLmMgYi9zcmMvY29yZS9uZ3hfcGFyc2UuYwppbmRleCAyOGU1ZDk2Li43ODY4MjQ1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcGFyc2UuYworKysgYi9zcmMvY29yZS9uZ3hfcGFyc2UuYwpAQCAtNDcsNiArNDcsNTEgQEAKIH0KIAogCitvZmZfdAorbmd4X3BhcnNlX29mZnNldChuZ3hfc3RyX3QgKmxpbmUpCit7CisgICAgdV9jaGFyICAgICBsYXN0OworICAgIG9mZl90ICAgICAgb2Zmc2V0OworICAgIHNpemVfdCAgICAgbGVuOworICAgIG5neF9pbnRfdCAgc2NhbGU7CisKKyAgICBsZW4gPSBsaW5lLT5sZW47CisgICAgbGFzdCA9IGxpbmUtPmRhdGFbbGVuIC0gMV07CisKKyAgICBzd2l0Y2ggKGxhc3QpIHsKKyAgICBjYXNlICdLJzoKKyAgICBjYXNlICdrJzoKKyAgICAgICAgbGVuLS07CisgICAgICAgIHNjYWxlID0gMTAyNDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdNJzoKKyAgICBjYXNlICdtJzoKKyAgICAgICAgbGVuLS07CisgICAgICAgIHNjYWxlID0gMTAyNCAqIDEwMjQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAnRyc6CisgICAgY2FzZSAnZyc6CisgICAgICAgIGxlbi0tOworICAgICAgICBzY2FsZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzY2FsZSA9IDE7CisgICAgfQorCisgICAgb2Zmc2V0ID0gbmd4X2F0b29mKGxpbmUtPmRhdGEsIGxlbik7CisgICAgaWYgKG9mZnNldCA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBvZmZzZXQgKj0gc2NhbGU7CisKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCisKIG5neF9pbnRfdAogbmd4X3BhcnNlX3RpbWUobmd4X3N0cl90ICpsaW5lLCBuZ3hfaW50X3Qgc2VjKQogewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3BhcnNlLmggYi9zcmMvY29yZS9uZ3hfcGFyc2UuaAppbmRleCA0NjRjZWZjLi5jZjNmMGIyIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcGFyc2UuaAorKysgYi9zcmMvY29yZS9uZ3hfcGFyc2UuaApAQCAtMTYsNiArMTYsNyBAQAogCiAKIHNzaXplX3Qgbmd4X3BhcnNlX3NpemUobmd4X3N0cl90ICpsaW5lKTsKK29mZl90IG5neF9wYXJzZV9vZmZzZXQobmd4X3N0cl90ICpsaW5lKTsKIG5neF9pbnRfdCBuZ3hfcGFyc2VfdGltZShuZ3hfc3RyX3QgKmxpbmUsIG5neF9pbnRfdCBzZWMpOwogCiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKaW5kZXggYjE0OWJmZS4uMWVhNTFmOSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKQEAgLTUxMCw4ICs1MTAsOCBAQAogewogICAgIG5neF9kZXZwb2xsX2NvbmZfdCAqZHBjZiA9IGNvbmY7CiAKLSAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGRwY2YtPmNoYW5nZXMsIDMyKTsKLSAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGRwY2YtPmV2ZW50cywgMzIpOworICAgIG5neF9jb25mX2luaXRfdWludF92YWx1ZShkcGNmLT5jaGFuZ2VzLCAzMik7CisgICAgbmd4X2NvbmZfaW5pdF91aW50X3ZhbHVlKGRwY2YtPmV2ZW50cywgMzIpOwogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jCmluZGV4IGU0NzY2NjcuLjE4NDM0NmEgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMKQEAgLTQ3OSwxMSArNDc5LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5mZCwgcmV2ZW50cyk7CiAgICAgICAgIH0KIAorI2lmIDAKICAgICAgICAgaWYgKHJldmVudHMgJiB+KEVQT0xMSU58RVBPTExPVVR8RVBPTExFUlJ8RVBPTExIVVApKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmFuZ2UgZXBvbGxfd2FpdCgpIGV2ZW50cyBmZDolZCBldjolMDRYRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmZkLCByZXZlbnRzKTsKICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgaWYgKChyZXZlbnRzICYgKEVQT0xMRVJSfEVQT0xMSFVQKSkKICAgICAgICAgICAgICAmJiAocmV2ZW50cyAmIChFUE9MTElOfEVQT0xMT1VUKSkgPT0gMCkKQEAgLTU2NCw3ICs1NjYsNyBAQAogewogICAgIG5neF9lcG9sbF9jb25mX3QgKmVwY2YgPSBjb25mOwogCi0gICAgbmd4X2NvbmZfaW5pdF91bnNpZ25lZF92YWx1ZShlcGNmLT5ldmVudHMsIDUxMik7CisgICAgbmd4X2NvbmZfaW5pdF91aW50X3ZhbHVlKGVwY2YtPmV2ZW50cywgNTEyKTsKIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwppbmRleCA0ZmM5OGU5Li43ZGMxNTYyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCkBAIC0xMjA1LDEwICsxMjA1LDEwIEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGVjZi0+Y29ubmVjdGlvbnMsIGNvbm5lY3Rpb25zKTsKKyAgICBuZ3hfY29uZl9pbml0X3VpbnRfdmFsdWUoZWNmLT5jb25uZWN0aW9ucywgY29ubmVjdGlvbnMpOwogICAgIGN5Y2xlLT5jb25uZWN0aW9uX24gPSBlY2YtPmNvbm5lY3Rpb25zOwogCi0gICAgbmd4X2NvbmZfaW5pdF91bnNpZ25lZF92YWx1ZShlY2YtPnVzZSwgbW9kdWxlLT5jdHhfaW5kZXgpOworICAgIG5neF9jb25mX2luaXRfdWludF92YWx1ZShlY2YtPnVzZSwgbW9kdWxlLT5jdHhfaW5kZXgpOwogCiAgICAgZXZlbnRfbW9kdWxlID0gbW9kdWxlLT5jdHg7CiAgICAgbmd4X2NvbmZfaW5pdF9wdHJfdmFsdWUoZWNmLT5uYW1lLCBldmVudF9tb2R1bGUtPm5hbWUtPmRhdGEpOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwppbmRleCAxNTdjNDgwLi4yYjRjMDhkIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwpAQCAtODEsOCArODEsNiBAQAogICAgICAgICAgICAgICAgICAgICBwYy0+cGVlcnMtPmN1cnJlbnQgPSAwOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHBjLT5wZWVycy0+d2VpZ2h0ID0gcGMtPnBlZXJzLT5wZWVyW3BjLT5wZWVycy0+Y3VycmVudF0ud2VpZ2h0OwotCiAgICAgICAgICAgICAgICAgcGMtPnRyaWVzLS07CiAKICAgICAgICAgICAgICAgICBpZiAocGMtPnRyaWVzKSB7CkBAIC05MiwxNiArOTAsMTYgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcGMtPnBlZXJzLT53ZWlnaHQtLTsKKyAgICAgICAgICAgIHBlZXItPmN1cnJlbnRfd2VpZ2h0LS07CiAKLSAgICAgICAgICAgIGlmIChwYy0+cGVlcnMtPndlaWdodCA9PSAwKSB7CisgICAgICAgICAgICBpZiAocGVlci0+Y3VycmVudF93ZWlnaHQgPT0gMCkgeworICAgICAgICAgICAgICAgIHBlZXItPmN1cnJlbnRfd2VpZ2h0ID0gcGVlci0+d2VpZ2h0OworCiAgICAgICAgICAgICAgICAgcGMtPnBlZXJzLT5jdXJyZW50Kys7CiAKICAgICAgICAgICAgICAgICBpZiAocGMtPnBlZXJzLT5jdXJyZW50ID49IHBjLT5wZWVycy0+bnVtYmVyKSB7CiAgICAgICAgICAgICAgICAgICAgIHBjLT5wZWVycy0+Y3VycmVudCA9IDA7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcGMtPnBlZXJzLT53ZWlnaHQgPSBwYy0+cGVlcnMtPnBlZXJbcGMtPnBlZXJzLT5jdXJyZW50XS53ZWlnaHQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBlbHNlIHsKQEAgLTEzMSw2ICsxMjksMjAgQEAKIAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwZWVyLT5jdXJyZW50X3dlaWdodC0tOworCisgICAgICAgICAgICBpZiAocGVlci0+Y3VycmVudF93ZWlnaHQgPT0gMCkgeworICAgICAgICAgICAgICAgIHBlZXItPmN1cnJlbnRfd2VpZ2h0ID0gcGVlci0+d2VpZ2h0OworCisgICAgICAgICAgICAgICAgaWYgKHBjLT5jdXJfcGVlciA9PSBwYy0+cGVlcnMtPmN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGMtPnBlZXJzLT5jdXJyZW50Kys7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBjLT5wZWVycy0+Y3VycmVudCA+PSBwYy0+cGVlcnMtPm51bWJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgcGMtPnBlZXJzLT5jdXJyZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMzU4LDE1ICszNzAsMjIgQEAKIHZvaWQKIG5neF9ldmVudF9jb25uZWN0X3BlZXJfZmFpbGVkKG5neF9wZWVyX2Nvbm5lY3Rpb25fdCAqcGMsIG5neF91aW50X3QgZG93bikKIHsKLSAgICB0aW1lX3QgIG5vdzsKKyAgICB0aW1lX3QgICAgICAgbm93OworICAgIG5neF9wZWVyX3QgICpwZWVyOwogCiAgICAgaWYgKGRvd24pIHsKICAgICAgICAgbm93ID0gbmd4X3RpbWUoKTsKIAogICAgICAgICAvKiBuZ3hfbG9ja19tdXRleChwYy0+cGVlcnMtPm11dGV4KTsgKi8KIAotICAgICAgICBwYy0+cGVlcnMtPnBlZXJbcGMtPmN1cl9wZWVyXS5mYWlscysrOwotICAgICAgICBwYy0+cGVlcnMtPnBlZXJbcGMtPmN1cl9wZWVyXS5hY2Nlc3NlZCA9IG5vdzsKKyAgICAgICAgcGVlciA9ICZwYy0+cGVlcnMtPnBlZXJbcGMtPmN1cl9wZWVyXTsKKworICAgICAgICBwZWVyLT5mYWlscysrOworICAgICAgICBwZWVyLT5hY2Nlc3NlZCA9IG5vdzsKKworICAgICAgICBpZiAocGVlci0+Y3VycmVudF93ZWlnaHQgPiAxKSB7CisgICAgICAgICAgICBwZWVyLT5jdXJyZW50X3dlaWdodCAvPSAyOworICAgICAgICB9CiAKICAgICAgICAgLyogbmd4X3VubG9ja19tdXRleChwYy0+cGVlcnMtPm11dGV4KTsgKi8KICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2FjY2Vzc19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYWNjZXNzX21vZHVsZS5jCmluZGV4IDcxMGRkMjQuLmI4YWEzYWEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYWNjZXNzX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYWNjZXNzX21vZHVsZS5jCkBAIC05Miw2ICs5Miw3IEBACiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBpOwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgICAgICAgICAqc2luOwogICAgIG5neF9odHRwX2FjY2Vzc19ydWxlX3QgICAgICAqcnVsZTsKKyAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICAgKmNsY2Y7CiAgICAgbmd4X2h0dHBfYWNjZXNzX2xvY19jb25mX3QgICphbGNmOwogCiAgICAgYWxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfYWNjZXNzX21vZHVsZSk7CkBAIC0xMTMsOCArMTE0LDEyIEBACiAKICAgICAgICAgaWYgKChzaW4tPnNpbl9hZGRyLnNfYWRkciAmIHJ1bGVbaV0ubWFzaykgPT0gcnVsZVtpXS5hZGRyKSB7CiAgICAgICAgICAgICBpZiAocnVsZVtpXS5kZW55KSB7Ci0gICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VzcyBmb3JiaWRkZW4gYnkgcnVsZSIpOworICAgICAgICAgICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKworICAgICAgICAgICAgICAgIGlmICghY2xjZi0+c2F0aXNmeV9hbnkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2Nlc3MgZm9yYmlkZGVuIGJ5IHJ1bGUiKTsKKyAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfRk9SQklEREVOOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZS5jCmluZGV4IGQzM2U3ZjYuLjVkZDI4NzYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgIGZkID0gbmd4X29wZW5fZmlsZShhbGNmLT51c2VyX2ZpbGUuZGF0YSwgTkdYX0ZJTEVfUkRPTkxZLCBOR1hfRklMRV9PUEVOKTsKIAogICAgIGlmIChmZCA9PSBOR1hfSU5WQUxJRF9GSUxFKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgbmd4X2Vycm5vLAorICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgci0+Y29ubmVjdGlvbi0+bG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgbmd4X29wZW5fZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsIGFsY2YtPnVzZXJfZmlsZS5kYXRhKTsKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYwppbmRleCA0MWEwZTU3Li4wYmMzMWJjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogewogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAgICpjdDsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCwgc291cmNlX2NoYXJzZXQ7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgKm1jOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICptYywgKmZyb20sICp0bzsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgbjsKICAgICBuZ3hfaHR0cF9jaGFyc2V0X3QgICAgICAgICAgICAqY2hhcnNldHM7CiAgICAgbmd4X2h0dHBfY2hhcnNldF9jdHhfdCAgICAgICAgKmN0eDsKQEAgLTI4OCwxMyArMjg4LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgICAgICB9CiAKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJubyBcImNoYXJzZXRfbWFwXCIgYmV0d2VlbiB0aGUgY2hhcnNldHMgIgotICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgYW5kIFwiJVZcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNoYXJzZXRzW2xjZi0+c291cmNlX2NoYXJzZXRdLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgJnItPm1haW4tPmhlYWRlcnNfb3V0LmNoYXJzZXQpOworICAgICAgICBmcm9tID0gJmNoYXJzZXRzW2xjZi0+c291cmNlX2NoYXJzZXRdLm5hbWU7CisgICAgICAgIHRvID0gJnItPm1haW4tPmhlYWRlcnNfb3V0LmNoYXJzZXQ7CiAKLSAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKKyAgICAgICAgZ290byBub19jaGFyc2V0X21hcDsKICAgICB9CiAKICAgICBzb3VyY2VfY2hhcnNldCA9IG5neF9odHRwX2NoYXJzZXRfZ2V0X2NoYXJzZXQoY2hhcnNldHMsIG4sCkBAIC0zMDgsMTEgKzMwNSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY2hhcnNldC5kYXRhKQogICAgICAgICAgICAgICAgICE9IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIFwiY2hhcnNldF9tYXBcIiBiZXR3ZWVuIHRoZSBjaGFyc2V0cyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgYW5kIFwiJVZcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZyLT5oZWFkZXJzX291dC5jaGFyc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmci0+bWFpbi0+aGVhZGVyc19vdXQuY2hhcnNldCk7CisgICAgICAgICAgICBmcm9tID0gJnItPmhlYWRlcnNfb3V0LmNoYXJzZXQ7CisgICAgICAgICAgICB0byA9IChjaGFyc2V0ID09IE5HWF9IVFRQX05PX0NIQVJTRVQpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmci0+bWFpbi0+aGVhZGVyc19vdXQuY2hhcnNldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2hhcnNldHNbY2hhcnNldF0ubmFtZTsKKworICAgICAgICAgICAgZ290byBub19jaGFyc2V0X21hcDsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CkBAIC0zMjIsMTggKzMyMCwyNCBAQAogICAgICAgICAmJiAoY2hhcnNldHNbc291cmNlX2NoYXJzZXRdLnRhYmxlcyA9PSBOVUxMCiAgICAgICAgICAgICB8fCBjaGFyc2V0c1tzb3VyY2VfY2hhcnNldF0udGFibGVzW2NoYXJzZXRdID09IE5VTEwpKQogICAgIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJubyBcImNoYXJzZXRfbWFwXCIgYmV0d2VlbiB0aGUgY2hhcnNldHMgIgotICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgYW5kIFwiJVZcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNoYXJzZXRzW3NvdXJjZV9jaGFyc2V0XS5uYW1lLCAmY2hhcnNldHNbY2hhcnNldF0ubmFtZSk7CisgICAgICAgIGZyb20gPSAmY2hhcnNldHNbc291cmNlX2NoYXJzZXRdLm5hbWU7CisgICAgICAgIHRvID0gJmNoYXJzZXRzW2NoYXJzZXRdLm5hbWU7CiAKLSAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKKyAgICAgICAgZ290byBub19jaGFyc2V0X21hcDsKICAgICB9CiAKICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuID0gci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlX2xlbjsKIAogICAgIHJldHVybiBuZ3hfaHR0cF9jaGFyc2V0X3NldF9jaGFyc2V0KHIsIG1jZi0+Y2hhcnNldHMuZWx0cywgY2hhcnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfY2hhcnNldCk7CisKK25vX2NoYXJzZXRfbWFwOgorCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgIm5vIFwiY2hhcnNldF9tYXBcIiBiZXR3ZWVuIHRoZSBjaGFyc2V0cyAiCisgICAgICAgICAgICAgICAgICAiXCIlVlwiIGFuZCBcIiVWXCIiLCBmcm9tLCB0byk7CisKKyAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogfQogCiAKQEAgLTM5MiwxMSArMzk2LDE0IEBACiAgICAgY3R4LT5mcm9tX3V0ZjggPSBjaGFyc2V0c1tzb3VyY2VfY2hhcnNldF0udXRmODsKICAgICBjdHgtPnRvX3V0ZjggPSBjaGFyc2V0c1tjaGFyc2V0XS51dGY4OwogCisgICAgci0+ZmlsdGVyX25lZWRfaW5fbWVtb3J5ID0gMTsKKwogICAgIGlmICgoY3R4LT50b191dGY4IHx8IGN0eC0+ZnJvbV91dGY4KSAmJiByID09IHItPm1haW4pIHsKICAgICAgICAgbmd4X2h0dHBfY2xlYXJfY29udGVudF9sZW5ndGgocik7Ci0gICAgfQogCi0gICAgci0+ZmlsdGVyX25lZWRfaW5fbWVtb3J5ID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICByLT5maWx0ZXJfbmVlZF90ZW1wb3JhcnkgPSAxOworICAgIH0KIAogICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Rhdl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZGF2X21vZHVsZS5jCmluZGV4IDdmNjE3NzQuLjUzZWYyMWMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZGF2X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZGF2X21vZHVsZS5jCkBAIC0yNTEsMTcgKzI1MSwyMCBAQAogCiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RhdHVzID0gTkdYX0hUVFBfTk9fQ09OVEVOVDsKLSAgICB9CiAKLSAgICBpZiAobmd4X2lzX2RpcigmZmkpKSB7Ci0gICAgICAgIGlmIChuZ3hfZGVsZXRlX2ZpbGUodGVtcC0+ZGF0YSkgPT0gTkdYX0ZJTEVfRVJST1IpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCByLT5jb25uZWN0aW9uLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2RlbGV0ZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC0+ZGF0YSk7CisgICAgICAgIGlmIChuZ3hfaXNfZGlyKCZmaSkpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgTkdYX0VJU0RJUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIHBhdGguZGF0YSk7CisKKyAgICAgICAgICAgIGlmIChuZ3hfZGVsZXRlX2ZpbGUodGVtcC0+ZGF0YSkgPT0gTkdYX0ZJTEVfRVJST1IpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgci0+Y29ubmVjdGlvbi0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZGVsZXRlX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC0+ZGF0YSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfQ09ORkxJQ1QpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KLSAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9DT05GTElDVCk7Ci0gICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAobmd4X3JlbmFtZV9maWxlKHRlbXAtPmRhdGEsIHBhdGguZGF0YSkgIT0gTkdYX0ZJTEVfRVJST1IpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYwppbmRleCAwODVmYjQ3Li4xNzJhMWE3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCkBAIC0xNTY1LDYgKzE1NjUsNyBAQAogICAgIHVpbnRwdHJfdCAgICAgICAgICAgICAgICAgICAgKmNvZGU7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAqaGVhZGVyOwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgIGksIGo7CisgICAgbmd4X3BlZXJfdCAgICAgICAgICAgICAgICAgICAqcGVlcjsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgICBoaWRlX2hlYWRlcnM7CiAgICAgbmd4X2tleXZhbF90ICAgICAgICAgICAgICAgICAqc3JjOwogICAgIG5neF9oYXNoX2tleV90ICAgICAgICAgICAgICAgKmhrOwpAQCAtMTY5MywyMCArMTY5NCwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxOR1hfSFRUUF9VUFNUUkVBTV9GVF9FUlJPUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxOR1hfSFRUUF9VUFNUUkVBTV9GVF9USU1FT1VUKSk7CiAKLSAgICBuZ3hfY29uZl9tZXJnZV91bnNpZ25lZF92YWx1ZShjb25mLT51cHN0cmVhbS5tYXhfZmFpbHMsCisgICAgbmd4X2NvbmZfbWVyZ2VfdWludF92YWx1ZShjb25mLT51cHN0cmVhbS5tYXhfZmFpbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5tYXhfZmFpbHMsIDEpOwogCiAgICAgbmd4X2NvbmZfbWVyZ2Vfc2VjX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLmZhaWxfdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLmZhaWxfdGltZW91dCwgMTApOwogCi0gICAgaWYgKGNvbmYtPnVwc3RyZWFtX3BlZXJzICYmICFjb25mLT51cHN0cmVhbV9wZWVycy0+YmFsYW5jZWQpIHsKKyAgICBpZiAoY29uZi0+dXBzdHJlYW1fcGVlcnMpIHsKKyAgICAgICAgcGVlciA9IGNvbmYtPnVwc3RyZWFtX3BlZXJzLT5wZWVycy0+cGVlcjsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmYtPnVwc3RyZWFtX3BlZXJzLT5wZWVycy0+bnVtYmVyOyBpKyspIHsKLSAgICAgICAgICAgIGNvbmYtPnVwc3RyZWFtX3BlZXJzLT5wZWVycy0+cGVlcltpXS53ZWlnaHQgPSAxOwotICAgICAgICAgICAgY29uZi0+dXBzdHJlYW1fcGVlcnMtPnBlZXJzLT5wZWVyW2ldLm1heF9mYWlscyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT51cHN0cmVhbS5tYXhfZmFpbHM7Ci0gICAgICAgICAgICBjb25mLT51cHN0cmVhbV9wZWVycy0+cGVlcnMtPnBlZXJbaV0uZmFpbF90aW1lb3V0ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmYtPnVwc3RyZWFtLmZhaWxfdGltZW91dDsKKyAgICAgICAgICAgIG5neF9jb25mX2luaXRfdWludF92YWx1ZShwZWVyW2ldLndlaWdodCwgMSk7CisgICAgICAgICAgICBwZWVyW2ldLmN1cnJlbnRfd2VpZ2h0ID0gcGVlcltpXS53ZWlnaHQ7CisgICAgICAgICAgICBuZ3hfY29uZl9pbml0X3VpbnRfdmFsdWUocGVlcltpXS5tYXhfZmFpbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT51cHN0cmVhbS5tYXhfZmFpbHMpOworICAgICAgICAgICAgbmd4X2NvbmZfaW5pdF92YWx1ZShwZWVyW2ldLmZhaWxfdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmYtPnVwc3RyZWFtLmZhaWxfdGltZW91dCk7CiAgICAgICAgIH0KKwogICAgIH0KIAogICAgIG5neF9jb25mX21lcmdlX3BhdGhfdmFsdWUoY29uZi0+dXBzdHJlYW0udGVtcF9wYXRoLApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggYTA4ZjMxYy4uMjZjMTY0OSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jCkBAIC0xMDg3LDcgKzEwODcsNyBAQAogCiAgICAgbmd4X2NvbmZfbWVyZ2VfYnVmc192YWx1ZShjb25mLT5idWZzLCBwcmV2LT5idWZzLCA0LCBuZ3hfcGFnZXNpemUpOwogCi0gICAgbmd4X2NvbmZfbWVyZ2VfdW5zaWduZWRfdmFsdWUoY29uZi0+aHR0cF92ZXJzaW9uLCBwcmV2LT5odHRwX3ZlcnNpb24sCisgICAgbmd4X2NvbmZfbWVyZ2VfdWludF92YWx1ZShjb25mLT5odHRwX3ZlcnNpb24sIHByZXYtPmh0dHBfdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX1ZFUlNJT05fMTEpOwogICAgIG5neF9jb25mX21lcmdlX2JpdG1hc2tfdmFsdWUoY29uZi0+cHJveGllZCwgcHJldi0+cHJveGllZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOR1hfQ09ORl9CSVRNQVNLX1NFVHxOR1hfSFRUUF9HWklQX1BST1hJRURfT0ZGKSk7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA4Y2VkOGUwLi44MDY1NzQyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfbW9kdWxlLmMKQEAgLTEwMyw5ICsxMDMsMTIgQEAKICAgICBuZ3hfaHR0cF9oZWFkZXJfdmFsX3QgICAgKmg7CiAgICAgbmd4X2h0dHBfaGVhZGVyc19jb25mX3QgICpjb25mOwogCi0gICAgaWYgKChyLT5oZWFkZXJzX291dC5zdGF0dXMgIT0gTkdYX0hUVFBfT0sKLSAgICAgICAgICYmIHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9OT1RfTU9ESUZJRUQpCi0gICAgICAgIHx8IHIgIT0gci0+bWFpbikKKyAgICBpZiAociAhPSByLT5tYWluCisgICAgICAgIHx8IChyLT5oZWFkZXJzX291dC5zdGF0dXMgIT0gTkdYX0hUVFBfT0sKKyAgICAgICAgICAgICYmIHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9OT19DT05URU5UCisgICAgICAgICAgICAmJiByLT5oZWFkZXJzX291dC5zdGF0dXMgIT0gTkdYX0hUVFBfTU9WRURfUEVSTUFORU5UTFkKKyAgICAgICAgICAgICYmIHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9NT1ZFRF9URU1QT1JBUklMWQorICAgICAgICAgICAgJiYgci0+aGVhZGVyc19vdXQuc3RhdHVzICE9IE5HWF9IVFRQX05PVF9NT0RJRklFRCkpCiAgICAgewogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbG9nX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9sb2dfbW9kdWxlLmMKaW5kZXggNWUxNjM2My4uZjg1YTZjOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9sb2dfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9sb2dfbW9kdWxlLmMKQEAgLTQ3OCw3ICs0NzgsNyBAQAogbmd4X2h0dHBfbG9nX3JlcXVlc3RfbGVuZ3RoKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsCiAgICAgbmd4X2h0dHBfbG9nX29wX3QgKm9wKQogewotICAgIHJldHVybiBuZ3hfc3ByaW50ZihidWYsICIleiIsIHItPnJlcXVlc3RfbGVuZ3RoKTsKKyAgICByZXR1cm4gbmd4X3NwcmludGYoYnVmLCAiJU8iLCByLT5yZXF1ZXN0X2xlbmd0aCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9tZW1jYWNoZWRfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21lbWNhY2hlZF9tb2R1bGUuYwppbmRleCA1YjA3ZGJjLi4wMDA2MjJkIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21lbWNhY2hlZF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21lbWNhY2hlZF9tb2R1bGUuYwpAQCAtNTYwLDcgKzU2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0VSUk9SCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9IVFRQX1VQU1RSRUFNX0ZUX1RJTUVPVVQpKTsKIAotICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLm1heF9mYWlscywKKyAgICBuZ3hfY29uZl9tZXJnZV91aW50X3ZhbHVlKGNvbmYtPnVwc3RyZWFtLm1heF9mYWlscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLm1heF9mYWlscywgMSk7CiAKICAgICBuZ3hfY29uZl9tZXJnZV9zZWNfdmFsdWUoY29uZi0+dXBzdHJlYW0uZmFpbF90aW1lb3V0LApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKaW5kZXggZjE0MTUxYS4uZmY1YjEyOSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCkBAIC0xNTIwLDYgKzE1MjAsNyBAQAogICAgIHVpbnRwdHJfdCAgICAgICAgICAgICAgICAgICAgKmNvZGU7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAqaGVhZGVyOwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgIGksIGo7CisgICAgbmd4X3BlZXJfdCAgICAgICAgICAgICAgICAgICAqcGVlcjsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgICBoaWRlX2hlYWRlcnM7CiAgICAgbmd4X2tleXZhbF90ICAgICAgICAgICAgICAgICAqc3JjLCAqcywgKmg7CiAgICAgbmd4X2hhc2hfa2V5X3QgICAgICAgICAgICAgICAqaGs7CkBAIC0xNjQ3LDE5ICsxNjQ4LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0VSUk9SCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9IVFRQX1VQU1RSRUFNX0ZUX1RJTUVPVVQpKTsKIAotICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLm1heF9mYWlscywKKyAgICBuZ3hfY29uZl9tZXJnZV91aW50X3ZhbHVlKGNvbmYtPnVwc3RyZWFtLm1heF9mYWlscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLm1heF9mYWlscywgMSk7CiAKICAgICBuZ3hfY29uZl9tZXJnZV9zZWNfdmFsdWUoY29uZi0+dXBzdHJlYW0uZmFpbF90aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uZmFpbF90aW1lb3V0LCAxMCk7CiAKLSAgICBpZiAoY29uZi0+dXBzdHJlYW1fcGVlcnMgJiYgIWNvbmYtPnVwc3RyZWFtX3BlZXJzLT5iYWxhbmNlZCkgeworICAgIGlmIChjb25mLT51cHN0cmVhbV9wZWVycykgeworICAgICAgICBwZWVyID0gY29uZi0+dXBzdHJlYW1fcGVlcnMtPnBlZXJzLT5wZWVyOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZi0+dXBzdHJlYW1fcGVlcnMtPnBlZXJzLT5udW1iZXI7IGkrKykgewotICAgICAgICAgICAgY29uZi0+dXBzdHJlYW1fcGVlcnMtPnBlZXJzLT5wZWVyW2ldLndlaWdodCA9IDE7Ci0gICAgICAgICAgICBjb25mLT51cHN0cmVhbV9wZWVycy0+cGVlcnMtPnBlZXJbaV0ubWF4X2ZhaWxzID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmYtPnVwc3RyZWFtLm1heF9mYWlsczsKLSAgICAgICAgICAgIGNvbmYtPnVwc3RyZWFtX3BlZXJzLT5wZWVycy0+cGVlcltpXS5mYWlsX3RpbWVvdXQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+dXBzdHJlYW0uZmFpbF90aW1lb3V0OworICAgICAgICAgICAgbmd4X2NvbmZfaW5pdF91aW50X3ZhbHVlKHBlZXJbaV0ud2VpZ2h0LCAxKTsKKyAgICAgICAgICAgIHBlZXJbaV0uY3VycmVudF93ZWlnaHQgPSBwZWVyW2ldLndlaWdodDsKKyAgICAgICAgICAgIG5neF9jb25mX2luaXRfdWludF92YWx1ZShwZWVyW2ldLm1heF9mYWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmYtPnVwc3RyZWFtLm1heF9mYWlscyk7CisgICAgICAgICAgICBuZ3hfY29uZl9pbml0X3ZhbHVlKHBlZXJbaV0uZmFpbF90aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+dXBzdHJlYW0uZmFpbF90aW1lb3V0KTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWFsaXBfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlYWxpcF9tb2R1bGUuYwppbmRleCAyMTBiYmY2Li4zOTQwZWU0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlYWxpcF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlYWxpcF9tb2R1bGUuYwpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgICAgIGNvbmYtPmZyb20gPSBwcmV2LT5mcm9tOwogICAgIH0KIAotICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnhmd2QsIHByZXYtPnhmd2QsIDApOworICAgIG5neF9jb25mX21lcmdlX3VpbnRfdmFsdWUoY29uZi0+eGZ3ZCwgcHJldi0+eGZ3ZCwgMCk7CiAKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMKaW5kZXggYzU1NzMxNC4uODg5ODhiZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+bG9nLCBwcmV2LT5sb2csIDApOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVuaW5pdGlhbGl6ZWRfdmFyaWFibGVfd2FybiwKICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51bmluaXRpYWxpemVkX3ZhcmlhYmxlX3dhcm4sIDEpOwotICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnN0YWNrX3NpemUsIHByZXYtPnN0YWNrX3NpemUsIDEwKTsKKyAgICBuZ3hfY29uZl9tZXJnZV91aW50X3ZhbHVlKGNvbmYtPnN0YWNrX3NpemUsIHByZXYtPnN0YWNrX3NpemUsIDEwKTsKIAogICAgIGlmIChjb25mLT5jb2RlcyA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9PSzsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA5MmM1M2Y4Li5iZGFkMzVkIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCkBAIC02NzAsOCArNjcwLDggQEAKICAgICBuZ3hfaHR0cF91c2VyaWRfY29uZl90ICpwcmV2ID0gcGFyZW50OwogICAgIG5neF9odHRwX3VzZXJpZF9jb25mX3QgKmNvbmYgPSBjaGlsZDsKIAotICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPmVuYWJsZSwgcHJldi0+ZW5hYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX1VTRVJJRF9PRkYpOworICAgIG5neF9jb25mX21lcmdlX3VpbnRfdmFsdWUoY29uZi0+ZW5hYmxlLCBwcmV2LT5lbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfSFRUUF9VU0VSSURfT0ZGKTsKIAogICAgIG5neF9jb25mX21lcmdlX3N0cl92YWx1ZShjb25mLT5uYW1lLCBwcmV2LT5uYW1lLCAidWlkIik7CiAgICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPmRvbWFpbiwgcHJldi0+ZG9tYWluLCAiIik7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jCmluZGV4IDkxYTljODUuLmJmOTc2ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jCkBAIC04MzMsOSArODMzLDkgQEAKICAgICBuZ3hfaHR0cF9wZXJsX21haW5fY29uZl90ICpwbWNmID0gY29uZjsKIAogI2lmIChOR1hfSEFWRV9QRVJMX0NMT05FIHx8IE5HWF9IQVZFX1BFUkxfTVVMVElQTElDSVRZKQotICAgIG5neF9jb25mX2luaXRfdW5zaWduZWRfdmFsdWUocG1jZi0+aW50ZXJwX21heCwgMTApOworICAgIG5neF9jb25mX2luaXRfdWludF92YWx1ZShwbWNmLT5pbnRlcnBfbWF4LCAxMCk7CiAjZWxzZQotICAgIG5neF9jb25mX2luaXRfdW5zaWduZWRfdmFsdWUocG1jZi0+aW50ZXJwX21heCwgMSk7CisgICAgbmd4X2NvbmZfaW5pdF91aW50X3ZhbHVlKHBtY2YtPmludGVycF9tYXgsIDEpOwogI2VuZGlmCiAKICAgICBwbWNmLT5mcmVlX3BlcmxzID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCBjYTk2M2FiLi5iNDE3ZjQxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCiAgICAgeyBuZ3hfc3RyaW5nKCJjbGllbnRfbWF4X2JvZHlfc2l6ZSIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAotICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKKyAgICAgIG5neF9jb25mX3NldF9vZmZfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCwgY2xpZW50X21heF9ib2R5X3NpemUpLAogICAgICAgTlVMTCB9LApAQCAtNjM0LDYgKzYzNCwxMiBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHItPnBoYXNlID09IE5HWF9IVFRQX0FDQ0VTU19QSEFTRSAmJiByLT5hY2Nlc3NfY29kZSkgeworCisgICAgICAgICAgICBpZiAoci0+YWNjZXNzX2NvZGUgPT0gTkdYX0hUVFBfRk9SQklEREVOKSB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VzcyBmb3JiaWRkZW4gYnkgcnVsZSIpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIHItPmFjY2Vzc19jb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjkwLDE1ICs2OTYsMTUgQEAKICAgICBuZ3hfaHR0cF91cGRhdGVfbG9jYXRpb25fY29uZmlnKHIpOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgY2w6JXogbWF4OiV1eiIsCisgICAgICAgICAgICAgICAgICAgImh0dHAgY2w6JU8gbWF4OiVPIiwKICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24sIGNsY2YtPmNsaWVudF9tYXhfYm9keV9zaXplKTsKIAogICAgIGlmIChyLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24gIT0gLTEKICAgICAgICAgJiYgY2xjZi0+Y2xpZW50X21heF9ib2R5X3NpemUKLSAgICAgICAgJiYgY2xjZi0+Y2xpZW50X21heF9ib2R5X3NpemUgPCAoc2l6ZV90KSByLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24pCisgICAgICAgICYmIGNsY2YtPmNsaWVudF9tYXhfYm9keV9zaXplIDwgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uKQogICAgIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgaW50ZW50ZWQgdG8gc2VuZCB0b28gbGFyZ2UgYm9keTogJXogYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgaW50ZW50ZWQgdG8gc2VuZCB0b28gbGFyZ2UgYm9keTogJU8gYnl0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbik7CiAKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1JFUVVFU1RfRU5USVRZX1RPT19MQVJHRTsKQEAgLTIwMTUsNyArMjAyMSw3IEBACiAgICAgICogICAgIGxjZi0+YWxpYXMgPSAwOwogICAgICAqLwogCi0gICAgbGNmLT5jbGllbnRfbWF4X2JvZHlfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CisgICAgbGNmLT5jbGllbnRfbWF4X2JvZHlfc2l6ZSA9IE5HWF9DT05GX1VOU0VUOwogICAgIGxjZi0+Y2xpZW50X2JvZHlfYnVmZmVyX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogICAgIGxjZi0+Y2xpZW50X2JvZHlfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgbGNmLT5zYXRpc2Z5X2FueSA9IE5HWF9DT05GX1VOU0VUOwpAQCAtMjA4NiwxMiArMjA5MiwxMiBAQAogICAgICAgICBjb25mLT5wb3N0X2FjdGlvbiA9IHByZXYtPnBvc3RfYWN0aW9uOwogICAgIH0KIAotICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnR5cGVzX2hhc2hfbWF4X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dHlwZXNfaGFzaF9tYXhfc2l6ZSwgMTAyNCk7CisgICAgbmd4X2NvbmZfbWVyZ2VfdWludF92YWx1ZShjb25mLT50eXBlc19oYXNoX21heF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dHlwZXNfaGFzaF9tYXhfc2l6ZSwgMTAyNCk7CiAKLSAgICBuZ3hfY29uZl9tZXJnZV91bnNpZ25lZF92YWx1ZShjb25mLT50eXBlc19oYXNoX2J1Y2tldF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnR5cGVzX2hhc2hfYnVja2V0X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NhY2hlbGluZV9zaXplKTsKKyAgICBuZ3hfY29uZl9tZXJnZV91aW50X3ZhbHVlKGNvbmYtPnR5cGVzX2hhc2hfYnVja2V0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT50eXBlc19oYXNoX2J1Y2tldF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NhY2hlbGluZV9zaXplKTsKIAogICAgIGNvbmYtPnR5cGVzX2hhc2hfYnVja2V0X3NpemUgPSBuZ3hfYWxpZ24oY29uZi0+dHlwZXNfaGFzaF9idWNrZXRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jYWNoZWxpbmVfc2l6ZSk7CkBAIC0yMTc1LDcgKzIxODEsNyBAQAogICAgIG5neF9jb25mX21lcmdlX3N0cl92YWx1ZShjb25mLT5kZWZhdWx0X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT5kZWZhdWx0X3R5cGUsICJ0ZXh0L3BsYWluIik7CiAKLSAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPmNsaWVudF9tYXhfYm9keV9zaXplLAorICAgIG5neF9jb25mX21lcmdlX29mZl92YWx1ZShjb25mLT5jbGllbnRfbWF4X2JvZHlfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPmNsaWVudF9tYXhfYm9keV9zaXplLCAxICogMTAyNCAqIDEwMjQpOwogICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+Y2xpZW50X2JvZHlfYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT5jbGllbnRfYm9keV9idWZmZXJfc2l6ZSwKQEAgLTI0NTEsNiArMjQ1NywxMSBAQAogCiAgICAgICAgIGNoID0gdmFsdWVbaV0uZGF0YVswXTsKIAorICAgICAgICBpZiAodmFsdWVbaV0ubGVuID09IDEgJiYgY2ggPT0gJyonKSB7CisgICAgICAgICAgICBjc2NmLT53aWxkY2FyZCA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICh2YWx1ZVtpXS5sZW4gPT0gMAogICAgICAgICAgICAgfHwgKGNoID09ICcqJyAmJiAodmFsdWVbaV0ubGVuIDwgMyB8fCB2YWx1ZVtpXS5kYXRhWzFdICE9ICcuJykpCiAgICAgICAgICAgICB8fCAoY2ggPT0gJy4nICYmIHZhbHVlW2ldLmxlbiA8IDIpKQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaCBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKaW5kZXggNGY3ODIzZC4uNjYxZjFiOSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCkBAIC0xMTYsNiArMTE2LDggQEAKIAogICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgIG9wdGltaXplX3NlcnZlcl9uYW1lczsKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICBpZ25vcmVfaW52YWxpZF9oZWFkZXJzOworCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgd2lsZGNhcmQ7ICAvKiB1bnNpZ25lZCAgd2lsZGNhcmQ6MSAqLwogfSBuZ3hfaHR0cF9jb3JlX3Nydl9jb25mX3Q7CiAKIApAQCAtMjEzLDcgKzIxNSw4IEBACiAgICAgbmd4X2hhc2hfdCAgICB0eXBlc19oYXNoOwogICAgIG5neF9zdHJfdCAgICAgZGVmYXVsdF90eXBlOwogCi0gICAgc2l6ZV90ICAgICAgICBjbGllbnRfbWF4X2JvZHlfc2l6ZTsgICAgLyogY2xpZW50X21heF9ib2R5X3NpemUgKi8KKyAgICBvZmZfdCAgICAgICAgIGNsaWVudF9tYXhfYm9keV9zaXplOyAgICAvKiBjbGllbnRfbWF4X2JvZHlfc2l6ZSAqLworCiAgICAgc2l6ZV90ICAgICAgICBjbGllbnRfYm9keV9idWZmZXJfc2l6ZTsgLyogY2xpZW50X2JvZHlfYnVmZmVyX3NpemUgKi8KICAgICBzaXplX3QgICAgICAgIHNlbmRfbG93YXQ7ICAgICAgICAgICAgICAvKiBzZW5kX2xvd2F0ICovCiAgICAgc2l6ZV90ICAgICAgICBwb3N0cG9uZV9vdXRwdXQ7ICAgICAgICAgLyogcG9zdHBvbmVfb3V0cHV0ICovCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGUuYwppbmRleCAzNmVkNmUxLi5jNmVjZDNhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMKQEAgLTg0LDcgKzg0LDcgQEAKICAgICBuZ3hfc3RyaW5nKCI0MDYgTm90IEFjY2VwdGFibGUiKSwKICAgICBuZ3hfbnVsbF9zdHJpbmcsICAvKiAiNDA3IFByb3h5IEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkIiAqLwogICAgIG5neF9zdHJpbmcoIjQwOCBSZXF1ZXN0IFRpbWUtb3V0IiksCi0gICAgbmd4X251bGxfc3RyaW5nLCAgLyogIjQwOSBDb25mbGljdCIgKi8KKyAgICBuZ3hfc3RyaW5nKCI0MDkgQ29uZmxpY3QiKSwKICAgICBuZ3hfc3RyaW5nKCI0MTAgR29uZSIpLAogICAgIG5neF9zdHJpbmcoIjQxMSBMZW5ndGggUmVxdWlyZWQiKSwKICAgICBuZ3hfbnVsbF9zdHJpbmcsICAvKiAiNDEyIFByZWNvbmRpdGlvbiBGYWlsZWQiICovCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggNWI5NDdmZi4uYmYzYjBlZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMTIzNSw3ICsxMjM1LDcgQEAKIAogICAgIGlmIChyLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoKSB7CiAgICAgICAgIHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2F0b3N6KHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGgtPnZhbHVlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2F0b29mKHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGgtPnZhbHVlLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGgtPnZhbHVlLmxlbik7CiAKICAgICAgICAgaWYgKHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiA9PSBOR1hfRVJST1IpIHsKQEAgLTEzOTUsNiArMTM5NSwxMyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgY3NjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfc3J2X2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworCisgICAgaWYgKGNzY2YtPndpbGRjYXJkKSB7CisgICAgICAgIHItPnNlcnZlcl9uYW1lLmxlbiA9IGxlbjsKKyAgICAgICAgci0+c2VydmVyX25hbWUuZGF0YSA9IGhvc3Q7CisgICAgfQorCiAgICAgcmV0dXJuOwogCiBmb3VuZDoKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaCBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAppbmRleCAwYmVjMjA0Li5iMmQ0MTg0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCkBAIC0xOTIsNyArMTkyLDcgQEAKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgICAgICAgY29va2llczsKIAogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0X25hbWVfbGVuOwotICAgIHNzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aF9uOworICAgIG9mZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aF9uOwogICAgIHRpbWVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwX2FsaXZlX247CiAKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbl90eXBlOjI7CkBAIC0yNTAsNyArMjUwLDcgQEAKICAgICBuZ3hfdGVtcF9maWxlX3QgICAgICAgICAgICAgICAgICAqdGVtcF9maWxlOwogICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICAgICAgICpidWZzOwogICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgICAgICAgICpidWY7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Q7CisgICAgb2ZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Q7CiAgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgICAgICAgICAgKnRvX3dyaXRlOwogICAgIG5neF9odHRwX2NsaWVudF9ib2R5X2hhbmRsZXJfcHQgICBwb3N0X2hhbmRsZXI7CiB9IG5neF9odHRwX3JlcXVlc3RfYm9keV90OwpAQCAtMzY2LDcgKzM2Niw3IEBACiAgICAgLyogdXNlZCB0byBsZWFybiB0aGUgQXBhY2hlIGNvbXBhdGlibGUgcmVzcG9uc2UgbGVuZ3RoIHdpdGhvdXQgYSBoZWFkZXIgKi8KICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX3NpemU7CiAKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9sZW5ndGg7CisgICAgb2ZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfbGVuZ3RoOwogCiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmVycl9jdHg7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICAgIGVycl9zdGF0dXM7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0X2JvZHkuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3RfYm9keS5jCmluZGV4IDYwNWM4YWQuLmM2ZmEzZmMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3RfYm9keS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3RfYm9keS5jCkBAIC0zMCw3ICszMCw4IEBACiBuZ3hfaHR0cF9yZWFkX2NsaWVudF9yZXF1ZXN0X2JvZHkobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9odHRwX2NsaWVudF9ib2R5X2hhbmRsZXJfcHQgcG9zdF9oYW5kbGVyKQogewotICAgIHNzaXplX3QgICAgICAgICAgICAgICAgICAgIHNpemUsIHByZXJlYWQ7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgcHJlcmVhZDsKKyAgICBzc2l6ZV90ICAgICAgICAgICAgICAgICAgICBzaXplOwogICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgKmI7CiAgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgICAqY2wsICoqbmV4dDsKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X2JvZHlfdCAgICpyYjsKQEAgLTk1LDcgKzk2LDcgQEAKIAogICAgICAgICAgICAgLyogdGhlIHdob2xlIHJlcXVlc3QgYm9keSB3YXMgcHJlLXJlYWQgKi8KIAotICAgICAgICAgICAgci0+aGVhZGVyX2luLT5wb3MgKz0gci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uOworICAgICAgICAgICAgci0+aGVhZGVyX2luLT5wb3MgKz0gKHNpemVfdCkgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uOwogICAgICAgICAgICAgci0+cmVxdWVzdF9sZW5ndGggKz0gci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uOwogCiAgICAgICAgICAgICBpZiAoci0+cmVxdWVzdF9ib2R5X2luX2ZpbGVfb25seSkgewpAQCAtMTQzLDggKzE0NCw4IEBACiAgICAgc2l6ZSA9IGNsY2YtPmNsaWVudF9ib2R5X2J1ZmZlcl9zaXplOwogICAgIHNpemUgKz0gc2l6ZSA+PiAyOwogCi0gICAgaWYgKHJiLT5yZXN0IDwgKHNpemVfdCkgc2l6ZSkgewotICAgICAgICBzaXplID0gcmItPnJlc3Q7CisgICAgaWYgKHJiLT5yZXN0IDwgc2l6ZSkgeworICAgICAgICBzaXplID0gKHNzaXplX3QpIHJiLT5yZXN0OwogCiAgICAgICAgIGlmIChyLT5yZXF1ZXN0X2JvZHlfaW5fc2luZ2xlX2J1ZikgewogICAgICAgICAgICAgc2l6ZSArPSBwcmVyZWFkOwpAQCAtMjQyLDcgKzI0Myw3IEBACiAgICAgICAgIHNpemUgPSByYi0+YnVmLT5lbmQgLSByYi0+YnVmLT5sYXN0OwogCiAgICAgICAgIGlmIChzaXplID4gcmItPnJlc3QpIHsKLSAgICAgICAgICAgIHNpemUgPSByYi0+cmVzdDsKKyAgICAgICAgICAgIHNpemUgPSAoc2l6ZV90KSByYi0+cmVzdDsKICAgICAgICAgfQogCiAgICAgICAgIG4gPSBjLT5yZWN2KGMsIHJiLT5idWYtPmxhc3QsIHNpemUpOwpAQCAtNDI5LDcgKzQzMCw3IEBACiAgICAgICAgICAgICByLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24gLT0gc2l6ZTsKIAogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgci0+aGVhZGVyX2luLT5wb3MgKz0gci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uOworICAgICAgICAgICAgci0+aGVhZGVyX2luLT5wb3MgKz0gKHNpemVfdCkgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uOwogICAgICAgICAgICAgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uID0gMDsKICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgIH0KQEAgLTQ2OCw3ICs0NjksOCBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfcmVhZF9kaXNjYXJkZWRfYm9keShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgc3NpemVfdCAgc2l6ZSwgbjsKKyAgICBzaXplX3QgICBzaXplOworICAgIHNzaXplX3QgIG47CiAgICAgdV9jaGFyICAgYnVmZmVyW05HWF9IVFRQX0RJU0NBUkRfQlVGRkVSX1NJWkVdOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCkBAIC00NzgsMTIgKzQ4MCw5IEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0KLSAgICBzaXplID0gci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uOwotCi0gICAgaWYgKHNpemUgPiBOR1hfSFRUUF9ESVNDQVJEX0JVRkZFUl9TSVpFKSB7Ci0gICAgICAgIHNpemUgPSBOR1hfSFRUUF9ESVNDQVJEX0JVRkZFUl9TSVpFOwotICAgIH0KKyAgICBzaXplID0gKHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiA+IE5HWF9IVFRQX0RJU0NBUkRfQlVGRkVSX1NJWkUpID8KKyAgICAgICAgICAgICAgICBOR1hfSFRUUF9ESVNDQVJEX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICAgIChzaXplX3QpIHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbjsKIAogICAgIG4gPSByLT5jb25uZWN0aW9uLT5yZWN2KHItPmNvbm5lY3Rpb24sIGJ1ZmZlciwgc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IGE4YzU1N2EuLjc4MmMxNGIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICBOVUxMIH0sCiAKICAgICB7IG5neF9zdHJpbmcoInNlcnZlciIpLAotICAgICAgTkdYX0hUVFBfVVBTX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBOR1hfSFRUUF9VUFNfQ09ORnxOR1hfQ09ORl9UQUtFMTIsCiAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9zZXJ2ZXIsCiAgICAgICBOR1hfSFRUUF9TUlZfQ09ORl9PRkZTRVQsCiAgICAgICAwLApAQCAtMjcyOSw3ICsyNzI5LDYgQEAKICAgICB9CiAKICAgICB1c2NmLT5wZWVycy0+bnVtYmVyID0gbjsKLSAgICB1c2NmLT5wZWVycy0+d2VpZ2h0ID0gMTsKIAogICAgIG4gPSAwOwogCkBAIC0yNzUwLDYgKzI3NDksOCBAQAogCiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAqdmFsdWU7CiAgICAgbmd4X3VybF90ICAgICAgICAgICAgICAgICAgICAgdTsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgaTsKICAgICBuZ3hfcGVlcnNfdCAgICAgICAgICAgICAgICAgKipwZWVyczsKIAogICAgIGlmICh1c2NmLT5zZXJ2ZXJzID09IE5VTEwpIHsKQEAgLTI3ODAsOSArMjc4MSw0MSBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCisgICAgd2VpZ2h0ID0gMTsKKworICAgIGlmIChjZi0+YXJncy0+bmVsdHMgPT0gMykgeworCisgICAgICAgIHZhbHVlID0gJnZhbHVlWzJdOworCisgICAgICAgIGlmIChuZ3hfc3RybmNtcCh2YWx1ZS0+ZGF0YSwgIndlaWdodD0iLCA3KSA9PSAwKSB7CisKKyAgICAgICAgICAgIHdlaWdodCA9IG5neF9hdG9pKCZ2YWx1ZS0+ZGF0YVs3XSwgdmFsdWUtPmxlbiAtIDcpOworCisgICAgICAgICAgICBpZiAod2VpZ2h0ID09IE5HWF9FUlJPUiB8fCB3ZWlnaHQgPT0gMCkgeworICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ290byBpbnZhbGlkOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHUucGVlcnMtPm51bWJlcjsgaSsrKSB7CisgICAgICAgIHUucGVlcnMtPnBlZXJbaV0ud2VpZ2h0ID0gd2VpZ2h0OworICAgICAgICB1LnBlZXJzLT5wZWVyW2ldLmN1cnJlbnRfd2VpZ2h0ID0gd2VpZ2h0OworICAgICAgICB1LnBlZXJzLT5wZWVyW2ldLm1heF9mYWlscyA9IE5HWF9DT05GX1VOU0VUX1VJTlQ7CisgICAgICAgIHUucGVlcnMtPnBlZXJbaV0uZmFpbF90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVQ7CisgICAgfQorCiAgICAgKnBlZXJzID0gdS5wZWVyczsKIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKKworaW52YWxpZDoKKworICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwgImludmFsaWQgcGFyYW1ldGVyIFwiJVZcIiIsIHZhbHVlKTsKKworICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKIH0KIAogCkBAIC0yODkzLDggKzI5MjYsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgdXNjZnBbaV0tPnBlZXJzID0gbmd4X2luZXRfcmVzb2x2ZV9wZWVyKGNmLCAmdXNjZnBbaV0tPmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVzY2ZwW2ldLT5wb3J0KTsKLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNjZnBbaV0tPnBvcnQpOwogICAgICAgICBpZiAodXNjZnBbaV0tPnBlZXJzID09IE5VTEwpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQpAQCAtMjkwOCw2ICsyOTQwLDcgQEAKICAgICAgICAgfQogICAgIH0KIAorCiAgICAgaWYgKG5neF9hcnJheV9pbml0KCZoZWFkZXJzX2luLCBjZi0+dGVtcF9wb29sLCAzMiwgc2l6ZW9mKG5neF9oYXNoX2tleV90KSkKICAgICAgICAgIT0gTkdYX09LKQogICAgIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCmluZGV4IDUzNzA1ZmMuLjA4NmQxODQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaApAQCAtNTYsOCArNTYsNiBAQAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lOwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgICAgbGluZTsKICAgICBpbl9wb3J0X3QgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ7Ci0KLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIGJhbGFuY2VkOyAgICAvKiB1bnNpZ25lZCAgYmFsYW5jZWQ6MTsgKi8KIH0gbmd4X2h0dHBfdXBzdHJlYW1fc3J2X2NvbmZfdDsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcC5oIGIvc3JjL2ltYXAvbmd4X2ltYXAuaAppbmRleCBlNDkyOGJlLi5hNTVhZDhjIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcC5oCisrKyBiL3NyYy9pbWFwL25neF9pbWFwLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgIG5neF9pbWFwX3N0YXJ0ID0gMCwKICAgICBuZ3hfaW1hcF9sb2dpbiwKICAgICBuZ3hfaW1hcF91c2VyLAotICAgIG5neF9pbWFwX3Bhc3N3ZCwKKyAgICBuZ3hfaW1hcF9wYXNzd2QKIH0gbmd4X2ltYXBfc3RhdGVfZTsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYwppbmRleCBjNzZhZDZjLi5hZjUwYWQ2IDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+aW1hcF9jbGllbnRfYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBuZ3hfcGFnZXNpemUpOwogICAgIG5neF9jb25mX21lcmdlX21zZWNfdmFsdWUoY29uZi0+dGltZW91dCwgcHJldi0+dGltZW91dCwgNjAwMDApOwotICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnByb3RvY29sLCBwcmV2LT5wcm90b2NvbCwKKyAgICBuZ3hfY29uZl9tZXJnZV91aW50X3ZhbHVlKGNvbmYtPnByb3RvY29sLCBwcmV2LT5wcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9JTUFQX0lNQVBfUFJPVE9DT0wpOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnNvX2tlZXBhbGl2ZSwgcHJldi0+c29fa2VlcGFsaXZlLCAwKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMgYi9zcmMvaW1hcC9uZ3hfaW1hcF9wcm94eV9tb2R1bGUuYwppbmRleCA5N2RmMzgyLi42YWIyMjViIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9wcm94eV9tb2R1bGUuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9wcm94eV9tb2R1bGUuYwpAQCAtMjMsNyArMjMsNyBAQAogc3RhdGljIHZvaWQgbmd4X2ltYXBfcHJveHlfcG9wM19oYW5kbGVyKG5neF9ldmVudF90ICpyZXYpOwogc3RhdGljIHZvaWQgbmd4X2ltYXBfcHJveHlfZHVtbXlfaGFuZGxlcihuZ3hfZXZlbnRfdCAqZXYpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaW1hcF9wcm94eV9yZWFkX3Jlc3BvbnNlKG5neF9pbWFwX3Nlc3Npb25fdCAqcywKLSAgICBuZ3hfdWludF90IHdoYXQpOworICAgIG5neF91aW50X3Qgc3RhdGUpOwogc3RhdGljIHZvaWQgbmd4X2ltYXBfcHJveHlfaGFuZGxlcihuZ3hfZXZlbnRfdCAqZXYpOwogc3RhdGljIHZvaWQgbmd4X2ltYXBfcHJveHlfaW50ZXJuYWxfc2VydmVyX2Vycm9yKG5neF9pbWFwX3Nlc3Npb25fdCAqcyk7CiBzdGF0aWMgdm9pZCBuZ3hfaW1hcF9wcm94eV9jbG9zZV9zZXNzaW9uKG5neF9pbWFwX3Nlc3Npb25fdCAqcyk7CkBAIC0zMiwxMCArMzIsNiBAQAogICAgIHZvaWQgKmNoaWxkKTsKIAogCi0jZGVmaW5lIE5HWF9JTUFQX1dBSVRfT0sgICAgICAwCi0jZGVmaW5lIE5HWF9JTUFQX1dBSVRfTkVYVCAgICAxCi0KLQogc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9pbWFwX3Byb3h5X2NvbW1hbmRzW10gPSB7CiAKICAgICB7IG5neF9zdHJpbmcoInByb3h5IiksCkBAIC0yMDEsOCArMTk3LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHJjID0gbmd4X2ltYXBfcHJveHlfcmVhZF9yZXNwb25zZShzLCBzLT5pbWFwX3N0YXRlID09IG5neF9pbWFwX3N0YXJ0ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0lNQVBfV0FJVF9PSyA6IE5HWF9JTUFQX1dBSVRfTkVYVCk7CisgICAgcmMgPSBuZ3hfaW1hcF9wcm94eV9yZWFkX3Jlc3BvbnNlKHMsIHMtPmltYXBfc3RhdGUpOwogCiAgICAgaWYgKHJjID09IE5HWF9BR0FJTikgewogICAgICAgICByZXR1cm47CkBAIC0yNzQsNiArMjY5LDIzIEBACiAgICAgICAgIHMtPmltYXBfc3RhdGUgPSBuZ3hfaW1hcF9wYXNzd2Q7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBuZ3hfaW1hcF9wYXNzd2Q6CisgICAgICAgIHMtPmNvbm5lY3Rpb24tPnJlYWQtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOworICAgICAgICBzLT5jb25uZWN0aW9uLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7CisgICAgICAgIHJldi0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7CisgICAgICAgIGMtPndyaXRlLT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKKworICAgICAgICBwY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX3Byb3h5X21vZHVsZSk7CisgICAgICAgIG5neF9hZGRfdGltZXIocy0+Y29ubmVjdGlvbi0+cmVhZCwgcGNmLT50aW1lb3V0KTsKKyAgICAgICAgbmd4X2RlbF90aW1lcihjLT5yZWFkKTsKKworICAgICAgICBjLT5sb2ctPmFjdGlvbiA9IE5VTEw7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsICJjbGllbnQgbG9nZ2VkIGluIik7CisKKyAgICAgICAgbmd4X2ltYXBfcHJveHlfaGFuZGxlcihzLT5jb25uZWN0aW9uLT53cml0ZSk7CisKKyAgICAgICAgcmV0dXJuOworCiAgICAgZGVmYXVsdDoKICNpZiAoTkdYX1NVUFBSRVNTX1dBUk4pCiAgICAgICAgIGxpbmUubGVuID0gMDsKQEAgLTI5MywyMCArMzA1LDYgQEAKIAogICAgIHMtPnByb3h5LT5idWZmZXItPnBvcyA9IHMtPnByb3h5LT5idWZmZXItPnN0YXJ0OwogICAgIHMtPnByb3h5LT5idWZmZXItPmxhc3QgPSBzLT5wcm94eS0+YnVmZmVyLT5zdGFydDsKLQotICAgIGlmIChzLT5pbWFwX3N0YXRlID09IG5neF9pbWFwX3Bhc3N3ZCkgewotICAgICAgICBzLT5jb25uZWN0aW9uLT5yZWFkLT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKLSAgICAgICAgcy0+Y29ubmVjdGlvbi0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOwotICAgICAgICByZXYtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOwotICAgICAgICBjLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7Ci0KLSAgICAgICAgcGNmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihzLCBuZ3hfaW1hcF9wcm94eV9tb2R1bGUpOwotICAgICAgICBuZ3hfYWRkX3RpbWVyKHMtPmNvbm5lY3Rpb24tPnJlYWQsIHBjZi0+dGltZW91dCk7Ci0gICAgICAgIG5neF9kZWxfdGltZXIoYy0+cmVhZCk7Ci0KLSAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSBOVUxMOwotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCAwLCAiY2xpZW50IGxvZ2dlZCBpbiIpOwotICAgIH0KIH0KIAogCkBAIC0zNDQsNyArMzQyLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHJjID0gbmd4X2ltYXBfcHJveHlfcmVhZF9yZXNwb25zZShzLCBOR1hfSU1BUF9XQUlUX09LKTsKKyAgICByYyA9IG5neF9pbWFwX3Byb3h5X3JlYWRfcmVzcG9uc2UocywgMCk7CiAKICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7CiAgICAgICAgIHJldHVybjsKQEAgLTM5NSw2ICszOTMsMjMgQEAKICAgICAgICAgcy0+aW1hcF9zdGF0ZSA9IG5neF9wb3AzX3Bhc3N3ZDsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIG5neF9wb3AzX3Bhc3N3ZDoKKyAgICAgICAgcy0+Y29ubmVjdGlvbi0+cmVhZC0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7CisgICAgICAgIHMtPmNvbm5lY3Rpb24tPndyaXRlLT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKKyAgICAgICAgcmV2LT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKKyAgICAgICAgYy0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOworCisgICAgICAgIHBjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYocywgbmd4X2ltYXBfcHJveHlfbW9kdWxlKTsKKyAgICAgICAgbmd4X2FkZF90aW1lcihzLT5jb25uZWN0aW9uLT5yZWFkLCBwY2YtPnRpbWVvdXQpOworICAgICAgICBuZ3hfZGVsX3RpbWVyKGMtPnJlYWQpOworCisgICAgICAgIGMtPmxvZy0+YWN0aW9uID0gTlVMTDsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgMCwgImNsaWVudCBsb2dnZWQgaW4iKTsKKworICAgICAgICBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyKHMtPmNvbm5lY3Rpb24tPndyaXRlKTsKKworICAgICAgICByZXR1cm47CisKICAgICBkZWZhdWx0OgogI2lmIChOR1hfU1VQUFJFU1NfV0FSTikKICAgICAgICAgbGluZS5sZW4gPSAwOwpAQCAtNDE0LDIwICs0MjksNiBAQAogCiAgICAgcy0+cHJveHktPmJ1ZmZlci0+cG9zID0gcy0+cHJveHktPmJ1ZmZlci0+c3RhcnQ7CiAgICAgcy0+cHJveHktPmJ1ZmZlci0+bGFzdCA9IHMtPnByb3h5LT5idWZmZXItPnN0YXJ0OwotCi0gICAgaWYgKHMtPmltYXBfc3RhdGUgPT0gbmd4X3BvcDNfcGFzc3dkKSB7Ci0gICAgICAgIHMtPmNvbm5lY3Rpb24tPnJlYWQtPmhhbmRsZXIgPSBuZ3hfaW1hcF9wcm94eV9oYW5kbGVyOwotICAgICAgICBzLT5jb25uZWN0aW9uLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7Ci0gICAgICAgIHJldi0+aGFuZGxlciA9IG5neF9pbWFwX3Byb3h5X2hhbmRsZXI7Ci0gICAgICAgIGMtPndyaXRlLT5oYW5kbGVyID0gbmd4X2ltYXBfcHJveHlfaGFuZGxlcjsKLQotICAgICAgICBwY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX3Byb3h5X21vZHVsZSk7Ci0gICAgICAgIG5neF9hZGRfdGltZXIocy0+Y29ubmVjdGlvbi0+cmVhZCwgcGNmLT50aW1lb3V0KTsKLSAgICAgICAgbmd4X2RlbF90aW1lcihjLT5yZWFkKTsKLQotICAgICAgICBjLT5sb2ctPmFjdGlvbiA9IE5VTEw7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsICJjbGllbnQgbG9nZ2VkIGluIik7Ci0gICAgfQogfQogCiAKQEAgLTQ0OSw3ICs0NTAsNyBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9pbWFwX3Byb3h5X3JlYWRfcmVzcG9uc2Uobmd4X2ltYXBfc2Vzc2lvbl90ICpzLCBuZ3hfdWludF90IHdoYXQpCituZ3hfaW1hcF9wcm94eV9yZWFkX3Jlc3BvbnNlKG5neF9pbWFwX3Nlc3Npb25fdCAqcywgbmd4X3VpbnRfdCBzdGF0ZSkKIHsKICAgICB1X2NoYXIgICAgICpwOwogICAgIHNzaXplX3QgICAgIG47CkBAIC00OTYsMTUgKzQ5NywyOSBAQAogICAgICAgICB9CiAKICAgICB9IGVsc2UgewotICAgICAgICBpZiAod2hhdCA9PSBOR1hfSU1BUF9XQUlUX09LKSB7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKworICAgICAgICBjYXNlIG5neF9pbWFwX3N0YXJ0OgogICAgICAgICAgICAgaWYgKHBbMF0gPT0gJyonICYmIHBbMV0gPT0gJyAnICYmIHBbMl0gPT0gJ08nICYmIHBbM10gPT0gJ0snKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGNhc2Ugbmd4X2ltYXBfbG9naW46CisgICAgICAgIGNhc2Ugbmd4X2ltYXBfdXNlcjoKICAgICAgICAgICAgIGlmIChwWzBdID09ICcrJykgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIG5neF9pbWFwX3Bhc3N3ZDoKKyAgICAgICAgICAgIGlmIChuZ3hfc3RybmNtcChwLCBzLT50YWcuZGF0YSwgcy0+dGFnLmxlbikgPT0gMCkgeworICAgICAgICAgICAgICAgIHAgKz0gcy0+dGFnLmxlbjsKKyAgICAgICAgICAgICAgICBpZiAocFswXSA9PSAnTycgJiYgcFsxXSA9PSAnSycpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2Vycm5vLmggYi9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaAppbmRleCBlMGM0YTE5Li5iOTQxYTQzIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaApAQCAtMjQsNiArMjQsNyBAQAogI2RlZmluZSBOR1hfRUJVU1kgICAgICAgICBFQlVTWQogI2RlZmluZSBOR1hfRUVYSVNUICAgICAgICBFRVhJU1QKICNkZWZpbmUgTkdYX0VOT1RESVIgICAgICAgRU5PVERJUgorI2RlZmluZSBOR1hfRUlTRElSICAgICAgICBFSVNESVIKICNkZWZpbmUgTkdYX0VJTlZBTCAgICAgICAgRUlOVkFMCiAjZGVmaW5lIE5HWF9FTk9TUEMgICAgICAgIEVOT1NQQwogI2RlZmluZSBOR1hfRVBJUEUgICAgICAgICBFUElQRQpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF9lcnJuby5oIGIvc3JjL29zL3dpbjMyL25neF9lcnJuby5oCmluZGV4IDliNmM3YjUuLjVmMWZhYjIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfZXJybm8uaAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNlbmRpZgogI2RlZmluZSBOR1hfRUVYSVNUICAgICAgICAgICAgICAgICBFUlJPUl9BTFJFQURZX0VYSVNUUwogI2RlZmluZSBOR1hfRU5PVERJUiAgICAgICAgICAgICAgICBFUlJPUl9QQVRIX05PVF9GT1VORAorI2RlZmluZSBOR1hfRUlTRElSICAgICAgICAgICAgICAgICBFUlJPUl9DQU5OT1RfTUFLRQogI2RlZmluZSBOR1hfRU5PU1BDICAgICAgICAgICAgICAgICBFUlJPUl9ESVNLX0ZVTEwKICNkZWZpbmUgTkdYX0VQSVBFICAgICAgICAgICAgICAgICAgRVBJUEUKICNkZWZpbmUgTkdYX0VBR0FJTiAgICAgICAgICAgICAgICAgV1NBRVdPVUxEQkxPQ0sK