DivestOS/Patches/Linux_CVEs/CVE-2017-1000364/3.10/0005.patch.base64
2017-11-07 17:32:46 -05:00

1 line
34 KiB
Plaintext

RnJvbSA5OTU0ZTMzZWYwZTFmNWUxMTM2YzFiZGRlMWUxOGY0MGU5YzhhZjY5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIdWdoIERpY2tpbnMgPGh1Z2hkQGdvb2dsZS5jb20+CkRhdGU6IE1vbiwgMTkgSnVuIDIwMTcgMDQ6MDM6MjQgLTA3MDAKU3ViamVjdDogW1BBVENIXSBtbTogbGFyZ2VyIHN0YWNrIGd1YXJkIGdhcCwgYmV0d2VlbiB2bWFzCgpjb21taXQgMWJlNzEwN2ZiZTE4ZWVkM2UzMTlhNmMzZTgzYzc4MjU0YjY5M2FjYiB1cHN0cmVhbS4KClN0YWNrIGd1YXJkIHBhZ2UgaXMgYSB1c2VmdWwgZmVhdHVyZSB0byByZWR1Y2UgYSByaXNrIG9mIHN0YWNrIHNtYXNoaW5nCmludG8gYSBkaWZmZXJlbnQgbWFwcGluZy4gV2UgaGF2ZSBiZWVuIHVzaW5nIGEgc2luZ2xlIHBhZ2UgZ2FwIHdoaWNoCmlzIHN1ZmZpY2llbnQgdG8gcHJldmVudCBoYXZpbmcgc3RhY2sgYWRqYWNlbnQgdG8gYSBkaWZmZXJlbnQgbWFwcGluZy4KQnV0IHRoaXMgc2VlbXMgdG8gYmUgaW5zdWZmaWNpZW50IGluIHRoZSBsaWdodCBvZiB0aGUgc3RhY2sgdXNhZ2UgaW4KdXNlcnNwYWNlLiBFLmcuIGdsaWJjIHVzZXMgYXMgbGFyZ2UgYXMgNjRrQiBhbGxvY2EoKSBpbiBtYW55IGNvbW1vbmx5CnVzZWQgZnVuY3Rpb25zLiBPdGhlcnMgdXNlIGNvbnN0cnVjdHMgbGlrcyBnaWRfdCBidWZmZXJbTkdST1VQU19NQVhdCndoaWNoIGlzIDI1NmtCIG9yIHN0YWNrIHN0cmluZ3Mgd2l0aCBNQVhfQVJHX1NUUkxFTi4KClRoaXMgd2lsbCBiZWNvbWUgZXNwZWNpYWxseSBkYW5nZXJvdXMgZm9yIHN1aWQgYmluYXJpZXMgYW5kIHRoZSBkZWZhdWx0Cm5vIGxpbWl0IGZvciB0aGUgc3RhY2sgc2l6ZSBsaW1pdCBiZWNhdXNlIHRob3NlIGFwcGxpY2F0aW9ucyBjYW4gYmUKdHJpY2tlZCB0byBjb25zdW1lIGEgbGFyZ2UgcG9ydGlvbiBvZiB0aGUgc3RhY2sgYW5kIGEgc2luZ2xlIGdsaWJjIGNhbGwKY291bGQganVtcCBvdmVyIHRoZSBndWFyZCBwYWdlLiBUaGVzZSBhdHRhY2tzIGFyZSBub3QgdGhlb3JldGljYWwsCnVuZm9ydHVuYXRlbGx5LgoKTWFrZSB0aG9zZSBhdHRhY2tzIGxlc3MgcHJvYmFibGUgYnkgaW5jcmVhc2luZyB0aGUgc3RhY2sgZ3VhcmQgZ2FwCnRvIDFNQiAob24gc3lzdGVtcyB3aXRoIDRrIHBhZ2VzOyBidXQgbWFrZSBpdCBkZXBlbmQgb24gdGhlIHBhZ2Ugc2l6ZQpiZWNhdXNlIHN5c3RlbXMgd2l0aCBsYXJnZXIgYmFzZSBwYWdlcyBtaWdodCBjYXAgc3RhY2sgYWxsb2NhdGlvbnMgaW4KdGhlIFBBR0VfU0laRSB1bml0cykgd2hpY2ggc2hvdWxkIGNvdmVyIGxhcmdlciBhbGxvY2EoKSBhbmQgVkxBIHN0YWNrCmFsbG9jYXRpb25zLiBJdCBpcyBvYnZpb3VzbHkgbm90IGEgZnVsbCBmaXggYmVjYXVzZSB0aGUgcHJvYmxlbSBpcwpzb21laG93IGluaGVyZW50LCBidXQgaXQgc2hvdWxkIHJlZHVjZSBhdHRhY2sgc3BhY2UgYSBsb3QuCgpPbmUgY291bGQgYXJndWUgdGhhdCB0aGUgZ2FwIHNpemUgc2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSBmcm9tIHVzZXJzcGFjZSwKYnV0IHRoYXQgY2FuIGJlIGRvbmUgbGF0ZXIgd2hlbiBzb21lYm9keSBmaW5kcyB0aGF0IHRoZSBuZXcgMU1CIGlzIHdyb25nCmZvciBzb21lIHNwZWNpYWwgY2FzZSBhcHBsaWNhdGlvbnMuICBGb3Igbm93LCBhZGQgYSBrZXJuZWwgY29tbWFuZCBsaW5lCm9wdGlvbiAoc3RhY2tfZ3VhcmRfZ2FwKSB0byBzcGVjaWZ5IHRoZSBzdGFjayBnYXAgc2l6ZSAoaW4gcGFnZSB1bml0cykuCgpJbXBsZW1lbnRhdGlvbiB3aXNlLCBmaXJzdCBkZWxldGUgYWxsIHRoZSBvbGQgY29kZSBmb3Igc3RhY2sgZ3VhcmQgcGFnZToKYmVjYXVzZSBhbHRob3VnaCB3ZSBjb3VsZCBnZXQgYXdheSB3aXRoIGFjY291bnRpbmcgb25lIGV4dHJhIHBhZ2UgaW4gYQpzdGFjayB2bWEsIGFjY291bnRpbmcgYSBsYXJnZXIgZ2FwIGNhbiBicmVhayB1c2Vyc3BhY2UgLSBjYXNlIGluIHBvaW50LAphIHByb2dyYW0gcnVuIHdpdGggInVsaW1pdCAtUyAtdiAyMDAwMCIgZmFpbGVkIHdoZW4gdGhlIDFNQiBnYXAgd2FzCmNvdW50ZWQgZm9yIFJMSU1JVF9BUzsgc2ltaWxhciBwcm9ibGVtcyBjb3VsZCBjb21lIHdpdGggUkxJTUlUX01MT0NLCmFuZCBzdHJpY3Qgbm9uLW92ZXJjb21taXQgbW9kZS4KCkluc3RlYWQgb2Yga2VlcGluZyBnYXAgaW5zaWRlIHRoZSBzdGFjayB2bWEsIG1haW50YWluIHRoZSBzdGFjayBndWFyZApnYXAgYXMgYSBnYXAgYmV0d2VlbiB2bWFzOiB1c2luZyB2bV9zdGFydF9nYXAoKSBpbiBwbGFjZSBvZiB2bV9zdGFydAoob3Igdm1fZW5kX2dhcCgpIGluIHBsYWNlIG9mIHZtX2VuZCBpZiBWTV9HUk9XU1VQKSBpbiBqdXN0IHRob3NlIGZldwpwbGFjZXMgd2hpY2ggbmVlZCB0byByZXNwZWN0IHRoZSBnYXAgLSBtYWlubHkgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpLAphbmQgYW5kIHRoZSB2bWEgdHJlZSdzIHN1YnRyZWVfZ2FwIHN1cHBvcnQgZm9yIHRoYXQuCgpDaGFuZ2UtSWQ6IEk4OTk1MTEwNzljNTA1N2VlNTI5OWVmMWFmZjVhYjhmMGM3N2M3NDBkCk9yaWdpbmFsLXBhdGNoLWJ5OiBPbGVnIE5lc3Rlcm92IDxvbGVnQHJlZGhhdC5jb20+Ck9yaWdpbmFsLXBhdGNoLWJ5OiBNaWNoYWwgSG9ja28gPG1ob2Nrb0BzdXNlLmNvbT4KU2lnbmVkLW9mZi1ieTogSHVnaCBEaWNraW5zIDxodWdoZEBnb29nbGUuY29tPgpbd3Q6IGJhY2twb3J0IHRvIDQuMTE6IGFkanVzdCBjb250ZXh0XQpbd3Q6IGJhY2twb3J0IHRvIDQuOTogYWRqdXN0IGNvbnRleHQgOyBrZXJuZWwgZG9jIHdhcyBub3QgaW4gYWRtaW4tZ3VpZGVdClt3dDogYmFja3BvcnQgdG8gNC40OiBhZGp1c3QgY29udGV4dCA7IGRyb3AgcHBjIGh1Z2V0bGJfcmFkaXggY2hhbmdlc10KW3d0OiBiYWNrcG9ydCB0byAzLjE4OiBhZGp1c3QgY29udGV4dCA7IG5vIEZPTExfUE9QVUxBVEUgOwogICAgIHMzOTAgdXNlcyBnZW5lcmljIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoKV0KW3d0OiBiYWNrcG9ydCB0byAzLjE2OiBhZGp1c3QgY29udGV4dF0KW3d0OiBiYWNrcG9ydCB0byAzLjEwOiBhZGp1c3QgY29udGV4dCA7IGNvZGUgbG9naWMgaW4gUEFSSVNDJ3MKICAgICBhcmNoX2dldF91bm1hcHBlZF9hcmVhKCkgd2Fzbid0IGZvdW5kIDsgY29kZSBpbnNlcnRlZCBpbnRvCiAgICAgZXhwYW5kX3Vwd2FyZHMoKSBhbmQgZXhwYW5kX2Rvd253YXJkcygpIHJ1bnMgdW5kZXIgYW5vbl92bWEgbG9jazsKICAgICBjaGFuZ2VzIGZvciBndXAuYzpmYXVsdGluX3BhZ2UgZ28gdG8gbWVtb3J5LmM6X19nZXRfdXNlcl9wYWdlcygpOwogICAgIGluY2x1ZGVkIEh1Z2ggRGlja2lucycgZml4ZXNdClNpZ25lZC1vZmYtYnk6IFdpbGx5IFRhcnJlYXUgPHdAMXd0LmV1PgotLS0KCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDJmY2JlZTEuLmE5MWQwMzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0yOTE4LDYgKzI5MTgsMTMgQEAKIAlzcGlhX3BlZHI9CiAJc3BpYV9wZWRkcj0KIAorCXN0YWNrX2d1YXJkX2dhcD0JW01NXQorCQkJb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3RhY2sgZ2FwIHByb3RlY3Rpb24uIFRoZSB2YWx1ZQorCQkJaXMgaW4gcGFnZSB1bml0cyBhbmQgaXQgZGVmaW5lcyBob3cgbWFueSBwYWdlcyBwcmlvcgorCQkJdG8gKGZvciBzdGFja3MgZ3Jvd2luZyBkb3duKSByZXNwLiBhZnRlciAoZm9yIHN0YWNrcworCQkJZ3Jvd2luZyB1cCkgdGhlIG1haW4gc3RhY2sgYXJlIHJlc2VydmVkIGZvciBubyBvdGhlcgorCQkJbWFwcGluZy4gRGVmYXVsdCB2YWx1ZSBpcyAyNTYgcGFnZXMuCisKIAlzdGFja3RyYWNlCVtGVFJBQ0VdCiAJCQlFbmFibGVkIHRoZSBzdGFjayB0cmFjZXIgb24gYm9vdCB1cC4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvbW0vbW1hcC5jIGIvYXJjaC9hcmMvbW0vbW1hcC5jCmluZGV4IDJlMDZkNTYuLmNmNGFlNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJjL21tL21tYXAuYworKysgYi9hcmNoL2FyYy9tbS9tbWFwLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAogCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CiAJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAmJgotCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1fc3RhcnRfZ2FwKHZtYSkpKQogCQkJcmV0dXJuIGFkZHI7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbWFwLmMgYi9hcmNoL2FybS9tbS9tbWFwLmMKaW5kZXggMmQ2ODlkMS4uZGFlNDdkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL21tYXAuYwpAQCAtODksNyArODksNyBAQAogCiAJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmCi0JCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKQorCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bV9zdGFydF9nYXAodm1hKSkpCiAJCQlyZXR1cm4gYWRkcjsKIAl9CiAKQEAgLTE0MCw3ICsxNDAsNyBAQAogCQkJYWRkciA9IFBBR0VfQUxJR04oYWRkcik7CiAJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmCi0JCQkJKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJCQkoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtX3N0YXJ0X2dhcCh2bWEpKSkKIAkJCXJldHVybiBhZGRyOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vZWxmLWZkcGljLmMgYi9hcmNoL2Zydi9tbS9lbGYtZmRwaWMuYwppbmRleCA4MzZmMTQ3Li5lZmE1OWYxIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tbS9lbGYtZmRwaWMuYworKysgYi9hcmNoL2Zydi9tbS9lbGYtZmRwaWMuYwpAQCAtNzQsNyArNzQsNyBAQAogCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKIAkJdm1hID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOwogCQlpZiAoVEFTS19TSVpFIC0gbGVuID49IGFkZHIgJiYKLQkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkpCisJCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtX3N0YXJ0X2dhcCh2bWEpKSkKIAkJCWdvdG8gc3VjY2VzczsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9tbWFwLmMgYi9hcmNoL21pcHMvbW0vbW1hcC5jCmluZGV4IDVhYjllOTYuLjdmNDYzNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9tbWFwLmMKKysrIGIvYXJjaC9taXBzL21tL21tYXAuYwpAQCAtOTIsNyArOTIsNyBAQAogCiAJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmCi0JCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKQorCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bV9zdGFydF9nYXAodm1hKSkpCiAJCQlyZXR1cm4gYWRkcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zbGljZS5jIGIvYXJjaC9wb3dlcnBjL21tL3NsaWNlLmMKaW5kZXggN2NlOWNmMy4uODg3MzY1YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3NsaWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3NsaWNlLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCWlmICgobW0tPnRhc2tfc2l6ZSAtIGxlbikgPCBhZGRyKQogCQlyZXR1cm4gMDsKIAl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7Ci0JcmV0dXJuICghdm1hIHx8IChhZGRyICsgbGVuKSA8PSB2bWEtPnZtX3N0YXJ0KTsKKwlyZXR1cm4gKCF2bWEgfHwgKGFkZHIgKyBsZW4pIDw9IHZtX3N0YXJ0X2dhcCh2bWEpKTsKIH0KIAogc3RhdGljIGludCBzbGljZV9sb3dfaGFzX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzbGljZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vbW1hcC5jIGIvYXJjaC9zaC9tbS9tbWFwLmMKaW5kZXggNjc3NzE3Ny4uN2RmN2Q1OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9tbWFwLmMKKysrIGIvYXJjaC9zaC9tbS9tbWFwLmMKQEAgLTYzLDcgKzYzLDcgQEAKIAogCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CiAJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAmJgotCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1fc3RhcnRfZ2FwKHZtYSkpKQogCQkJcmV0dXJuIGFkZHI7CiAJfQogCkBAIC0xMTMsNyArMTEzLDcgQEAKIAogCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CiAJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAmJgotCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1fc3RhcnRfZ2FwKHZtYSkpKQogCQkJcmV0dXJuIGFkZHI7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCmluZGV4IDIxYmNhMjEuLmVhODBjMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAogCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CiAJCWlmICh0YXNrX3NpemUgLSBsZW4gPj0gYWRkciAmJgotCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1fc3RhcnRfZ2FwKHZtYSkpKQogCQkJcmV0dXJuIGFkZHI7CiAJfQogCkBAIC0xODIsNyArMTgyLDcgQEAKIAogCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CiAJCWlmICh0YXNrX3NpemUgLSBsZW4gPj0gYWRkciAmJgotCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1fc3RhcnRfZ2FwKHZtYSkpKQogCQkJcmV0dXJuIGFkZHI7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggOTYzOTk2NC4uNjRlZTg4OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvc3BhcmMvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCWFkZHIgPSBBTElHTihhZGRyLCBIUEFHRV9TSVpFKTsKIAkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwogCQlpZiAodGFza19zaXplIC0gbGVuID49IGFkZHIgJiYKLQkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkpCisJCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtX3N0YXJ0X2dhcCh2bWEpKSkKIAkJCXJldHVybiBhZGRyOwogCX0KIAlpZiAobW0tPmdldF91bm1hcHBlZF9hcmVhID09IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEpCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvdGlsZS9tbS9odWdldGxicGFnZS5jCmluZGV4IDBhYzM1OTkuLmQ0MzUyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvdGlsZS9tbS9odWdldGxicGFnZS5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIAkJYWRkciA9IEFMSUdOKGFkZHIsIGh1Z2VfcGFnZV9zaXplKGgpKTsKIAkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwogCQlpZiAoVEFTS19TSVpFIC0gbGVuID49IGFkZHIgJiYKLQkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkpCisJCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtX3N0YXJ0X2dhcCh2bWEpKSkKIAkJCXJldHVybiBhZGRyOwogCX0KIAlpZiAoY3VycmVudC0+bW0tPmdldF91bm1hcHBlZF9hcmVhID09IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYwppbmRleCAzMDI3N2UyLi5kMDUwMzkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKIAkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOwogCQlpZiAoZW5kIC0gbGVuID49IGFkZHIgJiYKLQkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkpCisJCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtX3N0YXJ0X2dhcCh2bWEpKSkKIAkJCXJldHVybiBhZGRyOwogCX0KIApAQCAtMTY2LDcgKzE2Niw3IEBACiAJCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOwogCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CiAJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAmJgotCQkJCSghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkpCisJCQkJKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bV9zdGFydF9nYXAodm1hKSkpCiAJCQlyZXR1cm4gYWRkcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jCmluZGV4IDQzNDg4MDMuLjFiYjU1NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCWFkZHIgPSBBTElHTihhZGRyLCBodWdlX3BhZ2Vfc2l6ZShoKSk7CiAJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmCi0JCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKQorCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bV9zdGFydF9nYXAodm1hKSkpCiAJCQlyZXR1cm4gYWRkcjsKIAl9CiAJaWYgKG1tLT5nZXRfdW5tYXBwZWRfYXJlYSA9PSBhcmNoX2dldF91bm1hcHBlZF9hcmVhKQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGwuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggNWQzZjdhMS4uMWZmMGI5MiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3N5c2NhbGwuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvc3lzY2FsbC5jCkBAIC04Niw3ICs4Niw3IEBACiAJCS8qIEF0IHRoaXMgcG9pbnQ6ICAoIXZtbSB8fCBhZGRyIDwgdm1tLT52bV9lbmQpLiAqLwogCQlpZiAoVEFTS19TSVpFIC0gbGVuIDwgYWRkcikKIAkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoIXZtbSB8fCBhZGRyICsgbGVuIDw9IHZtbS0+dm1fc3RhcnQpCisJCWlmICghdm1tIHx8IGFkZHIgKyBsZW4gPD0gdm1fc3RhcnRfZ2FwKHZtbSkpCiAJCQlyZXR1cm4gYWRkcjsKIAkJYWRkciA9IHZtbS0+dm1fZW5kOwogCQlpZiAoZmxhZ3MgJiBNQVBfU0hBUkVEKQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA0ZTVmMzMyLi5kYjdkODljIDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYworKysgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJCWFkZHIgPSBBTElHTihhZGRyLCBodWdlX3BhZ2Vfc2l6ZShoKSk7CiAJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmCi0JCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKQorCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bV9zdGFydF9nYXAodm1hKSkpCiAJCQlyZXR1cm4gYWRkcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCBmN2NmMDRiLi5jZWQ0YTBiIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0zMjIsMTEgKzMyMiw3IEBACiAKIAkvKiBXZSBkb24ndCBzaG93IHRoZSBzdGFjayBndWFyZCBwYWdlIGluIC9wcm9jL21hcHMgKi8KIAlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7Ci0JaWYgKHN0YWNrX2d1YXJkX3BhZ2Vfc3RhcnQodm1hLCBzdGFydCkpCi0JCXN0YXJ0ICs9IFBBR0VfU0laRTsKIAllbmQgPSB2bWEtPnZtX2VuZDsKLQlpZiAoc3RhY2tfZ3VhcmRfcGFnZV9lbmQodm1hLCBlbmQpKQotCQllbmQgLT0gUEFHRV9TSVpFOwogCiAJc2VxX3NldHdpZHRoKG0sIDI1ICsgc2l6ZW9mKHZvaWQgKikgKiA2IC0gMSk7CiAJc2VxX3ByaW50ZihtLCAiJTA4bHgtJTA4bHggJWMlYyVjJWMgJTA4bGx4ICUwMng6JTAyeCAlbHUgIiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA2NzEzYmNkLi4xZWQ0YjRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMDk4LDM0ICsxMDk4LDYgQEAKIGludCBjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgZ2V0X2NtZGxpbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpidWZmZXIsIGludCBidWZsZW4pOwogCi0vKiBJcyB0aGUgdm1hIGEgY29udGludWF0aW9uIG9mIHRoZSBzdGFjayB2bWEgYWJvdmUgaXQ/ICovCi1zdGF0aWMgaW5saW5lIGludCB2bWFfZ3Jvd3Nkb3duKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIHZtYSAmJiAodm1hLT52bV9lbmQgPT0gYWRkcikgJiYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzdGFja19ndWFyZF9wYWdlX3N0YXJ0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pICYmCi0JCSh2bWEtPnZtX3N0YXJ0ID09IGFkZHIpICYmCi0JCSF2bWFfZ3Jvd3Nkb3duKHZtYS0+dm1fcHJldiwgYWRkcik7Ci19Ci0KLS8qIElzIHRoZSB2bWEgYSBjb250aW51YXRpb24gb2YgdGhlIHN0YWNrIHZtYSBiZWxvdyBpdD8gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZtYV9ncm93c3VwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuIHZtYSAmJiAodm1hLT52bV9zdGFydCA9PSBhZGRyKSAmJiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTVVApOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzdGFja19ndWFyZF9wYWdlX2VuZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTVVApICYmCi0JCSh2bWEtPnZtX2VuZCA9PSBhZGRyKSAmJgotCQkhdm1hX2dyb3dzdXAodm1hLT52bV9uZXh0LCBhZGRyKTsKLX0KLQogZXh0ZXJuIHBpZF90CiB2bV9pc19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgaW5fZ3JvdXApOwogCkBAIC0xNjc3LDYgKzE2NDksNyBAQAogCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlzdHJ1Y3QgZmlsZSAqZmlscCk7CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN0YWNrX2d1YXJkX2dhcDsKIC8qIEdlbmVyaWMgZXhwYW5kIHN0YWNrIHdoaWNoIGdyb3dzIHRoZSBzdGFjayBhY2NvcmRpbmcgdG8gR1JPV1N7VVAsRE9XTn0gKi8KIGV4dGVybiBpbnQgZXhwYW5kX3N0YWNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogCkBAIC0xNzA1LDYgKzE2NzgsMzAgQEAKIAlyZXR1cm4gdm1hOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1fc3RhcnRfZ2FwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXVuc2lnbmVkIGxvbmcgdm1fc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pIHsKKwkJdm1fc3RhcnQgLT0gc3RhY2tfZ3VhcmRfZ2FwOworCQlpZiAodm1fc3RhcnQgPiB2bWEtPnZtX3N0YXJ0KQorCQkJdm1fc3RhcnQgPSAwOworCX0KKwlyZXR1cm4gdm1fc3RhcnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2bV9lbmRfZ2FwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXVuc2lnbmVkIGxvbmcgdm1fZW5kID0gdm1hLT52bV9lbmQ7CisKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0dST1dTVVApIHsKKwkJdm1fZW5kICs9IHN0YWNrX2d1YXJkX2dhcDsKKwkJaWYgKHZtX2VuZCA8IHZtYS0+dm1fZW5kKQorCQkJdm1fZW5kID0gLVBBR0VfU0laRTsKKwl9CisJcmV0dXJuIHZtX2VuZDsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlyZXR1cm4gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggMGMwMzQyNS4uZWQ5MGJlMyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTE0NzgsOCArMTQ3OCw2IEBACiAJcmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3RhY2tfZ3VhcmRfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKLQogc3RhdGljIGJvb2wgX19uZWVkX21pZ3JhdGVfY21hX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtMTc5MSwxMiArMTc4OSw2IEBACiAJcmV0dXJuIHBhZ2U7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN0YWNrX2d1YXJkX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gc3RhY2tfZ3VhcmRfcGFnZV9zdGFydCh2bWEsIGFkZHIpIHx8Ci0JICAgICAgIHN0YWNrX2d1YXJkX3BhZ2VfZW5kKHZtYSwgYWRkcitQQUdFX1NJWkUpOwotfQotCiAvKioKICAqIF9fZ2V0X3VzZXJfcGFnZXMoKSAtIHBpbiB1c2VyIHBhZ2VzIGluIG1lbW9yeQogICogQHRzazoJdGFza19zdHJ1Y3Qgb2YgdGFyZ2V0IHRhc2sKQEAgLTE5NzcsMTEgKzE5NjksNiBAQAogCQkJCWludCByZXQ7CiAJCQkJdW5zaWduZWQgaW50IGZhdWx0X2ZsYWdzID0gMDsKIAotCQkJCS8qIEZvciBtbG9jaywganVzdCBza2lwIHRoZSBzdGFjayBndWFyZCBwYWdlLiAqLwotCQkJCWlmIChmb2xsX2ZsYWdzICYgRk9MTF9NTE9DSykgewotCQkJCQlpZiAoc3RhY2tfZ3VhcmRfcGFnZSh2bWEsIHN0YXJ0KSkKLQkJCQkJCWdvdG8gbmV4dF9wYWdlOwotCQkJCX0KIAkJCQlpZiAoZm9sbF9mbGFncyAmIEZPTExfV1JJVEUpCiAJCQkJCWZhdWx0X2ZsYWdzIHw9IEZBVUxUX0ZMQUdfV1JJVEU7CiAJCQkJaWYgKG5vbmJsb2NraW5nKQpAQCAtMzM1Myw0MCArMzM0MCw2IEBACiB9CiAKIC8qCi0gKiBUaGlzIGlzIGxpa2UgYSBzcGVjaWFsIHNpbmdsZS1wYWdlICJleHBhbmRfe2Rvd258dXB9d2FyZHMoKSIsCi0gKiBleGNlcHQgd2UgbXVzdCBmaXJzdCBtYWtlIHN1cmUgdGhhdCAnYWRkcmVzc3stfCt9UEFHRV9TSVpFJwotICogZG9lc24ndCBoaXQgYW5vdGhlciB2bWEuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3N0YWNrX2d1YXJkX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKLXsKLQlhZGRyZXNzICY9IFBBR0VfTUFTSzsKLQlpZiAoKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pICYmIGFkZHJlc3MgPT0gdm1hLT52bV9zdGFydCkgewotCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYgPSB2bWEtPnZtX3ByZXY7Ci0KLQkJLyoKLQkJICogSXMgdGhlcmUgYSBtYXBwaW5nIGFidXR0aW5nIHRoaXMgb25lIGJlbG93PwotCQkgKgotCQkgKiBUaGF0J3Mgb25seSBvayBpZiBpdCdzIHRoZSBzYW1lIHN0YWNrIG1hcHBpbmcKLQkJICogdGhhdCBoYXMgZ290dGVuIHNwbGl0Li4KLQkJICovCi0JCWlmIChwcmV2ICYmIHByZXYtPnZtX2VuZCA9PSBhZGRyZXNzKQotCQkJcmV0dXJuIHByZXYtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOID8gMCA6IC1FTk9NRU07Ci0KLQkJcmV0dXJuIGV4cGFuZF9kb3dud2FyZHModm1hLCBhZGRyZXNzIC0gUEFHRV9TSVpFKTsKLQl9Ci0JaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NVUCkgJiYgYWRkcmVzcyArIFBBR0VfU0laRSA9PSB2bWEtPnZtX2VuZCkgewotCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQgPSB2bWEtPnZtX25leHQ7Ci0KLQkJLyogQXMgVk1fR1JPV1NET1dOIGJ1dCBzL2JlbG93L2Fib3ZlLyAqLwotCQlpZiAobmV4dCAmJiBuZXh0LT52bV9zdGFydCA9PSBhZGRyZXNzICsgUEFHRV9TSVpFKQotCQkJcmV0dXJuIG5leHQtPnZtX2ZsYWdzICYgVk1fR1JPV1NVUCA/IDAgOiAtRU5PTUVNOwotCi0JCXJldHVybiBleHBhbmRfdXB3YXJkcyh2bWEsIGFkZHJlc3MgKyBQQUdFX1NJWkUpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIFdlIGVudGVyIHdpdGggbm9uLWV4Y2x1c2l2ZSBtbWFwX3NlbSAodG8gZXhjbHVkZSB2bWEgY2hhbmdlcywKICAqIGJ1dCBhbGxvdyBjb25jdXJyZW50IGZhdWx0cyksIGFuZCBwdGUgbWFwcGVkIGJ1dCBub3QgeWV0IGxvY2tlZC4KICAqIFdlIHJldHVybiB3aXRoIG1tYXBfc2VtIHN0aWxsIGhlbGQsIGJ1dCBwdGUgdW5tYXBwZWQgYW5kIHVubG9ja2VkLgpAQCAtMzQwNCwxMCArMzM1Nyw2IEBACiAJLyogRmlsZSBtYXBwaW5nIHdpdGhvdXQgLT52bV9vcHMgPyAqLwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKQogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwotCi0JLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgYSBndWFyZCBwYWdlIHRvIHRoZSBzdGFjayAqLwotCWlmIChjaGVja19zdGFja19ndWFyZF9wYWdlKHZtYSwgYWRkcmVzcykgPCAwKQotCQlyZXR1cm4gVk1fRkFVTFRfU0lHU0VHVjsKIAogCS8qIFVzZSB0aGUgemVyby1wYWdlIGZvciByZWFkcyAqLwogCWlmICghKGZsYWdzICYgRkFVTFRfRkxBR19XUklURSkpIHsKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCA0NzY3YjlkLi43MGNmMzJlIDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yNzUsNiArMjc1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJsaW0sIHJldHZhbDsKIAl1bnNpZ25lZCBsb25nIG5ld2Jyaywgb2xkYnJrOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgbWluX2JyazsKIAlib29sIHBvcHVsYXRlOwogCkBAIC0zMjAsNyArMzIxLDggQEAKIAl9CiAKIAkvKiBDaGVjayBhZ2FpbnN0IGV4aXN0aW5nIG1tYXAgbWFwcGluZ3MuICovCi0JaWYgKGZpbmRfdm1hX2ludGVyc2VjdGlvbihtbSwgb2xkYnJrLCBuZXdicmsrUEFHRV9TSVpFKSkKKwluZXh0ID0gZmluZF92bWEobW0sIG9sZGJyayk7CisJaWYgKG5leHQgJiYgbmV3YnJrICsgUEFHRV9TSVpFID4gdm1fc3RhcnRfZ2FwKG5leHQpKQogCQlnb3RvIG91dDsKIAogCS8qIE9rLCBsb29rcyBnb29kIC0gbGV0IGl0IHJpcC4gKi8KQEAgLTM0MywxMCArMzQ1LDIyIEBACiAKIHN0YXRpYyBsb25nIHZtYV9jb21wdXRlX3N1YnRyZWVfZ2FwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXVuc2lnbmVkIGxvbmcgbWF4LCBzdWJ0cmVlX2dhcDsKLQltYXggPSB2bWEtPnZtX3N0YXJ0OwotCWlmICh2bWEtPnZtX3ByZXYpCi0JCW1heCAtPSB2bWEtPnZtX3ByZXYtPnZtX2VuZDsKKwl1bnNpZ25lZCBsb25nIG1heCwgcHJldl9lbmQsIHN1YnRyZWVfZ2FwOworCisJLyoKKwkgKiBOb3RlOiBpbiB0aGUgcmFyZSBjYXNlIG9mIGEgVk1fR1JPV1NET1dOIGFib3ZlIGEgVk1fR1JPV1NVUCwgd2UKKwkgKiBhbGxvdyB0d28gc3RhY2tfZ3VhcmRfZ2FwcyBiZXR3ZWVuIHRoZW0gaGVyZSwgYW5kIHdoZW4gY2hvb3NpbmcKKwkgKiBhbiB1bm1hcHBlZCBhcmVhOyB3aGVyZWFzIHdoZW4gZXhwYW5kaW5nIHdlIG9ubHkgcmVxdWlyZSBvbmUuCisJICogVGhhdCdzIGEgbGl0dGxlIGluY29uc2lzdGVudCwgYnV0IGtlZXBzIHRoZSBjb2RlIGhlcmUgc2ltcGxlci4KKwkgKi8KKwltYXggPSB2bV9zdGFydF9nYXAodm1hKTsKKwlpZiAodm1hLT52bV9wcmV2KSB7CisJCXByZXZfZW5kID0gdm1fZW5kX2dhcCh2bWEtPnZtX3ByZXYpOworCQlpZiAobWF4ID4gcHJldl9lbmQpCisJCQltYXggLT0gcHJldl9lbmQ7CisJCWVsc2UKKwkJCW1heCA9IDA7CisJfQogCWlmICh2bWEtPnZtX3JiLnJiX2xlZnQpIHsKIAkJc3VidHJlZV9nYXAgPSByYl9lbnRyeSh2bWEtPnZtX3JiLnJiX2xlZnQsCiAJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0LCB2bV9yYiktPnJiX3N1YnRyZWVfZ2FwOwpAQCAtNDMwLDcgKzQ0NCw3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXZjLCAmdm1hLT5hbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpCiAJCQlhbm9uX3ZtYV9pbnRlcnZhbF90cmVlX3ZlcmlmeShhdmMpOwogCQl2bWFfdW5sb2NrX2Fub25fdm1hKHZtYSk7Ci0JCWhpZ2hlc3RfYWRkcmVzcyA9IHZtYS0+dm1fZW5kOworCQloaWdoZXN0X2FkZHJlc3MgPSB2bV9lbmRfZ2FwKHZtYSk7CiAJCXZtYSA9IHZtYS0+dm1fbmV4dDsKIAkJaSsrOwogCX0KQEAgLTU5OCw3ICs2MTIsNyBAQAogCWlmICh2bWEtPnZtX25leHQpCiAJCXZtYV9nYXBfdXBkYXRlKHZtYS0+dm1fbmV4dCk7CiAJZWxzZQotCQltbS0+aGlnaGVzdF92bV9lbmQgPSB2bWEtPnZtX2VuZDsKKwkJbW0tPmhpZ2hlc3Rfdm1fZW5kID0gdm1fZW5kX2dhcCh2bWEpOwogCiAJLyoKIAkgKiB2bWEtPnZtX3ByZXYgd2Fzbid0IGtub3duIHdoZW4gd2UgZm9sbG93ZWQgdGhlIHJidHJlZSB0byBmaW5kIHRoZQpAQCAtODQ3LDcgKzg2MSw3IEBACiAJCQl2bWFfZ2FwX3VwZGF0ZSh2bWEpOwogCQlpZiAoZW5kX2NoYW5nZWQpIHsKIAkJCWlmICghbmV4dCkKLQkJCQltbS0+aGlnaGVzdF92bV9lbmQgPSBlbmQ7CisJCQkJbW0tPmhpZ2hlc3Rfdm1fZW5kID0gdm1fZW5kX2dhcCh2bWEpOwogCQkJZWxzZSBpZiAoIWFkanVzdF9uZXh0KQogCQkJCXZtYV9nYXBfdXBkYXRlKG5leHQpOwogCQl9CkBAIC04OTAsNyArOTA0LDcgQEAKIAkJZWxzZSBpZiAobmV4dCkKIAkJCXZtYV9nYXBfdXBkYXRlKG5leHQpOwogCQllbHNlCi0JCQltbS0+aGlnaGVzdF92bV9lbmQgPSBlbmQ7CisJCQlXQVJOX09OKG1tLT5oaWdoZXN0X3ZtX2VuZCAhPSB2bV9lbmRfZ2FwKHZtYSkpOwogCX0KIAlpZiAoaW5zZXJ0ICYmIGZpbGUpCiAJCXVwcm9iZV9tbWFwKGluc2VydCk7CkBAIC0xNjkxLDcgKzE3MDUsNyBAQAogCiAJd2hpbGUgKHRydWUpIHsKIAkJLyogVmlzaXQgbGVmdCBzdWJ0cmVlIGlmIGl0IGxvb2tzIHByb21pc2luZyAqLwotCQlnYXBfZW5kID0gdm1hLT52bV9zdGFydDsKKwkJZ2FwX2VuZCA9IHZtX3N0YXJ0X2dhcCh2bWEpOwogCQlpZiAoZ2FwX2VuZCA+PSBsb3dfbGltaXQgJiYgdm1hLT52bV9yYi5yYl9sZWZ0KSB7CiAJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxlZnQgPQogCQkJCXJiX2VudHJ5KHZtYS0+dm1fcmIucmJfbGVmdCwKQEAgLTE3MDIsNyArMTcxNiw3IEBACiAJCQl9CiAJCX0KIAotCQlnYXBfc3RhcnQgPSB2bWEtPnZtX3ByZXYgPyB2bWEtPnZtX3ByZXYtPnZtX2VuZCA6IDA7CisJCWdhcF9zdGFydCA9IHZtYS0+dm1fcHJldiA/IHZtX2VuZF9nYXAodm1hLT52bV9wcmV2KSA6IDA7CiBjaGVja19jdXJyZW50OgogCQkvKiBDaGVjayBpZiBjdXJyZW50IG5vZGUgaGFzIGEgc3VpdGFibGUgZ2FwICovCiAJCWlmIChnYXBfc3RhcnQgPiBoaWdoX2xpbWl0KQpAQCAtMTcyOSw4ICsxNzQzLDggQEAKIAkJCXZtYSA9IHJiX2VudHJ5KHJiX3BhcmVudChwcmV2KSwKIAkJCQkgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0LCB2bV9yYik7CiAJCQlpZiAocHJldiA9PSB2bWEtPnZtX3JiLnJiX2xlZnQpIHsKLQkJCQlnYXBfc3RhcnQgPSB2bWEtPnZtX3ByZXYtPnZtX2VuZDsKLQkJCQlnYXBfZW5kID0gdm1hLT52bV9zdGFydDsKKwkJCQlnYXBfc3RhcnQgPSB2bV9lbmRfZ2FwKHZtYS0+dm1fcHJldik7CisJCQkJZ2FwX2VuZCA9IHZtX3N0YXJ0X2dhcCh2bWEpOwogCQkJCWdvdG8gY2hlY2tfY3VycmVudDsKIAkJCX0KIAkJfQpAQCAtMTc5NCw3ICsxODA4LDcgQEAKIAogCXdoaWxlICh0cnVlKSB7CiAJCS8qIFZpc2l0IHJpZ2h0IHN1YnRyZWUgaWYgaXQgbG9va3MgcHJvbWlzaW5nICovCi0JCWdhcF9zdGFydCA9IHZtYS0+dm1fcHJldiA/IHZtYS0+dm1fcHJldi0+dm1fZW5kIDogMDsKKwkJZ2FwX3N0YXJ0ID0gdm1hLT52bV9wcmV2ID8gdm1fZW5kX2dhcCh2bWEtPnZtX3ByZXYpIDogMDsKIAkJaWYgKGdhcF9zdGFydCA8PSBoaWdoX2xpbWl0ICYmIHZtYS0+dm1fcmIucmJfcmlnaHQpIHsKIAkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcmlnaHQgPQogCQkJCXJiX2VudHJ5KHZtYS0+dm1fcmIucmJfcmlnaHQsCkBAIC0xODA3LDcgKzE4MjEsNyBAQAogCiBjaGVja19jdXJyZW50OgogCQkvKiBDaGVjayBpZiBjdXJyZW50IG5vZGUgaGFzIGEgc3VpdGFibGUgZ2FwICovCi0JCWdhcF9lbmQgPSB2bWEtPnZtX3N0YXJ0OworCQlnYXBfZW5kID0gdm1fc3RhcnRfZ2FwKHZtYSk7CiAJCWlmIChnYXBfZW5kIDwgbG93X2xpbWl0KQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWlmIChnYXBfc3RhcnQgPD0gaGlnaF9saW1pdCAmJiBnYXBfZW5kIC0gZ2FwX3N0YXJ0ID49IGxlbmd0aCkKQEAgLTE4MzMsNyArMTg0Nyw3IEBACiAJCQkJICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCwgdm1fcmIpOwogCQkJaWYgKHByZXYgPT0gdm1hLT52bV9yYi5yYl9yaWdodCkgewogCQkJCWdhcF9zdGFydCA9IHZtYS0+dm1fcHJldiA/Ci0JCQkJCXZtYS0+dm1fcHJldi0+dm1fZW5kIDogMDsKKwkJCQkJdm1fZW5kX2dhcCh2bWEtPnZtX3ByZXYpIDogMDsKIAkJCQlnb3RvIGNoZWNrX2N1cnJlbnQ7CiAJCQl9CiAJCX0KQEAgLTE4NzEsNyArMTg4NSw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2OwogCXN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mbzsKIAogCWlmIChsZW4gPiBUQVNLX1NJWkUgLSBtbWFwX21pbl9hZGRyKSB7CkBAIC0xODg3LDkgKzE5MDEsMTAgQEAKIAogCWlmIChhZGRyKSB7CiAJCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOwotCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CisJCXZtYSA9IGZpbmRfdm1hX3ByZXYobW0sIGFkZHIsICZwcmV2KTsKIAkJaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmIGFkZHIgPj0gbW1hcF9taW5fYWRkciAmJgotCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1fc3RhcnRfZ2FwKHZtYSkpICYmCisJCSAgICAoIXByZXYgfHwgYWRkciA+PSB2bV9lbmRfZ2FwKHByZXYpKSkKIAkJCXJldHVybiBhZGRyOwogCX0KIApAQCAtMTkyMCw3ICsxOTM1LDcgQEAKIAkJCSAgY29uc3QgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IHVuc2lnbmVkIGxvbmcgcGdvZmYsCiAJCQkgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gYWRkcjA7CiAJc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvOwpAQCAtMTk0MSw5ICsxOTU2LDEwIEBACiAJLyogcmVxdWVzdGluZyBhIHNwZWNpZmljIGFkZHJlc3MgKi8KIAlpZiAoYWRkcikgewogCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKLQkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOworCQl2bWEgPSBmaW5kX3ZtYV9wcmV2KG1tLCBhZGRyLCAmcHJldik7CiAJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAmJiBhZGRyID49IG1tYXBfbWluX2FkZHIgJiYKLQkJCQkoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKQorCQkJCSghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1fc3RhcnRfZ2FwKHZtYSkpICYmCisJCQkJKCFwcmV2IHx8IGFkZHIgPj0gdm1fZW5kX2dhcChwcmV2KSkpCiAJCQlyZXR1cm4gYWRkcjsKIAl9CiAKQEAgLTIwNzYsMjEgKzIwOTIsMTkgQEAKICAqIHVwZGF0ZSBhY2NvdW50aW5nLiBUaGlzIGlzIHNoYXJlZCB3aXRoIGJvdGggdGhlCiAgKiBncm93LXVwIGFuZCBncm93LWRvd24gY2FzZXMuCiAgKi8KLXN0YXRpYyBpbnQgYWNjdF9zdGFja19ncm93dGgoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBncm93KQorc3RhdGljIGludCBhY2N0X3N0YWNrX2dyb3d0aChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGdyb3cpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXN0cnVjdCBybGltaXQgKnJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW07Ci0JdW5zaWduZWQgbG9uZyBuZXdfc3RhcnQsIGFjdHVhbF9zaXplOworCXVuc2lnbmVkIGxvbmcgbmV3X3N0YXJ0OwogCiAJLyogYWRkcmVzcyBzcGFjZSBsaW1pdCB0ZXN0cyAqLwogCWlmICghbWF5X2V4cGFuZF92bShtbSwgZ3JvdykpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogU3RhY2sgbGltaXQgdGVzdCAqLwotCWFjdHVhbF9zaXplID0gc2l6ZTsKLQlpZiAoc2l6ZSAmJiAodm1hLT52bV9mbGFncyAmIChWTV9HUk9XU1VQIHwgVk1fR1JPV1NET1dOKSkpCi0JCWFjdHVhbF9zaXplIC09IFBBR0VfU0laRTsKLQlpZiAoYWN0dWFsX3NpemUgPiBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIpKQorCWlmIChzaXplID4gQUNDRVNTX09OQ0UocmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBtbG9jayBsaW1pdCB0ZXN0cyAqLwpAQCAtMjEzMSwzMiArMjE0NSw0MCBAQAogICovCiBpbnQgZXhwYW5kX3Vwd2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlpbnQgZXJyb3I7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZ2FwX2FkZHI7CisJaW50IGVycm9yID0gMDsKIAogCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU1VQKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkvKgotCSAqIFdlIG11c3QgbWFrZSBzdXJlIHRoZSBhbm9uX3ZtYSBpcyBhbGxvY2F0ZWQKLQkgKiBzbyB0aGF0IHRoZSBhbm9uX3ZtYSBsb2NraW5nIGlzIG5vdCBhIG5vb3AuCi0JICovCisJLyogR3VhcmQgYWdhaW5zdCB3cmFwcGluZyBhcm91bmQgdG8gYWRkcmVzcyAwLiAqLworCWFkZHJlc3MgJj0gUEFHRV9NQVNLOworCWFkZHJlc3MgKz0gUEFHRV9TSVpFOworCWlmICghYWRkcmVzcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBFbmZvcmNlIHN0YWNrX2d1YXJkX2dhcCAqLworCWdhcF9hZGRyID0gYWRkcmVzcyArIHN0YWNrX2d1YXJkX2dhcDsKKwlpZiAoZ2FwX2FkZHIgPCBhZGRyZXNzKQorCQlyZXR1cm4gLUVOT01FTTsKKwluZXh0ID0gdm1hLT52bV9uZXh0OworCWlmIChuZXh0ICYmIG5leHQtPnZtX3N0YXJ0IDwgZ2FwX2FkZHIpIHsKKwkJaWYgKCEobmV4dC0+dm1fZmxhZ3MgJiBWTV9HUk9XU1VQKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQkvKiBDaGVjayB0aGF0IGJvdGggc3RhY2sgc2VnbWVudHMgaGF2ZSB0aGUgc2FtZSBhbm9uX3ZtYT8gKi8KKwl9CisKKwkvKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGUgYW5vbl92bWEgaXMgYWxsb2NhdGVkLiAqLwogCWlmICh1bmxpa2VseShhbm9uX3ZtYV9wcmVwYXJlKHZtYSkpKQogCQlyZXR1cm4gLUVOT01FTTsKLQl2bWFfbG9ja19hbm9uX3ZtYSh2bWEpOwogCiAJLyoKIAkgKiB2bWEtPnZtX3N0YXJ0L3ZtX2VuZCBjYW5ub3QgY2hhbmdlIHVuZGVyIHVzIGJlY2F1c2UgdGhlIGNhbGxlcgogCSAqIGlzIHJlcXVpcmVkIHRvIGhvbGQgdGhlIG1tYXBfc2VtIGluIHJlYWQgbW9kZS4gIFdlIG5lZWQgdGhlCiAJICogYW5vbl92bWEgbG9jayB0byBzZXJpYWxpemUgYWdhaW5zdCBjb25jdXJyZW50IGV4cGFuZF9zdGFja3MuCi0JICogQWxzbyBndWFyZCBhZ2FpbnN0IHdyYXBwaW5nIGFyb3VuZCB0byBhZGRyZXNzIDAuCiAJICovCi0JaWYgKGFkZHJlc3MgPCBQQUdFX0FMSUdOKGFkZHJlc3MrNCkpCi0JCWFkZHJlc3MgPSBQQUdFX0FMSUdOKGFkZHJlc3MrNCk7Ci0JZWxzZSB7Ci0JCXZtYV91bmxvY2tfYW5vbl92bWEodm1hKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWVycm9yID0gMDsKKwl2bWFfbG9ja19hbm9uX3ZtYSh2bWEpOwogCiAJLyogU29tZWJvZHkgZWxzZSBtaWdodCBoYXZlIHJhY2VkIGFuZCBleHBhbmRlZCBpdCBhbHJlYWR5ICovCiAJaWYgKGFkZHJlc3MgPiB2bWEtPnZtX2VuZCkgewpAQCAtMjE4Nyw3ICsyMjA5LDcgQEAKIAkJCQlpZiAodm1hLT52bV9uZXh0KQogCQkJCQl2bWFfZ2FwX3VwZGF0ZSh2bWEtPnZtX25leHQpOwogCQkJCWVsc2UKLQkJCQkJdm1hLT52bV9tbS0+aGlnaGVzdF92bV9lbmQgPSBhZGRyZXNzOworCQkJCQl2bWEtPnZtX21tLT5oaWdoZXN0X3ZtX2VuZCA9IHZtX2VuZF9nYXAodm1hKTsKIAkJCQlzcGluX3VubG9jaygmdm1hLT52bV9tbS0+cGFnZV90YWJsZV9sb2NrKTsKIAogCQkJCXBlcmZfZXZlbnRfbW1hcCh2bWEpOwpAQCAtMjIwNywyNyArMjIyOSwzNiBAQAogaW50IGV4cGFuZF9kb3dud2FyZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogeworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldjsKKwl1bnNpZ25lZCBsb25nIGdhcF9hZGRyOwogCWludCBlcnJvcjsKLQotCS8qCi0JICogV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGFub25fdm1hIGlzIGFsbG9jYXRlZAotCSAqIHNvIHRoYXQgdGhlIGFub25fdm1hIGxvY2tpbmcgaXMgbm90IGEgbm9vcC4KLQkgKi8KLQlpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSkKLQkJcmV0dXJuIC1FTk9NRU07CiAKIAlhZGRyZXNzICY9IFBBR0VfTUFTSzsKIAllcnJvciA9IHNlY3VyaXR5X21tYXBfYWRkcihhZGRyZXNzKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXZtYV9sb2NrX2Fub25fdm1hKHZtYSk7CisJLyogRW5mb3JjZSBzdGFja19ndWFyZF9nYXAgKi8KKwlnYXBfYWRkciA9IGFkZHJlc3MgLSBzdGFja19ndWFyZF9nYXA7CisJaWYgKGdhcF9hZGRyID4gYWRkcmVzcykKKwkJcmV0dXJuIC1FTk9NRU07CisJcHJldiA9IHZtYS0+dm1fcHJldjsKKwlpZiAocHJldiAmJiBwcmV2LT52bV9lbmQgPiBnYXBfYWRkcikgeworCQlpZiAoIShwcmV2LT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJLyogQ2hlY2sgdGhhdCBib3RoIHN0YWNrIHNlZ21lbnRzIGhhdmUgdGhlIHNhbWUgYW5vbl92bWE/ICovCisJfQorCisJLyogV2UgbXVzdCBtYWtlIHN1cmUgdGhlIGFub25fdm1hIGlzIGFsbG9jYXRlZC4gKi8KKwlpZiAodW5saWtlbHkoYW5vbl92bWFfcHJlcGFyZSh2bWEpKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKgogCSAqIHZtYS0+dm1fc3RhcnQvdm1fZW5kIGNhbm5vdCBjaGFuZ2UgdW5kZXIgdXMgYmVjYXVzZSB0aGUgY2FsbGVyCiAJICogaXMgcmVxdWlyZWQgdG8gaG9sZCB0aGUgbW1hcF9zZW0gaW4gcmVhZCBtb2RlLiAgV2UgbmVlZCB0aGUKIAkgKiBhbm9uX3ZtYSBsb2NrIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IGNvbmN1cnJlbnQgZXhwYW5kX3N0YWNrcy4KIAkgKi8KKwl2bWFfbG9ja19hbm9uX3ZtYSh2bWEpOwogCiAJLyogU29tZWJvZHkgZWxzZSBtaWdodCBoYXZlIHJhY2VkIGFuZCBleHBhbmRlZCBpdCBhbHJlYWR5ICovCiAJaWYgKGFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0KSB7CkBAIC0yMjY5LDI4ICsyMzAwLDI1IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0vKgotICogTm90ZSBob3cgZXhwYW5kX3N0YWNrKCkgcmVmdXNlcyB0byBleHBhbmQgdGhlIHN0YWNrIGFsbCB0aGUgd2F5IHRvCi0gKiBhYnV0IHRoZSBuZXh0IHZpcnR1YWwgbWFwcGluZywgKnVubGVzcyogdGhhdCBtYXBwaW5nIGl0c2VsZiBpcyBhbHNvCi0gKiBhIHN0YWNrIG1hcHBpbmcuIFdlIHdhbnQgdG8gbGVhdmUgcm9vbSBmb3IgYSBndWFyZCBwYWdlLCBhZnRlciBhbGwKLSAqICh0aGUgZ3VhcmQgcGFnZSBpdHNlbGYgaXMgbm90IGFkZGVkIGhlcmUsIHRoYXQgaXMgZG9uZSBieSB0aGUKLSAqIGFjdHVhbCBwYWdlIGZhdWx0aW5nIGxvZ2ljKQotICoKLSAqIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGd1YXJkIHBhZ2UgbG9naWMgKHNlZSBtbS9tZW1vcnkuYzoKLSAqIGNoZWNrX3N0YWNrX2d1YXJkX3BhZ2UoKSksIHdoaWNoIG9ubHkgYWxsb3dzIHRoZSBndWFyZCBwYWdlIHRvIGJlCi0gKiByZW1vdmVkIHVuZGVyIHRoZXNlIGNpcmN1bXN0YW5jZXMuCi0gKi8KKy8qIGVuZm9yY2VkIGdhcCBiZXR3ZWVuIHRoZSBleHBhbmRpbmcgc3RhY2sgYW5kIG90aGVyIG1hcHBpbmdzLiAqLwordW5zaWduZWQgbG9uZyBzdGFja19ndWFyZF9nYXAgPSAyNTZVTDw8UEFHRV9TSElGVDsKKworc3RhdGljIGludCBfX2luaXQgY21kbGluZV9wYXJzZV9zdGFja19ndWFyZF9nYXAoY2hhciAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwljaGFyICplbmRwdHI7CisKKwl2YWwgPSBzaW1wbGVfc3RydG91bChwLCAmZW5kcHRyLCAxMCk7CisJaWYgKCEqZW5kcHRyKQorCQlzdGFja19ndWFyZF9nYXAgPSB2YWwgPDwgUEFHRV9TSElGVDsKKworCXJldHVybiAwOworfQorX19zZXR1cCgic3RhY2tfZ3VhcmRfZ2FwPSIsIGNtZGxpbmVfcGFyc2Vfc3RhY2tfZ3VhcmRfZ2FwKTsKKwogI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCiBpbnQgZXhwYW5kX3N0YWNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0OwotCi0JYWRkcmVzcyAmPSBQQUdFX01BU0s7Ci0JbmV4dCA9IHZtYS0+dm1fbmV4dDsKLQlpZiAobmV4dCAmJiBuZXh0LT52bV9zdGFydCA9PSBhZGRyZXNzICsgUEFHRV9TSVpFKSB7Ci0JCWlmICghKG5leHQtPnZtX2ZsYWdzICYgVk1fR1JPV1NVUCkpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJcmV0dXJuIGV4cGFuZF91cHdhcmRzKHZtYSwgYWRkcmVzcyk7CiB9CiAKQEAgLTIzMTIsMTQgKzIzNDAsNiBAQAogI2Vsc2UKIGludCBleHBhbmRfc3RhY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXY7Ci0KLQlhZGRyZXNzICY9IFBBR0VfTUFTSzsKLQlwcmV2ID0gdm1hLT52bV9wcmV2OwotCWlmIChwcmV2ICYmIHByZXYtPnZtX2VuZCA9PSBhZGRyZXNzKSB7Ci0JCWlmICghKHByZXYtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKSkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KIAlyZXR1cm4gZXhwYW5kX2Rvd253YXJkcyh2bWEsIGFkZHJlc3MpOwogfQogCkBAIC0yNDE1LDcgKzI0MzUsNyBAQAogCQl2bWEtPnZtX3ByZXYgPSBwcmV2OwogCQl2bWFfZ2FwX3VwZGF0ZSh2bWEpOwogCX0gZWxzZQotCQltbS0+aGlnaGVzdF92bV9lbmQgPSBwcmV2ID8gcHJldi0+dm1fZW5kIDogMDsKKwkJbW0tPmhpZ2hlc3Rfdm1fZW5kID0gcHJldiA/IHZtX2VuZF9nYXAocHJldikgOiAwOwogCXRhaWxfdm1hLT52bV9uZXh0ID0gTlVMTDsKIAltbS0+bW1hcF9jYWNoZSA9IE5VTEw7CQkvKiBLaWxsIHRoZSBjYWNoZS4gKi8KIH0K