ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9NYWtlZmlsZSBiL2RyaXZlcnMvaXNkbi9oaXNheC9NYWtlZmlsZQppbmRleCA4ZDZiYjU2Li4yOTNlMjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L01ha2VmaWxlCkBAIC0yMyw3ICsyMyw3IEBACiAjIE11bHRpcGFydCBvYmplY3RzLgogCiBoaXNheF9zdDU0ODEteSAJCQkJOj0gc3Q1NDgxX2luaXQubyBzdDU0ODFfdXNiLm8gc3Q1NDgxX2QubyBcCi0JCQkJCSAgIHN0NTQ4MV9iLm8gc3Q1NDgxX2hkbGMubworCQkJCQkgICBzdDU0ODFfYi5vCiAKIGhpc2F4LXkJICAJCQkJOj0gY29uZmlnLm8gaXNkbmwxLm8gdGVpLm8gaXNkbmwyLm8gaXNkbmwzLm8gXAogCQkgICAgIAkJCSAgIGxtZ3IubyBxOTMxLm8gY2FsbGMubyBmc20ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2FtZDc5MzBfZm4uYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMKaW5kZXggYzRmODYxYS4uOGFlMDhjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2FtZDc5MzBfZm4uYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYW1kNzkzMF9mbi5jCkBAIC05Nyw3ICs5Nyw3IEBACiB9OwogCiAKLXZvaWQgLyogbWFjcm8gd1dvcmRBTUQgKi8KK3N0YXRpYyB2b2lkIC8qIG1hY3JvIHdXb3JkQU1EICovCiBXcml0ZVdvcmRBbWQ3OTMwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgQllURSByZWcsIFdPUkQgdmFsKQogewogICAgICAgICB3Qnl0ZUFNRChjcywgMHgwMCwgcmVnKTsKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgICAgICB3Qnl0ZUFNRChjcywgMHgwMSwgSElCWVRFKHZhbCkpOwogfQogCi1XT1JEIC8qIG1hY3JvIHJXb3JkQU1EICovCitzdGF0aWMgV09SRCAvKiBtYWNybyByV29yZEFNRCAqLwogUmVhZFdvcmRBbWQ3OTMwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgQllURSByZWcpCiB7CiAgICAgICAgIFdPUkQgcmVzOwpAQCAtNjY1LDcgKzY2NSw3IEBACiAJfQogfQogCi12b2lkCitzdGF0aWMgdm9pZAogc2V0c3RhY2tfQW1kNzkzMChzdHJ1Y3QgUFN0YWNrICpzdCwgc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCkBAIC02NzYsNyArNjc2LDcgQEAKIH0KIAogCi12b2lkCitzdGF0aWMgdm9pZAogRENfQ2xvc2VfQW1kNzkzMChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpIHsKICAgICAgICAgaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9JU0FDKQogCQlkZWJ1Z2wxKGNzLCAiQW1kNzkzMDogRENfQ2xvc2UgY2FsbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXN1c2NvbS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FzdXNjb20uYwppbmRleCA3NTQ2ZTJlLi5hOThjNWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXN1c2NvbS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hc3VzY29tLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiAKLWNvbnN0IGNoYXIgKkFzdXNjb21fcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjE0LjIuNCAkIjsKK3N0YXRpYyBjb25zdCBjaGFyICpBc3VzY29tX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xNC4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKICNkZWZpbmUgYnl0ZWluKGFkZHIpIGluYihhZGRyKQpAQCAtMjM5LDcgKzIzOSw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19hc3VzY29tKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKIAlpbnQgYnl0ZWNudCA9IDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2F2bV9wY2kuYwppbmRleCA2ZmNiMmNmLi42MjU3OTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYXZtX3BjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9hdm1fcGNpLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQlyZXR1cm4oTlVMTCk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiB3cml0ZV9jdHJsKHN0cnVjdCBCQ1N0YXRlICpiY3MsIGludCB3aGljaCkgewogCiAJaWYgKGJjcy0+Y3MtPmRlYnVnICYgTDFfREVCX0hTQ1gpCkBAIC0xOTMsNyArMTkzLDcgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBtb2RlaGRsYyhzdHJ1Y3QgQkNTdGF0ZSAqYmNzLCBpbnQgbW9kZSwgaW50IGJjKQogewogCXN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcyA9IGJjcy0+Y3M7CkBAIC00NTEsNyArNDUxLDcgQEAKIAl9CiB9CiAKLWlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIEhETENfaXJxX21haW4oc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCXVfaW50IHN0YXQ7CkBAIC00ODcsNyArNDg3LDcgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBoZGxjX2wybDEoc3RydWN0IFBTdGFjayAqc3QsIGludCBwciwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBCQ1N0YXRlICpiY3MgPSBzdC0+bDEuYmNzOwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAJfQogfQogCi12b2lkCitzdGF0aWMgdm9pZAogY2xvc2VfaGRsY3N0YXRlKHN0cnVjdCBCQ1N0YXRlICpiY3MpCiB7CiAJbW9kZWhkbGMoYmNzLCAwLCAwKTsKQEAgLTU3MCw3ICs1NzAsNyBAQAogCX0KIH0KIAotaW50CitzdGF0aWMgaW50CiBvcGVuX2hkbGNzdGF0ZShzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIHN0cnVjdCBCQ1N0YXRlICpiY3MpCiB7CiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJDX0ZMR19JTklULCAmYmNzLT5GbGFnKSkgewpAQCAtNTk4LDcgKzU5OCw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotaW50CitzdGF0aWMgaW50CiBzZXRzdGFja19oZGxjKHN0cnVjdCBQU3RhY2sgKnN0LCBzdHJ1Y3QgQkNTdGF0ZSAqYmNzKQogewogCWJjcy0+Y2hhbm5lbCA9IHN0LT5sMS5iYzsKQEAgLTYxMiw2ICs2MTIsNyBAQAogCXJldHVybiAoMCk7CiB9CiAKKyNpZiAwCiB2b2lkIF9faW5pdAogY2xlYXJfcGVuZGluZ19oZGxjX2ludHMoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewpAQCAtNjQxLDggKzY0Miw5IEBACiAJCWRlYnVnbDEoY3MsICJIRExDIDIgVklOICV4IiwgdmFsKTsKIAl9CiB9CisjZW5kaWYgIC8qICAwICAqLwogCi12b2lkIF9faW5pdAorc3RhdGljIHZvaWQgX19pbml0CiBpbml0aGRsYyhzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJY3MtPmJjc1swXS5CQ19TZXRTdGFjayA9IHNldHN0YWNrX2hkbGM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hNHQuYwppbmRleCBmNDEwZjYyLi5kY2IzMDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E0dC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTR0LmMKQEAgLTIzLDcgKzIzLDcgQEAKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiAKLWNvbnN0IGNoYXIgKmJrbV9hNHRfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjIyLjIuNCAkIjsKK3N0YXRpYyBjb25zdCBjaGFyICpia21fYTR0X3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4yMi4yLjQgJCI7CiAKIAogc3RhdGljIGlubGluZSB1X2NoYXIKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHJlbGVhc2VfaW9fYmttKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKIAlpZiAoY3MtPmh3LmF4LmJhc2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTguYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ia21fYTguYwppbmRleCA5NGJiODNjLi41ZjIxYjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvYmttX2E4LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2JrbV9hOC5jCkBAIC0yNyw3ICsyNyw3IEBACiAKIGV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwogCi1jb25zdCBjaGFyIHNjdF9xdWFkcm9fcmV2aXNpb25bXSA9ICIkUmV2aXNpb246IDEuMjIuMi40ICQiOworc3RhdGljIGNvbnN0IGNoYXIgc2N0X3F1YWRyb19yZXZpc2lvbltdID0gIiRSZXZpc2lvbjogMS4yMi4yLjQgJCI7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzY3RfcXVhZHJvX3N1YnR5cGVzW10gPQogewpAQCAtMTkzLDcgKzE5Myw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19zY3RfcXVhZHJvKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKIAlyZWxlYXNlX3JlZ2lvbihjcy0+aHcuYXguYmFzZSAmIDB4ZmZmZmZmYzAsIDEyOCk7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAlyZXR1cm4gKDApOwogfQogCi1pbnQgX19pbml0CitzdGF0aWMgaW50IF9faW5pdAogc2N0X2FsbG9jX2lvKHVfaW50IGFkciwgdV9pbnQgbGVuKQogewogCWlmICghcmVxdWVzdF9yZWdpb24oYWRyLCBsZW4sICJzY2l0ZWwiKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYwppbmRleCAwNDA2NWFiLi43YzU2YzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY2FsbGMuYwpAQCAtODc0LDcgKzg3NCw3IEBACiAJfSAKIH0KIAotc3RydWN0IENoYW5uZWwKK3N0YXRpYyBzdHJ1Y3QgQ2hhbm5lbAogKnNlbGVjdGZyZWVjaGFubmVsKHN0cnVjdCBQU3RhY2sgKnN0LCBpbnQgYmNoKQogewogCXN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcyA9IHN0LT5sMS5oYXJkd2FyZTsKQEAgLTE0MjksNyArMTQyOSw3IEBACiAJSGlTYXhfcHV0c3RhdHVzKGNoYW5wLT5jcywgIkNoIiwgIiVkIENBUElNU0cgJXMiLCBjaGFucC0+Y2hhbiwgdG1wYnVmKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGxsaV9nb3RfZmFjX3JlcShzdHJ1Y3QgQ2hhbm5lbCAqY2hhbnAsIGNhcGlfbXNnICpjbSkgewogCWlmICgoY20tPnBhcmFbMF0gIT0gMykgfHwgKGNtLT5wYXJhWzFdICE9IDApKQogCQlyZXR1cm47CkBAIC0xNDU0LDcgKzE0NTQsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGxsaV9nb3RfbWFudWZhY3R1cmVyKHN0cnVjdCBDaGFubmVsICpjaGFucCwgc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBjYXBpX21zZyAqY20pIHsKIAlpZiAoKGNzLT50eXAgPT0gSVNETl9DVFlQRV9FTFNBKSB8fCAoY3MtPnR5cCA9PSBJU0ROX0NUWVBFX0VMU0FfUE5QKSB8fAogCQkoY3MtPnR5cCA9PSBJU0ROX0NUWVBFX0VMU0FfUENJKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCmluZGV4IDE2NjNlZTYuLmM1NDJlNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogI2RlZmluZSBISVNBWF9JRFNJWkUgKEhJU0FYX01BWF9DQVJEUyo4KQogc3RhdGljIGNoYXIgSGlTYXhJRFtISVNBWF9JRFNJWkVdID0geyAwLCB9OwogCi1jaGFyICpIaVNheF9pZCA9IEhpU2F4SUQ7CitzdGF0aWMgY2hhciAqSGlTYXhfaWQgPSBIaVNheElEOwogI2lmZGVmIE1PRFVMRQogLyogVmFyaWFibGVzIGZvciBpbnNtb2QgKi8KIHN0YXRpYyBpbnQgdHlwZVtISVNBWF9NQVhfQ0FSRFNdID0geyAwLCB9OwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJcmV0dXJuIHJldjsKIH0KIAotdm9pZCBfX2luaXQgSGlTYXhWZXJzaW9uKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgSGlTYXhWZXJzaW9uKHZvaWQpCiB7CiAJY2hhciB0bXBbNjRdOwogCkBAIC02MDgsNiArNjA4LDcgQEAKIC8qCiAgKiBGaW5kIGNhcmQgd2l0aCBnaXZlbiBjYXJkIG51bWJlcgogICovCisjaWYgMAogc3RydWN0IElzZG5DYXJkU3RhdGUgKmhpc2F4X2dldF9jYXJkKGludCBjYXJkbnIpCiB7CiAJaWYgKChjYXJkbnIgPD0gbnJjYXJkcykgJiYgKGNhcmRuciA+IDApKQpAQCAtNjE1LDggKzYxNiw5IEBACiAJCQlyZXR1cm4gY2FyZHNbY2FyZG5yIC0gMV0uY3M7CiAJcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCi1pbnQgSGlTYXhfcmVhZHN0YXR1cyh1X2NoYXIgX191c2VyICpidWYsIGludCBsZW4sIGludCBpZCwgaW50IGNoYW5uZWwpCitzdGF0aWMgaW50IEhpU2F4X3JlYWRzdGF0dXModV9jaGFyIF9fdXNlciAqYnVmLCBpbnQgbGVuLCBpbnQgaWQsIGludCBjaGFubmVsKQogewogCWludCBjb3VudCwgY250OwogCXVfY2hhciBfX3VzZXIgKnAgPSBidWY7CkBAIC03NjgsNyArNzcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBsbF9zdG9wKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKK3N0YXRpYyB2b2lkIGxsX3N0b3Aoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWlzZG5fY3RybCBpYzsKIApAQCAtMTE4NCw3ICsxMTg2LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIEhpU2F4X3NoaWZ0Y2FyZHMoaW50IGlkeCkKK3N0YXRpYyB2b2lkIEhpU2F4X3NoaWZ0Y2FyZHMoaW50IGlkeCkKIHsKIAlpbnQgaTsKIApAQCAtMTE5Miw3ICsxMTk0LDcgQEAKIAkJbWVtY3B5KCZjYXJkc1tpXSwgJmNhcmRzW2kgKyAxXSwgc2l6ZW9mKGNhcmRzW2ldKSk7CiB9CiAKLWludCBIaVNheF9pbml0aGFyZHdhcmUoaW50ICpidXN5X2ZsYWcpCitzdGF0aWMgaW50IEhpU2F4X2luaXRoYXJkd2FyZShpbnQgKmJ1c3lfZmxhZykKIHsKIAlpbnQgZm91bmRjYXJkcyA9IDA7CiAJaW50IGkgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9kaXZhLmMKaW5kZXggMzk0ZDQ4MS4uYjYyZDZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2RpdmEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZGl2YS5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIGV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwogCi1jb25zdCBjaGFyICpEaXZhX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4zMy4yLjYgJCI7CitzdGF0aWMgY29uc3QgY2hhciAqRGl2YV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMzMuMi42ICQiOwogCiAjZGVmaW5lIGJ5dGVvdXQoYWRkcix2YWwpIG91dGIodmFsLGFkZHIpCiAjZGVmaW5lIGJ5dGVpbihhZGRyKSBpbmIoYWRkcikKQEAgLTcwNiw3ICs3MDYsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHJlbGVhc2VfaW9fZGl2YShzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJaW50IGJ5dGVjbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2Vsc2EuYwppbmRleCA0ZDdhMDI1Li4xMTBlOWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhLmMKQEAgLTMzLDEzICszMywxMyBAQAogCiBleHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKIAotY29uc3QgY2hhciAqRWxzYV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMzIuMi40ICQiOwotY29uc3QgY2hhciAqRWxzYV9UeXBlc1tdID0KK3N0YXRpYyBjb25zdCBjaGFyICpFbHNhX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4zMi4yLjQgJCI7CitzdGF0aWMgY29uc3QgY2hhciAqRWxzYV9UeXBlc1tdID0KIHsiTm9uZSIsICJQQyIsICJQQ0MtOCIsICJQQ0MtMTYiLCAiUENGIiwgIlBDRi1Qcm8iLAogICJQQ01DSUEiLCAiUVMgMTAwMCIsICJRUyAzMDAwIiwgIk1pY3JvbGluayBQQ0kiLCAiUVMgMzAwMCBQQ0kiLCAKICAiUENNQ0lBLUlQQUMiIH07CiAKLWNvbnN0IGNoYXIgKklUQUNWZXJbXSA9CitzdGF0aWMgY29uc3QgY2hhciAqSVRBQ1ZlcltdID0KIHsiPzA/IiwgIj8xPyIsICI/Mj8iLCAiPzM/IiwgIj80PyIsICJWMi4yIiwKICAiQjEiLCAiQTEifTsKIApAQCAtNDI1LDcgKzQyNSw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19lbHNhKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKIAlpbnQgYnl0ZWNudCA9IDg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZWxzYV9zZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jCmluZGV4IDY4OWM4MzMuLjg5OGVjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbHNhX3Nlci5jCkBAIC0yMzcsNyArMjM3LDcgQEAKICNlbmRpZgogfQogCi1pbmxpbmUgaW50CitzdGF0aWMgaW5saW5lIGludAogd3JpdGVfbW9kZW0oc3RydWN0IEJDU3RhdGUgKmJjcykgewogCWludCByZXQ9MDsKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBiY3MtPmNzOwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJcmV0dXJuKHJldCk7CiB9CiAKLWlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIG1vZGVtX2ZpbGwoc3RydWN0IEJDU3RhdGUgKmJjcykgewogCQkKIAlpZiAoYmNzLT50eF9za2IpIHsKQEAgLTQyMiw3ICs0MjIsNyBAQAogZXh0ZXJuIHZvaWQgbW9kZWhzY3goc3RydWN0IEJDU3RhdGUgKmJjcywgaW50IG1vZGUsIGludCBiYyk7CiBleHRlcm4gdm9pZCBoc2N4X2wybDEoc3RydWN0IFBTdGFjayAqc3QsIGludCBwciwgdm9pZCAqYXJnKTsKIAotdm9pZAorc3RhdGljIHZvaWQKIGNsb3NlX2Vsc2FzdGF0ZShzdHJ1Y3QgQkNTdGF0ZSAqYmNzKQogewogCW1vZGVoc2N4KGJjcywgMCwgYmNzLT5jaGFubmVsKTsKQEAgLTQ0Miw3ICs0NDIsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIG1vZGVtX3dyaXRlX2NtZChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIHVfY2hhciAqYnVmLCBpbnQgbGVuKSB7CiAJaW50IGNvdW50LCBmcDsKIAl1X2NoYXIgKm1zZyA9IGJ1ZjsKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIG1vZGVtX3NldF9pbml0KHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykgewogCWludCB0aW1lb3V0OwogCkBAIC01MjEsNyArNTIxLDcgQEAKIAl1ZGVsYXkoUkNWX0RFTEFZKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIG1vZGVtX3NldF9kaWFsKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgaW50IG91dGdvaW5nKSB7CiAJaW50IHRpbWVvdXQ7CiAjZGVmaW5lIFJDVl9ERUxBWSAyMDAwMAkKQEAgLTU0Myw3ICs1NDMsNyBAQAogCXVkZWxheShSQ1ZfREVMQVkpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogbW9kZW1fbDJsMShzdHJ1Y3QgUFN0YWNrICpzdCwgaW50IHByLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IEJDU3RhdGUgKmJjcyA9IHN0LT5sMS5iY3M7CkBAIC01NzksNyArNTc5LDcgQEAKIAl9CiB9CiAKLWludAorc3RhdGljIGludAogc2V0c3RhY2tfZWxzYShzdHJ1Y3QgUFN0YWNrICpzdCwgc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIApAQCAtNjE0LDcgKzYxNCw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGluaXRfbW9kZW0oc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKSB7CiAKIAljcy0+YmNzWzBdLkJDX1NldFN0YWNrID0gc2V0c3RhY2tfZWxzYTsKQEAgLTY0MSw3ICs2NDEsNyBAQAogCW1vZGVtX3NldF9pbml0KGNzKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHJlbGVhc2VfbW9kZW0oc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKSB7CiAKIAljcy0+aHcuZWxzYS5NRmxhZyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3cuaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vdy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDJlZWM1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vdy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyogMjAwMS8xMC8wMgotICoKLSAqIGVudGVybm93LmggICBIZWFkZXItZmlsZSBpbmNsdWRlZCBieQotICogICAgICAgICAgICAgIGVudGVybm93X3BjaS5jCi0gKgotICogQXV0aG9yICAgICAgIENocmlzdG9waCBFcnNmZWxkIDxpbmZvQGZvcm11bGEtbi5kZT4KLSAqICAgICAgICAgICAgICBGb3JtdWxhLW4gRXVyb3BlIEFHICh3d3cuZm9ybXVsYS1uLmNvbSkKLSAqICAgICAgICAgICAgICBwcmV2aW91c2x5IEdlcmRlcyBBRwotICoKLSAqCi0gKiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIChjKSB1bmRlciBHTlUgUFVCTElDIExJQ0VOU0UKLSAqLwotCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICoKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBkYXRhdHlwZXMgYW5kIG1hY3JvcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICoKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLSNkZWZpbmUgQllURQkJCQkJCQl1bnNpZ25lZCBjaGFyCi0jZGVmaW5lIFdPUkQJCQkJCQkJdW5zaWduZWQgaW50Ci0jZGVmaW5lIEhJQllURSh3KQkJCQkJCSgodW5zaWduZWQgY2hhcikoKHcgJiAweGZmMDApIC8gMjU2KSkKLSNkZWZpbmUgTE9CWVRFKHcpCQkJCQkJKCh1bnNpZ25lZCBjaGFyKSh3ICYgMHgwMGZmKSkKLSNkZWZpbmUgSW5CeXRlKGFkZHIpCQkJCQkJaW5iKGFkZHIpCi0jZGVmaW5lIE91dEJ5dGUoYWRkcix2YWwpCQkJCQlvdXRiKHZhbCxhZGRyKQotCi0KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKgotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogY2FyZC1zcGVjaWZpYyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKgotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KLQotLyogZvxyIFBvd2VySVNETiBQQ0kgKi8KLSNkZWZpbmUgVEpfQU1EX0lSUSAJCQkJCQkweDIwCi0jZGVmaW5lIFRKX0xFRDEgCQkJCQkJMHg0MAotI2RlZmluZSBUSl9MRUQyIAkJCQkJCTB4ODAKLQotCi0vKiBEYXMgRmVuc3RlciB6dW0gQU1ELi4uCi0gKiBBYiBBZHJlc3NlIGh3Lm5qZXQuYmFzZSArIFRKX0FNRF9QT1JUIHdlcmRlbiB2b20gQU1EIGpld2VpbHMgOCBCaXQgaW4KLSAqIGRlbiBUaWdlckpldCBpL28tUmF1bSBnZW1hcHB0Ci0gKiAtPiAweDAxIGRlcyBBTUQgYmVpIGh3Lm5qZXQuYmFzZSArIDBDNCAqLwotI2RlZmluZSBUSl9BTURfUE9SVAkJCQkJCTB4QzAKLQotCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICoKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBQcm90b3R5cGVuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICoKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCi0KLUJZVEUgUmVhZEJ5dGVBbWQ3OTMwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgQllURSBvZmZzZXQpOwotdm9pZCBXcml0ZUJ5dGVBbWQ3OTMwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgQllURSBvZmZzZXQsIEJZVEUgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jCmluZGV4IDFjYzRkMTEuLjMzNDFjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMKQEAgLTY1LDcgKzY1LDYgQEAKICNpbmNsdWRlICJpc2FjLmgiCiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAjaW5jbHVkZSAiYW1kNzkzMF9mbi5oIgotI2luY2x1ZGUgImVudGVybm93LmgiCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHBwX2RlZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTc0LDU4ICs3Myw3MiBAQAogCiAKIAotY29uc3QgY2hhciAqZW50ZXJub3dfcGNpX3JldiA9ICIkUmV2aXNpb246IDEuMS40LjUgJCI7CitzdGF0aWMgY29uc3QgY2hhciAqZW50ZXJub3dfcGNpX3JldiA9ICIkUmV2aXNpb246IDEuMS40LjUgJCI7CisKKworLyogZvxyIFBvd2VySVNETiBQQ0kgKi8KKyNkZWZpbmUgVEpfQU1EX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFRKX0xFRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBUSl9MRUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAKKworCisvKiBEYXMgRmVuc3RlciB6dW0gQU1ELi4uCisgKiBBYiBBZHJlc3NlIGh3Lm5qZXQuYmFzZSArIFRKX0FNRF9QT1JUIHdlcmRlbiB2b20gQU1EIGpld2VpbHMgOCBCaXQgaW4KKyAqIGRlbiBUaWdlckpldCBpL28tUmF1bSBnZW1hcHB0CisgKiAtPiAweDAxIGRlcyBBTUQgYmVpIGh3Lm5qZXQuYmFzZSArIDBDNCAqLworI2RlZmluZSBUSl9BTURfUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzAKKwogCiAKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKiBJL08tSW50ZXJmYWNlIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKIAogLyogY3MtPnJlYWRpc2FjLCBtYWNybyByQnl0ZUFNRCAqLwotQllURQotUmVhZEJ5dGVBbWQ3OTMwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgQllURSBvZmZzZXQpCitzdGF0aWMgdW5zaWduZWQgY2hhcgorUmVhZEJ5dGVBbWQ3OTMwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgdW5zaWduZWQgY2hhciBvZmZzZXQpCiB7CiAJLyogZGlyZWt0ZXMgUmVnaXN0ZXIgKi8KIAlpZihvZmZzZXQgPCA4KQotCQlyZXR1cm4gKEluQnl0ZShjcy0+aHcubmpldC5pc2FjICsgNCpvZmZzZXQpKTsKKwkJcmV0dXJuIChpbmIoY3MtPmh3Lm5qZXQuaXNhYyArIDQqb2Zmc2V0KSk7CiAKIAkvKiBpbmRpcmVrdGVzIFJlZ2lzdGVyICovCiAJZWxzZSB7Ci0JCU91dEJ5dGUoY3MtPmh3Lm5qZXQuaXNhYyArIDQqQU1EX0NSLCBvZmZzZXQpOwotCQlyZXR1cm4oSW5CeXRlKGNzLT5ody5uamV0LmlzYWMgKyA0KkFNRF9EUikpOworCQlvdXRiKG9mZnNldCwgY3MtPmh3Lm5qZXQuaXNhYyArIDQqQU1EX0NSKTsKKwkJcmV0dXJuKGluYihjcy0+aHcubmpldC5pc2FjICsgNCpBTURfRFIpKTsKIAl9CiB9CiAKIC8qIGNzLT53cml0ZWlzYWMsIG1hY3JvIHdCeXRlQU1EICovCi12b2lkCi1Xcml0ZUJ5dGVBbWQ3OTMwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgQllURSBvZmZzZXQsIEJZVEUgdmFsdWUpCitzdGF0aWMgdm9pZAorV3JpdGVCeXRlQW1kNzkzMChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyIHZhbHVlKQogewogCS8qIGRpcmVrdGVzIFJlZ2lzdGVyICovCiAJaWYob2Zmc2V0IDwgOCkKLQkJT3V0Qnl0ZShjcy0+aHcubmpldC5pc2FjICsgNCpvZmZzZXQsIHZhbHVlKTsKKwkJb3V0Yih2YWx1ZSwgY3MtPmh3Lm5qZXQuaXNhYyArIDQqb2Zmc2V0KTsKIAogCS8qIGluZGlyZWt0ZXMgUmVnaXN0ZXIgKi8KIAllbHNlIHsKLQkJT3V0Qnl0ZShjcy0+aHcubmpldC5pc2FjICsgNCpBTURfQ1IsIG9mZnNldCk7Ci0JCU91dEJ5dGUoY3MtPmh3Lm5qZXQuaXNhYyArIDQqQU1EX0RSLCB2YWx1ZSk7CisJCW91dGIob2Zmc2V0LCBjcy0+aHcubmpldC5pc2FjICsgNCpBTURfQ1IpOworCQlvdXRiKHZhbHVlLCBjcy0+aHcubmpldC5pc2FjICsgNCpBTURfRFIpOwogCX0KIH0KIAogCi12b2lkCi1lbnBjaV9zZXRJcnFNYXNrKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgQllURSB2YWwpIHsKK3N0YXRpYyB2b2lkCitlbnBjaV9zZXRJcnFNYXNrKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgdW5zaWduZWQgY2hhciB2YWwpIHsKICAgICAgICAgaWYgKCF2YWwpCi0JICAgICAgICBPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UrTkVUSkVUX0lSUU1BU0sxLCAweDAwKTsKKwkgICAgICAgIG91dGIoMHgwMCwgY3MtPmh3Lm5qZXQuYmFzZStORVRKRVRfSVJRTUFTSzEpOwogICAgICAgICBlbHNlCi0JICAgICAgICBPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UrTkVUSkVUX0lSUU1BU0sxLCBUSl9BTURfSVJRKTsKKwkgICAgICAgIG91dGIoVEpfQU1EX0lSUSwgY3MtPmh3Lm5qZXQuYmFzZStORVRKRVRfSVJRTUFTSzEpOwogfQogCiAKLXN0YXRpYyBCWVRFIGR1bW15cnIoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBpbnQgY2hhbiwgQllURSBvZmYpCitzdGF0aWMgdW5zaWduZWQgY2hhciBkdW1teXJyKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgaW50IGNoYW4sIHVuc2lnbmVkIGNoYXIgb2ZmKQogewogICAgICAgICByZXR1cm4oNSk7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bW15d3Ioc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBpbnQgY2hhbiwgQllURSBvZmYsIEJZVEUgdmFsdWUpCitzdGF0aWMgdm9pZCBkdW1teXdyKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgaW50IGNoYW4sIHVuc2lnbmVkIGNoYXIgb2ZmLCB1bnNpZ25lZCBjaGFyIHZhbHVlKQogewogCiB9CkBAIC0xNDIsMTggKzE1NSwxOCBAQAogCiAJLyogUmVzZXQgb24sIChhbHNvIGZvciBBTUQpICovCiAJY3MtPmh3Lm5qZXQuY3RybF9yZWcgPSAweDA3OwotCU91dEJ5dGUoY3MtPmh3Lm5qZXQuYmFzZSArIE5FVEpFVF9DVFJMLCBjcy0+aHcubmpldC5jdHJsX3JlZyk7CisJb3V0Yihjcy0+aHcubmpldC5jdHJsX3JlZywgY3MtPmh3Lm5qZXQuYmFzZSArIE5FVEpFVF9DVFJMKTsKIAltZGVsYXkoMjApOwogCS8qIFJlc2V0IG9mZiAqLwogCWNzLT5ody5uamV0LmN0cmxfcmVnID0gMHgzMDsKLQlPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQ1RSTCwgY3MtPmh3Lm5qZXQuY3RybF9yZWcpOworCW91dGIoY3MtPmh3Lm5qZXQuY3RybF9yZWcsIGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQ1RSTCk7CiAJLyogMjBtcyBkZWxheSAqLwogCW1kZWxheSgyMCk7CiAJY3MtPmh3Lm5qZXQuYXV4ZCA9IDA7ICAvLyBMRUQtc3RhdHVzCiAJY3MtPmh3Lm5qZXQuZG1hY3RybCA9IDA7Ci0JT3V0Qnl0ZShjcy0+aHcubmpldC5iYXNlICsgTkVUSkVUX0FVWENUUkwsIH5USl9BTURfSVJRKTsKLQlPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfSVJRTUFTSzEsIFRKX0FNRF9JUlEpOwotCU91dEJ5dGUoY3MtPmh3Lm5qZXQuYXV4YSwgY3MtPmh3Lm5qZXQuYXV4ZCk7IC8vIExFRCBvZmYKKwlvdXRiKH5USl9BTURfSVJRLCBjcy0+aHcubmpldC5iYXNlICsgTkVUSkVUX0FVWENUUkwpOworCW91dGIoVEpfQU1EX0lSUSwgY3MtPmh3Lm5qZXQuYmFzZSArIE5FVEpFVF9JUlFNQVNLMSk7CisJb3V0Yihjcy0+aHcubmpldC5hdXhkLCBjcy0+aHcubmpldC5hdXhhKTsgLy8gTEVEIG9mZgogfQogCiAKQEAgLTE2MSw3ICsxNzQsNyBAQAogZW5wY2lfY2FyZF9tc2coc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBpbnQgbXQsIHZvaWQgKmFyZykKIHsKIAl1X2xvbmcgZmxhZ3M7Ci0gICAgICAgIEJZVEUgKmNoYW47CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmNoYW47CiAKIAlpZiAoY3MtPmRlYnVnICYgTDFfREVCX0lTQUMpCiAJCWRlYnVnbDEoY3MsICJlbnRlcjpub3cgUENJOiBjYXJkX21zZzogMHglMDRYIiwgbXQpOwpAQCAtMTg3LDE2ICsyMDAsMTYgQEAKICAgICAgICAgICAgICAgICBjYXNlIE1ETF9BU1NJR046CiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBURUkgYXNzaWduZWQsIExFRDEgb24gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGNzLT5ody5uamV0LmF1eGQgPSBUSl9BTURfSVJRIDw8IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQVVYREFUQSwgY3MtPmh3Lm5qZXQuYXV4ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRiKGNzLT5ody5uamV0LmF1eGQsIGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQVVYREFUQSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE1ETF9SRU1PVkU6CiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBURUkgcmVtb3ZlZCwgTEVEcyBvZmYgKi8KIAkgICAgICAgICAgICAgICAgY3MtPmh3Lm5qZXQuYXV4ZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQVVYREFUQSwgMHgwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRiKDB4MDAsIGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQVVYREFUQSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE1ETF9CQ19BU1NJR046CiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhY3RpdmF0ZSBCLWNoYW5uZWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4gPSAoQllURSAqKWFyZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4gPSAodW5zaWduZWQgY2hhciAqKWFyZzsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9JU0FDKQogCQkgICAgICAgICAgICAgICAgZGVidWdsMShjcywgImVudGVyOm5vdyBQQ0k6IGFzc2lnbiBwaHlzLiBCQyAlZCBpbiBBTUQgTE1SMSIsICpjaGFuKTsKQEAgLTIwNCwxMSArMjE3LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjcy0+ZGMuYW1kNzkzMC5waF9jb21tYW5kKGNzLCAoY3MtPmRjLmFtZDc5MzAubG1yMSB8ICgqY2hhbiArIDEpKSwgIk1ETF9CQ19BU1NJR04iKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF0IGxlYXN0IG9uZSBiLWNoYW5uZWwgaW4gdXNlLCBMRUQgMiBvbiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgY3MtPmh3Lm5qZXQuYXV4ZCB8PSBUSl9BTURfSVJRIDw8IDI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQVVYREFUQSwgY3MtPmh3Lm5qZXQuYXV4ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRiKGNzLT5ody5uamV0LmF1eGQsIGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQVVYREFUQSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE1ETF9CQ19SRUxFQVNFOgogICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVhY3RpdmF0ZSBCLWNoYW5uZWwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4gPSAoQllURSAqKWFyZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW4gPSAodW5zaWduZWQgY2hhciAqKWFyZzsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNzLT5kZWJ1ZyAmIEwxX0RFQl9JU0FDKQogCQkgICAgICAgICAgICAgICAgZGVidWdsMShjcywgImVudGVyOm5vdyBQQ0k6IHJlbGVhc2UgcGh5cy4gQkMgJWQgaW4gQW1kIExNUjEiLCAqY2hhbik7CkBAIC0yMTcsNyArMjMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGItY2hhbm5lbCBhY3RpdmUgLT4gTEVEMiBvZmYgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNzLT5kYy5hbWQ3OTMwLmxtcjEgJiAzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcy0+aHcubmpldC5hdXhkICY9IH4oVEpfQU1EX0lSUSA8PCAyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0Qnl0ZShjcy0+aHcubmpldC5iYXNlICsgTkVUSkVUX0FVWERBVEEsIGNzLT5ody5uamV0LmF1eGQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRiKGNzLT5ody5uamV0LmF1eGQsIGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQVVYREFUQSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjMxLDExICsyNDQsMTEgQEAKIGVucGNpX2ludGVycnVwdChpbnQgaW50bm8sIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gZGV2X2lkOwotCUJZVEUgczB2YWwsIHMxdmFsLCBpcjsKKwl1bnNpZ25lZCBjaGFyIHMwdmFsLCBzMXZhbCwgaXI7CiAJdV9sb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JczF2YWwgPSBJbkJ5dGUoY3MtPmh3Lm5qZXQuYmFzZSArIE5FVEpFVF9JUlFTVEFUMSk7CisJczF2YWwgPSBpbmIoY3MtPmh3Lm5qZXQuYmFzZSArIE5FVEpFVF9JUlFTVEFUMSk7CiAKICAgICAgICAgLyogQU1EIHRocmV3IGFuIGludGVycnVwdCAqLwogCWlmICghKHMxdmFsICYgVEpfQU1EX0lSUSkpIHsKQEAgLTI0NSwxMyArMjU4LDEzIEBACiAJCXMxdmFsID0gMTsKIAl9IGVsc2UKIAkJczF2YWwgPSAwOwotCXMwdmFsID0gSW5CeXRlKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfSVJRU1RBVDApOworCXMwdmFsID0gaW5iKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfSVJRU1RBVDApOwogCWlmICgoczB2YWwgfCBzMXZhbCk9PTApIHsgLy8gc2hhcmVkIElSUQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfSAKIAlpZiAoczB2YWwpCi0JCU91dEJ5dGUoY3MtPmh3Lm5qZXQuYmFzZSArIE5FVEpFVF9JUlFTVEFUMCwgczB2YWwpOworCQlvdXRiKHMwdmFsLCBjcy0+aHcubmpldC5iYXNlICsgTkVUSkVUX0lSUVNUQVQwKTsKIAogCS8qIERNQS1JbnRlcnJ1cHQ6IEItY2hhbm5lbC1zdHVmZiAqLwogCS8qIHNldCBiaXRzIGluIHN2YWwgdG8gaW5kaWNhdGUgd2hpY2ggcGFnZSBpcyBmcmVlICovCkBAIC0zNDIsMjAgKzM1NSwyMCBAQAogCiAJCS8qIFJlc2V0IGFuICovCiAJCWNzLT5ody5uamV0LmN0cmxfcmVnID0gMHgwNzsgIC8vIGdl5G5kZXJ0IHZvbiAweGZmCi0JCU91dEJ5dGUoY3MtPmh3Lm5qZXQuYmFzZSArIE5FVEpFVF9DVFJMLCBjcy0+aHcubmpldC5jdHJsX3JlZyk7CisJCW91dGIoY3MtPmh3Lm5qZXQuY3RybF9yZWcsIGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQ1RSTCk7CiAJCS8qIDIwIG1zIFBhdXNlICovCiAJCW1kZWxheSgyMCk7CiAKIAkJY3MtPmh3Lm5qZXQuY3RybF9yZWcgPSAweDMwOyAgLyogUmVzZXQgT2ZmIGFuZCBzdGF0dXMgcmVhZCBjbGVhciAqLwotCQlPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQ1RSTCwgY3MtPmh3Lm5qZXQuY3RybF9yZWcpOworCQlvdXRiKGNzLT5ody5uamV0LmN0cmxfcmVnLCBjcy0+aHcubmpldC5iYXNlICsgTkVUSkVUX0NUUkwpOwogCQltZGVsYXkoMTApOwogCiAJCWNzLT5ody5uamV0LmF1eGQgPSAweDAwOyAvLyB3YXIgMHhjMAogCQljcy0+aHcubmpldC5kbWFjdHJsID0gMDsKIAotCQlPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfQVVYQ1RSTCwgflRKX0FNRF9JUlEpOwotCQlPdXRCeXRlKGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfSVJRTUFTSzEsIFRKX0FNRF9JUlEpOwotCQlPdXRCeXRlKGNzLT5ody5uamV0LmF1eGEsIGNzLT5ody5uamV0LmF1eGQpOworCQlvdXRiKH5USl9BTURfSVJRLCBjcy0+aHcubmpldC5iYXNlICsgTkVUSkVUX0FVWENUUkwpOworCQlvdXRiKFRKX0FNRF9JUlEsIGNzLT5ody5uamV0LmJhc2UgKyBORVRKRVRfSVJRTUFTSzEpOworCQlvdXRiKGNzLT5ody5uamV0LmF1eGQsIGNzLT5ody5uamV0LmF1eGEpOwogCiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9nYXplbC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMKaW5kZXggMjRhMDVhNC4uMzUyYjQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2dhemVsLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci1jb25zdCBjaGFyICpnYXplbF9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMTkuMi40ICQiOworc3RhdGljIGNvbnN0IGNoYXIgKmdhemVsX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xOS4yLjQgJCI7CiAKICNkZWZpbmUgUjY0NyAgICAgIDEKICNkZWZpbmUgUjY4NSAgICAgIDIKQEAgLTMxNyw3ICszMTcsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQotdm9pZAorCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19nYXplbChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJdW5zaWduZWQgaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjNHM4c19sMS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmYzRzOHNfbDEuYwppbmRleCBiYTFkMDI4Li42ZTdlMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjNHM4c19sMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmM0czhzX2wxLmMKQEAgLTEzNTgsNyArMTM1OCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBkaXNhYmxlL2VuYWJsZSBoYXJkd2FyZSBpbiBudCBvciB0ZSBtb2RlICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCitzdGF0aWMgdm9pZAogaGZjX2hhcmR3YXJlX2VuYWJsZShoZmM0czhzX2h3ICogaHcsIGludCBlbmFibGUsIGludCBudF9tb2RlKQogewogCXVfbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJkczAuYwppbmRleCBlYmVhM2ZlLi43Y2Y4Nzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiZHMwLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY18yYmRzMC5jCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJZGVidWdsMShjcywic2VuZF9kYXRhICVkIGJsb2NrZWQiLCBiY3MtPmNoYW5uZWwpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogbWFpbl9yZWNfMmJkczAoc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBiY3MtPmNzOwpAQCAtMzk5LDcgKzM5OSw3IEBACiAJcmV0dXJuOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogbW9kZV8yYnMwKHN0cnVjdCBCQ1N0YXRlICpiY3MsIGludCBtb2RlLCBpbnQgYmMpCiB7CiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gYmNzLT5jczsKQEAgLTUwNSw3ICs1MDUsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGNsb3NlXzJiczAoc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAltb2RlXzJiczAoYmNzLCAwLCBiY3MtPmNoYW5uZWwpOwpAQCAtNTM0LDcgKzUzNCw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotaW50CitzdGF0aWMgaW50CiBzZXRzdGFja18yYihzdHJ1Y3QgUFN0YWNrICpzdCwgc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAliY3MtPmNoYW5uZWwgPSBzdC0+bDEuYmM7CkBAIC0xMDA0LDcgKzEwMDQsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHNldHN0YWNrX2hmY2Qoc3RydWN0IFBTdGFjayAqc3QsIHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKIAlzdC0+bDEubDFodyA9IEhGQ0RfbDFodzsKQEAgLTEwMTUsNyArMTAxNSw3IEBACiB7CiB9CiAKLXVuc2lnbmVkIGludCBfX2luaXQKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0CiAqaW5pdF9zZW5kX2hmY2QoaW50IGNudCkKIHsKIAlpbnQgaSwgKnNlbmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjXzJiczAuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJzMC5jCmluZGV4IGJiMzc2ZjMuLmY5NzhhNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJzMC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfMmJzMC5jCkBAIC01Miw3ICs1Miw3IEBACiAJCXJldHVybiAodG8pOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIEdldEZyZWVGaWZvQnl0ZXMoc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAlpbnQgczsKQEAgLTY2LDcgKzY2LDcgQEAKIAlyZXR1cm4gKHMpOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIFJlYWRaUmVnKHN0cnVjdCBCQ1N0YXRlICpiY3MsIHVfY2hhciByZWcpCiB7CiAJaW50IHZhbDsKQEAgLTM5NCw3ICszOTQsNyBAQAogCXJldHVybjsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIG1vZGVfaGZjKHN0cnVjdCBCQ1N0YXRlICpiY3MsIGludCBtb2RlLCBpbnQgYmMpCiB7CiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gYmNzLT5jczsKQEAgLTUwNyw3ICs1MDcsNyBAQAogfQogCiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBjbG9zZV9oZmNzdGF0ZShzdHJ1Y3QgQkNTdGF0ZSAqYmNzKQogewogCW1vZGVfaGZjKGJjcywgMCwgYmNzLT5jaGFubmVsKTsKQEAgLTUzNyw3ICs1MzcsNyBAQAogCXJldHVybiAoMCk7CiB9CiAKLWludAorc3RhdGljIGludAogc2V0c3RhY2tfaGZjKHN0cnVjdCBQU3RhY2sgKnN0LCBzdHJ1Y3QgQkNTdGF0ZSAqYmNzKQogewogCWJjcy0+Y2hhbm5lbCA9IHN0LT5sMS5iYzsKQEAgLTU1MSw3ICs1NTEsNyBAQAogCXJldHVybiAoMCk7CiB9CiAKLXZvaWQgX19pbml0CitzdGF0aWMgdm9pZCBfX2luaXQKIGluaXRfc2VuZChzdHJ1Y3QgQkNTdGF0ZSAqYmNzKQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKaW5kZXggYzJkYjUyNi4uODMzN2IwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCkBAIC03MCw3ICs3MCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogZnJlZSBoYXJkd2FyZSByZXNvdXJjZXMgdXNlZCBieSBkcml2ZXIgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19oZmNwY2koc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCXByaW50ayhLRVJOX0lORk8gIkhpU2F4OiByZWxlYXNlIGhmY3BjaSBhdCAlcFxuIiwKQEAgLTM5NCw3ICszOTQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBjaGVjayBmb3IgdHJhbnNwYXJlbnQgcmVjZWl2ZSBkYXRhIGFuZCByZWFkIG1heCBvbmUgdGhyZXNob2xkIHNpemUgaWYgYXZhaWwgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50CitzdGF0aWMgaW50CiBoZmNwY2lfZW1wdHlfZmlmb190cmFucyhzdHJ1Y3QgQkNTdGF0ZSAqYmNzLCBiemZpZm9fdHlwZSAqIGJ6LCB1X2NoYXIgKiBiZGF0YSkKIHsKIAl1bnNpZ25lZCBzaG9ydCAqejFyLCAqejJyOwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIEItY2hhbm5lbCBtYWluIHJlY2VpdmUgcm91dGluZSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCitzdGF0aWMgdm9pZAogbWFpbl9yZWNfaGZjcGNpKHN0cnVjdCBCQ1N0YXRlICpiY3MpCiB7CiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gYmNzLT5jczsKQEAgLTEyNDQsNyArMTI0NCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBjYWxsZWQgZHVyaW5nIGluaXQgc2V0dGluZyBsMSBzdGFjayBwb2ludGVyICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCitzdGF0aWMgdm9pZAogc2V0c3RhY2tfaGZjcGNpKHN0cnVjdCBQU3RhY2sgKnN0LCBzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJc3QtPmwxLmwxaHcgPSBIRkNQQ0lfbDFodzsKQEAgLTEyNjgsNyArMTI2OCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogYWN0aXZhdGUvZGVhY3RpdmF0ZSBoYXJkd2FyZSBmb3Igc2VsZWN0ZWQgY2hhbm5lbHMgYW5kIG1vZGUgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCitzdGF0aWMgdm9pZAogbW9kZV9oZmNwY2koc3RydWN0IEJDU3RhdGUgKmJjcywgaW50IG1vZGUsIGludCBiYykKIHsKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBiY3MtPmNzOwpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGNhbGxlZCBmb3IgY2FyZCBpbml0IG1lc3NhZ2UgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgX19pbml0CitzdGF0aWMgdm9pZCBfX2luaXQKIGluaXRoZmNwY2koc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWNzLT5iY3NbMF0uQkNfU2V0U3RhY2sgPSBzZXRzdGFja18yYjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5oCmluZGV4IDRkZjAzNmVkLi45ZWYyOTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmgKQEAgLTIzMiw1ICsyMzIsNCBAQAogI2RlZmluZSBSZWFkX2hmYyhhLGIpICgqKCgodV9jaGFyICopYS0+aHcuaGZjcGNpLnBjaV9pbykrYikpCiAKIGV4dGVybiB2b2lkIG1haW5faXJxX2hjcGNpKHN0cnVjdCBCQ1N0YXRlICpiY3MpOwotZXh0ZXJuIHZvaWQgaW5pdGhmY3BjaShzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwogZXh0ZXJuIHZvaWQgcmVsZWFzZWhmY3BjaShzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5jCmluZGV4IGEzMDdmY2IuLmYyN2MxNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmMKQEAgLTMwOCw3ICszMDgsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGZyZWUgaGFyZHdhcmUgcmVzb3VyY2VzIHVzZWQgYnkgZHJpdmVyICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAorc3RhdGljIHZvaWQKIHJlbGVhc2VfaW9faGZjc3goc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWNzLT5ody5oZmNzeC5pbnRfbTIgPSAwOwkvKiBpbnRlcnJ1cHQgb3V0cHV0IG9mZiAhICovCkBAIC00NzIsNyArNDcyLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogQi1jaGFubmVsIG1haW4gcmVjZWl2ZSByb3V0aW5lICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBtYWluX3JlY19oZmNzeChzdHJ1Y3QgQkNTdGF0ZSAqYmNzKQogewogCXN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcyA9IGJjcy0+Y3M7CkBAIC0xMDAzLDcgKzEwMDMsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogY2FsbGVkIGR1cmluZyBpbml0IHNldHRpbmcgbDEgc3RhY2sgcG9pbnRlciAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAorc3RhdGljIHZvaWQKIHNldHN0YWNrX2hmY3N4KHN0cnVjdCBQU3RhY2sgKnN0LCBzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJc3QtPmwxLmwxaHcgPSBIRkNTWF9sMWh3OwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBhY3RpdmF0ZS9kZWFjdGl2YXRlIGhhcmR3YXJlIGZvciBzZWxlY3RlZCBjaGFubmVscyBhbmQgbW9kZSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBtb2RlX2hmY3N4KHN0cnVjdCBCQ1N0YXRlICpiY3MsIGludCBtb2RlLCBpbnQgYmMpCiB7CiAJc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gYmNzLT5jczsKQEAgLTEzMjgsNyArMTMyOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBjYWxsZWQgZm9yIGNhcmQgaW5pdCBtZXNzYWdlICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIF9fZGV2aW5pdAorc3RhdGljIHZvaWQgX19kZXZpbml0CiBpbml0aGZjc3goc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWNzLT5zZXRzdGFja19kID0gc2V0c3RhY2tfaGZjc3g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3N4LmgKaW5kZXggMTJmNTQxNS4uNjc5MmYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19zeC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfc3guaApAQCAtMTkzLDUgKzE5Myw0IEBACiB9OwogCiBleHRlcm4gdm9pZCBtYWluX2lycV9oZmNzeChzdHJ1Y3QgQkNTdGF0ZSAqYmNzKTsKLWV4dGVybiB2b2lkIGluaXRoZmNzeChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwogZXh0ZXJuIHZvaWQgcmVsZWFzZWhmY3N4KHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuYwppbmRleCBmZmQ3NGI4Li5lMmMzYWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmMKQEAgLTYwLDcgKzYwLDcgQEAKICNpbmNsdWRlICJoaXNheF9kZWJ1Zy5oIgogc3RhdGljIHVfaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCB1aW50LCAwKTsKLWludCBoZmNfZGVidWc7CitzdGF0aWMgaW50IGhmY19kZWJ1ZzsKICNlbmRpZgogCiAKQEAgLTg1LDcgKzg1LDcgQEAKICogICBWZW5kb3JJRCwgUHJvZHVjdElELCBEZXZpY2VuYW1lLCBMRURfU0NIRU1FLAogKiAgIExFRCdzIEJpdE1hc2sgaW4gSEZDVVNCX1BfREFUQSBSZWdpc3RlciA6IExFRF9VU0IsIExFRF9TMCwgTEVEX0IxLCBMRURfQjIKICovCi12ZW5kb3JfZGF0YSB2ZGF0YVtdID0geworc3RhdGljIHZlbmRvcl9kYXRhIHZkYXRhW10gPSB7CiAJLyogQ29sb2duZUNoaXAgRXZhbCBUQSAqLwogCXsweDA5NTksIDB4MmJkMCwgIklTRE4gVVNCIFRBIChDb2xvZ25lIENoaXAgSEZDLVMgVVNCIGJhc2VkKSIsCiAJIExFRF9PRkYsIHs0LCAwLCAyLCAxfQpAQCAtMTEzNyw3ICsxMTM3LDcgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBoZmNfdXNiX2wybDEoc3RydWN0IGhpc2F4X2lmICpteV9oaXNheF9pZiwgaW50IHByLCB2b2lkICphcmcpCiB7CiAJdXNiX2ZpZm8gKmZpZm8gPSBteV9oaXNheF9pZi0+cHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5oCmluZGV4IGIxNzE2MDAuLjI4MGRkMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmgKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuaApAQCAtMTY4LDcgKzE2OCw3IEBACiAqIDMgZW50cmllcyBhcmUgdGhlIGNvbmZpZ3VyYXRpb24gbnVtYmVyLCB0aGUgbWluaW11bSBpbnRlcnZhbCBmb3IKICogSW50ZXJydXB0IGVuZHBvaW50cyAmIGJvb2xlYW4gaWYgRS1jaGFubmVsIGxvZ2dpbmcgcG9zc2libGUKICovCi1pbnQgdmFsaWRjb25mW11bMTldID0geworc3RhdGljIGludCB2YWxpZGNvbmZbXVsxOV0gPSB7CiAJLy8gSU5UIGluLCBJU08gb3V0IGNvbmZpZwogCXtFUF9OVUwsIEVQX0lOVCwgRVBfTlVMLCBFUF9JTlQsIEVQX05VTCwgRVBfSU5ULCBFUF9OT1AsIEVQX0lOVCwKIAkgRVBfSVNPLCBFUF9OVUwsIEVQX0lTTywgRVBfTlVMLCBFUF9JU08sIEVQX05VTCwgRVBfTlVMLCBFUF9OVUwsCkBAIC0xODcsNyArMTg3LDcgQEAKIH07CiAKIC8vIHN0cmluZyBkZXNjcmlwdGlvbiBvZiBjaG9zZW4gY29uZmlnCi1jaGFyICpjb25mX3N0cltdID0geworc3RhdGljIGNoYXIgKmNvbmZfc3RyW10gPSB7CiAJIjQgSW50ZXJydXB0IElOICsgMyBJc29jaHJvbiBPVVQiLAogCSIzIEludGVycnVwdCBJTiArIDMgSXNvY2hyb24gT1VUIiwKIAkiNCBJc29jaHJvbiBJTiArIDMgSXNvY2hyb24gT1VUIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNzY2FyZC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKaW5kZXggNmZjNTVmZS4uODZhYjFjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMKQEAgLTUyLDcgKzUyLDcgQEAKICovCiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiByZWxlYXNlX2lvX2hmY3Moc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCXJlbGVhc2UyYmRzMChjcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCmluZGV4IGRjNTc5MTcuLjE3Y2Y3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC0xMjcxLDcgKzEyNzEsNiBAQAogdm9pZCBpbml0X2Jjc3RhdGUoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBpbnQgYmMpOwogCiB2b2lkIHNldHN0YWNrX0hpU2F4KHN0cnVjdCBQU3RhY2sgKnN0LCBzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwotdW5zaWduZWQgaW50IHJhbmRvbV9yaSh2b2lkKTsKIHZvaWQgSGlTYXhfYWRkbGlzdChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqc3AsIHN0cnVjdCBQU3RhY2sgKnN0KTsKIHZvaWQgSGlTYXhfcm1saXN0KHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpzcCwgc3RydWN0IFBTdGFjayAqc3QpOwogCkBAIC0xMzE1LDE1ICsxMzE0LDExIEBACiB2b2lkIExvZ0ZyYW1lKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgdV9jaGFyICogcCwgaW50IHNpemUpOwogdm9pZCBkbG9nZnJhbWUoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGlyKTsKIHZvaWQgaWVjcHkodV9jaGFyICogZGVzdCwgdV9jaGFyICogaWVzdGFydCwgaW50IGllb2Zmc2V0KTsKLSNpZmRlZiBJU0ROX0NISVBfSVNBQwotdm9pZCBzZXRzdGFja19pc2FjKHN0cnVjdCBQU3RhY2sgKnN0LCBzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwotI2VuZGlmCS8qIElTRE5fQ0hJUF9JU0FDICovCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZGVmaW5lIEhaREVMQVkoamlmZnMpIHtpbnQgdG91dCA9IGppZmZzOyB3aGlsZSAodG91dC0tKSB1ZGVsYXkoMTAwMDAwMC9IWik7fQogCiBpbnQgbGxfcnVuKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgaW50IGFkZGZlYXR1cmVzKTsKLXZvaWQgbGxfc3RvcChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwogaW50IENhbGxjTmV3KHZvaWQpOwogdm9pZCBDYWxsY0ZyZWUodm9pZCk7CiBpbnQgQ2FsbGNOZXdDaGFuKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaHNjeC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hzY3guYwppbmRleCA1YmJiZTNlLi42NmRiYWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaHNjeC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oc2N4LmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGNsb3NlX2hzY3hzdGF0ZShzdHJ1Y3QgQkNTdGF0ZSAqYmNzKQogewogCW1vZGVoc2N4KGJjcywgMCwgYmNzLT5jaGFubmVsKTsKQEAgLTIwMyw3ICsyMDMsNyBAQAogCXJldHVybiAoMCk7CiB9CiAKLWludAorc3RhdGljIGludAogc2V0c3RhY2tfaHNjeChzdHJ1Y3QgUFN0YWNrICpzdCwgc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAliY3MtPmNoYW5uZWwgPSBzdC0+bDEuYmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaWNjLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaWNjLmMKaW5kZXggZGNmMzFmOC4uYjRjYTU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2ljYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pY2MuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAjZW5kaWYKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGljY19lbXB0eV9maWZvKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgaW50IGNvdW50KQogewogCXVfY2hhciAqcHRyOwpAQCAtNTYzLDEzICs1NjMsMTMgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBzZXRzdGFja19pY2Moc3RydWN0IFBTdGFjayAqc3QsIHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKIAlzdC0+bDEubDFodyA9IElDQ19sMWh3OwogfQogCi12b2lkIAorc3RhdGljIHZvaWQKIERDX0Nsb3NlX2ljYyhzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpIHsKIAlpZiAoY3MtPmRjLmljYy5tb25fcngpIHsKIAkJa2ZyZWUoY3MtPmRjLmljYy5tb25fcngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lwYWN4LmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXBhY3guYwppbmRleCA2NDg1ZTIzLi5lZmJhMmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXBhY3guYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXBhY3guYwpAQCAtMzYsOCArMzYsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIGNpY19pbnQoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKTsKIHN0YXRpYyB2b2lkIGRjaF9sMmwxKHN0cnVjdCBQU3RhY2sgKnN0LCBpbnQgcHIsIHZvaWQgKmFyZyk7CiBzdGF0aWMgdm9pZCBkYnVzeV90aW1lcl9oYW5kbGVyKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcyk7Ci1zdGF0aWMgdm9pZCBpcGFjeF9uZXdfcGgoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKTsKLXN0YXRpYyB2b2lkIGRjaF9iaChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwogc3RhdGljIHZvaWQgZGNoX2VtcHR5X2ZpZm8oc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBpbnQgY291bnQpOwogc3RhdGljIHZvaWQgZGNoX2ZpbGxfZmlmbyhzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwogc3RhdGljIGlubGluZSB2b2lkIGRjaF9pbnQoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKTsKQEAgLTIzMiw4MSArMjMwLDYgQEAKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBMMSBzdGF0ZSBtYWNoaW5lIGludGVybWVkaWF0ZSBsYXllciB0byBpc2RubDEgbW9kdWxlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB2b2lkCi1pcGFjeF9uZXdfcGgoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQotewotCXN3aXRjaCAoY3MtPmRjLmlzYWMucGhfc3RhdGUpIHsKLQkJY2FzZSAoSVBBQ1hfSU5EX1JFUyk6Ci0JCQlwaF9jb21tYW5kKGNzLCBJUEFDWF9DTURfREkpOwotCQkJbDFfbXNnKGNzLCBIV19SRVNFVCB8IElORElDQVRJT04sIE5VTEwpOwotCQkJYnJlYWs7Ci0gICAgICAKLQkJY2FzZSAoSVBBQ1hfSU5EX0RDKToKLQkJCWwxX21zZyhjcywgSFdfREVBQ1RJVkFURSB8IENPTkZJUk0sIE5VTEwpOwotCQkJYnJlYWs7Ci0gICAgICAKLQkJY2FzZSAoSVBBQ1hfSU5EX0RSKToKLQkJCWwxX21zZyhjcywgSFdfREVBQ1RJVkFURSB8IElORElDQVRJT04sIE5VTEwpOwotCQkJYnJlYWs7Ci0gICAgICAKLQkJY2FzZSAoSVBBQ1hfSU5EX1BVKToKLQkJCWwxX21zZyhjcywgSFdfUE9XRVJVUCB8IENPTkZJUk0sIE5VTEwpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSAoSVBBQ1hfSU5EX1JTWSk6Ci0JCQlsMV9tc2coY3MsIEhXX1JTWU5DIHwgSU5ESUNBVElPTiwgTlVMTCk7Ci0JCQlicmVhazsKLQotCQljYXNlIChJUEFDWF9JTkRfQVIpOgotCQkJbDFfbXNnKGNzLCBIV19JTkZPMiB8IElORElDQVRJT04sIE5VTEwpOwotCQkJYnJlYWs7Ci0gICAgICAKLQkJY2FzZSAoSVBBQ1hfSU5EX0FJOCk6Ci0JCQlsMV9tc2coY3MsIEhXX0lORk80X1A4IHwgSU5ESUNBVElPTiwgTlVMTCk7Ci0JCQlicmVhazsKLSAgICAgIAotCQljYXNlIChJUEFDWF9JTkRfQUkxMCk6Ci0JCQlsMV9tc2coY3MsIEhXX0lORk80X1AxMCB8IElORElDQVRJT04sIE5VTEwpOwotCQkJYnJlYWs7Ci0gICAgICAKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCX0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBib3R0b20gaGFsZiBoYW5kbGVyIGZvciBEIGNoYW5uZWwKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RhdGljIHZvaWQKLWRjaF9iaChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCi17Ci0Jc3RydWN0IFBTdGFjayAqc3Q7Ci0JCi0JaWYgKCFjcykgcmV0dXJuOwotICAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERfQ0xFQVJCVVNZLCAmY3MtPmV2ZW50KSkgewotCQlpZiAoY3MtPmRlYnVnKSBkZWJ1Z2wxKGNzLCAiRC1DaGFubmVsIEJ1c3kgY2xlYXJlZCIpOwotCQlmb3IgKHN0ID0gY3MtPnN0bGlzdDsgc3Q7IHN0ID0gc3QtPm5leHQpIHsKLQkJCXN0LT5sMS5sMWwyKHN0LCBQSF9QQVVTRSB8IENPTkZJUk0sIE5VTEwpOwotCQl9Ci0JfQotICAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERfUkNWQlVGUkVBRFksICZjcy0+ZXZlbnQpKSB7Ci0JCURDaGFubmVsX3Byb2NfcmN2KGNzKTsKLSAgfSAgCi0gIAotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRF9YTVRCVUZSRUFEWSwgJmNzLT5ldmVudCkpIHsKLQkJRENoYW5uZWxfcHJvY194bXQoY3MpOwotICB9ICAKLSAgCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChEX0wxU1RBVEVDSEFOR0UsICZjcy0+ZXZlbnQpKSB7Ci0gICAgaXBhY3hfbmV3X3BoKGNzKTsKLSAgfSAgCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRmlsbCBidWZmZXIgZnJvbSByZWNlaXZlIEZJRk8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHZvaWQgCkBAIC05OTEsMTQgKzkxNCw1IEBACiAJfQogfQogCi0KLXZvaWQgX19kZXZpbml0Ci1zZXR1cF9pcGFjeChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCi17Ci0JSU5JVF9XT1JLKCZjcy0+dHF1ZXVlLCAodm9pZCAqKSh2b2lkICopIGRjaF9iaCwgY3MpOwotCWNzLT5kYnVzeXRpbWVyLmZ1bmN0aW9uID0gKHZvaWQgKikgZGJ1c3lfdGltZXJfaGFuZGxlcjsKLQljcy0+ZGJ1c3l0aW1lci5kYXRhID0gKGxvbmcpIGNzOwotCWluaXRfdGltZXIoJmNzLT5kYnVzeXRpbWVyKTsKLX0KIC8vLS0tLS0tLS0tLS0tLS0tLS0gZW5kIG9mIGZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzYWMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2FjLmMKaW5kZXggMjBiOTQ5OS4uODVlMDYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzYWMuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhYy5jCkBAIC0xMTIsNyArMTEyLDcgQEAKICNlbmRpZgogfQogCi12b2lkCitzdGF0aWMgdm9pZAogaXNhY19lbXB0eV9maWZvKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgaW50IGNvdW50KQogewogCXVfY2hhciAqcHRyOwpAQCAtNTYzLDEzICs1NjMsMTMgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBzZXRzdGFja19pc2FjKHN0cnVjdCBQU3RhY2sgKnN0LCBzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJc3QtPmwxLmwxaHcgPSBJU0FDX2wxaHc7CiB9CiAKLXZvaWQgCitzdGF0aWMgdm9pZAogRENfQ2xvc2VfaXNhYyhzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpIHsKIAlpZiAoY3MtPmRjLmlzYWMubW9uX3J4KSB7CiAJCWtmcmVlKGNzLT5kYy5pc2FjLm1vbl9yeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzYXIuYwppbmRleCBlZTA4MTMyMS4uNjQyYTg3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzYXIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhci5jCkBAIC0yMSwxMyArMjEsMTMgQEAKICNkZWZpbmUgRVRYCTB4MDMKIAogI2RlZmluZSBGQVhNT0RDTlQJMTMKLWNvbnN0CXVfY2hhcglmYXhtb2R1bGF0aW9uW10gPSB7MywyNCw0OCw3Miw3Myw3NCw5Niw5Nyw5OCwxMjEsMTIyLDE0NSwxNDZ9Oworc3RhdGljIGNvbnN0CXVfY2hhcglmYXhtb2R1bGF0aW9uW10gPSB7MywyNCw0OCw3Miw3Myw3NCw5Niw5Nyw5OCwxMjEsMTIyLDE0NSwxNDZ9Owogc3RhdGljCXVfaW50CW1vZG1hc2sgPSAweDFmZmY7CiBzdGF0aWMJaW50CWZybV9leHRyYV9kZWxheSA9IDI7CiBzdGF0aWMJaW50CXBhcmFfVE9BID0gNjsKLWNvbnN0ICAgdV9jaGFyICAqRkMxX0NNRFtdID0geyJGQUUiLCAiRlRTIiwgIkZSUyIsICJGVE0iLCAiRlJNIiwgIkZUSCIsICJGUkgiLCAiQ1RSTCIgfTsKK3N0YXRpYyBjb25zdCAgIHVfY2hhciAgKkZDMV9DTURbXSA9IHsiRkFFIiwgIkZUUyIsICJGUlMiLCAiRlRNIiwgIkZSTSIsICJGVEgiLCAiRlJIIiwgIkNUUkwiIH07CiAKLXZvaWQgaXNhcl9zZXR1cChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOworc3RhdGljIHZvaWQgaXNhcl9zZXR1cChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwogc3RhdGljIHZvaWQgaXNhcl9wdW1wX2NtZChzdHJ1Y3QgQkNTdGF0ZSAqYmNzLCB1X2NoYXIgY21kLCB1X2NoYXIgcGFyYSk7CiBzdGF0aWMgdm9pZCBsbF9kZWxpdmVyX2ZheHN0YXQoc3RydWN0IEJDU3RhdGUgKmJjcywgdV9jaGFyIHN0YXR1cyk7CiAKQEAgLTQ1LDcgKzQ1LDcgQEAKIH0KIAogCi1pbnQKK3N0YXRpYyBpbnQKIHNlbmRtc2coc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCB1X2NoYXIgaGlzLCB1X2NoYXIgY3JlZywgdV9jaGFyIGxlbiwKIAl1X2NoYXIgKm1zZykKIHsKQEAgLTg1LDcgKzg1LDcgQEAKIH0KIAogLyogQ2FsbCBvbmx5IHdpdGggSVJRIGRpc2FibGVkICEhISAqLwotaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogcmN2X21ib3goc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBzdHJ1Y3QgaXNhcl9yZWcgKmlyZWcsIHVfY2hhciAqbXNnKQogewogCWludCBpOwpAQCAtMTE0LDcgKzExNCw3IEBACiB9CiAKIC8qIENhbGwgb25seSB3aXRoIElSUSBkaXNhYmxlZCAhISEgKi8KLWlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGdldF9pcnFfaW5mb3Moc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBzdHJ1Y3QgaXNhcl9yZWcgKmlyZWcpCiB7CiAJaXJlZy0+aWlzID0gY3MtPkJDX1JlYWRfUmVnKGNzLCAxLCBJU0FSX0lJUyk7CkBAIC0xMjcsNyArMTI3LDcgQEAKICNlbmRpZgogfQogCi1pbnQKK3N0YXRpYyBpbnQKIHdhaXRyZWNtc2coc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCB1X2NoYXIgKmxlbiwKIAl1X2NoYXIgKm1zZywgaW50IG1heGRlbGF5KQogewpAQCAtMTg1LDcgKzE4NSw3IEBACiAJcmV0dXJuKHZlcik7CiB9CiAKLWludAorc3RhdGljIGludAogaXNhcl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgdV9jaGFyIF9fdXNlciAqYnVmKQogewogCWludCByZXQsIHNpemUsIGNudCwgZGVidWc7CkBAIC03MzksNyArNzM5LDcgQEAKIAl9CiB9CiAKLWlubGluZQorc3RhdGljIGlubGluZQogc3RydWN0IEJDU3RhdGUgKnNlbF9iY3NfaXNhcihzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIHVfY2hhciBkcGF0aCkKIHsKIAlpZiAoKCFkcGF0aCkgfHwgKGRwYXRoID09IDMpKQpAQCAtNzUxLDcgKzc1MSw3IEBACiAJcmV0dXJuKE5VTEwpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogc2VuZF9mcmFtZXMoc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAlpZiAoYmNzLT50eF9za2IpIHsKQEAgLTgwNiw3ICs4MDYsNyBAQAogCX0KIH0KIAotaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogY2hlY2tfc2VuZChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIHVfY2hhciByZG0pCiB7CiAJc3RydWN0IEJDU3RhdGUgKmJjczsKQEAgLTgyOCwxMSArODI4LDEzIEBACiAJCiB9CiAKLWNvbnN0IGNoYXIgKmRtcmlsW10gPSB7Ik5PIFNQRUVEIiwgIjEyMDAvNzUiLCAiTk9ERUYyIiwgIjc1LzEyMDAiLCAiTk9ERUY0IiwKLQkJCSIzMDAiLCAiNjAwIiwgIjEyMDAiLCAiMjQwMCIsICI0ODAwIiwgIjcyMDAiLAotCQkJIjk2MDBudCIsICI5NjAwdCIsICIxMjAwMCIsICIxNDQwMCIsICJXUk9ORyJ9OwotY29uc3QgY2hhciAqZG1yaW1bXSA9IHsiTk8gTU9EIiwgIk5PIERFRiIsICJWMzIvVjMyYiIsICJWMjIiLCAiVjIxIiwKLQkJCSJCZWxsMTAzIiwgIlYyMyIsICJCZWxsMjAyIiwgIlYxNyIsICJWMjkiLCAiVjI3dGVyIn07CitzdGF0aWMgY29uc3QgY2hhciAqZG1yaWxbXSA9IHsiTk8gU1BFRUQiLCAiMTIwMC83NSIsICJOT0RFRjIiLCAiNzUvMTIwMCIsCisJCQkJIk5PREVGNCIsICIzMDAiLCAiNjAwIiwgIjEyMDAiLCAiMjQwMCIsCisJCQkJIjQ4MDAiLCAiNzIwMCIsICI5NjAwbnQiLCAiOTYwMHQiLCAiMTIwMDAiLAorCQkJCSIxNDQwMCIsICJXUk9ORyJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKmRtcmltW10gPSB7Ik5PIE1PRCIsICJOTyBERUYiLCAiVjMyL1YzMmIiLCAiVjIyIiwgIlYyMSIsCisJCQkJIkJlbGwxMDMiLCAiVjIzIiwgIkJlbGwyMDIiLCAiVjE3IiwgIlYyOSIsCisJCQkJIlYyN3RlciJ9OwogCiBzdGF0aWMgdm9pZAogaXNhcl9wdW1wX3N0YXR1c19yc3Aoc3RydWN0IEJDU3RhdGUgKmJjcywgc3RydWN0IGlzYXJfcmVnICppcmVnKSB7CkBAIC0xMzg4LDcgKzEzOTAsNyBAQAogCXVkZWxheSgxMDAwKTsKIH0KIAotaW50CitzdGF0aWMgaW50CiBtb2RlaXNhcihzdHJ1Y3QgQkNTdGF0ZSAqYmNzLCBpbnQgbW9kZSwgaW50IGJjKQogewogCXN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcyA9IGJjcy0+Y3M7CkBAIC0xNTYyLDcgKzE1NjQsNyBAQAogCQlzZW5kbXNnKGNzLCBkcHMgfCBJU0FSX0hJU19QVU1QQ1RSTCwgY3RybCwgbm9tLCAmcDEpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogaXNhcl9zZXR1cChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJdV9jaGFyIG1zZzsKQEAgLTE1ODIsNyArMTU4NCw3IEBACiAJfQogfQogCi12b2lkCitzdGF0aWMgdm9pZAogaXNhcl9sMmwxKHN0cnVjdCBQU3RhY2sgKnN0LCBpbnQgcHIsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgQkNTdGF0ZSAqYmNzID0gc3QtPmwxLmJjczsKQEAgLTE2ODEsNyArMTY4Myw3IEBACiAJfQogfQogCi12b2lkCitzdGF0aWMgdm9pZAogY2xvc2VfaXNhcnN0YXRlKHN0cnVjdCBCQ1N0YXRlICpiY3MpCiB7CiAJbW9kZWlzYXIoYmNzLCAwLCBiY3MtPmNoYW5uZWwpOwpAQCAtMTcwMyw3ICsxNzA1LDcgQEAKIAlkZWxfdGltZXIoJmJjcy0+aHcuaXNhci5mdGltZXIpOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIG9wZW5faXNhcnN0YXRlKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQkNfRkxHX0lOSVQsICZiY3MtPkZsYWcpKSB7CkBAIC0xNzI1LDcgKzE3MjcsNyBAQAogCXJldHVybiAoMCk7CiB9CiAKLWludAorc3RhdGljIGludAogc2V0c3RhY2tfaXNhcihzdHJ1Y3QgUFN0YWNrICpzdCwgc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAliY3MtPmNoYW5uZWwgPSBzdC0+bDEuYmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKaW5kZXggNGQwOGQyNy4uYWM4OTk1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJdmFfZW5kKGFyZ3MpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogTDFhY3RpdmF0ZWQoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCXN0cnVjdCBQU3RhY2sgKnN0OwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJfQogfQogCi12b2lkCitzdGF0aWMgdm9pZAogTDFkZWFjdGl2YXRlZChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJc3RydWN0IFBTdGFjayAqc3Q7CkBAIC0zNzAsNyArMzcwLDcgQEAKIAogI2lmZGVmIEwyRlJBTUVfREVCVUcJCS8qIHBzYSAqLwogCi1jaGFyICoKK3N0YXRpYyBjaGFyICoKIGwyY21kKHVfY2hhciBjbWQpCiB7CiAJc3dpdGNoIChjbWQgJiB+MHgxMCkgewpAQCAtNDA0LDcgKzQwNCw3IEBACiAKIHN0YXRpYyBjaGFyIHRtcGRlYlszMl07CiAKLWNoYXIgKgorc3RhdGljIGNoYXIgKgogbDJmcmFtZXModV9jaGFyICogcHRyKQogewogCXN3aXRjaCAocHRyWzJdICYgfjB4MTApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYwppbmRleCBkMzExYjVmLi45MDIyNTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlyZXR1cm4gY250OwogfQogCi1pbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSB2b2lkCiBmcmVld2luKHN0cnVjdCBQU3RhY2sgKnN0KQogewogCWZyZWV3aW4xKCZzdC0+bDIpOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImlzZGwyIGZyZWVkICVkIHNrYnVmZnMgaW4gcmVsZWFzZVxuIiwgY250KTsKIH0KIAotaW5saW5lIHVuc2lnbmVkIGludAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIGNhbnNlbmQoc3RydWN0IFBTdGFjayAqc3QpCiB7CiAJdW5zaWduZWQgaW50IHAxOwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJcmV0dXJuICgocDEgPCBzdC0+bDIud2luZG93KSAmJiAhdGVzdF9iaXQoRkxHX1BFRVJfQlVTWSwgJnN0LT5sMi5mbGFnKSk7CiB9CiAKLWlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGNsZWFyX2V4Y2VwdGlvbihzdHJ1Y3QgTGF5ZXIyICpsMikKIHsKIAl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0FDS19QRU5ELCAmbDItPmZsYWcpOwpAQCAtMTc4LDcgKzE3OCw3IEBACiAJY2xlYXJfcGVlcl9idXN5KGwyKTsKIH0KIAotaW5saW5lIGludAorc3RhdGljIGlubGluZSBpbnQKIGwyaGVhZGVyc2l6ZShzdHJ1Y3QgTGF5ZXIyICpsMiwgaW50IHVpKQogewogCXJldHVybiAoKCh0ZXN0X2JpdChGTEdfTU9EMTI4LCAmbDItPmZsYWcpICYmICghdWkpKSA/IDIgOiAxKSArCkBAIC0yMjMsNDAgKzIyMywzMSBAQAogCiAjZGVmaW5lIGVucXVldWVfdWkoYSwgYikgZW5xdWV1ZV9zdXBlcihhLCBiKQogCi1pbmxpbmUgaW50CitzdGF0aWMgaW5saW5lIGludAogSXNVSSh1X2NoYXIgKiBkYXRhKQogewogCXJldHVybiAoKGRhdGFbMF0gJiAweGVmKSA9PSBVSSk7CiB9CiAKLWlubGluZSBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBJc1VBKHVfY2hhciAqIGRhdGEpCiB7CiAJcmV0dXJuICgoZGF0YVswXSAmIDB4ZWYpID09IFVBKTsKIH0KIAotaW5saW5lIGludAorc3RhdGljIGlubGluZSBpbnQKIElzRE0odV9jaGFyICogZGF0YSkKIHsKIAlyZXR1cm4gKChkYXRhWzBdICYgMHhlZikgPT0gRE0pOwogfQogCi1pbmxpbmUgaW50CitzdGF0aWMgaW5saW5lIGludAogSXNESVNDKHVfY2hhciAqIGRhdGEpCiB7CiAJcmV0dXJuICgoZGF0YVswXSAmIDB4ZWYpID09IERJU0MpOwogfQogCi1pbmxpbmUgaW50Ci1Jc1JSKHVfY2hhciAqIGRhdGEsIHN0cnVjdCBQU3RhY2sgKnN0KQotewotCWlmICh0ZXN0X2JpdChGTEdfTU9EMTI4LCAmc3QtPmwyLmZsYWcpKQotCQlyZXR1cm4gKGRhdGFbMF0gPT0gUlIpOwotCWVsc2UKLQkJcmV0dXJuICgoZGF0YVswXSAmIDB4ZikgPT0gMSk7Ci19Ci0KLWlubGluZSBpbnQKK3N0YXRpYyBpbmxpbmUgaW50CiBJc1NGcmFtZSh1X2NoYXIgKiBkYXRhLCBzdHJ1Y3QgUFN0YWNrICpzdCkKIHsKIAlyZWdpc3RlciB1X2NoYXIgZCA9ICpkYXRhOwpAQCAtMjY2LDcgKzI1Nyw3IEBACiAJcmV0dXJuKCgoZCAmIDB4ZjMpID09IDEpICYmICgoZCAmIDB4MGMpICE9IDB4MGMpKTsKIH0KIAotaW5saW5lIGludAorc3RhdGljIGlubGluZSBpbnQKIElzU0FCTUUodV9jaGFyICogZGF0YSwgc3RydWN0IFBTdGFjayAqc3QpCiB7CiAJdV9jaGFyIGQgPSBkYXRhWzBdICYgfjB4MTA7CkBAIC0yNzQsMjUgKzI2NSwyNSBAQAogCXJldHVybiAodGVzdF9iaXQoRkxHX01PRDEyOCwgJnN0LT5sMi5mbGFnKSA/IGQgPT0gU0FCTUUgOiBkID09IFNBQk0pOwogfQogCi1pbmxpbmUgaW50CitzdGF0aWMgaW5saW5lIGludAogSXNSRUoodV9jaGFyICogZGF0YSwgc3RydWN0IFBTdGFjayAqc3QpCiB7CiAJcmV0dXJuICh0ZXN0X2JpdChGTEdfTU9EMTI4LCAmc3QtPmwyLmZsYWcpID8gZGF0YVswXSA9PSBSRUogOiAoZGF0YVswXSAmIDB4ZikgPT0gUkVKKTsKIH0KIAotaW5saW5lIGludAorc3RhdGljIGlubGluZSBpbnQKIElzRlJNUih1X2NoYXIgKiBkYXRhKQogewogCXJldHVybiAoKGRhdGFbMF0gJiAweGVmKSA9PSBGUk1SKTsKIH0KIAotaW5saW5lIGludAorc3RhdGljIGlubGluZSBpbnQKIElzUk5SKHVfY2hhciAqIGRhdGEsIHN0cnVjdCBQU3RhY2sgKnN0KQogewogCXJldHVybiAodGVzdF9iaXQoRkxHX01PRDEyOCwgJnN0LT5sMi5mbGFnKSA/IGRhdGFbMF0gPT0gUk5SIDogKGRhdGFbMF0gJiAweGYpID09IFJOUik7CiB9CiAKLWludAorc3RhdGljIGludAogaWZyYW1lX2Vycm9yKHN0cnVjdCBQU3RhY2sgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBpID0gbDJhZGRyc2l6ZSgmc3QtPmwyKSArICh0ZXN0X2JpdChGTEdfTU9EMTI4LCAmc3QtPmwyLmZsYWcpID8gMiA6IDEpOwpAQCAtMzE1LDcgKzMwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludAorc3RhdGljIGludAogc3VwZXJfZXJyb3Ioc3RydWN0IFBTdGFjayAqc3QsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKHNrYi0+bGVuICE9IGwyYWRkcnNpemUoJnN0LT5sMikgKwpAQCAtMzI1LDcgKzMxNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludAorc3RhdGljIGludAogdW5udW1fZXJyb3Ioc3RydWN0IFBTdGFjayAqc3QsIHN0cnVjdCBza19idWZmICpza2IsIGludCB3YW50cnNwKQogewogCWludCByc3AgPSAoKnNrYi0+ZGF0YSAmIDB4MikgPj4gMTsKQEAgLTM0MSw3ICszMzIsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIFVJX2Vycm9yKHN0cnVjdCBQU3RhY2sgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByc3AgPSAqc2tiLT5kYXRhICYgMHgyOwpAQCAtMzU3LDcgKzM0OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludAorc3RhdGljIGludAogRlJNUl9lcnJvcihzdHJ1Y3QgUFN0YWNrICpzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgaGVhZGVycyA9IGwyYWRkcnNpemUoJnN0LT5sMikgKyAxOwpAQCAtNDQ0LDUxICs0MzUsNDQgQEAKIAllbnF1ZXVlX3N1cGVyKHN0LCBza2IpOwogfQogCi1pbmxpbmUgdV9jaGFyCitzdGF0aWMgaW5saW5lIHVfY2hhcgogZ2V0X1BvbGxGbGFnKHN0cnVjdCBQU3RhY2sgKiBzdCwgc3RydWN0IHNrX2J1ZmYgKiBza2IpCiB7CiAJcmV0dXJuIChza2ItPmRhdGFbbDJhZGRyc2l6ZSgmKHN0LT5sMikpXSAmIDB4MTApOwogfQogCi1pbmxpbmUgdm9pZAotRnJlZVNrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWRldl9rZnJlZV9za2Ioc2tiKTsKLX0KLQotCi1pbmxpbmUgdV9jaGFyCitzdGF0aWMgaW5saW5lIHVfY2hhcgogZ2V0X1BvbGxGbGFnRnJlZShzdHJ1Y3QgUFN0YWNrICpzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1X2NoYXIgUEY7CiAKIAlQRiA9IGdldF9Qb2xsRmxhZyhzdCwgc2tiKTsKLQlGcmVlU2tiKHNrYik7CisJZGV2X2tmcmVlX3NrYihza2IpOwogCXJldHVybiAoUEYpOwogfQogCi1pbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSB2b2lkCiBzdGFydF90MjAwKHN0cnVjdCBQU3RhY2sgKnN0LCBpbnQgaSkKIHsKIAlGc21BZGRUaW1lcigmc3QtPmwyLnQyMDAsIHN0LT5sMi5UMjAwLCBFVl9MMl9UMjAwLCBOVUxMLCBpKTsKIAl0ZXN0X2FuZF9zZXRfYml0KEZMR19UMjAwX1JVTiwgJnN0LT5sMi5mbGFnKTsKIH0KIAotaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogcmVzdGFydF90MjAwKHN0cnVjdCBQU3RhY2sgKnN0LCBpbnQgaSkKIHsKIAlGc21SZXN0YXJ0VGltZXIoJnN0LT5sMi50MjAwLCBzdC0+bDIuVDIwMCwgRVZfTDJfVDIwMCwgTlVMTCwgaSk7CiAJdGVzdF9hbmRfc2V0X2JpdChGTEdfVDIwMF9SVU4sICZzdC0+bDIuZmxhZyk7CiB9CiAKLWlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIHN0b3BfdDIwMChzdHJ1Y3QgUFN0YWNrICpzdCwgaW50IGkpCiB7CiAJaWYodGVzdF9hbmRfY2xlYXJfYml0KEZMR19UMjAwX1JVTiwgJnN0LT5sMi5mbGFnKSkKIAkJRnNtRGVsVGltZXIoJnN0LT5sMi50MjAwLCBpKTsKIH0KIAotaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogc3Q1X2RsX3JlbGVhc2VfbDJsMyhzdHJ1Y3QgUFN0YWNrICpzdCkKIHsKIAkJaW50IHByOwpAQCAtNTAxLDcgKzQ4NSw3IEBACiAJCXN0LT5sMi5sMmwzKHN0LCBwciwgTlVMTCk7CiB9CiAKLWlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGxhcGJfZGxfcmVsZWFzZV9sMmwzKHN0cnVjdCBQU3RhY2sgKnN0LCBpbnQgZikKIHsKIAkJaWYgKHRlc3RfYml0KEZMR19MQVBCLCAmc3QtPmwyLmZsYWcpKQpAQCAtODAyLDcgKzc4Niw3IEBACiAJCWwyX21kbF9lcnJvcl91YShmaSwgZXZlbnQsIGFyZyk7CiAJCXJldHVybjsKIAl9Ci0JRnJlZVNrYihza2IpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX1BFTkRfUkVMLCAmc3QtPmwyLmZsYWcpKQogCQlsMl9kaXNjb25uZWN0KGZpLCBldmVudCwgYXJnKTsKQEAgLTg0MCw3ICs4MjQsNyBAQAogCQlsMl9tZGxfZXJyb3JfdWEoZmksIGV2ZW50LCBhcmcpOwogCQlyZXR1cm47CiAJfQotCUZyZWVTa2Ioc2tiKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKIAlzdG9wX3QyMDAoc3QsIDYpOwogCWxhcGJfZGxfcmVsZWFzZV9sMmwzKHN0LCBDT05GSVJNKTsKQEAgLTg4OSw3ICs4NzMsNyBAQAogCX0KIH0KIAotaW5saW5lIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogZW5xdWlyeV9jcihzdHJ1Y3QgUFN0YWNrICpzdCwgdV9jaGFyIHR5cCwgdV9jaGFyIGNyLCB1X2NoYXIgcGYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTkxMiw3ICs4OTYsNyBAQAogCWVucXVldWVfc3VwZXIoc3QsIHNrYik7CiB9CiAKLWlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIGVucXVpcnlfcmVzcG9uc2Uoc3RydWN0IFBTdGFjayAqc3QpCiB7CiAJaWYgKHRlc3RfYml0KEZMR19PV05fQlVTWSwgJnN0LT5sMi5mbGFnKSkKQEAgLTkyMiw3ICs5MDYsNyBAQAogCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNLX1BFTkQsICZzdC0+bDIuZmxhZyk7CiB9CiAKLWlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIHZvaWQKIHRyYW5zbWl0X2VucXVpcnkoc3RydWN0IFBTdGFjayAqc3QpCiB7CiAJaWYgKHRlc3RfYml0KEZMR19PV05fQlVTWSwgJnN0LT5sMi5mbGFnKSkKQEAgLTEwMDQsNyArOTg4LDcgQEAKIAkJUG9sbEZsYWcgPSAoc2tiLT5kYXRhWzBdICYgMHgxMCk7CiAJCW5yID0gKHNrYi0+ZGF0YVswXSA+PiA1KSAmIDB4NzsKIAl9Ci0JRnJlZVNrYihza2IpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCWlmIChQb2xsRmxhZykgewogCQlpZiAocnNwKQpAQCAtMTA0Nyw3ICsxMDMxLDcgQEAKIAlpZiAoIXRlc3RfYml0KEZMR19MM19JTklULCAmc3QtPmwyLmZsYWcpKQogCQlza2JfcXVldWVfdGFpbCgmc3QtPmwyLmlfcXVldWUsIHNrYik7CiAJZWxzZQotCQlGcmVlU2tiKHNrYik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEwOTMsNyArMTA3Nyw3IEBACiAJCW5yID0gKHNrYi0+ZGF0YVtpXSA+PiA1KSAmIDB4NzsKIAl9CiAJaWYgKHRlc3RfYml0KEZMR19PV05fQlVTWSwgJmwyLT5mbGFnKSkgewotCQlGcmVlU2tiKHNrYik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJaWYoUG9sbEZsYWcpIGVucXVpcnlfcmVzcG9uc2Uoc3QpOwogCX0gZWxzZSBpZiAobDItPnZyID09IG5zKSB7CiAJCShsMi0+dnIpKys7CkBAIC0xMTExLDcgKzEwOTUsNyBAQAogCQlzdC0+bDIubDJsMyhzdCwgRExfREFUQSB8IElORElDQVRJT04sIHNrYik7CiAJfSBlbHNlIHsKIAkJLyogbihzKSE9dihyKSAqLwotCQlGcmVlU2tiKHNrYik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxHX1JFSkVYQywgJmwyLT5mbGFnKSkgewogCQkJaWYgKFBvbGxGbGFnKQogCQkJCWVucXVpcnlfcmVzcG9uc2Uoc3QpOwpAQCAtMTMwOSw3ICsxMjkzLDcgQEAKIAkJc2tiID0gYWxsb2Nfc2tiKG9za2ItPmxlbiArIGksIEdGUF9BVE9NSUMpOwogCQltZW1jcHkoc2tiX3B1dChza2IsIGkpLCBoZWFkZXIsIGkpOwogCQltZW1jcHkoc2tiX3B1dChza2IsIG9za2ItPmxlbiksIG9za2ItPmRhdGEsIG9za2ItPmxlbik7Ci0JCUZyZWVTa2Iob3NrYik7CisJCWRldl9rZnJlZV9za2Iob3NrYik7CiAJfQogCXN0LT5sMi5sMmwxKHN0LCBQSF9QVUxMIHwgSU5ESUNBVElPTiwgc2tiKTsKIAl0ZXN0X2FuZF9jbGVhcl9iaXQoRkxHX0FDS19QRU5ELCAmc3QtPmwyLmZsYWcpOwpAQCAtMTM0OSw3ICsxMzMzLDcgQEAKIAkJUG9sbEZsYWcgPSAoc2tiLT5kYXRhWzBdICYgMHgxMCk7CiAJCW5yID0gKHNrYi0+ZGF0YVswXSA+PiA1KSAmIDB4NzsKIAl9Ci0JRnJlZVNrYihza2IpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCWlmIChyc3AgJiYgUG9sbEZsYWcpIHsKIAkJaWYgKGxlZ2FsbnIoc3QsIG5yKSkgewpAQCAtMTM5MSw3ICsxMzc1LDcgQEAKIAkJZXN0YWJsaXNobGluayhmaSk7CiAJCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfTDNfSU5JVCwgJnN0LT5sMi5mbGFnKTsKIAl9Ci0JRnJlZVNrYihza2IpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE2NTUsNyArMTYzOSw3IEBACiAJCQkJZGF0YXAgKz0gbGVuOwogCQkJZWxzZSB7CiAJCQkJRnNtRXZlbnQoJnN0LT5sMi5sMm0sIEVWX0wyX0ZSQU1FX0VSUk9SLCAodm9pZCAqKSAnTicpOwotCQkJCUZyZWVTa2Ioc2tiKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJaWYgKCEoKmRhdGFwICYgMSkpIHsJLyogSS1GcmFtZSAqLwpAQCAtMTY4NCwxNiArMTY2OCwxNiBAQAogCQkJCQlyZXQgPSBGc21FdmVudCgmc3QtPmwyLmwybSwgRVZfTDJfRlJNUiwgc2tiKTsKIAkJCX0gZWxzZSB7CiAJCQkJRnNtRXZlbnQoJnN0LT5sMi5sMm0sIEVWX0wyX0ZSQU1FX0VSUk9SLCAodm9pZCAqKSAnTCcpOwotCQkJCUZyZWVTa2Ioc2tiKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQkJcmV0ID0gMDsKIAkJCX0KIAkJCWlmKGMpIHsKLQkJCQlGcmVlU2tiKHNrYik7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCUZzbUV2ZW50KCZzdC0+bDIubDJtLCBFVl9MMl9GUkFNRV9FUlJPUiwgKHZvaWQgKikobG9uZyljKTsKIAkJCQlyZXQgPSAwOwogCQkJfQogCQkJaWYgKHJldCkKLQkJCQlGcmVlU2tiKHNrYik7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJYnJlYWs7CiAJCWNhc2UgKFBIX1BVTEwgfCBDT05GSVJNKToKIAkJCUZzbUV2ZW50KCZzdC0+bDIubDJtLCBFVl9MMl9BQ0tfUFVMTCwgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDMuYwppbmRleCBmNTcxYjVkLi5hYmNjOTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMy5jCkBAIC0zOTAsNyArMzkwLDcgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBpc2RubDNfdHJhbnMoc3RydWN0IFBTdGFjayAqc3QsIGludCBwciwgdm9pZCAqYXJnKSB7CiAJc3QtPmwzLmwzbDIoc3QsIHByLCBhcmcpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzdXJmLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXN1cmYuYwppbmRleCBhZjUxNzFkLi4zMzc0N2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXN1cmYuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXN1cmYuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19pc3VyZihzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJcmVsZWFzZV9yZWdpb24oY3MtPmh3LmlzdXJmLnJlc2V0LCAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9peDFfbWljcm8uYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9peDFfbWljcm8uYwppbmRleCBiODQzYjc1Li45MDhhN2UxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXgxX21pY3JvLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2l4MV9taWNyby5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKIGV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotY29uc3QgY2hhciAqaXgxX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xMi4yLjQgJCI7CitzdGF0aWMgY29uc3QgY2hhciAqaXgxX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xMi4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKICNkZWZpbmUgYnl0ZWluKGFkZHIpIGluYihhZGRyKQpAQCAtMTYyLDcgKzE2Miw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19peDFtaWNybyhzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJaWYgKGNzLT5ody5peDEuY2ZnX3JlZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9qYWRlLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvamFkZS5jCmluZGV4IGYwNWQ1MjcuLjM2M2FlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9qYWRlLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2phZGUuYwpAQCAtNzQsNyArNzQsNyBAQAogCiAKIAotdm9pZAorc3RhdGljIHZvaWQKIG1vZGVqYWRlKHN0cnVjdCBCQ1N0YXRlICpiY3MsIGludCBtb2RlLCBpbnQgYmMpCiB7CiAgICAgc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzID0gYmNzLT5jczsKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgIH0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGNsb3NlX2phZGVzdGF0ZShzdHJ1Y3QgQkNTdGF0ZSAqYmNzKQogewogICAgIG1vZGVqYWRlKGJjcywgMCwgYmNzLT5jaGFubmVsKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogfQogCiAKLWludAorc3RhdGljIGludAogc2V0c3RhY2tfamFkZShzdHJ1Y3QgUFN0YWNrICpzdCwgc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAliY3MtPmNoYW5uZWwgPSBzdC0+bDEuYmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvamFkZS5oIGIvZHJpdmVycy9pc2RuL2hpc2F4L2phZGUuaAppbmRleCBmYTI5NDQ0Li4yOTA1NWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvamFkZS5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9qYWRlLmgKQEAgLTEyOCw3ICsxMjgsNiBAQAogI2RlZmluZQlqYWRlX1RYQVVESU9DSDJDRkcJCQkJMHgxQQogCiBleHRlcm4gaW50IEphZGVWZXJzaW9uKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgY2hhciAqcyk7Ci1leHRlcm4gdm9pZCBtb2RlamFkZShzdHJ1Y3QgQkNTdGF0ZSAqYmNzLCBpbnQgbW9kZSwgaW50IGJjKTsKIGV4dGVybiB2b2lkIGNsZWFyX3BlbmRpbmdfamFkZV9pbnRzKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcyk7CiBleHRlcm4gdm9pZCBpbml0amFkZShzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNfMXRyNi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2wzXzF0cjYuYwppbmRleCBkNmMxYzhmLi5jNWMzNmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNfMXRyNi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM18xdHI2LmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiBleHRlcm4gY2hhciAqSGlTYXhfZ2V0cmV2KGNvbnN0IGNoYXIgKnJldmlzaW9uKTsKLWNvbnN0IGNoYXIgKmwzXzF0cjZfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjE1LjIuMyAkIjsKK3N0YXRpYyBjb25zdCBjaGFyICpsM18xdHI2X3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xNS4yLjMgJCI7CiAKICNkZWZpbmUgTXNnSGVhZChwdHIsIGNyZWYsIG10eSwgZGlzKSBcCiAJKnB0cisrID0gZGlzOyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNkc3MxLmMKaW5kZXggZWM5MjMwOC4uYTZkMmFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzZHNzMS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9sM2RzczEuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBleHRlcm4gY2hhciAqSGlTYXhfZ2V0cmV2KGNvbnN0IGNoYXIgKnJldmlzaW9uKTsKLWNvbnN0IGNoYXIgKmRzczFfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjMyLjIuMyAkIjsKK3N0YXRpYyBjb25zdCBjaGFyICpkc3MxX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4zMi4yLjMgJCI7CiAKICNkZWZpbmUgRVhUX0JFQVJFUl9DQVBTIDEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2wzbmkxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwppbmRleCAzYWIzYTU0Li5mNzA0MWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbDNuaTEuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKIGV4dGVybiBjaGFyICpIaVNheF9nZXRyZXYoY29uc3QgY2hhciAqcmV2aXNpb24pOwotY29uc3QgY2hhciAqbmkxX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi44LjIuMyAkIjsKK3N0YXRpYyBjb25zdCBjaGFyICpuaTFfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjguMi4zICQiOwogCiAjZGVmaW5lIEVYVF9CRUFSRVJfQ0FQUyAxCiAKQEAgLTI2NjUsNyArMjY2NSw3IEBACiAJbDNuaTFfU2VuZFNwaWQoIHBjLCBwciwgYXJnLCAyMCApOwogfQogCi12b2lkIGwzbmkxX3NwaWRfZXBpZCggc3RydWN0IGwzX3Byb2Nlc3MgKnBjLCB1X2NoYXIgcHIsIHZvaWQgKmFyZyApCitzdGF0aWMgdm9pZCBsM25pMV9zcGlkX2VwaWQoIHN0cnVjdCBsM19wcm9jZXNzICpwYywgdV9jaGFyIHByLCB2b2lkICphcmcgKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBhcmc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9taWMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9taWMuYwppbmRleCAzYWM0NDg0Li5mZTExZjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbWljLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L21pYy5jCkBAIC0xOCw3ICsxOCw3IEBACiAKIGV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwogCi1jb25zdCBjaGFyICptaWNfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEyLjIuNCAkIjsKK3N0YXRpYyBjb25zdCBjaGFyICptaWNfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEyLjIuNCAkIjsKIAogI2RlZmluZSBieXRlb3V0KGFkZHIsdmFsKSBvdXRiKHZhbCxhZGRyKQogI2RlZmluZSBieXRlaW4oYWRkcikgaW5iKGFkZHIpCkBAIC0xNTcsNyArMTU3LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiByZWxlYXNlX2lvX21pYyhzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJaW50IGJ5dGVjbnQgPSA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L25ldGpldC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25ldGpldC5jCmluZGV4IGZlNjFkMjYuLjk0ZGEwM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9uZXRqZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmV0amV0LmMKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJuZXRqZXQuaCIKIAotY29uc3QgY2hhciAqTkVUamV0X3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4yOS4yLjQgJCI7Ci0KIC8qIEludGVyZmFjZSBmdW5jdGlvbnMgKi8KIAogdV9jaGFyCkBAIC02Niw3ICs2NCw3IEBACiAJb3V0c2IoY3MtPmh3Lm5qZXQuaXNhYywgZGF0YSwgc2l6ZSk7CiB9CiAKLXZvaWQgZmlsbF9tZW0oc3RydWN0IEJDU3RhdGUgKmJjcywgdV9pbnQgKnBvcywgdV9pbnQgY250LCBpbnQgY2hhbiwgdV9jaGFyIGZpbGwpCitzdGF0aWMgdm9pZCBmaWxsX21lbShzdHJ1Y3QgQkNTdGF0ZSAqYmNzLCB1X2ludCAqcG9zLCB1X2ludCBjbnQsIGludCBjaGFuLCB1X2NoYXIgZmlsbCkKIHsKIAl1X2ludCBtYXNrPTB4MDAwMDAwZmYsIHZhbCA9IDAsICpwPXBvczsKIAl1X2ludCBpOwpAQCAtODUsNyArODMsNyBAQAogCX0KIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIG1vZGVfdGlnZXIoc3RydWN0IEJDU3RhdGUgKmJjcywgaW50IG1vZGUsIGludCBiYykKIHsKIAlzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MgPSBiY3MtPmNzOwpAQCAtODUyLDcgKzg1MCw3IEBACiB9CiAKIAotdm9pZAorc3RhdGljIHZvaWQKIGNsb3NlX3RpZ2Vyc3RhdGUoc3RydWN0IEJDU3RhdGUgKmJjcykKIHsKIAltb2RlX3RpZ2VyKGJjcywgMCwgYmNzLT5jaGFubmVsKTsKQEAgLTkwMCw3ICs4OTgsNyBAQAogCXJldHVybiAoMCk7CiB9CiAKLWludAorc3RhdGljIGludAogc2V0c3RhY2tfdGlnZXIoc3RydWN0IFBTdGFjayAqc3QsIHN0cnVjdCBCQ1N0YXRlICpiY3MpCiB7CiAJYmNzLT5jaGFubmVsID0gc3QtPmwxLmJjOwpAQCAtOTY2LDcgKzk2NCw3IEBACiAJY3MtPmJjc1sxXS5CQ19DbG9zZSA9IGNsb3NlX3RpZ2Vyc3RhdGU7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiByZWxlYXNldGlnZXIoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWlmIChjcy0+YmNzWzBdLmh3LnRpZ2VyLnNlbmQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9uaWNjeS5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKaW5kZXggY2Y3N2Q4My4uNjhhMjE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L25pY2N5LmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KIAogZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107Ci1jb25zdCBjaGFyICpuaWNjeV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMjEuMi40ICQiOworc3RhdGljIGNvbnN0IGNoYXIgKm5pY2N5X3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4yMS4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKICNkZWZpbmUgYnl0ZWluKGFkZHIpIGluYihhZGRyKQpAQCAtMTc4LDcgKzE3OCw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19uaWNjeShzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJaWYgKGNzLT5zdWJ0eXAgPT0gTklDQ1lfUENJKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L25qX3MuYwppbmRleCBmZDY2NDY5Li5hN2QzY2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfcy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ual9zLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcHBfZGVmcy5oPgogI2luY2x1ZGUgIm5ldGpldC5oIgogCi1jb25zdCBjaGFyICpORVRqZXRfU19yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMTMuMi40ICQiOworc3RhdGljIGNvbnN0IGNoYXIgKk5FVGpldF9TX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xMy4yLjQgJCI7CiAKIHN0YXRpYyB1X2NoYXIgZHVtbXlycihzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIGludCBjaGFuLCB1X2NoYXIgb2ZmKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9ual91LmMKaW5kZXggM2Q2NDQxZS4uMWFlN2NhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L25qX3UuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvbmpfdS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHBwX2RlZnMuaD4KICNpbmNsdWRlICJuZXRqZXQuaCIKIAotY29uc3QgY2hhciAqTkVUamV0X1VfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjE0LjIuMyAkIjsKK3N0YXRpYyBjb25zdCBjaGFyICpORVRqZXRfVV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMTQuMi4zICQiOwogCiBzdGF0aWMgdV9jaGFyIGR1bW15cnIoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzLCBpbnQgY2hhbiwgdV9jaGFyIG9mZikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9xOTMxLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvcTkzMS5jCmluZGV4IDE3MGZjZDQuLmFiZWNhYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9xOTMxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3E5MzEuYwpAQCAtNTE2LDcgKzUxNiw3IEBACiAJe0NBVVNFX1VzZXJJbmZvRGlzY2FyZGVkLCAiVXNlciBJbmZvIERpc2NhcmRlZCJ9CiB9OwogCi1pbnQgY2F1c2VfMXRyNl9sZW4gPSAoc2l6ZW9mKGNhdXNlXzF0cjYpIC8gc2l6ZW9mKHN0cnVjdCBNZXNzYWdlVHlwZSkpOworc3RhdGljIGludCBjYXVzZV8xdHI2X2xlbiA9IChzaXplb2YoY2F1c2VfMXRyNikgLyBzaXplb2Yoc3RydWN0IE1lc3NhZ2VUeXBlKSk7CiAKIHN0YXRpYyBpbnQKIHByY2F1c2VfMXRyNihjaGFyICpkZXN0LCB1X2NoYXIgKiBwKQpAQCAtOTM1LDcgKzkzNSw3IEBACiAJcmV0dXJuIChkcCAtIGRlc3QpOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIHByZmFjaWxpdHkoY2hhciAqZGVzdCwgdV9jaGFyICogcCkKIHsKIAljaGFyICpkcCA9IGRlc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvczBib3guYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zMGJveC5jCmluZGV4IGYzYzQ4MTMuLjdiNjMwODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zMGJveC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zMGJveC5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKIGV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotY29uc3QgY2hhciAqczBib3hfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjYuMi40ICQiOworc3RhdGljIGNvbnN0IGNoYXIgKnMwYm94X3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi42LjIuNCAkIjsKIAogc3RhdGljIGlubGluZSB2b2lkCiB3cml0ZXJlZyh1bnNpZ25lZCBpbnQgcGFkciwgc2lnbmVkIGludCBhZGRyLCB1X2NoYXIgb2ZmLCB1X2NoYXIgdmFsKSB7CkBAIC0xODMsNyArMTgzLDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiByZWxlYXNlX2lvX3MwYm94KHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKIAlyZWxlYXNlX3JlZ2lvbihjcy0+aHcudGVsZXMzLmNmZ19yZWcsIDgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3NhcGhpci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NhcGhpci5jCmluZGV4IDllNmQzZDYuLjgyMTc3NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zYXBoaXIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2FwaGlyLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCW1vZF90aW1lcigmY3MtPmh3LnNhcGhpci50aW1lciwgamlmZmllcysxKkhaKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHJlbGVhc2VfaW9fc2FwaGlyKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKIAlieXRlb3V0KGNzLT5ody5zYXBoaXIuY2ZnX3JlZyArIElSUV9SRUcsIDB4ZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCmluZGV4IDgzOTBmMTYuLjhjMDQ0YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKQEAgLTUxLDkgKzUxLDkgQEAKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiAKLWNvbnN0IGNoYXIgKlNlZGxiYXVlcl9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMzQuMi42ICQiOworc3RhdGljIGNvbnN0IGNoYXIgKlNlZGxiYXVlcl9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMzQuMi42ICQiOwogCi1jb25zdCBjaGFyICpTZWRsYmF1ZXJfVHlwZXNbXSA9CitzdGF0aWMgY29uc3QgY2hhciAqU2VkbGJhdWVyX1R5cGVzW10gPQogCXsiTm9uZSIsICJzcGVlZCBjYXJkL3dpbiIsICJzcGVlZCBzdGFyIiwgInNwZWVkIGZheCsiLAogCSJzcGVlZCB3aW4gSUkgLyBJU0ROIFBDLzEwNCIsICJzcGVlZCBzdGFyIElJIiwgInNwZWVkIHBjaSIsCiAJInNwZWVkIGZheCsgcHlyYW1pZCIsICJzcGVlZCBmYXgrIHBjaSIsICJIU1QgU2FwaGlyIElJSSJ9OwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19zZWRsYmF1ZXIoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWludCBieXRlY250ID0gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zcG9ydHN0ZXIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zcG9ydHN0ZXIuYwppbmRleCAxMzI4NDBiLi5jZGYzNWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3BvcnRzdGVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3Nwb3J0c3Rlci5jCkBAIC0xOSw3ICsxOSw3IEBACiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKIGV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotY29uc3QgY2hhciAqc3BvcnRzdGVyX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xNi4yLjQgJCI7CitzdGF0aWMgY29uc3QgY2hhciAqc3BvcnRzdGVyX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xNi4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKICNkZWZpbmUgYnl0ZWluKGFkZHIpIGluYihhZGRyKQpAQCAtMTMyLDcgKzEzMiw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogcmVsZWFzZV9pb19zcG9ydHN0ZXIoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWludCBpLCBhZHI7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIAl9CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiByZXNldF9zcG9ydHN0ZXIoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWNzLT5ody5zcHQucmVzX2lycSB8PSBTUE9SVFNURVJfUkVTRVQ7IC8qIFJlc2V0IE9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmggYi9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxLmgKaW5kZXggZTgxNzdiMC4uMGZkYTVjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MS5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODEuaApAQCAtNDUwLDEyICs0NTAsOCBAQAogCQkJICAgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQpOwogdm9pZCBzdDU0ODFfcmVsZWFzZV9pc29jcGlwZXMoc3RydWN0IHVyYiogdXJiWzJdKTsKIAotaW50ICBzdDU0ODFfaXNvY19mbGF0dGVuKHN0cnVjdCB1cmIgKnVyYik7CiB2b2lkIHN0NTQ4MV91c2JfcGlwZV9yZXNldChzdHJ1Y3Qgc3Q1NDgxX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCSAgICB1X2NoYXIgcGlwZSwgY3RybF9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0KTsKLXZvaWQgc3Q1NDgxX3VzYl9jdHJsX21zZyhzdHJ1Y3Qgc3Q1NDgxX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgdTggcmVxdWVzdCwgdTggcmVxdWVzdHR5cGUsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAotCQkgIGN0cmxfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqY29udGV4dCk7CiB2b2lkIHN0NTQ4MV91c2JfZGV2aWNlX2N0cmxfbXNnKHN0cnVjdCBzdDU0ODFfYWRhcHRlciAqYWRhcHRlciwKIAkJCSB1OCByZXF1ZXN0LCB1MTYgdmFsdWUsCiAJCQkgY3RybF9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaGRsYy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9oZGxjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4MGY0MmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV9oZGxjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1ODAgKzAsMCBAQAotLyoKLSAqIERyaXZlciBmb3IgU1Q1NDgxIFVTQiBJU0ROIG1vZGVtCi0gKgotICogQXV0aG9yICAgICAgIEZyb2RlIElzYWtzZW4KLSAqIENvcHlyaWdodCAgICAyMDAxIGJ5IEZyb2RlIElzYWtzZW4gICAgICA8ZmlzYWtzZW5AYmV3YW4uY29tPgotICogICAgICAgICAgICAgIDIwMDEgYnkgS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+Ci0gKiAKLSAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KLSNpbmNsdWRlICJzdDU0ODFfaGRsYy5oIgotCi0KLWVudW0gewotCUhETENfRkFTVF9JRExFLEhETENfR0VUX0ZMQUdfQjAsSERMQ19HRVRGTEFHX0IxQTYsSERMQ19HRVRGTEFHX0I3LAotCUhETENfR0VUX0RBVEEsSERMQ19GQVNUX0ZMQUcKLX07Ci0KLWVudW0gewotCUhETENfU0VORF9EQVRBLEhETENfU0VORF9DUkMxLEhETENfU0VORF9GQVNUX0ZMQUcsCi0JSERMQ19TRU5EX0ZJUlNUX0ZMQUcsSERMQ19TRU5EX0NSQzIsSERMQ19TRU5EX0NMT1NJTkdfRkxBRywKLQlIRExDX1NFTkRfSURMRTEsSERMQ19TRU5EX0ZBU1RfSURMRSxIRExDX1NFTkRGTEFHX0IwLAotCUhETENfU0VOREZMQUdfQjFBNixIRExDX1NFTkRGTEFHX0I3LFNUT1BQRUQKLX07Ci0KLXZvaWQgCi1oZGxjX3Jjdl9pbml0KHN0cnVjdCBoZGxjX3ZhcnMgKmhkbGMsIGludCBkb19hZGFwdDU2KQotewotICAgCWhkbGMtPmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQloZGxjLT5mZmJpdF9zaGlmdCA9IDA7Ci0JaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9EQVRBOwotCWhkbGMtPmRvX2FkYXB0NTYgPSBkb19hZGFwdDU2OwotCWhkbGMtPmRjaGFubmVsID0gMDsKLQloZGxjLT5jcmMgPSAwOwotCWhkbGMtPmNiaW4gPSAwOwotCWhkbGMtPnNoaWZ0X3JlZyA9IDA7Ci0JaGRsYy0+ZmZ2YWx1ZSA9IDA7Ci0JaGRsYy0+ZHN0cG9zID0gMDsKLX0KLQotdm9pZCAKLWhkbGNfb3V0X2luaXQoc3RydWN0IGhkbGNfdmFycyAqaGRsYywgaW50IGlzX2RfY2hhbm5lbCwgaW50IGRvX2FkYXB0NTYpCi17Ci0gICAJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKLQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQloZGxjLT5kYXRhX2JpdHMgPSAwOwotCWhkbGMtPmZmYml0X3NoaWZ0ID0gMDsKLQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMDsKLQloZGxjLT5kb19jbG9zaW5nID0gMDsKLQloZGxjLT5mZnZhbHVlID0gMDsKLQlpZiAoaXNfZF9jaGFubmVsKSB7Ci0JCWhkbGMtPmRjaGFubmVsID0gMTsKLQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfRklSU1RfRkxBRzsKLQl9IGVsc2UgewotCQloZGxjLT5kY2hhbm5lbCA9IDA7Ci0JCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZBU1RfRkxBRzsKLQkJaGRsYy0+ZmZ2YWx1ZSA9IDB4N2U7Ci0JfSAKLQloZGxjLT5jYmluID0gMHg3ZTsKLQloZGxjLT5iaXRfc2hpZnQgPSAwOwotCWlmKGRvX2FkYXB0NTYpewotCQloZGxjLT5kb19hZGFwdDU2ID0gMTsJCQotCQloZGxjLT5kYXRhX2JpdHMgPSAwOwotCQloZGxjLT5zdGF0ZSA9IEhETENfU0VOREZMQUdfQjA7Ci0JfSBlbHNlIHsKLQkJaGRsYy0+ZG9fYWRhcHQ1NiA9IDA7CQkKLQkJaGRsYy0+ZGF0YV9iaXRzID0gODsKLQl9Ci0JaGRsYy0+c2hpZnRfcmVnID0gMDsKLX0KLQotLyoKLSAgaGRsY19kZWNvZGUgLSBkZWNvZGVzIEhETEMgZnJhbWVzIGZyb20gYSB0cmFuc3BhcmVudCBiaXQgc3RyZWFtLgotCi0gIFRoZSBzb3VyY2UgYnVmZmVyIGlzIHNjYW5uZWQgZm9yIHZhbGlkIEhETEMgZnJhbWVzIGxvb2tpbmcgZm9yCi0gIGZsYWdzICgwMTExMTExMCkgdG8gaW5kaWNhdGUgdGhlIHN0YXJ0IG9mIGEgZnJhbWUuIElmIHRoZSBzdGFydCBvZgotICB0aGUgZnJhbWUgaXMgZm91bmQsIHRoZSBiaXQgc3R1ZmZpbmcgaXMgcmVtb3ZlZCAoMCBhZnRlciA1IDEncykuCi0gIFdoZW4gYSBuZXcgZmxhZyBpcyBmb3VuZCwgdGhlIGNvbXBsZXRlIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkCi0gIGFuZCB0aGUgQ1JDIGlzIGNoZWNrZWQuCi0gIElmIGEgdmFsaWQgZnJhbWUgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmcmFtZSBsZW5ndGggCi0gIGV4Y2x1ZGluZyB0aGUgQ1JDIHdpdGggdGhlIGJpdCBIRExDX0VORF9PRl9GUkFNRSBzZXQuCi0gIElmIHRoZSBiZWdpbm5pbmcgb2YgYSB2YWxpZCBmcmFtZSBpcyBmb3VuZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMKLSAgdGhlIGxlbmd0aC4gCi0gIElmIGEgZnJhbWluZyBlcnJvciBpcyBmb3VuZCAodG9vIG1hbnkgMXMgYW5kIG5vdCBhIGZsYWcpIHRoZSBmdW5jdGlvbiAKLSAgcmV0dXJucyB0aGUgbGVuZ3RoIHdpdGggdGhlIGJpdCBIRExDX0ZSQU1JTkdfRVJST1Igc2V0LgotICBJZiBhIENSQyBlcnJvciBpcyBmb3VuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIHdpdGggdGhlCi0gIGJpdCBIRExDX0NSQ19FUlJPUiBzZXQuCi0gIElmIHRoZSBmcmFtZSBsZW5ndGggZXhjZWVkcyB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHNpemUsIHRoZSBmdW5jdGlvbgotICByZXR1cm5zIHRoZSBsZW5ndGggd2l0aCB0aGUgYml0IEhETENfTEVOR1RIX0VSUk9SIHNldC4KLQotICBzcmMgLSBzb3VyY2UgYnVmZmVyCi0gIHNsZW4gLSBzb3VyY2UgYnVmZmVyIGxlbmd0aAotICBjb3VudCAtIG51bWJlciBvZiBieXRlcyByZW1vdmVkIChkZWNvZGVkKSBmcm9tIHRoZSBzb3VyY2UgYnVmZmVyCi0gIGRzdCBfIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICBkc2l6ZSAtIGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXplCi0gIHJldHVybnMgLSBudW1iZXIgb2YgZGVjb2RlZCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGFuZCBzdGF0dXMKLSAgZmxhZy4KLSAqLwotaW50IGhkbGNfZGVjb2RlKHN0cnVjdCBoZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywKLQkJaW50IHNsZW4sIGludCAqY291bnQsIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGRzaXplKQotewotCWludCBzdGF0dXM9MDsKLQotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZhc3RfZmxhZ1tdPXsKLQkJMHgwMCwweDAwLDB4MDAsMHgyMCwweDMwLDB4MzgsMHgzYywweDNlLDB4M2YKLQl9OwotCi0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZmFzdF9mbGFnX3ZhbHVlW109ewotCQkweDAwLDB4N2UsMHhmYywweGY5LDB4ZjMsMHhlNywweGNmLDB4OWYsMHgzZgotCX07Ci0KLQlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBmYXN0X2Fib3J0W109ewotCQkweDAwLDB4MDAsMHg4MCwweGMwLDB4ZTAsMHhmMCwweGY4LDB4ZmMsMHhmZSwweGZmCi0JfTsKLQotCSpjb3VudCA9IHNsZW47Ci0KLQl3aGlsZShzbGVuID4gMCl7Ci0JCWlmKGhkbGMtPmJpdF9zaGlmdD09MCl7Ci0JCQloZGxjLT5jYmluID0gKnNyYysrOwotCQkJc2xlbi0tOwotCQkJaGRsYy0+Yml0X3NoaWZ0ID0gODsKLQkJCWlmKGhkbGMtPmRvX2FkYXB0NTYpewotCQkJCWhkbGMtPmJpdF9zaGlmdCAtLTsKLQkJCX0KLQkJfQotCi0JCXN3aXRjaChoZGxjLT5zdGF0ZSl7Ci0JCWNhc2UgU1RPUFBFRDoKLQkJCXJldHVybiAwOwotCQljYXNlIEhETENfRkFTVF9JRExFOgotCQkJaWYoaGRsYy0+Y2JpbiA9PSAweGZmKXsKLQkJCQloZGxjLT5iaXRfc2hpZnQgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVF9GTEFHX0IwOwotCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQloZGxjLT5iaXRfc2hpZnQgPSA4OwotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19HRVRfRkxBR19CMDoKLQkJCWlmKCEoaGRsYy0+Y2JpbiAmIDB4ODApKSB7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVEZMQUdfQjFBNjsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYoIWhkbGMtPmRvX2FkYXB0NTYpewotCQkJCQlpZigrK2hkbGMtPmhkbGNfYml0czEgPj04ICkgaWYoaGRsYy0+Yml0X3NoaWZ0PT0xKQotCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0ZBU1RfSURMRTsKLQkJCQl9Ci0JCQl9Ci0JCQloZGxjLT5jYmluPDw9MTsKLQkJCWhkbGMtPmJpdF9zaGlmdCAtLTsKLQkJCWJyZWFrOwotCQljYXNlIEhETENfR0VURkxBR19CMUE2OgotCQkJaWYoaGRsYy0+Y2JpbiAmIDB4ODApewotCQkJCWhkbGMtPmhkbGNfYml0czErKzsKLQkJCQlpZihoZGxjLT5oZGxjX2JpdHMxPT02KXsKLQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVEZMQUdfQjc7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCX0KLQkJCWhkbGMtPmNiaW48PD0xOwotCQkJaGRsYy0+Yml0X3NoaWZ0IC0tOwotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19HRVRGTEFHX0I3OgotCQkJaWYoaGRsYy0+Y2JpbiAmIDB4ODApIHsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VUX0ZMQUdfQjA7Ci0JCQl9IGVsc2UgewotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfREFUQTsKLQkJCQloZGxjLT5jcmMgPSAweGZmZmY7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID0gMDsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQloZGxjLT5kYXRhX2JpdHMgPSAwOwotCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAwOwotCQkJfQotCQkJaGRsYy0+Y2Jpbjw8PTE7Ci0JCQloZGxjLT5iaXRfc2hpZnQgLS07Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX0dFVF9EQVRBOgotCQkJaWYoaGRsYy0+Y2JpbiAmIDB4ODApewotCQkJCWhkbGMtPmhkbGNfYml0czErKzsKLQkJCQlzd2l0Y2goaGRsYy0+aGRsY19iaXRzMSl7Ci0JCQkJY2FzZSA2OgotCQkJCQlicmVhazsKLQkJCQljYXNlIDc6Ci0JCQkJCWlmKGhkbGMtPmRhdGFfcmVjZWl2ZWQpIHsKLQkJCQkJCS8vIGJhZCBmcmFtZQotCQkJCQkJc3RhdHVzID0gLUhETENfRlJBTUlOR19FUlJPUjsKLQkJCQkJfQotCQkJCQlpZighaGRsYy0+ZG9fYWRhcHQ1Nil7Ci0JCQkJCQlpZihoZGxjLT5jYmluPT1mYXN0X2Fib3J0W2hkbGMtPmJpdF9zaGlmdCsxXSl7Ci0JCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0ZBU1RfSURMRTsKLQkJCQkJCQloZGxjLT5iaXRfc2hpZnQ9MTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfRkxBR19CMDsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQloZGxjLT5zaGlmdF9yZWc+Pj0xOwotCQkJCQloZGxjLT5zaGlmdF9yZWcgfD0gMHg4MDsKLQkJCQkJaGRsYy0+ZGF0YV9iaXRzKys7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJc3dpdGNoKGhkbGMtPmhkbGNfYml0czEpewotCQkJCWNhc2UgNToKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSA2OgotCQkJCQlpZihoZGxjLT5kYXRhX3JlY2VpdmVkKXsKLQkJCQkJCWlmIChoZGxjLT5kc3Rwb3MgPCAyKSB7Ci0JCQkJCQkJc3RhdHVzID0gLUhETENfRlJBTUlOR19FUlJPUjsKLQkJCQkJCX0gZWxzZSBpZiAoaGRsYy0+Y3JjICE9IDB4ZjBiOCl7Ci0JCQkJCQkJLy8gY3JjIGVycm9yCi0JCQkJCQkJc3RhdHVzID0gLUhETENfQ1JDX0VSUk9SOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkvLyByZW1vdmUgQ1JDCi0JCQkJCQkJaGRsYy0+ZHN0cG9zIC09IDI7Ci0JCQkJCQkJLy8gZ29vZCBmcmFtZQotCQkJCQkJCXN0YXR1cyA9IGhkbGMtPmRzdHBvczsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQloZGxjLT5jcmMgPSAweGZmZmY7Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZyA9IDA7Ci0JCQkJCWhkbGMtPmRhdGFfYml0cyA9IDA7Ci0JCQkJCWlmKCFoZGxjLT5kb19hZGFwdDU2KXsKLQkJCQkJCWlmKGhkbGMtPmNiaW49PWZhc3RfZmxhZ1toZGxjLT5iaXRfc2hpZnRdKXsKLQkJCQkJCQloZGxjLT5mZnZhbHVlID0gZmFzdF9mbGFnX3ZhbHVlW2hkbGMtPmJpdF9zaGlmdF07Ci0JCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0ZBU1RfRkxBRzsKLQkJCQkJCQloZGxjLT5mZmJpdF9zaGlmdCA9IGhkbGMtPmJpdF9zaGlmdDsKLQkJCQkJCQloZGxjLT5iaXRfc2hpZnQgPSAxOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VUX0RBVEE7Ci0JCQkJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfR0VUX0RBVEE7Ci0JCQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMDsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQloZGxjLT5zaGlmdF9yZWc+Pj0xOwotCQkJCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJfQotCQkJaWYgKHN0YXR1cykgewotCQkJCWhkbGMtPmRzdHBvcyA9IDA7Ci0JCQkJKmNvdW50IC09IHNsZW47Ci0JCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCQlyZXR1cm4gc3RhdHVzOwotCQkJfQotCQkJaWYoaGRsYy0+ZGF0YV9iaXRzPT04KXsKLQkJCQloZGxjLT5kYXRhX2JpdHMgPSAwOwotCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAxOwotCQkJCWhkbGMtPmNyYyA9IGNyY19jY2l0dF9ieXRlKGhkbGMtPmNyYywgaGRsYy0+c2hpZnRfcmVnKTsKLQotCQkJCS8vIGdvb2QgYnl0ZSByZWNlaXZlZAotCQkJCWlmIChkc2l6ZS0tKSB7Ci0JCQkJCWRzdFtoZGxjLT5kc3Rwb3MrK10gPSBoZGxjLT5zaGlmdF9yZWc7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLy8gZnJhbWUgdG9vIGxvbmcKLQkJCQkJc3RhdHVzID0gLUhETENfTEVOR1RIX0VSUk9SOwotCQkJCQloZGxjLT5kc3Rwb3MgPSAwOwotCQkJCX0KLQkJCX0KLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCWJyZWFrOwotCQljYXNlIEhETENfRkFTVF9GTEFHOgotCQkJaWYoaGRsYy0+Y2Jpbj09aGRsYy0+ZmZ2YWx1ZSl7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gMDsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYoaGRsYy0+Y2JpbiA9PSAweGZmKXsKLQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0ZBU1RfSURMRTsKLQkJCQkJaGRsYy0+Yml0X3NoaWZ0PTA7Ci0JCQkJfSBlbHNlIGlmKGhkbGMtPmZmYml0X3NoaWZ0PT04KXsKLQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX0dFVEZMQUdfQjc7Ci0JCQkJCWJyZWFrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWhkbGMtPnNoaWZ0X3JlZyA9IGZhc3RfYWJvcnRbaGRsYy0+ZmZiaXRfc2hpZnQtMV07Ci0JCQkJCWhkbGMtPmhkbGNfYml0czEgPSBoZGxjLT5mZmJpdF9zaGlmdC0yOwotCQkJCQlpZihoZGxjLT5oZGxjX2JpdHMxPDApaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJCWhkbGMtPmRhdGFfYml0cyA9IGhkbGMtPmZmYml0X3NoaWZ0LTE7Ci0JCQkJCWhkbGMtPnN0YXRlID0gSERMQ19HRVRfREFUQTsKLQkJCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDA7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQkqY291bnQgLT0gc2xlbjsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAgaGRsY19lbmNvZGUgLSBlbmNvZGVzIEhETEMgZnJhbWVzIHRvIGEgdHJhbnNwYXJlbnQgYml0IHN0cmVhbS4KLQotICBUaGUgYml0IHN0cmVhbSBzdGFydHMgd2l0aCBhIGJlZ2lubmluZyBmbGFnICgwMTExMTExMCkuIEFmdGVyCi0gIHRoYXQgZWFjaCBieXRlIGlzIGFkZGVkIHRvIHRoZSBiaXQgc3RyZWFtIHdpdGggYml0IHN0dWZmaW5nIGFkZGVkCi0gICgwIGFmdGVyIDUgMSdzKS4KLSAgV2hlbiB0aGUgbGFzdCBieXRlIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc291cmNlIGJ1ZmZlciwgdGhlCi0gIENSQyAoMiBieXRlcyBpcyBhZGRlZCkgYW5kIHRoZSBmcmFtZSB0ZXJtaW5hdGVzIHdpdGggdGhlIGVuZGluZyBmbGFnLgotICBGb3IgdGhlIGRjaGFubmVsLCB0aGUgaWRsZSBjaGFyYWN0ZXIgKGFsbCAxJ3MpIGlzIGFsc28gYWRkZWQgYXQgdGhlIGVuZC4KLSAgSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBlbXB0eSBzb3VyY2UgYnVmZmVyIChzbGVuPTApLCBmbGFncyBvcgotICBpZGxlIGNoYXJhY3RlciB3aWxsIGJlIGdlbmVyYXRlZC4KLSAKLSAgc3JjIC0gc291cmNlIGJ1ZmZlcgotICBzbGVuIC0gc291cmNlIGJ1ZmZlciBsZW5ndGgKLSAgY291bnQgLSBudW1iZXIgb2YgYnl0ZXMgcmVtb3ZlZCAoZW5jb2RlZCkgZnJvbSBzb3VyY2UgYnVmZmVyCi0gIGRzdCBfIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICBkc2l6ZSAtIGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXplCi0gIHJldHVybnMgLSBudW1iZXIgb2YgZW5jb2RlZCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyCi0qLwotaW50IGhkbGNfZW5jb2RlKHN0cnVjdCBoZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgCi0JCXVuc2lnbmVkIHNob3J0IHNsZW4sIGludCAqY291bnQsCi0JCXVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGRzaXplKQotewotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHhmYXN0X2ZsYWdfdmFsdWVbXSA9IHsKLQkJMHg3ZSwweDNmLDB4OWYsMHhjZiwweGU3LDB4ZjMsMHhmOSwweGZjLDB4N2UKLQl9OwotCi0JaW50IGxlbiA9IDA7Ci0KLQkqY291bnQgPSBzbGVuOwotCi0Jd2hpbGUgKGRzaXplID4gMCkgewotCQlpZihoZGxjLT5iaXRfc2hpZnQ9PTApewkKLQkJCWlmKHNsZW4gJiYgIWhkbGMtPmRvX2Nsb3NpbmcpewotCQkJCWhkbGMtPnNoaWZ0X3JlZyA9ICpzcmMrKzsKLQkJCQlzbGVuLS07Ci0JCQkJaWYgKHNsZW4gPT0gMCkgCi0JCQkJCWhkbGMtPmRvX2Nsb3NpbmcgPSAxOyAgLyogY2xvc2luZyBzZXF1ZW5jZSwgQ1JDICsgZmxhZyhzKSAqLwotCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7Ci0JCQl9IGVsc2UgewotCQkJCWlmKGhkbGMtPnN0YXRlID09IEhETENfU0VORF9EQVRBKXsKLQkJCQkJaWYoaGRsYy0+ZGF0YV9yZWNlaXZlZCl7Ci0JCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9DUkMxOwotCQkJCQkJaGRsYy0+Y3JjIF49IDB4ZmZmZjsKLQkJCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7Ci0JCQkJCQloZGxjLT5zaGlmdF9yZWcgPSBoZGxjLT5jcmMgJiAweGZmOwotCQkJCQl9IGVsc2UgaWYoIWhkbGMtPmRvX2FkYXB0NTYpewotCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfRkFTVF9GTEFHOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRGTEFHX0IwOwotCQkJCQl9Ci0JCQkJfQotCQkJICAKLQkJCX0KLQkJfQotCi0JCXN3aXRjaChoZGxjLT5zdGF0ZSl7Ci0JCWNhc2UgU1RPUFBFRDoKLQkJCXdoaWxlIChkc2l6ZS0tKQotCQkJCSpkc3QrKyA9IDB4ZmY7Ci0JCSAgCi0JCQlyZXR1cm4gZHNpemU7Ci0JCWNhc2UgSERMQ19TRU5EX0ZBU1RfRkxBRzoKLQkJCWhkbGMtPmRvX2Nsb3NpbmcgPSAwOwotCQkJaWYoc2xlbiA9PSAwKXsKLQkJCQkqZHN0KysgPSBoZGxjLT5mZnZhbHVlOwotCQkJCWxlbisrOwotCQkJCWRzaXplLS07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZihoZGxjLT5iaXRfc2hpZnQ9PTgpewotCQkJCWhkbGMtPmNiaW4gPSBoZGxjLT5mZnZhbHVlPj4oOC1oZGxjLT5kYXRhX2JpdHMpOwotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0RBVEE7Ci0JCQkJaGRsYy0+Y3JjID0gMHhmZmZmOwotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAxOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19TRU5ERkxBR19CMDoKLQkJCWhkbGMtPmRvX2Nsb3NpbmcgPSAwOwotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQloZGxjLT5zdGF0ZSA9IEhETENfU0VOREZMQUdfQjFBNjsKLQkJCWJyZWFrOwotCQljYXNlIEhETENfU0VOREZMQUdfQjFBNjoKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWhkbGMtPmNiaW4rKzsKLQkJCWlmKCsraGRsYy0+aGRsY19iaXRzMSA9PSA2KQotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CNzsKLQkJCWJyZWFrOwotCQljYXNlIEhETENfU0VOREZMQUdfQjc6Ci0JCQloZGxjLT5jYmluIDw8PSAxOwotCQkJaGRsYy0+ZGF0YV9iaXRzKys7Ci0JCQlpZihzbGVuID09IDApewotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmKGhkbGMtPmJpdF9zaGlmdD09OCl7Ci0JCQkJaGRsYy0+c3RhdGUgPSBIRExDX1NFTkRfREFUQTsKLQkJCQloZGxjLT5jcmMgPSAweGZmZmY7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJaGRsYy0+ZGF0YV9yZWNlaXZlZCA9IDE7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfRklSU1RfRkxBRzoKLQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAxOwotCQkJaWYoaGRsYy0+ZGF0YV9iaXRzPT04KXsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9EQVRBOwotCQkJCWhkbGMtPmNyYyA9IDB4ZmZmZjsKLQkJCQloZGxjLT5oZGxjX2JpdHMxID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWlmKGhkbGMtPnNoaWZ0X3JlZyAmIDB4MDEpCi0JCQkJaGRsYy0+Y2JpbisrOwotCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOwotCQkJaGRsYy0+Yml0X3NoaWZ0LS07Ci0JCQlpZihoZGxjLT5iaXRfc2hpZnQ9PTApewotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0RBVEE7Ci0JCQkJaGRsYy0+Y3JjID0gMHhmZmZmOwotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19TRU5EX0RBVEE6Ci0JCQloZGxjLT5jYmluIDw8PSAxOwotCQkJaGRsYy0+ZGF0YV9iaXRzKys7Ci0JCQlpZihoZGxjLT5oZGxjX2JpdHMxID09IDUpewotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT04KXsKLQkJCQloZGxjLT5jcmMgPSBjcmNfY2NpdHRfYnl0ZShoZGxjLT5jcmMsIGhkbGMtPnNoaWZ0X3JlZyk7Ci0JCQl9Ci0JCQlpZihoZGxjLT5zaGlmdF9yZWcgJiAweDAxKXsKLQkJCQloZGxjLT5oZGxjX2JpdHMxKys7Ci0JCQkJaGRsYy0+Y2JpbisrOwotCQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKLQkJCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCX0gZWxzZSB7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19TRU5EX0NSQzE6Ci0JCQloZGxjLT5jYmluIDw8PSAxOwotCQkJaGRsYy0+ZGF0YV9iaXRzKys7Ci0JCQlpZihoZGxjLT5oZGxjX2JpdHMxID09IDUpewotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYoaGRsYy0+c2hpZnRfcmVnICYgMHgwMSl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSsrOwotCQkJCWhkbGMtPmNiaW4rKzsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0LS07Ci0JCQl9IGVsc2UgewotCQkJCWhkbGMtPmhkbGNfYml0czEgPSAwOwotCQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKLQkJCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCX0KLQkJCWlmKGhkbGMtPmJpdF9zaGlmdD09MCl7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID0gKGhkbGMtPmNyYyA+PiA4KTsKLQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9DUkMyOwotCQkJCWhkbGMtPmJpdF9zaGlmdCA9IDg7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBIRExDX1NFTkRfQ1JDMjoKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWlmKGhkbGMtPmhkbGNfYml0czEgPT0gNSl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZihoZGxjLT5zaGlmdF9yZWcgJiAweDAxKXsKLQkJCQloZGxjLT5oZGxjX2JpdHMxKys7Ci0JCQkJaGRsYy0+Y2JpbisrOwotCQkJCWhkbGMtPnNoaWZ0X3JlZyA+Pj0gMTsKLQkJCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCX0gZWxzZSB7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJaGRsYy0+c2hpZnRfcmVnID4+PSAxOwotCQkJCWhkbGMtPmJpdF9zaGlmdC0tOwotCQkJfQotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0PT0wKXsKLQkJCQloZGxjLT5zaGlmdF9yZWcgPSAweDdlOwotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0NMT1NJTkdfRkxBRzsKLQkJCQloZGxjLT5iaXRfc2hpZnQgPSA4OwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19TRU5EX0NMT1NJTkdfRkxBRzoKLQkJCWhkbGMtPmNiaW4gPDw9IDE7Ci0JCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCWlmKGhkbGMtPmhkbGNfYml0czEgPT0gNSl7Ci0JCQkJaGRsYy0+aGRsY19iaXRzMSA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZihoZGxjLT5zaGlmdF9yZWcgJiAweDAxKXsKLQkJCQloZGxjLT5jYmluKys7Ci0JCQl9Ci0JCQloZGxjLT5zaGlmdF9yZWcgPj49IDE7Ci0JCQloZGxjLT5iaXRfc2hpZnQtLTsKLQkJCWlmKGhkbGMtPmJpdF9zaGlmdD09MCl7Ci0JCQkJaGRsYy0+ZmZ2YWx1ZSA9IHhmYXN0X2ZsYWdfdmFsdWVbaGRsYy0+ZGF0YV9iaXRzXTsKLQkJCQlpZihoZGxjLT5kY2hhbm5lbCl7Ci0JCQkJCWhkbGMtPmZmdmFsdWUgPSAweDdlOwotCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9JRExFMTsKLQkJCQkJaGRsYy0+Yml0X3NoaWZ0ID0gOC1oZGxjLT5kYXRhX2JpdHM7Ci0JCQkJCWlmKGhkbGMtPmJpdF9zaGlmdD09MCkKLQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZBU1RfSURMRTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZighaGRsYy0+ZG9fYWRhcHQ1Nil7Ci0JCQkJCQloZGxjLT5zdGF0ZSA9IEhETENfU0VORF9GQVNUX0ZMQUc7Ci0JCQkJCQloZGxjLT5kYXRhX3JlY2VpdmVkID0gMDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5ERkxBR19CMDsKLQkJCQkJCWhkbGMtPmRhdGFfcmVjZWl2ZWQgPSAwOwotCQkJCQl9Ci0JCQkJCS8vIEZpbmlzaGVkIHdpdGggdGhpcyBmcmFtZSwgc2VuZCBmbGFncwotCQkJCQlpZiAoZHNpemUgPiAxKSBkc2l6ZSA9IDE7IAotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEhETENfU0VORF9JRExFMToKLQkJCWhkbGMtPmRvX2Nsb3NpbmcgPSAwOwotCQkJaGRsYy0+Y2JpbiA8PD0gMTsKLQkJCWhkbGMtPmNiaW4rKzsKLQkJCWhkbGMtPmRhdGFfYml0cysrOwotCQkJaGRsYy0+Yml0X3NoaWZ0LS07Ci0JCQlpZihoZGxjLT5iaXRfc2hpZnQ9PTApewotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZBU1RfSURMRTsKLQkJCQloZGxjLT5iaXRfc2hpZnQgPSAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSERMQ19TRU5EX0ZBU1RfSURMRToKLQkJCWhkbGMtPmRvX2Nsb3NpbmcgPSAwOwotCQkJaGRsYy0+Y2JpbiA9IDB4ZmY7Ci0JCQloZGxjLT5kYXRhX2JpdHMgPSA4OwotCQkJaWYoaGRsYy0+Yml0X3NoaWZ0ID09IDgpewotCQkJCWhkbGMtPmNiaW4gPSAweDdlOwotCQkJCWhkbGMtPnN0YXRlID0gSERMQ19TRU5EX0ZJUlNUX0ZMQUc7Ci0JCQl9IGVsc2UgewotCQkJCSpkc3QrKyA9IGhkbGMtPmNiaW47Ci0JCQkJaGRsYy0+Yml0X3NoaWZ0ID0gaGRsYy0+ZGF0YV9iaXRzID0gMDsKLQkJCQlsZW4rKzsKLQkJCQlkc2l6ZSA9IDA7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCWlmKGhkbGMtPmRvX2FkYXB0NTYpewotCQkJaWYoaGRsYy0+ZGF0YV9iaXRzPT03KXsKLQkJCQloZGxjLT5jYmluIDw8PSAxOwotCQkJCWhkbGMtPmNiaW4rKzsKLQkJCQloZGxjLT5kYXRhX2JpdHMrKzsKLQkJCX0KLQkJfQotCQlpZihoZGxjLT5kYXRhX2JpdHM9PTgpewotCQkJKmRzdCsrID0gaGRsYy0+Y2JpbjsKLQkJCWhkbGMtPmRhdGFfYml0cyA9IDA7Ci0JCQlsZW4rKzsKLQkJCWRzaXplLS07Ci0JCX0KLQl9Ci0JKmNvdW50IC09IHNsZW47Ci0KLQlyZXR1cm4gbGVuOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX2hkbGMuaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaGRsYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTU0MzJmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfaGRsYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIERyaXZlciBmb3IgU1Q1NDgxIFVTQiBJU0ROIG1vZGVtCi0gKgotICogQXV0aG9yICAgICAgIEZyb2RlIElzYWtzZW4KLSAqIENvcHlyaWdodCAgICAyMDAxIGJ5IEZyb2RlIElzYWtzZW4gICAgICA8ZmlzYWtzZW5AYmV3YW4uY29tPgotICogICAgICAgICAgICAgIDIwMDEgYnkgS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+Ci0gKiAKLSAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCi0gKgotICovCi0KLSNpZm5kZWYgX19TVDU0ODFfSERMQ19IX18KLSNkZWZpbmUgX19TVDU0ODFfSERMQ19IX18KLQotc3RydWN0IGhkbGNfdmFycyB7Ci0gIAlpbnQgYml0X3NoaWZ0OyAKLQlpbnQgaGRsY19iaXRzMTsKLQlpbnQgZGF0YV9iaXRzOwotCWludCBmZmJpdF9zaGlmdDsgLy8gZW5jb2Rpbmcgb25seQotCWludCBzdGF0ZTsKLQlpbnQgZHN0cG9zOwotCi0JaW50IGRhdGFfcmVjZWl2ZWQ6MTsgLy8gc2V0IGlmIHRyYW5zZmVycmluZyBkYXRhCi0JaW50IGRjaGFubmVsOjE7IC8vIHNldCBpZiBEIGNoYW5uZWwgKHNlbmQgaWRsZSBpbnN0ZWFkIG9mIGZsYWdzKQotCWludCBkb19hZGFwdDU2OjE7IC8vIHNldCBpZiA1NksgYWRhcHRhdGlvbgotICAgICAgICBpbnQgZG9fY2xvc2luZzoxOyAvLyBzZXQgaWYgaW4gY2xvc2luZyBwaGFzZSAobmVlZCB0byBzZW5kIENSQyArIGZsYWcKLQotCXVuc2lnbmVkIHNob3J0IGNyYzsKLQotCXVuc2lnbmVkIGNoYXIgY2JpbjsgCi0JdW5zaWduZWQgY2hhciBzaGlmdF9yZWc7Ci0JdW5zaWduZWQgY2hhciBmZnZhbHVlOwotCQotfTsKLQotCi0vKgotICBUaGUgcmV0dXJuIHZhbHVlIGZyb20gaGRsY19kZWNvZGUgaXMKLSAgdGhlIGZyYW1lIGxlbmd0aCwgMCBpZiBubyBjb21wbGV0ZSBmcmFtZSB3YXMgZGVjb2RlZCwKLSAgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIKLSovCi0KLSNkZWZpbmUgSERMQ19GUkFNSU5HX0VSUk9SICAgICAxCi0jZGVmaW5lIEhETENfQ1JDX0VSUk9SICAgICAgICAgMgotI2RlZmluZSBIRExDX0xFTkdUSF9FUlJPUiAgICAgIDMKLQotdm9pZCAKLWhkbGNfcmN2X2luaXQoc3RydWN0IGhkbGNfdmFycyAqaGRsYywgaW50IGRvX2FkYXB0NTYpOwotCi1pbnQKLWhkbGNfZGVjb2RlKHN0cnVjdCBoZGxjX3ZhcnMgKmhkbGMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IHNsZW4saW50ICpjb3VudCwgCi0JICAgIHVuc2lnbmVkIGNoYXIgKmRzdCwgaW50IGRzaXplKTsKLQotdm9pZCAKLWhkbGNfb3V0X2luaXQoc3RydWN0IGhkbGNfdmFycyAqaGRsYyxpbnQgaXNfZF9jaGFubmVsLGludCBkb19hZGFwdDU2KTsKLQotaW50IAotaGRsY19lbmNvZGUoc3RydWN0IGhkbGNfdmFycyAqaGRsYyxjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsdW5zaWduZWQgc2hvcnQgc2xlbixpbnQgKmNvdW50LAotCSAgICB1bnNpZ25lZCBjaGFyICpkc3QsaW50IGRzaXplKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3N0NTQ4MV91c2IuYwppbmRleCAyMzY5MTgwLi5hYjYyMjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvc3Q1NDgxX3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zdDU0ODFfdXNiLmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAic3Q1NDgxLmgiCiAKK3N0YXRpYyBpbnQgc3Q1NDgxX2lzb2NfZmxhdHRlbihzdHJ1Y3QgdXJiICp1cmIpOworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBjb250cm9sIHBpcGUKICAqLwpAQCAtNTUsOSArNTcsOSBAQAogICogQXN5bmNocm9ub3VzIGVuZHBvaW50IDAgcmVxdWVzdCAoYXN5bmMgdmVyc2lvbiBvZiB1c2JfY29udHJvbF9tc2cpLgogICogVGhlIHJlcXVlc3Qgd2lsbCBiZSBxdWV1ZWQgdXAgaW4gYSBGSUZPIGlmIHRoZSBlbmRwb2ludCBpcyBidXN5LgogICovCi12b2lkIHVzYl9jdHJsX21zZyhzdHJ1Y3Qgc3Q1NDgxX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCSAgdTggcmVxdWVzdCwgdTggcmVxdWVzdHR5cGUsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAotCQkgIGN0cmxfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqY29udGV4dCkKK3N0YXRpYyB2b2lkIHVzYl9jdHJsX21zZyhzdHJ1Y3Qgc3Q1NDgxX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgdTggcmVxdWVzdCwgdTggcmVxdWVzdHR5cGUsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAorCQkJIGN0cmxfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqY29udGV4dCkKIHsKIAlzdHJ1Y3Qgc3Q1NDgxX2N0cmwgKmN0cmwgPSAmYWRhcHRlci0+Y3RybDsKIAlpbnQgd19pbmRleDsKQEAgLTU3MSw3ICs1NzMsNyBAQAogICogTWFrZSB0aGUgdHJhbnNmZXJfYnVmZmVyIGNvbnRpZ3VvdXMgYnkKICAqIGNvcHlpbmcgZnJvbSB0aGUgaXNvIGRlc2NyaXB0b3JzIGlmIG5lY2Vzc2FyeS4gCiAgKi8KLWludCBzdDU0ODFfaXNvY19mbGF0dGVuKHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyBpbnQgc3Q1NDgxX2lzb2NfZmxhdHRlbihzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKnBpcGQsKnBlbmQ7CiAJdW5zaWduZWQgY2hhciAqc3JjLCpkc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVpLmMKaW5kZXggMDgyNzI2ZC4uY2ViMGRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWkuYwpAQCAtNzQsNyArNzQsNyBAQAogCSJFVl9UMjAyIiwKIH07CiAKLXVuc2lnbmVkIGludAorc3RhdGljIHVuc2lnbmVkIGludAogcmFuZG9tX3JpKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZWludC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVpbnQuYwppbmRleCBlZjg5ODRjLi5hMmIxODE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZWludC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlaW50LmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogZXh0ZXJuIGNvbnN0IGNoYXIgKkNhcmRUeXBlW107CiAKLWNvbnN0IGNoYXIgKlRlbGVJbnRfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjE2LjIuNSAkIjsKK3N0YXRpYyBjb25zdCBjaGFyICpUZWxlSW50X3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xNi4yLjUgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKICNkZWZpbmUgYnl0ZWluKGFkZHIpIGluYihhZGRyKQpAQCAtMjAzLDcgKzIwMyw3IEBACiAJYWRkX3RpbWVyKCZjcy0+aHcuaGZjLnRpbWVyKTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHJlbGVhc2VfaW9fVGVsZUludChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJZGVsX3RpbWVyKCZjcy0+aHcuaGZjLnRpbWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYwppbmRleCA1ZWM1ZWMzLi4yYjdkZjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jCkBAIC0yMyw3ICsyMyw3IEBACiAKIGV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwogCi1jb25zdCBjaGFyICp0ZWxlczBfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjE1LjIuNCAkIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0ZWxlczBfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjE1LjIuNCAkIjsKIAogI2RlZmluZSBURUxFU19JT01FTV9TSVpFCTB4NDAwCiAjZGVmaW5lIGJ5dGVvdXQoYWRkcix2YWwpIG91dGIodmFsLGFkZHIpCkBAIC0xODMsNyArMTgzLDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiByZWxlYXNlX2lvX3RlbGVzMChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJaWYgKGNzLT5ody50ZWxlczAuY2ZnX3JlZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYwppbmRleCBjNWIxZjY1Li5hZGVhYWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAiaXNkbmwxLmgiCiAKIGV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwotY29uc3QgY2hhciAqdGVsZXMzX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xOS4yLjQgJCI7CitzdGF0aWMgY29uc3QgY2hhciAqdGVsZXMzX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4xOS4yLjQgJCI7CiAKICNkZWZpbmUgYnl0ZW91dChhZGRyLHZhbCkgb3V0Yih2YWwsYWRkcikKICNkZWZpbmUgYnl0ZWluKGFkZHIpIGluYihhZGRyKQpAQCAtMTU0LDcgKzE1NCw3IEBACiAJCXJlbGVhc2VfcmVnaW9uKGNzLT5ody50ZWxlczMuaHNjeFsxXSArIDMyLCAzMik7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiByZWxlYXNlX2lvX3RlbGVzMyhzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MpCiB7CiAJaWYgKGNzLT50eXAgPT0gSVNETl9DVFlQRV9URUxFU1BDTUNJQSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYwppbmRleCAwNjYxYzZjLi5lMmJiNGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXNwY2kuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiBleHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKLWNvbnN0IGNoYXIgKnRlbGVzcGNpX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMi4yMy4yLjMgJCI7CitzdGF0aWMgY29uc3QgY2hhciAqdGVsZXNwY2lfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjIzLjIuMyAkIjsKIAogI2RlZmluZSBaT1JBTl9QT19SUV9QRU4JMHgwMjAwMDAwMAogI2RlZmluZSBaT1JBTl9QT19XUgkweDAwODAwMDAwCkBAIC0yNTcsNyArMjU3LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiByZWxlYXNlX2lvX3RlbGVzcGNpKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKIHsKIAlpb3VubWFwKGNzLT5ody50ZWxlczAubWVtYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCmluZGV4IGQyYjZiOGUuLjdiYWY4ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC93NjY5Mi5jCkBAIC00MSw3ICs0MSw3IEBACiAKIGV4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOwogCi1jb25zdCBjaGFyICp3NjY5Ml9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMTguMi40ICQiOworc3RhdGljIGNvbnN0IGNoYXIgKnc2NjkyX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS4xOC4yLjQgJCI7CiAKICNkZWZpbmUgREJVU1lfVElNRVJfVkFMVUUgODAKIApAQCAtODgwLDcgKzg4MCw3IEBACiAJcmV0dXJuICgwKTsKIH0KIAotdm9pZCByZXNldFc2NjkyKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcykKK3N0YXRpYyB2b2lkIHJlc2V0VzY2OTIoc3RydWN0IElzZG5DYXJkU3RhdGUgKmNzKQogewogCWNzLT53cml0ZVc2NjkyKGNzLCBXX0RfQ1RMLCBXX0RfQ1RMX1NSU1QpOwogCW1kZWxheSgxMCk7CkBAIC05MDIsNyArOTAyLDcgQEAKIAl9CiB9CiAKLXZvaWQgX19pbml0IGluaXRXNjY5MihzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIGludCBwYXJ0KQorc3RhdGljIHZvaWQgX19pbml0IGluaXRXNjY5MihzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIGludCBwYXJ0KQogewogCWlmIChwYXJ0ICYgMSkgewogCQljcy0+c2V0c3RhY2tfZCA9IHNldHN0YWNrX1c2NjkyOwo=