ZGlmZiAtLWdpdCBhL3NyYy9oYW5ndWxpbi5jIGIvc3JjL2hhbmd1bGluLmMKaW5kZXggNTQwMTYxYS4uZDc5OTMwNSAxMDA2NDQKLS0tIGEvc3JjL2hhbmd1bGluLmMKKysrIGIvc3JjL2hhbmd1bGluLmMKQEAgLTk2LDkgKzk2LDcgQEAKICAqLwogCiAgICAgc3RhdGljIGludAotY29tZmNvbjModiwgYykKLSAgICBpbnQJdjsKLSAgICBpbnQgYzsKK2NvbWZjb24zKGludCB2LCBpbnQgYykKIHsKICAgICBpZiAodiA9PSAyICYmIGMgPT0gMikKIAlyZXR1cm4gMzsKQEAgLTExOCw5ICsxMTYsNyBAQAogICovCiAKICAgICBzdGF0aWMgaW50Ci1jb212b3czKHYsIGMpCi0gICAgaW50IHY7Ci0gICAgaW50IGM7Citjb212b3czKGludCB2LCBpbnQgYykKIHsKICAgICBzd2l0Y2ggKHYpCiAgICAgewpAQCAtMTU5LDkgKzE1NSw3IEBACiAgKi8KIAogICAgIHN0YXRpYyBpbnQKLWNvbWNvbjMoaywgYykKLSAgICBpbnQgazsKLSAgICBpbnQgYzsKK2NvbWNvbjMoaW50IGssIGludCBjKQogewogICAgIHN3aXRjaCAoaykKICAgICB7CkBAIC0yMTcsOCArMjExLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAgICAgc3RhdGljIGludAota2luZF90YWJsZV9mb3JfMihjKQotICAgIGludCBjOwora2luZF90YWJsZV9mb3JfMihpbnQgYykKIHsKICAgICBzdGF0aWMgY2hhcl91IHRhYmxlW10gPQogICAgIHsKQEAgLTI0MSw4ICsyMzQsNyBAQAogICogsOGw+jogw8q8usDMIL7GtM+46SAwIChJZiBpdCBpcyBub3QgaW5pdGlhbCBzb3VuZCwgcmV0dXJuIDApLgogICovCiAgICAgc3RhdGljIGludAotZmNvbihjKQotICAgIGludCBjOworZmNvbihpbnQgYykKIHsKICAgICBzdGF0aWMgY2hhcl91IHRhYmxlW10gPQogICAgIHsKQEAgLTI2Niw4ICsyNTgsNyBAQAogICogsOGw+jogwd+8usDMIL7GtM+46SAwIChJZiBpdCBpcyBub3QgbWVkaWFsIHZvd2VsLCByZXR1cm4gMCkuCiAgKi8KICAgICBzdGF0aWMgaW50Ci12b3coYykKLSAgICBpbnQgYzsKK3ZvdyhpbnQgYykKIHsKICAgICBzdGF0aWMgY2hhcl91IHRhYmxlW10gPQogICAgIHsKQEAgLTI4OSw4ICsyODAsNyBAQAogICogsOGw+jogud7Ep8DMIL7GtM+46SAwIChJZiBub3QgcHJvcCwgcmV0dXJuIDApCiAgKi8KICAgICBzdGF0aWMgaW50Ci1sY29uKGMpCi0gICAgaW50IGM7CitsY29uKGludCBjKQogewogICAgIHN0YXRpYyBjaGFyX3UgdGFibGVbXSA9CiAgICAgewpAQCAtMzEyLDkgKzMwMiw3IEBACiAgKi8KIAogICAgIHN0YXRpYyBpbnQKLWNvbWNvbjIoaywgYykKLSAgICBpbnQgazsKLSAgICBpbnQgYzsKK2NvbWNvbjIoaW50IGssIGludCBjKQogewogICAgIHN3aXRjaCAoaykKICAgICB7CkBAIC0zNjksOSArMzU3LDcgQEAKICAqLwogCiAgICAgc3RhdGljIGludAotY29tdm93Mih2LCBjKQotICAgIGludCB2OwotICAgIGludCBjOworY29tdm93MihpbnQgdiwgaW50IGMpCiB7CiAgICAgc3dpdGNoICh2KQogICAgIHsKQEAgLTQwOCwyNyArMzk0LDI2IEBACiB9CiAKICAgICBpbnQKLWhhbmd1bF9pbnB1dF9zdGF0ZV9nZXQoKQoraGFuZ3VsX2lucHV0X3N0YXRlX2dldCh2b2lkKQogewogICAgIHJldHVybiBoYW5ndWxfaW5wdXRfc3RhdGU7CiB9CiAKICAgICB2b2lkCi1oYW5ndWxfaW5wdXRfc3RhdGVfc2V0KHN0YXRlKQotICAgIGludCBzdGF0ZTsKK2hhbmd1bF9pbnB1dF9zdGF0ZV9zZXQoaW50IHN0YXRlKQogewogICAgIGhhbmd1bF9pbnB1dF9zdGF0ZSA9IHN0YXRlOwogICAgIGhhbmd1bF9pbnB1dF9jbGVhcigpOwogfQogCiAgICAgaW50Ci1pbV9nZXRfc3RhdHVzKCkKK2ltX2dldF9zdGF0dXModm9pZCkKIHsKICAgICByZXR1cm4gaGFuZ3VsX2lucHV0X3N0YXRlX2dldCgpOwogfQogCiAgICAgdm9pZAotaGFuZ3VsX2lucHV0X3N0YXRlX3RvZ2dsZSgpCitoYW5ndWxfaW5wdXRfc3RhdGVfdG9nZ2xlKHZvaWQpCiB7CiAgICAgaWYgKGhhbmd1bF9pbnB1dF9zdGF0ZV9nZXQoKSkKICAgICB7CkBAIC00NTIsOSArNDM3LDcgQEAKIH0KIAogICAgIHN0YXRpYyBpbnQKLWhhbmd1bF9hdXRvbWF0YTIoYnVmLCBjKQotICAgIGNoYXJfdSAgKmJ1ZjsKLSAgICBpbnRfdSAgICpjOworaGFuZ3VsX2F1dG9tYXRhMihjaGFyX3UgKmJ1ZiwgaW50X3UgKmMpCiB7CiAgICAgaW50IHQsdDI7CiAKQEAgLTYxNCw5ICs1OTcsNyBAQAogfQogCiAgICAgc3RhdGljIGludAotaGFuZ3VsX2F1dG9tYXRhMyhidWYsIGMpCi0gICAgY2hhcl91ICAqYnVmOwotICAgIGludF91ICAgKmM7CitoYW5ndWxfYXV0b21hdGEzKGNoYXJfdSAqYnVmLCBpbnRfdSAqYykKIHsKICAgICBpbnQgdCwgdDI7CiAKQEAgLTcyNSw3ICs3MDYsNyBAQAogfQogCiAgICAgdm9pZAotaGFuZ3VsX2tleWJvYXJkX3NldCgpCitoYW5ndWxfa2V5Ym9hcmRfc2V0KHZvaWQpCiB7CiAgICAgaW50CSAgICBrZXlib2FyZDsKICAgICBjaGFyICAgICpzOwpAQCAtNzQ2LDkgKzcyNyw3IEBACiB9CiAKICAgICBpbnQKLWhhbmd1bF9pbnB1dF9wcm9jZXNzKHMsIGxlbikKLSAgICBjaGFyX3UgICpzOwotICAgIGludAkgICAgbGVuOworaGFuZ3VsX2lucHV0X3Byb2Nlc3MoY2hhcl91ICpzLCBpbnQgbGVuKQogewogICAgIGludCBuOwogICAgIHVuc2lnbmVkIGludCBjOwpAQCAtODMxLDcgKzgxMCw3IEBACiB9CiAKICAgICB2b2lkCi1oYW5ndWxfaW5wdXRfY2xlYXIoKQoraGFuZ3VsX2lucHV0X2NsZWFyKHZvaWQpCiB7CiAgICAgc3AgPSAwOwogICAgIGYgPSBGX05VTEw7CkBAIC0xNTAzLDExICsxNDgyLDExIEBACiB9OwogCiAgICAgc3RhdGljIHZvaWQKLWNvbnZlcnRfa3NfdG9fMyhzcmMsIGZwLCBtcCwgbHApCi0gICAgY29uc3QgY2hhcl91ICAgICpzcmM7Ci0gICAgaW50CQkgICAgKmZwOwotICAgIGludAkJICAgICptcDsKLSAgICBpbnQJCSAgICAqbHA7Citjb252ZXJ0X2tzX3RvXzMoCisgICAgY29uc3QgY2hhcl91ICAgICpzcmMsCisgICAgaW50CQkgICAgKmZwLAorICAgIGludAkJICAgICptcCwKKyAgICBpbnQJCSAgICAqbHApCiB7CiAgICAgaW50IGggPSAqc3JjOwogICAgIGludCBsb3cgPSAqKHNyYyArIDEpOwpAQCAtMTUzOSwxMSArMTUxOCwxMSBAQAogfQogCiAgICAgc3RhdGljIGludAotY29udmVydF8zX3RvX2tzKGZ2LCBtdiwgbHYsIGRlcykKLSAgICBpbnQJICAgIGZ2OwotICAgIGludAkgICAgbXY7Ci0gICAgaW50CSAgICBsdjsKLSAgICBjaGFyX3UgICpkZXM7Citjb252ZXJ0XzNfdG9fa3MoCisgICAgaW50CSAgICBmdiwKKyAgICBpbnQJICAgIG12LAorICAgIGludAkgICAgbHYsCisgICAgY2hhcl91ICAqZGVzKQogewogICAgIGNoYXJfdSBrZXlbM107CiAgICAgcmVnaXN0ZXIgaW50IGhpLCBsbywgbWkgPSAwLCByZXN1bHQsIGZvdW5kOwpAQCAtMTYyMSw5ICsxNjAwLDcgQEAKIH0KIAogICAgIGNoYXJfdSAqCi1oYW5ndWxfc3RyaW5nX2NvbnZlcnQoYnVmLCBwX2xlbikKLSAgICBjaGFyX3UgICpidWY7Ci0gICAgaW50CSAgICAqcF9sZW47CitoYW5ndWxfc3RyaW5nX2NvbnZlcnQoY2hhcl91ICpidWYsIGludCAqcF9sZW4pCiB7CiAgICAgY2hhcl91ICp0bXBidWYgPSBOVUxMOwogICAgIHZpbWNvbnZfVCB2YzsKQEAgLTE2NDIsOCArMTYxOSw3IEBACiB9CiAKICAgICBjaGFyX3UgKgotaGFuZ3VsX2NvbXBvc2luZ19idWZmZXJfZ2V0KHBfbGVuKQotICAgIGludAkgICAgKnBfbGVuOworaGFuZ3VsX2NvbXBvc2luZ19idWZmZXJfZ2V0KGludCAqcF9sZW4pCiB7CiAgICAgY2hhcl91ICp0bXBidWYgPSBOVUxMOwogCg==