ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggOWRhYTdmOS4uMGMwZGU4OSAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw2OSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjU4IiBkYXRlPSIxNC4wOC4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBlcnJvcl9wYWdlINDPxMTF0tbJ18HF1CDQxdLFzcXOztnFLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJlcnJvcl9wYWdlIiBkaXJlY3RpdmUgc3VwcG9ydHMgdGhlIHZhcmlhYmxlcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivUxdDF0tggzsEgTGludXggydPQz8zY2tXF1NPRIMnO1MXSxsXK0yBwcm9jZnMg183F09TPIHN5c2N0bC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK25vdyB0aGUgcHJvY2ZzIGludGVyZmFjZSBpbnN0ZWFkIG9mIHN5c2N0bCBpcyB1c2VkIG9uIExpbnV4LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9TF0MXS2CDQ0skgydPQz8zY2s/Xwc7JySAiWC1BY2NlbC1SZWRpcmVjdCIg09TSz8vBICJDb250ZW50LVR5cGUiIM7B08zFxNXF1NPRCivJ2iDQxdLXz87B3sHM2M7Px88gz9TXxdTBLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbm93IHRoZSAiQ29udGVudC1UeXBlIiBoZWFkZXIgbGluZSBpcyBpbmhlcml0ZWQgZnJvbSBmaXJzdCByZXNwb25zZQord2hlbiB0aGUgIlgtQWNjZWwtUmVkaXJlY3QiIHdhcyB1c2VkLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBlcnJvcl9wYWdlIM7FINDF0sXOwdDSwdfM0czBIM/bycLL1SA0MTMuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgImVycm9yX3BhZ2UiIGRpcmVjdGl2ZSBkaWQgbm90IHJlZGlyZWN0IHRoZSA0MTMgZXJyb3IuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor2sHXxdLbwcDdycogIj8iIM7FINXEwczRzCDT1MHS2cUgwdLH1c3FztTZLCDF08zJINcg0MXSxdDJ08HOzs/NIFVSSQorzsUgwtnMzyDOz9fZyCDB0sfVzcXO1M/XLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIHRyYWlsaW5nICI/IiBkaWQgbm90IHJlbW92ZSBvbGQgYXJndW1lbnRzIGlmIG5vIG5ldyBhcmd1bWVudHMKK3dlcmUgYWRkZWQgdG8gYSByZXdyaXR0ZW4gVVJJLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK25naW54IM7FINrB0NXTy8HM09EgzsEgNjQtwsnUzs/KIEZyZWVCU0QgNy4wLUNVUlJFTlQuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CituZ2lueCBjb3VsZCBub3QgcnVuIG9uIDY0LWJpdCBGcmVlQlNEIDcuMC1DVVJSRU5ULgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy41NyIgZGF0ZT0iMDkuMDguMjAwNiI+CiAKIDxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCAwNTFiZDY4Li5iN2MwZDA4IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNTciCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjU4IgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYwppbmRleCA4ZDVlZjk1Li45OGUwOThiIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCkBAIC0yMDU2LDcgKzIwNTYsNyBAQAogI2lmIChOR1hfRlJFRUJTRCkKICAgICBzc2l6ZV90ICpucCA9IGRhdGE7CiAKLSAgICBpZiAoKm5wID49IG5neF9mcmVlYnNkX25ldF9pbmV0X3RjcF9zZW5kc3BhY2UpIHsKKyAgICBpZiAoKHVfbG9uZykgKm5wID49IG5neF9mcmVlYnNkX25ldF9pbmV0X3RjcF9zZW5kc3BhY2UpIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiZmFzdGNnaV9zZW5kX2xvd2F0XCIgbXVzdCBiZSBsZXNzIHRoYW4gJWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIihzeXNjdGwgbmV0LmluZXQudGNwLnNlbmRzcGFjZSkiLApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKaW5kZXggYTZhZGMzYy4uMGQ4MGIzMSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCkBAIC0yMzQzLDcgKzIzNDMsNyBAQAogI2lmIChOR1hfRlJFRUJTRCkKICAgICBzc2l6ZV90ICpucCA9IGRhdGE7CiAKLSAgICBpZiAoKm5wID49IG5neF9mcmVlYnNkX25ldF9pbmV0X3RjcF9zZW5kc3BhY2UpIHsKKyAgICBpZiAoKHVfbG9uZykgKm5wID49IG5neF9mcmVlYnNkX25ldF9pbmV0X3RjcF9zZW5kc3BhY2UpIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwicHJveHlfc2VuZF9sb3dhdFwiIG11c3QgYmUgbGVzcyB0aGFuICVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc3lzY3RsIG5ldC5pbmV0LnRjcC5zZW5kc3BhY2UpIiwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ2lueC54cyBiL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ2lueC54cwppbmRleCA4ZTI4N2E2Li41M2I2YTkyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3BlcmwvbmdpbngueHMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25naW54LnhzCkBAIC0xMTYsMTAgKzExNiw4IEBACiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuID09IDApIHsKLSAgICAgICAgICAgIGlmIChuZ3hfaHR0cF9zZXRfY29udGVudF90eXBlKHIpICE9IE5HWF9PSykgewotICAgICAgICAgICAgICAgIFhTUkVUVVJOX0VNUFRZOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAobmd4X2h0dHBfc2V0X2NvbnRlbnRfdHlwZShyKSAhPSBOR1hfT0spIHsKKyAgICAgICAgICAgIFhTUkVUVVJOX0VNUFRZOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jCmluZGV4IGIzZTExNzUuLjZmOTc5YzYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jCkBAIC0yMjYsMTMgKzIyNiw2IEBACiAKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwgInBlcmwgaGFuZGxlciIpOwogCi0gICAgLyogbW9kX3BlcmwncyBjb250ZW50IGhhbmRsZXIgYXNzdW1lcyB0aGF0IGNvbnRlbnQgdHlwZSB3YXMgYWxyZWFkeSBzZXQgKi8KLQotICAgIGlmIChuZ3hfaHR0cF9zZXRfY29udGVudF90eXBlKHIpICE9IE5HWF9PSykgewotICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBjdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLCBuZ3hfaHR0cF9wZXJsX21vZHVsZSk7CiAKICAgICBpZiAoY3R4ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDlkMzNkM2EuLjc2NGYzNWMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtNzAwLDYgKzcwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uLCBjbGNmLT5jbGllbnRfbWF4X2JvZHlfc2l6ZSk7CiAKICAgICBpZiAoci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uICE9IC0xCisgICAgICAgICYmICFyLT5kaXNjYXJkX2JvZHkKICAgICAgICAgJiYgY2xjZi0+Y2xpZW50X21heF9ib2R5X3NpemUKICAgICAgICAgJiYgY2xjZi0+Y2xpZW50X21heF9ib2R5X3NpemUgPCByLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24pCiAgICAgewpAQCAtOTI5LDYgKzkzMCwxMCBAQAogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGksIGhhc2g7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKIAorICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuKSB7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCiAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogCiAgICAgaWYgKHItPmV4dGVuLmxlbikgewpAQCAtMjY4OCwxMCArMjY5MywxMiBAQAogewogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAqbGNmID0gY29uZjsKIAotICAgIG5neF9pbnRfdCAgICAgICAgICAgICBvdmVyd3JpdGU7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgIGksIG47Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgKnZhbHVlOwotICAgIG5neF9odHRwX2Vycl9wYWdlX3QgICplcnI7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZTsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAqdmFsdWUsIHVyaTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaSwgbiwgbnZhcjsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAqdXJpX2xlbmd0aHMsICp1cmlfdmFsdWVzOworICAgIG5neF9odHRwX2Vycl9wYWdlX3QgICAgICAgICplcnI7CisgICAgbmd4X2h0dHBfc2NyaXB0X2NvbXBpbGVfdCAgIHNjOwogCiAgICAgaWYgKGxjZi0+ZXJyb3JfcGFnZXMgPT0gTlVMTCkgewogICAgICAgICBsY2YtPmVycm9yX3BhZ2VzID0gbmd4X2FycmF5X2NyZWF0ZShjZi0+cG9vbCwgNCwKQEAgLTI3MzIsNiArMjczOSwyOCBAQAogICAgICAgICBuID0gMTsKICAgICB9CiAKKyAgICB1cmkgPSB2YWx1ZVtjZi0+YXJncy0+bmVsdHMgLSAxXTsKKyAgICB1cmlfbGVuZ3RocyA9IE5VTEw7CisgICAgdXJpX3ZhbHVlcyA9IE5VTEw7CisKKyAgICBudmFyID0gbmd4X2h0dHBfc2NyaXB0X3ZhcmlhYmxlc19jb3VudCgmdXJpKTsKKworICAgIGlmIChudmFyKSB7CisgICAgICAgIG5neF9tZW16ZXJvKCZzYywgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9jb21waWxlX3QpKTsKKworICAgICAgICBzYy5jZiA9IGNmOworICAgICAgICBzYy5zb3VyY2UgPSAmdXJpOworICAgICAgICBzYy5sZW5ndGhzID0gJnVyaV9sZW5ndGhzOworICAgICAgICBzYy52YWx1ZXMgPSAmdXJpX3ZhbHVlczsKKyAgICAgICAgc2MudmFyaWFibGVzID0gbnZhcjsKKyAgICAgICAgc2MuY29tcGxldGVfbGVuZ3RocyA9IDE7CisgICAgICAgIHNjLmNvbXBsZXRlX3ZhbHVlcyA9IDE7CisKKyAgICAgICAgaWYgKG5neF9odHRwX3NjcmlwdF9jb21waWxlKCZzYykgIT0gTkdYX09LKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKGkgPSAxOyBpIDwgY2YtPmFyZ3MtPm5lbHRzIC0gbjsgaSsrKSB7CiAgICAgICAgIGVyciA9IG5neF9hcnJheV9wdXNoKGxjZi0+ZXJyb3JfcGFnZXMpOwogICAgICAgICBpZiAoZXJyID09IE5VTEwpIHsKQEAgLTI3NTUsNyArMjc4NCw5IEBACiAKICAgICAgICAgZXJyLT5vdmVyd3JpdGUgPSAob3ZlcndyaXRlID49IDApID8gb3ZlcndyaXRlIDogZXJyLT5zdGF0dXM7CiAKLSAgICAgICAgZXJyLT51cmkgPSB2YWx1ZVtjZi0+YXJncy0+bmVsdHMgLSAxXTsKKyAgICAgICAgZXJyLT51cmkgPSB1cmk7CisgICAgICAgIGVyci0+dXJpX2xlbmd0aHMgPSB1cmlfbGVuZ3RoczsKKyAgICAgICAgZXJyLT51cmlfdmFsdWVzID0gdXJpX3ZhbHVlczsKICAgICB9CiAKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CkBAIC0yODM4LDcgKzI4NjksNyBAQAogI2lmIChOR1hfRlJFRUJTRCkKICAgICBzc2l6ZV90ICpucCA9IGRhdGE7CiAKLSAgICBpZiAoKm5wID49IG5neF9mcmVlYnNkX25ldF9pbmV0X3RjcF9zZW5kc3BhY2UpIHsKKyAgICBpZiAoKHVfbG9uZykgKm5wID49IG5neF9mcmVlYnNkX25ldF9pbmV0X3RjcF9zZW5kc3BhY2UpIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwic2VuZF9sb3dhdFwiIG11c3QgYmUgbGVzcyB0aGFuICVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc3lzY3RsIG5ldC5pbmV0LnRjcC5zZW5kc3BhY2UpIiwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCmluZGV4IDVlYTgxMDMuLjM1Zjg2NTggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaApAQCAtMTcxLDkgKzE3MSwxMSBAQAogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfaW50X3QgICAgIHN0YXR1czsKLSAgICBuZ3hfaW50X3QgICAgIG92ZXJ3cml0ZTsKLSAgICBuZ3hfc3RyX3QgICAgIHVyaTsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgIHVyaTsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICp1cmlfbGVuZ3RoczsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICp1cmlfdmFsdWVzOwogfSBuZ3hfaHR0cF9lcnJfcGFnZV90OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3RfYm9keS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKaW5kZXggNDYwY2YzOS4uZmIxODNjNiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKQEAgLTQwNSw3ICs0MDUsNyBAQAogICAgIHNzaXplX3QgICAgICAgc2l6ZTsKICAgICBuZ3hfZXZlbnRfdCAgKnJldjsKIAotICAgIGlmIChyICE9IHItPm1haW4pIHsKKyAgICBpZiAociAhPSByLT5tYWluIHx8IHItPmRpc2NhcmRfYm9keSkgewogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwppbmRleCAxOTE4Mzk3Li4yMTY5Yzg3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwpAQCAtNzkyLDYgKzc5MiwxMCBAQAogCiAgICAgfSBlbHNlIHsKICAgICAgICAgZS0+YnVmLmxlbiA9IGUtPnBvcyAtIGUtPmJ1Zi5kYXRhOworCisgICAgICAgIGlmICghY29kZS0+YWRkX2FyZ3MpIHsKKyAgICAgICAgICAgIHItPmFyZ3MubGVuID0gMDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChlLT5sb2cpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwppbmRleCA3MzRhZDY5Li5kZmZmNjQxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCkBAIC0yOTUsOCArMjk1LDkgQEAKIG5neF9odHRwX3NwZWNpYWxfcmVzcG9uc2VfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9pbnRfdCBlcnJvcikKIHsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICByYzsKLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBpLCBlcnIsIG1zaWVfcGFkZGluZzsKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICpiOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgKnVyaTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBpLCBlcnIsIG1zaWVfcGFkZGluZzsKICAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICpvdXQsICpjbDsKICAgICBuZ3hfaHR0cF9lcnJfcGFnZV90ICAgICAgICplcnJfcGFnZTsKICAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOwpAQCAtMzQ5LDkgKzM1MCwyMCBAQAogCiAgICAgICAgICAgICAgICAgci0+bWV0aG9kID0gTkdYX0hUVFBfR0VUOwogCi0gICAgICAgICAgICAgICAgaWYgKGVycl9wYWdlW2ldLnVyaS5kYXRhWzBdID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfaW50ZXJuYWxfcmVkaXJlY3QociwgJmVycl9wYWdlW2ldLnVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgICAgIHVyaSA9ICZlcnJfcGFnZVtpXS51cmk7CisKKyAgICAgICAgICAgICAgICBpZiAoZXJyX3BhZ2VbaV0udXJpX2xlbmd0aHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5neF9odHRwX3NjcmlwdF9ydW4ociwgdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfcGFnZVtpXS51cmlfbGVuZ3Rocy0+ZWx0cywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX3BhZ2VbaV0udXJpX3ZhbHVlcy0+ZWx0cykKKyAgICAgICAgICAgICAgICAgICAgICAgID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodXJpLT5kYXRhWzBdID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfaW50ZXJuYWxfcmVkaXJlY3QociwgdXJpLCBOVUxMKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbiA9CkBAIC0zNjQsMTAgKzM3NiwxMCBAQAogICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+aGFzaCA9IDE7CiAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT5rZXkubGVuID0gc2l6ZW9mKCJMb2NhdGlvbiIpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPmtleS5kYXRhID0gKHVfY2hhciAqKSAiTG9jYXRpb24iOwotICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+dmFsdWUgPSBlcnJfcGFnZVtpXS51cmk7CisgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT52YWx1ZSA9ICp1cmk7CiAKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBlcnJvciA9IE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDVlMjJmMmQuLmQ1YjdhZWUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgeyBuZ3hfc3RyaW5nKCJDb250ZW50LVR5cGUiKSwKICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19oZWFkZXJfbGluZSwKICAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfdXBzdHJlYW1faGVhZGVyc19pbl90LCBjb250ZW50X3R5cGUpLAotICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9jb3B5X2NvbnRlbnRfdHlwZSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9jb3B5X2NvbnRlbnRfdHlwZSwgMCwgMSB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJDb250ZW50LUxlbmd0aCIpLAogICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9wcm9jZXNzX2hlYWRlcl9saW5lLApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2QuaCBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkLmgKaW5kZXggNGU4NjVhMy4uZjIwMmY4ZiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2QuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZC5oCkBAIC0xMSwxMCArMTEsMTAgQEAKIG5neF9jaGFpbl90ICpuZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfY2hhaW5fdCAqaW4sCiAgICAgb2ZmX3QgbGltaXQpOwogCi1leHRlcm4gaW50IG5neF9mcmVlYnNkX2tlcm5fb3NyZWxkYXRlOwotZXh0ZXJuIGludCBuZ3hfZnJlZWJzZF9od19uY3B1OwotZXh0ZXJuIGludCBuZ3hfZnJlZWJzZF9uZXRfaW5ldF90Y3Bfc2VuZHNwYWNlOwotZXh0ZXJuIGludCBuZ3hfZnJlZWJzZF9rZXJuX2lwY196ZXJvX2NvcHlfc2VuZDsKK2V4dGVybiBpbnQgICAgIG5neF9mcmVlYnNkX2tlcm5fb3NyZWxkYXRlOworZXh0ZXJuIGludCAgICAgbmd4X2ZyZWVic2RfaHdfbmNwdTsKK2V4dGVybiB1X2xvbmcgIG5neF9mcmVlYnNkX25ldF9pbmV0X3RjcF9zZW5kc3BhY2U7CitleHRlcm4gaW50ICAgICBuZ3hfZnJlZWJzZF9rZXJuX2lwY196ZXJvX2NvcHlfc2VuZDsKIAogZXh0ZXJuIG5neF91aW50X3Qgbmd4X2ZyZWVic2Rfc2VuZGZpbGVfbmJ5dGVzX2J1ZzsKIGV4dGVybiBuZ3hfdWludF90IG5neF9mcmVlYnNkX3VzZV90Y3Bfbm9wdXNoOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfaW5pdC5jCmluZGV4IGY4MmE2YWMuLmNiNDQ4MjkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2luaXQuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9pbml0LmMKQEAgLTksMTggKzksMTggQEAKIAogCiAvKiBGcmVlQlNEIDMuMCBhdCBsZWFzdCAqLwotY2hhciBuZ3hfZnJlZWJzZF9rZXJuX29zdHlwZVsxNl07Ci1jaGFyIG5neF9mcmVlYnNkX2tlcm5fb3NyZWxlYXNlWzEyOF07Ci1pbnQgbmd4X2ZyZWVic2Rfa2Vybl9vc3JlbGRhdGU7Ci1pbnQgbmd4X2ZyZWVic2RfaHdfbmNwdTsKLWludCBuZ3hfZnJlZWJzZF9uZXRfaW5ldF90Y3Bfc2VuZHNwYWNlOwotaW50IG5neF9mcmVlYnNkX2tlcm5faXBjX3NvbWF4Y29ubjsKK2NoYXIgICAgbmd4X2ZyZWVic2Rfa2Vybl9vc3R5cGVbMTZdOworY2hhciAgICBuZ3hfZnJlZWJzZF9rZXJuX29zcmVsZWFzZVsxMjhdOworaW50ICAgICBuZ3hfZnJlZWJzZF9rZXJuX29zcmVsZGF0ZTsKK2ludCAgICAgbmd4X2ZyZWVic2RfaHdfbmNwdTsKK2ludCAgICAgbmd4X2ZyZWVic2Rfa2Vybl9pcGNfc29tYXhjb25uOwordV9sb25nICBuZ3hfZnJlZWJzZF9uZXRfaW5ldF90Y3Bfc2VuZHNwYWNlOwogCiAvKiBGcmVlQlNEIDQuOSAqLwotaW50IG5neF9mcmVlYnNkX21hY2hkZXBfaGx0X2xvZ2ljYWxfY3B1czsKK2ludCAgICAgbmd4X2ZyZWVic2RfbWFjaGRlcF9obHRfbG9naWNhbF9jcHVzOwogCiAvKiBGcmVlQlNEIDUuMCAqLwotaW50IG5neF9mcmVlYnNkX2tlcm5faXBjX3plcm9fY29weV9zZW5kOworaW50ICAgICBuZ3hfZnJlZWJzZF9rZXJuX2lwY196ZXJvX2NvcHlfc2VuZDsKIAogCiBuZ3hfdWludF90IG5neF9mcmVlYnNkX3NlbmRmaWxlX25ieXRlc19idWc7CkBAIC00Myw3ICs0Myw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBjaGFyICAgICAgICAqbmFtZTsKLSAgICBpbnQgICAgICAgICAqdmFsdWU7CisgICAgdm9pZCAgICAgICAgKnZhbHVlOwogICAgIHNpemVfdCAgICAgICBzaXplOwogICAgIG5neF91aW50X3QgICBleGlzdHM7CiB9IHN5c2N0bF90OwpAQCAtNTIsMjMgKzUyLDIzIEBACiBzeXNjdGxfdCBzeXNjdGxzW10gPSB7CiAgICAgeyAiaHcubmNwdSIsCiAgICAgICAmbmd4X2ZyZWVic2RfaHdfbmNwdSwKLSAgICAgIHNpemVvZihpbnQpLCAwIH0sCisgICAgICBzaXplb2Yobmd4X2ZyZWVic2RfaHdfbmNwdSksIDAgfSwKIAogICAgIHsgIm1hY2hkZXAuaGx0X2xvZ2ljYWxfY3B1cyIsCiAgICAgICAmbmd4X2ZyZWVic2RfbWFjaGRlcF9obHRfbG9naWNhbF9jcHVzLAotICAgICAgc2l6ZW9mKGludCksIDAgfSwKKyAgICAgIHNpemVvZihuZ3hfZnJlZWJzZF9tYWNoZGVwX2hsdF9sb2dpY2FsX2NwdXMpLCAwIH0sCiAKICAgICB7ICJuZXQuaW5ldC50Y3Auc2VuZHNwYWNlIiwKICAgICAgICZuZ3hfZnJlZWJzZF9uZXRfaW5ldF90Y3Bfc2VuZHNwYWNlLAotICAgICAgc2l6ZW9mKGludCksIDAgfSwKKyAgICAgIHNpemVvZihuZ3hfZnJlZWJzZF9uZXRfaW5ldF90Y3Bfc2VuZHNwYWNlKSwgMCB9LAogCiAgICAgeyAia2Vybi5pcGMuc29tYXhjb25uIiwKICAgICAgICZuZ3hfZnJlZWJzZF9rZXJuX2lwY19zb21heGNvbm4sCi0gICAgICBzaXplb2YoaW50KSwgMCB9LAorICAgICAgc2l6ZW9mKG5neF9mcmVlYnNkX2tlcm5faXBjX3NvbWF4Y29ubiksIDAgfSwKIAogICAgIHsgImtlcm4uaXBjLnplcm9fY29weS5zZW5kIiwKICAgICAgICZuZ3hfZnJlZWJzZF9rZXJuX2lwY196ZXJvX2NvcHlfc2VuZCwKLSAgICAgIHNpemVvZihpbnQpLCAwIH0sCisgICAgICBzaXplb2Yobmd4X2ZyZWVic2Rfa2Vybl9pcGNfemVyb19jb3B5X3NlbmQpLCAwIH0sCiAKICAgICB7IE5VTEwsIE5VTEwsIDAsIDAgfQogfTsKQEAgLTE3NywxMSArMTc3LDEwIEBACiAKIAogICAgIGZvciAoaSA9IDA7IHN5c2N0bHNbaV0ubmFtZTsgaSsrKSB7Ci0gICAgICAgICpzeXNjdGxzW2ldLnZhbHVlID0gMDsKICAgICAgICAgc2l6ZSA9IHN5c2N0bHNbaV0uc2l6ZTsKIAogICAgICAgICBpZiAoc3lzY3RsYnluYW1lKHN5c2N0bHNbaV0ubmFtZSwgc3lzY3Rsc1tpXS52YWx1ZSwgJnNpemUsIE5VTEwsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IDApCisgICAgICAgICAgICA9PSAwKQogICAgICAgICB7CiAgICAgICAgICAgICBzeXNjdGxzW2ldLmV4aXN0cyA9IDE7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE5MywxMiArMTkyLDYgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSNpZiAwCi0gICAgICAgIGlmIChzeXNjdGxzW2ldLnZhbHVlID09ICZuZ3hfZnJlZWJzZF9tYWNoZGVwX2hsdF9sb2dpY2FsX2NwdXMpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICJzeXNjdGxieW5hbWUoJXMpIGZhaWxlZCIsIHN5c2N0bHNbaV0ubmFtZSk7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CkBAIC0yMDYsMTUgKzE5OSwxMiBAQAogCiAgICAgaWYgKG5neF9mcmVlYnNkX21hY2hkZXBfaGx0X2xvZ2ljYWxfY3B1cykgewogICAgICAgICBuZ3hfbmNwdSA9IG5neF9mcmVlYnNkX2h3X25jcHUgLyAyOworCiAgICAgfSBlbHNlIHsKICAgICAgICAgbmd4X25jcHUgPSBuZ3hfZnJlZWJzZF9od19uY3B1OwogICAgIH0KIAotICAgIGlmICh2ZXJzaW9uIDwgNjAwMDA4KSB7Ci0gICAgICAgIHNvbWF4Y29ubiA9IDMyNzY3OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNvbWF4Y29ubiA9IDY1NTM1OwotICAgIH0KKyAgICBzb21heGNvbm4gPSB2ZXJzaW9uIDwgNjAwMDA4ID8gMzI2NzYgOiA2NTUzNTsKIAogICAgIGlmIChuZ3hfZnJlZWJzZF9rZXJuX2lwY19zb21heGNvbm4gPiBzb21heGNvbm4pIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIDAsCkBAIC0yMzQsNiArMjI0LDcgQEAKIHZvaWQKIG5neF9vc19zcGVjaWZpY19zdGF0dXMobmd4X2xvZ190ICpsb2cpCiB7CisgICAgdV9sb25nICAgICAgdmFsdWU7CiAgICAgbmd4X3VpbnRfdCAgaTsKIAogICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGxvZywgMCwgIk9TOiAlcyAlcyIsCkBAIC0yNTEsOCArMjQyLDE1IEBACiAKICAgICBmb3IgKGkgPSAwOyBzeXNjdGxzW2ldLm5hbWU7IGkrKykgewogICAgICAgICBpZiAoc3lzY3Rsc1tpXS5leGlzdHMpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGxvZywgMCwgIiVzOiAlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2N0bHNbaV0ubmFtZSwgKnN5c2N0bHNbaV0udmFsdWUpOworICAgICAgICAgICAgaWYgKHN5c2N0bHNbaV0uc2l6ZSA9PSBzaXplb2YobG9uZykpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICoobG9uZyAqKSBzeXNjdGxzW2ldLnZhbHVlOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlID0gKihpbnQgKikgc3lzY3Rsc1tpXS52YWx1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgbG9nLCAwLCAiJXM6ICVsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY3Rsc1tpXS5uYW1lLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2luaXQuYwppbmRleCA4ZDJmNzkxLi4xOTVkNjRkIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfaW5pdC5jCisrKyBiL3NyYy9vcy91bml4L25neF9saW51eF9pbml0LmMKQEAgLTgsMTAgKzgsMTQgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKLWNoYXIgbmd4X2xpbnV4X2tlcm5fb3N0eXBlWzUwXTsKLWNoYXIgbmd4X2xpbnV4X2tlcm5fb3NyZWxlYXNlWzIwXTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2xpbnV4X3Byb2NmcyhjaGFyICpuYW1lLCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisgICAgbmd4X2xvZ190ICpsb2cpOwogCi1pbnQgbmd4X2xpbnV4X3J0c2lnX21heDsKKworY2hhciAgbmd4X2xpbnV4X2tlcm5fb3N0eXBlWzUwXTsKK2NoYXIgIG5neF9saW51eF9rZXJuX29zcmVsZWFzZVsyMF07CisKK2ludCAgIG5neF9saW51eF9ydHNpZ19tYXg7CiAKIAogc3RhdGljIG5neF9vc19pb190IG5neF9saW51eF9pbyA9IHsKQEAgLTM1LDM1ICszOSwzMSBAQAogICAgIHNpemVfdCAgICAgbGVuOwogICAgIG5neF9lcnJfdCAgZXJyOwogCisgICAgaWYgKG5neF9saW51eF9wcm9jZnMoIi9wcm9jL3N5cy9rZXJuZWwvb3N0eXBlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbGludXhfa2Vybl9vc3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9saW51eF9rZXJuX29zdHlwZSksIGxvZykKKyAgICAgICAgPT0gLTEpCisgICAgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIGlmIChuZ3hfbGludXhfcHJvY2ZzKCIvcHJvYy9zeXMva2VybmVsL29zcmVsZWFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xpbnV4X2tlcm5fb3NyZWxlYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfbGludXhfa2Vybl9vc3JlbGVhc2UpLCBsb2cpCisgICAgICAgID09IC0xKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKwogICAgIG5hbWVbMF0gPSBDVExfS0VSTjsKLSAgICBuYW1lWzFdID0gS0VSTl9PU1RZUEU7Ci0gICAgbGVuID0gc2l6ZW9mKG5neF9saW51eF9rZXJuX29zdHlwZSk7Ci0KLSAgICBpZiAoc3lzY3RsKG5hbWUsIDIsIG5neF9saW51eF9rZXJuX29zdHlwZSwgJmxlbiwgTlVMTCwgMCkgPT0gLTEpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAic3lzY3RsKEtFUk5fT1NUWVBFKSBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICB9Ci0KLSAgICAvKiBuYW1lWzBdID0gQ1RMX0tFUk47ICovCi0gICAgbmFtZVsxXSA9IEtFUk5fT1NSRUxFQVNFOwotICAgIGxlbiA9IHNpemVvZihuZ3hfbGludXhfa2Vybl9vc3JlbGVhc2UpOwotCi0gICAgaWYgKHN5c2N0bChuYW1lLCAyLCBuZ3hfbGludXhfa2Vybl9vc3JlbGVhc2UsICZsZW4sIE5VTEwsIDApID09IC0xKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgInN5c2N0bChLRVJOX09TUkVMRUFTRSkgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgfQotCi0KLSAgICAvKiBuYW1lWzBdID0gQ1RMX0tFUk47ICovCiAgICAgbmFtZVsxXSA9IEtFUk5fUlRTSUdNQVg7CiAgICAgbGVuID0gc2l6ZW9mKG5neF9saW51eF9ydHNpZ19tYXgpOwogCiAgICAgaWYgKHN5c2N0bChuYW1lLCAyLCAmbmd4X2xpbnV4X3J0c2lnX21heCwgJmxlbiwgTlVMTCwgMCkgPT0gLTEpIHsKICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwogCi0gICAgICAgIGlmIChlcnIgIT0gTkdYX0VOT1RESVIpIHsKKyAgICAgICAgaWYgKGVyciAhPSBOR1hfRU5PVERJUiAmJiBlcnIgIT0gTkdYX0VOT1NZUykgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5c2N0bChLRVJOX1JUU0lHTUFYKSBmYWlsZWQiKTsKIApAQCAtODksMyArODksMzYgQEAKICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBsb2csIDAsICJzeXNjdGwoS0VSTl9SVFNJR01BWCk6ICVkIiwKICAgICAgICAgICAgICAgICAgIG5neF9saW51eF9ydHNpZ19tYXgpOwogfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9saW51eF9wcm9jZnMoY2hhciAqbmFtZSwgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBuZ3hfbG9nX3QgKmxvZykKK3sKKyAgICBpbnQgICAgICAgbjsKKyAgICBuZ3hfZmRfdCAgZmQ7CisKKyAgICBmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkpOworCisgICAgaWYgKGZkID09IE5HWF9JTlZBTElEX0ZJTEUpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAib3BlbihcIiVzXCIpIGZhaWxlZCIsIG5hbWUpOworCisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgbiA9IHJlYWQoZmQsIGJ1ZiwgbGVuKTsKKworICAgIGlmIChuID09IC0xKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgInJlYWQoXCIlc1wiKSBmYWlsZWQiLCBuYW1lKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChidWZbbiAtIDFdID09ICdcbicpIHsKKyAgICAgICAgICAgIGJ1ZlstLW5dID0gJ1wwJzsKKyAgICAgICAgfQorICAgIH0KKworICAgIG5neF9jbG9zZV9maWxlKGZkKTsKKworICAgIHJldHVybiBuOworfQo=