SW5kZXg6IENIQU5HRVMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gQ0hBTkdFUwkocmV2aXNpb24gMTU1MzQ0KQorKysgQ0hBTkdFUwkocmV2aXNpb24gMTU1MzQ1KQpAQCAtMiw2ICsyLDkgQEAKIAogICBbUmVtb3ZlIGVudHJpZXMgdG8gdGhlIGN1cnJlbnQgMi4wIHNlY3Rpb24gYmVsb3csIHdoZW4gYmFja3BvcnRlZF0KIAorICAqKSBDb3JyZWN0bHkgZXhwb3J0IGFsbCBtb2RfZGF2IHB1YmxpYyBmdW5jdGlvbnMuCisgICAgIFtCcmFua28gyGliZWogPGJyYW5lIHhiYy5udT5dCisKIENoYW5nZXMgd2l0aCBBcGFjaGUgMi4xLjMKIAogICAqKSBjb3JlX2lucHV0X2ZpbHRlcjogTW92ZSBidWNrZXRzIHRvIGEgcGVyc2lzdGVudCBicmlnYWRlIGluc3RlYWQgb2YKSW5kZXg6IG1vZHVsZXMvZGF2L21haW4vbW9kX2Rhdi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1vZHVsZXMvZGF2L21haW4vbW9kX2Rhdi5oCShyZXZpc2lvbiAxNTUzNDQpCisrKyBtb2R1bGVzL2Rhdi9tYWluL21vZF9kYXYuaAkocmV2aXNpb24gMTU1MzQ1KQpAQCAtNDY0LDggKzQ2NCw4IEBACiB9IGRhdl9sb29rdXBfcmVzdWx0OwogCiAKLWRhdl9sb29rdXBfcmVzdWx0IGRhdl9sb29rdXBfdXJpKGNvbnN0IGNoYXIgKnVyaSwgcmVxdWVzdF9yZWMgKnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXVzdF9iZV9hYnNvbHV0ZSk7CitEQVZfREVDTEFSRShkYXZfbG9va3VwX3Jlc3VsdCkgZGF2X2xvb2t1cF91cmkoY29uc3QgY2hhciAqdXJpLCByZXF1ZXN0X3JlYyAqciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXVzdF9iZV9hYnNvbHV0ZSk7CiAKIC8qIGRlZmluZXMgdHlwZSBvZiBwcm9wZXJ0eSBpbmZvIGEgcHJvdmlkZXIgaXMgdG8gcmV0dXJuICovCiB0eXBlZGVmIGVudW0gewpAQCAtNDkyLDEwICs0OTIsMTIgQEAKICNkZWZpbmUgREFWX1NUWUxFX1JGQzgyMiAgICAgICAgMgogI2RlZmluZSBEQVZfVElNRUJVRl9TSVpFICAgICAgICAzMAogCi1pbnQgZGF2X2dldF9kZXB0aChyZXF1ZXN0X3JlYyAqciwgaW50IGRlZl9kZXB0aCk7CitEQVZfREVDTEFSRShpbnQpIGRhdl9nZXRfZGVwdGgocmVxdWVzdF9yZWMgKnIsIGludCBkZWZfZGVwdGgpOwogCi1pbnQgZGF2X3ZhbGlkYXRlX3Jvb3QoY29uc3QgYXByX3htbF9kb2MgKmRvYywgY29uc3QgY2hhciAqdGFnbmFtZSk7Ci1hcHJfeG1sX2VsZW0gKmRhdl9maW5kX2NoaWxkKGNvbnN0IGFwcl94bWxfZWxlbSAqZWxlbSwgY29uc3QgY2hhciAqdGFnbmFtZSk7CitEQVZfREVDTEFSRShpbnQpIGRhdl92YWxpZGF0ZV9yb290KGNvbnN0IGFwcl94bWxfZG9jICpkb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRhZ25hbWUpOworREFWX0RFQ0xBUkUoYXByX3htbF9lbGVtICopIGRhdl9maW5kX2NoaWxkKGNvbnN0IGFwcl94bWxfZWxlbSAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0YWduYW1lKTsKIAogLyogZ2F0aGVyIHVwIGFsbCB0aGUgQ0RBVEEgaW50byBhIHNpbmdsZSBzdHJpbmcgKi8KIERBVl9ERUNMQVJFKGNvbnN0IGNoYXIgKikgZGF2X3htbF9nZXRfY2RhdGEoY29uc3QgYXByX3htbF9lbGVtICplbGVtLCBhcHJfcG9vbF90ICpwb29sLApAQCAtNjMxLDE1ICs2MzMsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdF9yZWMgKnIsIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9wcm9wX2luc2VydCB3aGF0LCBhcHJfdGV4dF9oZWFkZXIgKnBoZHIpKQogCi1jb25zdCBkYXZfaG9va3NfbG9ja3MgKmRhdl9nZXRfbG9ja19ob29rcyhyZXF1ZXN0X3JlYyAqcik7Ci1jb25zdCBkYXZfaG9va3NfcHJvcGRiICpkYXZfZ2V0X3Byb3BkYl9ob29rcyhyZXF1ZXN0X3JlYyAqcik7Ci1jb25zdCBkYXZfaG9va3NfdnNuICpkYXZfZ2V0X3Zzbl9ob29rcyhyZXF1ZXN0X3JlYyAqcik7Ci1jb25zdCBkYXZfaG9va3NfYmluZGluZyAqZGF2X2dldF9iaW5kaW5nX2hvb2tzKHJlcXVlc3RfcmVjICpyKTsKLWNvbnN0IGRhdl9ob29rc19zZWFyY2ggKmRhdl9nZXRfc2VhcmNoX2hvb2tzKHJlcXVlc3RfcmVjICpyKTsKK0RBVl9ERUNMQVJFKGNvbnN0IGRhdl9ob29rc19sb2NrcyAqKSBkYXZfZ2V0X2xvY2tfaG9va3MocmVxdWVzdF9yZWMgKnIpOworREFWX0RFQ0xBUkUoY29uc3QgZGF2X2hvb2tzX3Byb3BkYiAqKSBkYXZfZ2V0X3Byb3BkYl9ob29rcyhyZXF1ZXN0X3JlYyAqcik7CitEQVZfREVDTEFSRShjb25zdCBkYXZfaG9va3NfdnNuICopIGRhdl9nZXRfdnNuX2hvb2tzKHJlcXVlc3RfcmVjICpyKTsKK0RBVl9ERUNMQVJFKGNvbnN0IGRhdl9ob29rc19iaW5kaW5nICopIGRhdl9nZXRfYmluZGluZ19ob29rcyhyZXF1ZXN0X3JlYyAqcik7CitEQVZfREVDTEFSRShjb25zdCBkYXZfaG9va3Nfc2VhcmNoICopIGRhdl9nZXRfc2VhcmNoX2hvb2tzKHJlcXVlc3RfcmVjICpyKTsKIAogREFWX0RFQ0xBUkUodm9pZCkgZGF2X3JlZ2lzdGVyX3Byb3ZpZGVyKGFwcl9wb29sX3QgKnAsIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF2X3Byb3ZpZGVyICpob29rcyk7Ci1jb25zdCBkYXZfcHJvdmlkZXIgKiBkYXZfbG9va3VwX3Byb3ZpZGVyKGNvbnN0IGNoYXIgKm5hbWUpOworREFWX0RFQ0xBUkUoY29uc3QgZGF2X3Byb3ZpZGVyICopIGRhdl9sb29rdXBfcHJvdmlkZXIoY29uc3QgY2hhciAqbmFtZSk7CiAKIAogLyogIyMjIGRlcHJlY2F0ZWQgKi8KQEAgLTcxMiw3ICs3MTQsOCBAQAogICAgIHN0cnVjdCBkYXZfbG9ja3Rva2VuX2xpc3QgKm5leHQ7CiB9IGRhdl9sb2NrdG9rZW5fbGlzdDsKIAotZGF2X2Vycm9yICogZGF2X2dldF9sb2NrdG9rZW5fbGlzdChyZXF1ZXN0X3JlYyAqciwgZGF2X2xvY2t0b2tlbl9saXN0ICoqbHRsKTsKK0RBVl9ERUNMQVJFKGRhdl9lcnJvciAqKSBkYXZfZ2V0X2xvY2t0b2tlbl9saXN0KHJlcXVlc3RfcmVjICpyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X2xvY2t0b2tlbl9saXN0ICoqbHRsKTsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODg1LDIyICs4ODgsMjcgQEAKIERBVl9ERUNMQVJFKGludCkgZGF2X2dldF9saXZlcHJvcF9uc19pbmRleChjb25zdCBjaGFyICp1cmkpOwogCiAvKiAjIyMgZG9jY28gKi8KLWludCBkYXZfZ2V0X2xpdmVwcm9wX25zX2NvdW50KHZvaWQpOworREFWX0RFQ0xBUkUoaW50KSBkYXZfZ2V0X2xpdmVwcm9wX25zX2NvdW50KHZvaWQpOwogCiAvKiAjIyMgZG9jY28gKi8KLXZvaWQgZGF2X2FkZF9hbGxfbGl2ZXByb3BfeG1sbnMoYXByX3Bvb2xfdCAqcCwgYXByX3RleHRfaGVhZGVyICpwaGRyKTsKK0RBVl9ERUNMQVJFKHZvaWQpIGRhdl9hZGRfYWxsX2xpdmVwcm9wX3htbG5zKGFwcl9wb29sX3QgKnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfdGV4dF9oZWFkZXIgKnBoZHIpOwogCiAvKgogKiogVGhlIGZvbGxvd2luZyB0aHJlZSBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgbW9kX2RhdidzIGludGVybmFsIGhhbmRsaW5nCiAqKiBmb3IgdGhlIGNvcmUgV2ViREFWIHByb3BlcnRpZXMuIFRoZXkgYXJlIG5vdCBwYXJ0IG9mIG1vZF9kYXYncyBBUEkuCiAqLwotaW50IGRhdl9jb3JlX2ZpbmRfbGl2ZXByb3AoY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5zX3VyaSwgY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9ob29rc19saXZlcHJvcCAqKmhvb2tzKTsKLXZvaWQgZGF2X2NvcmVfaW5zZXJ0X2FsbF9saXZlcHJvcHMocmVxdWVzdF9yZWMgKnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9wcm9wX2luc2VydCB3aGF0LCBhcHJfdGV4dF9oZWFkZXIgKnBoZHIpOwotdm9pZCBkYXZfY29yZV9yZWdpc3Rlcl91cmlzKGFwcl9wb29sX3QgKnApOworREFWX0RFQ0xBUkVfTk9OU1REKGludCkgZGF2X2NvcmVfZmluZF9saXZlcHJvcCgKKyAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAorICAgIGNvbnN0IGNoYXIgKm5zX3VyaSwKKyAgICBjb25zdCBjaGFyICpuYW1lLAorICAgIGNvbnN0IGRhdl9ob29rc19saXZlcHJvcCAqKmhvb2tzKTsKK0RBVl9ERUNMQVJFX05PTlNURCh2b2lkKSBkYXZfY29yZV9pbnNlcnRfYWxsX2xpdmVwcm9wcygKKyAgICByZXF1ZXN0X3JlYyAqciwKKyAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAorICAgIGRhdl9wcm9wX2luc2VydCB3aGF0LAorICAgIGFwcl90ZXh0X2hlYWRlciAqcGhkcik7CitEQVZfREVDTEFSRV9OT05TVEQodm9pZCkgZGF2X2NvcmVfcmVnaXN0ZXJfdXJpcyhhcHJfcG9vbF90ICpwKTsKIAogCiAvKgpAQCAtMTEyNiw3ICsxMTM0LDcgQEAKIC8qIFVzZWQgdG8gcmVwcmVzZW50IGEgVGltZW91dCBoZWFkZXIgb2YgIkluZmluaXR5IiAqLwogI2RlZmluZSBEQVZfVElNRU9VVF9JTkZJTklURSAwCiAKLXRpbWVfdCBkYXZfZ2V0X3RpbWVvdXQocmVxdWVzdF9yZWMgKnIpOworREFWX0RFQ0xBUkUodGltZV90KSBkYXZfZ2V0X3RpbWVvdXQocmVxdWVzdF9yZWMgKnIpOwogCiAvKgogKiogT3BhcXVlLCBwcm92aWRlci1zcGVjaWZpYyBpbmZvcm1hdGlvbiBmb3IgYSBsb2NrIGRhdGFiYXNlLgpAQCAtMTIyMSwzNCArMTIyOSw0MCBAQAogfSBkYXZfbG9jazsKIAogLyogUHJvcGVydHktcmVsYXRlZCBwdWJsaWMgbG9jayBmdW5jdGlvbnMgKi8KLWNvbnN0IGNoYXIgKmRhdl9sb2NrX2dldF9hY3RpdmVsb2NrKHJlcXVlc3RfcmVjICpyLCBkYXZfbG9jayAqbG9ja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfYnVmZmVyICpwYnVmKTsKK0RBVl9ERUNMQVJFKGNvbnN0IGNoYXIgKilkYXZfbG9ja19nZXRfYWN0aXZlbG9jayhyZXF1ZXN0X3JlYyAqciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9jayAqbG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X2J1ZmZlciAqcGJ1Zik7CiAKIC8qIExvY2tEQi1yZWxhdGVkIHB1YmxpYyBsb2NrIGZ1bmN0aW9ucyAqLwotZGF2X2Vycm9yICogZGF2X2xvY2tfcGFyc2VfbG9ja2luZm8ocmVxdWVzdF9yZWMgKnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc3JvdWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X2xvY2tkYiAqbG9ja2RiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXByX3htbF9kb2MgKmRvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9sb2NrICoqbG9ja19yZXF1ZXN0KTsKLWludCBkYXZfdW5sb2NrKHJlcXVlc3RfcmVjICpyLCBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAotICAgICAgICAgICAgICAgY29uc3QgZGF2X2xvY2t0b2tlbiAqbG9ja3Rva2VuKTsKLWRhdl9lcnJvciAqIGRhdl9hZGRfbG9jayhyZXF1ZXN0X3JlYyAqciwgY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9ja2RiICpsb2NrZGIsIGRhdl9sb2NrICpyZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9yZXNwb25zZSAqKnJlc3BvbnNlKTsKLWRhdl9lcnJvciAqIGRhdl9ub3RpZnlfY3JlYXRlZChyZXF1ZXN0X3JlYyAqciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9ja2RiICpsb2NrZGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzb3VyY2Vfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlcHRoKTsKK0RBVl9ERUNMQVJFKGRhdl9lcnJvciAqKSBkYXZfbG9ja19wYXJzZV9sb2NraW5mbyhyZXF1ZXN0X3JlYyAqciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc3JvdWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9sb2NrZGIgKmxvY2tkYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHJfeG1sX2RvYyAqZG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9sb2NrICoqbG9ja19yZXF1ZXN0KTsKK0RBVl9ERUNMQVJFKGludCkgZGF2X3VubG9jayhyZXF1ZXN0X3JlYyAqciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9sb2NrdG9rZW4gKmxvY2t0b2tlbik7CitEQVZfREVDTEFSRShkYXZfZXJyb3IgKikgZGF2X2FkZF9sb2NrKHJlcXVlc3RfcmVjICpyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9ja2RiICpsb2NrZGIsIGRhdl9sb2NrICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfcmVzcG9uc2UgKipyZXNwb25zZSk7CitEQVZfREVDTEFSRShkYXZfZXJyb3IgKikgZGF2X25vdGlmeV9jcmVhdGVkKHJlcXVlc3RfcmVjICpyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9ja2RiICpsb2NrZGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNvdXJjZV9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlcHRoKTsKIAogREFWX0RFQ0xBUkUoZGF2X2Vycm9yKikgZGF2X2xvY2tfcXVlcnkoZGF2X2xvY2tkYiAqbG9ja2RiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9jayAqKmxvY2tzKTsKIAotZGF2X2Vycm9yICogZGF2X3ZhbGlkYXRlX3JlcXVlc3QocmVxdWVzdF9yZWMgKnIsIGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVwdGgsIGRhdl9sb2NrdG9rZW4gKmxvY2t0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9yZXNwb25zZSAqKnJlc3BvbnNlLCBpbnQgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9ja2RiICpsb2NrZGIpOworREFWX0RFQ0xBUkUoZGF2X2Vycm9yICopIGRhdl92YWxpZGF0ZV9yZXF1ZXN0KHJlcXVlc3RfcmVjICpyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9sb2NrdG9rZW4gKmxvY2t0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfcmVzcG9uc2UgKipyZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X2xvY2tkYiAqbG9ja2RiKTsKIC8qCiAqKiBmbGFnczoKICoqICAgIDB4MEYgLS0gcmVzZXJ2ZWQgZm9yIDxkYXZfbG9ja19zY29wZT4gdmFsdWVzCkBAIC0xMjYzLDcgKzEyNzcsOCBAQAogI2RlZmluZSBEQVZfVkFMSURBVEVfSVNfUEFSRU5UICAweDAxMDAgIC8qIGZvciBpbnRlcm5hbCB1c2UgKi8KIAogLyogTG9jay1udWxsIHJlbGF0ZWQgcHVibGljIGxvY2sgZnVuY3Rpb25zICovCi1pbnQgZGF2X2dldF9yZXNvdXJjZV9zdGF0ZShyZXF1ZXN0X3JlYyAqciwgY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSk7CitEQVZfREVDTEFSRShpbnQpIGRhdl9nZXRfcmVzb3VyY2Vfc3RhdGUocmVxdWVzdF9yZWMgKnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSk7CiAKIC8qIExvY2sgcHJvdmlkZXIgaG9va3MuIExvY2tpbmcgaXMgb3B0aW9uYWwsIHNvIHRoZXJlIG1heSBiZSBubwogICogbG9jayBwcm92aWRlciBmb3IgYSBnaXZlbiByZXBvc2l0b3J5LgpAQCAtMTQ4NCw3ICsxNDk5LDcgQEAKIHR5cGVkZWYgc3RydWN0IGRhdl9wcm9wZGIgZGF2X3Byb3BkYjsKIAogCi1kYXZfZXJyb3IgKmRhdl9vcGVuX3Byb3BkYigKK0RBVl9ERUNMQVJFKGRhdl9lcnJvciAqKSBkYXZfb3Blbl9wcm9wZGIoCiAgICAgcmVxdWVzdF9yZWMgKnIsCiAgICAgZGF2X2xvY2tkYiAqbG9ja2RiLAogICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCkBAIC0xNDkyLDE3ICsxNTA3LDE3IEBACiAgICAgYXByX2FycmF5X2hlYWRlcl90ICpuc194bGF0ZSwKICAgICBkYXZfcHJvcGRiICoqcHJvcGRiKTsKIAotdm9pZCBkYXZfY2xvc2VfcHJvcGRiKGRhdl9wcm9wZGIgKmRiKTsKK0RBVl9ERUNMQVJFKHZvaWQpIGRhdl9jbG9zZV9wcm9wZGIoZGF2X3Byb3BkYiAqZGIpOwogCi1kYXZfZ2V0X3Byb3BzX3Jlc3VsdCBkYXZfZ2V0X3Byb3BzKAorREFWX0RFQ0xBUkUoZGF2X2dldF9wcm9wc19yZXN1bHQpIGRhdl9nZXRfcHJvcHMoCiAgICAgZGF2X3Byb3BkYiAqZGIsCiAgICAgYXByX3htbF9kb2MgKmRvYyk7CiAKLWRhdl9nZXRfcHJvcHNfcmVzdWx0IGRhdl9nZXRfYWxscHJvcHMoCitEQVZfREVDTEFSRShkYXZfZ2V0X3Byb3BzX3Jlc3VsdCkgZGF2X2dldF9hbGxwcm9wcygKICAgICBkYXZfcHJvcGRiICpkYiwKICAgICBkYXZfcHJvcF9pbnNlcnQgd2hhdCk7CiAKLXZvaWQgZGF2X2dldF9saXZlcHJvcF9zdXBwb3J0ZWQoCitEQVZfREVDTEFSRSh2b2lkKSBkYXZfZ2V0X2xpdmVwcm9wX3N1cHBvcnRlZCgKICAgICBkYXZfcHJvcGRiICpwcm9wZGIsCiAgICAgY29uc3QgY2hhciAqbnNfdXJpLAogICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLApAQCAtMTU2NywxMCArMTU4MiwxMCBAQAogCiB9IGRhdl9wcm9wX2N0eDsKIAotdm9pZCBkYXZfcHJvcF92YWxpZGF0ZShkYXZfcHJvcF9jdHggKmN0eCk7Ci12b2lkIGRhdl9wcm9wX2V4ZWMoZGF2X3Byb3BfY3R4ICpjdHgpOwotdm9pZCBkYXZfcHJvcF9jb21taXQoZGF2X3Byb3BfY3R4ICpjdHgpOwotdm9pZCBkYXZfcHJvcF9yb2xsYmFjayhkYXZfcHJvcF9jdHggKmN0eCk7CitEQVZfREVDTEFSRV9OT05TVEQodm9pZCkgZGF2X3Byb3BfdmFsaWRhdGUoZGF2X3Byb3BfY3R4ICpjdHgpOworREFWX0RFQ0xBUkVfTk9OU1REKHZvaWQpIGRhdl9wcm9wX2V4ZWMoZGF2X3Byb3BfY3R4ICpjdHgpOworREFWX0RFQ0xBUkVfTk9OU1REKHZvaWQpIGRhdl9wcm9wX2NvbW1pdChkYXZfcHJvcF9jdHggKmN0eCk7CitEQVZfREVDTEFSRV9OT05TVEQodm9pZCkgZGF2X3Byb3Bfcm9sbGJhY2soZGF2X3Byb3BfY3R4ICpjdHgpOwogCiAjZGVmaW5lIERBVl9QUk9QX0NUWF9IQVNfRVJSKGRwYykgICgoZHBjKS5lcnIgJiYgKGRwYykuZXJyLT5zdGF0dXMgPj0gMzAwKQogCkBAIC0xOTMzLDkgKzE5NDgsOSBAQAogICogSWYgdGhlcmUgd2VyZSBhbnkgaGVhZGVycyBpbiB0aGUgcmVxdWVzdCB3aGljaCByZXF1aXJlIGEgVmFyeSBoZWFkZXIKICAqIGluIHRoZSByZXNwb25zZSwgYWRkIGl0LgogICovCi12b2lkIGRhdl9hZGRfdmFyeV9oZWFkZXIocmVxdWVzdF9yZWMgKmluX3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X3JlYyAqb3V0X3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlKTsKK0RBVl9ERUNMQVJFKHZvaWQpIGRhdl9hZGRfdmFyeV9oZWFkZXIocmVxdWVzdF9yZWMgKmluX3JlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9yZWMgKm91dF9yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UpOwogCiAvKgogKiogRmxhZ3Mgc3BlY2lmeWluZyBhdXRvLXZlcnNpb25pbmcgYmVoYXZpb3IsIHJldHVybmVkIGJ5CkBAIC0xOTk0LDcgKzIwMDksNyBAQAogICogdG8gcmVzdG9yZSBib3RoIHBhcmVudCBhbmQgY2hpbGQgcmVzb3VyY2VzIHRvIHRoZSBzdGF0ZSB0aGV5IHdlcmUgaW4KICAqIGJlZm9yZSB0aGUgYXV0by12ZXJzaW9uaW5nIG9wZXJhdGlvbnMgb2NjdXJyZWQuCiAgKi8KLWRhdl9lcnJvciAqZGF2X2F1dG9fY2hlY2tvdXQoCitEQVZfREVDTEFSRShkYXZfZXJyb3IgKikgZGF2X2F1dG9fY2hlY2tvdXQoCiAgICAgcmVxdWVzdF9yZWMgKnIsCiAgICAgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKICAgICBpbnQgcGFyZW50X29ubHksCkBAIC0yMDE1LDcgKzIwMzAsNyBAQAogICogd2FzIGNoZWNrZWQgb3V0IChpLmUuIHRoZSBwYXJlbnRfb25seSB3YXMgIT0gMCBpbiB0aGUKICAqIGRhdl9hdXRvX2NoZWNrb3V0IGNhbGwpLgogICovCi1kYXZfZXJyb3IgKmRhdl9hdXRvX2NoZWNraW4oCitEQVZfREVDTEFSRShkYXZfZXJyb3IgKikgZGF2X2F1dG9fY2hlY2tpbigKICAgICByZXF1ZXN0X3JlYyAqciwKICAgICBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAogICAgIGludCB1bmRvLApAQCAtMjM5MSw3ICsyNDA2LDcgQEAKICovCiAKIC8qIGZldGNoIHRoZSAiTGltaXRYTUxSZXF1ZXN0Qm9keSIgaW4gZm9yY2UgZm9yIHRoaXMgcmVzb3VyY2UgKi8KLWFwcl9zaXplX3QgZGF2X2dldF9saW1pdF94bWxfYm9keShjb25zdCByZXF1ZXN0X3JlYyAqcik7CitEQVZfREVDTEFSRShhcHJfc2l6ZV90KSBkYXZfZ2V0X2xpbWl0X3htbF9ib2R5KGNvbnN0IHJlcXVlc3RfcmVjICpyKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGludCBwcm9waWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXZlIHByb3BlcnR5IElEICovCkluZGV4OiBtb2R1bGVzL2Rhdi9tYWluL2xpdmVwcm9wLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbW9kdWxlcy9kYXYvbWFpbi9saXZlcHJvcC5jCShyZXZpc2lvbiAxNTUzNDQpCisrKyBtb2R1bGVzL2Rhdi9tYWluL2xpdmVwcm9wLmMJKHJldmlzaW9uIDE1NTM0NSkKQEAgLTU4LDEyICs1OCwxMyBAQAogICAgIHJldHVybiAoaW50KWFwcl9oYXNoX2dldChkYXZfbGl2ZXByb3BfdXJpcywgdXJpLCBBUFJfSEFTSF9LRVlfU1RSSU5HKTsKIH0KIAotaW50IGRhdl9nZXRfbGl2ZXByb3BfbnNfY291bnQodm9pZCkKK0RBVl9ERUNMQVJFKGludCkgZGF2X2dldF9saXZlcHJvcF9uc19jb3VudCh2b2lkKQogewogICAgIHJldHVybiBkYXZfbGl2ZXByb3BfY291bnQ7CiB9CiAKLXZvaWQgZGF2X2FkZF9hbGxfbGl2ZXByb3BfeG1sbnMoYXByX3Bvb2xfdCAqcCwgYXByX3RleHRfaGVhZGVyICpwaGRyKQorREFWX0RFQ0xBUkUodm9pZCkgZGF2X2FkZF9hbGxfbGl2ZXByb3BfeG1sbnMoYXByX3Bvb2xfdCAqcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl90ZXh0X2hlYWRlciAqcGhkcikKIHsKICAgICBhcHJfaGFzaF9pbmRleF90ICppZHggPSBhcHJfaGFzaF9maXJzdChwLCBkYXZfbGl2ZXByb3BfdXJpcyk7CiAKSW5kZXg6IG1vZHVsZXMvZGF2L21haW4vcHJvcHMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtb2R1bGVzL2Rhdi9tYWluL3Byb3BzLmMJKHJldmlzaW9uIDE1NTM0NCkKKysrIG1vZHVsZXMvZGF2L21haW4vcHJvcHMuYwkocmV2aXNpb24gMTU1MzQ1KQpAQCAtNTE0LDExICs1MTQsMTEgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotZGF2X2Vycm9yICpkYXZfb3Blbl9wcm9wZGIocmVxdWVzdF9yZWMgKnIsIGRhdl9sb2NrZGIgKmxvY2tkYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfYXJyYXlfaGVhZGVyX3QgKiBuc194bGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9wcm9wZGIgKipwX3Byb3BkYikKK0RBVl9ERUNMQVJFKGRhdl9lcnJvciAqKWRhdl9vcGVuX3Byb3BkYihyZXF1ZXN0X3JlYyAqciwgZGF2X2xvY2tkYiAqbG9ja2RiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9hcnJheV9oZWFkZXJfdCAqIG5zX3hsYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9wcm9wZGIgKipwX3Byb3BkYikKIHsKICAgICBkYXZfcHJvcGRiICpwcm9wZGIgPSBhcHJfcGNhbGxvYyhyLT5wb29sLCBzaXplb2YoKnByb3BkYikpOwogCkBAIC01NTIsNyArNTUyLDcgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBkYXZfY2xvc2VfcHJvcGRiKGRhdl9wcm9wZGIgKnByb3BkYikKK0RBVl9ERUNMQVJFKHZvaWQpIGRhdl9jbG9zZV9wcm9wZGIoZGF2X3Byb3BkYiAqcHJvcGRiKQogewogICAgIGlmIChwcm9wZGItPmRiICE9IE5VTEwpIHsKICAgICAgICAgKCpwcm9wZGItPmRiX2hvb2tzLT5jbG9zZSkocHJvcGRiLT5kYik7CkBAIC01NjUsNyArNTY1LDggQEAKICAgICByZXR1cm47CiB9CiAKLWRhdl9nZXRfcHJvcHNfcmVzdWx0IGRhdl9nZXRfYWxscHJvcHMoZGF2X3Byb3BkYiAqcHJvcGRiLCBkYXZfcHJvcF9pbnNlcnQgd2hhdCkKK0RBVl9ERUNMQVJFKGRhdl9nZXRfcHJvcHNfcmVzdWx0KSBkYXZfZ2V0X2FsbHByb3BzKGRhdl9wcm9wZGIgKnByb3BkYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9wcm9wX2luc2VydCB3aGF0KQogewogICAgIGNvbnN0IGRhdl9ob29rc19kYiAqZGJfaG9va3MgPSBwcm9wZGItPmRiX2hvb2tzOwogICAgIGFwcl90ZXh0X2hlYWRlciBoZHIgPSB7IDAgfTsKQEAgLTY5Miw3ICs2OTMsOCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWRhdl9nZXRfcHJvcHNfcmVzdWx0IGRhdl9nZXRfcHJvcHMoZGF2X3Byb3BkYiAqcHJvcGRiLCBhcHJfeG1sX2RvYyAqZG9jKQorREFWX0RFQ0xBUkUoZGF2X2dldF9wcm9wc19yZXN1bHQpIGRhdl9nZXRfcHJvcHMoZGF2X3Byb3BkYiAqcHJvcGRiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX3htbF9kb2MgKmRvYykKIHsKICAgICBjb25zdCBkYXZfaG9va3NfZGIgKmRiX2hvb2tzID0gcHJvcGRiLT5kYl9ob29rczsKICAgICBhcHJfeG1sX2VsZW0gKmVsZW0gPSBkYXZfZmluZF9jaGlsZChkb2MtPnJvb3QsICJwcm9wIik7CkBAIC04NzksMTAgKzg4MSwxMCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgZGF2X2dldF9saXZlcHJvcF9zdXBwb3J0ZWQoZGF2X3Byb3BkYiAqcHJvcGRiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuc191cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb3BuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfdGV4dF9oZWFkZXIgKmJvZHkpCitEQVZfREVDTEFSRSh2b2lkKSBkYXZfZ2V0X2xpdmVwcm9wX3N1cHBvcnRlZChkYXZfcHJvcGRiICpwcm9wZGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuc191cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9wbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl90ZXh0X2hlYWRlciAqYm9keSkKIHsKICAgICBpbnQgcHJvcGlkOwogICAgIGNvbnN0IGRhdl9ob29rc19saXZlcHJvcCAqaG9va3M7CkBAIC05MDMsNyArOTA1LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgZGF2X3Byb3BfdmFsaWRhdGUoZGF2X3Byb3BfY3R4ICpjdHgpCitEQVZfREVDTEFSRV9OT05TVEQodm9pZCkgZGF2X3Byb3BfdmFsaWRhdGUoZGF2X3Byb3BfY3R4ICpjdHgpCiB7CiAgICAgZGF2X3Byb3BkYiAqcHJvcGRiID0gY3R4LT5wcm9wZGI7CiAgICAgYXByX3htbF9lbGVtICpwcm9wID0gY3R4LT5wcm9wOwpAQCAtOTk0LDcgKzk5Niw3IEBACiAgICAgfQogfQogCi12b2lkIGRhdl9wcm9wX2V4ZWMoZGF2X3Byb3BfY3R4ICpjdHgpCitEQVZfREVDTEFSRV9OT05TVEQodm9pZCkgZGF2X3Byb3BfZXhlYyhkYXZfcHJvcF9jdHggKmN0eCkKIHsKICAgICBkYXZfcHJvcGRiICpwcm9wZGIgPSBjdHgtPnByb3BkYjsKICAgICBkYXZfZXJyb3IgKmVyciA9IE5VTEw7CkBAIC0xMDYwLDcgKzEwNjIsNyBAQAogICAgIH0KIH0KIAotdm9pZCBkYXZfcHJvcF9jb21taXQoZGF2X3Byb3BfY3R4ICpjdHgpCitEQVZfREVDTEFSRV9OT05TVEQodm9pZCkgZGF2X3Byb3BfY29tbWl0KGRhdl9wcm9wX2N0eCAqY3R4KQogewogICAgIGRhdl9lbGVtX3ByaXZhdGUgKnByaXYgPSBjdHgtPnByb3AtPnByaXY7CiAKQEAgLTEwNzcsNyArMTA3OSw3IEBACiAgICAgfQogfQogCi12b2lkIGRhdl9wcm9wX3JvbGxiYWNrKGRhdl9wcm9wX2N0eCAqY3R4KQorREFWX0RFQ0xBUkVfTk9OU1REKHZvaWQpIGRhdl9wcm9wX3JvbGxiYWNrKGRhdl9wcm9wX2N0eCAqY3R4KQogewogICAgIGRhdl9lcnJvciAqZXJyID0gTlVMTDsKICAgICBkYXZfZWxlbV9wcml2YXRlICpwcml2ID0gY3R4LT5wcm9wLT5wcml2OwpJbmRleDogbW9kdWxlcy9kYXYvbWFpbi91dGlsX2xvY2suYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtb2R1bGVzL2Rhdi9tYWluL3V0aWxfbG9jay5jCShyZXZpc2lvbiAxNTUzNDQpCisrKyBtb2R1bGVzL2Rhdi9tYWluL3V0aWxfbG9jay5jCShyZXZpc2lvbiAxNTUzNDUpCkBAIC00Miw4ICs0Miw5IEBACiAqKiBkYXZfbG9ja19nZXRfYWN0aXZlbG9jazogIFJldHVybnMgYSA8bG9ja2Rpc2NvdmVyeT4gY29udGFpbmluZwogKiogICAgYW4gYWN0aXZlbG9jayBlbGVtZW50IGZvciBldmVyeSBpdGVtIGluIHRoZSBsb2NrX2Rpc2NvdmVyeSB0cmVlCiAqLwotY29uc3QgY2hhciAqZGF2X2xvY2tfZ2V0X2FjdGl2ZWxvY2socmVxdWVzdF9yZWMgKnIsIGRhdl9sb2NrICpsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X2J1ZmZlciAqcGJ1ZikKK0RBVl9ERUNMQVJFKGNvbnN0IGNoYXIgKikgZGF2X2xvY2tfZ2V0X2FjdGl2ZWxvY2socmVxdWVzdF9yZWMgKnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9sb2NrICpsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfYnVmZmVyICpwYnVmKQogewogICAgIGRhdl9sb2NrICpsb2NrX3NjYW47CiAgICAgY29uc3QgZGF2X2hvb2tzX2xvY2tzICpob29rcyA9IERBVl9HRVRfSE9PS1NfTE9DS1Mocik7CkBAIC0xNTksMTEgKzE2MCwxMSBAQAogKiogICAgbG9ja2luZm8gWE1MIGVsZW1lbnQsIHRoZW4gcG9wdWxhdGVzIGEgZGF2X2xvY2sgc3RydWN0dXJlCiAqKiAgICB3aXRoIGl0cyBjb250ZW50cy4KICovCi1kYXZfZXJyb3IgKiBkYXZfbG9ja19wYXJzZV9sb2NraW5mbyhyZXF1ZXN0X3JlYyAqciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9ja2RiICpsb2NrZGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHJfeG1sX2RvYyAqZG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X2xvY2sgKipsb2NrX3JlcXVlc3QpCitEQVZfREVDTEFSRShkYXZfZXJyb3IgKikgZGF2X2xvY2tfcGFyc2VfbG9ja2luZm8ocmVxdWVzdF9yZWMgKnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9ja2RiICpsb2NrZGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXByX3htbF9kb2MgKmRvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9jayAqKmxvY2tfcmVxdWVzdCkKIHsKICAgICBhcHJfcG9vbF90ICpwID0gci0+cG9vbDsKICAgICBkYXZfZXJyb3IgKmVycjsKQEAgLTI4NSw5ICsyODYsMTAgQEAKICoqICAgIGFsbCBjaGlsZHJlbiwgYm91bmRlZCBieSBkZXB0aC4KICoqICAgICMjIyBhc3N1bWUgcmVxdWVzdCBvbmx5IGNvbnRhaW5zIG9uZSBsb2NrCiAqLwotZGF2X2Vycm9yICogZGF2X2FkZF9sb2NrKHJlcXVlc3RfcmVjICpyLCBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9sb2NrZGIgKmxvY2tkYiwgZGF2X2xvY2sgKmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF2X3Jlc3BvbnNlICoqcmVzcG9uc2UpCitEQVZfREVDTEFSRShkYXZfZXJyb3IgKikgZGF2X2FkZF9sb2NrKHJlcXVlc3RfcmVjICpyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9ja2RiICpsb2NrZGIsIGRhdl9sb2NrICpsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfcmVzcG9uc2UgKipyZXNwb25zZSkKIHsKICAgICBkYXZfZXJyb3IgKmVycjsKICAgICBpbnQgZGVwdGggPSBsb2NrLT5kZXB0aDsKQEAgLTQ4NSw4ICs0ODcsOCBAQAogKiogIyMjIFdlJ3ZlIGFscmVhZHkgY3Jhd2xlZCB0aGUgdHJlZSB0byBlbnN1cmUgZXZlcnl0aGluZyB3YXMgbG9ja2VkCiAqKiAgICAgYnkgdXM7IHRoZXJlIHNob3VsZCBiZSBubyBuZWVkIHRvIGluY29ycG9yYXRlIGEgcm9sbGJhY2suCiAqLwotaW50IGRhdl91bmxvY2socmVxdWVzdF9yZWMgKnIsIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCi0gICAgICAgICAgICAgICBjb25zdCBkYXZfbG9ja3Rva2VuICpsb2NrdG9rZW4pCitEQVZfREVDTEFSRShpbnQpIGRhdl91bmxvY2socmVxdWVzdF9yZWMgKnIsIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF2X2xvY2t0b2tlbiAqbG9ja3Rva2VuKQogewogICAgIGludCByZXN1bHQ7CiAgICAgZGF2X2xvY2tkYiAqbG9ja2RiOwpAQCAtNjc0LDcgKzY3Niw4IEBACiAqKgogKiogICAgUmV0dXJucyBEQVZfUkVTT1VSQ0VfRVJST1IgaWYgYW4gZXJyb3Igb2NjdXJzLgogKi8KLWludCBkYXZfZ2V0X3Jlc291cmNlX3N0YXRlKHJlcXVlc3RfcmVjICpyLCBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlKQorREFWX0RFQ0xBUkUoaW50KSBkYXZfZ2V0X3Jlc291cmNlX3N0YXRlKHJlcXVlc3RfcmVjICpyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UpCiB7CiAgICAgY29uc3QgZGF2X2hvb2tzX2xvY2tzICpob29rcyA9IERBVl9HRVRfSE9PS1NfTE9DS1Mocik7CiAKQEAgLTczMiwxMSArNzM1LDExIEBACiAgICAgcmV0dXJuIERBVl9SRVNPVVJDRV9OVUxMOwogfQogCi1kYXZfZXJyb3IgKiBkYXZfbm90aWZ5X2NyZWF0ZWQocmVxdWVzdF9yZWMgKnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X2xvY2tkYiAqbG9ja2RiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc291cmNlX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXB0aCkKK0RBVl9ERUNMQVJFKGRhdl9lcnJvciAqKSBkYXZfbm90aWZ5X2NyZWF0ZWQocmVxdWVzdF9yZWMgKnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9sb2NrZGIgKmxvY2tkYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc291cmNlX3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVwdGgpCiB7CiAgICAgZGF2X2Vycm9yICplcnI7CiAKSW5kZXg6IG1vZHVsZXMvZGF2L21haW4vbW9kX2Rhdi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1vZHVsZXMvZGF2L21haW4vbW9kX2Rhdi5jCShyZXZpc2lvbiAxNTUzNDQpCisrKyBtb2R1bGVzL2Rhdi9tYWluL21vZF9kYXYuYwkocmV2aXNpb24gMTU1MzQ1KQpAQCAtMjEyLDI3ICsyMTIsMjcgQEAKICAgICByZXR1cm4gY29uZi0+cHJvdmlkZXI7CiB9CiAKLWNvbnN0IGRhdl9ob29rc19sb2NrcyAqZGF2X2dldF9sb2NrX2hvb2tzKHJlcXVlc3RfcmVjICpyKQorREFWX0RFQ0xBUkUoY29uc3QgZGF2X2hvb2tzX2xvY2tzICopIGRhdl9nZXRfbG9ja19ob29rcyhyZXF1ZXN0X3JlYyAqcikKIHsKICAgICByZXR1cm4gZGF2X2dldF9wcm92aWRlcihyKS0+bG9ja3M7CiB9CiAKLWNvbnN0IGRhdl9ob29rc19wcm9wZGIgKmRhdl9nZXRfcHJvcGRiX2hvb2tzKHJlcXVlc3RfcmVjICpyKQorREFWX0RFQ0xBUkUoY29uc3QgZGF2X2hvb2tzX3Byb3BkYiAqKSBkYXZfZ2V0X3Byb3BkYl9ob29rcyhyZXF1ZXN0X3JlYyAqcikKIHsKICAgICByZXR1cm4gZGF2X2dldF9wcm92aWRlcihyKS0+cHJvcGRiOwogfQogCi1jb25zdCBkYXZfaG9va3NfdnNuICpkYXZfZ2V0X3Zzbl9ob29rcyhyZXF1ZXN0X3JlYyAqcikKK0RBVl9ERUNMQVJFKGNvbnN0IGRhdl9ob29rc192c24gKikgZGF2X2dldF92c25faG9va3MocmVxdWVzdF9yZWMgKnIpCiB7CiAgICAgcmV0dXJuIGRhdl9nZXRfcHJvdmlkZXIociktPnZzbjsKIH0KIAotY29uc3QgZGF2X2hvb2tzX2JpbmRpbmcgKmRhdl9nZXRfYmluZGluZ19ob29rcyhyZXF1ZXN0X3JlYyAqcikKK0RBVl9ERUNMQVJFKGNvbnN0IGRhdl9ob29rc19iaW5kaW5nICopIGRhdl9nZXRfYmluZGluZ19ob29rcyhyZXF1ZXN0X3JlYyAqcikKIHsKICAgICByZXR1cm4gZGF2X2dldF9wcm92aWRlcihyKS0+YmluZGluZzsKIH0KIAotY29uc3QgZGF2X2hvb2tzX3NlYXJjaCAqZGF2X2dldF9zZWFyY2hfaG9va3MocmVxdWVzdF9yZWMgKnIpCitEQVZfREVDTEFSRShjb25zdCBkYXZfaG9va3Nfc2VhcmNoICopIGRhdl9nZXRfc2VhcmNoX2hvb2tzKHJlcXVlc3RfcmVjICpyKQogewogICAgIHJldHVybiBkYXZfZ2V0X3Byb3ZpZGVyKHIpLT5zZWFyY2g7CiB9CkBAIC02NDgsNyArNjQ4LDcgQEAKIH0KIAogLyogIyMjIG1vdmUgdG8gZGF2X3V0aWw/ICovCi1pbnQgZGF2X2dldF9kZXB0aChyZXF1ZXN0X3JlYyAqciwgaW50IGRlZl9kZXB0aCkKK0RBVl9ERUNMQVJFKGludCkgZGF2X2dldF9kZXB0aChyZXF1ZXN0X3JlYyAqciwgaW50IGRlZl9kZXB0aCkKIHsKICAgICBjb25zdCBjaGFyICpkZXB0aCA9IGFwcl90YWJsZV9nZXQoci0+aGVhZGVyc19pbiwgIkRlcHRoIik7CiAKSW5kZXg6IG1vZHVsZXMvZGF2L21haW4vc3RkX2xpdmVwcm9wLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbW9kdWxlcy9kYXYvbWFpbi9zdGRfbGl2ZXByb3AuYwkocmV2aXNpb24gMTU1MzQ0KQorKysgbW9kdWxlcy9kYXYvbWFpbi9zdGRfbGl2ZXByb3AuYwkocmV2aXNpb24gMTU1MzQ1KQpAQCAtMTY5LDIyICsxNjksMjUgQEAKICAgICBOVUxMLCAgICAgICAvKiBwYXRjaF9yb2xsYmFjayAqLwogfTsKIAotaW50IGRhdl9jb3JlX2ZpbmRfbGl2ZXByb3AoY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5zX3VyaSwgY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9ob29rc19saXZlcHJvcCAqKmhvb2tzKQorREFWX0RFQ0xBUkVfTk9OU1REKGludCkgZGF2X2NvcmVfZmluZF9saXZlcHJvcCgKKyAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAorICAgIGNvbnN0IGNoYXIgKm5zX3VyaSwgY29uc3QgY2hhciAqbmFtZSwKKyAgICBjb25zdCBkYXZfaG9va3NfbGl2ZXByb3AgKipob29rcykKIHsKICAgICByZXR1cm4gZGF2X2RvX2ZpbmRfbGl2ZXByb3AobnNfdXJpLCBuYW1lLCAmZGF2X2NvcmVfbGl2ZXByb3BfZ3JvdXAsIGhvb2tzKTsKIH0KIAotdm9pZCBkYXZfY29yZV9pbnNlcnRfYWxsX2xpdmVwcm9wcyhyZXF1ZXN0X3JlYyAqciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X3Byb3BfaW5zZXJ0IHdoYXQsIGFwcl90ZXh0X2hlYWRlciAqcGhkcikKK0RBVl9ERUNMQVJFX05PTlNURCh2b2lkKSBkYXZfY29yZV9pbnNlcnRfYWxsX2xpdmVwcm9wcygKKyAgICByZXF1ZXN0X3JlYyAqciwKKyAgICBjb25zdCBkYXZfcmVzb3VyY2UgKnJlc291cmNlLAorICAgIGRhdl9wcm9wX2luc2VydCB3aGF0LAorICAgIGFwcl90ZXh0X2hlYWRlciAqcGhkcikKIHsKICAgICAodm9pZCkgZGF2X2NvcmVfaW5zZXJ0X3Byb3AocmVzb3VyY2UsIERBVl9QUk9QSURfcmVzb3VyY2V0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0LCBwaGRyKTsKIH0KIAotdm9pZCBkYXZfY29yZV9yZWdpc3Rlcl91cmlzKGFwcl9wb29sX3QgKnApCitEQVZfREVDTEFSRV9OT05TVEQodm9pZCkgZGF2X2NvcmVfcmVnaXN0ZXJfdXJpcyhhcHJfcG9vbF90ICpwKQogewogICAgIC8qIHJlZ2lzdGVyIHRoZSBuYW1lc3BhY2UgVVJJcyAqLwogICAgIGRhdl9yZWdpc3Rlcl9saXZlcHJvcF9ncm91cChwLCAmZGF2X2NvcmVfbGl2ZXByb3BfZ3JvdXApOwpJbmRleDogbW9kdWxlcy9kYXYvbWFpbi9wcm92aWRlcnMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBtb2R1bGVzL2Rhdi9tYWluL3Byb3ZpZGVycy5jCShyZXZpc2lvbiAxNTUzNDQpCisrKyBtb2R1bGVzL2Rhdi9tYWluL3Byb3ZpZGVycy5jCShyZXZpc2lvbiAxNTUzNDUpCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgYXBfcmVnaXN0ZXJfcHJvdmlkZXIocCwgREFWX1BST1ZJREVSX0dST1VQLCBuYW1lLCAiMCIsIHByb3ZpZGVyKTsKIH0KIAotY29uc3QgZGF2X3Byb3ZpZGVyICogZGF2X2xvb2t1cF9wcm92aWRlcihjb25zdCBjaGFyICpuYW1lKQorREFWX0RFQ0xBUkUoY29uc3QgZGF2X3Byb3ZpZGVyICopIGRhdl9sb29rdXBfcHJvdmlkZXIoY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICByZXR1cm4gYXBfbG9va3VwX3Byb3ZpZGVyKERBVl9QUk9WSURFUl9HUk9VUCwgbmFtZSwgIjAiKTsKIH0KSW5kZXg6IG1vZHVsZXMvZGF2L21haW4vdXRpbC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG1vZHVsZXMvZGF2L21haW4vdXRpbC5jCShyZXZpc2lvbiAxNTUzNDQpCisrKyBtb2R1bGVzL2Rhdi9tYWluL3V0aWwuYwkocmV2aXNpb24gMTU1MzQ1KQpAQCAtMTU5LDggKzE1OSw5IEBACiAqKiBJZiBOVUxMIGlzIHJldHVybmVkLCB0aGVuIGFuIGVycm9yIG9jY3VycmVkIHdpdGggcGFyc2luZyB0aGUgVVJJIG9yCiAqKiB0aGUgVVJJIGRvZXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHNlcnZlci4KICovCi1kYXZfbG9va3VwX3Jlc3VsdCBkYXZfbG9va3VwX3VyaShjb25zdCBjaGFyICp1cmksIHJlcXVlc3RfcmVjICogciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtdXN0X2JlX2Fic29sdXRlKQorREFWX0RFQ0xBUkUoZGF2X2xvb2t1cF9yZXN1bHQpIGRhdl9sb29rdXBfdXJpKGNvbnN0IGNoYXIgKnVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X3JlYyAqIHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG11c3RfYmVfYWJzb2x1dGUpCiB7CiAgICAgZGF2X2xvb2t1cF9yZXN1bHQgcmVzdWx0ID0geyAwIH07CiAgICAgY29uc3QgY2hhciAqc2NoZW1lOwpAQCAtMjg3LDcgKzI4OCw4IEBACiAqLwogCiAvKiB2YWxpZGF0ZSB0aGF0IHRoZSByb290IGVsZW1lbnQgdXNlcyBhIGdpdmVuIERBVjogdGFnbmFtZSAoVFJVRT09dmFsaWQpICovCi1pbnQgZGF2X3ZhbGlkYXRlX3Jvb3QoY29uc3QgYXByX3htbF9kb2MgKmRvYywgY29uc3QgY2hhciAqdGFnbmFtZSkKK0RBVl9ERUNMQVJFKGludCkgZGF2X3ZhbGlkYXRlX3Jvb3QoY29uc3QgYXByX3htbF9kb2MgKmRvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGFnbmFtZSkKIHsKICAgICByZXR1cm4gZG9jLT5yb290ICYmCiAgICAgICAgIGRvYy0+cm9vdC0+bnMgPT0gQVBSX1hNTF9OU19EQVZfSUQgJiYKQEAgLTI5NSw3ICsyOTcsOCBAQAogfQogCiAvKiBmaW5kIGFuZCByZXR1cm4gdGhlICh1bmlxdWUpIGNoaWxkIHdpdGggYSBnaXZlbiBEQVY6IHRhZ25hbWUgKi8KLWFwcl94bWxfZWxlbSAqZGF2X2ZpbmRfY2hpbGQoY29uc3QgYXByX3htbF9lbGVtICplbGVtLCBjb25zdCBjaGFyICp0YWduYW1lKQorREFWX0RFQ0xBUkUoYXByX3htbF9lbGVtICopIGRhdl9maW5kX2NoaWxkKGNvbnN0IGFwcl94bWxfZWxlbSAqZWxlbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGFnbmFtZSkKIHsKICAgICBhcHJfeG1sX2VsZW0gKmNoaWxkID0gZWxlbS0+Zmlyc3RfY2hpbGQ7CiAKQEAgLTQ2MSw3ICs0NjQsNyBAQAogICogICAgU2Vjb25kcy14eHggYW5kIEluZmluaXR5IHRpbWUgdmFsdWVzLiAgV2UgYXNzdW1lIHRoYXQgdGhleSBkby4KICAqICAgIEluIGFkZGl0aW9uLCBmb3Igbm93LCB0aGF0J3MgYWxsIHdlIHVuZGVyc3RhbmQsIHRvby4KICAqLwotdGltZV90IGRhdl9nZXRfdGltZW91dChyZXF1ZXN0X3JlYyAqcikKK0RBVl9ERUNMQVJFKHRpbWVfdCkgZGF2X2dldF90aW1lb3V0KHJlcXVlc3RfcmVjICpyKQogewogICAgIHRpbWVfdCBub3csIGV4cGlyZXMgPSBEQVZfVElNRU9VVF9JTkZJTklURTsKIApAQCAtMTQwMiwxMCArMTQwNSwxMyBAQAogKiogT24gZXJyb3IsIHJldHVybiBhcHByb3ByaWF0ZSBIVFRQXyogY29kZSwgYW5kIGxvZyBlcnJvci4gSWYgYSBtdWx0aS1zdGF0CiAqKiBlcnJvciBpcyBuZWNlc3NhcnksIHJlc3BvbnNlIHdpbGwgcG9pbnQgdG8gaXQsIGVsc2UgTlVMTC4KICovCi1kYXZfZXJyb3IgKiBkYXZfdmFsaWRhdGVfcmVxdWVzdChyZXF1ZXN0X3JlYyAqciwgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXB0aCwgZGF2X2xvY2t0b2tlbiAqbG9ja3Rva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X3Jlc3BvbnNlICoqcmVzcG9uc2UsIGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9sb2NrZGIgKmxvY2tkYikKK0RBVl9ERUNMQVJFKGRhdl9lcnJvciAqKSBkYXZfdmFsaWRhdGVfcmVxdWVzdChyZXF1ZXN0X3JlYyAqciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF2X2xvY2t0b2tlbiAqbG9ja3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9yZXNwb25zZSAqKnJlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZfbG9ja2RiICpsb2NrZGIpCiB7CiAgICAgZGF2X2Vycm9yICplcnI7CiAgICAgaW50IHJlc3VsdDsKQEAgLTE2MjMsNyArMTYyOSw4IEBACiAgKiBTZXRzIGx0bCB0byBhIGxvY2t0b2tlbl9saXN0IG9mIGFsbCBwb3NpdGl2ZSBsb2NrdG9rZW5zIGluIGhlYWRlciwKICAqIGVsc2UgTlVMTCBpZiBubyBJZi1oZWFkZXIsIG9yIG5vIHBvc2l0aXZlIGxvY2t0b2tlbnMuCiAgKi8KLWRhdl9lcnJvciAqIGRhdl9nZXRfbG9ja3Rva2VuX2xpc3QocmVxdWVzdF9yZWMgKnIsIGRhdl9sb2NrdG9rZW5fbGlzdCAqKmx0bCkgCitEQVZfREVDTEFSRShkYXZfZXJyb3IgKikgZGF2X2dldF9sb2NrdG9rZW5fbGlzdChyZXF1ZXN0X3JlYyAqciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdl9sb2NrdG9rZW5fbGlzdCAqKmx0bCkgCiB7CiAgICAgZGF2X2Vycm9yICplcnI7CiAgICAgZGF2X2lmX2hlYWRlciAqaWZfaGVhZGVyOwpAQCAtMTY5Myw5ICsxNzAwLDkgQEAKICAqIElmIHRoZXJlIHdlcmUgYW55IGhlYWRlcnMgaW4gdGhlIHJlcXVlc3Qgd2hpY2ggcmVxdWlyZSBhIFZhcnkgaGVhZGVyCiAgKiBpbiB0aGUgcmVzcG9uc2UsIGFkZCBpdC4KICAqLwotdm9pZCBkYXZfYWRkX3ZhcnlfaGVhZGVyKHJlcXVlc3RfcmVjICppbl9yZXEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9yZWMgKm91dF9yZXEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF2X3Jlc291cmNlICpyZXNvdXJjZSkKK0RBVl9ERUNMQVJFKHZvaWQpIGRhdl9hZGRfdmFyeV9oZWFkZXIocmVxdWVzdF9yZWMgKmluX3JlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9yZWMgKm91dF9yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdl9yZXNvdXJjZSAqcmVzb3VyY2UpCiB7CiAgICAgY29uc3QgZGF2X2hvb2tzX3ZzbiAqdnNuX2hvb2tzID0gREFWX0dFVF9IT09LU19WU04oaW5fcmVxKTsKIApAQCAtMTc3OSw3ICsxNzg2LDcgQEAKIH0KIAogLyogc2VlIG1vZF9kYXYuaCBmb3IgZG9jY28gKi8KLWRhdl9lcnJvciAqZGF2X2F1dG9fY2hlY2tvdXQoCitEQVZfREVDTEFSRShkYXZfZXJyb3IgKikgZGF2X2F1dG9fY2hlY2tvdXQoCiAgICAgcmVxdWVzdF9yZWMgKnIsCiAgICAgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKICAgICBpbnQgcGFyZW50X29ubHksCkBAIC0xOTI1LDcgKzE5MzIsNyBAQAogfQogCiAvKiBzZWUgbW9kX2Rhdi5oIGZvciBkb2NjbyAqLwotZGF2X2Vycm9yICpkYXZfYXV0b19jaGVja2luKAorREFWX0RFQ0xBUkUoZGF2X2Vycm9yICopIGRhdl9hdXRvX2NoZWNraW4oCiAgICAgcmVxdWVzdF9yZWMgKnIsCiAgICAgZGF2X3Jlc291cmNlICpyZXNvdXJjZSwKICAgICBpbnQgdW5kbywK