ZGlmZiAtLWdpdCBhL3NyYy9NYWtlX21pbmcubWFrIGIvc3JjL01ha2VfbWluZy5tYWsKaW5kZXggZTI5MjgxNy4uMmM4NzU1YyAxMDA2NDQKLS0tIGEvc3JjL01ha2VfbWluZy5tYWsKKysrIGIvc3JjL01ha2VfbWluZy5tYWsKQEAgLTExNyw3ICsxMTcsNyBAQAogIyBjOi93aW5kb3dzL3N5c3RlbTMyIGlzbid0IGEgZ29vZCBpZGVhLCB1c2Ugc29tZSBvdGhlciBkaXI7CiAjIHRvIGJ1aWxkIHlvdSBjYW4gcHV0IHRoZW0gaW4gdGVtcCBkaXIpCiBpZm5kZWYgTVpTQ0hFTUVfTElCRElSCi1NWlNDSEVNRV9MSUJESVI9JChNWlNDSEVNRSkKK01aU0NIRU1FX0xJQkRJUj0tTCQoTVpTQ0hFTUUpCiBlbmRpZgogZW5kaWYKIApAQCAtNTEwLDcgKzUxMCw3IEBACiAJJChDQykgJChDRkxBR1MpIC1vIHVuaW5zdGFsLmV4ZSB1bmluc3RhbC5jICQoTElCKQogCiAkKFRBUkdFVCk6ICQoT1VURElSKSAkKE9CSikKLQkkKENDKSAkKENGTEFHUykgJChMRkxBR1MpIC1vICRAICQoT0JKKSAkKExJQikgLWxvbGUzMiAtbHV1aWQgLUwgJChNWlNDSEVNRV9MSUJESVIpICQoTVpTQ0hFTUVfTElCKSAkKFBZVEhPTkxJQikgJChSVUJZTElCKQorCSQoQ0MpICQoQ0ZMQUdTKSAkKExGTEFHUykgLW8gJEAgJChPQkopICQoTElCKSAtbG9sZTMyIC1sdXVpZCAkKE1aU0NIRU1FX0xJQkRJUikgJChNWlNDSEVNRV9MSUIpICQoUFlUSE9OTElCKSAkKFJVQllMSUIpCiAKIHVweDogZXhlcwogCXVweCBndmltLmV4ZQpkaWZmIC0tZ2l0IGEvc3JjL2J1ZmZlci5jIGIvc3JjL2J1ZmZlci5jCmluZGV4IDlmMjliMjcuLmNmY2E5MzkgMTAwNjQ0Ci0tLSBhL3NyYy9idWZmZXIuYworKysgYi9zcmMvYnVmZmVyLmMKQEAgLTU2NSw2ICs1NjUsNyBAQAogI2lmZGVmIEZFQVRfU1lOX0hMCiAgICAgc3ludGF4X2NsZWFyKGJ1Zik7CQkgICAgLyogcmVzZXQgc3ludGF4IGluZm8gKi8KICNlbmRpZgorICAgIGJ1Zi0+Yl9mbGFncyAmPSB+QkZfUkVBREVSUjsgICAgLyogYSByZWFkIGVycm9yIGlzIG5vIGxvbmdlciByZWxldmFudCAqLwogfQogCiAvKgpAQCAtNjcwLDE3ICs2NzEsMjMgQEAKIAkJJiYgKGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykpCiAgICAgaWYgKHN3YXBfZXhpc3RzX2FjdGlvbiA9PSBTRUFfUVVJVCAmJiAqZWFwLT5jbWQgPT0gJ3MnKQogICAgIHsKLQlpbnQJb2xkX2dvdF9pbnQgPSBnb3RfaW50OworIyAgaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCWNsZWFudXBfVCAgIGNzOwogCi0JLyogUXVpdHRpbmcgbWVhbnMgY2xvc2luZyB0aGUgc3BsaXQgd2luZG93LCBub3RoaW5nIGVsc2UuCi0JICogUmVzZXQgZ290X2ludCBoZXJlLCBiZWNhdXNlIGl0IGNhdXNlcyBhYm9ydGluZygpIHRvIHJldHVybiBUUlVFCi0JICogd2hpY2ggYnJlYWtzIGNsb3NpbmcgYSB3aW5kb3cuICovCi0JZ290X2ludCA9IEZBTFNFOworCS8qIFJlc2V0IHRoZSBlcnJvci9pbnRlcnJ1cHQvZXhjZXB0aW9uIHN0YXRlIGhlcmUgc28gdGhhdAorCSAqIGFib3J0aW5nKCkgcmV0dXJucyBGQUxTRSB3aGVuIGNsb3NpbmcgYSB3aW5kb3cuICovCisJZW50ZXJfY2xlYW51cCgmY3MpOworIyAgZW5kaWYKIAorCS8qIFF1aXR0aW5nIG1lYW5zIGNsb3NpbmcgdGhlIHNwbGl0IHdpbmRvdywgbm90aGluZyBlbHNlLiAqLwogCXdpbl9jbG9zZShjdXJ3aW4sIFRSVUUpOwotCi0JZ290X2ludCB8PSBvbGRfZ290X2ludDsKIAlzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsKKworIyAgaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCS8qIFJlc3RvcmUgdGhlIGVycm9yL2ludGVycnVwdC9leGNlcHRpb24gc3RhdGUgaWYgbm90IGRpc2NhcmRlZCBieSBhCisJICogbmV3IGFib3J0aW5nIGVycm9yLCBpbnRlcnJ1cHQsIG9yIHVuY2F1Z2h0IGV4Y2VwdGlvbi4gKi8KKwlsZWF2ZV9jbGVhbnVwKCZjcyk7CisjICBlbmRpZgogICAgIH0KICAgICBlbHNlCiAJaGFuZGxlX3N3YXBfZXhpc3RzKG9sZF9jdXJidWYpOwpAQCAtNjk3LDM3ICs3MDQsNTggQEAKIGhhbmRsZV9zd2FwX2V4aXN0cyhvbGRfY3VyYnVmKQogICAgIGJ1Zl9UCSpvbGRfY3VyYnVmOwogewotICAgIGludAkJb2xkX2dvdF9pbnQgPSBnb3RfaW50OwotCi0gICAgLyogUmVzZXQgZ290X2ludCBoZXJlLCBiZWNhdXNlIGl0IGNhdXNlcyBhYm9ydGluZygpIHRvIHJldHVybiBUUlVFIHdoaWNoCi0gICAgICogYnJlYWtzIGNsb3NpbmcgYSBidWZmZXIuICovCi0gICAgZ290X2ludCA9IEZBTFNFOworIyBpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCisgICAgY2xlYW51cF9UCWNzOworIyBlbmRpZgogCiAgICAgaWYgKHN3YXBfZXhpc3RzX2FjdGlvbiA9PSBTRUFfUVVJVCkKICAgICB7CisjIGlmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwkvKiBSZXNldCB0aGUgZXJyb3IvaW50ZXJydXB0L2V4Y2VwdGlvbiBzdGF0ZSBoZXJlIHNvIHRoYXQKKwkgKiBhYm9ydGluZygpIHJldHVybnMgRkFMU0Ugd2hlbiBjbG9zaW5nIGEgYnVmZmVyLiAqLworCWVudGVyX2NsZWFudXAoJmNzKTsKKyMgZW5kaWYKKwogCS8qIFVzZXIgc2VsZWN0ZWQgUXVpdCBhdCBBVFRFTlRJT04gcHJvbXB0LiAgR28gYmFjayB0byBwcmV2aW91cwogCSAqIGJ1ZmZlci4gIElmIHRoYXQgYnVmZmVyIGlzIGdvbmUgb3IgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgb25lLAogCSAqIG9wZW4gYSBuZXcsIGVtcHR5IGJ1ZmZlci4gKi8KIAlzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsJLyogZG9uJ3Qgd2FudCBpdCBhZ2FpbiAqLwogCWNsb3NlX2J1ZmZlcihjdXJ3aW4sIGN1cmJ1ZiwgRE9CVUZfVU5MT0FEKTsKIAlpZiAoIWJ1Zl92YWxpZChvbGRfY3VyYnVmKSB8fCBvbGRfY3VyYnVmID09IGN1cmJ1ZikKLQkgICAgb2xkX2N1cmJ1ZiA9IGJ1Zmxpc3RfbmV3KE5VTEwsIE5VTEwsIDFMLAotCQkJCQkgQkxOX0NVUkJVRiB8IEJMTl9MSVNURUQgfCBCTE5fRk9SQ0UpOworCSAgICBvbGRfY3VyYnVmID0gYnVmbGlzdF9uZXcoTlVMTCwgTlVMTCwgMUwsIEJMTl9DVVJCVUYgfCBCTE5fTElTVEVEKTsKIAlpZiAob2xkX2N1cmJ1ZiAhPSBOVUxMKQogCSAgICBlbnRlcl9idWZmZXIob2xkX2N1cmJ1Zik7CiAJLyogSWYgIm9sZF9jdXJidWYiIGlzIE5VTEwgd2UgYXJlIGluIGJpZyB0cm91YmxlIGhlcmUuLi4gKi8KKworIyBpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCisJLyogUmVzdG9yZSB0aGUgZXJyb3IvaW50ZXJydXB0L2V4Y2VwdGlvbiBzdGF0ZSBpZiBub3QgZGlzY2FyZGVkIGJ5IGEKKwkgKiBuZXcgYWJvcnRpbmcgZXJyb3IsIGludGVycnVwdCwgb3IgdW5jYXVnaHQgZXhjZXB0aW9uLiAqLworCWxlYXZlX2NsZWFudXAoJmNzKTsKKyMgZW5kaWYKICAgICB9CiAgICAgZWxzZSBpZiAoc3dhcF9leGlzdHNfYWN0aW9uID09IFNFQV9SRUNPVkVSKQogICAgIHsKKyMgaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCS8qIFJlc2V0IHRoZSBlcnJvci9pbnRlcnJ1cHQvZXhjZXB0aW9uIHN0YXRlIGhlcmUgc28gdGhhdAorCSAqIGFib3J0aW5nKCkgcmV0dXJucyBGQUxTRSB3aGVuIGNsb3NpbmcgYSBidWZmZXIuICovCisJZW50ZXJfY2xlYW51cCgmY3MpOworIyBlbmRpZgorCiAJLyogVXNlciBzZWxlY3RlZCBSZWNvdmVyIGF0IEFUVEVOVElPTiBwcm9tcHQuICovCiAJbXNnX3Njcm9sbCA9IFRSVUU7CiAJbWxfcmVjb3ZlcigpOwogCU1TR19QVVRTKCJcbiIpOwkvKiBkb24ndCBvdmVyd3JpdGUgdGhlIGxhc3QgbWVzc2FnZSAqLwogCWNtZGxpbmVfcm93ID0gbXNnX3JvdzsKIAlkb19tb2RlbGluZXMoRkFMU0UpOworCisjIGlmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwkvKiBSZXN0b3JlIHRoZSBlcnJvci9pbnRlcnJ1cHQvZXhjZXB0aW9uIHN0YXRlIGlmIG5vdCBkaXNjYXJkZWQgYnkgYQorCSAqIG5ldyBhYm9ydGluZyBlcnJvciwgaW50ZXJydXB0LCBvciB1bmNhdWdodCBleGNlcHRpb24uICovCisJbGVhdmVfY2xlYW51cCgmY3MpOworIyBlbmRpZgogICAgIH0KICAgICBzd2FwX2V4aXN0c19hY3Rpb24gPSBTRUFfTk9ORTsKLSAgICBnb3RfaW50IHw9IG9sZF9nb3RfaW50OworCiB9CiAjZW5kaWYKIApAQCAtMTM0NywxMSArMTM3NSwxMyBAQAogICAgIC8qIE1ha2Ugc3VyZSB0aGUgYnVmZmVyIGlzIGxvYWRlZC4gKi8KICAgICBpZiAoY3VyYnVmLT5iX21sLm1sX21mcCA9PSBOVUxMKQkvKiBuZWVkIHRvIGxvYWQgdGhlIGZpbGUgKi8KICAgICB7CisjaWZkZWYgRkVBVF9BVVRPQ01ECiAJLyogSWYgdGhlcmUgaXMgbm8gZmlsZXR5cGUsIGFsbG93IGZvciBkZXRlY3Rpbmcgb25lLiAgRXNwLiB1c2VmdWwgZm9yCiAJICogIjpiYWxsIiB1c2VkIGluIGEgYXV0b2NvbW1hbmQuICBJZiB0aGVyZSBhbHJlYWR5IGlzIGEgZmlsZXR5cGUgd2UKIAkgKiBtaWdodCBwcmVmZXIgdG8ga2VlcCBpdC4gKi8KIAlpZiAoKmN1cmJ1Zi0+Yl9wX2Z0ID09IE5VTCkKIAkgICAgZGlkX2ZpbGV0eXBlID0gRkFMU0U7CisjZW5kaWYKIAogCW9wZW5fYnVmZmVyKEZBTFNFLCBOVUxMKTsKICAgICB9CkBAIC0xNDA4LDcgKzE0MzgsNiBAQAogICogSWYgKGZsYWdzICYgQkxOX0NVUkJVRikgaXMgVFJVRSwgbWF5IHVzZSBjdXJyZW50IGJ1ZmZlci4KICAqIElmIChmbGFncyAmIEJMTl9MSVNURUQpIGlzIFRSVUUsIGFkZCBuZXcgYnVmZmVyIHRvIGJ1ZmZlciBsaXN0LgogICogSWYgKGZsYWdzICYgQkxOX0RVTU1ZKSBpcyBUUlVFLCBkb24ndCBjb3VudCBpdCBhcyBhIHJlYWwgYnVmZmVyLgotICogSWYgKGZsYWdzICYgQkxOX0ZPUkNFKSBpcyBUUlVFLCBkb24ndCBhYm9ydCBvbiBhbiBlcnJvci4KICAqIFRoaXMgaXMgdGhlIE9OTFkgd2F5IHRvIGNyZWF0ZSBhIG5ldyBidWZmZXIuCiAgKi8KIHN0YXRpYyBpbnQgIHRvcF9maWxlX251bSA9IDE7CQkvKiBoaWdoZXN0IGZpbGUgbnVtYmVyICovCkBAIC0xNDg0LDcgKzE1MTMsNyBAQAogCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZXSVBFT1VULCBOVUxMLCBOVUxMLCBGQUxTRSwgY3VyYnVmKTsKICMgaWZkZWYgRkVBVF9FVkFMCiAJLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCi0JaWYgKCEoZmxhZ3MgJiBCTE5fRk9SQ0UpICYmIGFib3J0aW5nKCkpCisJaWYgKGFib3J0aW5nKCkpCiAJICAgIHJldHVybiBOVUxMOwogIyBlbmRpZgogI2VuZGlmCkBAIC0xNTM4LDcgKzE1NjcsNyBAQAogCSAgICByZXR1cm4gTlVMTDsKICNpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCiAJLyogYXV0b2NtZHMgbWF5IGFib3J0IHNjcmlwdCBwcm9jZXNzaW5nICovCi0JaWYgKCEoZmxhZ3MgJiBCTE5fRk9SQ0UpICYmIGFib3J0aW5nKCkpCisJaWYgKGFib3J0aW5nKCkpCiAJICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAJLyogYnVmLT5iX253aW5kb3dzID0gMDsgd2h5IHdhcyB0aGlzIGhlcmU/ICovCkBAIC0xNjE1LDcgKzE2NDQsNyBAQAogCSAgICBhcHBseV9hdXRvY21kcyhFVkVOVF9CVUZBREQsIE5VTEwsIE5VTEwsIEZBTFNFLCBidWYpOwogIyBpZmRlZiBGRUFUX0VWQUwKIAkvKiBhdXRvY21kcyBtYXkgYWJvcnQgc2NyaXB0IHByb2Nlc3NpbmcgKi8KLQlpZiAoIShmbGFncyAmIEJMTl9GT1JDRSkgJiYgYWJvcnRpbmcoKSkKKwlpZiAoYWJvcnRpbmcoKSkKIAkgICAgcmV0dXJuIE5VTEw7CiAjIGVuZGlmCiAgICAgfQpAQCAtNDI2MiwxOCArNDI5MSwyNSBAQAogI2lmIGRlZmluZWQoRkVBVF9HVUlfRElBTE9HKSB8fCBkZWZpbmVkKEZFQVRfQ09OX0RJQUxPRykKIAkgICAgaWYgKHN3YXBfZXhpc3RzX2FjdGlvbiA9PSBTRUFfUVVJVCkKIAkgICAgewotCQlpbnQJb2xkX2dvdF9pbnQgPSBnb3RfaW50OworIyBpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCisJCWNsZWFudXBfVCAgIGNzOwogCi0JCS8qIFVzZXIgc2VsZWN0ZWQgUXVpdCBhdCBBVFRFTlRJT04gcHJvbXB0OyBjbG9zZSB0aGlzIHdpbmRvdy4KLQkJICogUmVzZXQgZ290X2ludCBoZXJlLCBiZWNhdXNlIGl0IGNhdXNlcyBhYm9ydGluZygpIHRvIHJldHVybgotCQkgKiBUUlVFIHdoaWNoIGJyZWFrcyBjbG9zaW5nIGEgd2luZG93LiAqLwotCQlnb3RfaW50ID0gRkFMU0U7CisJCS8qIFJlc2V0IHRoZSBlcnJvci9pbnRlcnJ1cHQvZXhjZXB0aW9uIHN0YXRlIGhlcmUgc28gdGhhdAorCQkgKiBhYm9ydGluZygpIHJldHVybnMgRkFMU0Ugd2hlbiBjbG9zaW5nIGEgd2luZG93LiAqLworCQllbnRlcl9jbGVhbnVwKCZjcyk7CisjIGVuZGlmCiAKKwkJLyogVXNlciBzZWxlY3RlZCBRdWl0IGF0IEFUVEVOVElPTiBwcm9tcHQ7IGNsb3NlIHRoaXMgd2luZG93LiAqLwogCQl3aW5fY2xvc2UoY3Vyd2luLCBUUlVFKTsKIAkJLS1vcGVuX3dpbnM7Ci0KLQkJZ290X2ludCB8PSBvbGRfZ290X2ludDsKIAkJc3dhcF9leGlzdHNfYWN0aW9uID0gU0VBX05PTkU7CisKKyMgaWYgZGVmaW5lZChGRUFUX0FVVE9DTUQpICYmIGRlZmluZWQoRkVBVF9FVkFMKQorCQkvKiBSZXN0b3JlIHRoZSBlcnJvci9pbnRlcnJ1cHQvZXhjZXB0aW9uIHN0YXRlIGlmIG5vdAorCQkgKiBkaXNjYXJkZWQgYnkgYSBuZXcgYWJvcnRpbmcgZXJyb3IsIGludGVycnVwdCwgb3IgdW5jYXVnaHQKKwkJICogZXhjZXB0aW9uLiAqLworCQlsZWF2ZV9jbGVhbnVwKCZjcyk7CisjIGVuZGlmCiAJICAgIH0KIAkgICAgZWxzZQogCQloYW5kbGVfc3dhcF9leGlzdHMoTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvZXZhbC5jIGIvc3JjL2V2YWwuYwppbmRleCA3NTZjNWZlLi5kZjgzZGE1IDEwMDY0NAotLS0gYS9zcmMvZXZhbC5jCisrKyBiL3NyYy9ldmFsLmMKQEAgLTI5MzMsNyArMjkzMyw3IEBACiAgICAgeyJzeW5JRCIsCQkzLCAzLCBmX3N5bklEfSwKICAgICB7InN5bklEYXR0ciIsCTIsIDMsIGZfc3luSURhdHRyfSwKICAgICB7InN5bklEdHJhbnMiLAkxLCAxLCBmX3N5bklEdHJhbnN9LAotICAgIHsic3lzdGVtIiwJCTEsIDEsIGZfc3lzdGVtfSwKKyAgICB7InN5c3RlbSIsCQkxLCAyLCBmX3N5c3RlbX0sCiAgICAgeyJ0ZW1wbmFtZSIsCTAsIDAsIGZfdGVtcG5hbWV9LAogICAgIHsidG9sb3dlciIsCQkxLCAxLCBmX3RvbG93ZXJ9LAogICAgIHsidG91cHBlciIsCQkxLCAxLCBmX3RvdXBwZXJ9LApAQCAtNzU3MCwxNiArNzU3MCw1MiBAQAogICAgIFZBUgkJYXJndmFyczsKICAgICBWQVIJCXJldHZhcjsKIHsKKyAgICBjaGFyX3UJKnJlcyA9IE5VTEw7CiAgICAgY2hhcl91CSpwOworICAgIGNoYXJfdQkqaW5maWxlID0gTlVMTDsKKyAgICBjaGFyX3UJYnVmW05VTUJVRkxFTl07CisgICAgaW50CQllcnIgPSBGQUxTRTsKKyAgICBGSUxFCSpmZDsKIAotICAgIHAgPSBnZXRfY21kX291dHB1dChnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSksIFNIRUxMX1NJTEVOVCk7CisgICAgaWYgKGFyZ3ZhcnNbMV0udmFyX3R5cGUgIT0gVkFSX1VOS05PV04pCisgICAgeworCS8qCisJICogV3JpdGUgdGhlIHN0cmluZyB0byBhIHRlbXAgZmlsZSwgdG8gYmUgdXNlZCBmb3IgaW5wdXQgb2YgdGhlIHNoZWxsCisJICogY29tbWFuZC4KKwkgKi8KKwlpZiAoKGluZmlsZSA9IHZpbV90ZW1wbmFtZSgnaScpKSA9PSBOVUxMKQorCXsKKwkgICAgRU1TRyhfKGVfbm90bXApKTsKKwkgICAgcmV0dXJuOworCX0KKworCWZkID0gbWNoX2ZvcGVuKChjaGFyICopaW5maWxlLCBXUklURUJJTik7CisJaWYgKGZkID09IE5VTEwpCisJeworCSAgICBFTVNHMihfKGVfbm90b3BlbiksIGluZmlsZSk7CisJICAgIGdvdG8gZG9uZTsKKwl9CisJcCA9IGdldF92YXJfc3RyaW5nX2J1ZigmYXJndmFyc1sxXSwgYnVmKTsKKwlpZiAoZndyaXRlKHAsIFNUUkxFTihwKSwgMSwgZmQpICE9IDEpCisJICAgIGVyciA9IFRSVUU7CisJaWYgKGZjbG9zZShmZCkgIT0gMCkKKwkgICAgZXJyID0gVFJVRTsKKwlpZiAoZXJyKQorCXsKKwkgICAgRU1TRyhfKCJFNjc3OiBFcnJvciB3cml0aW5nIHRlbXAgZmlsZSIpKTsKKwkgICAgZ290byBkb25lOworCX0KKyAgICB9CisKKyAgICByZXMgPSBnZXRfY21kX291dHB1dChnZXRfdmFyX3N0cmluZygmYXJndmFyc1swXSksIGluZmlsZSwgU0hFTExfU0lMRU5UKTsKKwogI2lmZGVmIFVTRV9DUgogICAgIC8qIHRyYW5zbGF0ZSA8Q1I+IGludG8gPE5MPiAqLwotICAgIGlmIChwICE9IE5VTEwpCisgICAgaWYgKHJlcyAhPSBOVUxMKQogICAgIHsKIAljaGFyX3UJKnM7CiAKLQlmb3IgKHMgPSBwOyAqczsgKytzKQorCWZvciAocyA9IHJlczsgKnM7ICsrcykKIAl7CiAJICAgIGlmICgqcyA9PSBDQVIpCiAJCSpzID0gTkw7CkBAIC03NTg4LDEyICs3NjI0LDEyIEBACiAjZWxzZQogIyBpZmRlZiBVU0VfQ1JOTAogICAgIC8qIHRyYW5zbGF0ZSA8Q1I+PE5MPiBpbnRvIDxOTD4gKi8KLSAgICBpZiAocCAhPSBOVUxMKQorICAgIGlmIChyZXMgIT0gTlVMTCkKICAgICB7CiAJY2hhcl91CSpzLCAqZDsKIAotCWQgPSBwOwotCWZvciAocyA9IHA7ICpzOyArK3MpCisJZCA9IHJlczsKKwlmb3IgKHMgPSByZXM7ICpzOyArK3MpCiAJewogCSAgICBpZiAoc1swXSA9PSBDQVIgJiYgc1sxXSA9PSBOTCkKIAkJKytzOwpAQCAtNzYwMyw4ICs3NjM5LDE1IEBACiAgICAgfQogIyBlbmRpZgogI2VuZGlmCisKK2RvbmU6CisgICAgaWYgKGluZmlsZSAhPSBOVUxMKQorICAgIHsKKwltY2hfcmVtb3ZlKGluZmlsZSk7CisJdmltX2ZyZWUoaW5maWxlKTsKKyAgICB9CiAgICAgcmV0dmFyLT52YXJfdHlwZSA9IFZBUl9TVFJJTkc7Ci0gICAgcmV0dmFyLT52YXJfdmFsLnZhcl9zdHJpbmcgPSBwOworICAgIHJldHZhci0+dmFyX3ZhbC52YXJfc3RyaW5nID0gcmVzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2V4X2NtZHMuaCBiL3NyYy9leF9jbWRzLmgKaW5kZXggZDY4N2Q4OS4uN2EzZjRhYyAxMDA2NDQKLS0tIGEvc3JjL2V4X2NtZHMuaAorKysgYi9zcmMvZXhfY21kcy5oCkBAIC0yNzYsNiArMjc2LDggQEAKIAkJCVJBTkdFfE5PVEFEUnxDT1VOVHxUUkxCQVIpLAogRVgoQ01EX2RlbGV0ZSwJCSJkZWxldGUiLAlleF9vcGVyYXRvcnMsCiAJCQlSQU5HRXxXSE9MRUZPTER8UkVHU1RSfENPVU5UfFRSTEJBUnxDTURXSU58TU9ESUZZKSwKK0VYKENNRF9kZWxtYXJrcywJImRlbG1hcmtzIiwJZXhfZGVsbWFya3MsCisJCQlCQU5HfEVYVFJBfFRSTEJBUnxDTURXSU4pLAogRVgoQ01EX2RlYnVnLAkJImRlYnVnIiwJZXhfZGVidWcsCiAJCQlORUVEQVJHfEVYVFJBfE5PVFJMQ09NfFNCT1hPS3xDTURXSU4pLAogRVgoQ01EX2RlYnVnZ3JlZWR5LAkiZGVidWdncmVlZHkiLAlleF9kZWJ1Z2dyZWVkeSwKZGlmZiAtLWdpdCBhL3NyYy9leF9kb2NtZC5jIGIvc3JjL2V4X2RvY21kLmMKaW5kZXggYTBjMDcyMC4uNDE4ZGU0OCAxMDA2NDQKLS0tIGEvc3JjL2V4X2RvY21kLmMKKysrIGIvc3JjL2V4X2RvY21kLmMKQEAgLTY2NzksMTAgKzY2NzksMjQgQEAKIAkJbmVlZF9oaWRlID0gKGN1cmJ1ZklzQ2hhbmdlZCgpICYmIGN1cmJ1Zi0+Yl9ud2luZG93cyA8PSAxKTsKIAkJaWYgKCFuZWVkX2hpZGUgfHwgUF9ISUQoY3VyYnVmKSkKIAkJeworIyBpZiBkZWZpbmVkKEZFQVRfQVVUT0NNRCkgJiYgZGVmaW5lZChGRUFUX0VWQUwpCisJCSAgICBjbGVhbnVwX1QgICBjczsKKworCQkgICAgLyogUmVzZXQgdGhlIGVycm9yL2ludGVycnVwdC9leGNlcHRpb24gc3RhdGUgaGVyZSBzbyB0aGF0CisJCSAgICAgKiBhYm9ydGluZygpIHJldHVybnMgRkFMU0Ugd2hlbiBjbG9zaW5nIGEgd2luZG93LiAqLworCQkgICAgZW50ZXJfY2xlYW51cCgmY3MpOworIyBlbmRpZgogIyBpZmRlZiBGRUFUX0dVSQogCQkgICAgbmVlZF9tb3VzZV9jb3JyZWN0ID0gVFJVRTsKICMgZW5kaWYKIAkJICAgIHdpbl9jbG9zZShjdXJ3aW4sICFuZWVkX2hpZGUgJiYgIVBfSElEKGN1cmJ1ZikpOworCisjIGlmIGRlZmluZWQoRkVBVF9BVVRPQ01EKSAmJiBkZWZpbmVkKEZFQVRfRVZBTCkKKwkJICAgIC8qIFJlc3RvcmUgdGhlIGVycm9yL2ludGVycnVwdC9leGNlcHRpb24gc3RhdGUgaWYgbm90CisJCSAgICAgKiBkaXNjYXJkZWQgYnkgYSBuZXcgYWJvcnRpbmcgZXJyb3IsIGludGVycnVwdCwgb3IKKwkJICAgICAqIHVuY2F1Z2h0IGV4Y2VwdGlvbi4gKi8KKwkJICAgIGxlYXZlX2NsZWFudXAoJmNzKTsKKyMgZW5kaWYKIAkJfQogCSAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9leF9ldmFsLmMgYi9zcmMvZXhfZXZhbC5jCmluZGV4IDI4NGFlM2YuLjhiZTExZTEgMTAwNjQ0Ci0tLSBhL3NyYy9leF9ldmFsLmMKKysrIGIvc3JjL2V4X2V2YWwuYwpAQCAtMTgyMCw2ICsxODIwLDE1MSBAQAogfQogCiAvKgorICogRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJlZm9yZSBhIGZhaWxlZCBjb21tYW5kIGludm9rZXMgYSBzZXF1ZW5jZSBvZgorICogYXV0b2NvbW1hbmRzIGZvciBjbGVhbnVwLiAgKEZhaWx1cmUgbWVhbnMgaGVyZSB0aGF0IGEgY2FsbCB0byBlbXNnKCkgaGFzCisgKiBiZWVuIG1hZGUsIGFuIGludGVycnVwdCBvY2N1cnJlZCwgb3IgdGhlcmUgaXMgYW4gdW5jYXVnaHQgZXhjZXB0aW9uIGZyb20gYQorICogcHJldmlvdXMgYXV0b2NvbW1hbmQgZXhlY3V0aW9uIG9mIHRoZSBzYW1lIGNvbW1hbmQuKSAgVGhpcyBmdW5jdGlvbiB3b3JrcyBhCisgKiBiaXQgbGlrZSBleF9maW5hbGx5KCkgZXhjZXB0IHRoYXQgdGhlcmUgd2FzIG5vdCBhY3R1YWxseSBhbiBleHRyYSB0cnkgYmxvY2sKKyAqIGFyb3VuZCB0aGUgcGFydCB0aGF0IGZhaWxlZCBhbmQgYW4gZXJyb3Igb3IgaW50ZXJydXB0IGhhcyBub3QgKHlldCkgYmVlbgorICogY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbi4gIFRoaXMgZnVuY3Rpb24gc2F2ZXMgdGhlCisgKiBlcnJvci9pbnRlcnJ1cHQvZXhjZXB0aW9uIHN0YXRlIGFuZCBwcmVwYXJlcyBmb3IgdGhlIGNhbGwgdG8gZG9fY21kbGluZSgpCisgKiB0aGF0IGlzIGdvaW5nIHRvIGJlIG1hZGUgZm9yIHRoZSBjbGVhbnVwIGF1dG9jb21tYW5kIGV4ZWN1dGlvbi4KKyAqCisgKiBTdG9yZXMgdGhlIHBlbmRpbmcgZXJyb3IvaW50ZXJydXB0L2V4Y2VwdGlvbiBzdGF0ZSBpbiB0aGUgY2xlYW51cF9UCisgKiBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieSAiY3NwIiwgd2hpY2ggaGFzIHRvIGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0bworICogbGVhdmVfY2xlYW51cCgpIGFmdGVyIHRoZSBhdXRvY29tbWFuZCBleGVjdXRpb24gaGFzIGZpbmlzaGVkLgorICovCisgICAgdm9pZAorZW50ZXJfY2xlYW51cChjc3ApCisgICAgY2xlYW51cF9UCSpjc3A7Cit7CisgICAgaW50CQlwZW5kaW5nID0gQ1NUUF9OT05FOworCisgICAgLyoKKyAgICAgKiBQb3N0cG9uZSBkaWRfZW1zZywgZ290X2ludCwgZGlkX3Rocm93LiAgVGhlIHBlbmRpbmcgdmFsdWVzIHdpbGwgYmUKKyAgICAgKiByZXN0b3JlZCBieSBsZWF2ZV9jbGVhbnVwKCkgZXhjZXB0IGlmIHRoZXJlIHdhcyBhbiBhYm9ydGluZyBlcnJvciwKKyAgICAgKiBpbnRlcnJ1cHQsIG9yIHVuY2F1Z2h0IGV4Y2VwdGlvbiBhZnRlciB0aGlzIGZ1bmN0aW9uIGVuZHMuCisgICAgICovCisgICAgaWYgKGRpZF9lbXNnIHx8IGdvdF9pbnQgfHwgZGlkX3Rocm93IHx8IG5lZWRfcmV0aHJvdykKKyAgICB7CisJY3NwLT5wZW5kaW5nID0gKGRpZF9lbXNnICAgICA/IENTVFBfRVJST1IgICAgIDogMCkKKwkJICAgICB8IChnb3RfaW50ICAgICAgPyBDU1RQX0lOVEVSUlVQVCA6IDApCisJCSAgICAgfCAoZGlkX3Rocm93ICAgID8gQ1NUUF9USFJPVyAgICAgOiAwKQorCQkgICAgIHwgKG5lZWRfcmV0aHJvdyA/IENTVFBfVEhST1cgICAgIDogMCk7CisKKwkvKiBJZiB3ZSBhcmUgY3VycmVudGx5IHRocm93aW5nIGFuIGV4Y2VwdGlvbiAoZGlkX3Rocm93KSwgc2F2ZSBpdCBhcworCSAqIHdlbGwuICBPbiBhbiBlcnJvciBub3QgeWV0IGNvbnZlcnRlZCB0byBhbiBleGNlcHRpb24sIHVwZGF0ZQorCSAqICJmb3JjZV9hYm9ydCIgYW5kIHJlc2V0ICJjYXVzZV9hYm9ydCIgKGFzIGRvX2VycnRocm93KCkgd291bGQgZG8pLgorCSAqIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgZG9fY21kbGluZSgpIGNhbGwgdGhhdCBpcyBnb2luZyB0byBiZSBtYWRlCisJICogZm9yIGF1dG9jb21tYW5kIGV4ZWN1dGlvbi4gIFdlIG5lZWQgbm90IHNhdmUgKm1zZ19saXN0IGJlY2F1c2UKKwkgKiB0aGVyZSBpcyBhbiBleHRyYSBpbnN0YW5jZSBmb3IgZXZlcnkgY2FsbCBvZiBkb19jbWRsaW5lKCksIGFueXdheS4KKwkgKi8KKwlpZiAoZGlkX3Rocm93IHx8IG5lZWRfcmV0aHJvdykKKwkgICAgY3NwLT5leGNlcHRpb24gPSBjdXJyZW50X2V4Y2VwdGlvbjsKKwllbHNlCisJeworCSAgICBjc3AtPmV4Y2VwdGlvbiA9IE5VTEw7CisJICAgIGlmIChkaWRfZW1zZykKKwkgICAgeworCQlmb3JjZV9hYm9ydCB8PSBjYXVzZV9hYm9ydDsKKwkJY2F1c2VfYWJvcnQgPSBGQUxTRTsKKwkgICAgfQorCX0KKwlkaWRfZW1zZyA9IGdvdF9pbnQgPSBkaWRfdGhyb3cgPSBuZWVkX3JldGhyb3cgPSBGQUxTRTsKKworCS8qIFJlcG9ydCBpZiByZXF1aXJlZCBieSB0aGUgJ3ZlcmJvc2UnIG9wdGlvbiBvciB3aGVuIGRlYnVnZ2luZy4gICovCisJcmVwb3J0X21ha2VfcGVuZGluZyhwZW5kaW5nLCBjc3AtPmV4Y2VwdGlvbik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisJY3NwLT5wZW5kaW5nID0gQ1NUUF9OT05FOworCWNzcC0+ZXhjZXB0aW9uID0gTlVMTDsKKyAgICB9Cit9CisKKy8qCisgKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgYSBmYWlsZWQgY29tbWFuZCBpbnZva2VkIGEgc2VxdWVuY2Ugb2YKKyAqIGF1dG9jb21tYW5kcyBmb3IgY2xlYW51cC4gIEl0IGlzIGEgYml0IGxpa2UgZXhfZW5kdHJ5KCkgZXhjZXB0IHRoYXQgdGhlcmUKKyAqIHdhcyBub3QgYWN0dWFsbHkgYW4gZXh0cmEgdHJ5IGJsb2NrIGFyb3VuZCB0aGUgcGFydCB0aGF0IGZhaWxlZCBhbmQgYW4KKyAqIGVycm9yIG9yIGludGVycnVwdCBoYWQgbm90ICh5ZXQpIGJlZW4gY29udmVydGVkIHRvIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZQorICogY2xlYW51cCBhdXRvY29tbWFuZCBzZXF1ZW5jZSB3YXMgaW52b2tlZC4gIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIGNhbGxlZAorICogd2l0aCB0aGUgYWRkcmVzcyBvZiB0aGUgY2xlYW51cF9UIHN0cnVjdHVyZSBmaWxsZWQgYnkgZW50ZXJfY2xlYW51cCgpIGFzIGFuCisgKiBhcmd1bWVudDsgaXQgcmVzdG9yZXMgdGhlIGVycm9yL2ludGVycnVwdC9leGNlcHRpb24gc3RhdGUgc2F2ZWQgYnkgdGhhdAorICogZnVuY3Rpb24gLSBleGNlcHQgdGhlcmUgd2FzIGFuIGFib3J0aW5nIGVycm9yLCBhbiBpbnRlcnJ1cHQgb3IgYW4gdW5jYXVnaHQKKyAqIGV4Y2VwdGlvbiBkdXJpbmcgZXhlY3V0aW9uIG9mIHRoZSBjbGVhbnVwIGF1dG9jb21tYW5kcy4gIEluIHRoZSBsYXR0ZXIKKyAqIGNhc2UsIHRoZSBzYXZlZCBlcnJvci9pbnRlcnJ1cHQvIGV4Y2VwdGlvbiBzdGF0ZSBpcyBkaXNjYXJkZWQuCisgKi8KKyAgICB2b2lkCitsZWF2ZV9jbGVhbnVwKGNzcCkKKyAgICBjbGVhbnVwX1QJKmNzcDsKK3sKKyAgICBpbnQJCXBlbmRpbmcgPSBjc3AtPnBlbmRpbmc7CisKKyAgICBpZiAocGVuZGluZyA9PSBDU1RQX05PTkUpCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwlyZXR1cm47CisKKyAgICAvKiBJZiB0aGVyZSB3YXMgYW4gYWJvcnRpbmcgZXJyb3IsIGFuIGludGVycnVwdCwgb3IgYW4gdW5jYXVnaHQgZXhjZXB0aW9uCisgICAgICogYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgY2FsbCB0byBlbnRlcl9jbGVhbnVwKCksIGRpc2NhcmQgd2hhdCBoYXMgYmVlbgorICAgICAqIG1hZGUgcGVuZGluZyBieSBpdC4gIFJlcG9ydCB0aGlzIHRvIHRoZSB1c2VyIGlmIHJlcXVpcmVkIGJ5IHRoZQorICAgICAqICd2ZXJib3NlJyBvcHRpb24gb3Igd2hlbiBkZWJ1Z2dpbmcuICovCisgICAgaWYgKGFib3J0aW5nKCkgfHwgbmVlZF9yZXRocm93KQorICAgIHsKKwlpZiAocGVuZGluZyAmIENTVFBfVEhST1cpCisJICAgIC8qIENhbmNlbCB0aGUgcGVuZGluZyBleGNlcHRpb24gKGluY2x1ZGVzIHJlcG9ydCkuICovCisJICAgIGRpc2NhcmRfZXhjZXB0aW9uKChleGNlcHRfVCAqKWNzcC0+ZXhjZXB0aW9uLCBGQUxTRSk7CisJZWxzZQorCSAgICByZXBvcnRfZGlzY2FyZF9wZW5kaW5nKHBlbmRpbmcsIE5VTEwpOworCisJLyogSWYgYW4gZXJyb3Igd2FzIGFib3V0IHRvIGJlIGNvbnZlcnRlZCB0byBhbiBleGNlcHRpb24gd2hlbgorCSAqIGVudGVyX2NsZWFudXAoKSB3YXMgY2FsbGVkLCBmcmVlIHRoZSBtZXNzYWdlIGxpc3QuICovCisJZnJlZV9tc2dsaXN0KCptc2dfbGlzdCk7CisJKm1zZ19saXN0ID0gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIHdhcyBubyBuZXcgZXJyb3IsIGludGVycnVwdCwgb3IgdGhyb3cgYmV0d2VlbiB0aGUgY2FsbHMKKyAgICAgKiB0byBlbnRlcl9jbGVhbnVwKCkgYW5kIGxlYXZlX2NsZWFudXAoKSwgcmVzdG9yZSB0aGUgcGVuZGluZworICAgICAqIGVycm9yL2ludGVycnVwdC9leGNlcHRpb24gc3RhdGUuCisgICAgICovCisgICAgZWxzZQorICAgIHsKKwkvKgorCSAqIElmIHRoZXJlIHdhcyBhbiBleGNlcHRpb24gYmVpbmcgdGhyb3duIHdoZW4gZW50ZXJfY2xlYW51cCgpIHdhcworCSAqIGNhbGxlZCwgd2UgbmVlZCB0byByZXRocm93IGl0LiAgTWFrZSBpdCB0aGUgZXhjZXB0aW9uIGN1cnJlbnRseQorCSAqIGJlaW5nIHRocm93bi4KKwkgKi8KKwlpZiAocGVuZGluZyAmIENTVFBfVEhST1cpCisJICAgIGN1cnJlbnRfZXhjZXB0aW9uID0gY3NwLT5leGNlcHRpb247CisKKwkvKgorCSAqIElmIGFuIGVycm9yIHdhcyBhYm91dCB0byBiZSBjb252ZXJ0ZWQgdG8gYW4gZXhjZXB0aW9uIHdoZW4KKwkgKiBlbnRlcl9jbGVhbnVwKCkgd2FzIGNhbGxlZCwgbGV0ICJjYXVzZV9hYm9ydCIgdGFrZSB0aGUgcGFydCBvZgorCSAqICJmb3JjZV9hYm9ydCIgKGFzIGRvbmUgYnkgY2F1c2VfZXJydGhyb3coKSkuCisJICovCisJZWxzZSBpZiAocGVuZGluZyAmIENTVFBfRVJST1IpCisJeworCSAgICBjYXVzZV9hYm9ydCA9IGZvcmNlX2Fib3J0OworCSAgICBmb3JjZV9hYm9ydCA9IEZBTFNFOworCX0KKworCS8qCisJICogUmVzdG9yZSB0aGUgcGVuZGluZyB2YWx1ZXMgb2YgZGlkX2Vtc2csIGdvdF9pbnQsIGFuZCBkaWRfdGhyb3cuCisJICovCisJaWYgKHBlbmRpbmcgJiBDU1RQX0VSUk9SKQorCSAgICBkaWRfZW1zZyA9IFRSVUU7CisJaWYgKHBlbmRpbmcgJiBDU1RQX0lOVEVSUlVQVCkKKwkgICAgZ290X2ludCA9IFRSVUU7CisJaWYgKHBlbmRpbmcgJiBDU1RQX1RIUk9XKQorCSAgICBuZWVkX3JldGhyb3cgPSBUUlVFOyAgICAvKiBkaWRfdGhyb3cgd2lsbCBiZSBzZXQgYnkgZG9fb25lX2NtZCgpICovCisKKwkvKiBSZXBvcnQgaWYgcmVxdWlyZWQgYnkgdGhlICd2ZXJib3NlJyBvcHRpb24gb3Igd2hlbiBkZWJ1Z2dpbmcuICovCisJcmVwb3J0X3Jlc3VtZV9wZW5kaW5nKHBlbmRpbmcsCisJCShwZW5kaW5nICYgQ1NUUF9USFJPVykgPyAodm9pZCAqKWN1cnJlbnRfZXhjZXB0aW9uIDogTlVMTCk7CisgICAgfQorfQorCisKKy8qCiAgKiBNYWtlIGNvbmRpdGlvbmFscyBpbmFjdGl2ZSBhbmQgZGlzY2FyZCB3aGF0J3MgcGVuZGluZyBpbiBmaW5hbGx5IGNsYXVzZXMKICAqIHVudGlsIHRoZSBjb25kaXRpb25hbCB0eXBlIHNlYXJjaGVkIGZvciBvciBhIHRyeSBjb25kaXRpb25hbCBub3QgaW4gaXRzCiAgKiBmaW5hbGx5IGNsYXVzZSBpcyByZWFjaGVkLiAgSWYgdGhpcyBpcyBpbiBhbiBhY3RpdmUgY2F0Y2ggY2xhdXNlLCBmaW5pc2ggdGhlCmRpZmYgLS1naXQgYS9zcmMvZmlsZWlvLmMgYi9zcmMvZmlsZWlvLmMKaW5kZXggYjgyY2Q0YS4uYzkyNTc3NSAxMDA2NDQKLS0tIGEvc3JjL2ZpbGVpby5jCisrKyBiL3NyYy9maWxlaW8uYwpAQCAtMzgzMiw4ICszODMyLDEwIEBACiAjaWZkZWYgRkVBVF9NQllURQogICAgIC8qCiAgICAgICogVGhlIEJPTSBpcyB3cml0dGVuIGp1c3QgYWZ0ZXIgdGhlIGVuY3J5cHRpb24gbWFnaWMgbnVtYmVyLgorICAgICAqIFNraXAgaXQgd2hlbiBhcHBlbmRpbmcgYW5kIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RlZCwgdGhlIEJPTSBvbmx5IG1ha2VzCisgICAgICogc2Vuc2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLgogICAgICAqLwotICAgIGlmIChidWYtPmJfcF9ib21iICYmICF3cml0ZV9iaW4pCisgICAgaWYgKGJ1Zi0+Yl9wX2JvbWIgJiYgIXdyaXRlX2JpbiAmJiAoIWFwcGVuZCB8fCBwZXJtIDwgMCkpCiAgICAgewogCXdyaXRlX2luZm8uYndfbGVuID0gbWFrZV9ib20oYnVmZmVyLCBmZW5jKTsKIAlpZiAod3JpdGVfaW5mby5id19sZW4gPiAwKQpkaWZmIC0tZ2l0IGEvc3JjL2d1aV9rZGVfd2lkLmNjIGIvc3JjL2d1aV9rZGVfd2lkLmNjCmluZGV4IDkxZWExMGIuLmZlZmJlOWEgMTAwNjQ0Ci0tLSBhL3NyYy9ndWlfa2RlX3dpZC5jYworKysgYi9zcmMvZ3VpX2tkZV93aWQuY2MKQEAgLTE1NCw5ICsxNTQsOSBAQAogICAgIGludAogZ3VpX21jaF9oYXNrZXkoY2hhcl91ICogbmFtZSkvL3t7ewogewotICAgIGZvciAoaW50IGk9MDsgc3BlY2lhbF9rZXlzW2ldLnF0a2V5ICE9IDA7IGkrKykKLQlpZiAobmFtZVswXSA9PSBzcGVjaWFsX2tleXNbaV0uY29kZTAgJiYKLQkJbmFtZVsxXSA9PSBzcGVjaWFsX2tleXNbaV0uY29kZTEpCisgICAgZm9yIChpbnQgaSA9IDA7IHNwZWNpYWxfa2V5c1tpXS5xdGtleSAhPSAwOyBpKyspCisJaWYgKG5hbWVbMF0gPT0gc3BlY2lhbF9rZXlzW2ldLmNvZGUwCisJCQkJCSAgJiYgbmFtZVsxXSA9PSBzcGVjaWFsX2tleXNbaV0uY29kZTEpCiAJICAgIHJldHVybiBPSzsKICAgICByZXR1cm4gRkFJTDsKIH0vL319fQpAQCAtMTY0LDIwICsxNjQsMjAgQEAKIC8qCiAgKiBjdXN0b20gRnJhbWUgZm9yIGRyYXdpbmcgLi4uCiAgKi8KLXZvaWQgVmltV2lkZ2V0OjpwYWludEV2ZW50KCBRUGFpbnRFdmVudCAqZSkvL3t7ewordm9pZCBWaW1XaWRnZXQ6OnBhaW50RXZlbnQoUVBhaW50RXZlbnQgKmUpLy97e3sKIHsKICAgICBRUmVjdCByID0gZS0+cmVjdCgpOwotICAgIGd1aV9yZWRyYXcoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgKTsKKyAgICBndWlfcmVkcmF3KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKIH0vL319fQogCiB2b2lkIFZpbVdpZGdldDo6ZHJhd19zdHJpbmcoaW50IHgsIGludCB5LCBRU3RyaW5nIHMsIGludCBsZW4sIGludCBmbGFncykvL3t7ewogewotICAgIGd1aS5jdXJyZW50X2ZvbnQtPnNldEJvbGQoIGZsYWdzICYgRFJBV19CT0xEICk7Ci0gICAgZ3VpLmN1cnJlbnRfZm9udC0+c2V0VW5kZXJsaW5lKCBmbGFncyAmIERSQVdfVU5ERVJMICk7CisgICAgZ3VpLmN1cnJlbnRfZm9udC0+c2V0Qm9sZChmbGFncyAmIERSQVdfQk9MRCk7CisgICAgZ3VpLmN1cnJlbnRfZm9udC0+c2V0VW5kZXJsaW5lKGZsYWdzICYgRFJBV19VTkRFUkwpOwogICAgIGd1aS5jdXJyZW50X2ZvbnQtPnNldEl0YWxpYyhmbGFncyAmIERSQVdfSVRBTElDKTsKLSAgICBwYWludGVyLT5zZXRCYWNrZ3JvdW5kTW9kZSggZmxhZ3MgJiBEUkFXX1RSQU5TUCA/IFF0OjpUcmFuc3BhcmVudE1vZGUgOiBRdDo6T3BhcXVlTW9kZSk7Ci0gICAgcGFpbnRlci0+c2V0Rm9udCggKihndWkuY3VycmVudF9mb250KSApOwotICAgIHBhaW50ZXItPmRyYXdUZXh0KCB4LCB5LCBzLCBsZW4pOworICAgIHBhaW50ZXItPnNldEJhY2tncm91bmRNb2RlKGZsYWdzICYgRFJBV19UUkFOU1AgPyBRdDo6VHJhbnNwYXJlbnRNb2RlIDogUXQ6Ok9wYXF1ZU1vZGUpOworICAgIHBhaW50ZXItPnNldEZvbnQoKihndWkuY3VycmVudF9mb250KSk7CisgICAgcGFpbnRlci0+ZHJhd1RleHQoeCwgeSwgcywgbGVuKTsKIH0vL319fQogCiB2b2lkIFZpbVdpZGdldDo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICpldmVudCkvL3t7ewpAQCAtMTE2NSwzNiArMTE2NSw5IEBACiAJICAgIEkxOE5fTk9PUCgiTmV0QlNEIGNvbmZpZ3VyZS9jb21waWxhdGlvbiBmaXhlcyIpCiAJICAgICk7CiAgICAgYWJvdXREYXRhLT5zZXRMaWNlbnNlVGV4dCgKLSJLVmltIGFzIGFuIGV4dGVuc2lvbiBvZiBWaW0gZm9sbG93cyBWaW0gbGljZW5zZSA6IFxuXAotVmltIGlzIENoYXJpdHl3YXJlLiAgWW91IGNhbiB1c2UgYW5kIGNvcHkgaXQgYXMgbXVjaCBhcyB5b3UgbGlrZSwgYnV0IHlvdSBhcmVcblwKLWVuY291cmFnZWQgdG8gbWFrZSBhIGRvbmF0aW9uIHRvIG9ycGhhbnMgaW4gVWdhbmRhLiAgUGxlYXNlIHJlYWQgdGhlIGZpbGVcblwKLXJ1bnRpbWUvZG9jL3VnYW5kYS50eHQgZm9yIGRldGFpbHMuXG5cCi1cblwKLVRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gZGlzdHJpYnV0aW5nIGFuIHVubW9kaWZpZWQgY29weSBvZiBWaW0uICBQYXJ0cyBvZlxuXAotVmltIG1heSBhbHNvIGJlIGRpc3RyaWJ1dGVkLCBidXQgdGhpcyB0ZXh0IG11c3QgYWx3YXlzIGJlIGluY2x1ZGVkLiAgWW91IGFyZVxuXAotYWxsb3dlZCB0byBpbmNsdWRlIGV4ZWN1dGFibGVzIHRoYXQgeW91IG1hZGUgZnJvbSB0aGUgdW5tb2RpZmllZCBWaW0gc291cmNlcyxcblwKLXlvdXIgb3duIHVzYWdlIGV4YW1wbGVzIGFuZCBWaW0gc2NyaXB0cy5cblwKLVxuXAotSWYgeW91IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIFZpbSwgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIHNlbmQgdGhlXG5cCi1tYWludGFpbmVyIGEgY29weSwgaW5jbHVkaW5nIHRoZSBzb3VyY2UgY29kZS4gIE9yIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZVxuXAotbWFpbnRhaW5lciB0aHJvdWdoIGZ0cDsgbGV0IGhpbSBrbm93IHdoZXJlIGl0IGNhbiBiZSBmb3VuZC4gIElmIHRoZSBudW1iZXIgb2ZcblwKLWNoYW5nZXMgaXMgc21hbGwgKGUuZy4sIGEgbW9kaWZpZWQgTWFrZWZpbGUpIGUtbWFpbGluZyB0aGUgZGlmZnMgd2lsbCBkby5cblwKLVdoZW4gdGhlIG1haW50YWluZXIgYXNrcyBmb3IgaXQgKGluIGFueSB3YXkpIHlvdSBtdXN0IG1ha2UgeW91ciBjaGFuZ2VzLFxuXAotaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBhdmFpbGFibGUgdG8gaGltLlxuXAotXG5cCi1UaGUgbWFpbnRhaW5lciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gaW5jbHVkZSBhbnkgY2hhbmdlcyBpbiB0aGUgb2ZmaWNpYWxcblwKLXZlcnNpb24gb2YgVmltLiAgVGhpcyBpcyBuZWdvdGlhYmxlLiAgWW91IGFyZSBub3QgYWxsb3dlZCB0byBkaXN0cmlidXRlIGFcblwKLW1vZGlmaWVkIHZlcnNpb24gb2YgVmltIHdoZW4geW91IGFyZSBub3Qgd2lsbGluZyB0byBtYWtlIHRoZSBzb3VyY2UgY29kZVxuXAotYXZhaWxhYmxlIHRvIHRoZSBtYWludGFpbmVyLlxuXAotXG5cCi1UaGUgY3VycmVudCBtYWludGFpbmVyIGlzIEJyYW0gTW9vbGVuYWFyIDxCcmFtQHZpbS5vcmc+LiAgSWYgdGhpcyBjaGFuZ2VzLCBpdFxuXAotd2lsbCBiZSBhbm5vdW5jZWQgaW4gYXBwcm9wcmlhdGUgcGxhY2VzIChtb3N0IGxpa2VseSB3d3cudmltLm9yZyBhbmRcblwKLWNvbXAuZWRpdG9ycykuICBXaGVuIGl0IGlzIGNvbXBsZXRlbHkgaW1wb3NzaWJsZSB0byBjb250YWN0IHRoZSBtYWludGFpbmVyLFxuXAotdGhlIG9ibGlnYXRpb24gdG8gc2VuZCBoaW0gbW9kaWZpZWQgc291cmNlIGNvZGUgY2Vhc2VzLlxuXAotXG5cCi1JdCBpcyBub3QgYWxsb3dlZCB0byByZW1vdmUgdGhlc2UgcmVzdHJpY3Rpb25zIGZyb20gdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGVcblwKLVZpbSBzb3VyY2VzIG9yIHBhcnRzIG9mIGl0LiAgVGhlc2UgcmVzdHJpY3Rpb25zIG1heSBhbHNvIGJlIHVzZWQgZm9yIHByZXZpb3VzXG5cCi1WaW0gcmVsZWFzZXMgaW5zdGVhZCBvZiB0aGUgdGV4dCB0aGF0IHdhcyBpbmNsdWRlZCB3aXRoIGl0LiIpOworIktWaW0gYXMgYW4gZXh0ZW5zaW9uIG9mIFZpbSBmb2xsb3dzIFZpbSBsaWNlbnNlLlxuXAorWW91IGNhbiByZWFkIGl0IHdpdGggXCI6aGVscCBsaWNlbnNlXCJcblwKK09yIHJlYWQgdGhlIGZpbGUgJFZJTVJVTlRJTUUvZG9jL3VnYW5kYS50eHQuIik7CiAKICAgICBLQWJvdXRBcHBsaWNhdGlvbiAqYWJvdXQgPSBuZXcgS0Fib3V0QXBwbGljYXRpb24oYWJvdXREYXRhKTsKICAgICBhYm91dC0+c2hvdygpOwpkaWZmIC0tZ2l0IGEvc3JjL21hcmsuYyBiL3NyYy9tYXJrLmMKaW5kZXggZTFiODAwZS4uZWE5NDFlNSAxMDA2NDQKLS0tIGEvc3JjL21hcmsuYworKysgYi9zcmMvbWFyay5jCkBAIC03NDMsNiArNzQzLDkxIEBACiAgICAgfQogfQogCisvKgorICogIjpkZWxtYXJrc1shXSBbbWFya3NdIgorICovCisgICAgdm9pZAorZXhfZGVsbWFya3MoZWFwKQorICAgIGV4YXJnX1QgKmVhcDsKK3sKKyAgICBjaGFyX3UJKnA7CisgICAgaW50CQlmcm9tLCB0bzsKKyAgICBpbnQJCWk7CisgICAgaW50CQlsb3dlcjsKKyAgICBpbnQJCWRpZ2l0OworICAgIGludAkJbjsKKworICAgIGlmICgqZWFwLT5hcmcgPT0gTlVMICYmIGVhcC0+Zm9yY2VpdCkKKwkvKiBjbGVhciBhbGwgbWFya3MgKi8KKwljbHJhbGxtYXJrcyhjdXJidWYpOworICAgIGVsc2UgaWYgKGVhcC0+Zm9yY2VpdCkKKwlFTVNHKF8oZV9pbnZhcmcpKTsKKyAgICBlbHNlIGlmICgqZWFwLT5hcmcgPT0gTlVMKQorCUVNU0coXyhlX2FyZ3JlcSkpOworICAgIGVsc2UKKyAgICB7CisJLyogY2xlYXIgc3BlY2lmaWVkIG1hcmtzIG9ubHkgKi8KKwlmb3IgKHAgPSBlYXAtPmFyZzsgKnAgIT0gTlVMOyArK3ApCisJeworCSAgICBsb3dlciA9IEFTQ0lJX0lTTE9XRVIoKnApOworCSAgICBkaWdpdCA9IFZJTV9JU0RJR0lUKCpwKTsKKwkgICAgaWYgKGxvd2VyIHx8IGRpZ2l0IHx8IEFTQ0lJX0lTVVBQRVIoKnApKQorCSAgICB7CisJCWlmIChwWzFdID09ICctJykKKwkJeworCQkgICAgLyogY2xlYXIgcmFuZ2Ugb2YgbWFya3MgKi8KKwkJICAgIGZyb20gPSAqcDsKKwkJICAgIHRvID0gcFsyXTsKKwkJICAgIGlmICghKGxvd2VyID8gQVNDSUlfSVNMT1dFUihwWzJdKQorCQkJCTogKGRpZ2l0ID8gVklNX0lTRElHSVQocFsyXSkKKwkJCQkgICAgOiBBU0NJSV9JU1VQUEVSKHBbMl0pKSkKKwkJCSAgICB8fCB0byA8IGZyb20pCisJCSAgICB7CisJCQlFTVNHMihfKGVfaW52YXJnMiksIHApOworCQkJcmV0dXJuOworCQkgICAgfQorCQkgICAgcCArPSAyOworCQl9CisJCWVsc2UKKwkJICAgIC8qIGNsZWFyIG9uZSBsb3dlciBjYXNlIG1hcmsgKi8KKwkJICAgIGZyb20gPSB0byA9ICpwOworCisJCWZvciAoaSA9IGZyb207IGkgPD0gdG87ICsraSkKKwkJeworCQkgICAgaWYgKGxvd2VyKQorCQkJY3VyYnVmLT5iX25hbWVkbVtpIC0gJ2EnXS5sbnVtID0gMDsKKwkJICAgIGVsc2UKKwkJICAgIHsKKwkJCWlmIChkaWdpdCkKKwkJCSAgICBuID0gaSAtICcwJyArIE5NQVJLUzsKKwkJCWVsc2UKKwkJCSAgICBuID0gaSAtICdBJzsKKwkJCW5hbWVkZm1bbl0uZm1hcmsubWFyay5sbnVtID0gMDsKKwkJCXZpbV9mcmVlKG5hbWVkZm1bbl0uZm5hbWUpOworCQkJbmFtZWRmbVtuXS5mbmFtZSA9IE5VTEw7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICBlbHNlCisJCXN3aXRjaCAoKnApCisJCXsKKwkJICAgIGNhc2UgJyInOiBjdXJidWYtPmJfbGFzdF9jdXJzb3IubG51bSA9IDA7IGJyZWFrOworCQkgICAgY2FzZSAnXic6IGN1cmJ1Zi0+Yl9sYXN0X2luc2VydC5sbnVtID0gMDsgYnJlYWs7CisJCSAgICBjYXNlICcuJzogY3VyYnVmLT5iX2xhc3RfY2hhbmdlLmxudW0gPSAwOyBicmVhazsKKwkJICAgIGNhc2UgJ1snOiBjdXJidWYtPmJfb3Bfc3RhcnQubG51bSAgICA9IDA7IGJyZWFrOworCQkgICAgY2FzZSAnXSc6IGN1cmJ1Zi0+Yl9vcF9lbmQubG51bSAgICAgID0gMDsgYnJlYWs7CisjaWZkZWYgRkVBVF9WSVNVQUwKKwkJICAgIGNhc2UgJzwnOiBjdXJidWYtPmJfdmlzdWFsX3N0YXJ0LmxudW0gPSAwOyBicmVhazsKKwkJICAgIGNhc2UgJz4nOiBjdXJidWYtPmJfdmlzdWFsX2VuZC5sbnVtICAgPSAwOyBicmVhazsKKyNlbmRpZgorCQkgICAgY2FzZSAnICc6IGJyZWFrOworCQkgICAgZGVmYXVsdDogIEVNU0cyKF8oZV9pbnZhcmcyKSwgcCk7CisJCQkgICAgICByZXR1cm47CisJCX0KKwl9CisgICAgfQorfQorCiAjaWYgZGVmaW5lZChGRUFUX0pVTVBMSVNUKSB8fCBkZWZpbmVkKFBST1RPKQogLyoKICAqIHByaW50IHRoZSBqdW1wbGlzdApkaWZmIC0tZ2l0IGEvc3JjL21pc2MxLmMgYi9zcmMvbWlzYzEuYwppbmRleCA5NTU4Y2M1Li5lYzc0NDg2IDEwMDY0NAotLS0gYS9zcmMvbWlzYzEuYworKysgYi9zcmMvbWlzYzEuYwpAQCAtODM1Miw3ICs4MzUyLDggQEAKIAlidWZmZXIgPSBldmFsX3RvX3N0cmluZyhjbWQgKyAxLCAmcCk7CiAgICAgZWxzZQogI2VuZGlmCi0JYnVmZmVyID0gZ2V0X2NtZF9vdXRwdXQoY21kLCAoZmxhZ3MgJiBFV19TSUxFTlQpID8gU0hFTExfU0lMRU5UIDogMCk7CisJYnVmZmVyID0gZ2V0X2NtZF9vdXRwdXQoY21kLCBOVUxMLAorCQkJCSAgICAgIChmbGFncyAmIEVXX1NJTEVOVCkgPyBTSEVMTF9TSUxFTlQgOiAwKTsKICAgICB2aW1fZnJlZShjbWQpOwogICAgIGlmIChidWZmZXIgPT0gTlVMTCkKIAlyZXR1cm4gMDsKQEAgLTg0NTEsOCArODQ1Miw5IEBACiAgKiBSZXR1cm5zIGFuIGFsbG9jYXRlZCBzdHJpbmcsIG9yIE5VTEwgZm9yIGVycm9yLgogICovCiAgICAgY2hhcl91ICoKLWdldF9jbWRfb3V0cHV0KGNtZCwgZmxhZ3MpCitnZXRfY21kX291dHB1dChjbWQsIGluZmlsZSwgZmxhZ3MpCiAgICAgY2hhcl91CSpjbWQ7CisgICAgY2hhcl91CSppbmZpbGU7CS8qIG9wdGlvbmFsIGlucHV0IGZpbGUgbmFtZSAqLwogICAgIGludAkJZmxhZ3M7CQkvKiBjYW4gYmUgU0hFTExfU0lMRU5UICovCiB7CiAgICAgY2hhcl91CSp0ZW1wbmFtZTsKQEAgLTg0NzMsNyArODQ3NSw3IEBACiAgICAgfQogCiAgICAgLyogQWRkIHRoZSByZWRpcmVjdGlvbiBzdHVmZiAqLwotICAgIGNvbW1hbmQgPSBtYWtlX2ZpbHRlcl9jbWQoY21kLCBOVUxMLCB0ZW1wbmFtZSk7CisgICAgY29tbWFuZCA9IG1ha2VfZmlsdGVyX2NtZChjbWQsIGluZmlsZSwgdGVtcG5hbWUpOwogICAgIGlmIChjb21tYW5kID09IE5VTEwpCiAJZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9zcmMvbm9ybWFsLmMgYi9zcmMvbm9ybWFsLmMKaW5kZXggOGVhNGJhNi4uNjMzZjIwOSAxMDA2NDQKLS0tIGEvc3JjL25vcm1hbC5jCisrKyBiL3NyYy9ub3JtYWwuYwpAQCAtMTA3OCw4ICsxMDc4LDExIEBACiAJZ290byBub3JtYWxfZW5kOwogICAgIH0KIAotICAgIG1zZ19kaWRvdXQgPSBGQUxTRTsJICAgIC8qIGRvbid0IHNjcm9sbCBzY3JlZW4gdXAgZm9yIG5vcm1hbCBjb21tYW5kICovCi0gICAgbXNnX2NvbCA9IDA7CisgICAgaWYgKGNhLmNtZGNoYXIgIT0gS19JR05PUkUpCisgICAgeworCW1zZ19kaWRvdXQgPSBGQUxTRTsgICAgLyogZG9uJ3Qgc2Nyb2xsIHNjcmVlbiB1cCBmb3Igbm9ybWFsIGNvbW1hbmQgKi8KKwltc2dfY29sID0gMDsKKyAgICB9CiAKICNpZmRlZiBGRUFUX1ZJU1VBTAogICAgIG9sZF9wb3MgPSBjdXJ3aW4tPndfY3Vyc29yOwkJLyogcmVtZW1iZXIgd2hlcmUgY3Vyc29yIHdhcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29wdGlvbi5jIGIvc3JjL29wdGlvbi5jCmluZGV4IDBiMzZkZmUuLjlhYjMzNDQgMTAwNjQ0Ci0tLSBhL3NyYy9vcHRpb24uYworKysgYi9zcmMvb3B0aW9uLmMKQEAgLTI4NjgsNiArMjg2OCwyMSBAQAogCSAgICBvcHRpb25zW29wdF9pZHhdLmRlZl92YWxbVklfREVGQVVMVF0gPSBwX2VuYzsKIAkgICAgb3B0aW9uc1tvcHRfaWR4XS5mbGFncyB8PSBQX0RFRl9BTExPQ0VEOwogCisjaWYgZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChNU1dJTikgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoTUFDT1MpIFwKKwkJfHwgZGVmaW5lZChWTVMpCisJICAgIGlmIChTVFJDTVAocF9lbmMsICJsYXRpbjEiKSA9PSAwCisjIGlmZGVmIEZFQVRfTUJZVEUKKwkJICAgIHx8IGVuY191dGY4CisjIGVuZGlmCisJCSAgICApCisJICAgIHsKKwkJLyogQWRqdXN0IHRoZSBkZWZhdWx0IGZvciAnaXNwcmludCcgdG8gbWF0Y2ggbGF0aW4xLiAqLworCQlzZXRfc3RyaW5nX29wdGlvbl9kaXJlY3QoKGNoYXJfdSAqKSJpc3AiLCAtMSwKKwkJCQkJICAgICAoY2hhcl91ICopIkAsMTYxLTI1NSIsIE9QVF9GUkVFKTsKKwkJKHZvaWQpaW5pdF9jaGFydGFiKCk7CisJICAgIH0KKyNlbmRpZgorCiAjIGlmIGRlZmluZWQoV0lOMzI2NCkgJiYgIWRlZmluZWQoRkVBVF9HVUkpCiAJICAgIC8qIFdpbjMyIGNvbnNvbGU6IFdoZW4gR2V0QUNQKCkgcmV0dXJucyBhIGRpZmZlcmVudCB2YWx1ZSBmcm9tCiAJICAgICAqIEdldENvbnNvbGVDUCgpIHNldCAndGVybWVuY29kaW5nJy4gKi8KQEAgLTQ2NzMsNiArNDY4OCw3IEBACiAgICAgY2hhcl91CSpzLCAqcDsKICAgICBpbnQJCWRpZF9jaGFydGFiID0gRkFMU0U7CiAgICAgY2hhcl91CSoqZ3ZhcnA7CisgICAgaW50CQlmcmVlX29sZHZhbCA9IChvcHRpb25zW29wdF9pZHhdLmZsYWdzICYgUF9BTExPQ0VEKTsKIAogICAgIC8qIEdldCB0aGUgZ2xvYmFsIG9wdGlvbiB0byBjb21wYXJlIHdpdGgsIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvIGNoZWNrCiAgICAgICogdHdvIHZhbHVlcyBmb3IgYWxsIGxvY2FsIG9wdGlvbnMuICovCkBAIC01ODE4LDggKzU4MzQsMTAgQEAKICNlbmRpZgogCS8qCiAJICogRnJlZSBzdHJpbmcgb3B0aW9ucyB0aGF0IGFyZSBpbiBhbGxvY2F0ZWQgbWVtb3J5LgorCSAqIFVzZSAiZnJlZV9vbGR2YWwiLCBiZWNhdXNlIHJlY3Vyc2l2ZW5lc3MgbWF5IGNoYW5nZSB0aGUgZmxhZ3MgdW5kZXIKKwkgKiBvdXIgZmluZ2VycyAoZXNwLiBpbml0X2hpZ2hsaWdodCgpKS4KIAkgKi8KLQlpZiAob3B0aW9uc1tvcHRfaWR4XS5mbGFncyAmIFBfQUxMT0NFRCkKKwlpZiAoZnJlZV9vbGR2YWwpCiAJICAgIGZyZWVfc3RyaW5nX29wdGlvbihvbGR2YWwpOwogCWlmIChuZXdfdmFsdWVfYWxsb2NlZCkKIAkgICAgb3B0aW9uc1tvcHRfaWR4XS5mbGFncyB8PSBQX0FMTE9DRUQ7CmRpZmYgLS1naXQgYS9zcmMvb3NfcmlzY29zLmMgYi9zcmMvb3NfcmlzY29zLmMKaW5kZXggYTFjZGFiNC4uN2M2NzU4YiAxMDA2NDQKLS0tIGEvc3JjL29zX3Jpc2Nvcy5jCisrKyBiL3NyYy9vc19yaXNjb3MuYwpAQCAtNjU0LDcgKzY1NCw3IEBACiAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogCXJldHVybiAtMTsKICAgICBzcHJpbnRmKChjaGFyICopYnVmLCAid2hpY2ggJXMiLCBuYW1lKTsKLSAgICBwID0gZ2V0X2NtZF9vdXRwdXQoYnVmLCBTSEVMTF9TSUxFTlQpOworICAgIHAgPSBnZXRfY21kX291dHB1dChidWYsIE5VTEwsIFNIRUxMX1NJTEVOVCk7CiAgICAgdmltX2ZyZWUoYnVmKTsKICAgICBpZiAocCA9PSBOVUxMKQogCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3NyYy9vc193aW4zMi5jIGIvc3JjL29zX3dpbjMyLmMKaW5kZXggYTM5ZTAwNS4uYmM2YzdkNCAxMDA2NDQKLS0tIGEvc3JjL29zX3dpbjMyLmMKKysrIGIvc3JjL29zX3dpbjMyLmMKQEAgLTM5MjYsMTAgKzM5MjYsMTAgQEAKIAllbHNlIGlmIChzWzBdID09IEVTQyAmJiBsZW4gPj0gMy0xICYmIHNbMV0gPT0gJ3wnKQogCXsKICNpZmRlZiBNQ0hfV1JJVEVfRFVNUAotCSAgICBjaGFyX3UqIG9sZF9zID0gczsKKwkgICAgY2hhcl91ICAqb2xkX3MgPSBzOwogI2VuZGlmCi0JICAgIGNoYXJfdSogcDsKLQkgICAgaW50IGFyZzEgPSAwLCBhcmcyID0gMDsKKwkgICAgY2hhcl91ICAqcDsKKwkgICAgaW50CSAgICBhcmcxID0gMCwgYXJnMiA9IDA7CiAKIAkgICAgc3dpdGNoIChzWzJdKQogCSAgICB7CmRpZmYgLS1naXQgYS9zcmMvcG8vc3YucG8gYi9zcmMvcG8vc3YucG8KaW5kZXggNGY4NGIyMS4uMmZlMzYxZSAxMDA2NDQKLS0tIGEvc3JjL3BvL3N2LnBvCisrKyBiL3NyYy9wby9zdi5wbwpAQCAtNSw3ICs1LDcgQEAKIG1zZ3N0ciAiIgogIlByb2plY3QtSWQtVmVyc2lvbjogVmltIDYuMlxuIgogIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA0LTAxLTMwIDExOjU3KzAxMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTA0LTI0IDIxOjU0KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTA5LTA3IDE3OjEwJXpcbiIKICJMYXN0LVRyYW5zbGF0b3I6IEpvaGFuIFN2ZWRiZXJnIDxqb2hhbkBzdmVkYmVyZy5wcC5zZT5cbiIKICJMYW5ndWFnZS1UZWFtOiBTd2VkaXNoIDxzdkBsaS5vcmc+XG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKQEAgLTEzNTcsNyArMTM1Nyw3IEBACiAKICM6IGV4X2RvY21kLmM6ODAzMwogbXNnaWQgIkUxOTQ6IE5vIGFsdGVybmF0ZSBmaWxlIG5hbWUgdG8gc3Vic3RpdHV0ZSBmb3IgJyMnIgotbXNnc3RyICJFMTk0OiBJbmdldCBhbHRlcm5hdGl2dCBmaWxuYW1uIGF0dCBieXRhIHV0ICcjJyBtZWQiCittc2dzdHIgIkUxOTQ6IEluZ2V0IGFsdGVybmF0aXZ0IGZpbG5hbW4gYXR0IGVyc+R0dGEgJyMnIG1lZCIKIAogIzogZXhfZG9jbWQuYzo4MDY0CiBtc2dpZCAiRTQ5NTogbm8gYXV0b2NvbW1hbmQgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFmaWxlPlwiIgpAQCAtMTM2OSwxMSArMTM2OSwxMSBAQAogCiAjOiBleF9kb2NtZC5jOjgwODMKIG1zZ2lkICJFNDk3OiBubyBhdXRvY29tbWFuZCBtYXRjaCBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPGFtYXRjaD5cIiIKLW1zZ3N0ciAiRTQ5NzogaW5nZXQgYXV0b2tvbW1hbmRvLXRy5GZmbmFtbiBhdHQgYnl0YSB1dCBcIjxhbWF0Y2g+XCIgbWVkIgorbXNnc3RyICJFNDk3OiBpbmdldCBhdXRva29tbWFuZG8tdHLkZmZuYW1uIGF0dCBlcnPkdHRhIFwiPGFtYXRjaD5cIiBtZWQiCiAKICM6IGV4X2RvY21kLmM6ODA5MwogbXNnaWQgIkU0OTg6IG5vIDpzb3VyY2UgZmlsZSBuYW1lIHRvIHN1YnN0aXR1dGUgZm9yIFwiPHNmaWxlPlwiIgotbXNnc3RyICJFNDk4OiBpbmdldCA6c291cmNlLWZpbG5hbW4gYXR0IGJ5dGEgdXQgXCI8c2ZpbGU+XCIgbWVkIgorbXNnc3RyICJFNDk4OiBpbmdldCA6c291cmNlLWZpbG5hbW4gYXR0IGVyc+R0dGEgXCI8c2ZpbGU+XCIgbWVkIgogCiAjOiBleF9kb2NtZC5jOjgxMzQKICMsIG5vLWMtZm9ybWF0CkBAIC0zMjYzLDcgKzMyNjMsNyBAQAogCiAjOiBtYWluLmM6MjUzMyBtYWluLmM6MjU1MwogbXNnaWQgIi1mb250IDxmb250Plx0XHRVc2UgPGZvbnQ+IGZvciBub3JtYWwgdGV4dCAoYWxzbzogLWZuKSIKLW1zZ3N0ciAiLWZvbnQgPHR5cHNuaXR0Plx0XHRBbnbkbmQgPHR5cHNuaXR0PiBm9nIgdmFubGlnIHRleHQgKOR2ZW46IC1mbikiCittc2dzdHIgIi1mb250IDx0eXBzbml0dD5cdEFuduRuZCA8dHlwc25pdHQ+IGb2ciB2YW5saWcgdGV4dCAo5HZlbjogLWZuKSIKIAogIzogbWFpbi5jOjI1MzQKIG1zZ2lkICItYm9sZGZvbnQgPGZvbnQ+XHRVc2UgPGZvbnQ+IGZvciBib2xkIHRleHQiCkBAIC02MzE0LDcgKzYzMTQsNyBAQAogCiAjOiBnbG9iYWxzLmg6MTI0MAogbXNnaWQgIkUzMzogTm8gcHJldmlvdXMgc3Vic3RpdHV0ZSByZWd1bGFyIGV4cHJlc3Npb24iCi1tc2dzdHIgIkUzMzogSW5nZXQgdGlkaWdhcmUgdXRieXRuaW5nc3JlZ3VsauRydXR0cnljayIKK21zZ3N0ciAiRTMzOiBJbmdldCB0aWRpZ2FyZSByZWd1bGrkcnQgdXR0cnljayBm9nIgZXJz5HR0bmluZyIKIAogIzogZ2xvYmFscy5oOjEyNDEKIG1zZ2lkICJFMzQ6IE5vIHByZXZpb3VzIGNvbW1hbmQiCmRpZmYgLS1naXQgYS9zcmMvcHJvdG8vZXhfZXZhbC5wcm8gYi9zcmMvcHJvdG8vZXhfZXZhbC5wcm8KaW5kZXggODBlY2ZjYS4uODE1NmM3YSAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL2V4X2V2YWwucHJvCisrKyBiL3NyYy9wcm90by9leF9ldmFsLnBybwpAQCAtMjMsNiArMjMsOCBAQAogdm9pZCBleF9jYXRjaCBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwogdm9pZCBleF9maW5hbGx5IF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CiB2b2lkIGV4X2VuZHRyeSBfX0FSR1MoKGV4YXJnX1QgKmVhcCkpOwordm9pZCBlbnRlcl9jbGVhbnVwIF9fQVJHUygoY2xlYW51cF9UICpjc3ApKTsKK3ZvaWQgbGVhdmVfY2xlYW51cCBfX0FSR1MoKGNsZWFudXBfVCAqY3NwKSk7CiBpbnQgY2xlYW51cF9jb25kaXRpb25hbHMgX19BUkdTKChzdHJ1Y3QgY29uZHN0YWNrICpjc3RhY2ssIGludCBzZWFyY2hlZF9jb25kLCBpbnQgaW5jbHVzaXZlKSk7CiB2b2lkIGV4X2VuZGZ1bmN0aW9uIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CiBpbnQgaGFzX3doaWxlX2NtZCBfX0FSR1MoKGNoYXJfdSAqcCkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL21hcmsucHJvIGIvc3JjL3Byb3RvL21hcmsucHJvCmluZGV4IGI5MGExYjAuLmY3ZTVjZjggMTAwNjQ0Ci0tLSBhL3NyYy9wcm90by9tYXJrLnBybworKysgYi9zcmMvcHJvdG8vbWFyay5wcm8KQEAgLTExLDYgKzExLDcgQEAKIHZvaWQgY2xyYWxsbWFya3MgX19BUkdTKChidWZfVCAqYnVmKSk7CiBjaGFyX3UgKmZtX2dldG5hbWUgX19BUkdTKChmbWFya19UICpmbWFyaywgaW50IGxlYWRfbGVuKSk7CiB2b2lkIGRvX21hcmtzIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7Cit2b2lkIGV4X2RlbG1hcmtzIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CiB2b2lkIGV4X2p1bXBzIF9fQVJHUygoZXhhcmdfVCAqZWFwKSk7CiB2b2lkIGV4X2NoYW5nZXMgX19BUkdTKChleGFyZ19UICplYXApKTsKIHZvaWQgbWFya19hZGp1c3QgX19BUkdTKChsaW5lbnJfVCBsaW5lMSwgbGluZW5yX1QgbGluZTIsIGxvbmcgYW1vdW50LCBsb25nIGFtb3VudF9hZnRlcikpOwpkaWZmIC0tZ2l0IGEvc3JjL3Byb3RvL21pc2MxLnBybyBiL3NyYy9wcm90by9taXNjMS5wcm8KaW5kZXggM2ZhYzMzNC4uZmViOTY4YSAxMDA2NDQKLS0tIGEvc3JjL3Byb3RvL21pc2MxLnBybworKysgYi9zcmMvcHJvdG8vbWlzYzEucHJvCkBAIC04MSw3ICs4MSw3IEBACiBpbnQgbWF0Y2hfc3VmZml4IF9fQVJHUygoY2hhcl91ICpmbmFtZSkpOwogaW50IGdlbl9leHBhbmRfd2lsZGNhcmRzIF9fQVJHUygoaW50IG51bV9wYXQsIGNoYXJfdSAqKnBhdCwgaW50ICpudW1fZmlsZSwgY2hhcl91ICoqKmZpbGUsIGludCBmbGFncykpOwogdm9pZCBhZGRmaWxlIF9fQVJHUygoZ2FycmF5X1QgKmdhcCwgY2hhcl91ICpmLCBpbnQgZmxhZ3MpKTsKLWNoYXJfdSAqZ2V0X2NtZF9vdXRwdXQgX19BUkdTKChjaGFyX3UgKmNtZCwgaW50IGZsYWdzKSk7CitjaGFyX3UgKmdldF9jbWRfb3V0cHV0IF9fQVJHUygoY2hhcl91ICpjbWQsIGNoYXJfdSAqaW5maWxlLCBpbnQgZmxhZ3MpKTsKIHZvaWQgRnJlZVdpbGQgX19BUkdTKChpbnQgY291bnQsIGNoYXJfdSAqKmZpbGVzKSk7CiBpbnQgZ290b19pbSBfX0FSR1MoKHZvaWQpKTsKIC8qIHZpbTogc2V0IGZ0PWMgOiAqLwpkaWZmIC0tZ2l0IGEvc3JjL3JlZ2V4cC5jIGIvc3JjL3JlZ2V4cC5jCmluZGV4IDk3MTVhMWUuLmRhYzM0YTIgMTAwNjQ0Ci0tLSBhL3NyYy9yZWdleHAuYworKysgYi9zcmMvcmVnZXhwLmMKQEAgLTMzLDggKzMzLDggQEAKICAqIHByZWNlZGVuY2UgaXMgc3RydWN0dXJlZCBpbiByZWd1bGFyIGV4cHJlc3Npb25zLiAgU2VyaW91cyBjaGFuZ2VzIGluCiAgKiByZWd1bGFyLWV4cHJlc3Npb24gc3ludGF4IG1pZ2h0IHJlcXVpcmUgYSB0b3RhbCByZXRoaW5rLgogICoKLSAqIENoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgYnkgVG9ueSBBbmRyZXdzLCBPbGFmICdSaGlhbHRvJyBTZWliZXJ0LCBSb2JlcnQgV2ViYgotICogYW5kIEJyYW0gTW9vbGVuYWFyLgorICogQ2hhbmdlcyBoYXZlIGJlZW4gbWFkZSBieSBUb255IEFuZHJld3MsIE9sYWYgJ1JoaWFsdG8nIFNlaWJlcnQsIFJvYmVydAorICogV2ViYiwgQ2lhcmFuIE1jQ3JlZXNoIGFuZCBCcmFtIE1vb2xlbmFhci4KICAqIE5hbWVkIGNoYXJhY3RlciBjbGFzcyBzdXBwb3J0IGFkZGVkIGJ5IFdhbHRlciBCcmlzY29lICgxOTk4IEp1bCAwMSkKICAqLwogCkBAIC0zNzYsOSArMzc2LDE0IEBACiAgKiAgXHQJLSBUYWIgKFRBQikuCiAgKiAgXGUJLSBFc2NhcGUgKEVTQykuCiAgKiAgXGIJLSBCYWNrc3BhY2UgKEN0cmxfSCkuCisgKiAgXGQgIC0gQ2hhcmFjdGVyIGNvZGUgaW4gZGVjaW1hbCwgZWcgXGQxMjMKKyAqICBcbwktIENoYXJhY3RlciBjb2RlIGluIG9jdGFsLCBlZyBcbzgwCisgKiAgXHgJLSBDaGFyYWN0ZXIgY29kZSBpbiBoZXgsIGVnIFx4NGEKKyAqICBcdQktIE11bHRpYnl0ZSBjaGFyYWN0ZXIgY29kZSwgZWcgXHUyMGFjCisgKiAgXFUJLSBMb25nIG11bHRpYnl0ZSBjaGFyYWN0ZXIgY29kZSwgZWcgXFUxMjM0NTY3OAogICovCiBzdGF0aWMgY2hhcl91IFJFR0VYUF9JTlJBTkdFW10gPSAiXV4tblxcIjsKLXN0YXRpYyBjaGFyX3UgUkVHRVhQX0FCQlJbXSA9ICJucnRlYiI7CitzdGF0aWMgY2hhcl91IFJFR0VYUF9BQkJSW10gPSAibnJ0ZWJkb3h1VSI7CiAKIHN0YXRpYyBpbnQJYmFja3NsYXNoX3RyYW5zIF9fQVJHUygoaW50IGMpKTsKIHN0YXRpYyBpbnQJc2tpcF9jbGFzc19uYW1lIF9fQVJHUygoY2hhcl91ICoqcHApKTsKQEAgLTY4MSw2ICs2ODYsMTAgQEAKIHN0YXRpYyBpbnQJcGVla2NociBfX0FSR1MoKHZvaWQpKTsKIHN0YXRpYyB2b2lkCXNraXBjaHIgX19BUkdTKCh2b2lkKSk7CiBzdGF0aWMgdm9pZAl1bmdldGNociBfX0FSR1MoKHZvaWQpKTsKK3N0YXRpYyBpbnQJZ2V0aGV4Y2hycyBfX0FSR1MoKGludCBtYXhpbnB1dGxlbikpOworc3RhdGljIGludAlnZXRvY3RjaHJzIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludAlnZXRkZWNjaHJzIF9fQVJHUygodm9pZCkpOworc3RhdGljIGludAljb2xsX2dldF9jaGFyIF9fQVJHUygodm9pZCkpOwogc3RhdGljIHZvaWQJcmVnY29tcF9zdGFydCBfX0FSR1MoKGNoYXJfdSAqZXhwciwgaW50IGZsYWdzKSk7CiBzdGF0aWMgY2hhcl91CSpyZWcgX19BUkdTKChpbnQsIGludCAqKSk7CiBzdGF0aWMgY2hhcl91CSpyZWdicmFuY2ggX19BUkdTKChpbnQgKmZsYWdwKSk7CkBAIC0xNzIyLDYgKzE3MzEsNDIgQEAKIAkJCSAgICAgIGJyZWFrOwogCQkJICB9CiAKKwkJY2FzZSAnZCc6ICAgLyogJWQxMjMgZGVjaW1hbCAqLworCQljYXNlICdvJzogICAvKiAlbzEyMyBvY3RhbCAqLworCQljYXNlICd4JzogICAvKiAleGFiIGhleCAyICovCisJCWNhc2UgJ3UnOiAgIC8qICV1YWJjZCBoZXggNCAqLworCQljYXNlICdVJzogICAvKiAlVTEyMzRhYmNkIGhleCA4ICovCisJCQkgIHsKKwkJCSAgICAgIGludCBpOworCisJCQkgICAgICBzd2l0Y2ggKGMpCisJCQkgICAgICB7CisJCQkJICBjYXNlICdkJzogaSA9IGdldGRlY2NocnMoKTsgYnJlYWs7CisJCQkJICBjYXNlICdvJzogaSA9IGdldG9jdGNocnMoKTsgYnJlYWs7CisJCQkJICBjYXNlICd4JzogaSA9IGdldGhleGNocnMoMik7IGJyZWFrOworCQkJCSAgY2FzZSAndSc6IGkgPSBnZXRoZXhjaHJzKDQpOyBicmVhazsKKwkJCQkgIGNhc2UgJ1UnOiBpID0gZ2V0aGV4Y2hycyg4KTsgYnJlYWs7CisJCQkJICBkZWZhdWx0OiAgaSA9IC0xOyBicmVhazsKKwkJCSAgICAgIH0KKworCQkJICAgICAgaWYgKGkgPCAwKQorCQkJICAgICAgICAgIEVNU0dfTV9SRVRfTlVMTCgKKwkJCQkJXygiRTY3ODogSW52YWxpZCBjaGFyYWN0ZXIgYWZ0ZXIgJXMlJVtkeG91VV0iKSwKKwkJCQkJcmVnX21hZ2ljID09IE1BR0lDX0FMTCk7CisJCQkgICAgICByZXQgPSByZWdub2RlKEVYQUNUTFkpOworCQkJICAgICAgaWYgKGkgPT0gMCkKKwkJCQkgIHJlZ2MoMHgwYSk7CisJCQkgICAgICBlbHNlCisjaWZkZWYgRkVBVF9NQllURQorCQkJCSAgcmVnbWJjKGkpOworI2Vsc2UKKwkJCQkgIHJlZ2MoaSk7CisjZW5kaWYKKwkJCSAgICAgIHJlZ2MoTlVMKTsKKwkJCSAgICAgICpmbGFncCB8PSBIQVNXSURUSDsKKwkJCSAgICAgIGJyZWFrOworCQkJICB9CisKIAkJZGVmYXVsdDoKIAkJCSAgaWYgKFZJTV9JU0RJR0lUKGMpIHx8IGMgPT0gJzwnIHx8IGMgPT0gJz4nKQogCQkJICB7CkBAIC0xODE2LDYgKzE4NjEsMTEgQEAKIAkJCSAgICBlbHNlCiAjZW5kaWYKIAkJCQllbmRjID0gKnJlZ3BhcnNlKys7CisKKwkJCSAgICAvKiBIYW5kbGUgXG80MCwgXHgyMCBhbmQgXHUyMEFDIHN0eWxlIHNlcXVlbmNlcyAqLworCQkJICAgIGlmIChlbmRjID09ICdcXCcgJiYgIWNwb19saXQpCisJCQkJZW5kYyA9IGNvbGxfZ2V0X2NoYXIoKTsKKwogCQkJICAgIGlmIChzdGFydGMgPiBlbmRjKQogCQkJCUVNU0dfUkVUX05VTEwoXyhlX2ludnJhbmdlKSk7CiAjaWZkZWYgRkVBVF9NQllURQpAQCAtMTg3NSw2ICsxOTI1LDIyIEBACiAJCQkgICAgcmVncGFyc2UrKzsKIAkJCSAgICBzdGFydGMgPSAtMTsKIAkJCX0KKwkJCWVsc2UgaWYgKCpyZWdwYXJzZSA9PSAnZCcKKwkJCQl8fCAqcmVncGFyc2UgPT0gJ28nCisJCQkJfHwgKnJlZ3BhcnNlID09ICd4JworCQkJCXx8ICpyZWdwYXJzZSA9PSAndScKKwkJCQl8fCAqcmVncGFyc2UgPT0gJ1UnKQorCQkJeworCQkJICAgIHN0YXJ0YyA9IGNvbGxfZ2V0X2NoYXIoKTsKKwkJCSAgICBpZiAoc3RhcnRjID09IDApCisJCQkJcmVnYygweDBhKTsKKwkJCSAgICBlbHNlCisjaWZkZWYgRkVBVF9NQllURQorCQkJCXJlZ21iYyhzdGFydGMpOworI2Vsc2UKKwkJCQlyZWdjKHN0YXJ0Yyk7CisjZW5kaWYKKwkJCX0KIAkJCWVsc2UKIAkJCXsKIAkJCSAgICBzdGFydGMgPSBiYWNrc2xhc2hfdHJhbnMoKnJlZ3BhcnNlKyspOwpAQCAtMjUxNyw2ICsyNTgzLDEyMCBAQAogfQogCiAvKgorICogZ2V0IGFuZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBoZXggc3RyaW5nIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjdXJyZW50CisgKiBwb3NpdGlvbi4gUmV0dXJuIC0xIGZvciBpbnZhbGlkLCBvciAwLTI1NSBmb3IgdmFsaWQuIFBvc2l0aW9uIGlzIHVwZGF0ZWQ6CisgKiAgICAgYmxhaGJsYWhcJXgyMGFzZGYKKyAqICAgICAgICAgYmVmb3JlLV4gXi1hZnRlcgorICogVGhlIHBhcmFtZXRlciBjb250cm9scyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW5wdXQgY2hhcmFjdGVycy4gVGhpcyB3aWxsIGJlCisgKiAyIHdoZW4gcmVhZGluZyBhIFwleDIwIHNlcXVlbmNlIGFuZCA0IHdoZW4gcmVhZGluZyBhIFwldTIwQUMgc2VxdWVuY2UuCisgKi8KKyAgICBzdGF0aWMgaW50CitnZXRoZXhjaHJzKG1heGlucHV0bGVuKQorICAgIGludAkJbWF4aW5wdXRsZW47Cit7CisgICAgaW50CQluciA9IDA7CisgICAgaW50CQljOworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBtYXhpbnB1dGxlbjsgKytpKQorICAgIHsKKwljID0gcmVncGFyc2VbMF07CisJaWYgKCF2aW1faXN4ZGlnaXQoYykpCisJICAgIGJyZWFrOworCW5yIDw8PSA0OworCW5yIHw9IGhleDJucihjKTsKKwkrK3JlZ3BhcnNlOworICAgIH0KKworICAgIGlmIChpID09IDApCisJcmV0dXJuIC0xOworICAgIHJldHVybiBucjsKK30KKworLyoKKyAqIGdldCBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZGVjaW1hbCBzdHJpbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlCisgKiBjdXJyZW50IHBvc2l0aW9uLiBSZXR1cm4gLTEgZm9yIGludmFsaWQuICBDb25zdW1lcyBhbGwgZGlnaXRzLgorICovCisgICAgc3RhdGljIGludAorZ2V0ZGVjY2hycygpCit7CisgICAgaW50CQluciA9IDA7CisgICAgaW50CQljOworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDA7IDsgKytpKQorICAgIHsKKwljID0gcmVncGFyc2VbMF07CisJaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykKKwkgICAgYnJlYWs7CisJbnIgKj0gMTA7CisJbnIgKz0gYyAtICcwJzsKKwkrK3JlZ3BhcnNlOworICAgIH0KKworICAgIGlmIChpID09IDApCisJcmV0dXJuIC0xOworICAgIHJldHVybiBucjsKK30KKworLyoKKyAqIGdldCBhbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgb2N0YWwgc3RyaW5nIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjdXJyZW50CisgKiBwb3NpdGlvbi4gUmV0dXJuIC0xIGZvciBpbnZhbGlkLCBvciAwLTI1NSBmb3IgdmFsaWQuIFNtYXJ0IGVub3VnaCB0byBoYW5kbGUKKyAqIG51bWJlcnMgPiAzNzcgY29ycmVjdGx5IChmb3IgZXhhbXBsZSwgNDAwIGlzIHRyZWF0ZWQgYXMgNDApIGFuZCBkb2Vzbid0CisgKiB0cmVhdCA4IG9yIDkgYXMgcmVjb2duaXNlZCBjaGFyYWN0ZXJzLiBQb3NpdGlvbiBpcyB1cGRhdGVkOgorICogICAgIGJsYWhibGFoXCVvMjEwYXNkZgorICogICAgICAgICBiZWZvcmUtXiAgXi1hZnRlcgorICovCisgICAgc3RhdGljIGludAorZ2V0b2N0Y2hycygpCit7CisgICAgaW50CQluciA9IDA7CisgICAgaW50CQljOworICAgIGludAkJaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIG5yIDwgMDQwOyArK2kpCisgICAgeworCWMgPSByZWdwYXJzZVswXTsKKwlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCSAgICBicmVhazsKKwluciA8PD0gMzsKKwluciB8PSBoZXgybnIoYyk7CisJKytyZWdwYXJzZTsKKyAgICB9CisKKyAgICBpZiAoaSA9PSAwKQorCXJldHVybiAtMTsKKyAgICByZXR1cm4gbnI7Cit9CisKKy8qCisgKiBHZXQgYSBudW1iZXIgYWZ0ZXIgYSBiYWNrc2xhc2ggdGhhdCBpcyBpbnNpZGUgW10uCisgKiBXaGVuIG5vdGhpbmcgaXMgcmVjb2duaXplZCByZXR1cm4gYSBiYWNrc2xhc2guCisgKi8KKyAgICBzdGF0aWMgaW50Citjb2xsX2dldF9jaGFyKCkKK3sKKyAgICBpbnQJICAgIG5yID0gLTE7CisKKyAgICBzd2l0Y2ggKCpyZWdwYXJzZSsrKQorICAgIHsKKwljYXNlICdkJzogbnIgPSBnZXRkZWNjaHJzKCk7IGJyZWFrOworCWNhc2UgJ28nOiBuciA9IGdldG9jdGNocnMoKTsgYnJlYWs7CisJY2FzZSAneCc6IG5yID0gZ2V0aGV4Y2hycygyKTsgYnJlYWs7CisJY2FzZSAndSc6IG5yID0gZ2V0aGV4Y2hycyg0KTsgYnJlYWs7CisJY2FzZSAnVSc6IG5yID0gZ2V0aGV4Y2hycyg4KTsgYnJlYWs7CisgICAgfQorICAgIGlmIChuciA8IDApCisgICAgeworCS8qIElmIGdldHRpbmcgdGhlIG51bWJlciBmYWlscyBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZTogdGhlIGNoYXJhY3RlcgorCSAqIGlzIGEgYmFja3NsYXNoLiAqLworCS0tcmVncGFyc2U7CisJbnIgPSAnXFwnOworICAgIH0KKyAgICByZXR1cm4gbnI7Cit9CisKKy8qCiAgKiByZWFkX2xpbWl0cyAtIFJlYWQgdHdvIGludGVnZXJzIHRvIGJlIHRha2VuIGFzIGEgbWluaW11bSBhbmQgbWF4aW11bS4KICAqIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaXMgJy0nLCB0aGVuIHRoZSByYW5nZSBpcyByZXZlcnNlZC4KICAqIFNob3VsZCBlbmQgd2l0aCAnZW5kJy4gIElmIG1pbnZhbCBpcyBtaXNzaW5nLCB6ZXJvIGlzIGRlZmF1bHQsIGlmIG1heHZhbCBpcwpkaWZmIC0tZ2l0IGEvc3JjL3N0cnVjdHMuaCBiL3NyYy9zdHJ1Y3RzLmgKaW5kZXggZDQzZTU1Yy4uOTI5N2YxMyAxMDA2NDQKLS0tIGEvc3JjL3N0cnVjdHMuaAorKysgYi9zcmMvc3RydWN0cy5oCkBAIC02NzAsNiArNjcwLDE3IEBACiAjZGVmaW5lIEVUX0VSUk9SCTEJLyogZXJyb3IgZXhjZXB0aW9uICovCiAjZGVmaW5lIEVUX0lOVEVSUlVQVAkyCS8qIGludGVycnVwdCBleGNlcHRpb24gdHJpZ2dlcmVkIGJ5IEN0cmwtQyAqLwogCisvKgorICogU3RydWN0dXJlIHRvIHNhdmUgdGhlIGVycm9yL2ludGVycnVwdC9leGNlcHRpb24gc3RhdGUgYmV0d2VlbiBjYWxscyB0bworICogZW50ZXJfY2xlYW51cCgpIGFuZCBsZWF2ZV9jbGVhbnVwKCkuICBNdXN0IGJlIGFsbG9jYXRlZCBhcyBhbiBhdXRvbWF0aWMKKyAqIHZhcmlhYmxlIGJ5IHRoZSAoY29tbW9uKSBjYWxsZXIgb2YgdGhlc2UgZnVuY3Rpb25zLgorICovCit0eXBlZGVmIHN0cnVjdCBjbGVhbnVwX3N0dWZmIGNsZWFudXBfVDsKK3N0cnVjdCBjbGVhbnVwX3N0dWZmCit7CisgICAgaW50IHBlbmRpbmc7CQkvKiBlcnJvci9pbnRlcnJ1cHQvZXhjZXB0aW9uIHN0YXRlICovCisgICAgZXhjZXB0X1QgKmV4Y2VwdGlvbjsJLyogZXhjZXB0aW9uIHZhbHVlICovCit9OwogCiAjaWZkZWYgRkVBVF9TWU5fSEwKIC8qIHN0cnVjdCBwYXNzZWQgdG8gaW5faWRfbGlzdCgpICovCmRpZmYgLS1naXQgYS9zcmMvc3ludGF4LmMgYi9zcmMvc3ludGF4LmMKaW5kZXggZTVkMWIxOC4uZTk5ZjA5NyAxMDA2NDQKLS0tIGEvc3JjL3N5bnRheC5jCisrKyBiL3NyYy9zeW50YXguYwpAQCAtNjAxNiw3ICs2MDE2LDE4IEBACiAgICAgICogSWYgc3ludGF4IGhpZ2hsaWdodGluZyBpcyBlbmFibGVkIGxvYWQgdGhlIGhpZ2hsaWdodGluZyBmb3IgaXQuCiAgICAgICovCiAgICAgaWYgKGdldF92YXJfdmFsdWUoKGNoYXJfdSAqKSJnOnN5bnRheF9vbiIpICE9IE5VTEwpCi0JKHZvaWQpY21kX3J1bnRpbWUoKGNoYXJfdSAqKSJzeW50YXgvc3luY29sb3IudmltIiwgVFJVRSk7CisgICAgeworCXN0YXRpYyBpbnQJcmVjdXJzaXZlID0gMDsKKworCWlmIChyZWN1cnNpdmUgPj0gNSkKKwkgICAgRU1TRyhfKCJFNjc5OiByZWN1cnNpdmUgbG9vcCBsb2FkaW5nIHN5bmNvbG9yLnZpbSIpKTsKKwllbHNlCisJeworCSAgICArK3JlY3Vyc2l2ZTsKKwkgICAgKHZvaWQpY21kX3J1bnRpbWUoKGNoYXJfdSAqKSJzeW50YXgvc3luY29sb3IudmltIiwgVFJVRSk7CisJICAgIC0tcmVjdXJzaXZlOworCX0KKyAgICB9CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3RkaXIvdGVzdC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Qub2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0MmFmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Qub2sKQEAgLTAsMCArMSw5MiBAQAorUmVzdWx0cyBvZiB0ZXN0NDkudmltOgorKioqIFRlc3QgICAxOiBPSyAoMzQ2OTUpCisqKiogVGVzdCAgIDI6IE9LICgzNDY5NSkKKyoqKiBUZXN0ICAgMzogT0sgKDEzODQ2NDgxOTUpCisqKiogVGVzdCAgIDQ6IE9LICgzMjg4MykKKyoqKiBUZXN0ICAgNTogT0sgKDMyODgzKQorKioqIFRlc3QgICA2OiBPSyAoNjAzOTc4OTQ3KQorKioqIFRlc3QgICA3OiBPSyAoOTA1NjMpCisqKiogVGVzdCAgIDg6IE9LICg1NjI0OTM0MzEpCisqKiogVGVzdCAgIDk6IE9LICgzNjMpCisqKiogVGVzdCAgMTA6IE9LICg1NTk2MTUpCisqKiogVGVzdCAgMTE6IE9LICgyMDQ5KQorKioqIFRlc3QgIDEyOiBPSyAoMzUyMjU2KQorKioqIFRlc3QgIDEzOiBPSyAoMTQ1KQorKioqIFRlc3QgIDE0OiBPSyAoNDI0MTMpCisqKiogVGVzdCAgMTU6IE9LICg0MjQxMykKKyoqKiBUZXN0ICAxNjogT0sgKDg3MjIpCisqKiogVGVzdCAgMTc6IE9LICgyODUxMjc5OTMpCisqKiogVGVzdCAgMTg6IE9LICg2NzIyNDU4MykKKyoqKiBUZXN0ICAxOTogT0sgKDY5Mjc1OTczKQorKioqIFRlc3QgIDIwOiBPSyAoMTg3NDU3NTA4NSkKKyoqKiBUZXN0ICAyMTogT0sgKDE0NzkzMjIyNSkKKyoqKiBUZXN0ICAyMjogT0sgKDQxNjEpCisqKiogVGVzdCAgMjM6IE9LICg0OSkKKyoqKiBUZXN0ICAyNDogT0sgKDQxKQorKioqIFRlc3QgIDI1OiBPSyAoMjYwMTc3ODExKQorKioqIFRlc3QgIDI2OiBPSyAoMTY4MTUwMDQ3NikKKyoqKiBUZXN0ICAyNzogT0sgKDE5OTY0NTkpCisqKiogVGVzdCAgMjg6IE9LICgxOTk2NDU5KQorKioqIFRlc3QgIDI5OiBPSyAoMTcwNDI4NTU1KQorKioqIFRlc3QgIDMwOiBPSyAoMTkwOTA1MTczKQorKioqIFRlc3QgIDMxOiBPSyAoMTkwOTA1MTczKQorKioqIFRlc3QgIDMyOiBPSyAoMzU0ODMzMDY3KQorLS0tIFRlc3QgIDMzOiBzdW0gPSAxNzgyNzU2MDAgKG9rKQorKioqIFRlc3QgIDMzOiBPSyAoMTIxNjkwNzUzOCkKKyoqKiBUZXN0ICAzNDogT0sgKDIxNDY1ODQ4NjgpCisqKiogVGVzdCAgMzU6IE9LICgyMTQ2NTg0ODY4KQorKioqIFRlc3QgIDM2OiBPSyAoMTA3MTY0NDY3MikKKyoqKiBUZXN0ICAzNzogT0sgKDEwNzE2NDQ2NzIpCisqKiogVGVzdCAgMzg6IE9LICgzNTc5MDg0ODApCisqKiogVGVzdCAgMzk6IE9LICgzNTc5MDg0ODApCisqKiogVGVzdCAgNDA6IE9LICgzNTc5MDg0ODApCisqKiogVGVzdCAgNDE6IE9LICgzMDc2MDk1KQorKioqIFRlc3QgIDQyOiBPSyAoMTUwNTE1NTk0OSkKKyoqKiBUZXN0ICA0MzogT0sgKDExNTc3NjMzMjkpCisqKiogVGVzdCAgNDQ6IE9LICgxMDMxNzYxNDA3KQorKioqIFRlc3QgIDQ1OiBPSyAoMTE1Nzc2MzMyOSkKKyoqKiBUZXN0ICA0NjogT0sgKDczOTQwNykKKyoqKiBUZXN0ICA0NzogT0sgKDM3MTIxMzkzNSkKKyoqKiBUZXN0ICA0ODogT0sgKDc1NjI1NTQ2MSkKKyoqKiBUZXN0ICA0OTogT0sgKDE3OTAwMDY2OSkKKyoqKiBUZXN0ICA1MDogT0sgKDM2MzU1MDA0NSkKKyoqKiBUZXN0ICA1MTogT0sgKDQwNzQ0NjY3KQorKioqIFRlc3QgIDUyOiBPSyAoMTI0NzExMjAxMSkKKyoqKiBUZXN0ICA1MzogT0sgKDEzMTA3MSkKKyoqKiBUZXN0ICA1NDogT0sgKDIwNDcpCisqKiogVGVzdCAgNTU6IE9LICgxMDIzKQorKioqIFRlc3QgIDU2OiBPSyAoNTExKQorKioqIFRlc3QgIDU3OiBPSyAoMjE0NzQ1MDg4MCkKKyoqKiBUZXN0ICA1ODogT0sgKDYyNDk0NSkKKyoqKiBUZXN0ICA1OTogT0sgKDIwMzg0MzE3NDMpCisqKiogVGVzdCAgNjA6IE9LICgzMTE1MTEzMzkpCisqKiogVGVzdCAgNjE6IE9LICgzNzQ4ODk1MTcpCisqKiogVGVzdCAgNjI6IE9LICgyODYzMzExNTMpCisqKiogVGVzdCAgNjM6IE9LICgyMzY5NzgxMjcpCisqKiogVGVzdCAgNjQ6IE9LICgxNDk5NjQ1MzM1KQorKioqIFRlc3QgIDY1OiBPSyAoNzAxODcpCisqKiogVGVzdCAgNjY6IE9LICg1NDY0KQorKioqIFRlc3QgIDY3OiBPSyAoMjEyNTE0NDIzKQorKioqIFRlc3QgIDY4OiBPSyAoMjEyNTE0NDIzKQorKioqIFRlc3QgIDY5OiBPSyAoODk5NTQ3MSkKKyoqKiBUZXN0ICA3MDogT0sgKDY5NTQ0Mjc3KQorKioqIFRlc3QgIDcxOiBPSyAoMzQ4ODY5OTcpCisqKiogVGVzdCAgNzI6IE9LICgxNzg5NTY5MzY1KQorKioqIFRlc3QgIDczOiBPSyAoOTAzMjYxNSkKKyoqKiBUZXN0ICA3NDogT0sgKDIyNDkwNzY2OSkKKyoqKiBUZXN0ICA3NTogT0sgKDIwMDA0MDM0MDgpCisqKiogVGVzdCAgNzY6IE9LICgxNjEwMDg3OTM1KQorKioqIFRlc3QgIDc3OiBPSyAoMTM4ODY3MSkKKyoqKiBUZXN0ICA3ODogT0sgKDEzNDIxNzcyOCkKKyoqKiBUZXN0ICA3OTogT0sgKDcwMjg4OTI5KQorKioqIFRlc3QgIDgwOiBPSyAoMTc4OTU3NjUpCisqKiogVGVzdCAgODE6IE9LICgzODcpCisqKiogVGVzdCAgODI6IE9LICg4NDU0NDAxKQorKioqIFRlc3QgIDgzOiBPSyAoMjgzNSkKKyoqKiBUZXN0ICA4NDogT0sgKDkzNDc4MjEwMSkKKyoqKiBUZXN0ICA4NTogT0sgKDE5ODY4OSkKKy0tLSBUZXN0ICA4NjogQWxsIHRlc3RzIHdlcmUgcnVuIHdpdGggdGhyb3dpbmcgZXhjZXB0aW9ucyBvbiBlcnJvci4KKwkgICAgICBUaGUgJFZJTU5PRVJSVEhST1cgY29udHJvbCBpcyBub3QgY29uZmlndXJlZC4KKy0tLSBUZXN0ICA4NjogQWxsIHRlc3RzIHdlcmUgcnVuIHdpdGggdGhyb3dpbmcgZXhjZXB0aW9ucyBvbiBpbnRlcnJ1cHQuCisJICAgICAgVGhlICRWSU1OT0lOVFRIUk9XIGNvbnRyb2wgaXMgbm90IGNvbmZpZ3VyZWQuCisqKiogVGVzdCAgODY6IE9LICg1MDQ0Mzk5NSkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyNC5pbiBiL3NyYy90ZXN0ZGlyL3Rlc3QyNC5pbgppbmRleCA4NDcyMWQ5Li5iN2JiZWRmIDEwMDY0NAotLS0gYS9zcmMvdGVzdGRpci90ZXN0MjQuaW4KKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI0LmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3QyNC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3QyNC5vawppbmRleCA4OTZiNTBhLi5kNWJjOTU2IDEwMDY0NAotLS0gYS9zcmMvdGVzdGRpci90ZXN0MjQub2sKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDI0Lm9rCkBAIC01LDMgKzUsMTUgQEAKIHRlc3QgdGV4dCB0ZXN0IHRleHQKIHRlc3QgdGV4dCB0ZXN0IHRleHQKIHRlc3QgdGV4dCB0ZXN0IHRleHQKK3Rlc3QgdGV4dCB0ZXN0IHRleHQgIHg2MQordGVzdCB0ZXh0IHRlc3QgdGV4dCAgeDYwLXg2NAordGVzdCB0ZXh0IHRlc3QgdGV4dCAgeDc4IDUKK3Rlc3QgdGV4dCB0ZXN0IHRleHQgIG8xNDMKK3Rlc3QgdGV4dCB0ZXN0IHRleHQgIG8xNDAtbzE0NAordGVzdCB0ZXh0IHRlc3QgdGV4dCAgbzQxIDcKK3Rlc3QgdGV4dCB0ZXN0IHRleHQgIFwleDQyCit0ZXN0IHRleHQgdGVzdCB0ZXh0ICBcJW8xMDMKK3Rlc3QgdGV4dCB0ZXN0IHRleHQgIFtceDAwXQordGVzdCB0ZXh0IHRlc3QgdGV4dCAgW1x4MDAtXHgxMF0KK3Rlc3QgdGV4dCB0ZXN0IHRleHQgIFtceC16XQordGVzdCB0ZXh0IHRlc3QgdGV4dCAgW1x1LXpdCmRpZmYgLS1naXQgYS9zcmMvdGVzdGRpci90ZXN0NDQuaW4gYi9zcmMvdGVzdGRpci90ZXN0NDQuaW4KaW5kZXggMjc0OGUzZC4uNDU1YzNlMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3RkaXIvdGVzdDQ0LmluCisrKyBiL3NyYy90ZXN0ZGlyL3Rlc3Q0NC5pbgpAQCAtMjEsNiArMjEsMTIgQEAKIC/guKHguYgKIHg6IiBmaW5kIHdvcmQgYnkgY2hhbmdlIG9mIHdvcmQgY2xhc3MKIC/jgaFcPOOCq+ODqFw+44GvCit4OiIgVGVzdCBcJXUsIFtcdV0gYW5kIGZyaWVuZHMKKy9cJXUyMGFjCit4L1tcdTRmN2ZcdTU5MjldXCsKK3gvXCVVMTIzNDU2NzgKK3gvW1xVMTIzNGFiY2RcdTEyMzRcdWFiY2RdCit4L1wlZDIxODc5YgogeDo/XjE/LCR3ISB0ZXN0Lm91dAogOmUhIHRlc3Qub3V0CiBHOnB1dCA9bWF0Y2hzdHIoXCLXkNeR15LXk1wiLCBcIi5cIiwgMCwgMikgIiDXkQpAQCAtNDIsMyArNDgsOCBAQAogOSDguKvguKHguYh4IOC4reC4oXgKIGEg4Lit4LiheCDguKvguKHguYh4CiBiIOOBoeOCq+ODqOOBrworYyB4IMKs4oKseAorZCDlpKnkvb94CitlIPySjYWZuHkKK2Yg/JKNiq+NegorZyBh5ZW3YmIKZGlmZiAtLWdpdCBhL3NyYy90ZXN0ZGlyL3Rlc3Q0NC5vayBiL3NyYy90ZXN0ZGlyL3Rlc3Q0NC5vawppbmRleCA4NmY3OWQ0Li40MDE2MWU1IDEwMDY0NAotLS0gYS9zcmMvdGVzdGRpci90ZXN0NDQub2sKKysrIGIvc3JjL3Rlc3RkaXIvdGVzdDQ0Lm9rCkBAIC05LDYgKzksMTEgQEAKIDkg4Lir4Lih4LmIeCDguK14CiBhIOC4reC4oXgg4LireAogYiDjgqvjg6jjga8KK2MgeCDCrHgKK2Qg5L2/eAorZSB5CitmIHoKK2cgYWJiCiDXkQog15HXkgog15AKZGlmZiAtLWdpdCBhL3NyYy92aW0uaCBiL3NyYy92aW0uaAppbmRleCAzNzk2NTYxLi42NmVlZDM1IDEwMDY0NAotLS0gYS9zcmMvdmltLmgKKysrIGIvc3JjL3ZpbS5oCkBAIC03NTMsNyArNzUzLDYgQEAKICNkZWZpbmUgQkxOX0NVUkJVRgkxCS8qIE1heSByZS11c2UgY3VyYnVmIGZvciBuZXcgYnVmZmVyICovCiAjZGVmaW5lIEJMTl9MSVNURUQJMgkvKiBQdXQgbmV3IGJ1ZmZlciBpbiBidWZmZXIgbGlzdCAqLwogI2RlZmluZSBCTE5fRFVNTVkJNAkvKiBBbGxvY2F0aW5nIGR1bW15IGJ1ZmZlciAqLwotI2RlZmluZSBCTE5fRk9SQ0UJOAkvKiBEb24ndCBhYm9ydCBvbiBlcnJvciAqLwogCiAvKiBWYWx1ZXMgZm9yIGluX2NpbmtleXMoKSAqLwogI2RlZmluZSBLRVlfT1BFTl9GT1JXCTB4MTAxCg==