ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vZGViY2hhbmdlbG9nLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vZGViY2hhbmdlbG9nLnZpbQppbmRleCAzNTAwMTAxLi4xNjdmNTZjIDEwMDY0NAotLS0gYS9ydW50aW1lL2Z0cGx1Z2luL2RlYmNoYW5nZWxvZy52aW0KKysrIGIvcnVudGltZS9mdHBsdWdpbi9kZWJjaGFuZ2Vsb2cudmltCkBAIC0yLDggKzIsMjggQEAKICIgTGFuZ3VhZ2U6CURlYmlhbiBDaGFuZ2Vsb2cKICIgTWFpbnRhaW5lcjoJTWljaGFlbCBQaWVmZWwgPHBpZWZlbEBpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KICIJCVN0ZWZhbm8gWmFjY2hpcm9saSA8emFja0BkZWJpYW4ub3JnPgotIiBMYXN0IENoYW5nZToJMjcgQXByaWwgMjAwNgotIiBMaWNlbnNlOglHTlUgR1BMLCB2ZXJzaW9uIDIuMSBvciBsYXRlcgorIiBMYXN0IENoYW5nZToJJExhc3RDaGFuZ2VkRGF0ZTogMjAwNi0wNC0yOCAxMjoxNToxMiAtMDQwMCAodmVuLCAyOCBhcHIgMjAwNikgJAorIiBMaWNlbnNlOglHTlUgR1BMLCB2ZXJzaW9uIDIuMCBvciBsYXRlcgorIiBVUkw6CQlodHRwOi8vc3ZuLmRlYmlhbi5vcmcvd3N2bi9wa2ctdmltL3RydW5rL3J1bnRpbWUvZnRwbHVnaW4vZGViY2hhbmdlbG9nLnZpbT9vcD1maWxlJnJldj0wJnNjPTAKKworaWYgZXhpc3RzKCJiOmRpZF9mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKK2xldCBiOmRpZF9mdHBsdWdpbiA9IDEKKworIiB7e3sxIExvY2FsIHNldHRpbmdzIChkbyBvbiBldmVyeSBsb2FkKQorc2V0bG9jYWwgZm9sZG1ldGhvZD1leHByCitzZXRsb2NhbCBmb2xkZXhwcj1HZXREZWJDaGFuZ2Vsb2dGb2xkKHY6bG51bSkKK3NldGxvY2FsIGZvbGR0ZXh0PURlYkNoYW5nZWxvZ0ZvbGRUZXh0KCkKKworIiBEZWJpYW4gY2hhbmdlbG9ncyBhcmUgbm90IHN1cHBvc2VkIHRvIGhhdmUgYW55IG90aGVyIHRleHQgd2lkdGgsCisiIHNvIHRoZSB1c2VyIGNhbm5vdCBvdmVycmlkZSB0aGlzIHNldHRpbmcKK3NldGxvY2FsIHR3PTc4CitzZXRsb2NhbCBjb21tZW50cz1mOiogCisKKyIgQ2xlYW4gdW5sb2FkaW5nCitsZXQgYjp1bmRvX2Z0cGx1Z2luID0gInNldGxvY2FsIHR3PCBjb21tZW50czwgZm9sZG1ldGhvZDwgZm9sZGV4cHI8IGZvbGR0ZXh0PCIKKyIgfX19MQogCiBpZiBleGlzdHMoImc6ZGlkX2NoYW5nZWxvZ19mdHBsdWdpbiIpCiAgIGZpbmlzaApAQCAtODIsNyArMTAyLDcgQEAKICAgICBhbWVudSBlbmFibGUgQ2hhbmdlbG9nLlNldFwgVXJnZW5jeQogICAgIGFtZW51IGRpc2FibGUgQ2hhbmdlbG9nLlVuZmluYWxpc2UKICAgICBhbWVudSBlbmFibGUgQ2hhbmdlbG9nLkZpbmFsaXNlCi0gICAgY2FsbCBhcHBlbmQoMCwgc3Vic3RpdHV0ZShnZXRsaW5lKDEpLCctXChbWzpkaWdpdDpdXVwrXCkpJywgJy3cXDEpJywgJycpKQorICAgIGNhbGwgYXBwZW5kKDAsIHN1YnN0aXR1dGUoZ2V0bGluZSgxKSwgJy1cKFtbOmRpZ2l0Ol1dXCtcKSknLCAnLSQkXDEpJywgJycpKQogICAgIGNhbGwgYXBwZW5kKDEsICIiKQogICAgIGNhbGwgYXBwZW5kKDIsICIiKQogICAgIGNhbGwgYXBwZW5kKDMsICIgLS0gIikKQEAgLTkzLDcgKzExMyw4IEBACiAgICAgY2FsbCBzZWFyY2goIikiKQogICAgIG5vcm1hbCBoCiAgICAgbm9ybWFsIAEKLSAgICBjYWxsIHNldGxpbmUoMSwgc3Vic3RpdHV0ZShnZXRsaW5lKDEpLCct3FwoW1s6ZGlnaXQ6XV1cK1wpKScsICctXDEpJywgJycpKQorICAgIGNhbGwgc2V0bGluZSgxLCBzdWJzdGl0dXRlKGdldGxpbmUoMSksICctXCRcJCcsICctJywgJycpKQorICAgIG5vcm1hbCB6bwogICAgIGNhbGwgQWRkRW50cnkoKQogZW5kZnVuY3Rpb24KIApAQCAtMjA2LDEwICsyMjcsNiBAQAogIiB9fX0KICIge3t7MSBmb2xkaW5nCiAKLXNldGxvY2FsIGZvbGRtZXRob2Q9ZXhwcgotc2V0bG9jYWwgZm9sZGV4cHI9R2V0RGViQ2hhbmdlbG9nRm9sZCh2OmxudW0pCi1zZXRsb2NhbCBmb2xkdGV4dD1EZWJDaGFuZ2Vsb2dGb2xkVGV4dCgpCi0KICIgbG9vayBmb3IgYW4gYXV0aG9yIG5hbWUgc2VhcmNoaW5nIGJhY2t3YXJkIGZyb20gYSBnaXZlbiBsaW5lIG51bWJlcgogZnVuY3Rpb24hIHM6Z2V0QXV0aG9yKGxudW0pCiAgIGxldCBsaW5lID0gZ2V0bGluZShhOmxudW0pCkBAIC0yNDUsMTIgKzI2Miw0IEBACiAKICIgfX19CiAKLSIgRGViaWFuIGNoYW5nZWxvZ3MgYXJlIG5vdCBzdXBwb3NlZCB0byBoYXZlIGFueSBvdGhlciB0ZXh0IHdpZHRoLAotIiBzbyB0aGUgdXNlciBjYW5ub3Qgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nCi1zZXRsb2NhbCB0dz03OAotc2V0bG9jYWwgY29tbWVudHM9ZjoqIAotCi0iIENsZWFuIHVubG9hZGluZwotbGV0IGI6dW5kb19mdHBsdWdpbiA9ICJzZXRsb2NhbCB0dzwgY29tbWVudHM8IGZvbGRtZXRob2Q8IGZvbGRleHByPCBmb2xkdGV4dDwiCi0KICIgdmltOiBzZXQgZm9sZG1ldGhvZD1tYXJrZXI6CmRpZmYgLS1naXQgYS9zcmMvZ3VpLmMgYi9zcmMvZ3VpLmMKaW5kZXggOWE2OWEwOS4uZmUxMjg2NCAxMDA2NDQKLS0tIGEvc3JjL2d1aS5jCisrKyBiL3NyYy9ndWkuYwpAQCAtMzM5NCw2ICszMzk0LDExIEBACiAKICAgICBpZiAoIWd1aS5zdGFydGluZyAmJiBzdGFydGluZyA9PSAwKQogICAgIHsKKwkvKiBVcGRhdGluZyB0aGUgdGFibGluZSB1c2VzIGRpcmVjdCBHVUkgY29tbWFuZHMsIGZsdXNoCisJICogb3V0c3RhbmRpbmcgaW5zdHJ1Y3Rpb25zIGZpcnN0LiAoZXNwLiBjbGVhciBzY3JlZW4pICovCisJb3V0X2ZsdXNoKCk7CisJZ3VpX21jaF9mbHVzaCgpOworCiAJaWYgKCFzaG93aXQgIT0gIXNob3duKQogCSAgICBndWlfbWNoX3Nob3dfdGFibGluZShzaG93aXQpOwogCWlmIChzaG93aXQgIT0gMCkKZGlmZiAtLWdpdCBhL3NyYy9wby9wbC5VVEYtOC5wbyBiL3NyYy9wby9wbC5VVEYtOC5wbwppbmRleCA2MTQ5MDgwLi4zMDJmZjhjIDEwMDY0NAotLS0gYS9zcmMvcG8vcGwuVVRGLTgucG8KKysrIGIvc3JjL3BvL3BsLlVURi04LnBvCkBAIC05MTAsNyArOTEwLDcgQEAKIAogIywgYy1mb3JtYXQKIG1zZ2lkICIjIFZhbHVlIG9mICdlbmNvZGluZycgd2hlbiB0aGlzIGZpbGUgd2FzIHdyaXR0ZW5cbiIKLW1zZ3N0ciAiIyBXYXJ0b8WbxIcgJ2VuY29kaW5nJyB3IGN6YXNpZSB6YXBzdSB0ZWdvIHBsaWt1XG4iCittc2dzdHIgIiMgV2FydG/Fm8SHICdlbmNvZGluZycgdyBjemFzaWUgemFwaXN1IHRlZ28gcGxpa3VcbiIKIAogbXNnaWQgIklsbGVnYWwgc3RhcnRpbmcgY2hhciIKIG1zZ3N0ciAiTmllZG9wdXN6Y3phbG55IHBvY3rEhXRrb3d5IHpuYWsiCkBAIC0xNDgzLDcgKzE0ODMsNyBAQAogCiAjLiBSZS1vcGVuaW5nIHRoZSBvcmlnaW5hbCBmaWxlIGZhaWxlZCEKIG1zZ2lkICJFMjAyOiBDb252ZXJzaW9uIG1hZGUgZmlsZSB1bnJlYWRhYmxlISIKLW1zZ3N0ciAiRTIwMjogUGxpayBzdHdvcnpvbnkgcG9wcnpleiBwcnplbWlhbsSZIGplc3Qgbmllb2Rjenl0eXdhbG55ISIKK21zZ3N0ciAiRTIwMjogTmllIG1vxbxuYSBvdHdvcnp5xIcgcGxpa3UgdXR3b3J6b25lZ28gcHJ6ZXogcHJ6ZW1pYW7EmSEiCiAKIG1zZ2lkICJbZmlmby9zb2NrZXRdIgogbXNnc3RyICJbZmlmby9zb2NrZXRdIgpAQCAtMTY0OCwxMyArMTY0OCwxMyBAQAogbXNnc3RyICJbbWFjXSIKIAogbXNnaWQgIlttYWMgZm9ybWF0XSIKLW1zZ3N0ciAiW2Zvcm1hdCBtYWMtYV0iCittc2dzdHIgIltmb3JtYXQgbWFjYV0iCiAKIG1zZ2lkICJbdW5peF0iCiBtc2dzdHIgIlt1bml4XSIKIAogbXNnaWQgIlt1bml4IGZvcm1hdF0iCi1tc2dzdHIgIltmb3JtYXQgdW5peC1hXSIKK21zZ3N0ciAiW2Zvcm1hdCB1bml4YV0iCiAKIG1zZ2lkICIxIGxpbmUsICIKIG1zZ3N0ciAiMSB3aWVyc3osICIKQEAgLTE5MjgsNyArMTkyOCw3IEBACiBtc2dzdHIgIklucHV0IF9NZXRob2RzIgogCiBtc2dpZCAiVklNIC0gU2VhcmNoIGFuZCBSZXBsYWNlLi4uIgotbXNnc3RyICJWSU0gLSBTenVrYWogaSBaYW1pZW5pYWouLi4iCittc2dzdHIgIlZJTSAtIFN6dWthaiBpIFphbWllxYQuLi4iCiAKIG1zZ2lkICJWSU0gLSBTZWFyY2guLi4iCiBtc2dzdHIgIlZJTSAtIFN6dWthai4uLiIKQEAgLTE5NjcsNyArMTk2Nyw3IEBACiBtc2dzdHIgIlphbWllxYQgd3N6eXN0a2llIgogCiBtc2dpZCAiVmltOiBSZWNlaXZlZCBcImRpZVwiIHJlcXVlc3QgZnJvbSBzZXNzaW9uIG1hbmFnZXJcbiIKLW1zZ3N0ciAiVmltOiBvdHJ6eW1hbm8gxbzEhWRhbmllIFwiZGllXCIgb2QgbWFuYWTFvGVyYSBzZXNqaVxuIgorbXNnc3RyICJWaW06IG90cnp5bWFubyDFvMSFZGFuaWUgXCJkaWVcIiBvZCBtZW5lZMW8ZXJhIHNlc2ppXG4iCiAKIG1zZ2lkICJDbG9zZSIKIG1zZ3N0ciAiWmFta25paiIKQEAgLTI0NjMsNyArMjQ2Myw3IEBACiBtc2dzdHIgIndyaXRlbGluZXMoKSB3eW1hZ2EgbGlzdHkgY2nEhWfDs3ciCiAKIG1zZ2lkICJFMjY0OiBQeXRob246IEVycm9yIGluaXRpYWxpc2luZyBJL08gb2JqZWN0cyIKLW1zZ3N0ciAiRTI2NDogUHl0aG9uOiBCxYLEhWQgdyBpbmljamFsaXphY2ppIG9iaWVrdMOzdyBJL08iCittc2dzdHIgIkUyNjQ6IFB5dGhvbjogQsWCxIVkIHcgdXJ1Y2hvbWllbml1IG9iaWVrdMOzdyBJL08iCiAKIG1zZ2lkICJhdHRlbXB0IHRvIHJlZmVyIHRvIGRlbGV0ZWQgYnVmZmVyIgogbXNnc3RyICJwcsOzYmEgb2RuaWVzaWVuaWEgZG8gc2thc293YW5lZ28gYnVmb3JhIgpAQCAtMjU0Miw3ICsyNTQyLDcgQEAKIG1zZ3N0ciAiUG9rYcW8IGJhesSZIGtsYXN5IgogCiBtc2dpZCAiU2hvdyBvdmVycmlkZGVuIG1lbWJlciBmdW5jdGlvbiIKLW1zZ3N0ciAiUG9rYcW8IHByemVwaXNhbsSFIGZ1bmtjasSZIGN6xYJvbmtvd8SFIgorbXNnc3RyICJQb2thxbwgcHJ6ZXBpc2FuxIUgZnVua2NqxJkgY3rFgm9ub3fEhSIKIAogbXNnaWQgIlJldHJpZXZlIGZyb20gZmlsZSIKIG1zZ3N0ciAiUG9iaWVyYWogeiBwbGlrdSIKQEAgLTI1ODcsNyArMjU4Nyw3IEBACiBtc2dzdHIgIlBva2HFvCBkb2t1bWVudGFjasSZIGRsYSIKIAogbXNnaWQgIkdlbmVyYXRlIGRvY3UgZm9yIgotbXNnc3RyICJXeWdlbmVydWogZG9rdW1lbnRhY2rEmSBkbGEiCittc2dzdHIgIlV0d8OzcnogZG9rdW1lbnRhY2rEmSBkbGEiCiAKIG1zZ2lkICIiCiAiQ2Fubm90IGNvbm5lY3QgdG8gU05pRkYrLiBDaGVjayBlbnZpcm9ubWVudCAoc25pZmZlbWFjcyBtdXN0IGJlIGZvdW5kIGluICIKZGlmZiAtLWdpdCBhL3NyYy9wcm90by9leF9nZXRsbi5wcm8gYi9zcmMvcHJvdG8vZXhfZ2V0bG4ucHJvCmluZGV4IGU2YjViODcuLmY1ZmViMjAgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9leF9nZXRsbi5wcm8KKysrIGIvc3JjL3Byb3RvL2V4X2dldGxuLnBybwpAQCAtMSw1NCArMSw1NiBAQAogLyogZXhfZ2V0bG4uYyAqLwotZXh0ZXJuIGNoYXJfdSAqZ2V0Y21kbGluZSBfX0FSR1MoKGludCBmaXJzdGMsIGxvbmcgY291bnQsIGludCBpbmRlbnQpKTsKLWV4dGVybiBjaGFyX3UgKmdldGNtZGxpbmVfcHJvbXB0IF9fQVJHUygoaW50IGZpcnN0YywgY2hhcl91ICpwcm9tcHQsIGludCBhdHRyLCBpbnQgeHBfY29udGV4dCwgY2hhcl91ICp4cF9hcmcpKTsKLWV4dGVybiBpbnQgdGV4dF9sb2NrZWQgX19BUkdTKCh2b2lkKSk7Ci1leHRlcm4gdm9pZCB0ZXh0X2xvY2tlZF9tc2cgX19BUkdTKCh2b2lkKSk7Ci1leHRlcm4gaW50IGN1cmJ1Zl9sb2NrZWQgX19BUkdTKCh2b2lkKSk7Ci1leHRlcm4gY2hhcl91ICpnZXRleGxpbmUgX19BUkdTKChpbnQgYywgdm9pZCAqZHVtbXksIGludCBpbmRlbnQpKTsKLWV4dGVybiBjaGFyX3UgKmdldGV4bW9kZWxpbmUgX19BUkdTKChpbnQgcHJvbXB0Yywgdm9pZCAqZHVtbXksIGludCBpbmRlbnQpKTsKLWV4dGVybiBpbnQgY21kbGluZV9vdmVyc3RyaWtlIF9fQVJHUygodm9pZCkpOwotZXh0ZXJuIGludCBjbWRsaW5lX2F0X2VuZCBfX0FSR1MoKHZvaWQpKTsKLWV4dGVybiBjb2xucl9UIGNtZGxpbmVfZ2V0dmNvbF9jdXJzb3IgX19BUkdTKCh2b2lkKSk7Ci1leHRlcm4gdm9pZCBmcmVlX2NtZGxpbmVfYnVmIF9fQVJHUygodm9pZCkpOwotZXh0ZXJuIHZvaWQgcHV0Y21kbGluZSBfX0FSR1MoKGludCBjLCBpbnQgc2hpZnQpKTsKLWV4dGVybiB2b2lkIHVucHV0Y21kbGluZSBfX0FSR1MoKHZvaWQpKTsKLWV4dGVybiBpbnQgcHV0X29uX2NtZGxpbmUgX19BUkdTKChjaGFyX3UgKnN0ciwgaW50IGxlbiwgaW50IHJlZHJhdykpOwotZXh0ZXJuIHZvaWQgY21kbGluZV9wYXN0ZV9zdHIgX19BUkdTKChjaGFyX3UgKnMsIGludCBsaXRlcmFsbHkpKTsKLWV4dGVybiB2b2lkIHJlZHJhd2NtZGxpbmUgX19BUkdTKCh2b2lkKSk7Ci1leHRlcm4gdm9pZCByZWRyYXdjbWQgX19BUkdTKCh2b2lkKSk7Ci1leHRlcm4gdm9pZCBjb21wdXRlX2NtZHJvdyBfX0FSR1MoKHZvaWQpKTsKLWV4dGVybiB2b2lkIGdvdG9jbWRsaW5lIF9fQVJHUygoaW50IGNscikpOwotZXh0ZXJuIGNoYXJfdSAqRXhwYW5kT25lIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBjaGFyX3UgKnN0ciwgY2hhcl91ICpvcmlnLCBpbnQgb3B0aW9ucywgaW50IG1vZGUpKTsKLWV4dGVybiB2b2lkIEV4cGFuZEluaXQgX19BUkdTKChleHBhbmRfVCAqeHApKTsKLWV4dGVybiB2b2lkIEV4cGFuZENsZWFudXAgX19BUkdTKChleHBhbmRfVCAqeHApKTsKLWV4dGVybiB2b2lkIEV4cGFuZEVzY2FwZSBfX0FSR1MoKGV4cGFuZF9UICp4cCwgY2hhcl91ICpzdHIsIGludCBudW1maWxlcywgY2hhcl91ICoqZmlsZXMsIGludCBvcHRpb25zKSk7Ci1leHRlcm4gdm9pZCB0aWxkZV9yZXBsYWNlIF9fQVJHUygoY2hhcl91ICpvcmlnX3BhdCwgaW50IG51bV9maWxlcywgY2hhcl91ICoqZmlsZXMpKTsKLWV4dGVybiBjaGFyX3UgKnNtX2dldHRhaWwgX19BUkdTKChjaGFyX3UgKnMpKTsKLWV4dGVybiBjaGFyX3UgKmFkZHN0YXIgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBpbnQgbGVuLCBpbnQgY29udGV4dCkpOwotZXh0ZXJuIHZvaWQgc2V0X2NtZF9jb250ZXh0IF9fQVJHUygoZXhwYW5kX1QgKnhwLCBjaGFyX3UgKnN0ciwgaW50IGxlbiwgaW50IGNvbCkpOwotZXh0ZXJuIGludCBleHBhbmRfY21kbGluZSBfX0FSR1MoKGV4cGFuZF9UICp4cCwgY2hhcl91ICpzdHIsIGludCBjb2wsIGludCAqbWF0Y2hjb3VudCwgY2hhcl91ICoqKm1hdGNoZXMpKTsKLWV4dGVybiBpbnQgRXhwYW5kR2VuZXJpYyBfX0FSR1MoKGV4cGFuZF9UICp4cCwgcmVnbWF0Y2hfVCAqcmVnbWF0Y2gsIGludCAqbnVtX2ZpbGUsIGNoYXJfdSAqKipmaWxlLCBjaGFyX3UgKigoKmZ1bmMpKGV4cGFuZF9UICosIGludCkpKSk7Ci1leHRlcm4gY2hhcl91ICpnbG9icGF0aCBfX0FSR1MoKGNoYXJfdSAqcGF0aCwgY2hhcl91ICpmaWxlKSk7Ci1leHRlcm4gdm9pZCBpbml0X2hpc3RvcnkgX19BUkdTKCh2b2lkKSk7Ci1leHRlcm4gaW50IGdldF9oaXN0dHlwZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwotZXh0ZXJuIHZvaWQgYWRkX3RvX2hpc3RvcnkgX19BUkdTKChpbnQgaGlzdHlwZSwgY2hhcl91ICpuZXdfZW50cnksIGludCBpbl9tYXAsIGludCBzZXApKTsKLWV4dGVybiBpbnQgZ2V0X2hpc3RvcnlfaWR4IF9fQVJHUygoaW50IGhpc3R5cGUpKTsKLWV4dGVybiBjaGFyX3UgKmdldF9jbWRsaW5lX3N0ciBfX0FSR1MoKHZvaWQpKTsKLWV4dGVybiBpbnQgZ2V0X2NtZGxpbmVfcG9zIF9fQVJHUygodm9pZCkpOwotZXh0ZXJuIGludCBzZXRfY21kbGluZV9wb3MgX19BUkdTKChpbnQgcG9zKSk7Ci1leHRlcm4gaW50IGdldF9jbWRsaW5lX3R5cGUgX19BUkdTKCh2b2lkKSk7Ci1leHRlcm4gY2hhcl91ICpnZXRfaGlzdG9yeV9lbnRyeSBfX0FSR1MoKGludCBoaXN0eXBlLCBpbnQgaWR4KSk7Ci1leHRlcm4gaW50IGNscl9oaXN0b3J5IF9fQVJHUygoaW50IGhpc3R5cGUpKTsKLWV4dGVybiBpbnQgZGVsX2hpc3RvcnlfZW50cnkgX19BUkdTKChpbnQgaGlzdHlwZSwgY2hhcl91ICpzdHIpKTsKLWV4dGVybiBpbnQgZGVsX2hpc3RvcnlfaWR4IF9fQVJHUygoaW50IGhpc3R5cGUsIGludCBpZHgpKTsKLWV4dGVybiB2b2lkIHJlbW92ZV9rZXlfZnJvbV9oaXN0b3J5IF9fQVJHUygodm9pZCkpOwotZXh0ZXJuIGludCBnZXRfbGlzdF9yYW5nZSBfX0FSR1MoKGNoYXJfdSAqKnN0ciwgaW50ICpudW0xLCBpbnQgKm51bTIpKTsKLWV4dGVybiB2b2lkIGV4X2hpc3RvcnkgX19BUkdTKChleGFyZ19UICplYXApKTsKLWV4dGVybiB2b2lkIHByZXBhcmVfdmltaW5mb19oaXN0b3J5IF9fQVJHUygoaW50IGFza2xlbikpOwotZXh0ZXJuIGludCByZWFkX3ZpbWluZm9faGlzdG9yeSBfX0FSR1MoKHZpcl9UICp2aXJwKSk7Ci1leHRlcm4gdm9pZCBmaW5pc2hfdmltaW5mb19oaXN0b3J5IF9fQVJHUygodm9pZCkpOwotZXh0ZXJuIHZvaWQgd3JpdGVfdmltaW5mb19oaXN0b3J5IF9fQVJHUygoRklMRSAqZnApKTsKLWV4dGVybiB2b2lkIGNtZF9wY2hhciBfX0FSR1MoKGludCBjLCBpbnQgb2Zmc2V0KSk7Ci1leHRlcm4gaW50IGNtZF9nY2hhciBfX0FSR1MoKGludCBvZmZzZXQpKTsKLWV4dGVybiBjaGFyX3UgKnNjcmlwdF9nZXQgX19BUkdTKChleGFyZ19UICplYXAsIGNoYXJfdSAqY21kKSk7CitjaGFyX3UgKmdldGNtZGxpbmUgX19BUkdTKChpbnQgZmlyc3RjLCBsb25nIGNvdW50LCBpbnQgaW5kZW50KSk7CitjaGFyX3UgKmdldGNtZGxpbmVfcHJvbXB0IF9fQVJHUygoaW50IGZpcnN0YywgY2hhcl91ICpwcm9tcHQsIGludCBhdHRyLCBpbnQgeHBfY29udGV4dCwgY2hhcl91ICp4cF9hcmcpKTsKK2ludCB0ZXh0X2xvY2tlZCBfX0FSR1MoKHZvaWQpKTsKK3ZvaWQgdGV4dF9sb2NrZWRfbXNnIF9fQVJHUygodm9pZCkpOworaW50IGN1cmJ1Zl9sb2NrZWQgX19BUkdTKCh2b2lkKSk7CitjaGFyX3UgKmdldGV4bGluZSBfX0FSR1MoKGludCBjLCB2b2lkICpkdW1teSwgaW50IGluZGVudCkpOworY2hhcl91ICpnZXRleG1vZGVsaW5lIF9fQVJHUygoaW50IHByb21wdGMsIHZvaWQgKmR1bW15LCBpbnQgaW5kZW50KSk7CitpbnQgY21kbGluZV9vdmVyc3RyaWtlIF9fQVJHUygodm9pZCkpOworaW50IGNtZGxpbmVfYXRfZW5kIF9fQVJHUygodm9pZCkpOworY29sbnJfVCBjbWRsaW5lX2dldHZjb2xfY3Vyc29yIF9fQVJHUygodm9pZCkpOwordm9pZCBmcmVlX2NtZGxpbmVfYnVmIF9fQVJHUygodm9pZCkpOwordm9pZCBwdXRjbWRsaW5lIF9fQVJHUygoaW50IGMsIGludCBzaGlmdCkpOwordm9pZCB1bnB1dGNtZGxpbmUgX19BUkdTKCh2b2lkKSk7CitpbnQgcHV0X29uX2NtZGxpbmUgX19BUkdTKChjaGFyX3UgKnN0ciwgaW50IGxlbiwgaW50IHJlZHJhdykpOworY2hhcl91ICpzYXZlX2NtZGxpbmVfYWxsb2MgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHJlc3RvcmVfY21kbGluZV9hbGxvYyBfX0FSR1MoKGNoYXJfdSAqcCkpOwordm9pZCBjbWRsaW5lX3Bhc3RlX3N0ciBfX0FSR1MoKGNoYXJfdSAqcywgaW50IGxpdGVyYWxseSkpOwordm9pZCByZWRyYXdjbWRsaW5lIF9fQVJHUygodm9pZCkpOwordm9pZCByZWRyYXdjbWQgX19BUkdTKCh2b2lkKSk7Cit2b2lkIGNvbXB1dGVfY21kcm93IF9fQVJHUygodm9pZCkpOwordm9pZCBnb3RvY21kbGluZSBfX0FSR1MoKGludCBjbHIpKTsKK2NoYXJfdSAqRXhwYW5kT25lIF9fQVJHUygoZXhwYW5kX1QgKnhwLCBjaGFyX3UgKnN0ciwgY2hhcl91ICpvcmlnLCBpbnQgb3B0aW9ucywgaW50IG1vZGUpKTsKK3ZvaWQgRXhwYW5kSW5pdCBfX0FSR1MoKGV4cGFuZF9UICp4cCkpOwordm9pZCBFeHBhbmRDbGVhbnVwIF9fQVJHUygoZXhwYW5kX1QgKnhwKSk7Cit2b2lkIEV4cGFuZEVzY2FwZSBfX0FSR1MoKGV4cGFuZF9UICp4cCwgY2hhcl91ICpzdHIsIGludCBudW1maWxlcywgY2hhcl91ICoqZmlsZXMsIGludCBvcHRpb25zKSk7Cit2b2lkIHRpbGRlX3JlcGxhY2UgX19BUkdTKChjaGFyX3UgKm9yaWdfcGF0LCBpbnQgbnVtX2ZpbGVzLCBjaGFyX3UgKipmaWxlcykpOworY2hhcl91ICpzbV9nZXR0YWlsIF9fQVJHUygoY2hhcl91ICpzKSk7CitjaGFyX3UgKmFkZHN0YXIgX19BUkdTKChjaGFyX3UgKmZuYW1lLCBpbnQgbGVuLCBpbnQgY29udGV4dCkpOwordm9pZCBzZXRfY21kX2NvbnRleHQgX19BUkdTKChleHBhbmRfVCAqeHAsIGNoYXJfdSAqc3RyLCBpbnQgbGVuLCBpbnQgY29sKSk7CitpbnQgZXhwYW5kX2NtZGxpbmUgX19BUkdTKChleHBhbmRfVCAqeHAsIGNoYXJfdSAqc3RyLCBpbnQgY29sLCBpbnQgKm1hdGNoY291bnQsIGNoYXJfdSAqKiptYXRjaGVzKSk7CitpbnQgRXhwYW5kR2VuZXJpYyBfX0FSR1MoKGV4cGFuZF9UICp4cCwgcmVnbWF0Y2hfVCAqcmVnbWF0Y2gsIGludCAqbnVtX2ZpbGUsIGNoYXJfdSAqKipmaWxlLCBjaGFyX3UgKigoKmZ1bmMpKGV4cGFuZF9UICosIGludCkpKSk7CitjaGFyX3UgKmdsb2JwYXRoIF9fQVJHUygoY2hhcl91ICpwYXRoLCBjaGFyX3UgKmZpbGUpKTsKK3ZvaWQgaW5pdF9oaXN0b3J5IF9fQVJHUygodm9pZCkpOworaW50IGdldF9oaXN0dHlwZSBfX0FSR1MoKGNoYXJfdSAqbmFtZSkpOwordm9pZCBhZGRfdG9faGlzdG9yeSBfX0FSR1MoKGludCBoaXN0eXBlLCBjaGFyX3UgKm5ld19lbnRyeSwgaW50IGluX21hcCwgaW50IHNlcCkpOworaW50IGdldF9oaXN0b3J5X2lkeCBfX0FSR1MoKGludCBoaXN0eXBlKSk7CitjaGFyX3UgKmdldF9jbWRsaW5lX3N0ciBfX0FSR1MoKHZvaWQpKTsKK2ludCBnZXRfY21kbGluZV9wb3MgX19BUkdTKCh2b2lkKSk7CitpbnQgc2V0X2NtZGxpbmVfcG9zIF9fQVJHUygoaW50IHBvcykpOworaW50IGdldF9jbWRsaW5lX3R5cGUgX19BUkdTKCh2b2lkKSk7CitjaGFyX3UgKmdldF9oaXN0b3J5X2VudHJ5IF9fQVJHUygoaW50IGhpc3R5cGUsIGludCBpZHgpKTsKK2ludCBjbHJfaGlzdG9yeSBfX0FSR1MoKGludCBoaXN0eXBlKSk7CitpbnQgZGVsX2hpc3RvcnlfZW50cnkgX19BUkdTKChpbnQgaGlzdHlwZSwgY2hhcl91ICpzdHIpKTsKK2ludCBkZWxfaGlzdG9yeV9pZHggX19BUkdTKChpbnQgaGlzdHlwZSwgaW50IGlkeCkpOwordm9pZCByZW1vdmVfa2V5X2Zyb21faGlzdG9yeSBfX0FSR1MoKHZvaWQpKTsKK2ludCBnZXRfbGlzdF9yYW5nZSBfX0FSR1MoKGNoYXJfdSAqKnN0ciwgaW50ICpudW0xLCBpbnQgKm51bTIpKTsKK3ZvaWQgZXhfaGlzdG9yeSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBwcmVwYXJlX3ZpbWluZm9faGlzdG9yeSBfX0FSR1MoKGludCBhc2tsZW4pKTsKK2ludCByZWFkX3ZpbWluZm9faGlzdG9yeSBfX0FSR1MoKHZpcl9UICp2aXJwKSk7Cit2b2lkIGZpbmlzaF92aW1pbmZvX2hpc3RvcnkgX19BUkdTKCh2b2lkKSk7Cit2b2lkIHdyaXRlX3ZpbWluZm9faGlzdG9yeSBfX0FSR1MoKEZJTEUgKmZwKSk7Cit2b2lkIGNtZF9wY2hhciBfX0FSR1MoKGludCBjLCBpbnQgb2Zmc2V0KSk7CitpbnQgY21kX2djaGFyIF9fQVJHUygoaW50IG9mZnNldCkpOworY2hhcl91ICpzY3JpcHRfZ2V0IF9fQVJHUygoZXhhcmdfVCAqZWFwLCBjaGFyX3UgKmNtZCkpOwogLyogdmltOiBzZXQgZnQ9YyA6ICovCg==