ZGlmZiAtLWdpdCBhL2xpYl9pMzg2L2ludGVycnVwdHMuYyBiL2xpYl9pMzg2L2ludGVycnVwdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGY4NGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliX2kzODYvaW50ZXJydXB0cy5jCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA5CisgKiBHcmFlbWUgUnVzcywgZ3JhZW1lLnJ1c3NAZ21haWwuY29tCisgKgorICogKEMpIENvcHlyaWdodCAyMDA3CisgKiBEYW5pZWwgSGVsbHN0cm9tLCBHYWlzbGVyIFJlc2VhcmNoLCBkYW5pZWxAZ2Fpc2xlci5jb20KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIERldGxldiBadW5kZWwsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIGR6dUBkZW54LmRlCisgKgorICogKEMpIENvcHlyaWdodCAtMjAwMworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDIKKyAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCLCBkYW5pZWxAb21pY3Jvbi5zZQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMQorICogSm9zaCBIdWJlciA8aHViZXJAbWNseC5jb20+LCBNaXNzaW9uIENyaXRpY2FsIExpbnV4LCBJbmMuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGlnaC1sZXZlbCBBUEkgZm9yIHRoZSBpbnRlcnJ1cHQgc3ViLXN5c3RlbQorICogb2YgdGhlIGkzODYgcG9ydCBvZiBVLUJvb3QuIE1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4KKyAqIHNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIHRoZSBsZW9uMiAvIGxlb24zIHBvcnRzIG9mIFUtQm9vdC4KKyAqIERhbmllbCBIZWxsc3Ryb20sIERldGxldiBadW5kZWwsIFdvbGZnYW5nIERlbmsgYW5kIEpvc2ggSHViZXIgYXJlCisgKiBjcmVkaXRlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgd29yayBvbiB0aG9zZSBwb3J0cy4gVGhlIG9yaWdpbmFsCisgKiBpbnRlcnJ1cHQgaGFuZGxpbmcgcm91dGluZXMgZm9yIHRoZSBpMzg2IHBvcnQgd2VyZSB3cml0dGVuIGJ5CisgKiBEYW5pZWwgRW5nc3Ry9m0KKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2ludGVycnVwdC5oPgorCitzdHJ1Y3QgaXJxX2FjdGlvbiB7CisJaW50ZXJydXB0X2hhbmRsZXJfdCAqaGFuZGxlcjsKKwl2b2lkICphcmc7CisJdW5zaWduZWQgaW50IGNvdW50OworfTsKKworc3RhdGljIHN0cnVjdCBpcnFfYWN0aW9uIGlycV9oYW5kbGVyc1tDT05GSUdfU1lTX05VTV9JUlFTXSA9IHsgezB9IH07CitzdGF0aWMgaW50IHNwdXJpb3VzX2lycV9jbnQgPSAwOworc3RhdGljIGludCBzcHVyaW91c19pcnEgPSAwOworCit2b2lkIGlycV9pbnN0YWxsX2hhbmRsZXIoaW50IGlycSwgaW50ZXJydXB0X2hhbmRsZXJfdCAqaGFuZGxlciwgdm9pZCAqYXJnKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gQ09ORklHX1NZU19OVU1fSVJRUykgeworCQlwcmludGYoImlycV9pbnN0YWxsX2hhbmRsZXI6IGJhZCBpcnEgbnVtYmVyICVkXG4iLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJaWYgKGlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIgIT0gTlVMTCkKKwkJcHJpbnRmKCJpcnFfaW5zdGFsbF9oYW5kbGVyOiAweCUwOGx4IHJlcGxhY2luZyAweCUwOGx4XG4iLAorCQkgICAgICAgKHVsb25nKSBoYW5kbGVyLAorCQkgICAgICAgKHVsb25nKSBpcnFfaGFuZGxlcnNbaXJxXS5oYW5kbGVyKTsKKworCXN0YXR1cyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKworCWlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOworCWlycV9oYW5kbGVyc1tpcnFdLmFyZyA9IGFyZzsKKwlpcnFfaGFuZGxlcnNbaXJxXS5jb3VudCA9IDA7CisKKwl1bm1hc2tfaXJxKGlycSk7CisKKwlpZiAoc3RhdHVzKQorCQllbmFibGVfaW50ZXJydXB0cygpOworCisJcmV0dXJuOworfQorCit2b2lkIGlycV9mcmVlX2hhbmRsZXIoaW50IGlycSkKK3sKKwlpbnQgc3RhdHVzOworCisJaWYgKGlycSA8IDAgfHwgaXJxID49IENPTkZJR19TWVNfTlVNX0lSUVMpIHsKKwkJcHJpbnRmKCJpcnFfZnJlZV9oYW5kbGVyOiBiYWQgaXJxIG51bWJlciAlZFxuIiwgaXJxKTsKKwkJcmV0dXJuOworCX0KKworCXN0YXR1cyA9IGRpc2FibGVfaW50ZXJydXB0cyAoKTsKKworCW1hc2tfaXJxKGlycSk7CisKKwlpcnFfaGFuZGxlcnNbaXJxXS5oYW5kbGVyID0gTlVMTDsKKwlpcnFfaGFuZGxlcnNbaXJxXS5hcmcgPSBOVUxMOworCisJaWYgKHN0YXR1cykKKwkJZW5hYmxlX2ludGVycnVwdHMoKTsKKworCXJldHVybjsKK30KKworX19pc3JfXyBkb19pcnEoaW50IGlycSkKK3sKKwlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gQ09ORklHX1NZU19OVU1fSVJRUykgeworCQlwcmludGYoImRvX2lycTogYmFkIGlycSBudW1iZXIgJWRcbiIsIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlcikgeworCQltYXNrX2lycShpcnEpOworCisJCWlycV9oYW5kbGVyc1tpcnFdLmhhbmRsZXIoaXJxX2hhbmRsZXJzW2lycV0uYXJnKTsKKwkJaXJxX2hhbmRsZXJzW2lycV0uY291bnQrKzsKKworCQl1bm1hc2tfaXJxKGlycSk7CisJCXNwZWNpZmljX2VvaShpcnEpOworCisJfSBlbHNlIHsKKwkJaWYgKChpcnEgJiA3KSAhPSA3KSB7CisJCQlzcHVyaW91c19pcnFfY250Kys7CisJCQlzcHVyaW91c19pcnEgPSBpcnE7CisJCX0KKwl9Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19DTURfSVJRKQoraW50IGRvX2lycWluZm8oY21kX3RibF90ICpjbWR0cCwgaW50IGZsYWcsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IGlycTsKKworCXByaW50ZigiU3B1cmlvdXMgSVJROiAldSwgbGFzdCB1bmtub3duIElSUTogJWRcbiIsCisJICAgICAgIHNwdXJpb3VzX2lycV9jbnQsIHNwdXJpb3VzX2lycSk7CisKKwlwcmludGYgKCJJbnRlcnJ1cHQtSW5mb3JtYXRpb246XG4iKTsKKwlwcmludGYgKCJOciAgUm91dGluZSAgIEFyZyAgICAgICBDb3VudFxuIik7CisKKwlmb3IgKGlycSA9IDA7IGlycSA8PSBDT05GSUdfU1lTX05VTV9JUlFTOyBpcnErKykgeworCQlpZiAoaXJxX2hhbmRsZXJzW2lycV0uaGFuZGxlciAhPSBOVUxMKSB7CisJCQlwcmludGYgKCIlMDJkICAlMDhseCAgJTA4bHggICVkXG4iLAorCQkJCQlpcnEsCisJCQkJCSh1bG9uZylpcnFfaGFuZGxlcnNbaXJxXS5oYW5kbGVyLAorCQkJCQkodWxvbmcpaXJxX2hhbmRsZXJzW2lycV0uYXJnLAorCQkJCQlpcnFfaGFuZGxlcnNbaXJxXS5jb3VudCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgo=