ZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZSBiL3NyYy9NYWtlZmlsZQppbmRleCBlMjdhNmNlLi5jNzkwNjYyIDEwMDY0NAotLS0gYS9zcmMvTWFrZWZpbGUKKysrIGIvc3JjL01ha2VmaWxlCkBAIC01NTEsNyArNTUxLDEyIEBACiAjIH19fQogCiAjIExJTlQgLSBmb3IgcnVubmluZyBsaW50Ci1MSU5UX09QVElPTlMgPSAtYmVwcnh6RgorIyAgRm9yIHN0YW5kYXJkIGxpbnQKKyNMSU5UID0gbGludAorI0xJTlRfT1BUSU9OUyA9IC1iZXByeHpGCisjICBGb3Igc3BsaW50ICAoc2VlIGNsZWFubGludC52aW0gZm9yIGZpbHRlcmluZyB0aGUgb3V0cHV0KQorTElOVCA9IHNwbGludAorTElOVF9PUFRJT05TID0gK3VuaXhsaWIgLXdlYWsgLW1hY3JvdmFycHJlZml4ZXhjbHVkZSAtc2hvd2Z1bmMgLWxpbmVsZW4gOTk5OQogCiAjIFBST0ZJTElORyAtIFVuY29tbWVudCB0aGUgbmV4dCB0d28gbGluZXMgdG8gZG8gcHJvZmlsaW5nIHdpdGggZ2NjIGFuZCBncHJvZi4KICMgTWlnaHQgbm90IHdvcmsgd2l0aCBHVUkgb3IgUGVybC4KQEAgLTEyNTksMTYgKzEyNjQsMTYgQEAKICMgICAgIFRoaXMgaXMgZm9yIGNwcm90byAzIHBhdGNobGV2ZWwgOCBvciBiZWxvdwogIyAgICAgX19pbmxpbmUsIF9fYXR0cmlidXRlX18gYW5kIF9fZXh0ZW5zaW9uX18gYXJlIG5vdCByZWNvZ25pemVkIGJ5IGNwcm90bwogIyAgICAgR19JTVBMRU1FTlRfSU5MSU5FUyBpcyB0byBhdm9pZCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBnbGliL2d1dGlscy5oLgotTk9fQVRUUiA9IC1EX19pbmxpbmU9IC1EX19pbmxpbmVfXz0gLURHX0lNUExFTUVOVF9JTkxJTkVTIFwKLQkgIC1EIl9fYXR0cmlidXRlX19cXCh4XFwpPSIgLUQiX19hc21fX1xcKHhcXCk9IiBcCi0JICAtRF9fZXh0ZW5zaW9uX189IC1EX19yZXN0cmljdD0iIiBcCi0JICAtRF9fZ251Y192YV9saXN0PWNoYXIgLURfX2J1aWx0aW5fdmFfbGlzdD1jaGFyCisjTk9fQVRUUiA9IC1EX19pbmxpbmU9IC1EX19pbmxpbmVfXz0gLURHX0lNUExFTUVOVF9JTkxJTkVTIFwKKyMJICAtRCJfX2F0dHJpYnV0ZV9fXFwoeFxcKT0iIC1EIl9fYXNtX19cXCh4XFwpPSIgXAorIwkgIC1EX19leHRlbnNpb25fXz0gLURfX3Jlc3RyaWN0PSIiIFwKKyMJICAtRF9fZ251Y192YV9saXN0PWNoYXIgLURfX2J1aWx0aW5fdmFfbGlzdD1jaGFyCiAKICMKLSMgICAgIFRoaXMgaXMgZm9yIGNwcm90byAzIHBhdGNobGV2ZWwgOSBvciBhYm92ZSAoY3VycmVudGx5IDQuNikKKyMgICAgIFRoaXMgaXMgZm9yIGNwcm90byAzIHBhdGNobGV2ZWwgOSBvciBhYm92ZSAoY3VycmVudGx5IDQuNiwgNC43ZykKICMgICAgIF9faW5saW5lIGFuZCBfX2F0dHJpYnV0ZV9fIGFyZSBub3cgcmVjb2duaXplZCBieSBjcHJvdG8KICMgICAgIC1EImZvbygpPSIgaXMgbm90IHN1cHBvcnRlZCBieSBhbGwgY29tcGlsZXJzIHNvIGRvIG5vdCB1c2UgaXQKLSMgTk9fQVRUUj0KK05PX0FUVFI9CiAjCiAjICAgICBtYXliZSB0aGUgIi91c3IvYmluL2NjIC1FIiBoYXMgdG8gYmUgYWRqdXN0ZWQgZm9yIHNvbWUgc3lzdGVtcwogIyBUaGlzIGlzIGZvciBjcHJvdG8gMy41IHBhdGNobGV2ZWwgMzoKQEAgLTE0MzIsNiArMTQzNyw3IEBACiAJJChTTklGRl9TUkMpICQoV09SS1NIT1BfU1JDKSAkKFdTREVCVUdfU1JDKSAkKE5FVEJFQU5TX1NSQykKICNMSU5UX1NSQyA9ICQoU1JDKQogI0xJTlRfU1JDID0gJChBTExfU1JDKQorI0xJTlRfU1JDID0gJChCQVNJQ19TUkMpCiAKIE9CSiA9IFwKIAlvYmplY3RzL2J1ZmZlci5vIFwKQEAgLTIyNzIsMTIgKzIyNzgsMTIgQEAKIAogIyBSdW4gbGludC4gIENsZWFuIHVwIHRoZSAqLmxuIGZpbGVzIHRoYXQgYXJlIHNvbWV0aW1lcyBsZWZ0IGJlaGluZC4KIGxpbnQ6Ci0JbGludCAkKExJTlRfT1BUSU9OUykgJChMSU5UX0NGTEFHUykgJChMSU5UX0VYVFJBKSAkKExJTlRfU1JDKQorCSQoTElOVCkgJChMSU5UX09QVElPTlMpICQoTElOVF9DRkxBR1MpICQoTElOVF9FWFRSQSkgJChMSU5UX1NSQykKIAktcm0gLWYgKi5sbgogCiAjIENoZWNrIGRvc2luc3QuYyB3aXRoIGxpbnQuCiBsaW50aW5zdGFsbDoKLQlsaW50ICQoTElOVF9PUFRJT05TKSAtRFdJTjMyIC1EVU5JWF9MSU5UIGRvc2luc3QuYworCSQoTElOVCkgJChMSU5UX09QVElPTlMpIC1EV0lOMzIgLURVTklYX0xJTlQgZG9zaW5zdC5jCiAJLXJtIC1mIGRvc2luc3QubG4KIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9zcmMvYnVmZmVyLmMgYi9zcmMvYnVmZmVyLmMKaW5kZXggYTA1MmUxMi4uZTkyNDNkNCAxMDA2NDQKLS0tIGEvc3JjL2J1ZmZlci5jCisrKyBiL3NyYy9idWZmZXIuYwpAQCAtNDQsNiArNDQsNyBAQAogI2lmZGVmIEZFQVRfVElUTEUKIHN0YXRpYyBpbnQJdGlfY2hhbmdlIF9fQVJHUygoY2hhcl91ICpzdHIsIGNoYXJfdSAqKmxhc3QpKTsKICNlbmRpZgorc3RhdGljIGludAlhcHBlbmRfYXJnX251bWJlciBfX0FSR1MoKHdpbl9UICp3cCwgY2hhcl91ICpidWYsIGludCBidWZsZW4sIGludCBhZGRfZmlsZSkpOwogc3RhdGljIHZvaWQJZnJlZV9idWZmZXIgX19BUkdTKChidWZfVCAqKSk7CiBzdGF0aWMgdm9pZAlmcmVlX2J1ZmZlcl9zdHVmZiBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBmcmVlX29wdGlvbnMpKTsKIHN0YXRpYyB2b2lkCWNsZWFyX3dpbmluZm8gX19BUkdTKChidWZfVCAqYnVmKSk7CkBAIC0xNDUzLDEzICsxNDU0LDEzIEBACiAKICNpZmRlZiBGRUFUX0tFWU1BUAogICAgIGlmIChjdXJidWYtPmJfa21hcF9zdGF0ZSAmIEtFWU1BUF9JTklUKQotCWtleW1hcF9pbml0KCk7CisJKHZvaWQpa2V5bWFwX2luaXQoKTsKICNlbmRpZgogI2lmZGVmIEZFQVRfU1BFTEwKICAgICAvKiBNYXkgbmVlZCB0byBzZXQgdGhlIHNwZWxsIGxhbmd1YWdlLiAgQ2FuIG9ubHkgZG8gdGhpcyBhZnRlciB0aGUgYnVmZmVyCiAgICAgICogaGFzIGJlZW4gcHJvcGVybHkgc2V0dXAuICovCiAgICAgaWYgKCFjdXJidWYtPmJfaGVscCAmJiBjdXJ3aW4tPndfcF9zcGVsbCAmJiAqY3VyYnVmLT5iX3Bfc3BsICE9IE5VTCkKLQlkaWRfc2V0X3NwZWxsbGFuZyhjdXJidWYpOworCSh2b2lkKWRpZF9zZXRfc3BlbGxsYW5nKGN1cmJ1Zik7CiAjZW5kaWYKIAogICAgIHJlZHJhd19sYXRlcihOT1RfVkFMSUQpOwpAQCAtMjUxNiw3ICsyNTE3LDcgQEAKICAgICBidWZfVAkqYnVmOwogewogICAgIHdpbmluZm9fVAkqd2lwOwotICAgIHN0YXRpYyBwb3NfVCBub19wb3NpdGlvbiA9IHsxLCAwfTsKKyAgICBzdGF0aWMgcG9zX1Qgbm9fcG9zaXRpb24gPSBJTklUX1BPU19UKDEsIDAsIDApOwogCiAgICAgd2lwID0gZmluZF93aW5pbmZvKGJ1ZiwgRkFMU0UpOwogICAgIGlmICh3aXAgIT0gTlVMTCkKQEAgLTI1NzcsOCArMjU3OCw4IEBACiAJewogCSAgICBJT2J1ZmZbbGVuKytdID0gJyAnOwogCX0gd2hpbGUgKC0taSA+IDAgJiYgbGVuIDwgSU9TSVpFIC0gMTgpOwotCXZpbV9zbnByaW50ZigoY2hhciAqKUlPYnVmZiArIGxlbiwgSU9TSVpFIC0gbGVuLCBfKCJsaW5lICVsZCIpLAotCQlidWYgPT0gY3VyYnVmID8gY3Vyd2luLT53X2N1cnNvci5sbnVtCisJdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmICsgbGVuLCAoc2l6ZV90KShJT1NJWkUgLSBsZW4pLAorCQlfKCJsaW5lICVsZCIpLCBidWYgPT0gY3VyYnVmID8gY3Vyd2luLT53X2N1cnNvci5sbnVtCiAJCQkJCSAgICAgICA6IChsb25nKWJ1Zmxpc3RfZmluZGxudW0oYnVmKSk7CiAJbXNnX291dHRyYW5zKElPYnVmZik7CiAJb3V0X2ZsdXNoKCk7CSAgICAvKiBvdXRwdXQgb25lIGxpbmUgYXQgYSB0aW1lICovCkBAIC0yOTY3LDcgKzI5NjgsNyBAQAogCiAgICAgaWYgKGZ1bGxuYW1lID4gMSkJICAgIC8qIDIgQ1RSTC1HOiBpbmNsdWRlIGJ1ZmZlciBudW1iZXIgKi8KICAgICB7Ci0Jc3ByaW50ZigoY2hhciAqKWJ1ZmZlciwgImJ1ZiAlZDogIiwgY3VyYnVmLT5iX2ZudW0pOworCXZpbV9zbnByaW50ZigoY2hhciAqKWJ1ZmZlciwgSU9TSVpFLCAiYnVmICVkOiAiLCBjdXJidWYtPmJfZm51bSk7CiAJcCA9IGJ1ZmZlciArIFNUUkxFTihidWZmZXIpOwogICAgIH0KICAgICBlbHNlCkBAIC0zMDQxLDExICszMDQyLDEyIEBACiAJCShsb25nKWN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LAogCQluKTsKIAl2YWxpZGF0ZV92aXJ0Y29sKCk7Ci0JY29sX3ByaW50KGJ1ZmZlciArIFNUUkxFTihidWZmZXIpLAorCWxlbiA9IFNUUkxFTihidWZmZXIpOworCWNvbF9wcmludChidWZmZXIgKyBsZW4sIElPU0laRSAtIGxlbiwKIAkJICAgKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbCArIDEsIChpbnQpY3Vyd2luLT53X3ZpcnRjb2wgKyAxKTsKICAgICB9CiAKLSAgICAodm9pZClhcHBlbmRfYXJnX251bWJlcihjdXJ3aW4sIGJ1ZmZlciwgIXNob3J0bWVzcyhTSE1fRklMRSksIElPU0laRSk7CisgICAgKHZvaWQpYXBwZW5kX2FyZ19udW1iZXIoY3Vyd2luLCBidWZmZXIsIElPU0laRSwgIXNob3J0bWVzcyhTSE1fRklMRSkpOwogCiAgICAgaWYgKGRvbnRfdHJ1bmNhdGUpCiAgICAgewpAQCAtMzA3MywxNSArMzA3NSwxNiBAQAogfQogCiAgICAgdm9pZAotY29sX3ByaW50KGJ1ZiwgY29sLCB2Y29sKQorY29sX3ByaW50KGJ1ZiwgYnVmbGVuLCBjb2wsIHZjb2wpCiAgICAgY2hhcl91ICAqYnVmOworICAgIHNpemVfdCAgYnVmbGVuOwogICAgIGludAkgICAgY29sOwogICAgIGludAkgICAgdmNvbDsKIHsKICAgICBpZiAoY29sID09IHZjb2wpCi0Jc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVkIiwgY29sKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilidWYsIGJ1ZmxlbiwgIiVkIiwgY29sKTsKICAgICBlbHNlCi0Jc3ByaW50ZigoY2hhciAqKWJ1ZiwgIiVkLSVkIiwgY29sLCB2Y29sKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilidWYsIGJ1ZmxlbiwgIiVkLSVkIiwgY29sLCB2Y29sKTsKIH0KIAogI2lmIGRlZmluZWQoRkVBVF9USVRMRSkgfHwgZGVmaW5lZChQUk9UTykKQEAgLTMxOTQsMTggKzMxOTcsMTggQEAKIAkJaWYgKHAgPT0gYnVmICsgb2ZmKQogCQkgICAgLyogbXVzdCBiZSBhIGhlbHAgYnVmZmVyICovCiAJCSAgICB2aW1fc3RybmNweShidWYgKyBvZmYsIChjaGFyX3UgKilfKCJoZWxwIiksCi0JCQkJCQkJICAgIElPU0laRSAtIG9mZiAtIDEpOworCQkJCQkJICAoc2l6ZV90KShJT1NJWkUgLSBvZmYgLSAxKSk7CiAJCWVsc2UKIAkJICAgICpwID0gTlVMOwogCiAJCS8qIHRyYW5zbGF0ZSB1bnByaW50YWJsZSBjaGFycyAqLwogCQlwID0gdHJhbnNzdHIoYnVmICsgb2ZmKTsKLQkJdmltX3N0cm5jcHkoYnVmICsgb2ZmLCBwLCBJT1NJWkUgLSBvZmYgLSAxKTsKKwkJdmltX3N0cm5jcHkoYnVmICsgb2ZmLCBwLCAoc2l6ZV90KShJT1NJWkUgLSBvZmYgLSAxKSk7CiAJCXZpbV9mcmVlKHApOwogCQlTVFJDQVQoYnVmLCAiKSIpOwogCSAgICB9CiAKLQkgICAgYXBwZW5kX2FyZ19udW1iZXIoY3Vyd2luLCBidWYsIEZBTFNFLCBJT1NJWkUpOworCSAgICBhcHBlbmRfYXJnX251bWJlcihjdXJ3aW4sIGJ1ZiwgSU9TSVpFLCBGQUxTRSk7CiAKICNpZiBkZWZpbmVkKEZFQVRfQ0xJRU5UU0VSVkVSKQogCSAgICBpZiAoc2VydmVyTmFtZSAhPSBOVUxMKQpAQCAtMzUyMCw3ICszNTIzLDcgQEAKIAkJICAgIG4gPSAobG9uZykocCAtIHQpIC0gaXRlbVtncm91cGl0ZW1bZ3JvdXBkZXB0aF1dLm1heHdpZCArIDE7CiAKIAkJKnQgPSAnPCc7Ci0JCW1jaF9tZW1tb3ZlKHQgKyAxLCB0ICsgbiwgcCAtICh0ICsgbikpOworCQltY2hfbWVtbW92ZSh0ICsgMSwgdCArIG4sIChzaXplX3QpKHAgLSAodCArIG4pKSk7CiAJCXAgPSBwIC0gbiArIDE7CiAjaWZkZWYgRkVBVF9NQllURQogCQkvKiBGaWxsIHVwIHNwYWNlIGxlZnQgb3ZlciBieSBoYWxmIGEgZG91YmxlLXdpZGUgY2hhci4gKi8KQEAgLTM1NTAsNyArMzU1Myw3IEBACiAJCWVsc2UKIAkJewogCQkgICAgLyogZmlsbCBieSBpbnNlcnRpbmcgY2hhcmFjdGVycyAqLwotCQkgICAgbWNoX21lbW1vdmUodCArIG4gLSBsLCB0LCBwIC0gdCk7CisJCSAgICBtY2hfbWVtbW92ZSh0ICsgbiAtIGwsIHQsIChzaXplX3QpKHAgLSB0KSk7CiAJCSAgICBsID0gbiAtIGw7CiAJCSAgICBpZiAocCArIGwgPj0gb3V0ICsgb3V0bGVuKQogCQkJbCA9IChsb25nKSgob3V0ICsgb3V0bGVuKSAtIHAgLSAxKTsKQEAgLTM2ODYsNyArMzY4OSw3IEBACiAJICAgIHAgPSB0OwogCiAjaWZkZWYgRkVBVF9FVkFMCi0JICAgIHNwcmludGYoKGNoYXIgKil0bXAsICIlZCIsIGN1cmJ1Zi0+Yl9mbnVtKTsKKwkgICAgdmltX3NucHJpbnRmKChjaGFyICopdG1wLCBzaXplb2YodG1wKSwgIiVkIiwgY3VyYnVmLT5iX2ZudW0pOwogCSAgICBzZXRfaW50ZXJuYWxfc3RyaW5nX3ZhcigoY2hhcl91ICopImFjdHVhbF9jdXJidWYiLCB0bXApOwogCiAJICAgIG9fY3VyYnVmID0gY3VyYnVmOwpAQCAtMzc1MywxMyArMzc1NiwxMyBAQAogCiAJY2FzZSBTVExfQUxUUEVSQ0VOVDoKIAkgICAgc3RyID0gdG1wOwotCSAgICBnZXRfcmVsX3Bvcyh3cCwgc3RyKTsKKwkgICAgZ2V0X3JlbF9wb3Mod3AsIHN0ciwgVE1QTEVOKTsKIAkgICAgYnJlYWs7CiAKIAljYXNlIFNUTF9BUkdMSVNUU1RBVDoKIAkgICAgZmlsbGFibGUgPSBGQUxTRTsKIAkgICAgdG1wWzBdID0gMDsKLQkgICAgaWYgKGFwcGVuZF9hcmdfbnVtYmVyKHdwLCB0bXAsIEZBTFNFLCAoaW50KXNpemVvZih0bXApKSkKKwkgICAgaWYgKGFwcGVuZF9hcmdfbnVtYmVyKHdwLCB0bXAsIChpbnQpc2l6ZW9mKHRtcCksIEZBTFNFKSkKIAkJc3RyID0gdG1wOwogCSAgICBicmVhazsKIApAQCAtMzc5NCw3ICszNzk3LDcgQEAKIAljYXNlIFNUTF9CWVRFVkFMX1g6CiAJICAgIGJhc2UgPSAnWCc7CiAJY2FzZSBTVExfQllURVZBTDoKLQkgICAgaWYgKHdwLT53X2N1cnNvci5jb2wgPiBTVFJMRU4obGluZWNvbnQpKQorCSAgICBpZiAod3AtPndfY3Vyc29yLmNvbCA+IChjb2xucl9UKVNUUkxFTihsaW5lY29udCkpCiAJCW51bSA9IDA7CiAJICAgIGVsc2UKIAkgICAgewpAQCAtMzk2Nyw3ICszOTcwLDcgQEAKIAkgICAgaWYgKHplcm9wYWQpCiAJCSp0KysgPSAnMCc7CiAJICAgICp0KysgPSAnKic7Ci0JICAgICp0KysgPSBuYmFzZSA9PSAxNiA/IGJhc2UgOiAobmJhc2UgPT0gOCA/ICdvJyA6ICdkJyk7CisJICAgICp0KysgPSBuYmFzZSA9PSAxNiA/IGJhc2UgOiAoY2hhcl91KShuYmFzZSA9PSA4ID8gJ28nIDogJ2QnKTsKIAkgICAgKnQgPSAwOwogCiAJICAgIGZvciAobiA9IG51bSwgbCA9IDE7IG4gPj0gbmJhc2U7IG4gLz0gbmJhc2UpCkBAIC00MTYwLDEzICs0MTYzLDE0IEBACiAjaWYgZGVmaW5lZChGRUFUX1NUTF9PUFQpIHx8IGRlZmluZWQoRkVBVF9DTURMX0lORk8pIFwKIAkgICAgfHwgZGVmaW5lZChGRUFUX0dVSV9UQUJMSU5FKSB8fCBkZWZpbmVkKFBST1RPKQogLyoKLSAqIEdldCByZWxhdGl2ZSBjdXJzb3IgcG9zaXRpb24gaW4gd2luZG93IGludG8gInN0cltdIiwgaW4gdGhlIGZvcm0gOTklLCB1c2luZwotICogIlRvcCIsICJCb3QiIG9yICJBbGwiIHdoZW4gYXBwcm9wcmlhdGUuCisgKiBHZXQgcmVsYXRpdmUgY3Vyc29yIHBvc2l0aW9uIGluIHdpbmRvdyBpbnRvICJidWZbYnVmbGVuXSIsIGluIHRoZSBmb3JtIDk5JSwKKyAqIHVzaW5nICJUb3AiLCAiQm90IiBvciAiQWxsIiB3aGVuIGFwcHJvcHJpYXRlLgogICovCiAgICAgdm9pZAotZ2V0X3JlbF9wb3Mod3AsIHN0cikKK2dldF9yZWxfcG9zKHdwLCBidWYsIGJ1ZmxlbikKICAgICB3aW5fVAkqd3A7Ci0gICAgY2hhcl91CSpzdHI7CisgICAgY2hhcl91CSpidWY7CisgICAgaW50CQlidWZsZW47CiB7CiAgICAgbG9uZwlhYm92ZTsgLyogbnVtYmVyIG9mIGxpbmVzIGFib3ZlIHdpbmRvdyAqLwogICAgIGxvbmcJYmVsb3c7IC8qIG51bWJlciBvZiBsaW5lcyBiZWxvdyB3aW5kb3cgKi8KQEAgLTQxNzcsMzQgKzQxODEsMzUgQEAKICNlbmRpZgogICAgIGJlbG93ID0gd3AtPndfYnVmZmVyLT5iX21sLm1sX2xpbmVfY291bnQgLSB3cC0+d19ib3RsaW5lICsgMTsKICAgICBpZiAoYmVsb3cgPD0gMCkKLQlTVFJDUFkoc3RyLCBhYm92ZSA9PSAwID8gXygiQWxsIikgOiBfKCJCb3QiKSk7CisJdmltX3N0cm5jcHkoYnVmLCAoY2hhcl91ICopKGFib3ZlID09IDAgPyBfKCJBbGwiKSA6IF8oIkJvdCIpKSwKKwkJCQkJCQkoc2l6ZV90KShidWZsZW4gLSAxKSk7CiAgICAgZWxzZSBpZiAoYWJvdmUgPD0gMCkKLQlTVFJDUFkoc3RyLCBfKCJUb3AiKSk7CisJdmltX3N0cm5jcHkoYnVmLCAoY2hhcl91ICopXygiVG9wIiksIChzaXplX3QpKGJ1ZmxlbiAtIDEpKTsKICAgICBlbHNlCi0Jc3ByaW50ZigoY2hhciAqKXN0ciwgIiUyZCUlIiwgYWJvdmUgPiAxMDAwMDAwTAorCXZpbV9zbnByaW50ZigoY2hhciAqKWJ1ZiwgKHNpemVfdClidWZsZW4sICIlMmQlJSIsIGFib3ZlID4gMTAwMDAwMEwKIAkJCQkgICAgPyAoaW50KShhYm92ZSAvICgoYWJvdmUgKyBiZWxvdykgLyAxMDBMKSkKIAkJCQkgICAgOiAoaW50KShhYm92ZSAqIDEwMEwgLyAoYWJvdmUgKyBiZWxvdykpKTsKIH0KICNlbmRpZgogCiAvKgotICogQXBwZW5kIChmaWxlIDIgb2YgOCkgdG8gJ2J1ZicsIGlmIGVkaXRpbmcgbW9yZSB0aGFuIG9uZSBmaWxlLgorICogQXBwZW5kIChmaWxlIDIgb2YgOCkgdG8gImJ1ZltidWZsZW5dIiwgaWYgZWRpdGluZyBtb3JlIHRoYW4gb25lIGZpbGUuCiAgKiBSZXR1cm4gVFJVRSBpZiBpdCB3YXMgYXBwZW5kZWQuCiAgKi8KLSAgICBpbnQKLWFwcGVuZF9hcmdfbnVtYmVyKHdwLCBidWYsIGFkZF9maWxlLCBtYXhsZW4pCisgICAgc3RhdGljIGludAorYXBwZW5kX2FyZ19udW1iZXIod3AsIGJ1ZiwgYnVmbGVuLCBhZGRfZmlsZSkKICAgICB3aW5fVAkqd3A7CiAgICAgY2hhcl91CSpidWY7CisgICAgaW50CQlidWZsZW47CiAgICAgaW50CQlhZGRfZmlsZTsJLyogQWRkICJmaWxlIiBiZWZvcmUgdGhlIGFyZyBudW1iZXIgKi8KLSAgICBpbnQJCW1heGxlbjsJCS8qIG1heGltdW0gbnIgb2YgY2hhcnMgaW4gYnVmIG9yIHplcm8qLwogewogICAgIGNoYXJfdQkqcDsKIAogICAgIGlmIChBUkdDT1VOVCA8PSAxKQkJLyogbm90aGluZyB0byBkbyAqLwogCXJldHVybiBGQUxTRTsKIAotICAgIHAgPSBidWYgKyBTVFJMRU4oYnVmKTsJCS8qIGdvIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqLwotICAgIGlmIChtYXhsZW4gJiYgcCAtIGJ1ZiArIDM1ID49IG1heGxlbikgLyogZ2V0dGluZyB0b28gbG9uZyAqLworICAgIHAgPSBidWYgKyBTVFJMRU4oYnVmKTsJLyogZ28gdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyICovCisgICAgaWYgKHAgLSBidWYgKyAzNSA+PSBidWZsZW4pCS8qIGdldHRpbmcgdG9vIGxvbmcgKi8KIAlyZXR1cm4gRkFMU0U7CiAgICAgKnArKyA9ICcgJzsKICAgICAqcCsrID0gJygnOwpAQCAtNDIxMyw3ICs0MjE4LDggQEAKIAlTVFJDUFkocCwgImZpbGUgIik7CiAJcCArPSA1OwogICAgIH0KLSAgICBzcHJpbnRmKChjaGFyICopcCwgd3AtPndfYXJnX2lkeF9pbnZhbGlkID8gIiglZCkgb2YgJWQpIgorICAgIHZpbV9zbnByaW50ZigoY2hhciAqKXAsIChzaXplX3QpKGJ1ZmxlbiAtIChwIC0gYnVmKSksCisJCXdwLT53X2FyZ19pZHhfaW52YWxpZCA/ICIoJWQpIG9mICVkKSIKIAkJCQkgIDogIiVkIG9mICVkKSIsIHdwLT53X2FyZ19pZHggKyAxLCBBUkdDT1VOVCk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CkBAIC00OTk2LDcgKzUwMDIsNyBAQAogCWlmICh0YWIgIT0gTlVMTCkKIAl7CiAJICAgICp0YWIrKyA9ICdcMCc7Ci0JICAgIGNvbCA9IGF0b2koKGNoYXIgKil0YWIpOworCSAgICBjb2wgPSAoY29sbnJfVClhdG9pKChjaGFyICopdGFiKTsKIAkgICAgdGFiID0gdmltX3N0cnJjaHIoeGxpbmUsICdcdCcpOwogCSAgICBpZiAodGFiICE9IE5VTEwpCiAJICAgIHsKQEAgLTUwMzQsNiArNTA0MCw3IEBACiAjZW5kaWYKICAgICBjaGFyX3UJKmxpbmU7CiAgICAgaW50CQltYXhfYnVmZmVyczsKKyAgICBzaXplX3QJbGVuOwogCiAgICAgaWYgKGZpbmRfdmltaW5mb19wYXJhbWV0ZXIoJyUnKSA9PSBOVUxMKQogCXJldHVybjsKQEAgLTUwNDIsNyArNTA0OSw4IEBACiAgICAgbWF4X2J1ZmZlcnMgPSBnZXRfdmltaW5mb19wYXJhbWV0ZXIoJyUnKTsKIAogICAgIC8qIEFsbG9jYXRlIHJvb20gZm9yIHRoZSBmaWxlIG5hbWUsIGxudW0gYW5kIGNvbC4gKi8KLSAgICBsaW5lID0gYWxsb2MoTUFYUEFUSEwgKyA0MCk7CisjZGVmaW5lIExJTkVfQlVGX0xFTiAoTUFYUEFUSEwgKyA0MCkKKyAgICBsaW5lID0gYWxsb2MoTElORV9CVUZfTEVOKTsKICAgICBpZiAobGluZSA9PSBOVUxMKQogCXJldHVybjsKIApAQCAtNTA2OCw3ICs1MDc2LDggQEAKIAkgICAgYnJlYWs7CiAJcHV0YygnJScsIGZwKTsKIAlob21lX3JlcGxhY2UoTlVMTCwgYnVmLT5iX2ZmbmFtZSwgbGluZSwgTUFYUEFUSEwsIFRSVUUpOwotCXNwcmludGYoKGNoYXIgKilsaW5lICsgU1RSTEVOKGxpbmUpLCAiXHQlbGRcdCVkIiwKKwlsZW4gPSBTVFJMRU4obGluZSk7CisJdmltX3NucHJpbnRmKChjaGFyICopbGluZSArIGxlbiwgbGVuIC0gTElORV9CVUZfTEVOLCAiXHQlbGRcdCVkIiwKIAkJCShsb25nKWJ1Zi0+Yl9sYXN0X2N1cnNvci5sbnVtLAogCQkJYnVmLT5iX2xhc3RfY3Vyc29yLmNvbCk7CiAJdmltaW5mb193cml0ZXN0cmluZyhmcCwgbGluZSk7CkBAIC01MjI2LDcgKzUyMzUsNyBAQAogICAgIHJldHVybjsKIH0KIAotICAgIGludAorICAgIGxpbmVucl9UCiBidWZfY2hhbmdlX3NpZ25fdHlwZShidWYsIG1hcmtJZCwgdHlwZW5yKQogICAgIGJ1Zl9UCSpidWY7CQkvKiBidWZmZXIgdG8gc3RvcmUgc2lnbiBpbiAqLwogICAgIGludAkJbWFya0lkOwkJLyogc2lnbiBJRCAqLwpAQCAtNTI0MywxMCArNTI1MiwxMCBAQAogCX0KICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKGxpbmVucl9UKTA7CiB9CiAKLSAgICBpbnRfdQorICAgIGludAogYnVmX2dldHNpZ250eXBlKGJ1ZiwgbG51bSwgdHlwZSkKICAgICBidWZfVAkqYnVmOwogICAgIGxpbmVucl9UCWxudW07CmRpZmYgLS1naXQgYS9zcmMvY2hhcnNldC5jIGIvc3JjL2NoYXJzZXQuYwppbmRleCAwZjRiMGI5Li45YmY3NGE4IDEwMDY0NAotLS0gYS9zcmMvY2hhcnNldC5jCisrKyBiL3NyYy9jaGFyc2V0LmMKQEAgLTE3LDcgKzE3LDcgQEAKIHN0YXRpYyBpbnQgd2luX25vbGJyX2NoYXJ0YWJzaXplIF9fQVJHUygod2luX1QgKndwLCBjaGFyX3UgKnMsIGNvbG5yX1QgY29sLCBpbnQgKmhlYWRwKSk7CiAjZW5kaWYKIAotc3RhdGljIGludCBucjJoZXggX19BUkdTKChpbnQgYykpOworc3RhdGljIHVuc2lnbmVkIG5yMmhleCBfX0FSR1MoKHVuc2lnbmVkIGMpKTsKIAogc3RhdGljIGludCAgICBjaGFydGFiX2luaXRpYWxpemVkID0gRkFMU0U7CiAKQEAgLTY2NCw3ICs2NjQsNyBAQAogICAgIH0KICNlbmRpZgogICAgIGJ1ZlsrK2ldID0gbnIyaGV4KCh1bnNpZ25lZCljID4+IDQpOwotICAgIGJ1ZlsrK2ldID0gbnIyaGV4KGMpOworICAgIGJ1ZlsrK2ldID0gbnIyaGV4KCh1bnNpZ25lZCljKTsKICAgICBidWZbKytpXSA9ICc+JzsKICAgICBidWZbKytpXSA9IE5VTDsKIH0KQEAgLTY3NCw5ICs2NzQsOSBAQAogICogTG93ZXIgY2FzZSBsZXR0ZXJzIGFyZSB1c2VkIHRvIGF2b2lkIHRoZSBjb25mdXNpb24gb2YgPEYxPiBiZWluZyAweGYxIG9yCiAgKiBmdW5jdGlvbiBrZXkgMS4KICAqLwotICAgIHN0YXRpYyBpbnQKKyAgICBzdGF0aWMgdW5zaWduZWQKIG5yMmhleChjKQotICAgIGludAkJYzsKKyAgICB1bnNpZ25lZAljOwogewogICAgIGlmICgoYyAmIDB4ZikgPD0gOSkKIAlyZXR1cm4gKGMgJiAweGYpICsgJzAnOwpAQCAtODg0LDcgKzg4NCw3IEBACiAgICAgaWYgKGMgPj0gMHgxMDApCiAgICAgewogCWlmIChlbmNfZGJjcyAhPSAwKQotCSAgICByZXR1cm4gZGJjc19jbGFzcygodW5zaWduZWQpYyA+PiA4LCBjICYgMHhmZikgPj0gMjsKKwkgICAgcmV0dXJuIGRiY3NfY2xhc3MoKHVuc2lnbmVkKWMgPj4gOCwgKHVuc2lnbmVkKShjICYgMHhmZikpID49IDI7CiAJaWYgKGVuY191dGY4KQogCSAgICByZXR1cm4gdXRmX2NsYXNzKGMpID49IDI7CiAgICAgfQpAQCAtMTA5MCw3ICsxMDkwLDcgQEAKIAkgKi8KIAludW1iZXJleHRyYSA9IHdpbl9jb2xfb2ZmKHdwKTsKIAljb2wyID0gY29sOwotCWNvbG1heCA9IFdfV0lEVEgod3ApIC0gbnVtYmVyZXh0cmE7CisJY29sbWF4ID0gKGNvbG5yX1QpKFdfV0lEVEgod3ApIC0gbnVtYmVyZXh0cmEpOwogCWlmIChjb2wgPj0gY29sbWF4KQogCXsKIAkgICAgbiA9IGNvbG1heCArIHdpbl9jb2xfb2ZmMih3cCk7CkBAIC0xMjAxLDE3ICsxMjAxLDE3IEBACiAgICAgd2luX1QJKndwOwogICAgIGNvbG5yX1QJdmNvbDsKIHsKLSAgICBjb2xucl9UCXdpZHRoMTsJCS8qIHdpZHRoIG9mIGZpcnN0IGxpbmUgKGFmdGVyIGxpbmUgbnVtYmVyKSAqLwotICAgIGNvbG5yX1QJd2lkdGgyOwkJLyogd2lkdGggb2YgZnVydGhlciBsaW5lcyAqLworICAgIGludAkJd2lkdGgxOwkJLyogd2lkdGggb2YgZmlyc3QgbGluZSAoYWZ0ZXIgbGluZSBudW1iZXIpICovCisgICAgaW50CQl3aWR0aDI7CQkvKiB3aWR0aCBvZiBmdXJ0aGVyIGxpbmVzICovCiAKICNpZmRlZiBGRUFUX1ZFUlRTUExJVAogICAgIGlmICh3cC0+d193aWR0aCA9PSAwKQkvKiB0aGVyZSBpcyBubyBib3JkZXIgKi8KIAlyZXR1cm4gRkFMU0U7CiAjZW5kaWYKICAgICB3aWR0aDEgPSBXX1dJRFRIKHdwKSAtIHdpbl9jb2xfb2ZmKHdwKTsKLSAgICBpZiAodmNvbCA8IHdpZHRoMSAtIDEpCisgICAgaWYgKChpbnQpdmNvbCA8IHdpZHRoMSAtIDEpCiAJcmV0dXJuIEZBTFNFOwotICAgIGlmICh2Y29sID09IHdpZHRoMSAtIDEpCisgICAgaWYgKChpbnQpdmNvbCA9PSB3aWR0aDEgLSAxKQogCXJldHVybiBUUlVFOwogICAgIHdpZHRoMiA9IHdpZHRoMSArIHdpbl9jb2xfb2ZmMih3cCk7CiAgICAgcmV0dXJuICgodmNvbCAtIHdpZHRoMSkgJSB3aWR0aDIgPT0gd2lkdGgyIC0gMSk7CkBAIC0xMzk2LDEzICsxMzk2LDEzIEBACiAjIGlmZGVmIEZFQVRfTUJZVEUKIAkvKiBDYW5ub3QgcHV0IHRoZSBjdXJzb3Igb24gcGFydCBvZiBhIHdpZGUgY2hhcmFjdGVyLiAqLwogCXB0ciA9IG1sX2dldF9idWYod3AtPndfYnVmZmVyLCBwb3MtPmxudW0sIEZBTFNFKTsKLQlpZiAocG9zLT5jb2wgPCBTVFJMRU4ocHRyKSkKKwlpZiAocG9zLT5jb2wgPCAoY29sbnJfVClTVFJMRU4ocHRyKSkKIAl7CiAJICAgIGludCBjID0gKCptYl9wdHIyY2hhcikocHRyICsgcG9zLT5jb2wpOwogCiAJICAgIGlmIChjICE9IFRBQiAmJiB2aW1faXNwcmludGMoYykpCiAJICAgIHsKLQkJZW5kYWRkID0gY2hhcjJjZWxscyhjKSAtIDE7CisJCWVuZGFkZCA9IChjb2xucl9UKShjaGFyMmNlbGxzKGMpIC0gMSk7CiAJCWlmIChjb2xhZGQgPiBlbmRhZGQpCS8qIHBhc3QgZW5kIG9mIGxpbmUgKi8KIAkJICAgIGVuZGFkZCA9IDA7CiAJCWVsc2UKQEAgLTE1NzMsMTAgKzE1NzMsMTYgQEAKICNkZWZpbmUgTEFUSU4xTE9XRVIgJ2wnCiAjZGVmaW5lIExBVElOMVVQUEVSICdVJwogCisjaWZkZWYgU19TUExJTlRfUyAgIC8qIHNwbGludCBjYW4ndCBoYW5kbGUgc29tZSA4IGJpdCBjaGFycyAqLworc3RhdGljIGNoYXJfdSBsYXRpbjFmbGFnc1tdID0gKGNoYXJfdSAqKSIgIjsKK3N0YXRpYyBjaGFyX3UgbGF0aW4xdXBwZXJbXSA9IChjaGFyX3UgKikiICI7CitzdGF0aWMgY2hhcl91IGxhdGluMWxvd2VyW10gPSAoY2hhcl91ICopIiAiOworI2Vsc2UKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdJV8nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/ICovCiBzdGF0aWMgY2hhcl91IGxhdGluMWZsYWdzWzI1N10gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSAgICAgIGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUgVVVVVVVVVWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbCBsbGxsbGxsbCI7CiBzdGF0aWMgY2hhcl91IGxhdGluMXVwcGVyWzI1N10gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e38DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW99jZ2tvc3d7/IjsKIHN0YXRpYyBjaGFyX3UgbGF0aW4xbG93ZXJbMjU3XSA9ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX21/j5+vv8/f7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8iOworI2VuZGlmCiAKICAgICBpbnQKIHZpbV9pc2xvd2VyKGMpCmRpZmYgLS1naXQgYS9zcmMvY2xlYW5saW50LnZpbSBiL3NyYy9jbGVhbmxpbnQudmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNmE5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvY2xlYW5saW50LnZpbQpAQCAtMCwwICsxLDI3IEBACisiIFZpbSB0b29sOiBGaWx0ZXIgb3V0cHV0IG9mIHNwbGludAorIgorIiBNYWludGFpbmVyOglCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPgorIiBMYXN0IENoYW5nZToJMjAwOSBNYXkgMDUKKworIiBVc2FnZTogcmVkaXJlY3Qgb3V0cHV0IG9mICJtYWtlIGxpbnQiIHRvIGEgZmlsZSwgZWRpdCB0aGF0IGZpbGUgd2l0aCBWaW0gYW5kCisiIDpjYWxsIENsZWFuTGludCgpCisiIFRoaXMgZGVsZXRlcyBpcnJlbGV2YW50IG1lc3NhZ2VzLiAgV2hhdCByZW1haW5zIG1pZ2h0IGJlIHZhbGlkIHdhcm5pbmdzLgorCitmdW4hIENsZWFuTGludCgpCisgIGcvXiAgVHlwZXMgYXJlIGluY29tcGF0aWJsZS9sb2NrbWFya3MgZAorICBnL0Fzc2lnbm1lbnQgb2YgZGV2X3QgdG8gX19kZXZfdDovbG9ja21hcmtzIGQKKyAgZy9Bc3NpZ25tZW50IG9mIF9fZGV2X3QgdG8gZGV2X3Q6L2xvY2ttYXJrcyBkCisgIGcvT3BlcmFuZHMgb2YgPT0gaGF2ZSBpbmNvbXBhdGlibGUgdHlwZXMgKF9fZGV2X3QsIGRldl90KTogL2xvY2ttYXJrcyBkCisgIGcvT3BlcmFuZHMgb2YgPT0gaGF2ZSBpbmNvbXBhdGlibGUgdHlwZXMgKHVuc2lnbmVkIGludCwgaW50KTogL2xvY2ttYXJrcyBkCisgIGcvQXNzaWdubWVudCBvZiBjaGFyIHRvIGNoYXJfdTogL2xvY2ttYXJrcyBkCisgIGcvQXNzaWdubWVudCBvZiB1bnNpZ25lZCBpbnQgdG8gaW50OiAvbG9ja21hcmtzIGQKKyAgZy9Bc3NpZ25tZW50IG9mIGNvbG5yX1QgdG8gaW50OiAvbG9ja21hcmtzIGQKKyAgZy9Bc3NpZ25tZW50IG9mIGludCB0byBjaGFyX3U6IC9sb2NrbWFya3MgZAorICBnL0Z1bmN0aW9uIC4qIGV4cGVjdHMgYXJnIC4gdG8gYmUgd2ludF90IGdldHMgaW50OiAvbG9ja21hcmtzIGQKKyAgZy9eZGlncmFwaC5jLipkaWdyYXBoZGVmYXVsdC4qaXMgdHlwZSBjaGFyLCBleHBlY3RzIGNoYXJfdTovbG9ja21hcmtzIGQKKyAgZy9eZGlncmFwaC5jLipBZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIGVycm9ycyBmb3IgZGlncmFwaGRlZmF1bHQgbm90IHJlcG9ydGVkL2xvY2ttYXJrcyBkCisgIGcvRnVuY3Rpb24gc3RybmNhc2VjbXAgZXhwZWN0cyBhcmcgMyB0byBiZSBpbnQgZ2V0cyBzaXplX3Q6IC9sb2NrbWFya3MgZAorICBnLyBUbyBpZ25vcmUgc2lnbnMgaW4gdHlwZSBjb21wYXJpc29ucyB1c2UgK2lnbm9yZXNpZ25zL2xvY2ttYXJrcyBkCisgIGcvIFRvIGFsbG93IGFyYml0cmFyeSBpbnRlZ3JhbCB0eXBlcyB0byBtYXRjaCBhbnkgaW50ZWdyYWwgdHlwZSwgdXNlICttYXRjaGFueWludGVncmFsLi9sb2NrbWFya3MgZAorICBnLyBUbyBhbGxvdyBhcmJpdHJhcnkgaW50ZWdyYWwgdHlwZXMgdG8gbWF0Y2ggbG9uZyB1bnNpZ25lZCwgdXNlICtsb25naW50ZWdyYWwuL2xvY2ttYXJrcyBkCitlbmRmdW4KZGlmZiAtLWdpdCBhL3NyYy9kaWdyYXBoLmMgYi9zcmMvZGlncmFwaC5jCmluZGV4IGI4Njc1OTguLjc0YjdmYjIgMTAwNjQ0Ci0tLSBhL3NyYy9kaWdyYXBoLmMKKysrIGIvc3JjL2RpZ3JhcGguYwpAQCAtMzIsNyArMzIsNyBAQAogc3RhdGljIHZvaWQgcHJpbnRkaWdyYXBoIF9fQVJHUygoZGlncl9UICopKTsKIAogLyogZGlncmFwaHMgYWRkZWQgYnkgdGhlIHVzZXIgKi8KLXN0YXRpYyBnYXJyYXlfVAl1c2VyX2RpZ3JhcGhzID0gezAsIDAsIHNpemVvZihkaWdyX1QpLCAxMCwgTlVMTH07CitzdGF0aWMgZ2FycmF5X1QJdXNlcl9kaWdyYXBocyA9IHswLCAwLCAoaW50KXNpemVvZihkaWdyX1QpLCAxMCwgTlVMTH07CiAKIC8qCiAgKiBOb3RlOiBDaGFyYWN0ZXJzIG1hcmtlZCB3aXRoIFhYIGFyZSBub3QgaW5jbHVkZWQgbGl0ZXJhbGx5LCBiZWNhdXNlIHNvbWUKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCXsnXCcnLCAnICcsIDIxM30sCS8qICcgKi8KIAl7Jy0nLCAnOicsIDIxNH0sCS8qIPcgKi8KIAl7J0QnLCAnSScsIDIxNX0sCS8qINcgKi8KLQl7J3knLCAnOicsIDIxNn0sCS8qIP8gKi8KKwl7J3knLCAnOicsIDIxNn0sCS8qIDw4ZT4gKi8KIAl7J1knLCAnOicsIDIxN30sCS8qII0gKi8KIAl7Jy8nLCAnLycsIDIxOH0sCS8qII4gKi8KIAl7J0UnLCAnPScsIDIxOX0sCS8qIKQgRXVybyBTeXN0ZW0gPj04LjUgKi8KQEAgLTIzNzEsMTAgKzIzNzEsMTAgQEAKIAl9CiAJZWxzZQogI2VuZGlmCi0JICAgICpwKysgPSBkcC0+cmVzdWx0OworCSAgICAqcCsrID0gKGNoYXJfdSlkcC0+cmVzdWx0OwogCWlmIChjaGFyMmNlbGxzKGRwLT5yZXN1bHQpID09IDEpCiAJICAgICpwKysgPSAnICc7Ci0Jc3ByaW50ZigoY2hhciAqKXAsICIgJTNkIiwgZHAtPnJlc3VsdCk7CisJdmltX3NucHJpbnRmKChjaGFyICopcCwgc2l6ZW9mKGJ1ZikgLSAocCAtIGJ1ZiksICIgJTNkIiwgZHAtPnJlc3VsdCk7CiAJbXNnX291dHRyYW5zKGJ1Zik7CiAgICAgfQogfQpAQCAtMjM5NSw3ICsyMzk1LDEwIEBACiBzdGF0aWMgdm9pZCBrZXltYXBfdW5sb2FkIF9fQVJHUygodm9pZCkpOwogCiAvKgotICogU2V0IHVwIGtleSBtYXBwaW5nIHRhYmxlcyBmb3IgdGhlICdrZXltYXAnIG9wdGlvbgorICogU2V0IHVwIGtleSBtYXBwaW5nIHRhYmxlcyBmb3IgdGhlICdrZXltYXAnIG9wdGlvbi4KKyAqIFJldHVybnMgTlVMTCBpZiBPSywgYW4gZXJyb3IgbWVzc2FnZSBmb3IgZmFpbHVyZS4gIFRoaXMgb25seSBuZWVkcyB0byBiZQorICogdXNlZCB3aGVuIHNldHRpbmcgdGhlIG9wdGlvbiwgbm90IGxhdGVyIHdoZW4gdGhlIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4KKyAqIGNoZWNrZWQuCiAgKi8KICAgICBjaGFyX3UgKgoga2V5bWFwX2luaXQoKQpAQCAtMjQxMiwyNSArMjQxNSwyOSBAQAogICAgIGVsc2UKICAgICB7CiAJY2hhcl91CSpidWY7CisJc2l6ZV90ICBidWZsZW47CiAKIAkvKiBTb3VyY2UgdGhlIGtleW1hcCBmaWxlLiAgSXQgd2lsbCBjb250YWluIGEgIjpsb2Fka2V5bWFwIiBjb21tYW5kCiAJICogd2hpY2ggd2lsbCBjYWxsIGV4X2xvYWRrZXltYXAoKSBiZWxvdy4gKi8KLQlidWYgPSBhbGxvYygodW5zaWduZWQpKFNUUkxFTihjdXJidWYtPmJfcF9rZXltYXApCisJYnVmbGVuID0gU1RSTEVOKGN1cmJ1Zi0+Yl9wX2tleW1hcCkKICMgaWZkZWYgRkVBVF9NQllURQotCQkJCQkJICAgICAgICsgU1RSTEVOKHBfZW5jKQorCQkJCQkgICArIFNUUkxFTihwX2VuYykKICMgZW5kaWYKLQkJCQkJCSAgICAgICArIDE0KSk7CisJCQkJCQkgICAgICAgKyAxNDsKKwlidWYgPSBhbGxvYygodW5zaWduZWQpYnVmbGVuKTsKIAlpZiAoYnVmID09IE5VTEwpCiAJICAgIHJldHVybiBlX291dG9mbWVtOwogCiAjIGlmZGVmIEZFQVRfTUJZVEUKIAkvKiB0cnkgZmluZGluZyAia2V5bWFwLydrZXltYXAnXydlbmNvZGluZycudmltIiAgaW4gJ3J1bnRpbWVwYXRoJyAqLwotCXNwcmludGYoKGNoYXIgKilidWYsICJrZXltYXAvJXNfJXMudmltIiwgY3VyYnVmLT5iX3Bfa2V5bWFwLCBwX2VuYyk7CisJdmltX3NucHJpbnRmKChjaGFyICopYnVmLCBidWZsZW4sICJrZXltYXAvJXNfJXMudmltIiwKKwkJCQkJCSAgIGN1cmJ1Zi0+Yl9wX2tleW1hcCwgcF9lbmMpOwogCWlmIChzb3VyY2VfcnVudGltZShidWYsIEZBTFNFKSA9PSBGQUlMKQogIyBlbmRpZgogCXsKIAkgICAgLyogdHJ5IGZpbmRpbmcgImtleW1hcC8na2V5bWFwJy52aW0iIGluICdydW50aW1lcGF0aCcgICovCi0JICAgIHNwcmludGYoKGNoYXIgKilidWYsICJrZXltYXAvJXMudmltIiwgY3VyYnVmLT5iX3Bfa2V5bWFwKTsKKwkgICAgdmltX3NucHJpbnRmKChjaGFyICopYnVmLCBidWZsZW4sICJrZXltYXAvJXMudmltIiwKKwkJCQkJCQkgIGN1cmJ1Zi0+Yl9wX2tleW1hcCk7CiAJICAgIGlmIChzb3VyY2VfcnVudGltZShidWYsIEZBTFNFKSA9PSBGQUlMKQogCSAgICB7CiAJCXZpbV9mcmVlKGJ1Zik7CmRpZmYgLS1naXQgYS9zcmMvZWRpdC5jIGIvc3JjL2VkaXQuYwppbmRleCBiOTk4ZjhkLi42NWE5NGEyIDEwMDY0NAotLS0gYS9zcmMvZWRpdC5jCisrKyBiL3NyYy9lZGl0LmMKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBOXygiIEtleXdvcmQgTG9jYWwgY29tcGxldGlvbiAoXk5eUCkiKSwKIH07CiAKLXN0YXRpYyBjaGFyX3UgZV9oaXRlbmRbXSA9IE5fKCJIaXQgZW5kIG9mIHBhcmFncmFwaCIpOworc3RhdGljIGNoYXIgZV9oaXRlbmRbXSA9IE5fKCJIaXQgZW5kIG9mIHBhcmFncmFwaCIpOwogCiAvKgogICogU3RydWN0dXJlIHVzZWQgdG8gc3RvcmUgb25lIG1hdGNoIGZvciBpbnNlcnQgY29tcGxldGlvbi4KQEAgLTY5LDcgKzY5LDExIEBACiAgICAgY29tcGxfVAkqY3BfcHJldjsKICAgICBjaGFyX3UJKmNwX3N0cjsJLyogbWF0Y2hlZCB0ZXh0ICovCiAgICAgY2hhcgljcF9pY2FzZTsJLyogVFJVRSBvciBGQUxTRTogaWdub3JlIGNhc2UgKi8KKyNpZmRlZiBTX1NQTElOVF9TICAvKiBzcGxpbnQgY2FuJ3QgaGFuZGxlIGFycmF5IG9mIHBvaW50ZXJzICovCisgICAgY2hhcl91CSoqY3BfdGV4dDsJLyogdGV4dCBmb3IgdGhlIG1lbnUgKi8KKyNlbHNlCiAgICAgY2hhcl91CSooY3BfdGV4dFtDUFRfQ09VTlRdKTsJLyogdGV4dCBmb3IgdGhlIG1lbnUgKi8KKyNlbmRpZgogICAgIGNoYXJfdQkqY3BfZm5hbWU7CS8qIGZpbGUgY29udGFpbmluZyB0aGUgbWF0Y2gsIGFsbG9jYXRlZCB3aGVuCiAJCQkJICogY3BfZmxhZ3MgaGFzIEZSRUVfRk5BTUUgKi8KICAgICBpbnQJCWNwX2ZsYWdzOwkvKiBPUklHSU5BTF9URVhULCBDT05UX1NfSVBPUyBvciBGUkVFX0ZOQU1FICovCkBAIC0zMDYsNyArMzEwLDcgQEAKICAgICBpbnQJCWMgPSAwOwogICAgIGNoYXJfdQkqcHRyOwogICAgIGludAkJbGFzdGM7Ci0gICAgY29sbnJfVAltaW5jb2w7CisgICAgaW50CQltaW5jb2w7CiAgICAgc3RhdGljIGxpbmVucl9UIG9fbG51bSA9IDA7CiAgICAgaW50CQlpOwogICAgIGludAkJZGlkX2JhY2tzcGFjZSA9IFRSVUU7CSAgICAvKiBwcmV2aW91cyBjaGFyIHdhcyBiYWNrc3BhY2UgKi8KQEAgLTM4Nyw3ICszOTEsNyBAQAogCWlmIChzdGFydGxuKQogCSAgICBJbnNzdGFydC5jb2wgPSAwOwogICAgIH0KLSAgICBJbnNzdGFydF90ZXh0bGVuID0gbGluZXRhYnNpemUobWxfZ2V0X2N1cmxpbmUoKSk7CisgICAgSW5zc3RhcnRfdGV4dGxlbiA9IChjb2xucl9UKWxpbmV0YWJzaXplKG1sX2dldF9jdXJsaW5lKCkpOwogICAgIEluc3N0YXJ0X2JsYW5rX3Zjb2wgPSBNQVhDT0w7CiAgICAgaWYgKCFkaWRfYWkpCiAJYWlfY29sID0gMDsKQEAgLTY1Myw3ICs2NTcsNyBAQAogCSAgICBtaW5jb2wgPSBjdXJ3aW4tPndfd2NvbDsKIAkgICAgdmFsaWRhdGVfY3Vyc29yX2NvbCgpOwogCi0JICAgIGlmICgoaW50KWN1cndpbi0+d193Y29sIDwgKGludCltaW5jb2wgLSBjdXJidWYtPmJfcF90cworCSAgICBpZiAoKGludCljdXJ3aW4tPndfd2NvbCA8IG1pbmNvbCAtIGN1cmJ1Zi0+Yl9wX3RzCiAJCSAgICAmJiBjdXJ3aW4tPndfd3JvdyA9PSBXX1dJTlJPVyhjdXJ3aW4pCiAJCQkJCQkgKyBjdXJ3aW4tPndfaGVpZ2h0IC0gMSAtIHBfc28KIAkJICAgICYmIChjdXJ3aW4tPndfY3Vyc29yLmxudW0gIT0gY3Vyd2luLT53X3RvcGxpbmUKQEAgLTE3NzMsNyArMTc3Nyw3IEBACiAJICogQ29tcHV0ZSB0aGUgc2NyZWVuIGNvbHVtbiB3aGVyZSB0aGUgY3Vyc29yIHNob3VsZCBiZS4KIAkgKi8KIAl2Y29sID0gZ2V0X2luZGVudCgpIC0gdmNvbDsKLQljdXJ3aW4tPndfdmlydGNvbCA9ICh2Y29sIDwgMCkgPyAwIDogdmNvbDsKKwljdXJ3aW4tPndfdmlydGNvbCA9IChjb2xucl9UKSgodmNvbCA8IDApID8gMCA6IHZjb2wpOwogCiAJLyoKIAkgKiBBZHZhbmNlIHRoZSBjdXJzb3IgdW50aWwgd2UgcmVhY2ggdGhlIHJpZ2h0IHNjcmVlbiBjb2x1bW4uCkBAIC0xODAwLDkgKzE4MDQsOSBAQAogCSAqLwogCWlmICh2Y29sICE9IChpbnQpY3Vyd2luLT53X3ZpcnRjb2wpCiAJewotCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IG5ld19jdXJzb3JfY29sOworCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCA9IChjb2xucl9UKW5ld19jdXJzb3JfY29sOwogCSAgICBpID0gKGludCljdXJ3aW4tPndfdmlydGNvbCAtIHZjb2w7Ci0JICAgIHB0ciA9IGFsbG9jKGkgKyAxKTsKKwkgICAgcHRyID0gYWxsb2MoKHVuc2lnbmVkKShpICsgMSkpOwogCSAgICBpZiAocHRyICE9IE5VTEwpCiAJICAgIHsKIAkJbmV3X2N1cnNvcl9jb2wgKz0gaTsKQEAgLTE4MjYsNyArMTgzMCw3IEBACiAgICAgaWYgKG5ld19jdXJzb3JfY29sIDw9IDApCiAJY3Vyd2luLT53X2N1cnNvci5jb2wgPSAwOwogICAgIGVsc2UKLQljdXJ3aW4tPndfY3Vyc29yLmNvbCA9IG5ld19jdXJzb3JfY29sOworCWN1cndpbi0+d19jdXJzb3IuY29sID0gKGNvbG5yX1QpbmV3X2N1cnNvcl9jb2w7CiAgICAgY3Vyd2luLT53X3NldF9jdXJzd2FudCA9IFRSVUU7CiAgICAgY2hhbmdlZF9jbGluZV9iZWZfY3VycygpOwogCkBAIC0xOTY2LDcgKzE5NzAsNyBAQAogI2lmZGVmIEZFQVRfTUJZVEUKICAgICBpZiAoZW5jX3V0ZjggJiYgbGltaXRfY29sID49IDApCiAgICAgewotCWludCBlY29sID0gY3Vyd2luLT53X2N1cnNvci5jb2wgKyAxOworCWNvbG5yX1QgZWNvbCA9IGN1cndpbi0+d19jdXJzb3IuY29sICsgMTsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgY3Vyc29yIGlzIGF0IHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciwgYnV0CiAJICogc2tpcCBmb3J3YXJkIGFnYWluIHdoZW4gZ29pbmcgdG9vIGZhciBiYWNrIGJlY2F1c2Ugb2YgYQpAQCAtMTk4Miw3ICsxOTg2LDcgQEAKIAl9CiAJaWYgKCptbF9nZXRfY3Vyc29yKCkgPT0gTlVMIHx8IGN1cndpbi0+d19jdXJzb3IuY29sID09IGVjb2wpCiAJICAgIHJldHVybiBGQUxTRTsKLQlkZWxfYnl0ZXMoKGxvbmcpKGVjb2wgLSBjdXJ3aW4tPndfY3Vyc29yLmNvbCksIEZBTFNFLCBUUlVFKTsKKwlkZWxfYnl0ZXMoKGxvbmcpKChpbnQpZWNvbCAtIGN1cndpbi0+d19jdXJzb3IuY29sKSwgRkFMU0UsIFRSVUUpOwogICAgIH0KICAgICBlbHNlCiAjZW5kaWYKQEAgLTIyMDEsNyArMjIwNSw3IEBACiAJICAgIGFjdHVhbF9jb21wbF9sZW5ndGggPSBjb21wbF9sZW5ndGg7CiAKIAkvKiBBbGxvY2F0ZSB3aWRlIGNoYXJhY3RlciBhcnJheSBmb3IgdGhlIGNvbXBsZXRpb24gYW5kIGZpbGwgaXQuICovCi0Jd2NhID0gKGludCAqKWFsbG9jKGFjdHVhbF9sZW4gKiBzaXplb2YoaW50KSk7CisJd2NhID0gKGludCAqKWFsbG9jKCh1bnNpZ25lZCkoYWN0dWFsX2xlbiAqIHNpemVvZihpbnQpKSk7CiAJaWYgKHdjYSAhPSBOVUxMKQogCXsKIAkgICAgcCA9IHN0cjsKQEAgLTI1ODAsNyArMjU4NCw3IEBACiAgKi8KICAgICB2b2lkCiBzZXRfY29tcGxldGlvbihzdGFydGNvbCwgbGlzdCkKLSAgICBpbnQJICAgIHN0YXJ0Y29sOworICAgIGNvbG5yX1Qgc3RhcnRjb2w7CiAgICAgbGlzdF9UICAqbGlzdDsKIHsKICAgICAvKiBJZiBhbHJlYWR5IGRvaW5nIGNvbXBsZXRpb25zIHN0b3AgaXQuICovCkBAIC0yNTkxLDEwICsyNTk1LDEwIEBACiAgICAgaWYgKHN0b3BfYXJyb3coKSA9PSBGQUlMKQogCXJldHVybjsKIAotICAgIGlmIChzdGFydGNvbCA+IChpbnQpY3Vyd2luLT53X2N1cnNvci5jb2wpCisgICAgaWYgKHN0YXJ0Y29sID4gY3Vyd2luLT53X2N1cnNvci5jb2wpCiAJc3RhcnRjb2wgPSBjdXJ3aW4tPndfY3Vyc29yLmNvbDsKICAgICBjb21wbF9jb2wgPSBzdGFydGNvbDsKLSAgICBjb21wbF9sZW5ndGggPSBjdXJ3aW4tPndfY3Vyc29yLmNvbCAtIHN0YXJ0Y29sOworICAgIGNvbXBsX2xlbmd0aCA9IChpbnQpY3Vyd2luLT53X2N1cnNvci5jb2wgLSAoaW50KXN0YXJ0Y29sOwogICAgIC8qIGNvbXBsX3BhdHRlcm4gZG9lc24ndCBuZWVkIHRvIGJlIHNldCAqLwogICAgIGNvbXBsX29yaWdfdGV4dCA9IHZpbV9zdHJuc2F2ZShtbF9nZXRfY3VybGluZSgpICsgY29tcGxfY29sLCBjb21wbF9sZW5ndGgpOwogICAgIGlmIChjb21wbF9vcmlnX3RleHQgPT0gTlVMTCB8fCBpbnNfY29tcGxfYWRkKGNvbXBsX29yaWdfdGV4dCwKQEAgLTI4NjAsNyArMjg2NCw2IEBACiAgICAgcmVnbWF0Y2hfVAlyZWdtYXRjaDsKICAgICBjaGFyX3UJKipmaWxlczsKICAgICBpbnQJCWNvdW50OwotICAgIGludAkJaTsKICAgICBpbnQJCXNhdmVfcF9zY3M7CiAgICAgaW50CQlkaXIgPSBjb21wbF9kaXJlY3Rpb247CiAKQEAgLTI4OTIsMTcgKzI4OTUsMTggQEAKICAgICBpZiAoY3RybF94X21vZGUgPT0gQ1RSTF9YX1dIT0xFX0xJTkUpCiAgICAgewogCWNoYXJfdSAqcGF0X2VzYyA9IHZpbV9zdHJzYXZlX2VzY2FwZWQocGF0LCAoY2hhcl91ICopIlxcIik7CisJc2l6ZV90IGxlbjsKIAogCWlmIChwYXRfZXNjID09IE5VTEwpCiAJICAgIGdvdG8gdGhlZW5kOwotCWkgPSAoaW50KVNUUkxFTihwYXRfZXNjKSArIDEwOwotCXB0ciA9IGFsbG9jKGkpOworCWxlbiA9IFNUUkxFTihwYXRfZXNjKSArIDEwOworCXB0ciA9IGFsbG9jKCh1bnNpZ25lZClsZW4pOwogCWlmIChwdHIgPT0gTlVMTCkKIAl7CiAJICAgIHZpbV9mcmVlKHBhdF9lc2MpOwogCSAgICBnb3RvIHRoZWVuZDsKIAl9Ci0JdmltX3NucHJpbnRmKChjaGFyICopcHRyLCBpLCAiXlxccypcXHpzXFxWJXMiLCBwYXRfZXNjKTsKKwl2aW1fc25wcmludGYoKGNoYXIgKilwdHIsIGxlbiwgIl5cXHMqXFx6c1xcViVzIiwgcGF0X2VzYyk7CiAJcmVnbWF0Y2gucmVncHJvZyA9IHZpbV9yZWdjb21wKHB0ciwgUkVfTUFHSUMpOwogCXZpbV9mcmVlKHBhdF9lc2MpOwogCXZpbV9mcmVlKHB0cik7CkBAIC0yOTkzLDcgKzI5OTcsNyBAQAogCXsKIAkgICAgdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsCiAJCQkgICAgICBfKCJTY2FubmluZyBkaWN0aW9uYXJ5OiAlcyIpLCAoY2hhciAqKWZpbGVzW2ldKTsKLQkgICAgbXNnX3RydW5jX2F0dHIoSU9idWZmLCBUUlVFLCBobF9hdHRyKEhMRl9SKSk7CisJICAgICh2b2lkKW1zZ190cnVuY19hdHRyKElPYnVmZiwgVFJVRSwgaGxfYXR0cihITEZfUikpOwogCX0KIAogCWlmIChmcCAhPSBOVUxMKQpAQCAtMzMxMSw3ICszMzE1LDcgQEAKICAgICBzdGF0aWMgaW50CiBpbnNfY29tcGxfbGVuKCkKIHsKLSAgICBpbnQgb2ZmID0gY3Vyd2luLT53X2N1cnNvci5jb2wgLSBjb21wbF9jb2w7CisgICAgaW50IG9mZiA9IChpbnQpY3Vyd2luLT53X2N1cnNvci5jb2wgLSAoaW50KWNvbXBsX2NvbDsKIAogICAgIGlmIChvZmYgPCAwKQogCXJldHVybiAwOwpAQCAtMzM0Nyw3ICszMzUxLDcgQEAKIAogICAgIHZpbV9mcmVlKGNvbXBsX2xlYWRlcik7CiAgICAgY29tcGxfbGVhZGVyID0gdmltX3N0cm5zYXZlKG1sX2dldF9jdXJsaW5lKCkgKyBjb21wbF9jb2wsCi0JCQkJCSAgICBjdXJ3aW4tPndfY3Vyc29yLmNvbCAtIGNvbXBsX2NvbCk7CisJCQkJICAgICAoaW50KShjdXJ3aW4tPndfY3Vyc29yLmNvbCAtIGNvbXBsX2NvbCkpOwogICAgIGlmIChjb21wbF9sZWFkZXIgIT0gTlVMTCkKIAlpbnNfY29tcGxfbmV3X2xlYWRlcigpOwogfQpAQCAtMzM5NSw3ICszMzk5LDcgQEAKIGluc19jb21wbF9hZGRmcm9tbWF0Y2goKQogewogICAgIGNoYXJfdQkqcDsKLSAgICBpbnQJCWxlbiA9IGN1cndpbi0+d19jdXJzb3IuY29sIC0gY29tcGxfY29sOworICAgIGludAkJbGVuID0gKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbCAtIChpbnQpY29tcGxfY29sOwogICAgIGludAkJYzsKICAgICBjb21wbF9UCSpjcDsKIApAQCAtMzk2MSw3ICszOTY1LDcgQEAKIAkJCSAgICA6IGluc19idWYtPmJfc2ZuYW1lID09IE5VTEwKIAkJCQk/IChjaGFyICopaW5zX2J1Zi0+Yl9mbmFtZQogCQkJCTogKGNoYXIgKilpbnNfYnVmLT5iX3NmbmFtZSk7Ci0JCW1zZ190cnVuY19hdHRyKElPYnVmZiwgVFJVRSwgaGxfYXR0cihITEZfUikpOworCQkodm9pZCltc2dfdHJ1bmNfYXR0cihJT2J1ZmYsIFRSVUUsIGhsX2F0dHIoSExGX1IpKTsKIAkgICAgfQogCSAgICBlbHNlIGlmICgqZV9jcHQgPT0gTlVMKQogCQlicmVhazsKQEAgLTM5OTEsNyArMzk5NSw3IEBACiAJCXsKIAkJICAgIHR5cGUgPSBDVFJMX1hfVEFHUzsKIAkJICAgIHNwcmludGYoKGNoYXIqKUlPYnVmZiwgXygiU2Nhbm5pbmcgdGFncy4iKSk7Ci0JCSAgICBtc2dfdHJ1bmNfYXR0cihJT2J1ZmYsIFRSVUUsIGhsX2F0dHIoSExGX1IpKTsKKwkJICAgICh2b2lkKW1zZ190cnVuY19hdHRyKElPYnVmZiwgVFJVRSwgaGxfYXR0cihITEZfUikpOwogCQl9CiAJCWVsc2UKIAkJICAgIHR5cGUgPSAtMTsKQEAgLTYzMjAsNyArNjMyNCw3IEBACiAJICAgIGluc19uZWVkX3VuZG8gPSBGQUxTRTsKIAl9CiAJSW5zc3RhcnQgPSBjdXJ3aW4tPndfY3Vyc29yOwkvKiBuZXcgaW5zZXJ0aW9uIHN0YXJ0cyBoZXJlICovCi0JSW5zc3RhcnRfdGV4dGxlbiA9IGxpbmV0YWJzaXplKG1sX2dldF9jdXJsaW5lKCkpOworCUluc3N0YXJ0X3RleHRsZW4gPSAoY29sbnJfVClsaW5ldGFic2l6ZShtbF9nZXRfY3VybGluZSgpKTsKIAlhaV9jb2wgPSAwOwogI2lmZGVmIEZFQVRfVlJFUExBQ0UKIAlpZiAoU3RhdGUgJiBWUkVQTEFDRV9GTEFHKQpkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMuYyBiL3NyYy9leF9jbWRzLmMKaW5kZXggMjUwMDUwZS4uZTgzYzZkNiAxMDA2NDQKLS0tIGEvc3JjL2V4X2NtZHMuYworKysgYi9zcmMvZXhfY21kcy5jCkBAIC0xNzg5LDcgKzE3ODksNyBAQAogCSAqIG92ZXJ3cml0ZSBhIHVzZXIncyB2aW1pbmZvIGZpbGUgYWZ0ZXIgYSAic3Ugcm9vdCIsIHdpdGggYQogCSAqIHZpbWluZm8gZmlsZSB0aGF0IHRoZSB1c2VyIGNhbid0IHJlYWQuCiAJICovCi0Jc3Rfb2xkLnN0X2RldiA9IDA7CisJc3Rfb2xkLnN0X2RldiA9IChkZXZfdCkwOwogCXN0X29sZC5zdF9pbm8gPSAwOwogCXN0X29sZC5zdF9tb2RlID0gMDYwMDsKIAlpZiAobWNoX3N0YXQoKGNoYXIgKilmbmFtZSwgJnN0X29sZCkgPT0gMApAQCAtMzcxNSw3ICszNzE1LDcgQEAKICAgICAvKiBJZiB0aGUgd2luZG93IG9wdGlvbnMgd2VyZSBjaGFuZ2VkIG1heSBuZWVkIHRvIHNldCB0aGUgc3BlbGwgbGFuZ3VhZ2UuCiAgICAgICogQ2FuIG9ubHkgZG8gdGhpcyBhZnRlciB0aGUgYnVmZmVyIGhhcyBiZWVuIHByb3Blcmx5IHNldHVwLiAqLwogICAgIGlmIChkaWRfZ2V0X3dpbm9wdHMgJiYgY3Vyd2luLT53X3Bfc3BlbGwgJiYgKmN1cmJ1Zi0+Yl9wX3NwbCAhPSBOVUwpCi0JZGlkX3NldF9zcGVsbGxhbmcoY3VyYnVmKTsKKwkodm9pZClkaWRfc2V0X3NwZWxsbGFuZyhjdXJidWYpOwogI2VuZGlmCiAKICAgICBpZiAoY29tbWFuZCA9PSBOVUxMKQpAQCAtMzc4OCw3ICszNzg4LDcgQEAKIAogI2lmZGVmIEZFQVRfS0VZTUFQCiAgICAgaWYgKGN1cmJ1Zi0+Yl9rbWFwX3N0YXRlICYgS0VZTUFQX0lOSVQpCi0Ja2V5bWFwX2luaXQoKTsKKwkodm9pZClrZXltYXBfaW5pdCgpOwogI2VuZGlmCiAKICAgICAtLVJlZHJhd2luZ0Rpc2FibGVkOwpkaWZmIC0tZ2l0IGEvc3JjL2dsb2JhbHMuaCBiL3NyYy9nbG9iYWxzLmgKaW5kZXggNTQ4OTI3YS4uYjg3MDk2MiAxMDA2NDQKLS0tIGEvc3JjL2dsb2JhbHMuaAorKysgYi9zcmMvZ2xvYmFscy5oCkBAIC01MjQsNyArNTI0LDcgQEAKIEVYVEVSTiB3aW5fVAkqcHJldndpbiBJTklUKD0gTlVMTCk7CS8qIHByZXZpb3VzIHdpbmRvdyAqLwogIyBkZWZpbmUgV19ORVhUKHdwKSAoKHdwKS0+d19uZXh0KQogIyBkZWZpbmUgRk9SX0FMTF9XSU5ET1dTKHdwKSBmb3IgKHdwID0gZmlyc3R3aW47IHdwICE9IE5VTEw7IHdwID0gd3AtPndfbmV4dCkKLSNkZWZpbmUgRk9SX0FMTF9UQUJfV0lORE9XUyh0cCwgd3ApIFwKKyMgZGVmaW5lIEZPUl9BTExfVEFCX1dJTkRPV1ModHAsIHdwKSBcCiAgICAgZm9yICgodHApID0gZmlyc3RfdGFicGFnZTsgKHRwKSAhPSBOVUxMOyAodHApID0gKHRwKS0+dHBfbmV4dCkgXAogCWZvciAoKHdwKSA9ICgodHApID09IGN1cnRhYikgXAogCQk/IGZpcnN0d2luIDogKHRwKS0+dHBfZmlyc3R3aW47ICh3cCk7ICh3cCkgPSAod3ApLT53X25leHQpCkBAIC03MTgsNyArNzE4LDcgQEAKIAogRVhURVJOIHBvc19UCXNhdmVkX2N1cnNvcgkJLyogd19jdXJzb3IgYmVmb3JlIGZvcm1hdHRpbmcgdGV4dC4gKi8KICMgaWZkZWYgRE9fSU5JVAotCT0gSU5JVF9QT1NfVAorCT0gSU5JVF9QT1NfVCgwLCAwLCAwKQogIyBlbmRpZgogCTsKIApAQCAtMTAzOSw3ICsxMDM5LDcgQEAKIEVYVEVSTiBpbnQJZGlkX2N1cnNvcmhvbGQgSU5JVCg9IEZBTFNFKTsgLyogc2V0IHdoZW4gQ3Vyc29ySG9sZCB0J2dlcmQgKi8KIEVYVEVSTiBwb3NfVAlsYXN0X2N1cnNvcm1vdmVkCSAgICAvKiBmb3IgQ3Vyc29yTW92ZWQgZXZlbnQgKi8KICMgaWZkZWYgRE9fSU5JVAotCQkJPSBJTklUX1BPU19UCisJCQk9IElOSVRfUE9TX1QoMCwgMCwgMCkKICMgZW5kaWYKIAkJCTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29wcy5jIGIvc3JjL29wcy5jCmluZGV4IGRhOWZhZmIuLmM0MzE4ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9vcHMuYworKysgYi9zcmMvb3BzLmMKQEAgLTY0MDAsNyArNjQwMCw3IEBACiAJICAgIHsKIAkJZ2V0dmNvbHMoY3Vyd2luLCAmbWluX3BvcywgJm1heF9wb3MsICZtaW5fcG9zLmNvbCwKIAkJCQkJCQkJJm1heF9wb3MuY29sKTsKLQkJc3ByaW50ZigoY2hhciAqKWJ1ZjEsIF8oIiVsZCBDb2xzOyAiKSwKKwkJdmltX3NucHJpbnRmKChjaGFyICopYnVmMSwgc2l6ZW9mKGJ1ZjEpLCBfKCIlbGQgQ29sczsgIiksCiAJCQkobG9uZykob3BhcmcuZW5kX3Zjb2wgLSBvcGFyZy5zdGFydF92Y29sICsgMSkpOwogCSAgICB9CiAJICAgIGVsc2UKQEAgLTY0MDgsMTMgKzY0MDgsMTUgQEAKIAogCSAgICBpZiAoY2hhcl9jb3VudF9jdXJzb3IgPT0gYnl0ZV9jb3VudF9jdXJzb3IKIAkJCQkJCSAgJiYgY2hhcl9jb3VudCA9PSBieXRlX2NvdW50KQotCQlzcHJpbnRmKChjaGFyICopSU9idWZmLCBfKCJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiKSwKKwkJdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsCisJCQlfKCJTZWxlY3RlZCAlcyVsZCBvZiAlbGQgTGluZXM7ICVsZCBvZiAlbGQgV29yZHM7ICVsZCBvZiAlbGQgQnl0ZXMiKSwKIAkJCWJ1ZjEsIGxpbmVfY291bnRfc2VsZWN0ZWQsCiAJCQkobG9uZyljdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCwKIAkJCXdvcmRfY291bnRfY3Vyc29yLCB3b3JkX2NvdW50LAogCQkJYnl0ZV9jb3VudF9jdXJzb3IsIGJ5dGVfY291bnQpOwogCSAgICBlbHNlCi0JCXNwcmludGYoKGNoYXIgKilJT2J1ZmYsIF8oIlNlbGVjdGVkICVzJWxkIG9mICVsZCBMaW5lczsgJWxkIG9mICVsZCBXb3JkczsgJWxkIG9mICVsZCBDaGFyczsgJWxkIG9mICVsZCBCeXRlcyIpLAorCQl2aW1fc25wcmludGYoKGNoYXIgKilJT2J1ZmYsIElPU0laRSwKKwkJCV8oIlNlbGVjdGVkICVzJWxkIG9mICVsZCBMaW5lczsgJWxkIG9mICVsZCBXb3JkczsgJWxkIG9mICVsZCBDaGFyczsgJWxkIG9mICVsZCBCeXRlcyIpLAogCQkJYnVmMSwgbGluZV9jb3VudF9zZWxlY3RlZCwKIAkJCShsb25nKWN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LAogCQkJd29yZF9jb3VudF9jdXJzb3IsIHdvcmRfY291bnQsCkBAIC02NDI2LDIwICs2NDI4LDIyIEBACiAJewogCSAgICBwID0gbWxfZ2V0X2N1cmxpbmUoKTsKIAkgICAgdmFsaWRhdGVfdmlydGNvbCgpOwotCSAgICBjb2xfcHJpbnQoYnVmMSwgKGludCljdXJ3aW4tPndfY3Vyc29yLmNvbCArIDEsCisJICAgIGNvbF9wcmludChidWYxLCBzaXplb2YoYnVmMSksIChpbnQpY3Vyd2luLT53X2N1cnNvci5jb2wgKyAxLAogCQkgICAgKGludCljdXJ3aW4tPndfdmlydGNvbCArIDEpOwotCSAgICBjb2xfcHJpbnQoYnVmMiwgKGludClTVFJMRU4ocCksIGxpbmV0YWJzaXplKHApKTsKKwkgICAgY29sX3ByaW50KGJ1ZjIsIHNpemVvZihidWYyKSwgKGludClTVFJMRU4ocCksIGxpbmV0YWJzaXplKHApKTsKIAogCSAgICBpZiAoY2hhcl9jb3VudF9jdXJzb3IgPT0gYnl0ZV9jb3VudF9jdXJzb3IKIAkJICAgICYmIGNoYXJfY291bnQgPT0gYnl0ZV9jb3VudCkKLQkJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIiksCisJCXZpbV9zbnByaW50ZigoY2hhciAqKUlPYnVmZiwgSU9TSVpFLAorCQkgICAgXygiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQnl0ZSAlbGQgb2YgJWxkIiksCiAJCSAgICAoY2hhciAqKWJ1ZjEsIChjaGFyICopYnVmMiwKIAkJICAgIChsb25nKWN1cndpbi0+d19jdXJzb3IubG51bSwKIAkJICAgIChsb25nKWN1cmJ1Zi0+Yl9tbC5tbF9saW5lX2NvdW50LAogCQkgICAgd29yZF9jb3VudF9jdXJzb3IsIHdvcmRfY291bnQsCiAJCSAgICBieXRlX2NvdW50X2N1cnNvciwgYnl0ZV9jb3VudCk7CiAJICAgIGVsc2UKLQkJc3ByaW50ZigoY2hhciAqKUlPYnVmZiwgXygiQ29sICVzIG9mICVzOyBMaW5lICVsZCBvZiAlbGQ7IFdvcmQgJWxkIG9mICVsZDsgQ2hhciAlbGQgb2YgJWxkOyBCeXRlICVsZCBvZiAlbGQiKSwKKwkJdmltX3NucHJpbnRmKChjaGFyICopSU9idWZmLCBJT1NJWkUsCisJCSAgICBfKCJDb2wgJXMgb2YgJXM7IExpbmUgJWxkIG9mICVsZDsgV29yZCAlbGQgb2YgJWxkOyBDaGFyICVsZCBvZiAlbGQ7IEJ5dGUgJWxkIG9mICVsZCIpLAogCQkgICAgKGNoYXIgKilidWYxLCAoY2hhciAqKWJ1ZjIsCiAJCSAgICAobG9uZyljdXJ3aW4tPndfY3Vyc29yLmxudW0sCiAJCSAgICAobG9uZyljdXJidWYtPmJfbWwubWxfbGluZV9jb3VudCwKZGlmZiAtLWdpdCBhL3NyYy9vc191bml4LmMgYi9zcmMvb3NfdW5peC5jCmluZGV4IDcwM2I5MzIuLmQ1ZTY4MTIgMTAwNjQ0Ci0tLSBhL3NyYy9vc191bml4LmMKKysrIGIvc3JjL29zX3VuaXguYwpAQCAtMTk5LDcgKzE5OSw5IEBACiAjZW5kaWYKIAogI2lmbmRlZiBTSUdfRVJSCi0jIGRlZmluZSBTSUdfRVJSCSgoUkVUU0lHVFlQRSAoKikoKSktMSkKKyMgaWZuZGVmIFNfU1BMSU5UX1MKKyMgIGRlZmluZSBTSUdfRVJSCSgoUkVUU0lHVFlQRSAoKikoKSktMSkKKyMgZW5kaWYKICNlbmRpZgogCiAvKiB2b2xhdGlsZSBiZWNhdXNlIGl0IGlzIHVzZWQgaW4gc2lnbmFsIGhhbmRsZXIgc2lnX3dpbmNoKCkuICovCkBAIC00NDEsNyArNDQzLDkgQEAKIAogI2lmIGRlZmluZWQoSEFWRV9UT1RBTF9NRU0pIHx8IGRlZmluZWQoUFJPVE8pCiAjIGlmZGVmIEhBVkVfU1lTX1JFU09VUkNFX0gKLSMgIGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorIyAgaWZuZGVmIFNfU1BMSU5UX1MgIC8qIHNwbGludCBjcmFzaGVzIG9uIGJpdHMvcmVzb3VyY2UuaCAqLworIyAgIGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorIyAgZW5kaWYKICMgZW5kaWYKICMgaWYgZGVmaW5lZChIQVZFX1NZU19TWVNDVExfSCkgJiYgZGVmaW5lZChIQVZFX1NZU0NUTCkKICMgIGluY2x1ZGUgPHN5cy9zeXNjdGwuaD4KZGlmZiAtLWdpdCBhL3NyYy9vc191bml4LmggYi9zcmMvb3NfdW5peC5oCmluZGV4IGEzMzcxODMuLjBhMzc3NjMgMTAwNjQ0Ci0tLSBhL3NyYy9vc191bml4LmgKKysrIGIvc3JjL29zX3VuaXguaApAQCAtNTMsNyArNTMsOSBAQAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1VOSVNURF9ICi0jIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpZm5kZWYgU19TUExJTlRfUyAgLyogc3BsaW50IGNyYXNoZXMgb24gYml0cy9jb25mbmFtZS5oICovCisjICBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9MSUJDX0gKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9idWZmZXIucHJvIGIvc3JjL3Byb3RvL2J1ZmZlci5wcm8KaW5kZXggZTE0ZWU4Zi4uYTVmZTQyZiAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL2J1ZmZlci5wcm8KKysrIGIvc3JjL3Byb3RvL2J1ZmZlci5wcm8KQEAgLTM3LDEzICszNywxMiBAQAogaW50IG90aGVyZmlsZSBfX0FSR1MoKGNoYXJfdSAqZmZuYW1lKSk7CiB2b2lkIGJ1Zl9zZXRpbm8gX19BUkdTKChidWZfVCAqYnVmKSk7CiB2b2lkIGZpbGVpbmZvIF9fQVJHUygoaW50IGZ1bGxuYW1lLCBpbnQgc2hvcnRoZWxwLCBpbnQgZG9udF90cnVuY2F0ZSkpOwotdm9pZCBjb2xfcHJpbnQgX19BUkdTKChjaGFyX3UgKmJ1ZiwgaW50IGNvbCwgaW50IHZjb2wpKTsKK3ZvaWQgY29sX3ByaW50IF9fQVJHUygoY2hhcl91ICpidWYsIHNpemVfdCBidWZsZW4sIGludCBjb2wsIGludCB2Y29sKSk7CiB2b2lkIG1ha2V0aXRsZSBfX0FSR1MoKHZvaWQpKTsKIHZvaWQgcmVzZXR0aXRsZSBfX0FSR1MoKHZvaWQpKTsKIHZvaWQgZnJlZV90aXRsZXMgX19BUkdTKCh2b2lkKSk7CiBpbnQgYnVpbGRfc3RsX3N0cl9obCBfX0FSR1MoKHdpbl9UICp3cCwgY2hhcl91ICpvdXQsIHNpemVfdCBvdXRsZW4sIGNoYXJfdSAqZm10LCBpbnQgdXNlX3NhbmRib3gsIGludCBmaWxsY2hhciwgaW50IG1heHdpZHRoLCBzdHJ1Y3Qgc3RsX2hscmVjICpobHRhYiwgc3RydWN0IHN0bF9obHJlYyAqdGFidGFiKSk7Ci12b2lkIGdldF9yZWxfcG9zIF9fQVJHUygod2luX1QgKndwLCBjaGFyX3UgKnN0cikpOwotaW50IGFwcGVuZF9hcmdfbnVtYmVyIF9fQVJHUygod2luX1QgKndwLCBjaGFyX3UgKmJ1ZiwgaW50IGFkZF9maWxlLCBpbnQgbWF4bGVuKSk7Cit2b2lkIGdldF9yZWxfcG9zIF9fQVJHUygod2luX1QgKndwLCBjaGFyX3UgKmJ1ZiwgaW50IGJ1ZmxlbikpOwogY2hhcl91ICpmaXhfZm5hbWUgX19BUkdTKChjaGFyX3UgKmZuYW1lKSk7CiB2b2lkIGZuYW1lX2V4cGFuZCBfX0FSR1MoKGJ1Zl9UICpidWYsIGNoYXJfdSAqKmZmbmFtZSwgY2hhcl91ICoqc2ZuYW1lKSk7CiBjaGFyX3UgKmFsaXN0X25hbWUgX19BUkdTKChhZW50cnlfVCAqYWVwKSk7CkBAIC01NCw4ICs1Myw4IEBACiB2b2lkIHdyaXRlX3ZpbWluZm9fYnVmZmVybGlzdCBfX0FSR1MoKEZJTEUgKmZwKSk7CiBjaGFyICpidWZfc3BuYW1lIF9fQVJHUygoYnVmX1QgKmJ1ZikpOwogdm9pZCBidWZfYWRkc2lnbiBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBpZCwgbGluZW5yX1QgbG51bSwgaW50IHR5cGVucikpOwotaW50IGJ1Zl9jaGFuZ2Vfc2lnbl90eXBlIF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IG1hcmtJZCwgaW50IHR5cGVucikpOwotaW50X3UgYnVmX2dldHNpZ250eXBlIF9fQVJHUygoYnVmX1QgKmJ1ZiwgbGluZW5yX1QgbG51bSwgaW50IHR5cGUpKTsKK2xpbmVucl9UIGJ1Zl9jaGFuZ2Vfc2lnbl90eXBlIF9fQVJHUygoYnVmX1QgKmJ1ZiwgaW50IG1hcmtJZCwgaW50IHR5cGVucikpOworaW50IGJ1Zl9nZXRzaWdudHlwZSBfX0FSR1MoKGJ1Zl9UICpidWYsIGxpbmVucl9UIGxudW0sIGludCB0eXBlKSk7CiBsaW5lbnJfVCBidWZfZGVsc2lnbiBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBpZCkpOwogaW50IGJ1Zl9maW5kc2lnbiBfX0FSR1MoKGJ1Zl9UICpidWYsIGludCBpZCkpOwogaW50IGJ1Zl9maW5kc2lnbl9pZCBfX0FSR1MoKGJ1Zl9UICpidWYsIGxpbmVucl9UIGxudW0pKTsKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9lZGl0LnBybyBiL3NyYy9wcm90by9lZGl0LnBybwppbmRleCAwZmI3ODdmLi5lMjM5OGM0IDEwMDY0NAotLS0gYS9zcmMvcHJvdG8vZWRpdC5wcm8KKysrIGIvc3JjL3Byb3RvL2VkaXQucHJvCkBAIC04LDcgKzgsNyBAQAogdm9pZCBiYWNrc3BhY2VfdW50aWxfY29sdW1uIF9fQVJHUygoaW50IGNvbCkpOwogaW50IHZpbV9pc19jdHJsX3hfa2V5IF9fQVJHUygoaW50IGMpKTsKIGludCBpbnNfY29tcGxfYWRkX2luZmVyY2FzZSBfX0FSR1MoKGNoYXJfdSAqc3RyLCBpbnQgbGVuLCBpbnQgaWNhc2UsIGNoYXJfdSAqZm5hbWUsIGludCBkaXIsIGludCBmbGFncykpOwotdm9pZCBzZXRfY29tcGxldGlvbiBfX0FSR1MoKGludCBzdGFydGNvbCwgbGlzdF9UICpsaXN0KSk7Cit2b2lkIHNldF9jb21wbGV0aW9uIF9fQVJHUygoY29sbnJfVCBzdGFydGNvbCwgbGlzdF9UICpsaXN0KSk7CiB2b2lkIGluc19jb21wbF9zaG93X3B1bSBfX0FSR1MoKHZvaWQpKTsKIGNoYXJfdSAqZmluZF93b3JkX3N0YXJ0IF9fQVJHUygoY2hhcl91ICpwdHIpKTsKIGNoYXJfdSAqZmluZF93b3JkX2VuZCBfX0FSR1MoKGNoYXJfdSAqcHRyKSk7CmRpZmYgLS1naXQgYS9zcmMvc2NyZWVuLmMgYi9zcmMvc2NyZWVuLmMKaW5kZXggNjQ1NWYxMS4uYzJkN2MyMCAxMDA2NDQKLS0tIGEvc3JjL3NjcmVlbi5jCisrKyBiL3NyYy9zY3JlZW4uYwpAQCAtOTQ4MSwxMyArOTQ4MSwxNSBAQAogICAgIHdpbl9UCSp3cDsKICAgICBpbnQJCWFsd2F5czsKIHsKLSAgICBjaGFyX3UJYnVmZmVyWzcwXTsKKyNkZWZpbmUgUlVMRVJfQlVGX0xFTiA3MAorICAgIGNoYXJfdQlidWZmZXJbUlVMRVJfQlVGX0xFTl07CiAgICAgaW50CQlyb3c7CiAgICAgaW50CQlmaWxsY2hhcjsKICAgICBpbnQJCWF0dHI7CiAgICAgaW50CQllbXB0eV9saW5lID0gRkFMU0U7CiAgICAgY29sbnJfVAl2aXJ0Y29sOwogICAgIGludAkJaTsKKyAgICBzaXplX3QJbGVuOwogICAgIGludAkJbzsKICNpZmRlZiBGRUFUX1ZFUlRTUExJVAogICAgIGludAkJdGhpc19ydV9jb2w7CkBAIC05NjAyLDExICs5NjA0LDEyIEBACiAJICogU29tZSBzcHJpbnRmcyByZXR1cm4gdGhlIGxlbmd0aCwgc29tZSByZXR1cm4gYSBwb2ludGVyLgogCSAqIFRvIGF2b2lkIHBvcnRhYmlsaXR5IHByb2JsZW1zIHdlIHVzZSBzdHJsZW4oKSBoZXJlLgogCSAqLwotCXNwcmludGYoKGNoYXIgKilidWZmZXIsICIlbGQsIiwKKwl2aW1fc25wcmludGYoKGNoYXIgKilidWZmZXIsIFJVTEVSX0JVRl9MRU4sICIlbGQsIiwKIAkJKHdwLT53X2J1ZmZlci0+Yl9tbC5tbF9mbGFncyAmIE1MX0VNUFRZKQogCQkgICAgPyAwTAogCQkgICAgOiAobG9uZykod3AtPndfY3Vyc29yLmxudW0pKTsKLQljb2xfcHJpbnQoYnVmZmVyICsgU1RSTEVOKGJ1ZmZlciksCisJbGVuID0gU1RSTEVOKGJ1ZmZlcik7CisJY29sX3ByaW50KGJ1ZmZlciArIGxlbiwgUlVMRVJfQlVGX0xFTiAtIGxlbiwKIAkJCWVtcHR5X2xpbmUgPyAwIDogKGludCl3cC0+d19jdXJzb3IuY29sICsgMSwKIAkJCShpbnQpdmlydGNvbCArIDEpOwogCkBAIC05NjE2LDcgKzk2MTksNyBAQAogCSAqIHNjcmVlbiB1cCBvbiBzb21lIHRlcm1pbmFscykuCiAJICovCiAJaSA9IChpbnQpU1RSTEVOKGJ1ZmZlcik7Ci0JZ2V0X3JlbF9wb3Mod3AsIGJ1ZmZlciArIGkgKyAxKTsKKwlnZXRfcmVsX3Bvcyh3cCwgYnVmZmVyICsgaSArIDEsIFJVTEVSX0JVRl9MRU4gLSBpIC0gMSk7CiAJbyA9IGkgKyB2aW1fc3Ryc2l6ZShidWZmZXIgKyBpICsgMSk7CiAjaWZkZWYgRkVBVF9XSU5ET1dTCiAJaWYgKHdwLT53X3N0YXR1c19oZWlnaHQgPT0gMCkJLyogY2FuJ3QgdXNlIGxhc3QgY2hhciBvZiBzY3JlZW4gKi8KQEAgLTk2NDMsNyArOTY0Niw3IEBACiAJCSAgICBidWZmZXJbaSsrXSA9IGZpbGxjaGFyOwogCQkrK287CiAJICAgIH0KLQkgICAgZ2V0X3JlbF9wb3Mod3AsIGJ1ZmZlciArIGkpOworCSAgICBnZXRfcmVsX3Bvcyh3cCwgYnVmZmVyICsgaSwgUlVMRVJfQlVGX0xFTiAtIGkpOwogCX0KIAkvKiBUcnVuY2F0ZSBhdCB3aW5kb3cgYm91bmRhcnkuICovCiAjaWZkZWYgRkVBVF9NQllURQpkaWZmIC0tZ2l0IGEvc3JjL3N0cnVjdHMuaCBiL3NyYy9zdHJ1Y3RzLmgKaW5kZXggMzI5Njc2ZS4uZjRmMWE4NyAxMDA2NDQKLS0tIGEvc3JjL3N0cnVjdHMuaAorKysgYi9zcmMvc3RydWN0cy5oCkBAIC0zMyw5ICszMyw5IEBACiB9IHBvc19UOwogCiAjaWZkZWYgRkVBVF9WSVJUVUFMRURJVAotIyBkZWZpbmUgSU5JVF9QT1NfVCB7MCwgMCwgMH0KKyMgZGVmaW5lIElOSVRfUE9TX1QobCwgYywgY2EpIHtsLCBjLCBjYX0KICNlbHNlCi0jIGRlZmluZSBJTklUX1BPU19UIHswLCAwfQorIyBkZWZpbmUgSU5JVF9QT1NfVChsLCBjLCBjYSkge2wsIGN9CiAjZW5kaWYKIAogLyoKQEAgLTExNjYsNyArMTE2Niw3IEBACiAgICAgY2hhcl91CSpiX2ZuYW1lOwkvKiBjdXJyZW50IGZpbGUgbmFtZSAqLwogCiAjaWZkZWYgVU5JWAotICAgIGludAkJYl9kZXY7CQkvKiBkZXZpY2UgbnVtYmVyICgtMSBpZiBub3Qgc2V0KSAqLworICAgIGRldl90CWJfZGV2OwkJLyogZGV2aWNlIG51bWJlciAoLTEgaWYgbm90IHNldCkgKi8KICAgICBpbm9fdAliX2lubzsJCS8qIGlub2RlIG51bWJlciAqLwogI2VuZGlmCiAjaWZkZWYgRkVBVF9DV19FRElUT1IKQEAgLTE2NDUsNyArMTY0NSwxMSBAQAogI2VuZGlmCiAjaWZkZWYgRkVBVF9ESUZGCiAgICAgZGlmZl9UCSAgICAqdHBfZmlyc3RfZGlmZjsKKyMgaWZkZWYgU19TUExJTlRfUyAgLyogc3BsaW50IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgYXJyYXkgb2YgcG9pbnRlcnMgKi8KKyAgICBidWZfVAkgICAgKip0cF9kaWZmYnVmOworIyBlbHNlCiAgICAgYnVmX1QJICAgICoodHBfZGlmZmJ1ZltEQl9DT1VOVF0pOworIyBlbmRpZgogICAgIGludAkJICAgIHRwX2RpZmZfaW52YWxpZDsJLyogbGlzdCBvZiBkaWZmcyBpcyBvdXRkYXRlZCAqLwogI2VuZGlmCiAgICAgZnJhbWVfVAkgICAgKnRwX3NuYXBzaG90OyAgICAvKiB3aW5kb3cgbGF5b3V0IHNuYXBzaG90ICovCmRpZmYgLS1naXQgYS9zcmMvdmVyc2lvbi5jIGIvc3JjL3ZlcnNpb24uYwppbmRleCA4YWEwNzI5Li4wMjhhNDllIDEwMDY0NAotLS0gYS9zcmMvdmVyc2lvbi5jCisrKyBiL3NyYy92ZXJzaW9uLmMKQEAgLTY3Nyw2ICs2NzcsOCBAQAogc3RhdGljIGludCBpbmNsdWRlZF9wYXRjaGVzW10gPQogeyAgIC8qIEFkZCBuZXcgcGF0Y2ggbnVtYmVyIGJlbG93IHRoaXMgbGluZSAqLwogLyoqLworICAgIDE2NywKKy8qKi8KICAgICAxNjYsCiAvKiovCiAgICAgMTY1LAo=